rbbt-rest 1.8.67 → 1.8.68

Sign up to get free protection for your applications and to get access to all the features.
Files changed (210) hide show
  1. checksums.yaml +4 -4
  2. data/share/views/compass/app.sass +3 -0
  3. data/share/views/layout/footer.haml +10 -7
  4. data/share/views/partials/dependencies.haml +6 -1
  5. data/share/views/partials/footers/bsc.haml +1 -1
  6. data/share/views/partials/footers/cnio.haml +2 -2
  7. data/share/views/partials/footers/ntnu.haml +2 -2
  8. data/share/views/public/plugins/semantic-ui/CONTRIBUTING.md +58 -58
  9. data/share/views/public/plugins/semantic-ui/README.md +7 -7
  10. data/share/views/public/plugins/semantic-ui/RELEASE-NOTES.md +168 -0
  11. data/share/views/public/plugins/semantic-ui/dist/components/accordion.css +1 -1
  12. data/share/views/public/plugins/semantic-ui/dist/components/accordion.js +1 -1
  13. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.css +2 -2
  14. data/share/views/public/plugins/semantic-ui/dist/components/accordion.min.js +1 -10
  15. data/share/views/public/plugins/semantic-ui/dist/components/ad.css +1 -1
  16. data/share/views/public/plugins/semantic-ui/dist/components/ad.min.css +2 -2
  17. data/share/views/public/plugins/semantic-ui/dist/components/api.js +1 -1
  18. data/share/views/public/plugins/semantic-ui/dist/components/api.min.js +1 -10
  19. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.css +1 -1
  20. data/share/views/public/plugins/semantic-ui/dist/components/breadcrumb.min.css +2 -2
  21. data/share/views/public/plugins/semantic-ui/dist/components/button.css +3 -17
  22. data/share/views/public/plugins/semantic-ui/dist/components/button.min.css +2 -2
  23. data/share/views/public/plugins/semantic-ui/dist/components/card.css +22 -31
  24. data/share/views/public/plugins/semantic-ui/dist/components/card.min.css +2 -2
  25. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.css +1 -1
  26. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.js +1 -1
  27. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.css +2 -2
  28. data/share/views/public/plugins/semantic-ui/dist/components/checkbox.min.js +1 -10
  29. data/share/views/public/plugins/semantic-ui/dist/components/comment.css +5 -5
  30. data/share/views/public/plugins/semantic-ui/dist/components/comment.min.css +2 -2
  31. data/share/views/public/plugins/semantic-ui/dist/components/container.css +1 -1
  32. data/share/views/public/plugins/semantic-ui/dist/components/container.min.css +2 -2
  33. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.css +19 -3
  34. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.js +1 -1
  35. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.css +2 -2
  36. data/share/views/public/plugins/semantic-ui/dist/components/dimmer.min.js +1 -10
  37. data/share/views/public/plugins/semantic-ui/dist/components/divider.css +1 -1
  38. data/share/views/public/plugins/semantic-ui/dist/components/divider.min.css +2 -2
  39. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.css +94 -38
  40. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.js +214 -76
  41. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.css +2 -2
  42. data/share/views/public/plugins/semantic-ui/dist/components/dropdown.min.js +2 -11
  43. data/share/views/public/plugins/semantic-ui/dist/components/embed.css +1 -1
  44. data/share/views/public/plugins/semantic-ui/dist/components/embed.js +1 -1
  45. data/share/views/public/plugins/semantic-ui/dist/components/embed.min.css +2 -2
  46. data/share/views/public/plugins/semantic-ui/dist/components/embed.min.js +1 -10
  47. data/share/views/public/plugins/semantic-ui/dist/components/feed.css +7 -11
  48. data/share/views/public/plugins/semantic-ui/dist/components/feed.min.css +2 -2
  49. data/share/views/public/plugins/semantic-ui/dist/components/flag.css +2 -2
  50. data/share/views/public/plugins/semantic-ui/dist/components/flag.min.css +2 -2
  51. data/share/views/public/plugins/semantic-ui/dist/components/form.css +49 -62
  52. data/share/views/public/plugins/semantic-ui/dist/components/form.js +186 -38
  53. data/share/views/public/plugins/semantic-ui/dist/components/form.min.css +2 -2
  54. data/share/views/public/plugins/semantic-ui/dist/components/form.min.js +1 -10
  55. data/share/views/public/plugins/semantic-ui/dist/components/grid.css +23 -52
  56. data/share/views/public/plugins/semantic-ui/dist/components/grid.min.css +2 -2
  57. data/share/views/public/plugins/semantic-ui/dist/components/header.css +15 -15
  58. data/share/views/public/plugins/semantic-ui/dist/components/header.min.css +2 -2
  59. data/share/views/public/plugins/semantic-ui/dist/components/icon.css +179 -5
  60. data/share/views/public/plugins/semantic-ui/dist/components/icon.min.css +2 -2
  61. data/share/views/public/plugins/semantic-ui/dist/components/image.css +1 -1
  62. data/share/views/public/plugins/semantic-ui/dist/components/image.min.css +2 -2
  63. data/share/views/public/plugins/semantic-ui/dist/components/input.css +6 -12
  64. data/share/views/public/plugins/semantic-ui/dist/components/input.min.css +2 -2
  65. data/share/views/public/plugins/semantic-ui/dist/components/item.css +33 -28
  66. data/share/views/public/plugins/semantic-ui/dist/components/item.min.css +2 -2
  67. data/share/views/public/plugins/semantic-ui/dist/components/label.css +1 -1
  68. data/share/views/public/plugins/semantic-ui/dist/components/label.min.css +2 -2
  69. data/share/views/public/plugins/semantic-ui/dist/components/list.css +2 -2
  70. data/share/views/public/plugins/semantic-ui/dist/components/list.min.css +2 -2
  71. data/share/views/public/plugins/semantic-ui/dist/components/loader.css +1 -1
  72. data/share/views/public/plugins/semantic-ui/dist/components/loader.min.css +2 -2
  73. data/share/views/public/plugins/semantic-ui/dist/components/menu.css +18 -27
  74. data/share/views/public/plugins/semantic-ui/dist/components/menu.min.css +1 -1
  75. data/share/views/public/plugins/semantic-ui/dist/components/message.css +7 -7
  76. data/share/views/public/plugins/semantic-ui/dist/components/message.min.css +2 -2
  77. data/share/views/public/plugins/semantic-ui/dist/components/modal.css +102 -23
  78. data/share/views/public/plugins/semantic-ui/dist/components/modal.js +79 -25
  79. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.css +2 -2
  80. data/share/views/public/plugins/semantic-ui/dist/components/modal.min.js +1 -10
  81. data/share/views/public/plugins/semantic-ui/dist/components/nag.css +1 -1
  82. data/share/views/public/plugins/semantic-ui/dist/components/nag.js +1 -1
  83. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.css +2 -2
  84. data/share/views/public/plugins/semantic-ui/dist/components/nag.min.js +1 -10
  85. data/share/views/public/plugins/semantic-ui/dist/components/popup.css +1 -1
  86. data/share/views/public/plugins/semantic-ui/dist/components/popup.js +41 -30
  87. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.css +2 -2
  88. data/share/views/public/plugins/semantic-ui/dist/components/popup.min.js +1 -10
  89. data/share/views/public/plugins/semantic-ui/dist/components/progress.css +1 -1
  90. data/share/views/public/plugins/semantic-ui/dist/components/progress.js +1 -1
  91. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.css +2 -2
  92. data/share/views/public/plugins/semantic-ui/dist/components/progress.min.js +1 -10
  93. data/share/views/public/plugins/semantic-ui/dist/components/rail.css +1 -1
  94. data/share/views/public/plugins/semantic-ui/dist/components/rail.min.css +1 -1
  95. data/share/views/public/plugins/semantic-ui/dist/components/rating.css +1 -3
  96. data/share/views/public/plugins/semantic-ui/dist/components/rating.js +1 -1
  97. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.css +2 -2
  98. data/share/views/public/plugins/semantic-ui/dist/components/rating.min.js +1 -10
  99. data/share/views/public/plugins/semantic-ui/dist/components/reset.css +254 -199
  100. data/share/views/public/plugins/semantic-ui/dist/components/reset.min.css +2 -2
  101. data/share/views/public/plugins/semantic-ui/dist/components/reveal.css +1 -1
  102. data/share/views/public/plugins/semantic-ui/dist/components/reveal.min.css +2 -2
  103. data/share/views/public/plugins/semantic-ui/dist/components/search.css +4 -4
  104. data/share/views/public/plugins/semantic-ui/dist/components/search.js +96 -52
  105. data/share/views/public/plugins/semantic-ui/dist/components/search.min.css +2 -2
  106. data/share/views/public/plugins/semantic-ui/dist/components/search.min.js +1 -10
  107. data/share/views/public/plugins/semantic-ui/dist/components/segment.css +21 -20
  108. data/share/views/public/plugins/semantic-ui/dist/components/segment.min.css +2 -2
  109. data/share/views/public/plugins/semantic-ui/dist/components/shape.css +1 -1
  110. data/share/views/public/plugins/semantic-ui/dist/components/shape.js +1 -1
  111. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.css +2 -2
  112. data/share/views/public/plugins/semantic-ui/dist/components/shape.min.js +1 -10
  113. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.css +1 -13
  114. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.js +2 -5
  115. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.css +2 -2
  116. data/share/views/public/plugins/semantic-ui/dist/components/sidebar.min.js +1 -10
  117. data/share/views/public/plugins/semantic-ui/dist/components/site.css +49 -6
  118. data/share/views/public/plugins/semantic-ui/dist/components/site.js +1 -1
  119. data/share/views/public/plugins/semantic-ui/dist/components/site.min.css +2 -2
  120. data/share/views/public/plugins/semantic-ui/dist/components/site.min.js +1 -10
  121. data/share/views/public/plugins/semantic-ui/dist/components/state.js +1 -1
  122. data/share/views/public/plugins/semantic-ui/dist/components/state.min.js +1 -10
  123. data/share/views/public/plugins/semantic-ui/dist/components/statistic.css +3 -19
  124. data/share/views/public/plugins/semantic-ui/dist/components/statistic.min.css +2 -2
  125. data/share/views/public/plugins/semantic-ui/dist/components/step.css +22 -44
  126. data/share/views/public/plugins/semantic-ui/dist/components/step.min.css +2 -2
  127. data/share/views/public/plugins/semantic-ui/dist/components/sticky.css +1 -1
  128. data/share/views/public/plugins/semantic-ui/dist/components/sticky.js +23 -6
  129. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.css +1 -1
  130. data/share/views/public/plugins/semantic-ui/dist/components/sticky.min.js +1 -10
  131. data/share/views/public/plugins/semantic-ui/dist/components/tab.css +1 -1
  132. data/share/views/public/plugins/semantic-ui/dist/components/tab.js +13 -7
  133. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.css +1 -1
  134. data/share/views/public/plugins/semantic-ui/dist/components/tab.min.js +1 -10
  135. data/share/views/public/plugins/semantic-ui/dist/components/table.css +2 -2
  136. data/share/views/public/plugins/semantic-ui/dist/components/table.min.css +2 -2
  137. data/share/views/public/plugins/semantic-ui/dist/components/transition.css +1 -1
  138. data/share/views/public/plugins/semantic-ui/dist/components/transition.js +1 -1
  139. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.css +2 -2
  140. data/share/views/public/plugins/semantic-ui/dist/components/transition.min.js +1 -10
  141. data/share/views/public/plugins/semantic-ui/dist/components/visibility.js +33 -5
  142. data/share/views/public/plugins/semantic-ui/dist/components/visibility.min.js +1 -10
  143. data/share/views/public/plugins/semantic-ui/dist/semantic.css +979 -612
  144. data/share/views/public/plugins/semantic-ui/dist/semantic.js +700 -257
  145. data/share/views/public/plugins/semantic-ui/dist/semantic.min.css +355 -2
  146. data/share/views/public/plugins/semantic-ui/dist/semantic.min.js +10 -10
  147. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.eot +0 -0
  148. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.svg +2668 -682
  149. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.ttf +0 -0
  150. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.woff +0 -0
  151. data/share/views/public/plugins/semantic-ui/dist/themes/default/assets/fonts/icons.woff2 +0 -0
  152. data/share/views/public/plugins/semantic-ui/dist/themes/material/assets/fonts/icons.woff2 +0 -0
  153. data/share/views/public/plugins/semantic-ui/examples/components/menu.html +26 -0
  154. data/share/views/public/plugins/semantic-ui/package-lock.json +3718 -0
  155. data/share/views/public/plugins/semantic-ui/package.json +22 -22
  156. data/share/views/public/plugins/semantic-ui/src/_site/collections/menu.overrides +1 -1
  157. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/form.js +185 -37
  158. data/share/views/public/plugins/semantic-ui/src/definitions/behaviors/visibility.js +32 -4
  159. data/share/views/public/plugins/semantic-ui/src/definitions/collections/form.less +43 -43
  160. data/share/views/public/plugins/semantic-ui/src/definitions/collections/menu.less +8 -1
  161. data/share/views/public/plugins/semantic-ui/src/definitions/collections/message.less +3 -0
  162. data/share/views/public/plugins/semantic-ui/src/definitions/collections/table.less +1 -1
  163. data/share/views/public/plugins/semantic-ui/src/definitions/elements/button.less +2 -3
  164. data/share/views/public/plugins/semantic-ui/src/definitions/elements/header.less +2 -2
  165. data/share/views/public/plugins/semantic-ui/src/definitions/elements/icon.less +24 -0
  166. data/share/views/public/plugins/semantic-ui/src/definitions/elements/input.less +3 -2
  167. data/share/views/public/plugins/semantic-ui/src/definitions/elements/segment.less +20 -13
  168. data/share/views/public/plugins/semantic-ui/src/definitions/elements/step.less +34 -34
  169. data/share/views/public/plugins/semantic-ui/src/definitions/globals/site.less +44 -3
  170. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.js +0 -0
  171. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dimmer.less +18 -1
  172. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.js +213 -75
  173. data/share/views/public/plugins/semantic-ui/src/definitions/modules/dropdown.less +79 -21
  174. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.js +78 -24
  175. data/share/views/public/plugins/semantic-ui/src/definitions/modules/modal.less +87 -0
  176. data/share/views/public/plugins/semantic-ui/src/definitions/modules/popup.js +40 -29
  177. data/share/views/public/plugins/semantic-ui/src/definitions/modules/search.js +99 -55
  178. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sidebar.js +1 -4
  179. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sidebar.less +0 -14
  180. data/share/views/public/plugins/semantic-ui/src/definitions/modules/sticky.js +22 -5
  181. data/share/views/public/plugins/semantic-ui/src/definitions/modules/tab.js +12 -6
  182. data/share/views/public/plugins/semantic-ui/src/definitions/views/card.less +18 -18
  183. data/share/views/public/plugins/semantic-ui/src/definitions/views/item.less +17 -7
  184. data/share/views/public/plugins/semantic-ui/src/themes/bookish/elements/header.overrides +1 -1
  185. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/button.overrides +1 -1
  186. data/share/views/public/plugins/semantic-ui/src/themes/chubby/elements/header.overrides +1 -1
  187. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.eot +0 -0
  188. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.svg +2668 -682
  189. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.ttf +0 -0
  190. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.woff +0 -0
  191. data/share/views/public/plugins/semantic-ui/src/themes/default/assets/fonts/icons.woff2 +0 -0
  192. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/flag.overrides +2 -2
  193. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/header.variables +1 -1
  194. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/icon.overrides +54 -4
  195. data/share/views/public/plugins/semantic-ui/src/themes/default/elements/list.variables +1 -1
  196. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/reset.overrides +216 -198
  197. data/share/views/public/plugins/semantic-ui/src/themes/default/globals/site.variables +32 -8
  198. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/dropdown.variables +7 -5
  199. data/share/views/public/plugins/semantic-ui/src/themes/default/modules/modal.variables +38 -1
  200. data/share/views/public/plugins/semantic-ui/src/themes/default/views/comment.variables +0 -6
  201. data/share/views/public/plugins/semantic-ui/src/themes/default/views/item.variables +5 -2
  202. data/share/views/public/plugins/semantic-ui/src/themes/instagram/views/card.overrides +1 -1
  203. data/share/views/public/plugins/semantic-ui/src/themes/material/assets/fonts/icons.woff2 +0 -0
  204. data/share/views/public/plugins/semantic-ui/src/themes/rtl/globals/site.overrides +1 -1
  205. data/share/views/public/plugins/semantic-ui/tasks/admin/components/update.js +1 -1
  206. data/share/views/public/plugins/semantic-ui/tasks/admin/distributions/update.js +1 -1
  207. data/share/views/public/plugins/semantic-ui/tasks/config/project/install.js +1 -1
  208. data/share/views/public/plugins/semantic-ui/tasks/config/tasks.js +4 -4
  209. data/share/views/public/plugins/semantic-ui/tasks/install.js +8 -6
  210. metadata +4 -1
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * # Semantic UI 2.2.6 - Dropdown
2
+ * # Semantic UI 2.2.12 - Dropdown
3
3
  * http://github.com/semantic-org/semantic-ui/
