fomantic-ui-sass 2.6.4 → 2.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +1 -0
- data/.rubocop_todo.yml +102 -0
- data/.travis.yml +9 -3
- data/README.md +4 -2
- data/Rakefile +25 -3
- data/app/assets/fonts/semantic-ui/brand-icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.svg +178 -11
- data/app/assets/fonts/semantic-ui/brand-icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/brand-icons.woff2 +0 -0
- data/app/assets/fonts/semantic-ui/icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/icons.svg +1138 -92
- data/app/assets/fonts/semantic-ui/icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/icons.woff2 +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.eot +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.svg +127 -26
- data/app/assets/fonts/semantic-ui/outline-icons.ttf +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.woff +0 -0
- data/app/assets/fonts/semantic-ui/outline-icons.woff2 +0 -0
- data/app/assets/javascripts/semantic-ui.js +1 -1
- data/app/assets/javascripts/semantic-ui/accordion.js +5 -1
- data/app/assets/javascripts/semantic-ui/api.js +9 -2
- data/app/assets/javascripts/semantic-ui/calendar.js +25 -12
- data/app/assets/javascripts/semantic-ui/checkbox.js +39 -2
- data/app/assets/javascripts/semantic-ui/dimmer.js +25 -5
- data/app/assets/javascripts/semantic-ui/dropdown.js +130 -47
- data/app/assets/javascripts/semantic-ui/embed.js +5 -1
- data/app/assets/javascripts/semantic-ui/form.js +24 -19
- data/app/assets/javascripts/semantic-ui/modal.js +33 -17
- data/app/assets/javascripts/semantic-ui/nag.js +5 -1
- data/app/assets/javascripts/semantic-ui/popup.js +10 -5
- data/app/assets/javascripts/semantic-ui/progress.js +5 -1
- data/app/assets/javascripts/semantic-ui/rating.js +21 -6
- data/app/assets/javascripts/semantic-ui/search.js +43 -27
- data/app/assets/javascripts/semantic-ui/shape.js +5 -1
- data/app/assets/javascripts/semantic-ui/sidebar.js +7 -3
- data/app/assets/javascripts/semantic-ui/site.js +6 -2
- data/app/assets/javascripts/semantic-ui/slider.js +1216 -0
- data/app/assets/javascripts/semantic-ui/state.js +5 -1
- data/app/assets/javascripts/semantic-ui/sticky.js +5 -1
- data/app/assets/javascripts/semantic-ui/tab.js +10 -3
- data/app/assets/javascripts/semantic-ui/toast.js +6 -2
- data/app/assets/javascripts/semantic-ui/transition.js +6 -2
- data/app/assets/javascripts/semantic-ui/visibility.js +6 -2
- data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +7 -7
- data/app/assets/stylesheets/semantic-ui/collections/_form.scss +59 -83
- data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +110 -124
- data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +262 -237
- data/app/assets/stylesheets/semantic-ui/collections/_message.scss +155 -118
- data/app/assets/stylesheets/semantic-ui/collections/_table.scss +332 -145
- data/app/assets/stylesheets/semantic-ui/elements/_button.scss +2281 -2415
- data/app/assets/stylesheets/semantic-ui/elements/_container.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +10 -10
- data/app/assets/stylesheets/semantic-ui/elements/_flag.scss +81 -81
- data/app/assets/stylesheets/semantic-ui/elements/_header.scss +178 -191
- data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +71 -103
- data/app/assets/stylesheets/semantic-ui/elements/_image.scss +8 -8
- data/app/assets/stylesheets/semantic-ui/elements/_input.scss +61 -40
- data/app/assets/stylesheets/semantic-ui/elements/_label.scss +1087 -444
- data/app/assets/stylesheets/semantic-ui/elements/_list.scss +69 -69
- data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +510 -155
- data/app/assets/stylesheets/semantic-ui/elements/_placeholder.scss +20 -14
- data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +26 -26
- data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +8 -8
- data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +180 -216
- data/app/assets/stylesheets/semantic-ui/elements/_step.scss +34 -39
- data/app/assets/stylesheets/semantic-ui/elements/_text.scss +114 -0
- data/app/assets/stylesheets/semantic-ui/globals/_reset.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/globals/_site.scss +11 -20
- data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +16 -16
- data/app/assets/stylesheets/semantic-ui/modules/_all.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +23 -23
- data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +32 -32
- data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +128 -155
- data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +13 -13
- data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +50 -48
- data/app/assets/stylesheets/semantic-ui/modules/_nag.scss +15 -15
- data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +50 -50
- data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +30 -44
- data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +137 -111
- data/app/assets/stylesheets/semantic-ui/modules/_search.scss +24 -28
- data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +6 -6
- data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +29 -29
- data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +768 -0
- data/app/assets/stylesheets/semantic-ui/modules/_sticky.scss +3 -3
- data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +10 -14
- data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +27 -16
- data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +1 -1
- data/app/assets/stylesheets/semantic-ui/views/_ad.scss +6 -6
- data/app/assets/stylesheets/semantic-ui/views/_card.scss +103 -133
- data/app/assets/stylesheets/semantic-ui/views/_comment.scss +26 -26
- data/app/assets/stylesheets/semantic-ui/views/_feed.scss +27 -27
- data/app/assets/stylesheets/semantic-ui/views/_item.scss +54 -54
- data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +138 -108
- data/app/helpers/semantic_breadcrumbs_helper.rb +1 -1
- data/app/helpers/semantic_flash_helper.rb +4 -2
- data/app/helpers/semantic_icon_helper.rb +1 -1
- data/fomantic-ui-sass.gemspec +20 -19
- data/gemfiles/rails_5.0.gemfile +5 -0
- data/gemfiles/rails_5.1.gemfile +5 -0
- data/gemfiles/rails_5.2.gemfile +5 -0
- data/lib/fomantic-ui-sass.rb +3 -4
- data/lib/fomantic/ui/sass/breadcrumbs.rb +2 -4
- data/lib/fomantic/ui/sass/engine.rb +3 -3
- data/lib/fomantic/ui/sass/version.rb +2 -2
- data/spec/dummy/Rakefile +1 -1
- data/spec/dummy/bin/bundle +1 -1
- data/spec/dummy/bin/rails +1 -1
- data/spec/dummy/bin/rake +0 -0
- data/spec/dummy/config.ru +1 -1
- data/spec/dummy/config/application.rb +5 -6
- data/spec/dummy/config/boot.rb +3 -3
- data/spec/dummy/config/environment.rb +1 -1
- data/spec/dummy/config/environments/test.rb +1 -1
- data/spec/helpers/semantic_breadcrumbs_helper_spec.rb +30 -32
- data/spec/helpers/semantic_flash_helper_spec.rb +15 -16
- data/spec/helpers/semantic_icon_helper_spec.rb +10 -10
- data/spec/spec_helper.rb +4 -6
- data/tasks/converter.rb +61 -73
- data/templates/project/manifest.rb +1 -2
- metadata +45 -23
- data/app/assets/javascripts/semantic-ui/range.js +0 -278
- data/app/assets/stylesheets/semantic-ui/modules/_range.scss +0 -192
@@ -12,6 +12,10 @@
|
|
12
12
|
|
13
13
|
'use strict';
|
14
14
|
|
15
|
+
$.isFunction = $.isFunction || function(obj) {
|
16
|
+
return typeof obj === "function" && typeof obj.nodeType !== "number";
|
17
|
+
};
|
18
|
+
|
15
19
|
window = (typeof window != 'undefined' && window.Math == Math)
|
16
20
|
? window
|
17
21
|
: (typeof self != 'undefined' && self.Math == Math)
|
@@ -171,6 +175,11 @@ $.fn.checkbox = function(parameters) {
|
|
171
175
|
},
|
172
176
|
|
173
177
|
event: {
|
178
|
+
change: function(event) {
|
179
|
+
if( !module.should.ignoreCallbacks() ) {
|
180
|
+
settings.onChange.call(input);
|
181
|
+
}
|
182
|
+
},
|
174
183
|
click: function(event) {
|
175
184
|
var
|
176
185
|
$target = $(event.target)
|
@@ -193,9 +202,36 @@ $.fn.checkbox = function(parameters) {
|
|
193
202
|
keyCode = {
|
194
203
|
enter : 13,
|
195
204
|
space : 32,
|
196
|
-
escape : 27
|
205
|
+
escape : 27,
|
206
|
+
left : 37,
|
207
|
+
up : 38,
|
208
|
+
right : 39,
|
209
|
+
down : 40
|
197
210
|
}
|
198
211
|
;
|
212
|
+
|
213
|
+
var r = module.get.radios(),
|
214
|
+
rIndex = r.index($module),
|
215
|
+
rLen = r.length,
|
216
|
+
checkIndex = false;
|
217
|
+
|
218
|
+
if(key == keyCode.left || key == keyCode.up) {
|
219
|
+
checkIndex = (rIndex === 0 ? rLen : rIndex) - 1;
|
220
|
+
} else if(key == keyCode.right || key == keyCode.down) {
|
221
|
+
checkIndex = rIndex === rLen-1 ? 0 : rIndex+1;
|
222
|
+
}
|
223
|
+
|
224
|
+
if (!module.should.ignoreCallbacks() && checkIndex !== false) {
|
225
|
+
if(!settings.beforeUnchecked.apply(input)) {
|
226
|
+
module.verbose('Option not allowed to be unchecked, cancelling key navigation');
|
227
|
+
return false;
|
228
|
+
}
|
229
|
+
if (!settings.beforeChecked.apply($(r[checkIndex]).children(selector.input)[0])) {
|
230
|
+
module.verbose('Next option should not allow check, cancelling key navigation');
|
231
|
+
return false;
|
232
|
+
}
|
233
|
+
}
|
234
|
+
|
199
235
|
if(key == keyCode.escape) {
|
200
236
|
module.verbose('Escape key pressed blurring field');
|
201
237
|
$input.blur();
|
@@ -546,6 +582,7 @@ $.fn.checkbox = function(parameters) {
|
|
546
582
|
module.verbose('Attaching checkbox events');
|
547
583
|
$module
|
548
584
|
.on('click' + eventNamespace, module.event.click)
|
585
|
+
.on('change' + eventNamespace, module.event.change)
|
549
586
|
.on('keydown' + eventNamespace, selector.input, module.event.keydown)
|
550
587
|
.on('keyup' + eventNamespace, selector.input, module.event.keyup)
|
551
588
|
;
|
@@ -735,7 +772,7 @@ $.fn.checkbox = function(parameters) {
|
|
735
772
|
else if(found !== undefined) {
|
736
773
|
response = found;
|
737
774
|
}
|
738
|
-
if(
|
775
|
+
if(Array.isArray(returnedValue)) {
|
739
776
|
returnedValue.push(response);
|
740
777
|
}
|
741
778
|
else if(returnedValue !== undefined) {
|
@@ -12,6 +12,10 @@
|
|
12
12
|
|
13
13
|
'use strict';
|
14
14
|
|
15
|
+
$.isFunction = $.isFunction || function(obj) {
|
16
|
+
return typeof obj === "function" && typeof obj.nodeType !== "number";
|
17
|
+
};
|
18
|
+
|
15
19
|
window = (typeof window != 'undefined' && window.Math == Math)
|
16
20
|
? window
|
17
21
|
: (typeof self != 'undefined' && self.Math == Math)
|
@@ -171,7 +175,7 @@ $.fn.dimmer = function(parameters) {
|
|
171
175
|
|
172
176
|
create: function() {
|
173
177
|
var
|
174
|
-
$element = $( settings.template.dimmer() )
|
178
|
+
$element = $( settings.template.dimmer(settings) )
|
175
179
|
;
|
176
180
|
if(settings.dimmerName) {
|
177
181
|
module.debug('Creating named dimmer', settings.dimmerName);
|
@@ -622,7 +626,7 @@ $.fn.dimmer = function(parameters) {
|
|
622
626
|
else if(found !== undefined) {
|
623
627
|
response = found;
|
624
628
|
}
|
625
|
-
if(
|
629
|
+
if(Array.isArray(returnedValue)) {
|
626
630
|
returnedValue.push(response);
|
627
631
|
}
|
628
632
|
else if(returnedValue !== undefined) {
|
@@ -697,6 +701,10 @@ $.fn.dimmer.settings = {
|
|
697
701
|
show : 500,
|
698
702
|
hide : 500
|
699
703
|
},
|
704
|
+
// whether the dynamically created dimmer should have a loader
|
705
|
+
displayLoader: false,
|
706
|
+
loaderText : false,
|
707
|
+
loaderVariation : '',
|
700
708
|
|
701
709
|
onChange : function(){},
|
702
710
|
onShow : function(){},
|
@@ -716,7 +724,8 @@ $.fn.dimmer.settings = {
|
|
716
724
|
hide : 'hide',
|
717
725
|
legacy : 'legacy',
|
718
726
|
pageDimmer : 'page',
|
719
|
-
show : 'show'
|
727
|
+
show : 'show',
|
728
|
+
loader : 'ui loader'
|
720
729
|
},
|
721
730
|
|
722
731
|
selector: {
|
@@ -725,8 +734,19 @@ $.fn.dimmer.settings = {
|
|
725
734
|
},
|
726
735
|
|
727
736
|
template: {
|
728
|
-
dimmer: function() {
|
729
|
-
|
737
|
+
dimmer: function(settings) {
|
738
|
+
var d = $('<div/>').addClass('ui dimmer'),l;
|
739
|
+
if(settings.displayLoader) {
|
740
|
+
l = $('<div/>')
|
741
|
+
.addClass(settings.className.loader)
|
742
|
+
.addClass(settings.loaderVariation);
|
743
|
+
if(!!settings.loaderText){
|
744
|
+
l.text(settings.loaderText);
|
745
|
+
l.addClass('text');
|
746
|
+
}
|
747
|
+
d.append(l);
|
748
|
+
}
|
749
|
+
return d;
|
730
750
|
}
|
731
751
|
}
|
732
752
|
|
@@ -12,6 +12,10 @@
|
|
12
12
|
|
13
13
|
'use strict';
|
14
14
|
|
15
|
+
$.isFunction = $.isFunction || function(obj) {
|
16
|
+
return typeof obj === "function" && typeof obj.nodeType !== "number";
|
17
|
+
};
|
18
|
+
|
15
19
|
window = (typeof window != 'undefined' && window.Math == Math)
|
16
20
|
? window
|
17
21
|
: (typeof self != 'undefined' && self.Math == Math)
|
@@ -203,7 +207,7 @@ $.fn.dropdown = function(parameters) {
|
|
203
207
|
if(!values) {
|
204
208
|
return false;
|
205
209
|
}
|
206
|
-
values =
|
210
|
+
values = Array.isArray(values)
|
207
211
|
? values
|
208
212
|
: [values]
|
209
213
|
;
|
@@ -369,7 +373,7 @@ $.fn.dropdown = function(parameters) {
|
|
369
373
|
.attr('class', $input.attr('class') )
|
370
374
|
.addClass(className.selection)
|
371
375
|
.addClass(className.dropdown)
|
372
|
-
.html( templates.dropdown(selectValues) )
|
376
|
+
.html( templates.dropdown(selectValues,settings.preserveHTML) )
|
373
377
|
.insertBefore($input)
|
374
378
|
;
|
375
379
|
if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {
|
@@ -392,7 +396,7 @@ $.fn.dropdown = function(parameters) {
|
|
392
396
|
module.refresh();
|
393
397
|
},
|
394
398
|
menu: function(values) {
|
395
|
-
$menu.html( templates.menu(values, fields));
|
399
|
+
$menu.html( templates.menu(values, fields,settings.preserveHTML));
|
396
400
|
$item = $menu.find(selector.item);
|
397
401
|
$divider = settings.hideDividers ? $item.parent().children(selector.divider) : $();
|
398
402
|
},
|
@@ -725,7 +729,7 @@ $.fn.dropdown = function(parameters) {
|
|
725
729
|
module.remove.message();
|
726
730
|
}
|
727
731
|
if(settings.allowAdditions) {
|
728
|
-
module.add.userSuggestion(query);
|
732
|
+
module.add.userSuggestion(module.escape.htmlEntities(query));
|
729
733
|
}
|
730
734
|
if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {
|
731
735
|
module.show();
|
@@ -741,6 +745,15 @@ $.fn.dropdown = function(parameters) {
|
|
741
745
|
if(settings.filterRemoteData) {
|
742
746
|
module.filterItems(searchTerm);
|
743
747
|
}
|
748
|
+
var preSelected = $input.val();
|
749
|
+
if(!Array.isArray(preSelected)) {
|
750
|
+
preSelected = preSelected!=="" ? preSelected.split(settings.delimiter) : [];
|
751
|
+
}
|
752
|
+
$.each(preSelected,function(index,value){
|
753
|
+
$item.filter('[data-value="'+value+'"]')
|
754
|
+
.addClass(className.filtered)
|
755
|
+
;
|
756
|
+
});
|
744
757
|
afterFiltered();
|
745
758
|
});
|
746
759
|
}
|
@@ -773,16 +786,17 @@ $.fn.dropdown = function(parameters) {
|
|
773
786
|
},
|
774
787
|
onSuccess : function(response) {
|
775
788
|
var
|
776
|
-
values = response[fields.remoteValues]
|
777
|
-
hasRemoteValues = ($.isArray(values) && values.length > 0)
|
789
|
+
values = response[fields.remoteValues]
|
778
790
|
;
|
779
|
-
if(
|
780
|
-
|
781
|
-
module.setup.menu({
|
782
|
-
values: response[fields.remoteValues]
|
783
|
-
});
|
791
|
+
if (!Array.isArray(values)){
|
792
|
+
values = [];
|
784
793
|
}
|
785
|
-
|
794
|
+
module.remove.message();
|
795
|
+
module.setup.menu({
|
796
|
+
values: values
|
797
|
+
});
|
798
|
+
|
799
|
+
if(values.length===0 && !settings.allowAdditions) {
|
786
800
|
module.add.message(message.noResults);
|
787
801
|
}
|
788
802
|
callback();
|
@@ -982,9 +996,11 @@ $.fn.dropdown = function(parameters) {
|
|
982
996
|
module.setup.menu({values: values});
|
983
997
|
$.each(values, function(index, item) {
|
984
998
|
if(item.selected == true) {
|
985
|
-
module.debug('Setting initial selection to', item.value);
|
986
|
-
module.set.selected(item.value);
|
987
|
-
|
999
|
+
module.debug('Setting initial selection to', item[fields.value]);
|
1000
|
+
module.set.selected(item[fields.value]);
|
1001
|
+
if(!module.is.multiple()) {
|
1002
|
+
return false;
|
1003
|
+
}
|
988
1004
|
}
|
989
1005
|
});
|
990
1006
|
}
|
@@ -1439,6 +1455,9 @@ $.fn.dropdown = function(parameters) {
|
|
1439
1455
|
if(module.is.searchSelection()) {
|
1440
1456
|
module.remove.searchTerm();
|
1441
1457
|
}
|
1458
|
+
if(module.is.multiple()){
|
1459
|
+
event.preventDefault();
|
1460
|
+
}
|
1442
1461
|
}
|
1443
1462
|
|
1444
1463
|
// visible menu keyboard shortcuts
|
@@ -1749,7 +1768,7 @@ $.fn.dropdown = function(parameters) {
|
|
1749
1768
|
count
|
1750
1769
|
;
|
1751
1770
|
count = ( module.is.multiple() )
|
1752
|
-
?
|
1771
|
+
? Array.isArray(values)
|
1753
1772
|
? values.length
|
1754
1773
|
: 0
|
1755
1774
|
: (module.get.value() !== '')
|
@@ -1773,7 +1792,7 @@ $.fn.dropdown = function(parameters) {
|
|
1773
1792
|
if(!values) {
|
1774
1793
|
return false;
|
1775
1794
|
}
|
1776
|
-
values =
|
1795
|
+
values = Array.isArray(values)
|
1777
1796
|
? values
|
1778
1797
|
: [values]
|
1779
1798
|
;
|
@@ -1808,7 +1827,7 @@ $.fn.dropdown = function(parameters) {
|
|
1808
1827
|
value = ($input.length > 0)
|
1809
1828
|
? $input.val()
|
1810
1829
|
: $module.data(metadata.value),
|
1811
|
-
isEmptyMultiselect = (
|
1830
|
+
isEmptyMultiselect = (Array.isArray(value) && value.length === 1 && value[0] === '')
|
1812
1831
|
;
|
1813
1832
|
// prevents placeholder element from being selected when multiple
|
1814
1833
|
return (value === undefined || isEmptyMultiselect)
|
@@ -1999,7 +2018,7 @@ $.fn.dropdown = function(parameters) {
|
|
1999
2018
|
? (value.length > 0)
|
2000
2019
|
: (value !== undefined && value !== null)
|
2001
2020
|
;
|
2002
|
-
isMultiple = (module.is.multiple() &&
|
2021
|
+
isMultiple = (module.is.multiple() && Array.isArray(value));
|
2003
2022
|
strict = (value === '' || value === 0)
|
2004
2023
|
? true
|
2005
2024
|
: strict || false
|
@@ -2143,6 +2162,11 @@ $.fn.dropdown = function(parameters) {
|
|
2143
2162
|
else {
|
2144
2163
|
module.set.selected();
|
2145
2164
|
}
|
2165
|
+
if(module.get.item()) {
|
2166
|
+
$input.removeClass(className.noselection);
|
2167
|
+
} else {
|
2168
|
+
$input.addClass(className.noselection);
|
2169
|
+
}
|
2146
2170
|
module.remove.initialLoad();
|
2147
2171
|
},
|
2148
2172
|
remoteValues: function() {
|
@@ -2485,8 +2509,13 @@ $.fn.dropdown = function(parameters) {
|
|
2485
2509
|
},
|
2486
2510
|
direction: function($menu) {
|
2487
2511
|
if(settings.direction == 'auto') {
|
2488
|
-
// reset position
|
2489
|
-
|
2512
|
+
// reset position, remove upward if it's base menu
|
2513
|
+
if (!$menu) {
|
2514
|
+
module.remove.upward();
|
2515
|
+
} else if (module.is.upward($menu)) {
|
2516
|
+
//we need make sure when make assertion openDownward for $menu, $menu does not have upward class
|
2517
|
+
module.remove.upward($menu);
|
2518
|
+
}
|
2490
2519
|
|
2491
2520
|
if(module.can.openDownward($menu)) {
|
2492
2521
|
module.remove.upward($menu);
|
@@ -2511,6 +2540,11 @@ $.fn.dropdown = function(parameters) {
|
|
2511
2540
|
$element.addClass(className.leftward);
|
2512
2541
|
},
|
2513
2542
|
value: function(value, text, $selected) {
|
2543
|
+
if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {
|
2544
|
+
$input.removeClass(className.noselection);
|
2545
|
+
} else {
|
2546
|
+
$input.addClass(className.noselection);
|
2547
|
+
}
|
2514
2548
|
var
|
2515
2549
|
escapedValue = module.escape.value(value),
|
2516
2550
|
hasInput = ($input.length > 0),
|
@@ -2664,7 +2698,7 @@ $.fn.dropdown = function(parameters) {
|
|
2664
2698
|
$label = $('<a />')
|
2665
2699
|
.addClass(className.label)
|
2666
2700
|
.attr('data-' + metadata.value, escapedValue)
|
2667
|
-
.html(templates.label(escapedValue, text))
|
2701
|
+
.html(templates.label(escapedValue, text, settings.preserveHTML))
|
2668
2702
|
;
|
2669
2703
|
$label = settings.onLabelCreate.call($label, escapedValue, text);
|
2670
2704
|
|
@@ -2817,7 +2851,7 @@ $.fn.dropdown = function(parameters) {
|
|
2817
2851
|
return;
|
2818
2852
|
}
|
2819
2853
|
// extend current array
|
2820
|
-
if(
|
2854
|
+
if(Array.isArray(currentValue)) {
|
2821
2855
|
newValue = currentValue.concat([addedValue]);
|
2822
2856
|
newValue = module.get.uniqueArray(newValue);
|
2823
2857
|
}
|
@@ -3002,7 +3036,7 @@ $.fn.dropdown = function(parameters) {
|
|
3002
3036
|
module.check.maxSelections();
|
3003
3037
|
},
|
3004
3038
|
arrayValue: function(removedValue, values) {
|
3005
|
-
if(
|
3039
|
+
if( !Array.isArray(values) ) {
|
3006
3040
|
values = [values];
|
3007
3041
|
}
|
3008
3042
|
values = $.grep(values, function(value){
|
@@ -3160,7 +3194,7 @@ $.fn.dropdown = function(parameters) {
|
|
3160
3194
|
valueMatchingCase: function(value) {
|
3161
3195
|
var
|
3162
3196
|
values = module.get.values(),
|
3163
|
-
hasValue =
|
3197
|
+
hasValue = Array.isArray(values)
|
3164
3198
|
? values && ($.inArray(value, values) !== -1)
|
3165
3199
|
: (values == value)
|
3166
3200
|
;
|
@@ -3174,7 +3208,7 @@ $.fn.dropdown = function(parameters) {
|
|
3174
3208
|
values = module.get.values(),
|
3175
3209
|
hasValue = false
|
3176
3210
|
;
|
3177
|
-
if(
|
3211
|
+
if(!Array.isArray(values)) {
|
3178
3212
|
values = [values];
|
3179
3213
|
}
|
3180
3214
|
$.each(values, function(index, existingValue) {
|
@@ -3546,7 +3580,7 @@ $.fn.dropdown = function(parameters) {
|
|
3546
3580
|
escape: {
|
3547
3581
|
value: function(value) {
|
3548
3582
|
var
|
3549
|
-
multipleValues =
|
3583
|
+
multipleValues = Array.isArray(value),
|
3550
3584
|
stringValue = (typeof value === 'string'),
|
3551
3585
|
isUnparsable = (!stringValue && !multipleValues),
|
3552
3586
|
hasQuotes = (stringValue && value.search(regExp.quote) !== -1),
|
@@ -3567,6 +3601,27 @@ $.fn.dropdown = function(parameters) {
|
|
3567
3601
|
string: function(text) {
|
3568
3602
|
text = String(text);
|
3569
3603
|
return text.replace(regExp.escape, '\\$&');
|
3604
|
+
},
|
3605
|
+
htmlEntities: function(string) {
|
3606
|
+
var
|
3607
|
+
badChars = /[&<>"'`]/g,
|
3608
|
+
shouldEscape = /[&<>"'`]/,
|
3609
|
+
escape = {
|
3610
|
+
"&": "&",
|
3611
|
+
"<": "<",
|
3612
|
+
">": ">",
|
3613
|
+
'"': """,
|
3614
|
+
"'": "'",
|
3615
|
+
"`": "`"
|
3616
|
+
},
|
3617
|
+
escapedChar = function(chr) {
|
3618
|
+
return escape[chr];
|
3619
|
+
}
|
3620
|
+
;
|
3621
|
+
if(shouldEscape.test(string)) {
|
3622
|
+
return string.replace(badChars, escapedChar);
|
3623
|
+
}
|
3624
|
+
return string;
|
3570
3625
|
}
|
3571
3626
|
},
|
3572
3627
|
|
@@ -3720,7 +3775,7 @@ $.fn.dropdown = function(parameters) {
|
|
3720
3775
|
else if(found !== undefined) {
|
3721
3776
|
response = found;
|
3722
3777
|
}
|
3723
|
-
if(
|
3778
|
+
if(Array.isArray(returnedValue)) {
|
3724
3779
|
returnedValue.push(response);
|
3725
3780
|
}
|
3726
3781
|
else if(returnedValue !== undefined) {
|
@@ -3861,7 +3916,7 @@ $.fn.dropdown.settings = {
|
|
3861
3916
|
},
|
3862
3917
|
|
3863
3918
|
regExp : {
|
3864
|
-
escape : /[-[\]{}()*+?.,\\^$|#\s]/g,
|
3919
|
+
escape : /[-[\]{}()*+?.,\\^$|#\s:=@]/g,
|
3865
3920
|
quote : /"/g
|
3866
3921
|
},
|
3867
3922
|
|
@@ -3942,33 +3997,58 @@ $.fn.dropdown.settings = {
|
|
3942
3997
|
upward : 'upward',
|
3943
3998
|
leftward : 'left',
|
3944
3999
|
visible : 'visible',
|
3945
|
-
clearable : 'clearable'
|
4000
|
+
clearable : 'clearable',
|
4001
|
+
noselection : 'noselection'
|
3946
4002
|
}
|
3947
4003
|
|
3948
4004
|
};
|
3949
4005
|
|
3950
4006
|
/* Templates */
|
3951
4007
|
$.fn.dropdown.settings.templates = {
|
3952
|
-
|
4008
|
+
escape: function(string, preserveHTML) {
|
4009
|
+
if (preserveHTML){
|
4010
|
+
return string;
|
4011
|
+
}
|
4012
|
+
var
|
4013
|
+
badChars = /[&<>"'`]/g,
|
4014
|
+
shouldEscape = /[&<>"'`]/,
|
4015
|
+
escape = {
|
4016
|
+
"&": "&",
|
4017
|
+
"<": "<",
|
4018
|
+
">": ">",
|
4019
|
+
'"': """,
|
4020
|
+
"'": "'",
|
4021
|
+
"`": "`"
|
4022
|
+
},
|
4023
|
+
escapedChar = function(chr) {
|
4024
|
+
return escape[chr];
|
4025
|
+
}
|
4026
|
+
;
|
4027
|
+
if(shouldEscape.test(string)) {
|
4028
|
+
return string.replace(badChars, escapedChar);
|
4029
|
+
}
|
4030
|
+
return string;
|
4031
|
+
},
|
3953
4032
|
// generates dropdown from select values
|
3954
|
-
dropdown: function(select) {
|
4033
|
+
dropdown: function(select, preserveHTML) {
|
3955
4034
|
var
|
3956
4035
|
placeholder = select.placeholder || false,
|
3957
|
-
values = select.values ||
|
3958
|
-
html = ''
|
4036
|
+
values = select.values || [],
|
4037
|
+
html = '',
|
4038
|
+
escape = $.fn.dropdown.settings.templates.escape
|
3959
4039
|
;
|
3960
4040
|
html += '<i class="dropdown icon"></i>';
|
3961
|
-
if(
|
3962
|
-
html += '<div class="default text">' + placeholder + '</div>';
|
4041
|
+
if(placeholder) {
|
4042
|
+
html += '<div class="default text">' + escape(placeholder,preserveHTML) + '</div>';
|
3963
4043
|
}
|
3964
4044
|
else {
|
3965
4045
|
html += '<div class="text"></div>';
|
3966
4046
|
}
|
3967
4047
|
html += '<div class="menu">';
|
3968
|
-
$.each(
|
4048
|
+
$.each(values, function(index, option) {
|
3969
4049
|
html += (option.disabled)
|
3970
|
-
? '<div class="disabled item" data-value="' + option.value + '">' + option.name + '</div>'
|
3971
|
-
: '<div class="item" data-value="' + option.value + '">' + option.name + '</div>'
|
4050
|
+
? '<div class="disabled item" data-value="' + option.value.replace(/"/g,"") + '">' + escape(option.name,preserveHTML) + '</div>'
|
4051
|
+
: '<div class="item" data-value="' + option.value.replace(/"/g,"") + '">' + escape(option.name,preserveHTML) + '</div>'
|
3972
4052
|
;
|
3973
4053
|
});
|
3974
4054
|
html += '</div>';
|
@@ -3976,10 +4056,11 @@ $.fn.dropdown.settings.templates = {
|
|
3976
4056
|
},
|
3977
4057
|
|
3978
4058
|
// generates just menu from select
|
3979
|
-
menu: function(response, fields) {
|
4059
|
+
menu: function(response, fields, preserveHTML) {
|
3980
4060
|
var
|
3981
|
-
values = response[fields.values] ||
|
3982
|
-
html = ''
|
4061
|
+
values = response[fields.values] || [],
|
4062
|
+
html = '',
|
4063
|
+
escape = $.fn.dropdown.settings.templates.escape
|
3983
4064
|
;
|
3984
4065
|
$.each(values, function(index, option) {
|
3985
4066
|
var
|
@@ -3997,12 +4078,12 @@ $.fn.dropdown.settings.templates = {
|
|
3997
4078
|
? 'disabled '
|
3998
4079
|
: ''
|
3999
4080
|
;
|
4000
|
-
html += '<div class="'+ maybeDisabled +'item" data-value="' + option[fields.value] + '"' + maybeText + '>';
|
4001
|
-
html += option[fields.name];
|
4081
|
+
html += '<div class="'+ maybeDisabled +'item" data-value="' + option[fields.value].replace(/"/g,"") + '"' + maybeText + '>';
|
4082
|
+
html += escape(option[fields.name],preserveHTML);
|
4002
4083
|
html += '</div>';
|
4003
4084
|
} else if (itemType === 'header') {
|
4004
4085
|
html += '<div class="header">';
|
4005
|
-
html += option[fields.name];
|
4086
|
+
html += escape(option[fields.name],preserveHTML);
|
4006
4087
|
html += '</div>';
|
4007
4088
|
}
|
4008
4089
|
});
|
@@ -4010,8 +4091,10 @@ $.fn.dropdown.settings.templates = {
|
|
4010
4091
|
},
|
4011
4092
|
|
4012
4093
|
// generates label for multiselect
|
4013
|
-
label: function(value, text) {
|
4014
|
-
|
4094
|
+
label: function(value, text, preserveHTML) {
|
4095
|
+
var
|
4096
|
+
escape = $.fn.dropdown.settings.templates.escape;
|
4097
|
+
return escape(text,preserveHTML) + '<i class="delete icon"></i>';
|
4015
4098
|
},
|
4016
4099
|
|
4017
4100
|
|