fomantic-ui-sass 2.8.6 → 2.8.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +12 -0
  3. data/README.md +6 -0
  4. data/app/assets/fonts/semantic-ui/brand-icons.eot +0 -0
  5. data/app/assets/fonts/semantic-ui/brand-icons.svg +6 -41
  6. data/app/assets/fonts/semantic-ui/brand-icons.ttf +0 -0
  7. data/app/assets/fonts/semantic-ui/brand-icons.woff +0 -0
  8. data/app/assets/fonts/semantic-ui/brand-icons.woff2 +0 -0
  9. data/app/assets/fonts/semantic-ui/icons.eot +0 -0
  10. data/app/assets/fonts/semantic-ui/icons.svg +7 -245
  11. data/app/assets/fonts/semantic-ui/icons.ttf +0 -0
  12. data/app/assets/fonts/semantic-ui/icons.woff +0 -0
  13. data/app/assets/fonts/semantic-ui/icons.woff2 +0 -0
  14. data/app/assets/fonts/semantic-ui/outline-icons.eot +0 -0
  15. data/app/assets/fonts/semantic-ui/outline-icons.svg +2 -2
  16. data/app/assets/fonts/semantic-ui/outline-icons.ttf +0 -0
  17. data/app/assets/fonts/semantic-ui/outline-icons.woff +0 -0
  18. data/app/assets/fonts/semantic-ui/outline-icons.woff2 +0 -0
  19. data/app/assets/javascripts/semantic-ui/calendar.js +153 -29
  20. data/app/assets/javascripts/semantic-ui/checkbox.js +1 -1
  21. data/app/assets/javascripts/semantic-ui/dimmer.js +11 -14
  22. data/app/assets/javascripts/semantic-ui/dropdown.js +240 -112
  23. data/app/assets/javascripts/semantic-ui/form.js +131 -67
  24. data/app/assets/javascripts/semantic-ui/modal.js +259 -16
  25. data/app/assets/javascripts/semantic-ui/nag.js +130 -64
  26. data/app/assets/javascripts/semantic-ui/popup.js +4 -4
  27. data/app/assets/javascripts/semantic-ui/progress.js +25 -31
  28. data/app/assets/javascripts/semantic-ui/search.js +15 -12
  29. data/app/assets/javascripts/semantic-ui/slider.js +57 -33
  30. data/app/assets/javascripts/semantic-ui/toast.js +26 -6
  31. data/app/assets/stylesheets/semantic-ui/collections/_breadcrumb.scss +1 -1
  32. data/app/assets/stylesheets/semantic-ui/collections/_form.scss +69 -74
  33. data/app/assets/stylesheets/semantic-ui/collections/_grid.scss +14 -7
  34. data/app/assets/stylesheets/semantic-ui/collections/_menu.scss +14 -11
  35. data/app/assets/stylesheets/semantic-ui/collections/_message.scss +52 -5
  36. data/app/assets/stylesheets/semantic-ui/collections/_table.scss +9 -5
  37. data/app/assets/stylesheets/semantic-ui/elements/_all.scss +1 -0
  38. data/app/assets/stylesheets/semantic-ui/elements/_button.scss +29 -2
  39. data/app/assets/stylesheets/semantic-ui/elements/_container.scss +3 -4
  40. data/app/assets/stylesheets/semantic-ui/elements/_divider.scss +1 -1
  41. data/app/assets/stylesheets/semantic-ui/elements/_flag.scss +1 -1
  42. data/app/assets/stylesheets/semantic-ui/elements/_header.scss +14 -9
  43. data/app/assets/stylesheets/semantic-ui/elements/_icon.scss +244 -66
  44. data/app/assets/stylesheets/semantic-ui/elements/_image.scss +34 -5
  45. data/app/assets/stylesheets/semantic-ui/elements/_input.scss +34 -33
  46. data/app/assets/stylesheets/semantic-ui/elements/_label.scss +1 -1
  47. data/app/assets/stylesheets/semantic-ui/elements/_list.scss +13 -13
  48. data/app/assets/stylesheets/semantic-ui/elements/_loader.scss +41 -37
  49. data/app/assets/stylesheets/semantic-ui/elements/_placeholder.scss +1 -1
  50. data/app/assets/stylesheets/semantic-ui/elements/_rail.scss +1 -1
  51. data/app/assets/stylesheets/semantic-ui/elements/_reveal.scss +1 -1
  52. data/app/assets/stylesheets/semantic-ui/elements/_segment.scss +40 -2
  53. data/app/assets/stylesheets/semantic-ui/elements/_step.scss +10 -10
  54. data/app/assets/stylesheets/semantic-ui/elements/_text.scss +13 -1
  55. data/app/assets/stylesheets/semantic-ui/globals/_reset.scss +2 -3
  56. data/app/assets/stylesheets/semantic-ui/globals/_site.scss +2 -2
  57. data/app/assets/stylesheets/semantic-ui/modules/_accordion.scss +1 -1
  58. data/app/assets/stylesheets/semantic-ui/modules/_calendar.scss +18 -11
  59. data/app/assets/stylesheets/semantic-ui/modules/_checkbox.scss +46 -4
  60. data/app/assets/stylesheets/semantic-ui/modules/_dimmer.scss +15 -15
  61. data/app/assets/stylesheets/semantic-ui/modules/_dropdown.scss +180 -28
  62. data/app/assets/stylesheets/semantic-ui/modules/_embed.scss +7 -7
  63. data/app/assets/stylesheets/semantic-ui/modules/_modal.scss +22 -11
  64. data/app/assets/stylesheets/semantic-ui/modules/_nag.scss +168 -16
  65. data/app/assets/stylesheets/semantic-ui/modules/_popup.scss +6 -2
  66. data/app/assets/stylesheets/semantic-ui/modules/_progress.scss +18 -10
  67. data/app/assets/stylesheets/semantic-ui/modules/_rating.scss +18 -33
  68. data/app/assets/stylesheets/semantic-ui/modules/_search.scss +1 -1
  69. data/app/assets/stylesheets/semantic-ui/modules/_shape.scss +1 -1
  70. data/app/assets/stylesheets/semantic-ui/modules/_sidebar.scss +3 -2
  71. data/app/assets/stylesheets/semantic-ui/modules/_slider.scss +11 -0
  72. data/app/assets/stylesheets/semantic-ui/modules/_sticky.scss +1 -2
  73. data/app/assets/stylesheets/semantic-ui/modules/_tab.scss +1 -1
  74. data/app/assets/stylesheets/semantic-ui/modules/_toast.scss +103 -16
  75. data/app/assets/stylesheets/semantic-ui/modules/_transition.scss +1 -1
  76. data/app/assets/stylesheets/semantic-ui/views/_ad.scss +1 -1
  77. data/app/assets/stylesheets/semantic-ui/views/_card.scss +75 -3
  78. data/app/assets/stylesheets/semantic-ui/views/_comment.scss +1 -1
  79. data/app/assets/stylesheets/semantic-ui/views/_feed.scss +6 -6
  80. data/app/assets/stylesheets/semantic-ui/views/_item.scss +1 -1
  81. data/app/assets/stylesheets/semantic-ui/views/_statistic.scss +5 -5
  82. data/lib/fomantic/ui/sass/version.rb +2 -2
  83. metadata +3 -3