4
4
  *
5
5
  *
@@ -97,7 +97,13 @@ $.fn.dropdown = function(parameters) {
97
97
  module.setup.reference();
98
98
  }
99
99
  else {
100
+
100
101
  module.setup.layout();
102
+
103
+ if(settings.values) {
104
+ module.change.values(settings.values);
105
+ }
106
+
101
107
  module.refreshData();
102
108
 
103
109
  module.save.defaults();
@@ -162,7 +168,7 @@ $.fn.dropdown = function(parameters) {
162
168
  observe: {
163
169
  select: function() {
164
170
  if(module.has.input()) {
165
- selectObserver.observe($input[0], {
171
+ selectObserver.observe($module[0], {
166
172
  childList : true,
167
173
  subtree : true
168
174
  });
@@ -383,19 +389,16 @@ $.fn.dropdown = function(parameters) {
383
389
  reference: function() {
384
390
  module.debug('Dropdown behavior was called on select, replacing with closest dropdown');
385
391
  // replace module reference
386
- $module = $module.parent(selector.dropdown);
392
+ $module = $module.parent(selector.dropdown);
393
+ instance = $module.data(moduleNamespace);
394
+ element = $module.get(0);
387
395
  module.refresh();
388
396
  module.setup.returnedObject();
389
- // invoke method in context of current instance
390
- if(methodInvoked) {
391
- instance = module;
392
- module.invoke(query);
393
- }
394
397
  },
395
398
  returnedObject: function() {
396
399
  var
397
400
  $firstModules = $allModules.slice(0, elementIndex),
398
- $lastModules = $allModules.slice(elementIndex + 1)
401
+ $lastModules = $allModules.slice(elementIndex + 1)
399
402
  ;
400
403
  // adjust all modules to use correct reference
401
404
  $allModules = $firstModules.add($module).add($lastModules);
@@ -461,6 +464,10 @@ $.fn.dropdown = function(parameters) {
461
464
  ? callback
462
465
  : function(){}
463
466
  ;
467
+ if(!module.can.show() && module.is.remote()) {
468
+ module.debug('No API results retrieved, searching before show');
469
+ module.queryRemote(module.get.query(), module.show);
470
+ }
464
471
  if( module.can.show() && !module.is.active() ) {
465
472
  module.debug('Showing dropdown');
466
473
  if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {
@@ -617,8 +624,17 @@ $.fn.dropdown = function(parameters) {
617
624
  .on('mousedown' + eventNamespace, module.event.mousedown)
618
625
  .on('mouseup' + eventNamespace, module.event.mouseup)
619
626
  .on('focus' + eventNamespace, module.event.focus)
620
- .on('blur' + eventNamespace, module.event.blur)
621
627
  ;
628
+ if(module.has.menuSearch() ) {
629
+ $module
630
+ .on('blur' + eventNamespace, selector.search, module.event.search.blur)
631
+ ;
632
+ }
633
+ else {
634
+ $module
635
+ .on('blur' + eventNamespace, module.event.blur)
636
+ ;
637
+ }
622
638
  }
623
639
  $menu
624
640
  .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
@@ -664,7 +680,9 @@ $.fn.dropdown = function(parameters) {
664
680
  if(module.is.multiple()) {
665
681
  module.filterActive();
666
682
  }
667
- module.select.firstUnfiltered();
683
+ if(query || (!query && module.get.activeItem().length == 0)) {
684
+ module.select.firstUnfiltered();
685
+ }
668
686
  if( module.has.allResultsFiltered() ) {
669
687
  if( settings.onNoResults.call(element, searchTerm) ) {
670
688
  if(settings.allowAdditions) {
@@ -702,6 +720,9 @@ $.fn.dropdown = function(parameters) {
702
720
  if(settings.apiSettings) {
703
721
  if( module.can.useAPI() ) {
704
722
  module.queryRemote(searchTerm, function() {
723
+ if(settings.filterRemoteData) {
724
+ module.filterItems(searchTerm);
725
+ }
705
726
  afterFiltered();
706
727
  });
707
728
  }
@@ -757,7 +778,7 @@ $.fn.dropdown = function(parameters) {
757
778
  ? query
758
779
  : module.get.query(),
759
780
  results = null,
760
- escapedTerm = module.escape.regExp(searchTerm),
781
+ escapedTerm = module.escape.string(searchTerm),
761
782
  beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')
762
783
  ;
763
784
  // avoid loop if we're matching nothing
@@ -789,12 +810,15 @@ $.fn.dropdown = function(parameters) {
789
810
  }
790
811
  if(settings.match == 'both' || settings.match == 'value') {
791
812
  value = String(module.get.choiceValue($choice, text));
792
-
793
813
  if(value.search(beginsWithRegExp) !== -1) {
794
814
  results.push(this);
795
815
  return true;
796
816
  }
797
- else if(settings.fullTextSearch && module.fuzzySearch(searchTerm, value)) {
817
+ else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {
818
+ results.push(this);
819
+ return true;
820
+ }
821
+ else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {
798
822
  results.push(this);
799
823
  return true;
800
824
  }
@@ -876,7 +900,7 @@ $.fn.dropdown = function(parameters) {
876
900
  : $activeItem,
877
901
  hasSelected = ($selectedItem.length > 0)
878
902
  ;
879
- if(hasSelected) {
903
+ if(hasSelected && !module.is.multiple()) {
880
904
  module.debug('Forcing partial selection to selected item', $selectedItem);
881
905
  module.event.item.click.call($selectedItem, {}, true);
882
906
  return;
@@ -892,6 +916,23 @@ $.fn.dropdown = function(parameters) {
892
916
  }
893
917
  },
894
918
 
919
+ change: {
920
+ values: function(values) {
921
+ if(!settings.allowAdditions) {
922
+ module.clear();
923
+ }
924
+ module.debug('Creating dropdown with specified values', values);
925
+ module.setup.menu({values: values});
926
+ $.each(values, function(index, item) {
927
+ if(item.selected == true) {
928
+ module.debug('Setting initial selection to', item.value);
929
+ module.set.selected(item.value);
930
+ return true;
931
+ }
932
+ });
933
+ }
934
+ },
935
+
895
936
  event: {
896
937
  change: function() {
897
938
  if(!internalChange) {
@@ -956,7 +997,7 @@ $.fn.dropdown = function(parameters) {
956
997
  },
957
998
  blur: function(event) {
958
999
  pageLostFocus = (document.activeElement === this);
959
- if(!willRefocus) {
1000
+ if(module.is.searchSelection() && !willRefocus) {
960
1001
  if(!itemActivated && !pageLostFocus) {
961
1002
  if(settings.forceSelection) {
962
1003
  module.forceSelection();
@@ -1060,7 +1101,22 @@ $.fn.dropdown = function(parameters) {
1060
1101
  select: {
1061
1102
  mutation: function(mutations) {
1062
1103
  module.debug('<select> modified, recreating menu');
1063
- module.setup.select();
1104
+ var
1105
+ isSelectMutation = false
1106
+ ;
1107
+ $.each(mutations, function(index, mutation) {
1108
+ if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
1109
+ isSelectMutation = true;
1110
+ return true;
1111
+ }
1112
+ });
1113
+ if(isSelectMutation) {
1114
+ module.disconnect.selectObserver();
1115
+ module.refresh();
1116
+ module.setup.select();
1117
+ module.set.selected();
1118
+ module.observe.select();
1119
+ }
1064
1120
  }
1065
1121
  },
1066
1122
  menu: {
@@ -1139,6 +1195,10 @@ $.fn.dropdown = function(parameters) {
1139
1195
  hasSubMenu = ($subMenu.length > 0),
1140
1196
  isBubbledEvent = ($subMenu.find($target).length > 0)
1141
1197
  ;
1198
+ // prevents IE11 bug where menu receives focus even though `tabindex=-1`
1199
+ if(module.has.menuSearch()) {
1200
+ $(document.activeElement).blur();
1201
+ }
1142
1202
  if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {
1143
1203
  if(module.is.searchSelection()) {
1144
1204
  if(settings.allowAdditions) {
@@ -1445,7 +1505,6 @@ $.fn.dropdown = function(parameters) {
1445
1505
  // down arrow (open menu)
1446
1506
  if(pressedKey == keys.downArrow && !module.is.visible()) {
1447
1507
  module.verbose('Down key pressed, showing dropdown');
1448
- module.select.firstUnfiltered();
1449
1508
  module.show();
1450
1509
  event.preventDefault();
1451
1510
  }
@@ -1595,6 +1654,9 @@ $.fn.dropdown = function(parameters) {
1595
1654
  return $module.data(metadata.defaultValue);
1596
1655
  },
1597
1656
  placeholderText: function() {
1657
+ if(settings.placeholder != 'auto' && typeof settings.placeholder == 'string') {
1658
+ return settings.placeholder;
1659
+ }
1598
1660
  return $module.data(metadata.placeholderText) || '';
1599
1661
  },
1600
1662
  text: function() {
@@ -2183,7 +2245,7 @@ $.fn.dropdown = function(parameters) {
2183
2245
  $text.addClass(className.placeholder);
2184
2246
  },
2185
2247
  tabbable: function() {
2186
- if( module.has.search() ) {
2248
+ if( module.is.searchSelection() ) {
2187
2249
  module.debug('Added tabindex to searchable dropdown');
2188
2250
  $search
2189
2251
  .val('')
@@ -2295,12 +2357,13 @@ $.fn.dropdown = function(parameters) {
2295
2357
  },
2296
2358
  selectedItem: function($item) {
2297
2359
  var
2298
- value = module.get.choiceValue($item),
2299
- text = module.get.choiceText($item, false)
2360
+ value = module.get.choiceValue($item),
2361
+ searchText = module.get.choiceText($item, false),
2362
+ text = module.get.choiceText($item, true)
2300
2363
  ;
2301
2364
  module.debug('Setting user selection to item', $item);
2302
2365
  module.remove.activeItem();
2303
- module.set.partialSearch(text);
2366
+ module.set.partialSearch(searchText);
2304
2367
  module.set.activeItem($item);
2305
2368
  module.set.selected(value, $item);
2306
2369
  module.set.text(text);
@@ -2343,21 +2406,31 @@ $.fn.dropdown = function(parameters) {
2343
2406
  },
2344
2407
  direction: function($menu) {
2345
2408
  if(settings.direction == 'auto') {
2346
- if(module.is.onScreen($menu)) {
2409
+ // reset position
2410
+ module.remove.upward();
2411
+
2412
+ if(module.can.openDownward($menu)) {
2347
2413
  module.remove.upward($menu);
2348
2414
  }
2349
2415
  else {
2350
2416
  module.set.upward($menu);
2351
2417
  }
2418
+ if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {
2419
+ module.set.leftward($menu);
2420
+ }
2352
2421
  }
2353
2422
  else if(settings.direction == 'upward') {
2354
2423
  module.set.upward($menu);
2355
2424
  }
2356
2425
  },
2357
- upward: function($menu) {
2358
- var $element = $menu || $module;
2426
+ upward: function($currentMenu) {
2427
+ var $element = $currentMenu || $module;
2359
2428
  $element.addClass(className.upward);
2360
2429
  },
2430
+ leftward: function($currentMenu) {
2431
+ var $element = $currentMenu || $menu;
2432
+ $element.addClass(className.leftward);
2433
+ },
2361
2434
  value: function(value, text, $selected) {
2362
2435
  var
2363
2436
  escapedValue = module.escape.value(value),
@@ -2509,7 +2582,7 @@ $.fn.dropdown = function(parameters) {
2509
2582
  ;
2510
2583
  $label = $('<a />')
2511
2584
  .addClass(className.label)
2512
- .attr('data-value', escapedValue)
2585
+ .attr('data-' + metadata.value, escapedValue)
2513
2586
  .html(templates.label(escapedValue, text))
2514
2587
  ;
2515
2588
  $label = settings.onLabelCreate.call($label, escapedValue, text);
@@ -2557,7 +2630,7 @@ $.fn.dropdown = function(parameters) {
2557
2630
  optionValue: function(value) {
2558
2631
  var
2559
2632
  escapedValue = module.escape.value(value),
2560
- $option = $input.find('option[value="' + escapedValue + '"]'),
2633
+ $option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
2561
2634
  hasOption = ($option.length > 0)
2562
2635
  ;
2563
2636
  if(hasOption) {
@@ -2705,10 +2778,14 @@ $.fn.dropdown = function(parameters) {
2705
2778
  initialLoad: function() {
2706
2779
  initialLoad = false;
2707
2780
  },
2708
- upward: function($menu) {
2709
- var $element = $menu || $module;
2781
+ upward: function($currentMenu) {
2782
+ var $element = $currentMenu || $module;
2710
2783
  $element.removeClass(className.upward);
2711
2784
  },
2785
+ leftward: function($currentMenu) {
2786
+ var $element = $currentMenu || $menu;
2787
+ $element.removeClass(className.leftward);
2788
+ },
2712
2789
  visible: function() {
2713
2790
  $module.removeClass(className.visible);
2714
2791
  },
@@ -2730,7 +2807,7 @@ $.fn.dropdown = function(parameters) {
2730
2807
  optionValue: function(value) {
2731
2808
  var
2732
2809
  escapedValue = module.escape.value(value),
2733
- $option = $input.find('option[value="' + escapedValue + '"]'),
2810
+ $option = $input.find('option[value="' + module.escape.string(escapedValue) + '"]'),
2734
2811
  hasOption = ($option.length > 0)
2735
2812
  ;
2736
2813
  if(!hasOption || !$option.hasClass(className.addition)) {
@@ -2849,7 +2926,7 @@ $.fn.dropdown = function(parameters) {
2849
2926
  label: function(value, shouldAnimate) {
2850
2927
  var
2851
2928
  $labels = $module.find(selector.label),
2852
- $removedLabel = $labels.filter('[data-value="' + value +'"]')
2929
+ $removedLabel = $labels.filter('[data-' + metadata.value + '="' + module.escape.string(value) +'"]')
2853
2930
  ;
2854
2931
  module.verbose('Removing label', $removedLabel);
2855
2932
  $removedLabel.remove();
@@ -2889,7 +2966,7 @@ $.fn.dropdown = function(parameters) {
2889
2966
  ;
2890
2967
  },
2891
2968
  tabbable: function() {
2892
- if( module.has.search() ) {
2969
+ if( module.is.searchSelection() ) {
2893
2970
  module.debug('Searchable dropdown initialized');
2894
2971
  $search
2895
2972
  .removeAttr('tabindex')
@@ -2963,7 +3040,7 @@ $.fn.dropdown = function(parameters) {
2963
3040
  escapedValue = module.escape.value(value),
2964
3041
  $labels = $module.find(selector.label)
2965
3042
  ;
2966
- return ($labels.filter('[data-value="' + escapedValue +'"]').length > 0);
3043
+ return ($labels.filter('[data-' + metadata.value + '="' + module.escape.string(escapedValue) +'"]').length > 0);
2967
3044
  },
2968
3045
  maxSelections: function() {
2969
3046
  return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);
@@ -3005,7 +3082,7 @@ $.fn.dropdown = function(parameters) {
3005
3082
  return $(event.target).closest($icon).length > 0;
3006
3083
  },
3007
3084
  alreadySetup: function() {
3008
- return ($module.is('select') && $module.parent(selector.dropdown).length > 0 && $module.prev().length === 0);
3085
+ return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
3009
3086
  },
3010
3087
  animating: function($subMenu) {
3011
3088
  return ($subMenu)
@@ -3013,6 +3090,10 @@ $.fn.dropdown = function(parameters) {
3013
3090
  : $menu.transition && $menu.transition('is animating')
3014
3091
  ;
3015
3092
  },
3093
+ leftward: function($subMenu) {
3094
+ var $selectedMenu = $subMenu || $menu;
3095
+ return $selectedMenu.hasClass(className.leftward);
3096
+ },
3016
3097
  disabled: function() {
3017
3098
  return $module.hasClass(className.disabled);
3018
3099
  },
@@ -3031,43 +3112,6 @@ $.fn.dropdown = function(parameters) {
3031
3112
  initialLoad: function() {
3032
3113
  return initialLoad;
3033
3114
  },
3034
- onScreen: function($subMenu) {
3035
- var
3036
- $currentMenu = $subMenu || $menu,
3037
- canOpenDownward = true,
3038
- onScreen = {},
3039
- calculations
3040
- ;
3041
- $currentMenu.addClass(className.loading);
3042
- calculations = {
3043
- context: {
3044
- scrollTop : $context.scrollTop(),
3045
- height : $context.outerHeight()
3046
- },
3047
- menu : {
3048
- offset: $currentMenu.offset(),
3049
- height: $currentMenu.outerHeight()
3050
- }
3051
- };
3052
- onScreen = {
3053
- above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,
3054
- below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height
3055
- };
3056
- if(onScreen.below) {
3057
- module.verbose('Dropdown can fit in context downward', onScreen);
3058
- canOpenDownward = true;
3059
- }
3060
- else if(!onScreen.below && !onScreen.above) {
3061
- module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);
3062
- canOpenDownward = true;
3063
- }
3064
- else {
3065
- module.verbose('Dropdown cannot fit below, opening upward', onScreen);
3066
- canOpenDownward = false;
3067
- }
3068
- $currentMenu.removeClass(className.loading);
3069
- return canOpenDownward;
3070
- },
3071
3115
  inObject: function(needle, object) {
3072
3116
  var
3073
3117
  found = false
@@ -3083,6 +3127,9 @@ $.fn.dropdown = function(parameters) {
3083
3127
  multiple: function() {
3084
3128
  return $module.hasClass(className.multiple);
3085
3129
  },
3130
+ remote: function() {
3131
+ return settings.apiSettings && module.can.useAPI();
3132
+ },
3086
3133
  single: function() {
3087
3134
  return !module.is.multiple();
3088
3135
  },
@@ -3119,6 +3166,22 @@ $.fn.dropdown = function(parameters) {
3119
3166
  ? $subMenu.hasClass(className.visible)
3120
3167
  : $menu.hasClass(className.visible)
3121
3168
  ;
3169
+ },
3170
+ verticallyScrollableContext: function() {
3171
+ var
3172
+ overflowY = ($context.get(0) !== window)
3173
+ ? $context.css('overflow-y')
3174
+ : false
3175
+ ;
3176
+ return (overflowY == 'auto' || overflowY == 'scroll');
3177
+ },
3178
+ horizontallyScrollableContext: function() {
3179
+ var
3180
+ overflowX = ($context.get(0) !== window)
3181
+ ? $context.css('overflow-X')
3182
+ : false
3183
+ ;
3184
+ return (overflowX == 'auto' || overflowX == 'scroll');
3122
3185
  }
3123
3186
  },
3124
3187
 
@@ -3135,6 +3198,79 @@ $.fn.dropdown = function(parameters) {
3135
3198
  }
3136
3199
  return false;
3137
3200
  },
3201
+ openDownward: function($subMenu) {
3202
+ var
3203
+ $currentMenu = $subMenu || $menu,
3204
+ canOpenDownward = true,
3205
+ onScreen = {},
3206
+ calculations
3207
+ ;
3208
+ $currentMenu
3209
+ .addClass(className.loading)
3210
+ ;
3211
+ calculations = {
3212
+ context: {
3213
+ scrollTop : $context.scrollTop(),
3214
+ height : $context.outerHeight()
3215
+ },
3216
+ menu : {
3217
+ offset: $currentMenu.offset(),
3218
+ height: $currentMenu.outerHeight()
3219
+ }
3220
+ };
3221
+ if(module.is.verticallyScrollableContext()) {
3222
+ calculations.menu.offset.top += calculations.context.scrollTop;
3223
+ }
3224
+ onScreen = {
3225
+ above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,
3226
+ below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height
3227
+ };
3228
+ if(onScreen.below) {
3229
+ module.verbose('Dropdown can fit in context downward', onScreen);
3230
+ canOpenDownward = true;
3231
+ }
3232
+ else if(!onScreen.below && !onScreen.above) {
3233
+ module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);
3234
+ canOpenDownward = true;
3235
+ }
3236
+ else {
3237
+ module.verbose('Dropdown cannot fit below, opening upward', onScreen);
3238
+ canOpenDownward = false;
3239
+ }
3240
+ $currentMenu.removeClass(className.loading);
3241
+ return canOpenDownward;
3242
+ },
3243
+ openRightward: function($subMenu) {
3244
+ var
3245
+ $currentMenu = $subMenu || $menu,
3246
+ canOpenRightward = true,
3247
+ isOffscreenRight = false,
3248
+ calculations
3249
+ ;
3250
+ $currentMenu
3251
+ .addClass(className.loading)
3252
+ ;
3253
+ calculations = {
3254
+ context: {
3255
+ scrollLeft : $context.scrollLeft(),
3256
+ width : $context.outerWidth()
3257
+ },
3258
+ menu: {
3259
+ offset : $currentMenu.offset(),
3260
+ width : $currentMenu.outerWidth()
3261
+ }
3262
+ };
3263
+ if(module.is.horizontallyScrollableContext()) {
3264
+ calculations.menu.offset.left += calculations.context.scrollLeft;
3265
+ }
3266
+ isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);
3267
+ if(isOffscreenRight) {
3268
+ module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);
3269
+ canOpenRightward = false;
3270
+ }
3271
+ $currentMenu.removeClass(className.loading);
3272
+ return canOpenRightward;
3273
+ },
3138
3274
  click: function() {
3139
3275
  return (hasTouch || settings.on == 'click');
3140
3276
  },
@@ -3236,9 +3372,6 @@ $.fn.dropdown = function(parameters) {
3236
3372
  queue : true,
3237
3373
  onStart : start,
3238
3374
  onComplete : function() {
3239
- if(settings.direction == 'auto') {
3240
- module.remove.upward($subMenu);
3241
- }
3242
3375
  callback.call(element);
3243
3376
  }
3244
3377
  })
@@ -3288,7 +3421,7 @@ $.fn.dropdown = function(parameters) {
3288
3421
  hasQuotes = (stringValue && value.search(regExp.quote) !== -1),
3289
3422
  values = []
3290
3423
  ;
3291
- if(!module.has.selectInput() || isUnparsable || !hasQuotes) {
3424
+ if(isUnparsable || !hasQuotes) {
3292
3425
  return value;
3293
3426
  }
3294
3427
  module.debug('Encoding quote values for use in select', value);
@@ -3300,7 +3433,7 @@ $.fn.dropdown = function(parameters) {
3300
3433
  }
3301
3434
  return value.replace(regExp.quote, '&quot;');
3302
3435
  },
3303
- regExp: function(text) {
3436
+ string: function(text) {
3304
3437
  text = String(text);
3305
3438
  return text.replace(regExp.escape, '\\$&');
3306
3439
  }
@@ -3499,11 +3632,15 @@ $.fn.dropdown.settings = {
3499
3632
  on : 'click', // what event should show menu action on item selection
3500
3633
  action : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})
3501
3634
 
3635
+ values : false, // specify values to use for dropdown
3502
3636
 
3503
3637
  apiSettings : false,
3504
3638
  selectOnKeydown : true, // Whether selection should occur automatically when keyboard shortcuts used
3505
3639
  minCharacters : 0, // Minimum characters required to trigger API call
3640
+
3641
+ filterRemoteData : false, // Whether API results should be filtered after being returned for query term
3506
3642
  saveRemoteData : true, // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh
3643
+
3507
3644
  throttle : 200, // How long to wait after last user input to search remotely
3508
3645
 
3509
3646
  context : window, // Context to use when determining if on screen
@@ -3665,6 +3802,7 @@ $.fn.dropdown.settings = {
3665
3802
  selected : 'selected',
3666
3803
  selection : 'selection',
3667
3804
  upward : 'upward',
3805
+ leftward : 'left',
3668
3806
  visible : 'visible'
3669
3807
  }
3670
3808