Resources/public/js/jquery.jeditable.js
author ymh <ymh.work@gmail.com>
Fri, 26 Sep 2014 10:04:40 +0200
changeset 136 f209fcb0df6c
parent 2 13f43f53d0ba
permissions -rwxr-xr-x
Added tag V00.18 for changeset ab728cb3632c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
2
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
 * Jeditable - jQuery in place edit plugin
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * Licensed under the MIT license:
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *   http://www.opensource.org/licenses/mit-license.php
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * Project home:
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 *   http://www.appelsiini.net/projects/jeditable
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *    http://www.dyve.net/jquery/?editable
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
/**
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
  * Version 1.7.2-dev
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
  *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
  * ** means there is basic unit tests for this parameter. 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
  *
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
  * @name  Jeditable
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
  * @type  jQuery
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
  * @param String  target             (POST) URL or function to send edited content to **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
  * @param Hash    options            additional options 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
  * @param String  options[method]    method to use to send edited content (POST or PUT) **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
  * @param Function options[callback] Function to run after submitting edited content **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
  * @param String  options[name]      POST parameter name of edited content
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
  * @param String  options[id]        POST parameter name of edited div id
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
  * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
  * @param String  options[type]      text, textarea or select (or any 3rd party input type) **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
  * @param Integer options[rows]      number of rows if using textarea ** 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
  * @param Integer options[cols]      number of columns if using textarea **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
  * @param Mixed   options[height]    'auto', 'none' or height in pixels **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
  * @param Mixed   options[width]     'auto', 'none' or width in pixels **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
  * @param String  options[loadurl]   URL to fetch input content before editing **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
  * @param String  options[loadtype]  Request type for load url. Should be GET or POST.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
  * @param String  options[loadtext]  Text to display while loading external content.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
  * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
  * @param Mixed   options[data]      Or content given as paramameter. String or function.**
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
  * @param String  options[indicator] indicator html to show when saving
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
  * @param String  options[tooltip]   optional tooltip text via title attribute **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
  * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
  * @param String  options[submit]    submit button value, empty means no button **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
  * @param String  options[cancel]    cancel button value, empty means no button **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
  * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
  * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
  * @param String  options[select]    true or false, when true text is highlighted ??
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
  * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
  * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
  *             
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
  * @param Function options[onsubmit] function(settings, original) { ... } called before submit
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
  * @param Function options[onreset]  function(settings, original) { ... } called before reset
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
  * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
  *             
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
  * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
  *             
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
  */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