@@ -58,14 +58,14 @@ $.fn.nag = function(parameters) {
58
58
 
59
59
  element = this,
60
60
  instance = $module.data(moduleNamespace),
61
-
61
+ storage,
62
62
  module
63
63
  ;
64
64
  module = {
65
65
 
66
66
  initialize: function() {
67
67
  module.verbose('Initializing element');
68
-
68
+ storage = module.get.storage();
69
69
  $module
70
70
  .on('click' + eventNamespace, selector.close, module.dismiss)
71
71
  .data(moduleNamespace, module)
@@ -94,47 +94,47 @@ $.fn.nag = function(parameters) {
94
94
 
95
95
  show: function() {
96
96
  if( module.should.show() && !$module.is(':visible') ) {
97
+ if(settings.onShow.call(element) === false) {
98
+ module.debug('onShow callback returned false, cancelling nag animation');
99
+ return false;
100
+ }
97
101
  module.debug('Showing nag', settings.animation.show);
98
- if(settings.animation.show == 'fade') {
102
+ if(settings.animation.show === 'fade') {
99
103
  $module
100
- .fadeIn(settings.duration, settings.easing)
104
+ .fadeIn(settings.duration, settings.easing, settings.onVisible)
101
105
  ;
102
106
  }
103
107
  else {
104
108
  $module
105
- .slideDown(settings.duration, settings.easing)
109
+ .slideDown(settings.duration, settings.easing, settings.onVisible)
106
110
  ;
107
111
  }
108
112
  }
109
113
  },
110
114
 
111
115
  hide: function() {
112
- module.debug('Showing nag', settings.animation.hide);
113
- if(settings.animation.show == 'fade') {
116
+ if(settings.onHide.call(element) === false) {
117
+ module.debug('onHide callback returned false, cancelling nag animation');
118
+ return false;
119
+ }
120
+ module.debug('Hiding nag', settings.animation.hide);
121
+ if(settings.animation.hide === 'fade') {
114
122
  $module
115
- .fadeIn(settings.duration, settings.easing)
123
+ .fadeOut(settings.duration, settings.easing, settings.onHidden)
116
124
  ;
117
125
  }
118
126
  else {
119
127
  $module
120
- .slideUp(settings.duration, settings.easing)
128
+ .slideUp(settings.duration, settings.easing, settings.onHidden)
121
129
  ;
122
130
  }
123
131
  },
124
132
 
125
- onHide: function() {
126
- module.debug('Removing nag', settings.animation.hide);
127
- $module.remove();
128
- if (settings.onHide) {
129
- settings.onHide();
130
- }
131
- },
132
-
133
133
  dismiss: function(event) {
134
- if(settings.storageMethod) {
134
+ if(module.hide() !== false && settings.storageMethod) {
135
+ module.debug('Dismissing nag', settings.storageMethod, settings.key, settings.value, settings.expires);
135
136
  module.storage.set(settings.key, settings.value);
136
137
  }
137
- module.hide();
138
138
  event.stopImmediatePropagation();
139
139
  event.preventDefault();
140
140
  },
@@ -155,12 +155,71 @@ $.fn.nag = function(parameters) {
155
155
  },
156
156
 
157
157
  get: {
158
+ expirationDate: function(expires) {
159
+ if (typeof expires === 'number') {
160
+ expires = new Date(Date.now() + expires * 864e5);
161
+ }
162
+ if(expires instanceof Date && expires.getTime() ){
163
+ return expires.toUTCString();
164
+ } else {
165
+ module.error(error.expiresFormat);
166
+ }
167
+ },
168
+ storage: function(){
169
+ if(settings.storageMethod === 'localstorage' && window.localStorage !== undefined) {
170
+ module.debug('Using local storage');
171
+ return window.localStorage;
172
+ }
173
+ else if(settings.storageMethod === 'sessionstorage' && window.sessionStorage !== undefined) {
174
+ module.debug('Using session storage');
175
+ return window.sessionStorage;
176
+ }
177
+ else if("cookie" in document) {
178
+ module.debug('Using cookie');
179
+ return {
180
+ setItem: function(key, value, options) {
181
+ // RFC6265 compliant encoding
182
+ key = encodeURIComponent(key)
183
+ .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
184
+ .replace(/[()]/g, escape);
185
+ value = encodeURIComponent(value)
186
+ .replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g, decodeURIComponent);
187
+
188
+ var cookieOptions = '';
189
+ for (var option in options) {
190
+ if (options.hasOwnProperty(option)) {
191
+ cookieOptions += '; ' + option;
192
+ if (typeof options[option] === 'string') {
193
+ cookieOptions += '=' + options[option].split(';')[0];
194
+ }
195
+ }
196
+ }
197
+ document.cookie = key + '=' + value + cookieOptions;
198
+ },
199
+ getItem: function(key) {
200
+ var cookies = document.cookie.split('; ');
201
+ for (var i = 0, il = cookies.length; i < il; i++) {
202
+ var parts = cookies[i].split('='),
203
+ foundKey = parts[0].replace(/(%[\dA-F]{2})+/gi, decodeURIComponent);
204
+ if (key === foundKey) {
205
+ return parts[1] || '';
206
+ }
207
+ }
208
+ },
209
+ removeItem: function(key, options) {
210
+ storage.setItem(key,'',options);
211
+ }
212
+ };
213
+ } else {
214
+ module.error(error.noStorage);
215
+ }
216
+ },
158
217
  storageOptions: function() {
159
218
  var
160
219
  options = {}
161
220
  ;
162
221
  if(settings.expires) {
163
- options.expires = settings.expires;
222
+ options.expires = module.get.expirationDate(settings.expires);
164
223
  }
165
224
  if(settings.domain) {
166
225
  options.domain = settings.domain;
@@ -168,6 +227,12 @@ $.fn.nag = function(parameters) {
168
227
  if(settings.path) {
169
228
  options.path = settings.path;
170
229
  }
230
+ if(settings.secure) {
231
+ options.secure = settings.secure;
232
+ }
233
+ if(settings.samesite) {
234
+ options.samesite = settings.samesite;
235
+ }
171
236
  return options;
172
237
  }
173
238
  },
@@ -181,39 +246,30 @@ $.fn.nag = function(parameters) {
181
246
  var
182
247
  options = module.get.storageOptions()
183
248
  ;
184
- if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
185
- window.localStorage.setItem(key, value);
186
- module.debug('Value stored using local storage', key, value);
249
+ if(storage === window.localStorage && options.expires) {
250
+ module.debug('Storing expiration value in localStorage', key, options.expires);
251
+ storage.setItem(key + settings.expirationKey, options.expires );
187
252
  }
188
- else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
189
- window.sessionStorage.setItem(key, value);
190
- module.debug('Value stored using session storage', key, value);
253
+ module.debug('Value stored', key, value);
254
+ try {
255
+ storage.setItem(key, value, options);
191
256
  }
192
- else if($.cookie !== undefined) {
193
- $.cookie(key, value, options);
194
- module.debug('Value stored using cookie', key, value, options);
195
- }
196
- else {
197
- module.error(error.noCookieStorage);
198
- return;
257
+ catch(e) {
258
+ module.error(error.setItem, e);
199
259
  }
200
260
  },
201
- get: function(key, value) {
261
+ get: function(key) {
202
262
  var
203
263
  storedValue
204
264
  ;
205
- if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
206
- storedValue = window.localStorage.getItem(key);
207
- }
208
- else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
209
- storedValue = window.sessionStorage.getItem(key);
210
- }
211
- // get by cookie
212
- else if($.cookie !== undefined) {
213
- storedValue = $.cookie(key);
214
- }
215
- else {
216
- module.error(error.noCookieStorage);
265
+ storedValue = storage.getItem(key);
266
+ if(storage === window.localStorage) {
267
+ var expiration = storage.getItem(key + settings.expirationKey);
268
+ if(expiration !== null && expiration !== undefined && new Date(expiration) < new Date()) {
269
+ module.debug('Value in localStorage has expired. Deleting key', key);
270
+ module.storage.remove(key);
271
+ storedValue = null;
272
+ }
217
273
  }
218
274
  if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {
219
275
  storedValue = undefined;
@@ -224,19 +280,11 @@ $.fn.nag = function(parameters) {
224
280
  var
225
281
  options = module.get.storageOptions()
226
282
  ;
227
- if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {
228
- window.localStorage.removeItem(key);
229
- }
230
- else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {
231
- window.sessionStorage.removeItem(key);
232
- }
233
- // store by cookie
234
- else if($.cookie !== undefined) {
235
- $.removeCookie(key, options);
236
- }
237
- else {
238
- module.error(error.noStorage);
283
+ options.expires = module.get.expirationDate(-1);
284
+ if(storage === window.localStorage) {
285
+ storage.removeItem(key + settings.expirationKey);
239
286
  }
287
+ storage.removeItem(key, options);
240
288
  }
241
289
  },
242
290
 
@@ -450,8 +498,12 @@ $.fn.nag.settings = {
450
498
  detachable : false,
451
499
 
452
500
  expires : 30,
501
+
502
+ // cookie storage only options
453
503
  domain : false,
454
504
  path : '/',
505
+ secure : false,
506
+ samesite : false,
455
507
 
456
508
  // type of storage to use
457
509
  storageMethod : 'cookie',
@@ -460,10 +512,14 @@ $.fn.nag.settings = {
460
512
  key : 'nag',
461
513
  value : 'dismiss',
462
514
 
515
+ // Key suffix to support expiration in localstorage
516
+ expirationKey : 'ExpirationDate',
517
+
463
518
  error: {
464
- noCookieStorage : '$.cookie is not included. A storage solution is required.',
465
- noStorage : 'Neither $.cookie or store is defined. A storage solution is required for storing state',
466
- method : 'The method you called is not defined.'
519
+ noStorage : 'Unsupported storage method',
520
+ method : 'The method you called is not defined.',
521
+ setItem : 'Unexpected error while setting value',
522
+ expiresFormat : '"expires" must be a number of days or a Date Object'
467
523
  },
468
524
 
469
525
  className : {
@@ -472,13 +528,23 @@ $.fn.nag.settings = {
472
528
  },
473
529
 
474
530
  selector : {
475
- close : '.close.icon'
531
+ close : '> .close.icon'
476
532
  },
477
533
 
478
- speed : 500,
534
+ duration : 500,
479
535
  easing : 'easeOutQuad',
480
536
 
481
- onHide: function() {}
537
+ // callback before show animation, return false to prevent show
538
+ onShow : function() {},
539
+
540
+ // called after show animation
541
+ onVisible : function() {},
542
+
543
+ // callback before hide animation, return false to prevent hide
544
+ onHide : function() {},
545
+
546
+ // callback after hide animation
547
+ onHidden : function() {}
482
548
 
483
549
  };
484
550
 
@@ -434,11 +434,11 @@ $.fn.popup = function(parameters) {
434
434
  module.set.visible();
435
435
  $popup
436
436
  .transition({
437
- animation : settings.transition + ' in',
437
+ animation : (settings.transition.showMethod || settings.transition) + ' in',
438
438
  queue : false,
439
439
  debug : settings.debug,
440
440
  verbose : settings.verbose,
441
- duration : settings.duration,
441
+ duration : settings.transition.showDuration || settings.duration,
442
442
  onComplete : function() {
443
443
  module.bind.close();
444
444
  callback.call($popup, element);
@@ -457,9 +457,9 @@ $.fn.popup = function(parameters) {
457
457
  if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {
458
458
  $popup
459
459
  .transition({
460
- animation : settings.transition + ' out',
460
+ animation : (settings.transition.hideMethod || settings.transition) + ' out',
461
461
  queue : false,
462
- duration : settings.duration,
462
+ duration : settings.transition.hideDuration || settings.duration,
463
463
  debug : settings.debug,
464
464
  verbose : settings.verbose,
465
465
  onComplete : function() {
@@ -169,7 +169,7 @@ $.fn.progress = function(parameters) {
169
169
  value : module.helper.forceArray($module.data(metadata.value))
170
170
  }
171
171
  ;
172
- if(data.total) {
172
+ if(data.total !== undefined) {
173
173
  module.debug('Total value set from metadata', data.total);
174
174
  module.set.total(data.total);
175
175
  }
@@ -272,18 +272,18 @@ $.fn.progress = function(parameters) {
272
272
  var
273
273
  index_ = index || 0,
274
274
  value = module.get.value(index_),
275
- total = module.total || 0,
275
+ total = module.get.total(),
276
276
  percent = (animating)
277
277
  ? module.get.displayPercent(index_)
278
278
  : module.get.percent(index_),
279
- left = (module.total > 0)
280
- ? (total - value)
279
+ left = (total !== false)
280
+ ? Math.max(0,total - value)
281
281
  : (100 - percent)
282
282
  ;
283
283
  templateText = templateText || '';
284
284
  templateText = templateText
285
285
  .replace('{value}', value)
286
- .replace('{total}', total)
286
+ .replace('{total}', total || 0)
287
287
  .replace('{left}', left)
288
288
  .replace('{percent}', percent)
289
289
  .replace('{bar}', settings.text.bars[index_] || '')
@@ -373,7 +373,7 @@ $.fn.progress = function(parameters) {
373
373
  return module.nextValue || module.value && module.value[index || 0] || 0;
374
374
  },
375
375
  total: function() {
376
- return module.total || false;
376
+ return module.total !== undefined ? module.total : false;
377
377
  }
378
378
  },
379
379
 
@@ -500,29 +500,33 @@ $.fn.progress = function(parameters) {
500
500
  },
501
501
  percent: function(percents) {
502
502
  percents = module.helper.forceArray(percents).map(function(percent) {
503
- return (typeof percent == 'string')
503
+ percent = (typeof percent == 'string')
504
504
  ? +(percent.replace('%', ''))
505
505
  : percent
506
506
  ;
507
+ return (settings.limitValues)
508
+ ? Math.max(0, Math.min(100, percent))
509
+ : percent
510
+ ;
507
511
  });
508
512
  var hasTotal = module.has.total();
509
- var totalPecent = module.helper.sum(percents);
510
- var isMultpleValues = percents.length > 1 && hasTotal;
513
+ var totalPercent = module.helper.sum(percents);
514
+ var isMultipleValues = percents.length > 1 && hasTotal;
511
515
  var sumTotal = module.helper.sum(module.helper.forceArray(module.value));
512
- if (isMultpleValues && sumTotal > module.total) {
516
+ if (isMultipleValues && sumTotal > module.total) {
513
517
  // Sum values instead of pecents to avoid precision issues when summing floats
514
518
  module.error(error.sumExceedsTotal, sumTotal, module.total);
515
- } else if (!isMultpleValues && totalPecent > 100) {
516
- // Sum before rouding since sum of rounded may have error though sum of actual is fine
517
- module.error(error.tooHigh, totalPecent);
518
- } else if (totalPecent < 0) {
519
- module.error(error.tooLow, totalPecent);
519
+ } else if (!isMultipleValues && totalPercent > 100) {
520
+ // Sum before rounding since sum of rounded may have error though sum of actual is fine
521
+ module.error(error.tooHigh, totalPercent);
522
+ } else if (totalPercent < 0) {
523
+ module.error(error.tooLow, totalPercent);
520
524
  } else {
521
525
  var autoPrecision = settings.precision > 0
522
526
  ? settings.precision
523
- : isMultpleValues
527
+ : isMultipleValues
524
528
  ? module.helper.derivePrecision(Math.min.apply(null, module.value), module.total)
525
- : undefined;
529
+ : 0;
526
530
 
527
531
  // round display percentage
528
532
  var roundedPercents = percents.map(function (percent) {
@@ -532,26 +536,16 @@ $.fn.progress = function(parameters) {
532
536
  ;
533
537
  });
534
538
  module.percent = roundedPercents;
535
- if (!hasTotal) {
536
- module.value = roundedPercents.map(function (percent) {
539
+ if (hasTotal) {
540
+ module.value = percents.map(function (percent) {
537
541
  return (autoPrecision > 0)
538
542
  ? Math.round((percent / 100) * module.total * (10 * autoPrecision)) / (10 * autoPrecision)
539
543
  : Math.round((percent / 100) * module.total * 10) / 10
540
544
  ;
541
545
  });
542
- if (settings.limitValues) {
543
- module.value = module.value.map(function (value) {
544
- return (value > 100)
545
- ? 100
546
- : (module.value < 0)
547
- ? 0
548
- : module.value;
549
- });
550
- }
551
546
  }
552
547
  module.set.barWidth(percents);
553
548
  module.set.labelInterval();
554
- module.set.labels();
555
549
  }
556
550
  settings.onChange.call(element, percents, module.value, module.total);
557
551
  },
@@ -622,7 +616,7 @@ $.fn.progress = function(parameters) {
622
616
  if (text !== undefined) {
623
617
  $progress.text( module.get.text(text, index) );
624
618
  }
625
- else if (settings.label == 'ratio' && module.total) {
619
+ else if (settings.label == 'ratio' && module.has.total()) {
626
620
  module.verbose('Adding ratio to bar label');
627
621
  $progress.text( module.get.text(settings.text.ratio, index) );
628
622
  }
@@ -752,7 +746,7 @@ $.fn.progress = function(parameters) {
752
746
  }
753
747
  value = module.get.normalizedValue(value);
754
748
  if (hasTotal) {
755
- percentComplete = (value / module.total) * 100;
749
+ percentComplete = module.total > 0 ? (value / module.total) * 100 : 100;
756
750
  module.debug('Calculating percent complete from total', percentComplete);
757
751
  }
758
752
  else {
@@ -118,7 +118,7 @@ $.fn.search = function(parameters) {
118
118
  .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)
119
119
  ;
120
120
  $prompt
121
- .attr('autocomplete', 'off')
121
+ .attr('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off')
122
122
  ;
123
123
  }
124
124
  $module
@@ -227,9 +227,7 @@ $.fn.search = function(parameters) {
227
227
  results = module.get.results(),
228
228
  result = $result.data(metadata.result) || module.get.result(value, results)
229
229
  ;
230
- if(value) {
231
- module.set.value(value);
232
- }
230
+ var oldValue = module.get.value();
233
231
  if( $.isFunction(settings.onSelect) ) {
234
232
  if(settings.onSelect.call(element, result, results) === false) {
235
233
  module.debug('Custom onSelect callback cancelled default select action');
@@ -238,7 +236,11 @@ $.fn.search = function(parameters) {
238
236
  }
239
237
  }
240
238
  module.hideResults();
239
+ if(value && module.get.value() === oldValue) {
240
+ module.set.value(value);
241
+ }
241
242
  if(href) {
243
+ event.preventDefault();
242
244
  module.verbose('Opening search link found in result', $link);
243
245
  if(target == '_blank' || event.ctrlKey) {
244
246
  window.open(href);
@@ -250,16 +252,16 @@ $.fn.search = function(parameters) {
250
252
  }
251
253
  }
252
254
  },
253
- ensureVisible: function ensureVisible($el) {
255
+ ensureVisible: function($el) {
254
256
  var elTop, elBottom, resultsScrollTop, resultsHeight;
255
-
257
+ if($el.length === 0) {
258
+ return;
259
+ }
256
260
  elTop = $el.position().top;
257
261
  elBottom = elTop + $el.outerHeight(true);
258
262
 
259
263
  resultsScrollTop = $results.scrollTop();
260
- resultsHeight = $results.height()
261
- parseInt($results.css('paddingTop'), 0) +
262
- parseInt($results.css('paddingBottom'), 0);
264
+ resultsHeight = $results.height();
263
265
 
264
266
  if (elTop < 0) {
265
267
  $results.scrollTop(resultsScrollTop + elTop);
@@ -400,6 +402,9 @@ $.fn.search = function(parameters) {
400
402
  animating: function() {
401
403
  return $results.hasClass(className.animating);
402
404
  },
405
+ chrome: function() {
406
+ return !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
407
+ },
403
408
  hidden: function() {
404
409
  return $results.hasClass(className.hidden);
405
410
  },
@@ -975,9 +980,7 @@ $.fn.search = function(parameters) {
975
980
  duration : settings.duration,
976
981
  onShow : function() {
977
982
  var $firstResult = $module.find(selector.result).eq(0);
978
- if($firstResult.length > 0) {
979
- module.ensureVisible($firstResult);
980
- }
983
+ module.ensureVisible($firstResult);
981
984
  },
982
985
  onComplete : function() {
983
986
  callback();