fomantic-ui 2.8.8-beta.99 → 2.9.0-beta.100

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/.all-contributorsrc +188 -3
  2. package/.github/dependabot.yml +17 -0
  3. package/.github/workflows/ci.yml +1 -1
  4. package/CHANGELOG.md +139 -0
  5. package/CONTRIBUTING.md +1 -1
  6. package/CONTRIBUTORS.md +71 -37
  7. package/README.md +3 -3
  8. package/dist/components/accordion.css +50 -6
  9. package/dist/components/accordion.js +1 -1
  10. package/dist/components/accordion.min.css +2 -2
  11. package/dist/components/accordion.min.js +3 -3
  12. package/dist/components/ad.css +1 -1
  13. package/dist/components/ad.min.css +1 -1
  14. package/dist/components/api.js +26 -24
  15. package/dist/components/api.min.js +4 -4
  16. package/dist/components/breadcrumb.css +1 -1
  17. package/dist/components/breadcrumb.min.css +1 -1
  18. package/dist/components/button.css +81 -81
  19. package/dist/components/button.min.css +2 -2
  20. package/dist/components/calendar.css +1 -1
  21. package/dist/components/calendar.js +110 -11
  22. package/dist/components/calendar.min.css +1 -1
  23. package/dist/components/calendar.min.js +4 -4
  24. package/dist/components/card.css +26 -19
  25. package/dist/components/card.min.css +2 -2
  26. package/dist/components/checkbox.css +6 -4
  27. package/dist/components/checkbox.js +17 -11
  28. package/dist/components/checkbox.min.css +2 -2
  29. package/dist/components/checkbox.min.js +4 -4
  30. package/dist/components/comment.css +11 -11
  31. package/dist/components/comment.min.css +1 -1
  32. package/dist/components/container.css +3 -4
  33. package/dist/components/container.min.css +2 -2
  34. package/dist/components/dimmer.css +28 -14
  35. package/dist/components/dimmer.js +15 -12
  36. package/dist/components/dimmer.min.css +2 -2
  37. package/dist/components/dimmer.min.js +4 -4
  38. package/dist/components/divider.css +1 -1
  39. package/dist/components/divider.min.css +1 -1
  40. package/dist/components/dropdown.css +54 -7
  41. package/dist/components/dropdown.js +107 -77
  42. package/dist/components/dropdown.min.css +2 -2
  43. package/dist/components/dropdown.min.js +4 -4
  44. package/dist/components/embed.css +1 -1
  45. package/dist/components/embed.js +1 -1
  46. package/dist/components/embed.min.css +1 -1
  47. package/dist/components/embed.min.js +3 -3
  48. package/dist/components/emoji.css +2 -2
  49. package/dist/components/feed.css +28 -28
  50. package/dist/components/feed.min.css +2 -2
  51. package/dist/components/flag.css +731 -625
  52. package/dist/components/flag.min.css +2 -2
  53. package/dist/components/form.css +119 -54
  54. package/dist/components/form.js +51 -70
  55. package/dist/components/form.min.css +2 -2
  56. package/dist/components/form.min.js +4 -4
  57. package/dist/components/grid.css +13 -11
  58. package/dist/components/grid.min.css +2 -2
  59. package/dist/components/header.css +3 -3
  60. package/dist/components/header.min.css +2 -2
  61. package/dist/components/icon.css +86 -5
  62. package/dist/components/icon.min.css +2 -2
  63. package/dist/components/image.css +1 -1
  64. package/dist/components/image.min.css +1 -1
  65. package/dist/components/input.css +17 -2
  66. package/dist/components/input.min.css +2 -2
  67. package/dist/components/item.css +13 -13
  68. package/dist/components/item.min.css +1 -1
  69. package/dist/components/label.css +1 -1
  70. package/dist/components/label.min.css +1 -1
  71. package/dist/components/list.css +1 -1
  72. package/dist/components/list.min.css +1 -1
  73. package/dist/components/loader.css +39 -37
  74. package/dist/components/loader.min.css +2 -2
  75. package/dist/components/menu.css +37 -11
  76. package/dist/components/menu.min.css +1 -1
  77. package/dist/components/message.css +78 -34
  78. package/dist/components/message.min.css +2 -2
  79. package/dist/components/modal.css +7 -5
  80. package/dist/components/modal.js +237 -41
  81. package/dist/components/modal.min.css +2 -2
  82. package/dist/components/modal.min.js +4 -4
  83. package/dist/components/nag.css +168 -16
  84. package/dist/components/nag.js +131 -65
  85. package/dist/components/nag.min.css +2 -2
  86. package/dist/components/nag.min.js +4 -4
  87. package/dist/components/placeholder.css +1 -1
  88. package/dist/components/placeholder.min.css +1 -1
  89. package/dist/components/popup.css +5 -3
  90. package/dist/components/popup.js +5 -5
  91. package/dist/components/popup.min.css +2 -2
  92. package/dist/components/popup.min.js +4 -4
  93. package/dist/components/progress.css +2 -1
  94. package/dist/components/progress.js +3 -3
  95. package/dist/components/progress.min.css +2 -2
  96. package/dist/components/progress.min.js +4 -4
  97. package/dist/components/rail.css +1 -1
  98. package/dist/components/rail.min.css +1 -1
  99. package/dist/components/rating.css +8 -62
  100. package/dist/components/rating.js +1 -1
  101. package/dist/components/rating.min.css +2 -2
  102. package/dist/components/rating.min.js +3 -3
  103. package/dist/components/reset.css +2 -3
  104. package/dist/components/reset.min.css +2 -2
  105. package/dist/components/reveal.css +1 -1
  106. package/dist/components/reveal.min.css +1 -1
  107. package/dist/components/search.css +1 -1
  108. package/dist/components/search.js +15 -13
  109. package/dist/components/search.min.css +1 -1
  110. package/dist/components/search.min.js +4 -4
  111. package/dist/components/segment.css +36 -6
  112. package/dist/components/segment.min.css +2 -2
  113. package/dist/components/shape.css +1 -1
  114. package/dist/components/shape.js +1 -1
  115. package/dist/components/shape.min.css +1 -1
  116. package/dist/components/shape.min.js +3 -3
  117. package/dist/components/sidebar.css +4 -2
  118. package/dist/components/sidebar.js +1 -1
  119. package/dist/components/sidebar.min.css +2 -2
  120. package/dist/components/sidebar.min.js +3 -3
  121. package/dist/components/site.css +61 -39
  122. package/dist/components/site.js +1 -1
  123. package/dist/components/site.min.css +2 -2
  124. package/dist/components/site.min.js +3 -3
  125. package/dist/components/slider.js +1 -1
  126. package/dist/components/slider.min.js +3 -3
  127. package/dist/components/state.js +1 -1
  128. package/dist/components/state.min.js +3 -3
  129. package/dist/components/statistic.css +1 -1
  130. package/dist/components/statistic.min.css +1 -1
  131. package/dist/components/step.css +4 -4
  132. package/dist/components/step.min.css +2 -2
  133. package/dist/components/sticky.css +1 -2
  134. package/dist/components/sticky.js +2 -2
  135. package/dist/components/sticky.min.css +2 -2
  136. package/dist/components/sticky.min.js +4 -4
  137. package/dist/components/tab.css +1 -1
  138. package/dist/components/tab.js +1 -1
  139. package/dist/components/tab.min.css +1 -1
  140. package/dist/components/tab.min.js +3 -3
  141. package/dist/components/table.css +5 -3
  142. package/dist/components/table.min.css +2 -2
  143. package/dist/components/text.css +1 -1
  144. package/dist/components/text.min.css +1 -1
  145. package/dist/components/toast.css +123 -10
  146. package/dist/components/toast.js +54 -27
  147. package/dist/components/toast.min.css +2 -2
  148. package/dist/components/toast.min.js +4 -4
  149. package/dist/components/transition.css +1 -1
  150. package/dist/components/transition.js +2 -2
  151. package/dist/components/transition.min.css +1 -1
  152. package/dist/components/transition.min.js +4 -4
  153. package/dist/components/visibility.js +2 -2
  154. package/dist/components/visibility.min.js +3 -3
  155. package/dist/semantic.css +2004 -1124
  156. package/dist/semantic.js +789 -377
  157. package/dist/semantic.min.css +4 -397
  158. package/dist/semantic.min.js +4 -4
  159. package/examples/assets/library/iframe-content.js +8 -8
  160. package/examples/assets/library/iframe.js +3 -3
  161. package/package.json +5 -5
  162. package/scripts/nightly-version.js +23 -8
  163. package/src/definitions/behaviors/api.js +25 -23
  164. package/src/definitions/behaviors/form.js +50 -69
  165. package/src/definitions/behaviors/visibility.js +1 -1
  166. package/src/definitions/collections/form.less +200 -142
  167. package/src/definitions/collections/grid.less +717 -681
  168. package/src/definitions/collections/menu.less +177 -128
  169. package/src/definitions/collections/message.less +77 -44
  170. package/src/definitions/collections/table.less +255 -242
  171. package/src/definitions/elements/button.less +360 -347
  172. package/src/definitions/elements/container.less +16 -8
  173. package/src/definitions/elements/emoji.less +15 -9
  174. package/src/definitions/elements/flag.less +7 -17
  175. package/src/definitions/elements/header.less +44 -37
  176. package/src/definitions/elements/icon.less +121 -43
  177. package/src/definitions/elements/input.less +23 -7
  178. package/src/definitions/elements/label.less +92 -91
  179. package/src/definitions/elements/list.less +55 -45
  180. package/src/definitions/elements/loader.less +38 -35
  181. package/src/definitions/elements/segment.less +51 -23
  182. package/src/definitions/elements/step.less +52 -48
  183. package/src/definitions/elements/text.less +17 -15
  184. package/src/definitions/globals/site.less +23 -2
  185. package/src/definitions/modules/accordion.less +55 -5
  186. package/src/definitions/modules/calendar.js +109 -10
  187. package/src/definitions/modules/checkbox.js +16 -10
  188. package/src/definitions/modules/checkbox.less +44 -186
  189. package/src/definitions/modules/dimmer.js +14 -11
  190. package/src/definitions/modules/dimmer.less +21 -8
  191. package/src/definitions/modules/dropdown.js +106 -76
  192. package/src/definitions/modules/dropdown.less +148 -89
  193. package/src/definitions/modules/modal.js +236 -40
  194. package/src/definitions/modules/modal.less +6 -4
  195. package/src/definitions/modules/nag.js +130 -64
  196. package/src/definitions/modules/nag.less +105 -40
  197. package/src/definitions/modules/popup.js +4 -4
  198. package/src/definitions/modules/popup.less +5 -1
  199. package/src/definitions/modules/progress.js +2 -2
  200. package/src/definitions/modules/progress.less +20 -18
  201. package/src/definitions/modules/rating.less +50 -42
  202. package/src/definitions/modules/search.js +14 -12
  203. package/src/definitions/modules/search.less +32 -16
  204. package/src/definitions/modules/sidebar.less +33 -19
  205. package/src/definitions/modules/slider.less +43 -42
  206. package/src/definitions/modules/sticky.js +1 -1
  207. package/src/definitions/modules/toast.js +53 -26
  208. package/src/definitions/modules/toast.less +139 -25
  209. package/src/definitions/modules/transition.js +1 -1
  210. package/src/definitions/views/card.less +402 -361
  211. package/src/definitions/views/comment.less +92 -81
  212. package/src/definitions/views/feed.less +164 -144
  213. package/src/definitions/views/item.less +249 -196
  214. package/src/definitions/views/statistic.less +90 -88
  215. package/src/themes/default/collections/grid.variables +8 -8
  216. package/src/themes/default/collections/menu.variables +6 -0
  217. package/src/themes/default/collections/table.variables +1 -1
  218. package/src/themes/default/elements/button.variables +2 -1
  219. package/src/themes/default/elements/flag.overrides +1635 -986
  220. package/src/themes/default/elements/flag.variables +7 -5
  221. package/src/themes/default/elements/header.variables +2 -2
  222. package/src/themes/default/elements/icon.overrides +35 -28
  223. package/src/themes/default/elements/icon.variables +4 -0
  224. package/src/themes/default/elements/list.variables +1 -1
  225. package/src/themes/default/elements/step.overrides +1 -1
  226. package/src/themes/default/globals/colors.less +7 -7
  227. package/src/themes/default/globals/site.variables +19 -9
  228. package/src/themes/default/globals/variation.variables +119 -6
  229. package/src/themes/default/modules/accordion.variables +15 -0
  230. package/src/themes/default/modules/checkbox.variables +16 -16
  231. package/src/themes/default/modules/dimmer.variables +1 -1
  232. package/src/themes/default/modules/dropdown.variables +12 -5
  233. package/src/themes/default/modules/modal.variables +2 -2
  234. package/src/themes/default/modules/nag.variables +3 -1
  235. package/src/themes/default/modules/toast.variables +5 -1
  236. package/src/themes/default/views/card.variables +1 -1
  237. package/src/themes/famfamfam/elements/flag.overrides +1026 -0
  238. package/src/themes/famfamfam/elements/flag.variables +13 -0
  239. package/tasks/admin/components/init.js +2 -2
  240. package/tasks/admin/distributions/init.js +2 -2
  241. package/tasks/build/css.js +6 -1
  242. package/tasks/config/project/release.js +2 -2
  243. package/tasks/config/tasks.js +13 -9
  244. package/test/helpers/sinon.js +1 -1