(function($) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    $.fn.editable = function(target, options) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        if ('disable' == target) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            $(this).data('disabled.editable', true);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
            return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
        if ('enable' == target) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            $(this).data('disabled.editable', false);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
            return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        if ('destroy' == target) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
            $(this)
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
                .unbind($(this).data('event.editable'))
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
                .removeData('disabled.editable')
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
                .removeData('event.editable');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
            return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        /* setup some functions */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        var plugin   = $.editable.types[settings.type].plugin || function() { };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        var submit   = $.editable.types[settings.type].submit || function() { };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
        var buttons  = $.editable.types[settings.type].buttons 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                    || $.editable.types['defaults'].buttons;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        var content  = $.editable.types[settings.type].content 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
                    || $.editable.types['defaults'].content;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        var element  = $.editable.types[settings.type].element 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                    || $.editable.types['defaults'].element;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
        var reset    = $.editable.types[settings.type].reset 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                    || $.editable.types['defaults'].reset;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        var callback = settings.callback || function() { };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        var onedit   = settings.onedit   || function() { }; 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        var onsubmit = settings.onsubmit || function() { };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        var onreset  = settings.onreset  || function() { };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        var onerror  = settings.onerror  || reset;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
          
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        /* Show tooltip. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        if (settings.tooltip) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
            $(this).attr('title', settings.tooltip);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        settings.autowidth  = 'auto' == settings.width;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        settings.autoheight = 'auto' == settings.height;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        return this.each(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
            /* Save this to self because this changes when scope changes. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
            var self = this;  
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                   
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
            /* Inlined block elements lose their width and height after first edit. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
            /* Save them for later use as workaround. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
            var savedwidth  = $(self).width();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
            var savedheight = $(self).height();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
            /* Save so it can be later used by $.editable('destroy') */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
            $(this).data('event.editable', settings.event);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
            /* If element is empty add something clickable (if requested) */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
            if (!$.trim($(this).html())) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                $(this).html(settings.placeholder);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
            $(this).bind(settings.event, function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                /* Abort if element is disabled. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                if (true === $(this).data('disabled.editable')) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                /* Prevent throwing an exeption if edit field is clicked again. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
                if (self.editing) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
                    return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
                /* Abort if onedit hook returns false. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
                if (false === onedit.apply(this, [settings, self])) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
                   return;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
                /* Prevent default action and bubbling. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
                e.preventDefault();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
                e.stopPropagation();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
                /* Remove tooltip. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
                if (settings.tooltip) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
                    $(self).removeAttr('title');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
                /* Figure out how wide and tall we are, saved width and height. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
                /* Workaround for http://dev.jquery.com/ticket/2190 */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
                if (0 == $(self).width()) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
                    settings.width  = savedwidth;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
                    settings.height = savedheight;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
                } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
                    if (settings.width != 'none') {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                        settings.width = 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                            settings.autowidth ? $(self).width()  : settings.width;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
                    if (settings.height != 'none') {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
                        settings.height = 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
                            settings.autoheight ? $(self).height() : settings.height;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
                /* Remove placeholder text, replace is here because of IE. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
                if ($(this).html().toLowerCase().replace(/(;|"|\/)/g, '') == 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
                    settings.placeholder.toLowerCase().replace(/(;|"|\/)/g, '')) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                        $(this).html('');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
                                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
                self.editing    = true;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
                self.revert     = $(self).html();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
                $(self).html('');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
                /* Create the form object. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
                var form = $('<form />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
                /* Apply css or style or both. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
                if (settings.cssclass) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
                    if ('inherit' == settings.cssclass) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
                        form.attr('class', $(self).attr('class'));
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
                    } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
                        form.attr('class', settings.cssclass);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
                if (settings.style) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
                    if ('inherit' == settings.style) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
                        form.attr('style', $(self).attr('style'));
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
                        /* IE needs the second line or display wont be inherited. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
                        form.css('display', $(self).css('display'));                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
                    } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
                        form.attr('style', settings.style);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
                /* Add main input element to form and store it in input. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
                var input = element.apply(form, [settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
                /* Set input content via POST, GET, given data or existing value. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
                var input_content;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
                if (settings.loadurl) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
                    var t = setTimeout(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
                        input.disabled = true;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
                        content.apply(form, [settings.loadtext, settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
                    }, 100);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
                    var loaddata = {};
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
                    loaddata[settings.id] = self.id;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
                    if ($.isFunction(settings.loaddata)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
                    } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
                        $.extend(loaddata, settings.loaddata);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
                    $.ajax({
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
                       type : settings.loadtype,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
                       url  : settings.loadurl,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
                       data : loaddata,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
                       async : false,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
                       success: function(result) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
                          window.clearTimeout(t);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
                          input_content = result;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
                          input.disabled = false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
                       }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
                } else if (settings.data) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
                    input_content = settings.data;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
                    if ($.isFunction(settings.data)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
                        input_content = settings.data.apply(self, [self.revert, settings]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
                } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
                    input_content = self.revert; 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
                content.apply(form, [input_content, settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
                input.attr('name', settings.name);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
                /* Add buttons to the form. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
                buttons.apply(form, [settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
         
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
                /* Add created form to self. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
                $(self).append(form);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
         
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
                /* Attach 3rd party plugin if requested. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
                plugin.apply(form, [settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
                /* Focus to first visible form element. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
                $(':input:visible:enabled:first', form).focus();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
                /* Highlight input contents when requested. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
                if (settings.select) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
                    input.select();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
                /* discard changes if pressing esc */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
                input.keydown(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
                    if (e.keyCode == 27) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
                        e.preventDefault();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
                        reset.apply(form, [settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
                });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
                /* Discard, submit or nothing with changes when clicking outside. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
                /* Do nothing is usable when navigating with tab. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
                var t;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
                if ('cancel' == settings.onblur) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
                    input.blur(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
                        /* Prevent canceling if submit was clicked. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
                        t = setTimeout(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
                            reset.apply(form, [settings, self]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
                        }, 500);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
                } else if ('submit' == settings.onblur) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
                    input.blur(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
                        /* Prevent double submit if submit was clicked. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
                        t = setTimeout(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
                            form.submit();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
                        }, 200);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
                } else if ($.isFunction(settings.onblur)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
                    input.blur(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
                        settings.onblur.apply(self, [input.val(), settings]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
                } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
                    input.blur(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
                      /* TODO: maybe something here */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
                form.submit(function(e) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
                    if (t) { 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
                        clearTimeout(t);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
                    /* Do no submit. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
                    e.preventDefault(); 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
                    /* Call before submit hook. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
                    /* If it returns false abort submitting. */                    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
                    if (false !== onsubmit.apply(form, [settings, self])) { 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
                        /* Custom inputs call before submit hook. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
                        /* If it returns false abort submitting. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
                        if (false !== submit.apply(form, [settings, self])) { 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
                          /* Check if given target is function */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
                          if ($.isFunction(settings.target)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
                              var str = settings.target.apply(self, [input.val(), settings]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
                              $(self).html(str);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
                              self.editing = false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
                              callback.apply(self, [self.innerHTML, settings]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
                              /* TODO: this is not dry */                              
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
                              if (!$.trim($(self).html())) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
                                  $(self).html(settings.placeholder);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
                              }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
                          } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
                              /* Add edited content and id of edited element to POST. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
                              var submitdata = {};
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
                              submitdata[settings.name] = input.val();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
                              submitdata[settings.id] = self.id;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
                              /* Add extra data to be POST:ed. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
                              if ($.isFunction(settings.submitdata)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
                                  $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
                              } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
                                  $.extend(submitdata, settings.submitdata);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
                              }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
                              /* Quick and dirty PUT support. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
                              if ('PUT' == settings.method) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
                                  submitdata['_method'] = 'put';
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
                              }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
                              /* Show the saving indicator. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
                              $(self).html(settings.indicator);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
                              
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
                              /* Defaults for ajaxoptions. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
                              var ajaxoptions = {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
                                  type    : 'POST',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
                                  data    : submitdata,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
                                  dataType: 'html',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
                                  url     : settings.target,
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
                                  success : function(result, status) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
                                      if (ajaxoptions.dataType == 'html') {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
                                        $(self).html(result);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
                                      }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
                                      self.editing = false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
                                      callback.apply(self, [result, settings]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
                                      if (!$.trim($(self).html())) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
                                          $(self).html(settings.placeholder);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
                                      }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
                                  },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
                                  error   : function(xhr, status, error) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
                                      onerror.apply(form, [settings, self, xhr]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
                                  }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
                              };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
                              
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
                              /* Override with what is given in settings.ajaxoptions. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
                              $.extend(ajaxoptions, settings.ajaxoptions);   
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
                              $.ajax(ajaxoptions);          
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
                              
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
                            }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
                    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
                    /* Show tooltip again. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
                    $(self).attr('title', settings.tooltip);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
                    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
                    return false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
                });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
            });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
            /* Privileged methods */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
            this.reset = function(form) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
                /* Prevent calling reset twice when blurring. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
                if (this.editing) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
                    /* Before reset hook, if it returns false abort reseting. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
                    if (false !== onreset.apply(form, [settings, self])) { 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
                        $(self).html(self.revert);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
                        self.editing   = false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
                        if (!$.trim($(self).html())) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
                            $(self).html(settings.placeholder);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
                        /* Show tooltip again. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
                        if (settings.tooltip) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
                            $(self).attr('title', settings.tooltip);                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
                    }                    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
            };            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
        });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
    $.editable = {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
        types: {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
            defaults: {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
                element : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
                    var input = $('<input type="hidden"></input>');                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
                    $(this).append(input);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
                    return(input);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
                },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
                content : function(string, settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
                    $(':input:first', this).val(string);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
                },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
                reset : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
                  original.reset(this);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
                },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
                buttons : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
                    var form = this;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
                    if (settings.submit) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
                        /* If given html string use that. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
                        if (settings.submit.match(/>$/)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
                            var submit = $(settings.submit).click(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
                                if (submit.attr("type") != "submit") {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
                                    form.submit();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
                                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
                            });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
                        /* Otherwise use button with given string as text. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
                        } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
                            var submit = $('<button type="submit" />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
                            submit.html(settings.submit);                            
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
                        $(this).append(submit);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
                    if (settings.cancel) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
                        /* If given html string use that. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
                        if (settings.cancel.match(/>$/)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
                            var cancel = $(settings.cancel);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
                        /* otherwise use button with given string as text */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
                        } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
                            var cancel = $('<button type="cancel" />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
                            cancel.html(settings.cancel);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
                        $(this).append(cancel);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
                        $(cancel).click(function(event) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
                            if ($.isFunction($.editable.types[settings.type].reset)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
                                var reset = $.editable.types[settings.type].reset;                                                                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
                            } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
                                var reset = $.editable.types['defaults'].reset;                                
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
                            }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
                            reset.apply(form, [settings, original]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
                            return false;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
                        });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
            },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   452
            text: {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   453
                element : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
                    var input = $('<input />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
                    if (settings.width  != 'none') { input.attr('width', settings.width);  }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
                    if (settings.height != 'none') { input.attr('height', settings.height); }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
                    //input[0].setAttribute('autocomplete','off');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
                    input.attr('autocomplete','off');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
                    $(this).append(input);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
                    return(input);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
            },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   464
            textarea: {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
                element : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
                    var textarea = $('<textarea />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
                    if (settings.rows) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
                        textarea.attr('rows', settings.rows);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
                    } else if (settings.height != "none") {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
                        textarea.height(settings.height);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
                    if (settings.cols) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
                        textarea.attr('cols', settings.cols);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
                    } else if (settings.width != "none") {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
                        textarea.width(settings.width);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
                    $(this).append(textarea);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
                    return(textarea);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
            },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
            select: {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
               element : function(settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
                    var select = $('<select />');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
                    $(this).append(select);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
                    return(select);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
                },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
                content : function(data, settings, original) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
                    /* If it is string assume it is json. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
                    if (String == data.constructor) {      
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
                        eval ('var json = ' + data);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
                    } else {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
                    /* Otherwise assume it is a hash already. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
                        var json = data;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
                    for (var key in json) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
                        if (!json.hasOwnProperty(key)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
                            continue;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
                        if ('selected' == key) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
                            continue;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
                        } 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
                        var option = $('<option />').val(key).append(json[key]);
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
                        $('select', this).append(option);    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
                    }                    
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
                    /* Loop option again to set selected. IE needed this... */ 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
                    $('select', this).children().each(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
                        if ($(this).val() == json['selected'] || 
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
                            $(this).text() == $.trim(original.revert)) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
                                $(this).attr('selected', 'selected');
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
                        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
                    });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
                    /* Submit on change if no submit button defined. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
                    if (!settings.submit) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
                        var form = this;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
                        $('select', this).change(function() {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
                            form.submit();
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
                        });
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
                    }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
                }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
            }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
        },
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
        /* Add new input type */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
        addInputType: function(name, input) {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
            $.editable.types[name] = input;
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
        }
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
    };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
    /* Publicly accessible defaults. */
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
    $.fn.editable.defaults = {
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
        name       : 'value',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
        id         : 'id',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
        type       : 'text',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
        width      : 'auto',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
        height     : 'auto',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
        event      : 'click.editable',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
        onblur     : 'cancel',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
        loadtype   : 'GET',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
        loadtext   : 'Loading...',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
        placeholder: 'Click to edit',
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
        loaddata   : {},
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
        submitdata : {},
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
        ajaxoptions: {}
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
    };
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
13f43f53d0ba first implementation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
})(jQuery);