Skip to content

Commit a3d8563

Browse files
committed
Assets for Semantic UI 2.2.9
1 parent 53cd3f4 commit a3d8563

File tree

22 files changed

+3005
-817
lines changed

22 files changed

+3005
-817
lines changed
87.1 KB
Binary file not shown.

assets/fonts/semantic_ui/themes/default/assets/fonts/icons.svg

Lines changed: 2668 additions & 682 deletions
Loading
12.5 KB
Binary file not shown.
7.43 KB
Binary file not shown.
5.14 KB
Binary file not shown.

assets/javascripts/semantic_ui/definitions/behaviors/form.js

Lines changed: 64 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ $.fn.form = function(parameters) {
5757
metadata,
5858
selector,
5959
className,
60+
regExp,
6061
error,
6162

6263
namespace,
@@ -233,6 +234,20 @@ $.fn.form = function(parameters) {
233234
;
234235
},
235236

237+
determine: {
238+
isValid: function() {
239+
var
240+
allValid = true
241+
;
242+
$.each(validation, function(fieldName, field) {
243+
if( !( module.validate.field(field, fieldName, true) ) ) {
244+
allValid = false;
245+
}
246+
});
247+
return allValid;
248+
}
249+
},
250+
236251
is: {
237252
bracketedRule: function(rule) {
238253
return (rule.type && rule.type.match(settings.regExp.bracket));
@@ -251,17 +266,23 @@ $.fn.form = function(parameters) {
251266
blank: function($field) {
252267
return $.trim($field.val()) === '';
253268
},
254-
valid: function() {
269+
valid: function(field) {
255270
var
256271
allValid = true
257272
;
258-
module.verbose('Checking if form is valid');
259-
$.each(validation, function(fieldName, field) {
260-
if( !( module.validate.field(field, fieldName) ) ) {
261-
allValid = false;
262-
}
263-
});
264-
return allValid;
273+
if(field) {
274+
module.verbose('Checking if field is valid', field);
275+
return module.validate.field(validation[field], field, false);
276+
}
277+
else {
278+
module.verbose('Checking if form is valid');
279+
$.each(validation, function(fieldName, field) {
280+
if( !module.is.valid(fieldName) ) {
281+
allValid = false;
282+
}
283+
});
284+
return allValid;
285+
}
265286
}
266287
},
267288

@@ -338,7 +359,7 @@ $.fn.form = function(parameters) {
338359
$fieldGroup = $field.closest($group),
339360
validationRules = module.get.validation($field)
340361
;
341-
if(settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) ) {
362+
if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {
342363
clearTimeout(module.timer);
343364
module.timer = setTimeout(function() {
344365
module.debug('Revalidating field', $field, module.get.validation($field));
@@ -465,6 +486,7 @@ $.fn.form = function(parameters) {
465486
metadata = settings.metadata;
466487
selector = settings.selector;
467488
className = settings.className;
489+
regExp = settings.regExp;
468490
error = settings.error;
469491
moduleNamespace = 'module-' + namespace;
470492
eventNamespace = '.' + namespace;
@@ -477,7 +499,8 @@ $.fn.form = function(parameters) {
477499
},
478500
field: function(identifier) {
479501
module.verbose('Finding field with identifier', identifier);
480-
if( $field.filter('#' + identifier).length > 0 ) {
502+
identifier = module.escape.string(identifier);
503+
if($field.filter('#' + identifier).length > 0 ) {
481504
return $field.filter('#' + identifier);
482505
}
483506
else if( $field.filter('[name="' + identifier +'"]').length > 0 ) {
@@ -592,10 +615,11 @@ $.fn.form = function(parameters) {
592615

593616
field: function(identifier) {
594617
module.verbose('Checking for existence of a field with identifier', identifier);
618+
identifier = module.escape.string(identifier);
595619
if(typeof identifier !== 'string') {
596620
module.error(error.identifier, identifier);
597621
}
598-
if( $field.filter('#' + identifier).length > 0 ) {
622+
if($field.filter('#' + identifier).length > 0 ) {
599623
return true;
600624
}
601625
else if( $field.filter('[name="' + identifier +'"]').length > 0 ) {
@@ -609,6 +633,13 @@ $.fn.form = function(parameters) {
609633

610634
},
611635

636+
escape: {
637+
string: function(text) {
638+
text = String(text);
639+
return text.replace(regExp.escape, '\\$&');
640+
}
641+
},
642+
612643
add: {
613644
prompt: function(identifier, errors) {
614645
var
@@ -794,7 +825,7 @@ $.fn.form = function(parameters) {
794825

795826
// reset errors
796827
formErrors = [];
797-
if( module.is.valid() ) {
828+
if( module.determine.isValid() ) {
798829
module.debug('Form has no validation errors, submitting');
799830
module.set.success();
800831
if(ignoreCallbacks !== true) {
@@ -818,7 +849,16 @@ $.fn.form = function(parameters) {
818849
},
819850

820851
// takes a validation object and returns whether field passes validation
821-
field: function(field, fieldName) {
852+
field: function(field, fieldName, showErrors) {
853+
showErrors = (showErrors !== undefined)
854+
? showErrors
855+
: true
856+
;
857+
if(typeof field == 'string') {
858+
module.verbose('Validating field', field);
859+
fieldName = field;
860+
field = validation[field];
861+
}
822862
var
823863
identifier = field.identifier || fieldName,
824864
$field = module.get.field(identifier),
@@ -854,13 +894,17 @@ $.fn.form = function(parameters) {
854894
});
855895
}
856896
if(fieldValid) {
857-
module.remove.prompt(identifier, fieldErrors);
858-
settings.onValid.call($field);
897+
if(showErrors) {
898+
module.remove.prompt(identifier, fieldErrors);
899+
settings.onValid.call($field);
900+
}
859901
}
860902
else {
861-
formErrors = formErrors.concat(fieldErrors);
862-
module.add.prompt(identifier, fieldErrors);
863-
settings.onInvalid.call($field, fieldErrors);
903+
if(showErrors) {
904+
formErrors = formErrors.concat(fieldErrors);
905+
module.add.prompt(identifier, fieldErrors);
906+
settings.onInvalid.call($field, fieldErrors);
907+
}
864908
return false;
865909
}
866910
return true;
@@ -1090,8 +1134,9 @@ $.fn.form.settings = {
10901134
},
10911135

10921136
regExp: {
1137+
htmlID : /^[a-zA-Z][\w:.-]*$/g,
10931138
bracket : /\[(.*)\]/i,
1094-
decimal : /^\d*(\.)\d+/,
1139+
decimal : /^\d+\.?\d*$/,
10951140
email : /^[a-z0-9!#$%&'*+\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,
10961141
escape : /[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,
10971142
flags : /^\/(.*)\/(.*)?/,

assets/javascripts/semantic_ui/definitions/behaviors/visibility.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,7 +387,11 @@ $.fn.visibility = function(parameters) {
387387
.attr('src', src)
388388
;
389389
if(settings.transition) {
390-
if( $.fn.transition !== undefined ) {
390+
if( $.fn.transition !== undefined) {
391+
if($module.hasClass(className.visible)) {
392+
module.debug('Transition already occurred on this image, skipping animation');
393+
return;
394+
}
391395
$module.transition(settings.transition, settings.duration, callback);
392396
}
393397
else {
@@ -1270,7 +1274,8 @@ $.fn.visibility.settings = {
12701274

12711275
className: {
12721276
fixed : 'fixed',
1273-
placeholder : 'placeholder'
1277+
placeholder : 'placeholder',
1278+
visible : 'visible'
12741279
},
12751280

12761281
error : {

assets/javascripts/semantic_ui/definitions/modules/dropdown.js

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,10 @@ $.fn.dropdown = function(parameters) {
461461
? callback
462462
: function(){}
463463
;
464+
if(!module.can.show() && module.is.remote()) {
465+
module.debug('No API results retrieved, searching before show');
466+
module.queryRemote(module.get.query(), module.show);
467+
}
464468
if( module.can.show() && !module.is.active() ) {
465469
module.debug('Showing dropdown');
466470
if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {
@@ -617,8 +621,17 @@ $.fn.dropdown = function(parameters) {
617621
.on('mousedown' + eventNamespace, module.event.mousedown)
618622
.on('mouseup' + eventNamespace, module.event.mouseup)
619623
.on('focus' + eventNamespace, module.event.focus)
620-
.on('blur' + eventNamespace, module.event.blur)
621624
;
625+
if(module.has.menuSearch() ) {
626+
$module
627+
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
628+
;
629+
}
630+
else {
631+
$module
632+
.on('blur' + eventNamespace, module.event.blur)
633+
;
634+
}
622635
}
623636
$menu
624637
.on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
@@ -702,6 +715,9 @@ $.fn.dropdown = function(parameters) {
702715
if(settings.apiSettings) {
703716
if( module.can.useAPI() ) {
704717
module.queryRemote(searchTerm, function() {
718+
if(settings.filterRemoteData) {
719+
module.filterItems(searchTerm);
720+
}
705721
afterFiltered();
706722
});
707723
}
@@ -757,7 +773,7 @@ $.fn.dropdown = function(parameters) {
757773
? query
758774
: module.get.query(),
759775
results = null,
760-
escapedTerm = module.escape.regExp(searchTerm),
776+
escapedTerm = module.escape.string(searchTerm),
761777
beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')
762778
;
763779
// avoid loop if we're matching nothing
@@ -789,12 +805,15 @@ $.fn.dropdown = function(parameters) {
789805
}
790806
if(settings.match == 'both' || settings.match == 'value') {
791807
value = String(module.get.choiceValue($choice, text));
792-
793808
if(value.search(beginsWithRegExp) !== -1) {
794809
results.push(this);
795810
return true;
796811
}
797-
else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {
812+
else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {
813+
results.push(this);
814+
return true;
815+
}
816+
else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {
798817
results.push(this);
799818
return true;
800819
}
@@ -876,7 +895,7 @@ $.fn.dropdown = function(parameters) {
876895
: $activeItem,
877896
hasSelected = ($selectedItem.length > 0)
878897
;
879-
if(hasSelected) {
898+
if(hasSelected && !module.is.multiple()) {
880899
module.debug('Forcing partial selection to selected item', $selectedItem);
881900
module.event.item.click.call($selectedItem, {}, true);
882901
return;
@@ -2183,7 +2202,7 @@ $.fn.dropdown = function(parameters) {
21832202
$text.addClass(className.placeholder);
21842203
},
21852204
tabbable: function() {
2186-
if( module.has.search() ) {
2205+
if( module.is.searchSelection() ) {
21872206
module.debug('Added tabindex to searchable dropdown');
21882207
$search
21892208
.val('')
@@ -2295,12 +2314,13 @@ $.fn.dropdown = function(parameters) {
22952314
},
22962315
selectedItem: function($item) {
22972316
var
2298-
value = module.get.choiceValue($item),
2299-
text = module.get.choiceText($item, false)
2317+
value = module.get.choiceValue($item),
2318+
searchText = module.get.choiceText($item, false),
2319+
text = module.get.choiceText($item, true)
23002320
;
23012321
module.debug('Setting user selection to item', $item);
23022322
module.remove.activeItem();
2303-
module.set.partialSearch(text);
2323+
module.set.partialSearch(searchText);
23042324
module.set.activeItem($item);
23052325
module.set.selected(value, $item);
23062326
module.set.text(text);
@@ -2509,7 +2529,7 @@ $.fn.dropdown = function(parameters) {
25092529
;
25102530
$label = $('<a />')
25112531
.addClass(className.label)
2512-
.attr('data-value', escapedValue)
2532+
.attr('data-' + metadata.value, escapedValue)
25132533
.html(templates.label(escapedValue, text))
25142534
;
25152535
$label = settings.onLabelCreate.call($label, escapedValue, text);
@@ -2557,7 +2577,7 @@ $.fn.dropdown = function(parameters) {
25572577
optionValue: function(value) {
25582578
var
25592579
escapedValue = module.escape.value(value),
2560-
$option = $input.find('option[value="' + escapedValue + '"]'),
2580+
$option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
25612581
hasOption = ($option.length > 0)
25622582
;
25632583
if(hasOption) {
@@ -2730,7 +2750,7 @@ $.fn.dropdown = function(parameters) {
27302750
optionValue: function(value) {
27312751
var
27322752
escapedValue = module.escape.value(value),
2733-
$option = $input.find('option[value="' + escapedValue + '"]'),
2753+
$option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
27342754
hasOption = ($option.length > 0)
27352755
;
27362756
if(!hasOption || !$option.hasClass(className.addition)) {
@@ -2849,7 +2869,7 @@ $.fn.dropdown = function(parameters) {
28492869
label: function(value, shouldAnimate) {
28502870
var
28512871
$labels = $module.find(selector.label),
2852-
$removedLabel = $labels.filter('[data-value="' + value +'"]')
2872+
$removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(value) +'"]')
28532873
;
28542874
module.verbose('Removing label', $removedLabel);
28552875
$removedLabel.remove();
@@ -2889,7 +2909,7 @@ $.fn.dropdown = function(parameters) {
28892909
;
28902910
},
28912911
tabbable: function() {
2892-
if( module.has.search() ) {
2912+
if( module.is.searchSelection() ) {
28932913
module.debug('Searchable dropdown initialized');
28942914
$search
28952915
.removeAttr('tabindex')
@@ -2963,7 +2983,7 @@ $.fn.dropdown = function(parameters) {
29632983
escapedValue = module.escape.value(value),
29642984
$labels = $module.find(selector.label)
29652985
;
2966-
return ($labels.filter('[data-value="' + escapedValue +'"]').length > 0);
2986+
return ($labels.filter('[data-' + metadata.value + '="' + module.escape.string(escapedValue) +'"]').length > 0);
29672987
},
29682988
maxSelections: function() {
29692989
return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);
@@ -3083,6 +3103,9 @@ $.fn.dropdown = function(parameters) {
30833103
multiple: function() {
30843104
return $module.hasClass(className.multiple);
30853105
},
3106+
remote: function() {
3107+
return settings.apiSettings && module.can.useAPI();
3108+
},
30863109
single: function() {
30873110
return !module.is.multiple();
30883111
},
@@ -3288,7 +3311,7 @@ $.fn.dropdown = function(parameters) {
32883311
hasQuotes = (stringValue && value.search(regExp.quote) !== -1),
32893312
values = []
32903313
;
3291-
if(!module.has.selectInput() || isUnparsable || !hasQuotes) {
3314+
if(isUnparsable || !hasQuotes) {
32923315
return value;
32933316
}
32943317
module.debug('Encoding quote values for use in select', value);
@@ -3300,7 +3323,7 @@ $.fn.dropdown = function(parameters) {
33003323
}
33013324
return value.replace(regExp.quote, '&quot;');
33023325
},
3303-
regExp: function(text) {
3326+
string: function(text) {
33043327
text = String(text);
33053328
return text.replace(regExp.escape, '\\$&');
33063329
}
@@ -3503,7 +3526,10 @@ $.fn.dropdown.settings = {
35033526
apiSettings : false,
35043527
selectOnKeydown : true, // Whether selection should occur automatically when keyboard shortcuts used
35053528
minCharacters : 0, // Minimum characters required to trigger API call
3529+
3530+
filterRemoteData : false, // Whether API results should be filtered after being returned for query term
35063531
saveRemoteData : true, // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh
3532+
35073533
throttle : 200, // How long to wait after last user input to search remotely
35083534

35093535
context : window, // Context to use when determining if on screen

0 commit comments

Comments
 (0)