@@ -200,6 +200,7 @@ $.fn.dropdown = function(parameters) {
200
200
  select: function() {
201
201
  if(module.has.input() && selectObserver) {
202
202
  selectObserver.observe($module[0], {
203
+ attributes: true,
203
204
  childList : true,
204
205
  subtree : true
205
206
  });
@@ -297,7 +298,9 @@ $.fn.dropdown = function(parameters) {
297
298
  : module.get.query()
298
299
  ;
299
300
  module.verbose('Searching for query', query);
300
- if(module.has.minCharacters(query)) {
301
+ if(settings.fireOnInit === false && module.is.initialLoad()) {
302
+ module.verbose('Skipping callback on initial load', settings.onSearch);
303
+ } else if(module.has.minCharacters(query) && settings.onSearch.call(element, query) !== false) {
301
304
  module.filter(query);
302
305
  }
303
306
  else {
@@ -359,7 +362,7 @@ $.fn.dropdown = function(parameters) {
359
362
  if( !module.has.menu() ) {
360
363
  module.create.menu();
361
364
  }
362
- if ( module.is.selection() && module.is.clearable() && !module.has.clearItem() ) {
365
+ if ( module.is.clearable() && !module.has.clearItem() ) {
363
366
  module.verbose('Adding clear icon');
364
367
  $clear = $('<i />')
365
368
  .addClass('remove icon')
@@ -370,7 +373,7 @@ $.fn.dropdown = function(parameters) {
370
373
  module.verbose('Adding search input');
371
374
  $search = $('<input />')
372
375
  .addClass(className.search)
373
- .prop('autocomplete', 'off')
376
+ .prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off')
374
377
  .insertBefore($text)
375
378
  ;
376
379
  }
@@ -419,6 +422,9 @@ $.fn.dropdown = function(parameters) {
419
422
  module.debug('Disabling dropdown');
420
423
  $module.addClass(className.disabled);
421
424
  }
425
+ if($input.is('[required]')) {
426
+ settings.forceSelection = true;
427
+ }
422
428
  $input
423
429
  .removeAttr('required')
424
430
  .removeAttr('class')
@@ -558,7 +564,7 @@ $.fn.dropdown = function(parameters) {
558
564
  if(settings.onHide.call(element) !== false) {
559
565
  module.animate.hide(function() {
560
566
  module.remove.visible();
561
- // hidding search focus
567
+ // hiding search focus
562
568
  if ( module.is.focusedOnSearch() && preventBlur !== true ) {
563
569
  $search.blur();
564
570
  }
@@ -1283,8 +1289,8 @@ $.fn.dropdown = function(parameters) {
1283
1289
  },
1284
1290
  select: {
1285
1291
  mutation: function(mutations) {
1286
- module.debug('<select> modified, recreating menu');
1287
1292
  if(module.is.selectMutation(mutations)) {
1293
+ module.debug('<select> modified, recreating menu');
1288
1294
  module.disconnect.selectObserver();
1289
1295
  module.refresh();
1290
1296
  module.setup.select();
@@ -1867,7 +1873,7 @@ $.fn.dropdown = function(parameters) {
1867
1873
  return count;
1868
1874
  },
1869
1875
  transition: function($subMenu) {
1870
- return (settings.transition == 'auto')
1876
+ return (settings.transition === 'auto')
1871
1877
  ? module.is.upward($subMenu)
1872
1878
  ? 'slide up'
1873
1879
  : 'slide down'
@@ -2318,7 +2324,7 @@ $.fn.dropdown = function(parameters) {
2318
2324
  module.error(error.noStorage);
2319
2325
  return;
2320
2326
  }
2321
- name = sessionStorage.getItem(value);
2327
+ name = sessionStorage.getItem(value + elementNamespace);
2322
2328
  return (name !== undefined)
2323
2329
  ? name
2324
2330
  : false
@@ -2362,7 +2368,7 @@ $.fn.dropdown = function(parameters) {
2362
2368
  return;
2363
2369
  }
2364
2370
  module.verbose('Saving remote data to session storage', value, name);
2365
- sessionStorage.setItem(value, name);
2371
+ sessionStorage.setItem(value + elementNamespace, name);
2366
2372
  }
2367
2373
  },
2368
2374
 
@@ -3067,18 +3073,10 @@ $.fn.dropdown = function(parameters) {
3067
3073
  return;
3068
3074
  }
3069
3075
  // temporarily disconnect observer
3070
- if(selectObserver) {
3071
- selectObserver.disconnect();
3072
- module.verbose('Temporarily disconnecting mutation observer');
3073
- }
3076
+ module.disconnect.selectObserver();
3074
3077
  $option.remove();
3075
3078
  module.verbose('Removing user addition as an <option>', escapedValue);
3076
- if(selectObserver) {
3077
- selectObserver.observe($input[0], {
3078
- childList : true,
3079
- subtree : true
3080
- });
3081
- }
3079
+ module.observe.select();
3082
3080
  },
3083
3081
  message: function() {
3084
3082
  $menu.children(selector.message).remove();
@@ -3377,6 +3375,9 @@ $.fn.dropdown = function(parameters) {
3377
3375
  bubbledIconClick: function(event) {
3378
3376
  return $(event.target).closest($icon).length > 0;
3379
3377
  },
3378
+ chrome: function() {
3379
+ return !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
3380
+ },
3380
3381
  alreadySetup: function() {
3381
3382
  return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
3382
3383
  },
@@ -3440,7 +3441,7 @@ $.fn.dropdown = function(parameters) {
3440
3441
  selectChanged = false
3441
3442
  ;
3442
3443
  $.each(mutations, function(index, mutation) {
3443
- if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
3444
+ if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
3444
3445
  selectChanged = true;
3445
3446
  return false;
3446
3447
  }
@@ -3615,12 +3616,12 @@ $.fn.dropdown = function(parameters) {
3615
3616
  ;
3616
3617
  module.verbose('Doing menu show animation', $currentMenu);
3617
3618
  module.set.direction($subMenu);
3618
- transition = module.get.transition($subMenu);
3619
+ transition = settings.transition.showMethod || module.get.transition($subMenu);
3619
3620
  if( module.is.selection() ) {
3620
3621
  module.set.scrollPosition(module.get.selectedItem(), true);
3621
3622
  }
3622
3623
  if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {
3623
- if(transition == 'none') {
3624
+ if(transition === 'none') {
3624
3625
  start();
3625
3626
  $currentMenu.transition({
3626
3627
  displayType: module.get.displayType()
@@ -3633,7 +3634,7 @@ $.fn.dropdown = function(parameters) {
3633
3634
  animation : transition + ' in',
3634
3635
  debug : settings.debug,
3635
3636
  verbose : settings.verbose,
3636
- duration : settings.duration,
3637
+ duration : settings.transition.showDuration || settings.duration,
3637
3638
  queue : true,
3638
3639
  onStart : start,
3639
3640
  displayType: module.get.displayType(),
@@ -3659,7 +3660,7 @@ $.fn.dropdown = function(parameters) {
3659
3660
  }
3660
3661
  module.remove.active();
3661
3662
  },
3662
- transition = module.get.transition($subMenu)
3663
+ transition = settings.transition.hideMethod || module.get.transition($subMenu)
3663
3664
  ;
3664
3665
  callback = $.isFunction(callback)
3665
3666
  ? callback
@@ -3668,7 +3669,7 @@ $.fn.dropdown = function(parameters) {
3668
3669
  if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {
3669
3670
  module.verbose('Doing menu hide animation', $currentMenu);
3670
3671
 
3671
- if(transition == 'none') {
3672
+ if(transition === 'none') {
3672
3673
  start();
3673
3674
  $currentMenu.transition({
3674
3675
  displayType: module.get.displayType()
@@ -3679,7 +3680,7 @@ $.fn.dropdown = function(parameters) {
3679
3680
  $currentMenu
3680
3681
  .transition({
3681
3682
  animation : transition + ' out',
3682
- duration : settings.duration,
3683
+ duration : settings.transition.hideDuration || settings.duration,
3683
3684
  debug : settings.debug,
3684
3685
  verbose : settings.verbose,
3685
3686
  queue : false,
@@ -3985,7 +3986,7 @@ $.fn.dropdown.settings = {
3985
3986
  keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
3986
3987
 
3987
3988
  match : 'both', // what to match against with search selection (both, text, or label)
3988
- fullTextSearch : false, // search anywhere in value (set to 'exact' to require exact matches)
3989
+ fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
3989
3990
  ignoreDiacritics : false, // match results also if they contain diacritics of the same base character (for example searching for "a" will also match "á" or "â" or "à", etc...)
3990
3991
  hideDividers : false, // Whether to hide any divider elements (specified in selector.divider) that are sibling to any items when searched (set to true will hide all dividers, set to 'empty' will hide them when they are not followed by a visible item)
3991
3992
 
@@ -3993,7 +3994,7 @@ $.fn.dropdown.settings = {
3993
3994
  preserveHTML : true, // preserve html when selecting value
3994
3995
  sortSelect : false, // sort selection on init
3995
3996
 
3996
- forceSelection : true, // force a choice on blur with search selection
3997
+ forceSelection : false, // force a choice on blur with search selection
3997
3998
 
3998
3999
  allowAdditions : false, // whether multiple select should allow user added values
3999
4000
  ignoreCase : false, // whether to consider case sensitivity when creating labels
@@ -4004,7 +4005,7 @@ $.fn.dropdown.settings = {
4004
4005
  useLabels : true, // whether multiple select should filter currently active selections from choices
4005
4006
  delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
4006
4007
 
4007
- showOnFocus : true, // show menu on focus
4008
+ showOnFocus : false, // show menu on focus
4008
4009
  allowReselection : false, // whether current value should trigger callbacks when reselected
4009
4010
  allowTab : true, // add tabindex to element
4010
4011
  allowCategorySelection : false, // allow elements with sub-menus to be selected
@@ -4038,6 +4039,7 @@ $.fn.dropdown.settings = {
4038
4039
  onChange : function(value, text, $selected){},
4039
4040
  onAdd : function(value, text, $selected){},
4040
4041
  onRemove : function(value, text, $selected){},
4042
+ onSearch : function(searchTerm){},
4041
4043
 
4042
4044
  onLabelSelect : function($selectedLabels){},
4043
4045
  onLabelCreate : function(value, text) { return $(this); },
@@ -4085,19 +4087,21 @@ $.fn.dropdown.settings = {
4085
4087
 
4086
4088
  // property names for remote query
4087
4089
  fields: {
4088
- remoteValues : 'results', // grouping for api results
4089
- values : 'values', // grouping for all dropdown values
4090
- disabled : 'disabled', // whether value should be disabled
4091
- name : 'name', // displayed dropdown text
4092
- value : 'value', // actual dropdown value
4093
- text : 'text', // displayed text when selected
4094
- type : 'type', // type of dropdown element
4095
- image : 'image', // optional image path
4096
- imageClass : 'imageClass', // optional individual class for image
4097
- icon : 'icon', // optional icon name
4098
- iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
4099
- class : 'class', // optional individual class for item/header
4100
- divider : 'divider' // optional divider append for group headers
4090
+ remoteValues : 'results', // grouping for api results
4091
+ values : 'values', // grouping for all dropdown values
4092
+ disabled : 'disabled', // whether value should be disabled
4093
+ name : 'name', // displayed dropdown text
4094
+ description : 'description', // displayed dropdown description
4095
+ descriptionVertical : 'descriptionVertical', // whether description should be vertical
4096
+ value : 'value', // actual dropdown value
4097
+ text : 'text', // displayed text when selected
4098
+ type : 'type', // type of dropdown element
4099
+ image : 'image', // optional image path
4100
+ imageClass : 'imageClass', // optional individual class for image
4101
+ icon : 'icon', // optional icon name
4102
+ iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
4103
+ class : 'class', // optional individual class for item/header
4104
+ divider : 'divider' // optional divider append for group headers
4101
4105
  },
4102
4106
 
4103
4107
  keys : {
@@ -4136,37 +4140,40 @@ $.fn.dropdown.settings = {
4136
4140
  },
4137
4141
 
4138
4142
  className : {
4139
- active : 'active',
4140
- addition : 'addition',
4141
- animating : 'animating',
4142
- disabled : 'disabled',
4143
- empty : 'empty',
4144
- dropdown : 'ui dropdown',
4145
- filtered : 'filtered',
4146
- hidden : 'hidden transition',
4147
- icon : 'icon',
4148
- image : 'image',
4149
- item : 'item',
4150
- label : 'ui label',
4151
- loading : 'loading',
4152
- menu : 'menu',
4153
- message : 'message',
4154
- multiple : 'multiple',
4155
- placeholder : 'default',
4156
- sizer : 'sizer',
4157
- search : 'search',
4158
- selected : 'selected',
4159
- selection : 'selection',
4160
- upward : 'upward',
4161
- leftward : 'left',
4162
- visible : 'visible',
4163
- clearable : 'clearable',
4164
- noselection : 'noselection',
4165
- delete : 'delete',
4166
- header : 'header',
4167
- divider : 'divider',
4168
- groupIcon : '',
4169
- unfilterable : 'unfilterable'
4143
+ active : 'active',
4144
+ addition : 'addition',
4145
+ animating : 'animating',
4146
+ description : 'description',
4147
+ descriptionVertical : 'vertical',
4148
+ disabled : 'disabled',
4149
+ empty : 'empty',
4150
+ dropdown : 'ui dropdown',
4151
+ filtered : 'filtered',
4152
+ hidden : 'hidden transition',
4153
+ icon : 'icon',
4154
+ image : 'image',
4155
+ item : 'item',
4156
+ label : 'ui label',
4157
+ loading : 'loading',
4158
+ menu : 'menu',
4159
+ message : 'message',
4160
+ multiple : 'multiple',
4161
+ placeholder : 'default',
4162
+ sizer : 'sizer',
4163
+ search : 'search',
4164
+ selected : 'selected',
4165
+ selection : 'selection',
4166
+ text : 'text',
4167
+ upward : 'upward',
4168
+ leftward : 'left',
4169
+ visible : 'visible',
4170
+ clearable : 'clearable',
4171
+ noselection : 'noselection',
4172
+ delete : 'delete',
4173
+ header : 'header',
4174
+ divider : 'divider',
4175
+ groupIcon : '',
4176
+ unfilterable : 'unfilterable'
4170
4177
  }
4171
4178
 
4172
4179
  };
@@ -4232,26 +4239,49 @@ $.fn.dropdown.settings.templates = {
4232
4239
  var
4233
4240
  itemType = (option[fields.type])
4234
4241
  ? option[fields.type]
4235
- : 'item'
4242
+ : 'item',
4243
+ isMenu = itemType.indexOf('menu') !== -1
4236
4244
  ;
4237
4245
 
4238
- if( itemType === 'item' ) {
4246
+ if( itemType === 'item' || isMenu) {
4239
4247
  var
4240
4248
  maybeText = (option[fields.text])
4241
4249
  ? ' data-text="' + deQuote(option[fields.text],true) + '"'
4242
4250
  : '',
4243
4251
  maybeDisabled = (option[fields.disabled])
4244
4252
  ? className.disabled+' '
4245
- : ''
4253
+ : '',
4254
+ maybeDescriptionVertical = (option[fields.descriptionVertical])
4255
+ ? className.descriptionVertical+' '
4256
+ : '',
4257
+ hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
4246
4258
  ;
4247
- html += '<div class="'+ maybeDisabled + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4259
+ html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
4260
+ if (isMenu) {
4261
+ html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
4262
+ }
4248
4263
  if(option[fields.image]) {
4249
4264
  html += '<img class="'+(option[fields.imageClass] ? deQuote(option[fields.imageClass]) : className.image)+'" src="' + deQuote(option[fields.image]) + '">';
4250
4265
  }
4251
4266
  if(option[fields.icon]) {
4252
4267
  html += '<i class="'+deQuote(option[fields.icon])+' '+(option[fields.iconClass] ? deQuote(option[fields.iconClass]) : className.icon)+'"></i>';
4253
4268
  }
4269
+ if(hasDescription){
4270
+ html += '<span class="'+ className.description +'">'+ escape(option[fields.description] || '', preserveHTML) + '</span>';
4271
+ html += (!isMenu) ? '<span class="'+ className.text + '">' : '';
4272
+ }
4273
+ if (isMenu) {
4274
+ html += '<span class="' + className.text + '">';
4275
+ }
4254
4276
  html += escape(option[fields.name] || '', preserveHTML);
4277
+ if (isMenu) {
4278
+ html += '</span>';
4279
+ html += '<div class="' + itemType + '">';
4280
+ html += $.fn.dropdown.settings.templates.menu(option, fields, preserveHTML, className);
4281
+ html += '</div>';
4282
+ } else if(hasDescription){
4283
+ html += '</span>';
4284
+ }
4255
4285
  html += '</div>';
4256
4286
  } else if (itemType === 'header') {
4257
4287
  var groupName = escape(option[fields.name] || '', preserveHTML),