fomantic-ui 2.9.0-beta.3 → 2.9.0-beta.301
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.
- package/.all-contributorsrc +251 -3
- package/.github/codeql/codeql-config.yml +4 -0
- package/.github/dependabot.yml +10 -0
- package/.github/workflows/ci.yml +10 -6
- package/.github/workflows/codeql.yml +68 -0
- package/.github/workflows/nightly.yml +16 -8
- package/.github/workflows/release.yml +34 -0
- package/CONTRIBUTING.md +1 -1
- package/CONTRIBUTORS.md +82 -37
- package/FAQ.md +38 -38
- package/README.md +8 -8
- package/dist/components/accordion.css +176 -36
- package/dist/components/accordion.js +6 -3
- package/dist/components/accordion.min.css +2 -2
- package/dist/components/accordion.min.js +3 -3
- package/dist/components/ad.css +4 -4
- package/dist/components/ad.min.css +2 -2
- package/dist/components/api.js +90 -31
- package/dist/components/api.min.js +3 -3
- package/dist/components/breadcrumb.css +1 -1
- package/dist/components/breadcrumb.min.css +1 -1
- package/dist/components/button.css +204 -157
- package/dist/components/button.min.css +2 -2
- package/dist/components/calendar.css +18 -1
- package/dist/components/calendar.js +189 -76
- package/dist/components/calendar.min.css +2 -2
- package/dist/components/calendar.min.js +3 -3
- package/dist/components/card.css +754 -117
- package/dist/components/card.min.css +2 -2
- package/dist/components/checkbox.css +92 -91
- package/dist/components/checkbox.js +17 -11
- package/dist/components/checkbox.min.css +2 -2
- package/dist/components/checkbox.min.js +3 -3
- package/dist/components/comment.css +12 -12
- package/dist/components/comment.min.css +2 -2
- package/dist/components/container.css +98 -4
- package/dist/components/container.min.css +2 -2
- package/dist/components/dimmer.css +29 -14
- package/dist/components/dimmer.js +11 -5
- package/dist/components/dimmer.min.css +2 -2
- package/dist/components/dimmer.min.js +3 -3
- package/dist/components/divider.css +31 -31
- package/dist/components/divider.min.css +2 -2
- package/dist/components/dropdown.css +90 -50
- package/dist/components/dropdown.js +152 -117
- package/dist/components/dropdown.min.css +2 -2
- package/dist/components/dropdown.min.js +3 -3
- package/dist/components/embed.css +5 -5
- package/dist/components/embed.js +1 -1
- package/dist/components/embed.min.css +2 -2
- package/dist/components/embed.min.js +3 -3
- package/dist/components/emoji.css +10847 -8841
- package/dist/components/emoji.min.css +1 -1
- package/dist/components/feed.css +29 -29
- package/dist/components/feed.min.css +2 -2
- package/dist/components/flag.css +1011 -902
- package/dist/components/flag.min.css +2 -2
- package/dist/components/form.css +160 -83
- package/dist/components/form.js +39 -30
- package/dist/components/form.min.css +2 -2
- package/dist/components/form.min.js +3 -3
- package/dist/components/grid.css +25 -21
- package/dist/components/grid.min.css +2 -2
- package/dist/components/header.css +6 -4
- package/dist/components/header.min.css +2 -2
- package/dist/components/icon.css +2063 -1984
- package/dist/components/icon.min.css +2 -2
- package/dist/components/image.css +1 -1
- package/dist/components/image.min.css +1 -1
- package/dist/components/input.css +759 -22
- package/dist/components/input.min.css +2 -2
- package/dist/components/item.css +17 -17
- package/dist/components/item.min.css +2 -2
- package/dist/components/label.css +72 -68
- package/dist/components/label.min.css +2 -2
- package/dist/components/list.css +31 -31
- package/dist/components/list.min.css +2 -2
- package/dist/components/loader.css +352 -352
- package/dist/components/loader.min.css +2 -2
- package/dist/components/menu.css +110 -78
- package/dist/components/menu.min.css +1 -1
- package/dist/components/message.css +43 -43
- package/dist/components/message.min.css +2 -2
- package/dist/components/modal.css +29 -4
- package/dist/components/modal.js +128 -50
- package/dist/components/modal.min.css +2 -2
- package/dist/components/modal.min.js +3 -3
- package/dist/components/nag.css +1 -1
- package/dist/components/nag.js +2 -2
- package/dist/components/nag.min.css +1 -1
- package/dist/components/nag.min.js +3 -3
- package/dist/components/placeholder.css +33 -33
- package/dist/components/placeholder.min.css +2 -2
- package/dist/components/popup.css +103 -105
- package/dist/components/popup.js +11 -11
- package/dist/components/popup.min.css +2 -2
- package/dist/components/popup.min.js +3 -3
- package/dist/components/progress.css +1 -1
- package/dist/components/progress.js +6 -3
- package/dist/components/progress.min.css +1 -1
- package/dist/components/progress.min.js +3 -3
- package/dist/components/rail.css +1 -1
- package/dist/components/rail.min.css +1 -1
- package/dist/components/rating.css +7 -46
- package/dist/components/rating.js +1 -1
- package/dist/components/rating.min.css +2 -2
- package/dist/components/rating.min.js +3 -3
- package/dist/components/reset.css +5 -4
- package/dist/components/reset.min.css +2 -2
- package/dist/components/reveal.css +1 -1
- package/dist/components/reveal.min.css +1 -1
- package/dist/components/search.css +6 -6
- package/dist/components/search.js +23 -7
- package/dist/components/search.min.css +2 -2
- package/dist/components/search.min.js +3 -3
- package/dist/components/segment.css +118 -34
- package/dist/components/segment.min.css +2 -2
- package/dist/components/shape.css +1 -1
- package/dist/components/shape.js +3 -3
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +3 -3
- package/dist/components/sidebar.css +7 -5
- package/dist/components/sidebar.js +14 -12
- package/dist/components/sidebar.min.css +2 -2
- package/dist/components/sidebar.min.js +3 -3
- package/dist/components/site.css +139 -42
- package/dist/components/site.js +1 -1
- package/dist/components/site.min.css +2 -2
- package/dist/components/site.min.js +3 -3
- package/dist/components/slider.css +17 -17
- package/dist/components/slider.js +68 -51
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +3 -3
- package/dist/components/state.js +2 -2
- package/dist/components/state.min.js +3 -3
- package/dist/components/statistic.css +4 -4
- package/dist/components/statistic.min.css +2 -2
- package/dist/components/step.css +32 -32
- package/dist/components/step.min.css +2 -2
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +5 -5
- package/dist/components/sticky.min.css +1 -1
- package/dist/components/sticky.min.js +3 -3
- package/dist/components/tab.css +5 -5
- package/dist/components/tab.js +24 -6
- package/dist/components/tab.min.css +2 -2
- package/dist/components/tab.min.js +3 -3
- package/dist/components/table.css +1684 -272
- package/dist/components/table.min.css +2 -2
- package/dist/components/text.css +1 -1
- package/dist/components/text.min.css +1 -1
- package/dist/components/toast.css +48 -1
- package/dist/components/toast.js +63 -31
- package/dist/components/toast.min.css +2 -2
- package/dist/components/toast.min.js +3 -3
- package/dist/components/transition.css +1 -1
- package/dist/components/transition.js +22 -17
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +3 -3
- package/dist/components/visibility.js +3 -3
- package/dist/components/visibility.min.js +3 -3
- package/dist/semantic.css +20204 -13425
- package/dist/semantic.js +883 -481
- package/dist/semantic.min.css +3 -3
- package/dist/semantic.min.js +3 -3
- package/dist/themes/default/assets/fonts/Lato-Bold.woff +0 -0
- package/dist/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
- package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
- package/dist/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
- package/dist/themes/default/assets/fonts/Lato-Italic.woff +0 -0
- package/dist/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
- package/dist/themes/default/assets/fonts/Lato-Regular.woff +0 -0
- package/dist/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- package/dist/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
- package/dist/themes/default/assets/fonts/brand-icons.eot +0 -0
- package/dist/themes/default/assets/fonts/brand-icons.svg +801 -654
- package/dist/themes/default/assets/fonts/brand-icons.ttf +0 -0
- package/dist/themes/default/assets/fonts/brand-icons.woff +0 -0
- package/dist/themes/default/assets/fonts/brand-icons.woff2 +0 -0
- package/dist/themes/default/assets/fonts/icons.eot +0 -0
- package/dist/themes/default/assets/fonts/icons.svg +1175 -1079
- package/dist/themes/default/assets/fonts/icons.ttf +0 -0
- package/dist/themes/default/assets/fonts/icons.woff +0 -0
- package/dist/themes/default/assets/fonts/icons.woff2 +0 -0
- package/dist/themes/default/assets/fonts/outline-icons.eot +0 -0
- package/dist/themes/default/assets/fonts/outline-icons.svg +93 -95
- package/dist/themes/default/assets/fonts/outline-icons.ttf +0 -0
- package/dist/themes/default/assets/fonts/outline-icons.woff +0 -0
- package/dist/themes/default/assets/fonts/outline-icons.woff2 +0 -0
- package/dist/themes/{default → famfamfam}/assets/images/flags.png +0 -0
- package/examples/assets/library/iframe-content.js +11 -11
- package/examples/assets/library/iframe.js +6 -6
- package/examples/components/button.html +1 -1
- package/examples/components/card.html +1 -1
- package/examples/components/input.html +1 -1
- package/examples/components/menu.html +1 -1
- package/examples/components/site.html +1 -1
- package/examples/components/table.html +1 -1
- package/package.json +18 -16
- package/scripts/nightly-version.js +47 -38
- package/src/definitions/behaviors/api.js +89 -30
- package/src/definitions/behaviors/form.js +38 -29
- package/src/definitions/behaviors/state.js +1 -1
- package/src/definitions/behaviors/visibility.js +2 -2
- package/src/definitions/collections/form.less +229 -165
- package/src/definitions/collections/grid.less +723 -687
- package/src/definitions/collections/menu.less +233 -171
- package/src/definitions/collections/message.less +49 -47
- package/src/definitions/collections/table.less +882 -272
- package/src/definitions/elements/button.less +611 -469
- package/src/definitions/elements/container.less +145 -8
- package/src/definitions/elements/divider.less +24 -24
- package/src/definitions/elements/emoji.less +39 -10
- package/src/definitions/elements/flag.less +53 -18
- package/src/definitions/elements/header.less +46 -37
- package/src/definitions/elements/icon.less +39 -32
- package/src/definitions/elements/input.less +281 -33
- package/src/definitions/elements/label.less +132 -128
- package/src/definitions/elements/list.less +84 -75
- package/src/definitions/elements/loader.less +99 -98
- package/src/definitions/elements/placeholder.less +32 -32
- package/src/definitions/elements/segment.less +177 -56
- package/src/definitions/elements/step.less +76 -72
- package/src/definitions/elements/text.less +17 -15
- package/src/definitions/globals/reset.less +2 -2
- package/src/definitions/globals/site.less +25 -2
- package/src/definitions/modules/accordion.js +5 -2
- package/src/definitions/modules/accordion.less +371 -219
- package/src/definitions/modules/calendar.js +188 -75
- package/src/definitions/modules/calendar.less +20 -0
- package/src/definitions/modules/checkbox.js +16 -10
- package/src/definitions/modules/checkbox.less +83 -227
- package/src/definitions/modules/dimmer.js +10 -4
- package/src/definitions/modules/dimmer.less +22 -8
- package/src/definitions/modules/dropdown.js +151 -116
- package/src/definitions/modules/dropdown.less +191 -136
- package/src/definitions/modules/embed.less +4 -4
- package/src/definitions/modules/modal.js +127 -49
- package/src/definitions/modules/modal.less +66 -33
- package/src/definitions/modules/nag.js +1 -1
- package/src/definitions/modules/nag.less +20 -19
- package/src/definitions/modules/popup.js +10 -10
- package/src/definitions/modules/popup.less +90 -90
- package/src/definitions/modules/progress.js +5 -2
- package/src/definitions/modules/progress.less +19 -18
- package/src/definitions/modules/rating.less +49 -42
- package/src/definitions/modules/search.js +22 -6
- package/src/definitions/modules/search.less +35 -19
- package/src/definitions/modules/shape.js +2 -2
- package/src/definitions/modules/sidebar.js +13 -11
- package/src/definitions/modules/sidebar.less +36 -22
- package/src/definitions/modules/slider.js +67 -50
- package/src/definitions/modules/slider.less +48 -47
- package/src/definitions/modules/sticky.js +4 -4
- package/src/definitions/modules/sticky.less +3 -1
- package/src/definitions/modules/tab.js +23 -5
- package/src/definitions/modules/tab.less +4 -4
- package/src/definitions/modules/toast.js +62 -30
- package/src/definitions/modules/toast.less +56 -16
- package/src/definitions/modules/transition.js +21 -16
- package/src/definitions/views/ad.less +3 -3
- package/src/definitions/views/card.less +522 -375
- package/src/definitions/views/comment.less +93 -82
- package/src/definitions/views/feed.less +164 -144
- package/src/definitions/views/item.less +251 -198
- package/src/definitions/views/statistic.less +91 -89
- package/src/theme.less +13 -2
- package/src/themes/amazon/globals/site.variables +1 -0
- package/src/themes/basic/elements/icon.overrides +149 -149
- package/src/themes/basic/elements/step.overrides +2 -2
- package/src/themes/bookish/elements/header.overrides +1 -1
- package/src/themes/chubby/elements/button.overrides +1 -1
- package/src/themes/chubby/elements/header.overrides +1 -1
- package/src/themes/default/assets/fonts/Lato-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Bold.woff2 +0 -0
- package/src/themes/default/assets/fonts/Lato-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-BoldItalic.woff2 +0 -0
- package/src/themes/default/assets/fonts/Lato-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Italic.woff2 +0 -0
- package/src/themes/default/assets/fonts/Lato-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/Lato-Regular.woff2 +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Bold.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Bold.woff2 +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-BoldItalic.woff2 +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Italic.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Italic.woff2 +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Regular.woff +0 -0
- package/src/themes/default/assets/fonts/LatoLatin-Regular.woff2 +0 -0
- package/src/themes/default/assets/fonts/brand-icons.eot +0 -0
- package/src/themes/default/assets/fonts/brand-icons.svg +801 -654
- package/src/themes/default/assets/fonts/brand-icons.ttf +0 -0
- package/src/themes/default/assets/fonts/brand-icons.woff +0 -0
- package/src/themes/default/assets/fonts/brand-icons.woff2 +0 -0
- package/src/themes/default/assets/fonts/icons.eot +0 -0
- package/src/themes/default/assets/fonts/icons.svg +1175 -1079
- package/src/themes/default/assets/fonts/icons.ttf +0 -0
- package/src/themes/default/assets/fonts/icons.woff +0 -0
- package/src/themes/default/assets/fonts/icons.woff2 +0 -0
- package/src/themes/default/assets/fonts/outline-icons.eot +0 -0
- package/src/themes/default/assets/fonts/outline-icons.svg +93 -95
- package/src/themes/default/assets/fonts/outline-icons.ttf +0 -0
- package/src/themes/default/assets/fonts/outline-icons.woff +0 -0
- package/src/themes/default/assets/fonts/outline-icons.woff2 +0 -0
- package/src/themes/default/collections/form.variables +4 -0
- package/src/themes/default/collections/menu.variables +6 -0
- package/src/themes/default/collections/table.variables +52 -0
- package/src/themes/default/elements/button.variables +7 -1
- package/src/themes/default/elements/container.variables +12 -0
- package/src/themes/default/elements/divider.overrides +7 -7
- package/src/themes/default/elements/emoji.overrides +0 -3090
- package/src/themes/default/elements/emoji.variables +3575 -1
- package/src/themes/default/elements/flag.overrides +0 -991
- package/src/themes/default/elements/flag.variables +1609 -5
- package/src/themes/default/elements/icon.overrides +1975 -1949
- package/src/themes/default/elements/icon.variables +1 -0
- package/src/themes/default/elements/input.variables +15 -0
- package/src/themes/default/elements/segment.variables +8 -0
- package/src/themes/default/elements/step.overrides +4 -4
- package/src/themes/default/globals/site.variables +109 -8
- package/src/themes/default/globals/variation.variables +145 -6
- package/src/themes/default/modules/accordion.overrides +6 -5
- package/src/themes/default/modules/accordion.variables +49 -2
- package/src/themes/default/modules/calendar.variables +3 -0
- package/src/themes/default/modules/checkbox.overrides +9 -9
- package/src/themes/default/modules/checkbox.variables +5 -5
- package/src/themes/default/modules/dimmer.variables +1 -1
- package/src/themes/default/modules/dropdown.overrides +5 -5
- package/src/themes/default/modules/dropdown.variables +4 -10
- package/src/themes/default/modules/modal.variables +14 -0
- package/src/themes/default/modules/popup.variables +0 -2
- package/src/themes/default/modules/toast.variables +3 -0
- package/src/themes/default/views/card.variables +8 -0
- package/src/themes/{default → famfamfam}/assets/images/flags.png +0 -0
- package/src/themes/famfamfam/elements/flag.overrides +1026 -0
- package/src/themes/famfamfam/elements/flag.variables +20 -0
- package/src/themes/github/elements/icon.overrides +206 -206
- package/src/themes/github/elements/step.overrides +5 -5
- package/src/themes/github/globals/site.variables +1 -0
- package/src/themes/github/modules/dropdown.overrides +6 -6
- package/src/themes/instagram/views/card.overrides +1 -1
- package/src/themes/joypixels/elements/emoji.overrides +0 -3089
- package/src/themes/joypixels/elements/emoji.variables +3574 -5
- package/src/themes/material/collections/menu.overrides +1 -1
- package/src/themes/material/elements/button.overrides +1 -1
- package/src/themes/material/elements/header.overrides +1 -1
- package/src/themes/material/elements/icon.overrides +932 -932
- package/src/themes/material/globals/site.variables +0 -1
- package/src/themes/material/modules/dropdown.overrides +1 -1
- package/src/themes/material/modules/modal.overrides +1 -1
- package/src/themes/pulsar/elements/loader.overrides +2 -2
- package/src/themes/resetcss/globals/reset.overrides +3 -3
- package/src/themes/rtl/globals/site.overrides +1 -1
- package/src/themes/striped/modules/progress.overrides +1 -1
- package/src/themes/systemfont/globals/reset.overrides +8 -0
- package/src/themes/systemfont/globals/site.variables +10 -0
- package/src/themes/twitter/elements/emoji.overrides +0 -3091
- package/src/themes/twitter/elements/emoji.variables +3570 -6
- package/tasks/admin/components/init.js +2 -2
- package/tasks/admin/distributions/create.js +1 -1
- package/tasks/admin/distributions/init.js +2 -2
- package/tasks/admin/publish.js +1 -1
- package/tasks/admin/release.js +1 -1
- package/tasks/build/assets.js +1 -1
- package/tasks/build/css.js +9 -4
- package/tasks/build/javascript.js +3 -3
- package/tasks/check-install.js +1 -1
- package/tasks/clean.js +1 -1
- package/tasks/collections/README.md +1 -1
- package/tasks/collections/admin.js +1 -1
- package/tasks/config/admin/oauth.example.js +1 -1
- package/tasks/config/admin/templates/composer.json +1 -1
- package/tasks/config/project/install.js +15 -13
- package/tasks/install.js +1 -0
- package/tasks/rtl/watch.js +1 -1
- package/tasks/version.js +1 -1
- package/test/fixtures/accordion.html +1 -1
- package/test/fixtures/checkbox.html +1 -1
- package/test/fixtures/dropdown.html +1 -1
- package/test/fixtures/modal.html +1 -1
- package/test/fixtures/popup.html +1 -1
- package/test/fixtures/rating.html +1 -1
- package/test/fixtures/shape.html +1 -1
- package/test/fixtures/sidebar.html +1 -1
- package/test/fixtures/tab.html +1 -1
- package/test/fixtures/transition.html +1 -1
- package/test/fixtures/video.html +1 -1
- package/test/helpers/jasmine-jquery.js +2 -2
- package/test/helpers/jasmine-sinon.js +1 -1
- package/test/helpers/jquery-events.js +1 -1
- package/test/helpers/sinon.js +3 -3
- package/test/meteor/fonts.js +1 -1
- package/test/modules/accordion.spec.js +1 -1
- package/test/modules/checkbox.spec.js +1 -1
- package/test/modules/dropdown.spec.js +1 -1
- package/test/modules/modal.spec.js +1 -1
- package/test/modules/module.spec.js +1 -1
- package/test/modules/popup.spec.js +1 -1
- package/test/modules/search.spec.js +1 -1
- package/test/modules/shape.spec.js +1 -1
- package/test/modules/sidebar.spec.js +1 -1
- package/test/modules/tab.spec.js +1 -1
- package/test/modules/transition.spec.js +1 -1
- package/test/modules/video.spec.js +1 -1
@@ -1,5 +1,5 @@
|
|
1
1
|
/*!
|
2
|
-
* # Fomantic-UI 2.9.0-beta.
|
2
|
+
* # Fomantic-UI 2.9.0-beta.301+42e68bc - Dropdown
|
3
3
|
* http://github.com/fomantic/Fomantic-UI/
|
4
4
|
*
|
5
5
|
*
|
@@ -30,11 +30,6 @@ $.fn.dropdown = function(parameters) {
|
|
30
30
|
|
31
31
|
moduleSelector = $allModules.selector || '',
|
32
32
|
|
33
|
-
hasTouch = ('ontouchstart' in document.documentElement),
|
34
|
-
clickEvent = hasTouch
|
35
|
-
? 'touchstart'
|
36
|
-
: 'click',
|
37
|
-
|
38
33
|
time = new Date().getTime(),
|
39
34
|
performance = [],
|
40
35
|
|
@@ -66,7 +61,7 @@ $.fn.dropdown = function(parameters) {
|
|
66
61
|
moduleNamespace = 'module-' + namespace,
|
67
62
|
|
68
63
|
$module = $(this),
|
69
|
-
$context = $(settings.context),
|
64
|
+
$context = [window,document].indexOf(settings.context) < 0 ? $(document).find(settings.context) : $(settings.context),
|
70
65
|
$text = $module.find(selector.text),
|
71
66
|
$search = $module.find(selector.search),
|
72
67
|
$sizer = $module.find(selector.sizer),
|
@@ -200,6 +195,7 @@ $.fn.dropdown = function(parameters) {
|
|
200
195
|
select: function() {
|
201
196
|
if(module.has.input() && selectObserver) {
|
202
197
|
selectObserver.observe($module[0], {
|
198
|
+
attributes: true,
|
203
199
|
childList : true,
|
204
200
|
subtree : true
|
205
201
|
});
|
@@ -224,7 +220,7 @@ $.fn.dropdown = function(parameters) {
|
|
224
220
|
|
225
221
|
create: {
|
226
222
|
id: function() {
|
227
|
-
id = (Math.random().toString(16) + '000000000').
|
223
|
+
id = (Math.random().toString(16) + '000000000').slice(2, 10);
|
228
224
|
elementNamespace = '.' + id;
|
229
225
|
module.verbose('Creating unique id for element', id);
|
230
226
|
},
|
@@ -421,6 +417,9 @@ $.fn.dropdown = function(parameters) {
|
|
421
417
|
module.debug('Disabling dropdown');
|
422
418
|
$module.addClass(className.disabled);
|
423
419
|
}
|
420
|
+
if($input.is('[required]')) {
|
421
|
+
settings.forceSelection = true;
|
422
|
+
}
|
424
423
|
$input
|
425
424
|
.removeAttr('required')
|
426
425
|
.removeAttr('class')
|
@@ -537,9 +536,7 @@ $.fn.dropdown = function(parameters) {
|
|
537
536
|
}
|
538
537
|
if(settings.onShow.call(element) !== false) {
|
539
538
|
module.animate.show(function() {
|
540
|
-
|
541
|
-
module.bind.intent();
|
542
|
-
}
|
539
|
+
module.bind.intent();
|
543
540
|
if(module.has.search() && !preventFocus) {
|
544
541
|
module.focusSearch();
|
545
542
|
}
|
@@ -560,14 +557,23 @@ $.fn.dropdown = function(parameters) {
|
|
560
557
|
if(settings.onHide.call(element) !== false) {
|
561
558
|
module.animate.hide(function() {
|
562
559
|
module.remove.visible();
|
563
|
-
//
|
560
|
+
// hiding search focus
|
564
561
|
if ( module.is.focusedOnSearch() && preventBlur !== true ) {
|
565
562
|
$search.blur();
|
566
563
|
}
|
567
564
|
callback.call(element);
|
568
565
|
});
|
566
|
+
// Hide submenus explicitly. On some browsers (esp. mobile), they will not automatically receive a
|
567
|
+
// mouseleave event
|
568
|
+
var $subMenu = $module.find(selector.menu);
|
569
|
+
if($subMenu.length > 0) {
|
570
|
+
module.verbose('Hiding sub-menu', $subMenu);
|
571
|
+
$subMenu.each(function() {
|
572
|
+
module.animate.hide(false, $(this));
|
573
|
+
});
|
574
|
+
}
|
569
575
|
}
|
570
|
-
} else
|
576
|
+
} else {
|
571
577
|
module.unbind.intent();
|
572
578
|
}
|
573
579
|
iconClicked = false;
|
@@ -625,13 +631,18 @@ $.fn.dropdown = function(parameters) {
|
|
625
631
|
$module
|
626
632
|
.on('change' + eventNamespace, selector.input, module.event.change)
|
627
633
|
;
|
634
|
+
if(module.is.multiple() && module.is.searchSelection()) {
|
635
|
+
$module
|
636
|
+
.on('paste' + eventNamespace, selector.search, module.event.paste)
|
637
|
+
;
|
638
|
+
}
|
628
639
|
},
|
629
640
|
mouseEvents: function() {
|
630
641
|
module.verbose('Binding mouse events');
|
631
642
|
if(module.is.multiple()) {
|
632
643
|
$module
|
633
|
-
.on(
|
634
|
-
.on(
|
644
|
+
.on('click' + eventNamespace, selector.label, module.event.label.click)
|
645
|
+
.on('click' + eventNamespace, selector.remove, module.event.remove.click)
|
635
646
|
;
|
636
647
|
}
|
637
648
|
if( module.is.searchSelection() ) {
|
@@ -640,31 +651,33 @@ $.fn.dropdown = function(parameters) {
|
|
640
651
|
.on('mouseup' + eventNamespace, module.event.mouseup)
|
641
652
|
.on('mousedown' + eventNamespace, selector.menu, module.event.menu.mousedown)
|
642
653
|
.on('mouseup' + eventNamespace, selector.menu, module.event.menu.mouseup)
|
643
|
-
.on(
|
644
|
-
.on(
|
654
|
+
.on('click' + eventNamespace, selector.icon, module.event.icon.click)
|
655
|
+
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
|
645
656
|
.on('focus' + eventNamespace, selector.search, module.event.search.focus)
|
646
|
-
.on(
|
657
|
+
.on('click' + eventNamespace, selector.search, module.event.search.focus)
|
647
658
|
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
|
648
|
-
.on(
|
659
|
+
.on('click' + eventNamespace, selector.text, module.event.text.focus)
|
649
660
|
;
|
650
661
|
if(module.is.multiple()) {
|
651
662
|
$module
|
652
|
-
.on(
|
653
|
-
.on(
|
663
|
+
.on('click' + eventNamespace, module.event.click)
|
664
|
+
.on('click' + eventNamespace, module.event.search.focus)
|
654
665
|
;
|
655
666
|
}
|
656
667
|
}
|
657
668
|
else {
|
658
669
|
if(settings.on == 'click') {
|
659
670
|
$module
|
660
|
-
.on(
|
661
|
-
.on(
|
671
|
+
.on('click' + eventNamespace, selector.icon, module.event.icon.click)
|
672
|
+
.on('click' + eventNamespace, module.event.test.toggle)
|
662
673
|
;
|
663
674
|
}
|
664
675
|
else if(settings.on == 'hover') {
|
665
676
|
$module
|
666
677
|
.on('mouseenter' + eventNamespace, module.delay.show)
|
667
678
|
.on('mouseleave' + eventNamespace, module.delay.hide)
|
679
|
+
.on('touchstart' + eventNamespace, module.event.test.toggle)
|
680
|
+
.on('touchstart' + eventNamespace, selector.icon, module.event.icon.click)
|
668
681
|
;
|
669
682
|
}
|
670
683
|
else {
|
@@ -676,7 +689,7 @@ $.fn.dropdown = function(parameters) {
|
|
676
689
|
.on('mousedown' + eventNamespace, module.event.mousedown)
|
677
690
|
.on('mouseup' + eventNamespace, module.event.mouseup)
|
678
691
|
.on('focus' + eventNamespace, module.event.focus)
|
679
|
-
.on(
|
692
|
+
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
|
680
693
|
;
|
681
694
|
if(module.has.menuSearch() ) {
|
682
695
|
$module
|
@@ -690,21 +703,16 @@ $.fn.dropdown = function(parameters) {
|
|
690
703
|
}
|
691
704
|
}
|
692
705
|
$menu
|
693
|
-
.on(
|
706
|
+
.on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
|
707
|
+
.on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
|
694
708
|
.on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
|
695
709
|
.on('click' + eventNamespace, selector.item, module.event.item.click)
|
696
710
|
;
|
697
711
|
},
|
698
712
|
intent: function() {
|
699
713
|
module.verbose('Binding hide intent event to document');
|
700
|
-
if(hasTouch) {
|
701
|
-
$document
|
702
|
-
.on('touchstart' + elementNamespace, module.event.test.touch)
|
703
|
-
.on('touchmove' + elementNamespace, module.event.test.touch)
|
704
|
-
;
|
705
|
-
}
|
706
714
|
$document
|
707
|
-
.on(
|
715
|
+
.on('click' + elementNamespace, module.event.test.hide)
|
708
716
|
;
|
709
717
|
}
|
710
718
|
},
|
@@ -712,14 +720,8 @@ $.fn.dropdown = function(parameters) {
|
|
712
720
|
unbind: {
|
713
721
|
intent: function() {
|
714
722
|
module.verbose('Removing hide intent event from document');
|
715
|
-
if(hasTouch) {
|
716
|
-
$document
|
717
|
-
.off('touchstart' + elementNamespace)
|
718
|
-
.off('touchmove' + elementNamespace)
|
719
|
-
;
|
720
|
-
}
|
721
723
|
$document
|
722
|
-
.off(
|
724
|
+
.off('click' + elementNamespace)
|
723
725
|
;
|
724
726
|
}
|
725
727
|
},
|
@@ -812,20 +814,28 @@ $.fn.dropdown = function(parameters) {
|
|
812
814
|
throttle : settings.throttle,
|
813
815
|
urlData : {
|
814
816
|
query: query
|
815
|
-
}
|
816
|
-
|
817
|
+
}
|
818
|
+
},
|
819
|
+
apiCallbacks = {
|
820
|
+
onError: function(errorMessage, $module, xhr) {
|
817
821
|
module.add.message(message.serverError);
|
818
822
|
iconClicked = false;
|
819
823
|
focused = false;
|
820
824
|
callback.apply(null, callbackParameters);
|
825
|
+
if(typeof settings.apiSettings.onError === 'function') {
|
826
|
+
settings.apiSettings.onError.call(this, errorMessage, $module, xhr);
|
827
|
+
}
|
821
828
|
},
|
822
|
-
onFailure: function() {
|
829
|
+
onFailure: function(response, $module, xhr) {
|
823
830
|
module.add.message(message.serverError);
|
824
831
|
iconClicked = false;
|
825
832
|
focused = false;
|
826
833
|
callback.apply(null, callbackParameters);
|
834
|
+
if(typeof settings.apiSettings.onFailure === 'function') {
|
835
|
+
settings.apiSettings.onFailure.call(this, response, $module, xhr);
|
836
|
+
}
|
827
837
|
},
|
828
|
-
onSuccess : function(response) {
|
838
|
+
onSuccess : function(response, $module, xhr) {
|
829
839
|
var
|
830
840
|
values = response[fields.remoteValues]
|
831
841
|
;
|
@@ -844,19 +854,22 @@ $.fn.dropdown = function(parameters) {
|
|
844
854
|
var value = module.is.multiple() ? module.get.values() : module.get.value();
|
845
855
|
if (value !== '') {
|
846
856
|
module.verbose('Value(s) present after click icon, select value(s) in items');
|
847
|
-
module.set.selected(value, null,
|
857
|
+
module.set.selected(value, null, true, true);
|
848
858
|
}
|
849
859
|
}
|
850
860
|
iconClicked = false;
|
851
861
|
focused = false;
|
852
862
|
callback.apply(null, callbackParameters);
|
863
|
+
if(typeof settings.apiSettings.onSuccess === 'function') {
|
864
|
+
settings.apiSettings.onSuccess.call(this, response, $module, xhr);
|
865
|
+
}
|
853
866
|
}
|
854
867
|
}
|
855
868
|
;
|
856
869
|
if( !$module.api('get request') ) {
|
857
870
|
module.setup.api();
|
858
871
|
}
|
859
|
-
apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);
|
872
|
+
apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings, apiCallbacks);
|
860
873
|
$module
|
861
874
|
.api('setting', apiSettings)
|
862
875
|
.api('query')
|
@@ -1044,7 +1057,7 @@ $.fn.dropdown = function(parameters) {
|
|
1044
1057
|
menuConfig[fields.values] = values;
|
1045
1058
|
module.setup.menu(menuConfig);
|
1046
1059
|
$.each(values, function(index, item) {
|
1047
|
-
if(item.selected
|
1060
|
+
if(item.selected === true) {
|
1048
1061
|
module.debug('Setting initial selection to', item[fields.value]);
|
1049
1062
|
module.set.selected(item[fields.value]);
|
1050
1063
|
if(!module.is.multiple()) {
|
@@ -1065,7 +1078,7 @@ $.fn.dropdown = function(parameters) {
|
|
1065
1078
|
settings.preserveHTML
|
1066
1079
|
)
|
1067
1080
|
;
|
1068
|
-
$input.append('<option value="' + value + '">' + name + '</option>');
|
1081
|
+
$input.append('<option value="' + value + '"' + (item.selected === true ? ' selected' : '') + '>' + name + '</option>');
|
1069
1082
|
});
|
1070
1083
|
module.observe.select();
|
1071
1084
|
}
|
@@ -1073,6 +1086,15 @@ $.fn.dropdown = function(parameters) {
|
|
1073
1086
|
},
|
1074
1087
|
|
1075
1088
|
event: {
|
1089
|
+
paste: function(event) {
|
1090
|
+
var pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
|
1091
|
+
tokens = pasteValue.split(settings.delimiter)
|
1092
|
+
;
|
1093
|
+
tokens.forEach(function(value){
|
1094
|
+
module.set.selected(module.escape.htmlEntities(value.trim()), null, true, true);
|
1095
|
+
});
|
1096
|
+
event.preventDefault();
|
1097
|
+
},
|
1076
1098
|
change: function() {
|
1077
1099
|
if(!internalChange) {
|
1078
1100
|
module.debug('Input changed, updating selection');
|
@@ -1131,7 +1153,7 @@ $.fn.dropdown = function(parameters) {
|
|
1131
1153
|
if(module.is.multiple()) {
|
1132
1154
|
module.remove.activeLabel();
|
1133
1155
|
}
|
1134
|
-
if(!focused && !module.is.active() && (settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin'))) {
|
1156
|
+
if(!focused && !module.is.active() && (settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin')) && event.type !== 'touchstart') {
|
1135
1157
|
focused = true;
|
1136
1158
|
module.search();
|
1137
1159
|
}
|
@@ -1249,23 +1271,12 @@ $.fn.dropdown = function(parameters) {
|
|
1249
1271
|
if (!module.is.multiple() || (module.is.multiple() && !module.is.active())) {
|
1250
1272
|
focused = true;
|
1251
1273
|
}
|
1252
|
-
if( module.determine.eventOnElement(event, toggleBehavior) ) {
|
1274
|
+
if( module.determine.eventOnElement(event, toggleBehavior) && event.type !== 'touchstart') {
|
1275
|
+
// do not preventDefault of touchstart; so emulated mouseenter is triggered on first touch and not later
|
1276
|
+
// (when selecting an item). The double-showing of the dropdown through both events does not hurt.
|
1253
1277
|
event.preventDefault();
|
1254
1278
|
}
|
1255
1279
|
},
|
1256
|
-
touch: function(event) {
|
1257
|
-
module.determine.eventOnElement(event, function() {
|
1258
|
-
if(event.type == 'touchstart') {
|
1259
|
-
module.timer = setTimeout(function() {
|
1260
|
-
module.hide();
|
1261
|
-
}, settings.delay.touch);
|
1262
|
-
}
|
1263
|
-
else if(event.type == 'touchmove') {
|
1264
|
-
clearTimeout(module.timer);
|
1265
|
-
}
|
1266
|
-
});
|
1267
|
-
event.stopPropagation();
|
1268
|
-
},
|
1269
1280
|
hide: function(event) {
|
1270
1281
|
if(module.determine.eventInModule(event, module.hide)){
|
1271
1282
|
if(element.id && $(event.target).attr('for') === element.id){
|
@@ -1285,8 +1296,8 @@ $.fn.dropdown = function(parameters) {
|
|
1285
1296
|
},
|
1286
1297
|
select: {
|
1287
1298
|
mutation: function(mutations) {
|
1288
|
-
module.debug('<select> modified, recreating menu');
|
1289
1299
|
if(module.is.selectMutation(mutations)) {
|
1300
|
+
module.debug('<select> modified, recreating menu');
|
1290
1301
|
module.disconnect.selectObserver();
|
1291
1302
|
module.refresh();
|
1292
1303
|
module.setup.select();
|
@@ -1349,13 +1360,15 @@ $.fn.dropdown = function(parameters) {
|
|
1349
1360
|
},
|
1350
1361
|
mouseleave: function(event) {
|
1351
1362
|
var
|
1352
|
-
$subMenu = $(this).
|
1363
|
+
$subMenu = $(this).find(selector.menu)
|
1353
1364
|
;
|
1354
1365
|
if($subMenu.length > 0) {
|
1355
1366
|
clearTimeout(module.itemTimer);
|
1356
1367
|
module.itemTimer = setTimeout(function() {
|
1357
1368
|
module.verbose('Hiding sub-menu', $subMenu);
|
1358
|
-
|
1369
|
+
$subMenu.each(function() {
|
1370
|
+
module.animate.hide(false, $(this));
|
1371
|
+
});
|
1359
1372
|
}, settings.delay.hide);
|
1360
1373
|
}
|
1361
1374
|
},
|
@@ -1381,7 +1394,7 @@ $.fn.dropdown = function(parameters) {
|
|
1381
1394
|
module.remove.userAddition();
|
1382
1395
|
}
|
1383
1396
|
module.remove.searchTerm();
|
1384
|
-
if(!module.is.focusedOnSearch() &&
|
1397
|
+
if(!module.is.focusedOnSearch() && skipRefocus !== true) {
|
1385
1398
|
module.focusSearch(true);
|
1386
1399
|
}
|
1387
1400
|
}
|
@@ -1513,7 +1526,7 @@ $.fn.dropdown = function(parameters) {
|
|
1513
1526
|
keydown: function(event) {
|
1514
1527
|
var
|
1515
1528
|
pressedKey = event.which,
|
1516
|
-
isShortcutKey = module.is.inObject(pressedKey, keys)
|
1529
|
+
isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
|
1517
1530
|
;
|
1518
1531
|
if(isShortcutKey) {
|
1519
1532
|
var
|
@@ -1531,7 +1544,7 @@ $.fn.dropdown = function(parameters) {
|
|
1531
1544
|
hasSubMenu = ($subMenu.length> 0),
|
1532
1545
|
hasSelectedItem = ($selectedItem.length > 0),
|
1533
1546
|
selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
|
1534
|
-
delimiterPressed = (
|
1547
|
+
delimiterPressed = (event.key === settings.delimiter && module.is.multiple()),
|
1535
1548
|
isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
|
1536
1549
|
$nextItem,
|
1537
1550
|
isSubMenuItem,
|
@@ -1629,7 +1642,7 @@ $.fn.dropdown = function(parameters) {
|
|
1629
1642
|
.addClass(className.selected)
|
1630
1643
|
;
|
1631
1644
|
module.set.scrollPosition($nextItem);
|
1632
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
1645
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1633
1646
|
module.set.selectedItem($nextItem);
|
1634
1647
|
}
|
1635
1648
|
}
|
@@ -1656,7 +1669,7 @@ $.fn.dropdown = function(parameters) {
|
|
1656
1669
|
.addClass(className.selected)
|
1657
1670
|
;
|
1658
1671
|
module.set.scrollPosition($nextItem);
|
1659
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
1672
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1660
1673
|
module.set.selectedItem($nextItem);
|
1661
1674
|
}
|
1662
1675
|
}
|
@@ -1787,7 +1800,7 @@ $.fn.dropdown = function(parameters) {
|
|
1787
1800
|
;
|
1788
1801
|
if( module.can.activate( $(element) ) ) {
|
1789
1802
|
module.set.selected(value, $(element));
|
1790
|
-
if(!module.is.multiple()) {
|
1803
|
+
if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
|
1791
1804
|
module.hideAndClear();
|
1792
1805
|
}
|
1793
1806
|
}
|
@@ -1800,7 +1813,7 @@ $.fn.dropdown = function(parameters) {
|
|
1800
1813
|
;
|
1801
1814
|
if( module.can.activate( $(element) ) ) {
|
1802
1815
|
module.set.value(value, text, $(element));
|
1803
|
-
if(!module.is.multiple()) {
|
1816
|
+
if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
|
1804
1817
|
module.hideAndClear();
|
1805
1818
|
}
|
1806
1819
|
}
|
@@ -1851,7 +1864,7 @@ $.fn.dropdown = function(parameters) {
|
|
1851
1864
|
;
|
1852
1865
|
$sizer.text(value);
|
1853
1866
|
// prevent rounding issues
|
1854
|
-
return Math.ceil( $sizer.width() + 1);
|
1867
|
+
return Math.ceil( $sizer.width() + (module.is.edge() ? 3 : 1));
|
1855
1868
|
},
|
1856
1869
|
selectionCount: function() {
|
1857
1870
|
var
|
@@ -2320,7 +2333,7 @@ $.fn.dropdown = function(parameters) {
|
|
2320
2333
|
module.error(error.noStorage);
|
2321
2334
|
return;
|
2322
2335
|
}
|
2323
|
-
name = sessionStorage.getItem(value);
|
2336
|
+
name = sessionStorage.getItem(value + elementNamespace);
|
2324
2337
|
return (name !== undefined)
|
2325
2338
|
? name
|
2326
2339
|
: false
|
@@ -2364,7 +2377,7 @@ $.fn.dropdown = function(parameters) {
|
|
2364
2377
|
return;
|
2365
2378
|
}
|
2366
2379
|
module.verbose('Saving remote data to session storage', value, name);
|
2367
|
-
sessionStorage.setItem(value, name);
|
2380
|
+
sessionStorage.setItem(value + elementNamespace, name);
|
2368
2381
|
}
|
2369
2382
|
},
|
2370
2383
|
|
@@ -2424,7 +2437,7 @@ $.fn.dropdown = function(parameters) {
|
|
2424
2437
|
$nextSelectedItem
|
2425
2438
|
.addClass(className.selected)
|
2426
2439
|
;
|
2427
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
2440
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
2428
2441
|
module.set.selectedItem($nextSelectedItem);
|
2429
2442
|
}
|
2430
2443
|
$menu
|
@@ -2510,7 +2523,7 @@ $.fn.dropdown = function(parameters) {
|
|
2510
2523
|
var
|
2511
2524
|
length = module.get.query().length
|
2512
2525
|
;
|
2513
|
-
$search.val( text.
|
2526
|
+
$search.val( text.slice(0, length));
|
2514
2527
|
},
|
2515
2528
|
scrollPosition: function($item, forceScroll) {
|
2516
2529
|
var
|
@@ -2627,13 +2640,13 @@ $.fn.dropdown = function(parameters) {
|
|
2627
2640
|
module.set.scrollPosition($nextValue);
|
2628
2641
|
$selectedItem.removeClass(className.selected);
|
2629
2642
|
$nextValue.addClass(className.selected);
|
2630
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
2643
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
2631
2644
|
module.set.selectedItem($nextValue);
|
2632
2645
|
}
|
2633
2646
|
}
|
2634
2647
|
},
|
2635
2648
|
direction: function($menu) {
|
2636
|
-
if(settings.direction
|
2649
|
+
if(settings.direction === 'auto') {
|
2637
2650
|
// reset position, remove upward if it's base menu
|
2638
2651
|
if (!$menu) {
|
2639
2652
|
module.remove.upward();
|
@@ -2652,7 +2665,7 @@ $.fn.dropdown = function(parameters) {
|
|
2652
2665
|
module.set.leftward($menu);
|
2653
2666
|
}
|
2654
2667
|
}
|
2655
|
-
else if(settings.direction
|
2668
|
+
else if(settings.direction === 'upward') {
|
2656
2669
|
module.set.upward($menu);
|
2657
2670
|
}
|
2658
2671
|
},
|
@@ -2665,6 +2678,11 @@ $.fn.dropdown = function(parameters) {
|
|
2665
2678
|
$element.addClass(className.leftward);
|
2666
2679
|
},
|
2667
2680
|
value: function(value, text, $selected, preventChangeTrigger) {
|
2681
|
+
if(typeof text === 'boolean') {
|
2682
|
+
preventChangeTrigger = text;
|
2683
|
+
$selected = undefined;
|
2684
|
+
text = undefined;
|
2685
|
+
}
|
2668
2686
|
if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {
|
2669
2687
|
$input.removeClass(className.noselection);
|
2670
2688
|
} else {
|
@@ -2728,12 +2746,21 @@ $.fn.dropdown = function(parameters) {
|
|
2728
2746
|
visible: function() {
|
2729
2747
|
$module.addClass(className.visible);
|
2730
2748
|
},
|
2731
|
-
exactly: function(value, $selectedItem) {
|
2749
|
+
exactly: function(value, $selectedItem, preventChangeTrigger) {
|
2750
|
+
if(typeof $selectedItem === 'boolean') {
|
2751
|
+
preventChangeTrigger = $selectedItem;
|
2752
|
+
$selectedItem = undefined;
|
2753
|
+
}
|
2732
2754
|
module.debug('Setting selected to exact values');
|
2733
2755
|
module.clear();
|
2734
|
-
module.set.selected(value, $selectedItem);
|
2756
|
+
module.set.selected(value, $selectedItem, preventChangeTrigger);
|
2735
2757
|
},
|
2736
2758
|
selected: function(value, $selectedItem, preventChangeTrigger, keepSearchTerm) {
|
2759
|
+
if(typeof $selectedItem === 'boolean') {
|
2760
|
+
keepSearchTerm = preventChangeTrigger;
|
2761
|
+
preventChangeTrigger = $selectedItem;
|
2762
|
+
$selectedItem = undefined;
|
2763
|
+
}
|
2737
2764
|
var
|
2738
2765
|
isMultiple = module.is.multiple()
|
2739
2766
|
;
|
@@ -2765,23 +2792,30 @@ $.fn.dropdown = function(parameters) {
|
|
2765
2792
|
|
2766
2793
|
isFiltered = $selected.hasClass(className.filtered),
|
2767
2794
|
isActive = $selected.hasClass(className.active),
|
2795
|
+
isActionable = $selected.hasClass(className.actionable),
|
2768
2796
|
isUserValue = $selected.hasClass(className.addition),
|
2769
|
-
shouldAnimate = (isMultiple && $selectedItem.length
|
2797
|
+
shouldAnimate = (isMultiple && $selectedItem && $selectedItem.length === 1)
|
2770
2798
|
;
|
2771
|
-
if(
|
2799
|
+
if(isActionable){
|
2800
|
+
if((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
|
2801
|
+
module.save.remoteData(selectedText, selectedValue);
|
2802
|
+
}
|
2803
|
+
settings.onActionable.call(element, selectedValue, selectedText, $selected);
|
2804
|
+
}
|
2805
|
+
else if(isMultiple) {
|
2772
2806
|
if(!isActive || isUserValue) {
|
2773
2807
|
if(settings.apiSettings && settings.saveRemoteData) {
|
2774
2808
|
module.save.remoteData(selectedText, selectedValue);
|
2775
2809
|
}
|
2776
2810
|
if(settings.useLabels) {
|
2811
|
+
module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2777
2812
|
module.add.label(selectedValue, selectedText, shouldAnimate);
|
2778
|
-
module.add.value(selectedValue, selectedText, $selected);
|
2779
2813
|
module.set.activeItem($selected);
|
2780
2814
|
module.filterActive();
|
2781
2815
|
module.select.nextAvailable($selectedItem);
|
2782
2816
|
}
|
2783
2817
|
else {
|
2784
|
-
module.add.value(selectedValue, selectedText, $selected);
|
2818
|
+
module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2785
2819
|
module.set.text(module.add.variables(message.count));
|
2786
2820
|
module.set.activeItem($selected);
|
2787
2821
|
}
|
@@ -2795,7 +2829,7 @@ $.fn.dropdown = function(parameters) {
|
|
2795
2829
|
if(settings.apiSettings && settings.saveRemoteData) {
|
2796
2830
|
module.save.remoteData(selectedText, selectedValue);
|
2797
2831
|
}
|
2798
|
-
if (!keepSearchTerm) {
|
2832
|
+
if (!keepSearchTerm && !$selected.hasClass(className.actionable)) {
|
2799
2833
|
module.set.text(selectedText);
|
2800
2834
|
}
|
2801
2835
|
module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
@@ -2894,7 +2928,7 @@ $.fn.dropdown = function(parameters) {
|
|
2894
2928
|
$('<option/>')
|
2895
2929
|
.prop('value', escapedValue)
|
2896
2930
|
.addClass(className.addition)
|
2897
|
-
.
|
2931
|
+
.text(value)
|
2898
2932
|
.appendTo($input)
|
2899
2933
|
;
|
2900
2934
|
module.verbose('Adding user addition as an <option>', value);
|
@@ -2970,7 +3004,12 @@ $.fn.dropdown = function(parameters) {
|
|
2970
3004
|
}
|
2971
3005
|
return message;
|
2972
3006
|
},
|
2973
|
-
value: function(addedValue, addedText, $selectedItem) {
|
3007
|
+
value: function(addedValue, addedText, $selectedItem, preventChangeTrigger) {
|
3008
|
+
if(typeof addedText === 'boolean') {
|
3009
|
+
preventChangeTrigger = addedText;
|
3010
|
+
$selectedItem = undefined;
|
3011
|
+
addedText = undefined;
|
3012
|
+
}
|
2974
3013
|
var
|
2975
3014
|
currentValue = module.get.values(true),
|
2976
3015
|
newValue
|
@@ -2985,7 +3024,7 @@ $.fn.dropdown = function(parameters) {
|
|
2985
3024
|
}
|
2986
3025
|
// extend current array
|
2987
3026
|
if(Array.isArray(currentValue)) {
|
2988
|
-
newValue = currentValue.concat([addedValue]);
|
3027
|
+
newValue = $selectedItem && $selectedItem.hasClass(className.actionable) ? currentValue : currentValue.concat([addedValue]);
|
2989
3028
|
newValue = module.get.uniqueArray(newValue);
|
2990
3029
|
}
|
2991
3030
|
else {
|
@@ -3009,7 +3048,7 @@ $.fn.dropdown = function(parameters) {
|
|
3009
3048
|
else {
|
3010
3049
|
settings.onAdd.call(element, addedValue, addedText, $selectedItem);
|
3011
3050
|
}
|
3012
|
-
module.set.value(newValue, addedText, $selectedItem);
|
3051
|
+
module.set.value(newValue, addedText, $selectedItem, preventChangeTrigger);
|
3013
3052
|
module.check.maxSelections();
|
3014
3053
|
},
|
3015
3054
|
},
|
@@ -3069,18 +3108,10 @@ $.fn.dropdown = function(parameters) {
|
|
3069
3108
|
return;
|
3070
3109
|
}
|
3071
3110
|
// temporarily disconnect observer
|
3072
|
-
|
3073
|
-
selectObserver.disconnect();
|
3074
|
-
module.verbose('Temporarily disconnecting mutation observer');
|
3075
|
-
}
|
3111
|
+
module.disconnect.selectObserver();
|
3076
3112
|
$option.remove();
|
3077
3113
|
module.verbose('Removing user addition as an <option>', escapedValue);
|
3078
|
-
|
3079
|
-
selectObserver.observe($input[0], {
|
3080
|
-
childList : true,
|
3081
|
-
subtree : true
|
3082
|
-
});
|
3083
|
-
}
|
3114
|
+
module.observe.select();
|
3084
3115
|
},
|
3085
3116
|
message: function() {
|
3086
3117
|
$menu.children(selector.message).remove();
|
@@ -3379,8 +3410,11 @@ $.fn.dropdown = function(parameters) {
|
|
3379
3410
|
bubbledIconClick: function(event) {
|
3380
3411
|
return $(event.target).closest($icon).length > 0;
|
3381
3412
|
},
|
3413
|
+
edge: function() {
|
3414
|
+
return !!window.chrome && !!window.StyleMedia;
|
3415
|
+
},
|
3382
3416
|
chrome: function() {
|
3383
|
-
return !!window.chrome &&
|
3417
|
+
return !!window.chrome && !window.StyleMedia;
|
3384
3418
|
},
|
3385
3419
|
alreadySetup: function() {
|
3386
3420
|
return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
|
@@ -3445,7 +3479,7 @@ $.fn.dropdown = function(parameters) {
|
|
3445
3479
|
selectChanged = false
|
3446
3480
|
;
|
3447
3481
|
$.each(mutations, function(index, mutation) {
|
3448
|
-
if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
|
3482
|
+
if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
|
3449
3483
|
selectChanged = true;
|
3450
3484
|
return false;
|
3451
3485
|
}
|
@@ -3587,9 +3621,6 @@ $.fn.dropdown = function(parameters) {
|
|
3587
3621
|
$currentMenu.removeClass(className.loading);
|
3588
3622
|
return canOpenRightward;
|
3589
3623
|
},
|
3590
|
-
click: function() {
|
3591
|
-
return (hasTouch || settings.on == 'click');
|
3592
|
-
},
|
3593
3624
|
extendSelect: function() {
|
3594
3625
|
return settings.allowAdditions || settings.apiSettings;
|
3595
3626
|
},
|
@@ -3659,9 +3690,7 @@ $.fn.dropdown = function(parameters) {
|
|
3659
3690
|
start = ($subMenu)
|
3660
3691
|
? function() {}
|
3661
3692
|
: function() {
|
3662
|
-
|
3663
|
-
module.unbind.intent();
|
3664
|
-
}
|
3693
|
+
module.unbind.intent();
|
3665
3694
|
module.remove.active();
|
3666
3695
|
},
|
3667
3696
|
transition = settings.transition.hideMethod || module.get.transition($subMenu)
|
@@ -3990,7 +4019,7 @@ $.fn.dropdown.settings = {
|
|
3990
4019
|
keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
|
3991
4020
|
|
3992
4021
|
match : 'both', // what to match against with search selection (both, text, or label)
|
3993
|
-
fullTextSearch :
|
4022
|
+
fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
|
3994
4023
|
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...)
|
3995
4024
|
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)
|
3996
4025
|
|
@@ -3998,7 +4027,7 @@ $.fn.dropdown.settings = {
|
|
3998
4027
|
preserveHTML : true, // preserve html when selecting value
|
3999
4028
|
sortSelect : false, // sort selection on init
|
4000
4029
|
|
4001
|
-
forceSelection :
|
4030
|
+
forceSelection : false, // force a choice on blur with search selection
|
4002
4031
|
|
4003
4032
|
allowAdditions : false, // whether multiple select should allow user added values
|
4004
4033
|
ignoreCase : false, // whether to consider case sensitivity when creating labels
|
@@ -4009,7 +4038,7 @@ $.fn.dropdown.settings = {
|
|
4009
4038
|
useLabels : true, // whether multiple select should filter currently active selections from choices
|
4010
4039
|
delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
|
4011
4040
|
|
4012
|
-
showOnFocus :
|
4041
|
+
showOnFocus : false, // show menu on focus
|
4013
4042
|
allowReselection : false, // whether current value should trigger callbacks when reselected
|
4014
4043
|
allowTab : true, // add tabindex to element
|
4015
4044
|
allowCategorySelection : false, // allow elements with sub-menus to be selected
|
@@ -4024,6 +4053,8 @@ $.fn.dropdown.settings = {
|
|
4024
4053
|
|
4025
4054
|
headerDivider : true, // whether option headers should have an additional divider line underneath when converted from <select> <optgroup>
|
4026
4055
|
|
4056
|
+
collapseOnActionable : true, // whether the dropdown should collapse upon selection of an actionable item
|
4057
|
+
|
4027
4058
|
// label settings on multi-select
|
4028
4059
|
label: {
|
4029
4060
|
transition : 'scale',
|
@@ -4036,13 +4067,13 @@ $.fn.dropdown.settings = {
|
|
4036
4067
|
hide : 300,
|
4037
4068
|
show : 200,
|
4038
4069
|
search : 20,
|
4039
|
-
touch : 50
|
4040
4070
|
},
|
4041
4071
|
|
4042
4072
|
/* Callbacks */
|
4043
4073
|
onChange : function(value, text, $selected){},
|
4044
4074
|
onAdd : function(value, text, $selected){},
|
4045
4075
|
onRemove : function(value, text, $selected){},
|
4076
|
+
onActionable : function(value, text, $selected){},
|
4046
4077
|
onSearch : function(searchTerm){},
|
4047
4078
|
|
4048
4079
|
onLabelSelect : function($selectedLabels){},
|
@@ -4105,12 +4136,12 @@ $.fn.dropdown.settings = {
|
|
4105
4136
|
icon : 'icon', // optional icon name
|
4106
4137
|
iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
|
4107
4138
|
class : 'class', // optional individual class for item/header
|
4108
|
-
divider : 'divider' // optional divider append for group headers
|
4139
|
+
divider : 'divider', // optional divider append for group headers
|
4140
|
+
actionable : 'actionable' // optional actionable item
|
4109
4141
|
},
|
4110
4142
|
|
4111
4143
|
keys : {
|
4112
4144
|
backspace : 8,
|
4113
|
-
delimiter : 188, // comma
|
4114
4145
|
deleteKey : 46,
|
4115
4146
|
enter : 13,
|
4116
4147
|
escape : 27,
|
@@ -4177,7 +4208,8 @@ $.fn.dropdown.settings = {
|
|
4177
4208
|
header : 'header',
|
4178
4209
|
divider : 'divider',
|
4179
4210
|
groupIcon : '',
|
4180
|
-
unfilterable : 'unfilterable'
|
4211
|
+
unfilterable : 'unfilterable',
|
4212
|
+
actionable : 'actionable'
|
4181
4213
|
}
|
4182
4214
|
|
4183
4215
|
};
|
@@ -4252,6 +4284,9 @@ $.fn.dropdown.settings.templates = {
|
|
4252
4284
|
maybeText = (option[fields.text])
|
4253
4285
|
? ' data-text="' + deQuote(option[fields.text],true) + '"'
|
4254
4286
|
: '',
|
4287
|
+
maybeActionable = (option[fields.actionable])
|
4288
|
+
? className.actionable+' '
|
4289
|
+
: '',
|
4255
4290
|
maybeDisabled = (option[fields.disabled])
|
4256
4291
|
? className.disabled+' '
|
4257
4292
|
: '',
|
@@ -4260,7 +4295,7 @@ $.fn.dropdown.settings.templates = {
|
|
4260
4295
|
: '',
|
4261
4296
|
hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
|
4262
4297
|
;
|
4263
|
-
html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
|
4298
|
+
html += '<div class="'+ maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? deQuote(option[fields.class]) : className.item)+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
|
4264
4299
|
if (isMenu) {
|
4265
4300
|
html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
|
4266
4301
|
}
|