x-editable-rails 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +4 -4
- data/lib/x-editable-rails/version.rb +1 -1
- data/vendor/assets/javascripts/editable/bootstrap-editable.js +173 -326
- data/vendor/assets/javascripts/editable/bootstrap2-editable.js +6901 -0
- data/vendor/assets/javascripts/editable/inputs-ext/{bootstrap-wysihtml5/bootstrap-wysihtml5.js → bootstrap-wysihtml5.js} +0 -0
- data/vendor/assets/javascripts/editable/inputs-ext/typeahead-editable.js +86 -0
- data/vendor/assets/javascripts/editable/inputs-ext/typeahead.js +1139 -0
- data/vendor/assets/javascripts/editable/inputs-ext/wysihtml5-editable.js +138 -0
- data/vendor/assets/javascripts/editable/inputs-ext/wysihtml5.js +9496 -102
- data/vendor/assets/javascripts/editable/jquery-editable-poshytip.js +96 -41
- data/vendor/assets/javascripts/editable/jqueryui-editable.js +100 -43
- data/vendor/assets/stylesheets/editable/bootstrap-editable.scss +1 -2
- data/vendor/assets/stylesheets/editable/bootstrap2-editable.scss +655 -0
- data/vendor/assets/stylesheets/editable/inputs-ext/bootstrap-typehead.css +49 -0
- data/vendor/assets/stylesheets/editable/jquery-editable.scss +1 -2
- data/vendor/assets/stylesheets/editable/jqueryui-editable.scss +1 -2
- metadata +9 -4
- data/vendor/assets/javascripts/editable/inputs-ext/bootstrap-wysihtml5/wysihtml5.js +0 -9521
@@ -1,8 +1,7 @@
|
|
1
|
-
/*! X-editable - v1.
|
1
|
+
/*! X-editable - v1.5.0
|
2
2
|
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
|
3
3
|
* http://github.com/vitalets/x-editable
|
4
4
|
* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
|
5
|
-
|
6
5
|
/**
|
7
6
|
Form with single input element, two buttons and two states: normal/loading.
|
8
7
|
Applied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown.
|
@@ -33,6 +32,9 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
33
32
|
//set initial value
|
34
33
|
//todo: may be add check: typeof str === 'string' ?
|
35
34
|
this.value = this.input.str2value(this.options.value);
|
35
|
+
|
36
|
+
//prerender: get input.$input
|
37
|
+
this.input.prerender();
|
36
38
|
},
|
37
39
|
initTemplate: function() {
|
38
40
|
this.$form = $($.fn.editableform.template);
|
@@ -80,9 +82,8 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
80
82
|
this.initInput();
|
81
83
|
|
82
84
|
//append input to form
|
83
|
-
this.input.prerender();
|
84
85
|
this.$form.find('div.editable-input').append(this.input.$tpl);
|
85
|
-
|
86
|
+
|
86
87
|
//append form to container
|
87
88
|
this.$div.append(this.$form);
|
88
89
|
|
@@ -620,6 +621,9 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
620
621
|
|
621
622
|
//error class attached to editable-error-block
|
622
623
|
$.fn.editableform.errorBlockClass = 'editable-error';
|
624
|
+
|
625
|
+
//engine
|
626
|
+
$.fn.editableform.engine = 'jquery';
|
623
627
|
}(window.jQuery));
|
624
628
|
|
625
629
|
/**
|
@@ -898,6 +902,8 @@ Applied as jQuery method.
|
|
898
902
|
containerDataName: null, //object name in element's .data()
|
899
903
|
innerCss: null, //tbd in child class
|
900
904
|
containerClass: 'editable-container editable-popup', //css class applied to container element
|
905
|
+
defaults: {}, //container itself defaults
|
906
|
+
|
901
907
|
init: function(element, options) {
|
902
908
|
this.$element = $(element);
|
903
909
|
//since 1.4.1 container do not use data-* directly as they already merged into options.
|
@@ -975,10 +981,9 @@ Applied as jQuery method.
|
|
975
981
|
throw new Error(this.containerName + ' not found. Have you included corresponding js file?');
|
976
982
|
}
|
977
983
|
|
978
|
-
var cDef = $.fn[this.containerName].defaults;
|
979
984
|
//keys defined in container defaults go to container, others go to form
|
980
985
|
for(var k in this.options) {
|
981
|
-
if(k in
|
986
|
+
if(k in this.defaults) {
|
982
987
|
this.containerOptions[k] = this.options[k];
|
983
988
|
} else {
|
984
989
|
this.formOptions[k] = this.options[k];
|
@@ -1727,13 +1732,12 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|
1727
1732
|
this.isEmpty = isEmpty;
|
1728
1733
|
} else {
|
1729
1734
|
//detect empty
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
this.isEmpty =
|
1735
|
+
//for some inputs we need more smart check
|
1736
|
+
//e.g. wysihtml5 may have <br>, <p></p>, <img>
|
1737
|
+
if(typeof(this.input.isEmpty) === 'function') {
|
1738
|
+
this.isEmpty = this.input.isEmpty(this.$element);
|
1734
1739
|
} else {
|
1735
|
-
|
1736
|
-
this.isEmpty = !this.$element.height() || !this.$element.width();
|
1740
|
+
this.isEmpty = $.trim(this.$element.html()) === '';
|
1737
1741
|
}
|
1738
1742
|
}
|
1739
1743
|
|
@@ -2249,7 +2253,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|
2249
2253
|
@since 1.4.5
|
2250
2254
|
@default #FFFF80
|
2251
2255
|
**/
|
2252
|
-
highlight: '#FFFF80'
|
2256
|
+
highlight: '#FFFF80'
|
2253
2257
|
};
|
2254
2258
|
|
2255
2259
|
}(window.jQuery));
|
@@ -2308,7 +2312,7 @@ To create your own input you can inherit from this class.
|
|
2308
2312
|
@param {DOMElement} element
|
2309
2313
|
**/
|
2310
2314
|
value2html: function(value, element) {
|
2311
|
-
$(element).text($.trim(value));
|
2315
|
+
$(element)[this.options.escape ? 'text' : 'html']($.trim(value));
|
2312
2316
|
},
|
2313
2317
|
|
2314
2318
|
/**
|
@@ -2415,7 +2419,7 @@ To create your own input you can inherit from this class.
|
|
2415
2419
|
},
|
2416
2420
|
|
2417
2421
|
// -------- helper functions --------
|
2418
|
-
setClass: function() {
|
2422
|
+
setClass: function() {
|
2419
2423
|
if(this.options.inputclass) {
|
2420
2424
|
this.$input.addClass(this.options.inputclass);
|
2421
2425
|
}
|
@@ -2447,9 +2451,22 @@ To create your own input you can inherit from this class.
|
|
2447
2451
|
|
2448
2452
|
@property inputclass
|
2449
2453
|
@type string
|
2450
|
-
@default
|
2454
|
+
@default null
|
2451
2455
|
**/
|
2452
|
-
inputclass:
|
2456
|
+
inputclass: null,
|
2457
|
+
|
2458
|
+
/**
|
2459
|
+
If `true` - html will be escaped in content of element via $.text() method.
|
2460
|
+
If `false` - html will not be escaped, $.html() used.
|
2461
|
+
When you use own `display` function, this option obviosly has no effect.
|
2462
|
+
|
2463
|
+
@property escape
|
2464
|
+
@type boolean
|
2465
|
+
@since 1.5.0
|
2466
|
+
@default true
|
2467
|
+
**/
|
2468
|
+
escape: true,
|
2469
|
+
|
2453
2470
|
//scope for external methods (e.g. source defined as function)
|
2454
2471
|
//for internal use only
|
2455
2472
|
scope: null,
|
@@ -2581,8 +2598,8 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2581
2598
|
}
|
2582
2599
|
}
|
2583
2600
|
|
2584
|
-
//
|
2585
|
-
$.
|
2601
|
+
//ajaxOptions for source. Can be overwritten bt options.sourceOptions
|
2602
|
+
var ajaxOptions = $.extend({
|
2586
2603
|
url: source,
|
2587
2604
|
type: 'get',
|
2588
2605
|
cache: false,
|
@@ -2617,7 +2634,11 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2617
2634
|
$.each(cache.err_callbacks, function () { this.call(); });
|
2618
2635
|
}
|
2619
2636
|
}, this)
|
2620
|
-
});
|
2637
|
+
}, this.options.sourceOptions);
|
2638
|
+
|
2639
|
+
//loading sourceData from server
|
2640
|
+
$.ajax(ajaxOptions);
|
2641
|
+
|
2621
2642
|
} else { //options as json/array
|
2622
2643
|
this.sourceData = this.makeArray(source);
|
2623
2644
|
|
@@ -2777,7 +2798,17 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2777
2798
|
@default true
|
2778
2799
|
@since 1.2.0
|
2779
2800
|
**/
|
2780
|
-
sourceCache: true
|
2801
|
+
sourceCache: true,
|
2802
|
+
/**
|
2803
|
+
Additional ajax options to be used in $.ajax() when loading list from server.
|
2804
|
+
Useful to send extra parameters (`data` key) or change request method (`type` key).
|
2805
|
+
|
2806
|
+
@property sourceOptions
|
2807
|
+
@type object|function
|
2808
|
+
@default null
|
2809
|
+
@since 1.5.0
|
2810
|
+
**/
|
2811
|
+
sourceOptions: null
|
2781
2812
|
});
|
2782
2813
|
|
2783
2814
|
$.fn.editabletypes.list = List;
|
@@ -3038,7 +3069,7 @@ Select (dropdown)
|
|
3038
3069
|
@extends list
|
3039
3070
|
@final
|
3040
3071
|
@example
|
3041
|
-
<a href="#" id="status" data-type="select" data-pk="1" data-url="/post" data-
|
3072
|
+
<a href="#" id="status" data-type="select" data-pk="1" data-url="/post" data-title="Select status"></a>
|
3042
3073
|
<script>
|
3043
3074
|
$(function(){
|
3044
3075
|
$('#status').editable({
|
@@ -3105,7 +3136,8 @@ $(function(){
|
|
3105
3136
|
text = items[0].text;
|
3106
3137
|
}
|
3107
3138
|
|
3108
|
-
|
3139
|
+
//$(element).text(text);
|
3140
|
+
$.fn.editabletypes.abstractinput.prototype.value2html.call(this, text, element);
|
3109
3141
|
},
|
3110
3142
|
|
3111
3143
|
autosubmit: function() {
|
@@ -3135,7 +3167,7 @@ Internally value stored as javascript array of values.
|
|
3135
3167
|
@extends list
|
3136
3168
|
@final
|
3137
3169
|
@example
|
3138
|
-
<a href="#" id="options" data-type="checklist" data-pk="1" data-url="/post" data-
|
3170
|
+
<a href="#" id="options" data-type="checklist" data-pk="1" data-url="/post" data-title="Select options"></a>
|
3139
3171
|
<script>
|
3140
3172
|
$(function(){
|
3141
3173
|
$('#options').editable({
|
@@ -3229,10 +3261,14 @@ $(function(){
|
|
3229
3261
|
//collect text of checked boxes
|
3230
3262
|
value2htmlFinal: function(value, element) {
|
3231
3263
|
var html = [],
|
3232
|
-
checked = $.fn.editableutils.itemsByValue(value, this.sourceData)
|
3264
|
+
checked = $.fn.editableutils.itemsByValue(value, this.sourceData),
|
3265
|
+
escape = this.options.escape;
|
3233
3266
|
|
3234
3267
|
if(checked.length) {
|
3235
|
-
$.each(checked, function(i, v) {
|
3268
|
+
$.each(checked, function(i, v) {
|
3269
|
+
var text = escape ? $.fn.editableutils.escape(v.text) : v.text;
|
3270
|
+
html.push(text);
|
3271
|
+
});
|
3236
3272
|
$(element).html(html.join('<br>'));
|
3237
3273
|
} else {
|
3238
3274
|
$(element).empty();
|
@@ -3502,7 +3538,7 @@ Time
|
|
3502
3538
|
/**
|
3503
3539
|
Select2 input. Based on amazing work of Igor Vaynberg https://github.com/ivaynberg/select2.
|
3504
3540
|
Please see [original select2 docs](http://ivaynberg.github.com/select2) for detailed description and options.
|
3505
|
-
|
3541
|
+
|
3506
3542
|
You should manually download and include select2 distributive:
|
3507
3543
|
|
3508
3544
|
<link href="select2/select2.css" rel="stylesheet" type="text/css"></link>
|
@@ -3643,9 +3679,11 @@ $(function(){
|
|
3643
3679
|
$.extend(Constructor.prototype, {
|
3644
3680
|
render: function() {
|
3645
3681
|
this.setClass();
|
3646
|
-
|
3647
|
-
//apply select2
|
3648
|
-
|
3682
|
+
|
3683
|
+
//can not apply select2 here as it calls initSelection
|
3684
|
+
//over input that does not have correct value yet.
|
3685
|
+
//apply select2 only in value2input
|
3686
|
+
//this.$input.select2(this.options.select2);
|
3649
3687
|
|
3650
3688
|
//when data is loaded via ajax, we need to know when it's done to populate listData
|
3651
3689
|
if(this.isRemote) {
|
@@ -3673,7 +3711,8 @@ $(function(){
|
|
3673
3711
|
} else if(this.sourceData) {
|
3674
3712
|
data = $.fn.editableutils.itemsByValue(value, this.sourceData, this.idFunc);
|
3675
3713
|
} else {
|
3676
|
-
//can not get list of possible values
|
3714
|
+
//can not get list of possible values
|
3715
|
+
//(e.g. autotext for select2 with ajax source)
|
3677
3716
|
}
|
3678
3717
|
|
3679
3718
|
//data may be array (when multiple values allowed)
|
@@ -3689,7 +3728,8 @@ $(function(){
|
|
3689
3728
|
|
3690
3729
|
text = $.isArray(text) ? text.join(this.options.viewseparator) : text;
|
3691
3730
|
|
3692
|
-
|
3731
|
+
//$(element).text(text);
|
3732
|
+
Constructor.superclass.value2html.call(this, text, element);
|
3693
3733
|
},
|
3694
3734
|
|
3695
3735
|
html2value: function(html) {
|
@@ -3708,8 +3748,14 @@ $(function(){
|
|
3708
3748
|
}
|
3709
3749
|
*/
|
3710
3750
|
|
3711
|
-
//for remote source just set value, text is updated by initSelection
|
3712
|
-
this.$input.
|
3751
|
+
//for remote source just set value, text is updated by initSelection
|
3752
|
+
if(!this.$input.data('select2')) {
|
3753
|
+
this.$input.val(value);
|
3754
|
+
this.$input.select2(this.options.select2);
|
3755
|
+
} else {
|
3756
|
+
//second argument needed to separate initial change from user's click (for autosubmit)
|
3757
|
+
this.$input.val(value).trigger('change', true);
|
3758
|
+
}
|
3713
3759
|
|
3714
3760
|
//if remote source AND no user's initSelection provided --> try to use element's text
|
3715
3761
|
if(this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {
|
@@ -3717,7 +3763,7 @@ $(function(){
|
|
3717
3763
|
customText = this.options.select2.formatSelection;
|
3718
3764
|
if(!customId && !customText) {
|
3719
3765
|
var data = {id: value, text: $(this.options.scope).text()};
|
3720
|
-
this.$input.select2('data', data);
|
3766
|
+
this.$input.select2('data', data);
|
3721
3767
|
}
|
3722
3768
|
}
|
3723
3769
|
},
|
@@ -3806,7 +3852,7 @@ $(function(){
|
|
3806
3852
|
E.g. `[{id: 1, text: "text1"}, {id: 2, text: "text2"}, ...]`.
|
3807
3853
|
|
3808
3854
|
@property source
|
3809
|
-
@type array
|
3855
|
+
@type array|string|function
|
3810
3856
|
@default null
|
3811
3857
|
**/
|
3812
3858
|
source: null,
|
@@ -3817,7 +3863,7 @@ $(function(){
|
|
3817
3863
|
@type string
|
3818
3864
|
@default ', '
|
3819
3865
|
**/
|
3820
|
-
viewseparator: ', '
|
3866
|
+
viewseparator: ', '
|
3821
3867
|
});
|
3822
3868
|
|
3823
3869
|
$.fn.editabletypes.select2 = Constructor;
|
@@ -4297,7 +4343,7 @@ Internally value stored as `momentjs` object.
|
|
4297
4343
|
@final
|
4298
4344
|
@since 1.4.0
|
4299
4345
|
@example
|
4300
|
-
<a href="#" id="dob" data-type="combodate" data-pk="1" data-url="/post" data-value="1984-05-15" data-
|
4346
|
+
<a href="#" id="dob" data-type="combodate" data-pk="1" data-url="/post" data-value="1984-05-15" data-title="Select date"></a>
|
4301
4347
|
<script>
|
4302
4348
|
$(function(){
|
4303
4349
|
$('#dob').editable({
|
@@ -4343,7 +4389,14 @@ $(function(){
|
|
4343
4389
|
$.extend(Constructor.prototype, {
|
4344
4390
|
render: function () {
|
4345
4391
|
this.$input.combodate(this.options.combodate);
|
4392
|
+
|
4393
|
+
if($.fn.editableform.engine === 'bs3') {
|
4394
|
+
this.$input.siblings().find('select').addClass('form-control');
|
4395
|
+
}
|
4346
4396
|
|
4397
|
+
if(this.options.inputclass) {
|
4398
|
+
this.$input.siblings().find('select').addClass(this.options.inputclass);
|
4399
|
+
}
|
4347
4400
|
//"clear" link
|
4348
4401
|
/*
|
4349
4402
|
if(this.options.clear) {
|
@@ -4360,7 +4413,8 @@ $(function(){
|
|
4360
4413
|
|
4361
4414
|
value2html: function(value, element) {
|
4362
4415
|
var text = value ? value.format(this.options.viewformat) : '';
|
4363
|
-
|
4416
|
+
//$(element).text(text);
|
4417
|
+
Constructor.superclass.value2html.call(this, text, element);
|
4364
4418
|
},
|
4365
4419
|
|
4366
4420
|
html2value: function(html) {
|
@@ -4479,6 +4533,7 @@ $(function(){
|
|
4479
4533
|
$.extend($.fn.editableContainer.Popup.prototype, {
|
4480
4534
|
containerName: 'poshytip',
|
4481
4535
|
innerCss: 'div.tip-inner',
|
4536
|
+
defaults: $.fn.poshytip.defaults,
|
4482
4537
|
|
4483
4538
|
initContainer: function(){
|
4484
4539
|
this.handlePlacement();
|
@@ -4683,7 +4738,7 @@ For **i18n** you should include js file from here: https://github.com/jquery/jqu
|
|
4683
4738
|
@extends abstractinput
|
4684
4739
|
@final
|
4685
4740
|
@example
|
4686
|
-
<a href="#" id="dob" data-type="date" data-pk="1" data-url="/post" data-
|
4741
|
+
<a href="#" id="dob" data-type="date" data-pk="1" data-url="/post" data-title="Select date">15/05/1984</a>
|
4687
4742
|
<script>
|
4688
4743
|
$(function(){
|
4689
4744
|
$('#dob').editable({
|
@@ -4742,7 +4797,7 @@ $(function(){
|
|
4742
4797
|
|
4743
4798
|
value2html: function(value, element) {
|
4744
4799
|
var text = $.datepicker.formatDate(this.options.viewformat, value);
|
4745
|
-
DateUI.superclass.value2html(text, element);
|
4800
|
+
DateUI.superclass.value2html.call(this, text, element);
|
4746
4801
|
},
|
4747
4802
|
|
4748
4803
|
html2value: function(html) {
|
@@ -1,8 +1,7 @@
|
|
1
|
-
/*! X-editable - v1.
|
1
|
+
/*! X-editable - v1.5.0
|
2
2
|
* In-place editing with Twitter Bootstrap, jQuery UI or pure jQuery
|
3
3
|
* http://github.com/vitalets/x-editable
|
4
4
|
* Copyright (c) 2013 Vitaliy Potapov; Licensed MIT */
|
5
|
-
|
6
5
|
/**
|
7
6
|
Form with single input element, two buttons and two states: normal/loading.
|
8
7
|
Applied as jQuery method to DIV tag (not to form tag!). This is because form can be in loading state when spinner shown.
|
@@ -33,6 +32,9 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
33
32
|
//set initial value
|
34
33
|
//todo: may be add check: typeof str === 'string' ?
|
35
34
|
this.value = this.input.str2value(this.options.value);
|
35
|
+
|
36
|
+
//prerender: get input.$input
|
37
|
+
this.input.prerender();
|
36
38
|
},
|
37
39
|
initTemplate: function() {
|
38
40
|
this.$form = $($.fn.editableform.template);
|
@@ -80,9 +82,8 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
80
82
|
this.initInput();
|
81
83
|
|
82
84
|
//append input to form
|
83
|
-
this.input.prerender();
|
84
85
|
this.$form.find('div.editable-input').append(this.input.$tpl);
|
85
|
-
|
86
|
+
|
86
87
|
//append form to container
|
87
88
|
this.$div.append(this.$form);
|
88
89
|
|
@@ -620,6 +621,9 @@ Editableform is linked with one of input types, e.g. 'text', 'select' etc.
|
|
620
621
|
|
621
622
|
//error class attached to editable-error-block
|
622
623
|
$.fn.editableform.errorBlockClass = 'editable-error';
|
624
|
+
|
625
|
+
//engine
|
626
|
+
$.fn.editableform.engine = 'jquery';
|
623
627
|
}(window.jQuery));
|
624
628
|
|
625
629
|
/**
|
@@ -898,6 +902,8 @@ Applied as jQuery method.
|
|
898
902
|
containerDataName: null, //object name in element's .data()
|
899
903
|
innerCss: null, //tbd in child class
|
900
904
|
containerClass: 'editable-container editable-popup', //css class applied to container element
|
905
|
+
defaults: {}, //container itself defaults
|
906
|
+
|
901
907
|
init: function(element, options) {
|
902
908
|
this.$element = $(element);
|
903
909
|
//since 1.4.1 container do not use data-* directly as they already merged into options.
|
@@ -975,10 +981,9 @@ Applied as jQuery method.
|
|
975
981
|
throw new Error(this.containerName + ' not found. Have you included corresponding js file?');
|
976
982
|
}
|
977
983
|
|
978
|
-
var cDef = $.fn[this.containerName].defaults;
|
979
984
|
//keys defined in container defaults go to container, others go to form
|
980
985
|
for(var k in this.options) {
|
981
|
-
if(k in
|
986
|
+
if(k in this.defaults) {
|
982
987
|
this.containerOptions[k] = this.options[k];
|
983
988
|
} else {
|
984
989
|
this.formOptions[k] = this.options[k];
|
@@ -1727,13 +1732,12 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|
1727
1732
|
this.isEmpty = isEmpty;
|
1728
1733
|
} else {
|
1729
1734
|
//detect empty
|
1730
|
-
|
1731
|
-
|
1732
|
-
|
1733
|
-
this.isEmpty =
|
1735
|
+
//for some inputs we need more smart check
|
1736
|
+
//e.g. wysihtml5 may have <br>, <p></p>, <img>
|
1737
|
+
if(typeof(this.input.isEmpty) === 'function') {
|
1738
|
+
this.isEmpty = this.input.isEmpty(this.$element);
|
1734
1739
|
} else {
|
1735
|
-
|
1736
|
-
this.isEmpty = !this.$element.height() || !this.$element.width();
|
1740
|
+
this.isEmpty = $.trim(this.$element.html()) === '';
|
1737
1741
|
}
|
1738
1742
|
}
|
1739
1743
|
|
@@ -2249,7 +2253,7 @@ Makes editable any HTML element on the page. Applied as jQuery method.
|
|
2249
2253
|
@since 1.4.5
|
2250
2254
|
@default #FFFF80
|
2251
2255
|
**/
|
2252
|
-
highlight: '#FFFF80'
|
2256
|
+
highlight: '#FFFF80'
|
2253
2257
|
};
|
2254
2258
|
|
2255
2259
|
}(window.jQuery));
|
@@ -2308,7 +2312,7 @@ To create your own input you can inherit from this class.
|
|
2308
2312
|
@param {DOMElement} element
|
2309
2313
|
**/
|
2310
2314
|
value2html: function(value, element) {
|
2311
|
-
$(element).text($.trim(value));
|
2315
|
+
$(element)[this.options.escape ? 'text' : 'html']($.trim(value));
|
2312
2316
|
},
|
2313
2317
|
|
2314
2318
|
/**
|
@@ -2415,7 +2419,7 @@ To create your own input you can inherit from this class.
|
|
2415
2419
|
},
|
2416
2420
|
|
2417
2421
|
// -------- helper functions --------
|
2418
|
-
setClass: function() {
|
2422
|
+
setClass: function() {
|
2419
2423
|
if(this.options.inputclass) {
|
2420
2424
|
this.$input.addClass(this.options.inputclass);
|
2421
2425
|
}
|
@@ -2447,9 +2451,22 @@ To create your own input you can inherit from this class.
|
|
2447
2451
|
|
2448
2452
|
@property inputclass
|
2449
2453
|
@type string
|
2450
|
-
@default
|
2454
|
+
@default null
|
2451
2455
|
**/
|
2452
|
-
inputclass:
|
2456
|
+
inputclass: null,
|
2457
|
+
|
2458
|
+
/**
|
2459
|
+
If `true` - html will be escaped in content of element via $.text() method.
|
2460
|
+
If `false` - html will not be escaped, $.html() used.
|
2461
|
+
When you use own `display` function, this option obviosly has no effect.
|
2462
|
+
|
2463
|
+
@property escape
|
2464
|
+
@type boolean
|
2465
|
+
@since 1.5.0
|
2466
|
+
@default true
|
2467
|
+
**/
|
2468
|
+
escape: true,
|
2469
|
+
|
2453
2470
|
//scope for external methods (e.g. source defined as function)
|
2454
2471
|
//for internal use only
|
2455
2472
|
scope: null,
|
@@ -2581,8 +2598,8 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2581
2598
|
}
|
2582
2599
|
}
|
2583
2600
|
|
2584
|
-
//
|
2585
|
-
$.
|
2601
|
+
//ajaxOptions for source. Can be overwritten bt options.sourceOptions
|
2602
|
+
var ajaxOptions = $.extend({
|
2586
2603
|
url: source,
|
2587
2604
|
type: 'get',
|
2588
2605
|
cache: false,
|
@@ -2617,7 +2634,11 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2617
2634
|
$.each(cache.err_callbacks, function () { this.call(); });
|
2618
2635
|
}
|
2619
2636
|
}, this)
|
2620
|
-
});
|
2637
|
+
}, this.options.sourceOptions);
|
2638
|
+
|
2639
|
+
//loading sourceData from server
|
2640
|
+
$.ajax(ajaxOptions);
|
2641
|
+
|
2621
2642
|
} else { //options as json/array
|
2622
2643
|
this.sourceData = this.makeArray(source);
|
2623
2644
|
|
@@ -2777,7 +2798,17 @@ List - abstract class for inputs that have source option loaded from js array or
|
|
2777
2798
|
@default true
|
2778
2799
|
@since 1.2.0
|
2779
2800
|
**/
|
2780
|
-
sourceCache: true
|
2801
|
+
sourceCache: true,
|
2802
|
+
/**
|
2803
|
+
Additional ajax options to be used in $.ajax() when loading list from server.
|
2804
|
+
Useful to send extra parameters (`data` key) or change request method (`type` key).
|
2805
|
+
|
2806
|
+
@property sourceOptions
|
2807
|
+
@type object|function
|
2808
|
+
@default null
|
2809
|
+
@since 1.5.0
|
2810
|
+
**/
|
2811
|
+
sourceOptions: null
|
2781
2812
|
});
|
2782
2813
|
|
2783
2814
|
$.fn.editabletypes.list = List;
|
@@ -3038,7 +3069,7 @@ Select (dropdown)
|
|
3038
3069
|
@extends list
|
3039
3070
|
@final
|
3040
3071
|
@example
|
3041
|
-
<a href="#" id="status" data-type="select" data-pk="1" data-url="/post" data-
|
3072
|
+
<a href="#" id="status" data-type="select" data-pk="1" data-url="/post" data-title="Select status"></a>
|
3042
3073
|
<script>
|
3043
3074
|
$(function(){
|
3044
3075
|
$('#status').editable({
|
@@ -3105,7 +3136,8 @@ $(function(){
|
|
3105
3136
|
text = items[0].text;
|
3106
3137
|
}
|
3107
3138
|
|
3108
|
-
|
3139
|
+
//$(element).text(text);
|
3140
|
+
$.fn.editabletypes.abstractinput.prototype.value2html.call(this, text, element);
|
3109
3141
|
},
|
3110
3142
|
|
3111
3143
|
autosubmit: function() {
|
@@ -3135,7 +3167,7 @@ Internally value stored as javascript array of values.
|
|
3135
3167
|
@extends list
|
3136
3168
|
@final
|
3137
3169
|
@example
|
3138
|
-
<a href="#" id="options" data-type="checklist" data-pk="1" data-url="/post" data-
|
3170
|
+
<a href="#" id="options" data-type="checklist" data-pk="1" data-url="/post" data-title="Select options"></a>
|
3139
3171
|
<script>
|
3140
3172
|
$(function(){
|
3141
3173
|
$('#options').editable({
|
@@ -3229,10 +3261,14 @@ $(function(){
|
|
3229
3261
|
//collect text of checked boxes
|
3230
3262
|
value2htmlFinal: function(value, element) {
|
3231
3263
|
var html = [],
|
3232
|
-
checked = $.fn.editableutils.itemsByValue(value, this.sourceData)
|
3264
|
+
checked = $.fn.editableutils.itemsByValue(value, this.sourceData),
|
3265
|
+
escape = this.options.escape;
|
3233
3266
|
|
3234
3267
|
if(checked.length) {
|
3235
|
-
$.each(checked, function(i, v) {
|
3268
|
+
$.each(checked, function(i, v) {
|
3269
|
+
var text = escape ? $.fn.editableutils.escape(v.text) : v.text;
|
3270
|
+
html.push(text);
|
3271
|
+
});
|
3236
3272
|
$(element).html(html.join('<br>'));
|
3237
3273
|
} else {
|
3238
3274
|
$(element).empty();
|
@@ -3502,7 +3538,7 @@ Time
|
|
3502
3538
|
/**
|
3503
3539
|
Select2 input. Based on amazing work of Igor Vaynberg https://github.com/ivaynberg/select2.
|
3504
3540
|
Please see [original select2 docs](http://ivaynberg.github.com/select2) for detailed description and options.
|
3505
|
-
|
3541
|
+
|
3506
3542
|
You should manually download and include select2 distributive:
|
3507
3543
|
|
3508
3544
|
<link href="select2/select2.css" rel="stylesheet" type="text/css"></link>
|
@@ -3643,9 +3679,11 @@ $(function(){
|
|
3643
3679
|
$.extend(Constructor.prototype, {
|
3644
3680
|
render: function() {
|
3645
3681
|
this.setClass();
|
3646
|
-
|
3647
|
-
//apply select2
|
3648
|
-
|
3682
|
+
|
3683
|
+
//can not apply select2 here as it calls initSelection
|
3684
|
+
//over input that does not have correct value yet.
|
3685
|
+
//apply select2 only in value2input
|
3686
|
+
//this.$input.select2(this.options.select2);
|
3649
3687
|
|
3650
3688
|
//when data is loaded via ajax, we need to know when it's done to populate listData
|
3651
3689
|
if(this.isRemote) {
|
@@ -3673,7 +3711,8 @@ $(function(){
|
|
3673
3711
|
} else if(this.sourceData) {
|
3674
3712
|
data = $.fn.editableutils.itemsByValue(value, this.sourceData, this.idFunc);
|
3675
3713
|
} else {
|
3676
|
-
//can not get list of possible values
|
3714
|
+
//can not get list of possible values
|
3715
|
+
//(e.g. autotext for select2 with ajax source)
|
3677
3716
|
}
|
3678
3717
|
|
3679
3718
|
//data may be array (when multiple values allowed)
|
@@ -3689,7 +3728,8 @@ $(function(){
|
|
3689
3728
|
|
3690
3729
|
text = $.isArray(text) ? text.join(this.options.viewseparator) : text;
|
3691
3730
|
|
3692
|
-
|
3731
|
+
//$(element).text(text);
|
3732
|
+
Constructor.superclass.value2html.call(this, text, element);
|
3693
3733
|
},
|
3694
3734
|
|
3695
3735
|
html2value: function(html) {
|
@@ -3708,8 +3748,14 @@ $(function(){
|
|
3708
3748
|
}
|
3709
3749
|
*/
|
3710
3750
|
|
3711
|
-
//for remote source just set value, text is updated by initSelection
|
3712
|
-
this.$input.
|
3751
|
+
//for remote source just set value, text is updated by initSelection
|
3752
|
+
if(!this.$input.data('select2')) {
|
3753
|
+
this.$input.val(value);
|
3754
|
+
this.$input.select2(this.options.select2);
|
3755
|
+
} else {
|
3756
|
+
//second argument needed to separate initial change from user's click (for autosubmit)
|
3757
|
+
this.$input.val(value).trigger('change', true);
|
3758
|
+
}
|
3713
3759
|
|
3714
3760
|
//if remote source AND no user's initSelection provided --> try to use element's text
|
3715
3761
|
if(this.isRemote && !this.isMultiple && !this.options.select2.initSelection) {
|
@@ -3717,7 +3763,7 @@ $(function(){
|
|
3717
3763
|
customText = this.options.select2.formatSelection;
|
3718
3764
|
if(!customId && !customText) {
|
3719
3765
|
var data = {id: value, text: $(this.options.scope).text()};
|
3720
|
-
this.$input.select2('data', data);
|
3766
|
+
this.$input.select2('data', data);
|
3721
3767
|
}
|
3722
3768
|
}
|
3723
3769
|
},
|
@@ -3806,7 +3852,7 @@ $(function(){
|
|
3806
3852
|
E.g. `[{id: 1, text: "text1"}, {id: 2, text: "text2"}, ...]`.
|
3807
3853
|
|
3808
3854
|
@property source
|
3809
|
-
@type array
|
3855
|
+
@type array|string|function
|
3810
3856
|
@default null
|
3811
3857
|
**/
|
3812
3858
|
source: null,
|
@@ -3817,7 +3863,7 @@ $(function(){
|
|
3817
3863
|
@type string
|
3818
3864
|
@default ', '
|
3819
3865
|
**/
|
3820
|
-
viewseparator: ', '
|
3866
|
+
viewseparator: ', '
|
3821
3867
|
});
|
3822
3868
|
|
3823
3869
|
$.fn.editabletypes.select2 = Constructor;
|
@@ -4297,7 +4343,7 @@ Internally value stored as `momentjs` object.
|
|
4297
4343
|
@final
|
4298
4344
|
@since 1.4.0
|
4299
4345
|
@example
|
4300
|
-
<a href="#" id="dob" data-type="combodate" data-pk="1" data-url="/post" data-value="1984-05-15" data-
|
4346
|
+
<a href="#" id="dob" data-type="combodate" data-pk="1" data-url="/post" data-value="1984-05-15" data-title="Select date"></a>
|
4301
4347
|
<script>
|
4302
4348
|
$(function(){
|
4303
4349
|
$('#dob').editable({
|
@@ -4343,7 +4389,14 @@ $(function(){
|
|
4343
4389
|
$.extend(Constructor.prototype, {
|
4344
4390
|
render: function () {
|
4345
4391
|
this.$input.combodate(this.options.combodate);
|
4392
|
+
|
4393
|
+
if($.fn.editableform.engine === 'bs3') {
|
4394
|
+
this.$input.siblings().find('select').addClass('form-control');
|
4395
|
+
}
|
4346
4396
|
|
4397
|
+
if(this.options.inputclass) {
|
4398
|
+
this.$input.siblings().find('select').addClass(this.options.inputclass);
|
4399
|
+
}
|
4347
4400
|
//"clear" link
|
4348
4401
|
/*
|
4349
4402
|
if(this.options.clear) {
|
@@ -4360,7 +4413,8 @@ $(function(){
|
|
4360
4413
|
|
4361
4414
|
value2html: function(value, element) {
|
4362
4415
|
var text = value ? value.format(this.options.viewformat) : '';
|
4363
|
-
|
4416
|
+
//$(element).text(text);
|
4417
|
+
Constructor.superclass.value2html.call(this, text, element);
|
4364
4418
|
},
|
4365
4419
|
|
4366
4420
|
html2value: function(html) {
|
@@ -4495,6 +4549,8 @@ Editableform based on jQuery UI
|
|
4495
4549
|
//error classes
|
4496
4550
|
$.fn.editableform.errorGroupClass = null;
|
4497
4551
|
$.fn.editableform.errorBlockClass = 'ui-state-error';
|
4552
|
+
//engine
|
4553
|
+
$.fn.editableform.engine = 'jquery-ui';
|
4498
4554
|
|
4499
4555
|
}(window.jQuery));
|
4500
4556
|
/**
|
@@ -4511,6 +4567,7 @@ Editableform based on jQuery UI
|
|
4511
4567
|
//object name in element's .data()
|
4512
4568
|
containerDataName: 'ui-tooltip',
|
4513
4569
|
innerCss: '.ui-tooltip-content',
|
4570
|
+
defaults: $.ui.tooltip.prototype.options,
|
4514
4571
|
|
4515
4572
|
//split options on containerOptions and formOptions
|
4516
4573
|
splitOptions: function() {
|
@@ -4522,10 +4579,10 @@ Editableform based on jQuery UI
|
|
4522
4579
|
$.error('Please use jQueryUI with "tooltip" widget! http://jqueryui.com/download');
|
4523
4580
|
return;
|
4524
4581
|
}
|
4582
|
+
|
4525
4583
|
//defaults for tooltip
|
4526
|
-
var cDef = $.ui[this.containerName].prototype.options;
|
4527
4584
|
for(var k in this.options) {
|
4528
|
-
if(k in
|
4585
|
+
if(k in this.defaults) {
|
4529
4586
|
this.containerOptions[k] = this.options[k];
|
4530
4587
|
} else {
|
4531
4588
|
this.formOptions[k] = this.options[k];
|
@@ -4628,7 +4685,7 @@ For **i18n** you should include js file from here: https://github.com/jquery/jqu
|
|
4628
4685
|
@extends abstractinput
|
4629
4686
|
@final
|
4630
4687
|
@example
|
4631
|
-
<a href="#" id="dob" data-type="date" data-pk="1" data-url="/post" data-
|
4688
|
+
<a href="#" id="dob" data-type="date" data-pk="1" data-url="/post" data-title="Select date">15/05/1984</a>
|
4632
4689
|
<script>
|
4633
4690
|
$(function(){
|
4634
4691
|
$('#dob').editable({
|
@@ -4687,7 +4744,7 @@ $(function(){
|
|
4687
4744
|
|
4688
4745
|
value2html: function(value, element) {
|
4689
4746
|
var text = $.datepicker.formatDate(this.options.viewformat, value);
|
4690
|
-
DateUI.superclass.value2html(text, element);
|
4747
|
+
DateUI.superclass.value2html.call(this, text, element);
|
4691
4748
|
},
|
4692
4749
|
|
4693
4750
|
html2value: function(html) {
|