diff --git a/src/html/assets/javascripts/releases/4.0.2/tbx.js b/src/html/assets/javascripts/releases/4.0.2/tbx.js index b72070f93..37e1f3a95 100644 --- a/src/html/assets/javascripts/releases/4.0.2/tbx.js +++ b/src/html/assets/javascripts/releases/4.0.2/tbx.js @@ -86,7 +86,7 @@ window.Modernizr = (function( window, document, undefined ) { }; } else { - hasOwnProp = function (object, property) { + hasOwnProp = function (object, property) { return ((property in object) && is(object.constructor.prototype[property], 'undefined')); }; } @@ -208,7 +208,7 @@ window.Modernizr = (function( window, document, undefined ) { } - return Modernizr; + return Modernizr; }; @@ -1963,11 +1963,19 @@ Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0));}; (function(d){d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(f,e){d.fx.step[e]=function(g){if(!g.colorInit){g.start=c(g.elem,e);g.end=b(g.end);g.colorInit=true}g.elem.style[e]="rgb("+[Math.max(Math.min(parseInt((g.pos*(g.end[0]-g.start[0]))+g.start[0]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[1]-g.start[1]))+g.start[1]),255),0),Math.max(Math.min(parseInt((g.pos*(g.end[2]-g.start[2]))+g.start[2]),255),0)].join(",")+")"}});function b(f){var e;if(f&&f.constructor==Array&&f.length==3){return f}if(e=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(f)){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}if(e=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(f)){return[parseFloat(e[1])*2.55,parseFloat(e[2])*2.55,parseFloat(e[3])*2.55]}if(e=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(f)){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}if(e=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(f)){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}if(e=/rgba\(0, 0, 0, 0\)/.exec(f)){return a.transparent}return a[d.trim(f).toLowerCase()]}function c(g,e){var f;do{f=d.css(g,e);if(f!=""&&f!="transparent"||d.nodeName(g,"body")){break}e="backgroundColor"}while(g=g.parentNode);return b(f)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}})(jQuery); /* /x-editable/bootstrap-editable/js/bootstrap-editable.js */ +<<<<<<< HEAD /*! X-editable - v1.3.0 * In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery * http://github.com/vitalets/x-editable * Copyright (c) 2012 Vitaliy Potapov; Licensed MIT */ +======= +/*! X-editable - v1.3.0 +* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery +* http://github.com/vitalets/x-editable +* Copyright (c) 2012 Vitaliy Potapov; Licensed MIT */ + +>>>>>>> ba9cada... Proposed fix for #1576 - photos sorting behaviour consistent for Gallery, Album and Tag views /** Form with single input element, two buttons and two states: normal/loading. Applied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown. @@ -2000,13 +2008,13 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. this.input = new TypeConstructor(typeOptions); } else { $.error('Unknown type: '+ this.options.type); - return; - } + return; + } - this.value = this.input.str2value(this.options.value); + this.value = this.input.str2value(this.options.value); }, initTemplate: function() { - this.$form = $($.fn.editableform.template); + this.$form = $($.fn.editableform.template); }, initButtons: function() { this.$form.find('.editable-buttons').append($.fn.editableform.buttons); @@ -2015,25 +2023,25 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. Renders editableform @method render - **/ + **/ render: function() { - this.$loading = $($.fn.editableform.loading); + this.$loading = $($.fn.editableform.loading); this.$div.empty().append(this.$loading); this.showLoading(); - + //init form template and buttons - this.initTemplate(); + this.initTemplate(); if(this.options.showbuttons) { this.initButtons(); } else { this.$form.find('.editable-buttons').remove(); } - /** + /** Fired when rendering starts - @event rendering + @event rendering @param {Object} event event object - **/ + **/ this.$div.triggerHandler('rendering'); //render input @@ -2044,17 +2052,17 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc. //automatically submit inputs when no buttons shown if(!this.options.showbuttons) { - this.input.autosubmit(); + this.input.autosubmit(); } - + //"clear" link if(this.input.$clear) { - this.$form.find('div.editable-input').append($('
text|textarea|select|date|checklist
- @property type
+ @property type
@type string
@default 'text'
**/
type: 'text',
/**
- Url for submit, e.g. '/post'
+ Url for submit, e.g. '/post'
If function - it will be called instead of ajax. Function can return deferred object to run fail/done callbacks.
- @property url
+ @property url
@type string|function
@default null
@example
@@ -2341,11 +2349,11 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
} else {
someModel.set(params.name, params.value); //save data in some js model
}
- }
- **/
+ }
+ **/
url:null,
/**
- Additional params for submit. If defined as object
- it is **appended** to original ajax data (pk, name and value).
+ Additional params for submit. If defined as object
- it is **appended** to original ajax data (pk, name and value).
If defined as function
- returned object **overwrites** original ajax data.
@example
params: function(params) {
@@ -2354,50 +2362,50 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
return params;
}
- @property params
+ @property params
@type object|function
@default null
- **/
+ **/
params:null,
/**
Name of field. Will be submitted on server. Can be taken from id
attribute
- @property name
+ @property name
@type string
@default null
- **/
+ **/
name: null,
/**
Primary key of editable object (e.g. record id in database). For composite keys use object, e.g. {id: 1, lang: 'en'}
.
Can be calculated dynamically via function.
- @property pk
+ @property pk
@type string|object|function
@default null
- **/
+ **/
pk: null,
/**
Initial value. If not defined - will be taken from element's content.
For __select__ type should be defined (as it is ID of shown text).
- @property value
+ @property value
@type string|object
@default null
- **/
+ **/
value: null,
/**
Strategy for sending data on server. Can be auto|always|never
.
When 'auto' data will be sent on server only if pk defined, otherwise new value will be stored in element.
- @property send
+ @property send
@type string
@default 'auto'
- **/
- send: 'auto',
+ **/
+ send: 'auto',
/**
Function for client-side validation. If returns string - means validation not passed and string showed as error.
- @property validate
+ @property validate
@type function
@default null
@example
@@ -2406,81 +2414,81 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
return 'This field is required';
}
}
- **/
+ **/
validate: null,
/**
- Success callback. Called when value successfully sent on server and **response status = 200**.
+ Success callback. Called when value successfully sent on server and **response status = 200**.
Useful to work with json response. For example, if your backend response can be {success: true}
- or {success: false, msg: "server error"}
you can check it inside this callback.
- If it returns **string** - means error occured and string is shown as error message.
- If it returns **object like** {newValue: <something>}
- it overwrites value, submitted by user.
+ or {success: false, msg: "server error"}
you can check it inside this callback.
+ If it returns **string** - means error occured and string is shown as error message.
+ If it returns **object like** {newValue: <something>}
- it overwrites value, submitted by user.
Otherwise newValue simply rendered into element.
-
- @property success
+
+ @property success
@type function
@default null
@example
success: function(response, newValue) {
if(!response.success) return response.msg;
}
- **/
+ **/
success: null,
/**
Additional options for ajax request.
List of values: http://api.jquery.com/jQuery.ajax
- @property ajaxOptions
+ @property ajaxOptions
@type object
@default null
- @since 1.1.1
- **/
+ @since 1.1.1
+ **/
ajaxOptions: null,
/**
- Whether to show buttons or not.
+ Whether to show buttons or not.
Form without buttons can be auto-submitted by input or by onblur = 'submit'.
- @example
+ @example
ajaxOptions: {
method: 'PUT',
dataType: 'xml'
}
- @property showbuttons
+ @property showbuttons
@type boolean
@default true
@since 1.1.1
- **/
+ **/
showbuttons: true,
/**
- Scope for callback methods (success, validate).
- If null
means editableform instance itself.
+ Scope for callback methods (success, validate).
+ If null
means editableform instance itself.
- @property scope
+ @property scope
@type DOMElement|object
@default null
@since 1.2.0
@private
- **/
+ **/
scope: null,
/**
Whether to save or cancel value when it was not changed but form was submitted
- @property savenochange
+ @property savenochange
@type boolean
@default false
@since 1.2.0
**/
- savenochange: false
- };
+ savenochange: false
+ };
/*
Note: following params could redefined in engine: bootstrap or jqueryui:
Classes 'control-group' and 'editable-error-block' must always present!
- */
+ */
$.fn.editableform.template = '';
//loading div
@@ -2488,10 +2496,10 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
//buttons
$.fn.editableform.buttons = ''+
- '';
+ '';
//error class attached to control-group
- $.fn.editableform.errorGroupClass = null;
+ $.fn.editableform.errorGroupClass = null;
//error class attached to editable-error-block
$.fn.editableform.errorBlockClass = 'editable-error';
@@ -2504,7 +2512,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
$.fn.editableutils = {
/**
* classic JS inheritance function
- */
+ */
inherit: function (Child, Parent) {
var F = function() { };
F.prototype = Parent.prototype;
@@ -2516,7 +2524,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
/**
* set caret position in input
* see http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area
- */
+ */
setCursorPosition: function(elem, pos) {
if (elem.setSelectionRange) {
elem.setSelectionRange(pos, pos);
@@ -2601,7 +2609,7 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
objectKeys: function(o) {
if (Object.keys) {
- return Object.keys(o);
+ return Object.keys(o);
} else {
if (o !== Object(o)) {
throw new TypeError('Object.keys called on a non-object');
@@ -2616,15 +2624,21 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
}
},
-
+
/**
method to escape html.
**/
escape: function(str) {
return $('$().editable()
. You should subscribe on it's events (save / cancel) to get profit of it.save|cancel|onblur|nochange|undefined (=manual)
- **/
+ **/
hide: function(reason) {
if(!this.tip() || !this.tip().is(':visible') || !this.$element.hasClass('editable-open')) {
return;
}
- this.$element.removeClass('editable-open');
+ this.$element.removeClass('editable-open');
this.innerHide();
- /**
+ /**
Fired when container was hidden. It occurs on both save or cancel.
- @event hidden
+ @event hidden
@param {object} event event object
@param {string} reason Reason caused hiding. Can be save|cancel|onblur|nochange|undefined (=manual)
@example
@@ -2791,44 +2805,44 @@ Applied as jQuery method.
if(reason === 'save' || reason === 'cancel') {
//auto-open next editable
$(this).closest('tr').next().find('.editable').editable('show');
- }
- });
- **/
- this.$element.triggerHandler('hidden', reason);
+ }
+ });
+ **/
+ this.$element.triggerHandler('hidden', reason);
},
-
+
/* internal hide method. To be overwritten in child classes */
innerHide: function () {
- this.call('hide');
- },
-
+ this.call('hide');
+ },
+
/**
Toggles container visibility (show / hide)
@method toggle()
@param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.
- **/
+ **/
toggle: function(closeAll) {
if(this.tip && this.tip().is(':visible')) {
this.hide();
} else {
this.show(closeAll);
- }
+ }
},
/*
Updates the position of container when content changed.
@method setPosition()
- */
+ */
setPosition: function() {
//tbd in child class
},
save: function(e, params) {
this.hide('save');
- /**
+ /**
Fired when new value was submitted. You can use $(this).data('editableContainer')
inside handler to access to editableContainer instance
-
- @event save
+
+ @event save
@param {Object} event event object
@param {Object} params additional params
@param {mixed} params.newValue submitted value
@@ -2840,33 +2854,33 @@ Applied as jQuery method.
if(params.response && params.response.success) {
alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');
} else {
- alert('error!');
- }
+ alert('error!');
+ }
});
- **/
+ **/
this.$element.triggerHandler('save', params);
},
/**
Sets new option
-
+
@method option(key, value)
- @param {string} key
- @param {mixed} value
- **/
+ @param {string} key
+ @param {mixed} value
+ **/
option: function(key, value) {
this.options[key] = value;
if(key in this.containerOptions) {
this.containerOptions[key] = value;
- this.setContainerOption(key, value);
+ this.setContainerOption(key, value);
} else {
this.formOptions[key] = value;
if(this.$form) {
- this.$form.editableform('option', key, value);
+ this.$form.editableform('option', key, value);
}
}
},
-
+
setContainerOption: function(key, value) {
this.call('option', key, value);
},
@@ -2874,13 +2888,13 @@ Applied as jQuery method.
/**
Destroys the container instance
@method destroy()
- **/
+ **/
destroy: function() {
this.call('destroy');
},
-
+
/*
- Closes other containers except one related to passed element.
+ Closes other containers except one related to passed element.
Other containers can be cancelled or submitted (depends on onblur option)
*/
closeOthers: function(element) {
@@ -2890,14 +2904,14 @@ Applied as jQuery method.
return;
}
- //otherwise cancel or submit all open containers
+ //otherwise cancel or submit all open containers
var $el = $(el),
ec = $el.data('editableContainer');
if(!ec) {
- return;
+ return;
}
-
+
if(ec.options.onblur === 'cancel') {
$el.data('editableContainer').hide('onblur');
} else if(ec.options.onblur === 'submit') {
@@ -2906,22 +2920,22 @@ Applied as jQuery method.
});
},
-
+
/**
Activates input of visible container (e.g. set focus)
@method activate()
- **/
+ **/
activate: function() {
if(this.tip && this.tip().is(':visible') && this.$form) {
- this.$form.data('editableform').input.activate();
+ this.$form.data('editableform').input.activate();
}
- }
+ }
};
/**
jQuery method to initialize editableContainer.
-
+
@method $().editableContainer(options)
@params {Object} options
@example
@@ -2931,24 +2945,24 @@ Applied as jQuery method.
pk: 1,
value: 'hello'
});
- **/
+ **/
$.fn.editableContainer = function (option) {
var args = arguments;
return this.each(function () {
var $this = $(this),
- dataKey = 'editableContainer',
- data = $this.data(dataKey),
+ dataKey = 'editableContainer',
+ data = $this.data(dataKey),
options = typeof option === 'object' && option;
if (!data) {
$this.data(dataKey, (data = new EditableContainer(this, options)));
}
- if (typeof option === 'string') { //call method
+ if (typeof option === 'string') { //call method
data[option].apply(data, Array.prototype.slice.call(args, 1));
- }
+ }
});
- };
+ };
//store constructor
$.fn.editableContainer.Constructor = EditableContainer;
@@ -2958,42 +2972,42 @@ Applied as jQuery method.
/**
Initial value of form input
- @property value
+ @property value
@type mixed
@default null
@private
- **/
+ **/
value: null,
/**
Placement of container relative to element. Can be top|right|bottom|left
. Not used for inline container.
- @property placement
+ @property placement
@type string
@default 'top'
- **/
+ **/
placement: 'top',
/**
Whether to hide container on save/cancel.
- @property autohide
+ @property autohide
@type boolean
@default true
- @private
- **/
+ @private
+ **/
autohide: true,
/**
- Action when user clicks outside the container. Can be cancel|submit|ignore
.
- Setting ignore
allows to have several containers open.
+ Action when user clicks outside the container. Can be cancel|submit|ignore
.
+ Setting ignore
allows to have several containers open.
- @property onblur
+ @property onblur
@type string
@default 'cancel'
@since 1.1.1
- **/
+ **/
onblur: 'cancel'
};
- /*
+ /*
* workaround to have 'destroyed' event to destroy popover when element is destroyed
* see http://stackoverflow.com/questions/2200494/jquery-trigger-event-when-an-element-is-removed-from-the-dom
*/
@@ -3003,7 +3017,7 @@ Applied as jQuery method.
o.handler();
}
}
- };
+ };
}(window.jQuery));
@@ -3017,27 +3031,27 @@ Makes editable any HTML element on the page. Applied as jQuery method.
var Editable = function (element, options) {
this.$element = $(element);
- this.options = $.extend({}, $.fn.editable.defaults, $.fn.editableutils.getConfigData(this.$element), options);
+ this.options = $.extend({}, $.fn.editable.defaults, $.fn.editableutils.getConfigData(this.$element), options);
this.init();
};
Editable.prototype = {
- constructor: Editable,
+ constructor: Editable,
init: function () {
- var TypeConstructor,
- isValueByText = false,
- doAutotext,
+ var TypeConstructor,
+ isValueByText = false,
+ doAutotext,
finalize;
//editableContainer must be defined
if(!$.fn.editableContainer) {
$.error('You must define $.fn.editableContainer via including corresponding file (e.g. editable-popover.js)');
return;
- }
-
+ }
+
//name
this.options.name = this.options.name || this.$element.attr('id');
-
+
//create input of specified type. Input will be used for converting value, not in form
if(typeof $.fn.editabletypes[this.options.type] === 'function') {
TypeConstructor = $.fn.editabletypes[this.options.type];
@@ -3045,8 +3059,8 @@ Makes editable any HTML element on the page. Applied as jQuery method.
this.input = new TypeConstructor(this.typeOptions);
} else {
$.error('Unknown type: '+ this.options.type);
- return;
- }
+ return;
+ }
//set value from settings or by element's text
if (this.options.value === undefined || this.options.value === null) {
@@ -3055,42 +3069,42 @@ Makes editable any HTML element on the page. Applied as jQuery method.
} else {
/*
value can be string when received from 'data-value' attribute
- for complext objects value can be set as json string in data-value attribute,
+ for complext objects value can be set as json string in data-value attribute,
e.g. data-value="{city: 'Moscow', street: 'Lenina'}"
*/
- this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true);
+ this.options.value = $.fn.editableutils.tryParseJson(this.options.value, true);
if(typeof this.options.value === 'string') {
this.value = this.input.str2value(this.options.value);
} else {
this.value = this.options.value;
}
}
-
+
//add 'editable' class to every editable element
this.$element.addClass('editable');
-
+
//attach handler activating editable. In disabled mode it just prevent default action (useful for links)
if(this.options.toggle !== 'manual') {
this.$element.addClass('editable-click');
this.$element.on(this.options.toggle + '.editable', $.proxy(function(e){
-
+
e.preventDefault();
//stop propagation not required anymore because in document click handler it checks event target
//e.stopPropagation();
-
+
if(this.options.toggle === 'mouseenter') {
//for hover only show container
- this.show();
+ this.show();
} else {
//when toggle='click' we should not close all other containers as they will be closed automatically in document click listener
var closeAll = (this.options.toggle !== 'click');
this.toggle(closeAll);
- }
+ }
}, this));
} else {
this.$element.attr('tabindex', -1); //do not stop focus on element when toggled manually
}
-
+
//check conditions for autotext:
//if value was generated by text or value is empty, no sense to run autotext
doAutotext = !isValueByText && this.value !== null && this.value !== undefined;
@@ -3099,16 +3113,16 @@ Makes editable any HTML element on the page. Applied as jQuery method.
if(this.options.disabled) {
this.disable();
} else {
- this.enable();
+ this.enable();
}
- /**
+ /**
Fired when element was initialized by editable method.
-
- @event init
+
+ @event init
@param {Object} event event object
@param {Object} editable editable instance
@since 1.2.0
- **/
+ **/
this.$element.triggerHandler('init', this);
}, this));
},
@@ -3118,7 +3132,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
Can call custom display method from options.
Can return deferred object.
@method render()
- */
+ */
render: function() {
//do not display anything
if(this.options.display === false) {
@@ -3126,77 +3140,77 @@ Makes editable any HTML element on the page. Applied as jQuery method.
}
//if it is input with source, we pass callback in third param to be called when source is loaded
if(this.input.options.hasOwnProperty('source')) {
- return this.input.value2html(this.value, this.$element[0], this.options.display);
- //if display method defined --> use it
+ return this.input.value2html(this.value, this.$element[0], this.options.display);
+ //if display method defined --> use it
} else if(typeof this.options.display === 'function') {
return this.options.display.call(this.$element[0], this.value);
- //else use input's original value2html() method
+ //else use input's original value2html() method
} else {
- return this.input.value2html(this.value, this.$element[0]);
+ return this.input.value2html(this.value, this.$element[0]);
}
},
-
+
/**
Enables editable
@method enable()
- **/
+ **/
enable: function() {
this.options.disabled = false;
this.$element.removeClass('editable-disabled');
this.handleEmpty();
if(this.options.toggle !== 'manual') {
- if(this.$element.attr('tabindex') === '-1') {
- this.$element.removeAttr('tabindex');
+ if(this.$element.attr('tabindex') === '-1') {
+ this.$element.removeAttr('tabindex');
}
}
},
-
+
/**
Disables editable
@method disable()
- **/
+ **/
disable: function() {
- this.options.disabled = true;
- this.hide();
+ this.options.disabled = true;
+ this.hide();
this.$element.addClass('editable-disabled');
this.handleEmpty();
//do not stop focus on this element
- this.$element.attr('tabindex', -1);
+ this.$element.attr('tabindex', -1);
},
-
+
/**
Toggles enabled / disabled state of editable element
@method toggleDisabled()
- **/
+ **/
toggleDisabled: function() {
if(this.options.disabled) {
this.enable();
- } else {
- this.disable();
+ } else {
+ this.disable();
}
- },
-
+ },
+
/**
Sets new option
-
+
@method option(key, value)
@param {string|object} key option name or object with several options
@param {mixed} value option new value
@example
$('.editable').editable('option', 'pk', 2);
- **/
+ **/
option: function(key, value) {
//set option(s) by object
if(key && typeof key === 'object') {
$.each(key, $.proxy(function(k, v){
- this.option($.trim(k), v);
- }, this));
+ this.option($.trim(k), v);
+ }, this));
return;
}
- //set option by string
- this.options[key] = value;
-
+ //set option by string
+ this.options[key] = value;
+
//disabled
if(key === 'disabled') {
if(value) {
@@ -3205,19 +3219,19 @@ Makes editable any HTML element on the page. Applied as jQuery method.
this.enable();
}
return;
- }
-
+ }
+
//value
if(key === 'value') {
this.setValue(value);
}
-
- //transfer new option to container!
+
+ //transfer new option to container!
if(this.container) {
- this.container.option(key, value);
+ this.container.option(key, value);
}
- },
-
+ },
+
/*
* set emptytext if element is empty (reverse: remove emptytext if needed)
*/
@@ -3226,7 +3240,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
if(this.options.display === false) {
return;
}
-
+
var emptyClass = 'editable-empty';
//emptytext shown only for enabled
if(!this.options.disabled) {
@@ -3242,18 +3256,18 @@ Makes editable any HTML element on the page. Applied as jQuery method.
this.$element.removeClass(emptyClass);
}
}
- },
-
+ },
+
/**
Shows container with form
@method show()
@param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.
- **/
+ **/
show: function (closeAll) {
if(this.options.disabled) {
return;
}
-
+
//init editableContainer: popover, tooltip, inline, etc..
if(!this.container) {
var containerOptions = $.extend({}, this.options, {
@@ -3261,30 +3275,30 @@ Makes editable any HTML element on the page. Applied as jQuery method.
});
this.$element.editableContainer(containerOptions);
this.$element.on("save.internal", $.proxy(this.save, this));
- this.container = this.$element.data('editableContainer');
+ this.container = this.$element.data('editableContainer');
} else if(this.container.tip().is(':visible')) {
return;
- }
-
+ }
+
//show container
this.container.show(closeAll);
},
-
+
/**
Hides container with form
@method hide()
- **/
- hide: function () {
- if(this.container) {
+ **/
+ hide: function () {
+ if(this.container) {
this.container.hide();
}
},
-
+
/**
Toggles container visibility (show / hide)
@method toggle()
@param {boolean} closeAll Whether to close all other editable containers when showing this one. Default true.
- **/
+ **/
toggle: function(closeAll) {
if(this.container && this.container.tip().is(':visible')) {
this.hide();
@@ -3292,25 +3306,25 @@ Makes editable any HTML element on the page. Applied as jQuery method.
this.show(closeAll);
}
},
-
+
/*
* called when form was submitted
- */
+ */
save: function(e, params) {
- //if url is not user's function and value was not sent to server and value changed --> mark element with unsaved css.
- if(typeof this.options.url !== 'function' && this.options.display !== false && params.response === undefined && this.input.value2str(this.value) !== this.input.value2str(params.newValue)) {
+ //if url is not user's function and value was not sent to server and value changed --> mark element with unsaved css.
+ if(typeof this.options.url !== 'function' && this.options.display !== false && params.response === undefined && this.input.value2str(this.value) !== this.input.value2str(params.newValue)) {
this.$element.addClass('editable-unsaved');
} else {
this.$element.removeClass('editable-unsaved');
}
-
+
// this.hide();
this.setValue(params.newValue);
-
- /**
+
+ /**
Fired when new value was submitted. You can use $(this).data('editable')
to access to editable instance
-
- @event save
+
+ @event save
@param {Object} event event object
@param {Object} params additional params
@param {mixed} params.newValue submitted value
@@ -3322,11 +3336,11 @@ Makes editable any HTML element on the page. Applied as jQuery method.
if(params.response && params.response.success) {
alert('value: ' + params.newValue + ' with pk: ' + pk + ' saved!');
} else {
- alert('error!');
- }
+ alert('error!');
+ }
});
**/
- //event itself is triggered by editableContainer. Description here is only for documentation
+ //event itself is triggered by editableContainer. Description here is only for documentation
},
validate: function () {
@@ -3334,13 +3348,13 @@ Makes editable any HTML element on the page. Applied as jQuery method.
return this.options.validate.call(this, this.value);
}
},
-
+
/**
Sets new value of editable
@method setValue(value, convertStr)
- @param {mixed} value new value
+ @param {mixed} value new value
@param {boolean} convertStr whether to convert value from string to internal format
- **/
+ **/
setValue: function(value, convertStr) {
if(convertStr) {
this.value = this.input.str2value(value);
@@ -3355,14 +3369,14 @@ Makes editable any HTML element on the page. Applied as jQuery method.
this.handleEmpty();
}, this));
},
-
+
/**
Activates input of visible container (e.g. set focus)
@method activate()
- **/
+ **/
activate: function() {
if(this.container) {
- this.container.activate();
+ this.container.activate();
}
}
};
@@ -3372,7 +3386,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
/**
jQuery method to initialize editable element.
-
+
@method $().editable(options)
@params {Object} options
@example
@@ -3381,14 +3395,14 @@ Makes editable any HTML element on the page. Applied as jQuery method.
url: '/post',
pk: 1
});
- **/
+ **/
$.fn.editable = function (option) {
//special API methods returning non-jquery object
var result = {}, args = arguments, datakey = 'editable';
switch (option) {
/**
Runs client-side validation for all matched editables
-
+
@method validate()
@returns {Object} validation errors map
@example
@@ -3398,7 +3412,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
username: "username is required",
fullname: "fullname should be minimum 3 letters length"
}
- **/
+ **/
case 'validate':
this.each(function () {
var $this = $(this), data = $this.data(datakey), error;
@@ -3419,7 +3433,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
username: "superuser",
fullname: "John"
}
- **/
+ **/
case 'getValue':
this.each(function () {
var $this = $(this), data = $this.data(datakey);
@@ -3429,20 +3443,20 @@ Makes editable any HTML element on the page. Applied as jQuery method.
});
return result;
- /**
- This method collects values from several editable elements and submit them all to server.
- Internally it runs client-side validation for all fields and submits only in case of success.
+ /**
+ This method collects values from several editable elements and submit them all to server.
+ Internally it runs client-side validation for all fields and submits only in case of success.
See creating new records for details.
-
+
@method submit(options)
- @param {object} options
- @param {object} options.url url to submit data
+ @param {object} options
+ @param {object} options.url url to submit data
@param {object} options.data additional data to submit
- @param {object} options.ajaxOptions additional ajax options
- @param {function} options.error(obj) error handler
+ @param {object} options.ajaxOptions additional ajax options
+ @param {function} options.error(obj) error handler
@param {function} options.success(obj,config) success handler
@returns {Object} jQuery object
- **/
+ **/
case 'submit': //collects value, validate and submit to server for creating new record
var config = arguments[1] || {},
$elems = this,
@@ -3450,21 +3464,21 @@ Makes editable any HTML element on the page. Applied as jQuery method.
values;
if($.isEmptyObject(errors)) {
- values = this.editable('getValue');
+ values = this.editable('getValue');
if(config.data) {
$.extend(values, config.data);
- }
-
+ }
+
$.ajax($.extend({
- url: config.url,
- data: values,
- type: 'POST'
+ url: config.url,
+ data: values,
+ type: 'POST'
}, config.ajaxOptions))
.success(function(response) {
//successful response 200 OK
if(typeof config.success === 'function') {
config.success.call($elems, response, config);
- }
+ }
})
.error(function(){ //ajax error
if(typeof config.error === 'function') {
@@ -3481,90 +3495,90 @@ Makes editable any HTML element on the page. Applied as jQuery method.
//return jquery object
return this.each(function () {
- var $this = $(this),
- data = $this.data(datakey),
+ var $this = $(this),
+ data = $this.data(datakey),
options = typeof option === 'object' && option;
if (!data) {
$this.data(datakey, (data = new Editable(this, options)));
}
- if (typeof option === 'string') { //call method
+ if (typeof option === 'string') { //call method
data[option].apply(data, Array.prototype.slice.call(args, 1));
- }
+ }
});
- };
-
+ };
+
$.fn.editable.defaults = {
/**
Type of input. Can be text|textarea|select|date|checklist
and more
- @property type
+ @property type
@type string
@default 'text'
**/
- type: 'text',
+ type: 'text',
/**
Sets disabled state of editable
- @property disabled
+ @property disabled
@type boolean
@default false
- **/
+ **/
disabled: false,
/**
- How to toggle editable. Can be click|dblclick|mouseenter|manual
.
- When set to manual
you should manually call show/hide
methods of editable.
- **Note**: if you call show
or toggle
inside **click** handler of some DOM element,
+ How to toggle editable. Can be click|dblclick|mouseenter|manual
.
+ When set to manual
you should manually call show/hide
methods of editable.
+ **Note**: if you call show
or toggle
inside **click** handler of some DOM element,
you need to apply e.stopPropagation()
because containers are being closed on any click on document.
-
+
@example
$('#edit-button').click(function(e) {
e.stopPropagation();
$('#username').editable('toggle');
});
- @property toggle
+ @property toggle
@type string
@default 'click'
- **/
+ **/
toggle: 'click',
/**
Text shown when element is empty.
- @property emptytext
+ @property emptytext
@type string
@default 'Empty'
- **/
+ **/
emptytext: 'Empty',
/**
Allows to automatically set element's text based on it's value. Can be auto|always|never
. Useful for select and date.
- For example, if dropdown list is {1: 'a', 2: 'b'}
and element's value set to 1
, it's html will be automatically set to 'a'
.
- auto
- text will be automatically set only if element is empty.
+ For example, if dropdown list is {1: 'a', 2: 'b'}
and element's value set to 1
, it's html will be automatically set to 'a'
.
+ auto
- text will be automatically set only if element is empty.
always|never
- always(never) try to set element's text.
- @property autotext
+ @property autotext
@type string
@default 'auto'
- **/
- autotext: 'auto',
+ **/
+ autotext: 'auto',
/**
Initial value of input. Taken from data-value
or element's text.
- @property value
+ @property value
@type mixed
@default element's text
**/
value: null,
/**
- Callback to perform custom displaying of value in element's text.
- If null
, default input's value2html() will be called.
- If false
, no displaying methods will be called, element's text will no change.
- Runs under element's scope.
+ Callback to perform custom displaying of value in element's text.
+ If null
, default input's value2html() will be called.
+ If false
, no displaying methods will be called, element's text will no change.
+ Runs under element's scope.
Second parameter __sourceData__ is passed for inputs with source (select, checklist).
-
- @property display
+
+ @property display
@type function|boolean
@default null
@since 1.2.0
@@ -3573,10 +3587,10 @@ Makes editable any HTML element on the page. Applied as jQuery method.
var escapedValue = $('{value1: "text1", value2: "text2" ...}
but it does not guarantee elements order.
+ For compability it also supports format {value1: "text1", value2: "text2" ...}
but it does not guarantee elements order.
If source is **string**, results will be cached for fields with the same source and name. See also sourceCache
option.
-
- @property source
+
+ @property source
@type string|array|object
@default null
- **/
- source:null,
+ **/
+ source:null,
/**
Data automatically prepended to the beginning of dropdown list.
-
- @property prepend
+
+ @property prepend
@type string|array|object
@default false
- **/
+ **/
prepend:false,
/**
Error message when list cannot be loaded (e.g. ajax error)
-
- @property sourceError
+
+ @property sourceError
@type string
@default Error when loading list
- **/
+ **/
sourceError: 'Error when loading list',
/**
- if true
and source is **string url** - results will be cached for fields with the same source and name.
+ if true
and source is **string url** - results will be cached for fields with the same source and name.
Usefull for editable grids.
-
- @property sourceCache
+
+ @property sourceCache
@type boolean
@default true
@since 1.2.0
- **/
+ **/
sourceCache: true
});
- $.fn.editabletypes.list = List;
+ $.fn.editabletypes.list = List;
}(window.jQuery));
/**
@@ -4075,22 +4089,22 @@ $(function(){
this.$input.focus();
$.fn.editableutils.setCursorPosition(this.$input.get(0), this.$input.val().length);
}
- }
+ }
});
Text.defaults = $.extend({}, $.fn.editabletypes.abstractinput.defaults, {
/**
- @property tpl
+ @property tpl
@default
- **/
+ **/
tpl: '',
/**
Placeholder attribute of input. Shown when input is empty.
- @property placeholder
+ @property placeholder
@type string
@default null
- **/
+ **/
placeholder: null
});
@@ -4155,39 +4169,39 @@ $(function(){
for (var i = 0; i < lines.length; i++) {
lines[i] = $('