fomantic-ui 2.9.0-beta.32 → 2.9.0-beta.321
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 +274 -4
- 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/CONTRIBUTORS.md +86 -37
- package/FAQ.md +38 -38
- package/README.md +8 -8
- package/dist/components/accordion.css +176 -36
- package/dist/components/accordion.js +10 -4
- 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 +92 -33
- 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 +93 -74
- 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 +21 -14
- 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 +33 -18
- package/dist/components/dimmer.js +19 -10
- 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 +100 -50
- package/dist/components/dropdown.js +212 -187
- 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 +14 -10
- package/dist/components/embed.min.css +2 -2
- package/dist/components/embed.min.js +3 -3
- package/dist/components/emoji.css +10799 -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 +1021 -915
- package/dist/components/flag.min.css +2 -2
- package/dist/components/flyout.css +592 -0
- package/dist/components/flyout.js +1529 -0
- package/dist/components/flyout.min.css +9 -0
- package/dist/components/flyout.min.js +11 -0
- package/dist/components/form.css +160 -83
- package/dist/components/form.js +46 -42
- 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 +108 -76
- 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 +37 -6
- package/dist/components/modal.js +187 -84
- 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 +3 -3
- 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 +100 -104
- package/dist/components/popup.js +17 -23
- 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 +1 -1
- package/dist/components/rating.js +8 -4
- package/dist/components/rating.min.css +1 -1
- 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 +48 -21
- 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 +4 -4
- package/dist/components/shape.min.css +1 -1
- package/dist/components/shape.min.js +3 -3
- package/dist/components/sidebar.css +23 -9
- package/dist/components/sidebar.js +141 -44
- 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 +2 -2
- 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 +79 -64
- package/dist/components/slider.min.css +1 -1
- package/dist/components/slider.min.js +3 -3
- package/dist/components/state.js +3 -3
- 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 +31 -31
- package/dist/components/step.min.css +2 -2
- package/dist/components/sticky.css +1 -1
- package/dist/components/sticky.js +11 -18
- 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 +25 -7
- 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 +43 -1
- package/dist/components/toast.js +68 -34
- 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 +27 -22
- package/dist/components/transition.min.css +1 -1
- package/dist/components/transition.min.js +3 -3
- package/dist/components/visibility.js +5 -5
- package/dist/components/visibility.min.js +3 -3
- package/dist/semantic.css +42008 -34578
- package/dist/semantic.js +2719 -763
- 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 +8 -8
- package/examples/assets/library/iframe.js +3 -3
- 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 +91 -32
- package/src/definitions/behaviors/form.js +45 -41
- package/src/definitions/behaviors/state.js +2 -2
- package/src/definitions/behaviors/visibility.js +4 -4
- package/src/definitions/collections/form.less +229 -166
- package/src/definitions/collections/grid.less +723 -687
- package/src/definitions/collections/menu.less +232 -170
- 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 +54 -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.js +1 -1
- package/src/definitions/globals/site.less +25 -2
- package/src/definitions/modules/accordion.js +9 -3
- package/src/definitions/modules/accordion.less +371 -219
- package/src/definitions/modules/calendar.js +92 -73
- package/src/definitions/modules/calendar.less +20 -0
- package/src/definitions/modules/checkbox.js +20 -13
- package/src/definitions/modules/checkbox.less +83 -227
- package/src/definitions/modules/dimmer.js +18 -9
- package/src/definitions/modules/dimmer.less +26 -12
- package/src/definitions/modules/dropdown.js +211 -186
- package/src/definitions/modules/dropdown.less +201 -136
- package/src/definitions/modules/embed.js +13 -9
- package/src/definitions/modules/embed.less +4 -4
- package/src/definitions/modules/flyout.js +1529 -0
- package/src/definitions/modules/flyout.less +650 -0
- package/src/definitions/modules/modal.js +186 -83
- package/src/definitions/modules/modal.less +70 -33
- package/src/definitions/modules/nag.js +2 -2
- package/src/definitions/modules/nag.less +20 -19
- package/src/definitions/modules/popup.js +16 -22
- package/src/definitions/modules/popup.less +86 -90
- package/src/definitions/modules/progress.js +5 -2
- package/src/definitions/modules/progress.less +19 -18
- package/src/definitions/modules/rating.js +7 -3
- package/src/definitions/modules/rating.less +35 -34
- package/src/definitions/modules/search.js +47 -20
- package/src/definitions/modules/search.less +35 -19
- package/src/definitions/modules/shape.js +3 -3
- package/src/definitions/modules/sidebar.js +140 -43
- package/src/definitions/modules/sidebar.less +53 -24
- package/src/definitions/modules/slider.js +78 -63
- package/src/definitions/modules/slider.less +48 -47
- package/src/definitions/modules/sticky.js +10 -17
- package/src/definitions/modules/sticky.less +3 -1
- package/src/definitions/modules/tab.js +24 -6
- package/src/definitions/modules/tab.less +4 -4
- package/src/definitions/modules/toast.js +67 -33
- package/src/definitions/modules/toast.less +52 -16
- package/src/definitions/modules/transition.js +26 -21
- 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/semantic.less +1 -0
- package/src/theme.config.example +1 -0
- 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 +3563 -1
- package/src/themes/default/elements/flag.overrides +0 -991
- package/src/themes/default/elements/flag.variables +1603 -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 +3 -3
- package/src/themes/default/globals/site.variables +109 -8
- package/src/themes/default/globals/variation.variables +161 -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 +7 -10
- package/src/themes/default/modules/flyout.overrides +3 -0
- package/src/themes/default/modules/flyout.variables +100 -0
- package/src/themes/default/modules/modal.variables +16 -2
- package/src/themes/default/modules/popup.variables +0 -2
- package/src/themes/default/modules/sidebar.variables +4 -1
- 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 +3562 -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 +3558 -6
- package/tasks/admin/distributions/create.js +1 -1
- 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/release.js +1 -0
- package/tasks/config/admin/templates/composer.json +1 -1
- package/tasks/config/defaults.js +1 -0
- package/tasks/config/project/install.js +16 -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.321+b9608b1 - 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),
|
@@ -116,6 +111,7 @@ $.fn.dropdown = function(parameters) {
|
|
116
111
|
module.error(error.noNormalize, element);
|
117
112
|
}
|
118
113
|
|
114
|
+
module.create.id();
|
119
115
|
module.setup.layout();
|
120
116
|
|
121
117
|
if(settings.values) {
|
@@ -129,7 +125,6 @@ $.fn.dropdown = function(parameters) {
|
|
129
125
|
module.save.defaults();
|
130
126
|
module.restore.selected();
|
131
127
|
|
132
|
-
module.create.id();
|
133
128
|
module.bind.events();
|
134
129
|
|
135
130
|
module.observeChanges();
|
@@ -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
|
},
|
@@ -232,7 +228,6 @@ $.fn.dropdown = function(parameters) {
|
|
232
228
|
var
|
233
229
|
$userChoices,
|
234
230
|
$userChoice,
|
235
|
-
isUserValue,
|
236
231
|
html
|
237
232
|
;
|
238
233
|
values = values || module.get.userValues();
|
@@ -370,11 +365,20 @@ $.fn.dropdown = function(parameters) {
|
|
370
365
|
}
|
371
366
|
if( module.is.search() && !module.has.search() ) {
|
372
367
|
module.verbose('Adding search input');
|
368
|
+
var
|
369
|
+
labelNode = $module.prev('label')
|
370
|
+
;
|
373
371
|
$search = $('<input />')
|
374
372
|
.addClass(className.search)
|
375
373
|
.prop('autocomplete', module.is.chrome() ? 'fomantic-search' : 'off')
|
376
|
-
.insertBefore($text)
|
377
374
|
;
|
375
|
+
if (labelNode.length) {
|
376
|
+
if (!labelNode.attr('id')) {
|
377
|
+
labelNode.attr('id', '_' + module.get.id() + '_formLabel');
|
378
|
+
}
|
379
|
+
$search.attr('aria-labelledby', labelNode.attr('id'));
|
380
|
+
}
|
381
|
+
$search.insertBefore($text);
|
378
382
|
}
|
379
383
|
if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {
|
380
384
|
module.create.sizer();
|
@@ -421,6 +425,9 @@ $.fn.dropdown = function(parameters) {
|
|
421
425
|
module.debug('Disabling dropdown');
|
422
426
|
$module.addClass(className.disabled);
|
423
427
|
}
|
428
|
+
if($input.is('[required]')) {
|
429
|
+
settings.forceSelection = true;
|
430
|
+
}
|
424
431
|
$input
|
425
432
|
.removeAttr('required')
|
426
433
|
.removeAttr('class')
|
@@ -440,7 +447,7 @@ $.fn.dropdown = function(parameters) {
|
|
440
447
|
// replace module reference
|
441
448
|
$module = $module.parent(selector.dropdown);
|
442
449
|
instance = $module.data(moduleNamespace);
|
443
|
-
element = $module
|
450
|
+
element = $module[0];
|
444
451
|
module.refresh();
|
445
452
|
module.setup.returnedObject();
|
446
453
|
},
|
@@ -537,9 +544,7 @@ $.fn.dropdown = function(parameters) {
|
|
537
544
|
}
|
538
545
|
if(settings.onShow.call(element) !== false) {
|
539
546
|
module.animate.show(function() {
|
540
|
-
|
541
|
-
module.bind.intent();
|
542
|
-
}
|
547
|
+
module.bind.intent();
|
543
548
|
if(module.has.search() && !preventFocus) {
|
544
549
|
module.focusSearch();
|
545
550
|
}
|
@@ -566,8 +571,17 @@ $.fn.dropdown = function(parameters) {
|
|
566
571
|
}
|
567
572
|
callback.call(element);
|
568
573
|
});
|
574
|
+
// Hide submenus explicitly. On some browsers (esp. mobile), they will not automatically receive a
|
575
|
+
// mouseleave event
|
576
|
+
var $subMenu = $module.find(selector.menu);
|
577
|
+
if($subMenu.length > 0) {
|
578
|
+
module.verbose('Hiding sub-menu', $subMenu);
|
579
|
+
$subMenu.each(function() {
|
580
|
+
module.animate.hide(false, $(this));
|
581
|
+
});
|
582
|
+
}
|
569
583
|
}
|
570
|
-
} else
|
584
|
+
} else {
|
571
585
|
module.unbind.intent();
|
572
586
|
}
|
573
587
|
iconClicked = false;
|
@@ -625,13 +639,18 @@ $.fn.dropdown = function(parameters) {
|
|
625
639
|
$module
|
626
640
|
.on('change' + eventNamespace, selector.input, module.event.change)
|
627
641
|
;
|
642
|
+
if(module.is.multiple() && module.is.searchSelection()) {
|
643
|
+
$module
|
644
|
+
.on('paste' + eventNamespace, selector.search, module.event.paste)
|
645
|
+
;
|
646
|
+
}
|
628
647
|
},
|
629
648
|
mouseEvents: function() {
|
630
649
|
module.verbose('Binding mouse events');
|
631
650
|
if(module.is.multiple()) {
|
632
651
|
$module
|
633
|
-
.on(
|
634
|
-
.on(
|
652
|
+
.on('click' + eventNamespace, selector.label, module.event.label.click)
|
653
|
+
.on('click' + eventNamespace, selector.remove, module.event.remove.click)
|
635
654
|
;
|
636
655
|
}
|
637
656
|
if( module.is.searchSelection() ) {
|
@@ -640,31 +659,33 @@ $.fn.dropdown = function(parameters) {
|
|
640
659
|
.on('mouseup' + eventNamespace, module.event.mouseup)
|
641
660
|
.on('mousedown' + eventNamespace, selector.menu, module.event.menu.mousedown)
|
642
661
|
.on('mouseup' + eventNamespace, selector.menu, module.event.menu.mouseup)
|
643
|
-
.on(
|
644
|
-
.on(
|
662
|
+
.on('click' + eventNamespace, selector.icon, module.event.icon.click)
|
663
|
+
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
|
645
664
|
.on('focus' + eventNamespace, selector.search, module.event.search.focus)
|
646
|
-
.on(
|
665
|
+
.on('click' + eventNamespace, selector.search, module.event.search.focus)
|
647
666
|
.on('blur' + eventNamespace, selector.search, module.event.search.blur)
|
648
|
-
.on(
|
667
|
+
.on('click' + eventNamespace, selector.text, module.event.text.focus)
|
649
668
|
;
|
650
669
|
if(module.is.multiple()) {
|
651
670
|
$module
|
652
|
-
.on(
|
653
|
-
.on(
|
671
|
+
.on('click' + eventNamespace, module.event.click)
|
672
|
+
.on('click' + eventNamespace, module.event.search.focus)
|
654
673
|
;
|
655
674
|
}
|
656
675
|
}
|
657
676
|
else {
|
658
677
|
if(settings.on == 'click') {
|
659
678
|
$module
|
660
|
-
.on(
|
661
|
-
.on(
|
679
|
+
.on('click' + eventNamespace, selector.icon, module.event.icon.click)
|
680
|
+
.on('click' + eventNamespace, module.event.test.toggle)
|
662
681
|
;
|
663
682
|
}
|
664
683
|
else if(settings.on == 'hover') {
|
665
684
|
$module
|
666
685
|
.on('mouseenter' + eventNamespace, module.delay.show)
|
667
686
|
.on('mouseleave' + eventNamespace, module.delay.hide)
|
687
|
+
.on('touchstart' + eventNamespace, module.event.test.toggle)
|
688
|
+
.on('touchstart' + eventNamespace, selector.icon, module.event.icon.click)
|
668
689
|
;
|
669
690
|
}
|
670
691
|
else {
|
@@ -676,7 +697,7 @@ $.fn.dropdown = function(parameters) {
|
|
676
697
|
.on('mousedown' + eventNamespace, module.event.mousedown)
|
677
698
|
.on('mouseup' + eventNamespace, module.event.mouseup)
|
678
699
|
.on('focus' + eventNamespace, module.event.focus)
|
679
|
-
.on(
|
700
|
+
.on('click' + eventNamespace, selector.clearIcon, module.event.clearIcon.click)
|
680
701
|
;
|
681
702
|
if(module.has.menuSearch() ) {
|
682
703
|
$module
|
@@ -690,21 +711,16 @@ $.fn.dropdown = function(parameters) {
|
|
690
711
|
}
|
691
712
|
}
|
692
713
|
$menu
|
693
|
-
.on(
|
714
|
+
.on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)
|
715
|
+
.on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)
|
694
716
|
.on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)
|
695
717
|
.on('click' + eventNamespace, selector.item, module.event.item.click)
|
696
718
|
;
|
697
719
|
},
|
698
720
|
intent: function() {
|
699
721
|
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
722
|
$document
|
707
|
-
.on(
|
723
|
+
.on('click' + elementNamespace, module.event.test.hide)
|
708
724
|
;
|
709
725
|
}
|
710
726
|
},
|
@@ -712,14 +728,8 @@ $.fn.dropdown = function(parameters) {
|
|
712
728
|
unbind: {
|
713
729
|
intent: function() {
|
714
730
|
module.verbose('Removing hide intent event from document');
|
715
|
-
if(hasTouch) {
|
716
|
-
$document
|
717
|
-
.off('touchstart' + elementNamespace)
|
718
|
-
.off('touchmove' + elementNamespace)
|
719
|
-
;
|
720
|
-
}
|
721
731
|
$document
|
722
|
-
.off(
|
732
|
+
.off('click' + elementNamespace)
|
723
733
|
;
|
724
734
|
}
|
725
735
|
},
|
@@ -812,20 +822,28 @@ $.fn.dropdown = function(parameters) {
|
|
812
822
|
throttle : settings.throttle,
|
813
823
|
urlData : {
|
814
824
|
query: query
|
815
|
-
}
|
816
|
-
|
825
|
+
}
|
826
|
+
},
|
827
|
+
apiCallbacks = {
|
828
|
+
onError: function(errorMessage, $module, xhr) {
|
817
829
|
module.add.message(message.serverError);
|
818
830
|
iconClicked = false;
|
819
831
|
focused = false;
|
820
832
|
callback.apply(null, callbackParameters);
|
833
|
+
if(typeof settings.apiSettings.onError === 'function') {
|
834
|
+
settings.apiSettings.onError.call(this, errorMessage, $module, xhr);
|
835
|
+
}
|
821
836
|
},
|
822
|
-
onFailure: function() {
|
837
|
+
onFailure: function(response, $module, xhr) {
|
823
838
|
module.add.message(message.serverError);
|
824
839
|
iconClicked = false;
|
825
840
|
focused = false;
|
826
841
|
callback.apply(null, callbackParameters);
|
842
|
+
if(typeof settings.apiSettings.onFailure === 'function') {
|
843
|
+
settings.apiSettings.onFailure.call(this, response, $module, xhr);
|
844
|
+
}
|
827
845
|
},
|
828
|
-
onSuccess : function(response) {
|
846
|
+
onSuccess : function(response, $module, xhr) {
|
829
847
|
var
|
830
848
|
values = response[fields.remoteValues]
|
831
849
|
;
|
@@ -844,19 +862,22 @@ $.fn.dropdown = function(parameters) {
|
|
844
862
|
var value = module.is.multiple() ? module.get.values() : module.get.value();
|
845
863
|
if (value !== '') {
|
846
864
|
module.verbose('Value(s) present after click icon, select value(s) in items');
|
847
|
-
module.set.selected(value, null,
|
865
|
+
module.set.selected(value, null, true, true);
|
848
866
|
}
|
849
867
|
}
|
850
868
|
iconClicked = false;
|
851
869
|
focused = false;
|
852
870
|
callback.apply(null, callbackParameters);
|
871
|
+
if(typeof settings.apiSettings.onSuccess === 'function') {
|
872
|
+
settings.apiSettings.onSuccess.call(this, response, $module, xhr);
|
873
|
+
}
|
853
874
|
}
|
854
875
|
}
|
855
876
|
;
|
856
877
|
if( !$module.api('get request') ) {
|
857
878
|
module.setup.api();
|
858
879
|
}
|
859
|
-
apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);
|
880
|
+
apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings, apiCallbacks);
|
860
881
|
$module
|
861
882
|
.api('setting', apiSettings)
|
862
883
|
.api('query')
|
@@ -892,30 +913,18 @@ $.fn.dropdown = function(parameters) {
|
|
892
913
|
}
|
893
914
|
if(settings.match === 'both' || settings.match === 'text') {
|
894
915
|
text = module.remove.diacritics(String(module.get.choiceText($choice, false)));
|
895
|
-
if(text.search(beginsWithRegExp) !== -1
|
896
|
-
|
897
|
-
|
898
|
-
}
|
899
|
-
else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {
|
900
|
-
results.push(this);
|
901
|
-
return true;
|
902
|
-
}
|
903
|
-
else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {
|
916
|
+
if(text.search(beginsWithRegExp) !== -1 ||
|
917
|
+
(settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) ||
|
918
|
+
(settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text))) {
|
904
919
|
results.push(this);
|
905
920
|
return true;
|
906
921
|
}
|
907
922
|
}
|
908
923
|
if(settings.match === 'both' || settings.match === 'value') {
|
909
924
|
value = module.remove.diacritics(String(module.get.choiceValue($choice, text)));
|
910
|
-
if(value.search(beginsWithRegExp) !== -1
|
911
|
-
|
912
|
-
|
913
|
-
}
|
914
|
-
else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {
|
915
|
-
results.push(this);
|
916
|
-
return true;
|
917
|
-
}
|
918
|
-
else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {
|
925
|
+
if(value.search(beginsWithRegExp) !== -1 ||
|
926
|
+
(settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) ||
|
927
|
+
(settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value))) {
|
919
928
|
results.push(this);
|
920
929
|
return true;
|
921
930
|
}
|
@@ -1044,7 +1053,7 @@ $.fn.dropdown = function(parameters) {
|
|
1044
1053
|
menuConfig[fields.values] = values;
|
1045
1054
|
module.setup.menu(menuConfig);
|
1046
1055
|
$.each(values, function(index, item) {
|
1047
|
-
if(item.selected
|
1056
|
+
if(item.selected === true) {
|
1048
1057
|
module.debug('Setting initial selection to', item[fields.value]);
|
1049
1058
|
module.set.selected(item[fields.value]);
|
1050
1059
|
if(!module.is.multiple()) {
|
@@ -1065,7 +1074,7 @@ $.fn.dropdown = function(parameters) {
|
|
1065
1074
|
settings.preserveHTML
|
1066
1075
|
)
|
1067
1076
|
;
|
1068
|
-
$input.append('<option value="' + value + '">' + name + '</option>');
|
1077
|
+
$input.append('<option value="' + value + '"' + (item.selected === true ? ' selected' : '') + '>' + name + '</option>');
|
1069
1078
|
});
|
1070
1079
|
module.observe.select();
|
1071
1080
|
}
|
@@ -1073,6 +1082,15 @@ $.fn.dropdown = function(parameters) {
|
|
1073
1082
|
},
|
1074
1083
|
|
1075
1084
|
event: {
|
1085
|
+
paste: function(event) {
|
1086
|
+
var pasteValue = (event.originalEvent.clipboardData || window.clipboardData).getData('text'),
|
1087
|
+
tokens = pasteValue.split(settings.delimiter)
|
1088
|
+
;
|
1089
|
+
tokens.forEach(function(value){
|
1090
|
+
module.set.selected(module.escape.htmlEntities(value.trim()), null, true, true);
|
1091
|
+
});
|
1092
|
+
event.preventDefault();
|
1093
|
+
},
|
1076
1094
|
change: function() {
|
1077
1095
|
if(!internalChange) {
|
1078
1096
|
module.debug('Input changed, updating selection');
|
@@ -1131,7 +1149,7 @@ $.fn.dropdown = function(parameters) {
|
|
1131
1149
|
if(module.is.multiple()) {
|
1132
1150
|
module.remove.activeLabel();
|
1133
1151
|
}
|
1134
|
-
if(!focused && !module.is.active() && (settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin'))) {
|
1152
|
+
if(!focused && !module.is.active() && (settings.showOnFocus || (event.type !== 'focus' && event.type !== 'focusin')) && event.type !== 'touchstart') {
|
1135
1153
|
focused = true;
|
1136
1154
|
module.search();
|
1137
1155
|
}
|
@@ -1249,23 +1267,12 @@ $.fn.dropdown = function(parameters) {
|
|
1249
1267
|
if (!module.is.multiple() || (module.is.multiple() && !module.is.active())) {
|
1250
1268
|
focused = true;
|
1251
1269
|
}
|
1252
|
-
if( module.determine.eventOnElement(event, toggleBehavior) ) {
|
1270
|
+
if( module.determine.eventOnElement(event, toggleBehavior) && event.type !== 'touchstart') {
|
1271
|
+
// do not preventDefault of touchstart; so emulated mouseenter is triggered on first touch and not later
|
1272
|
+
// (when selecting an item). The double-showing of the dropdown through both events does not hurt.
|
1253
1273
|
event.preventDefault();
|
1254
1274
|
}
|
1255
1275
|
},
|
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
1276
|
hide: function(event) {
|
1270
1277
|
if(module.determine.eventInModule(event, module.hide)){
|
1271
1278
|
if(element.id && $(event.target).attr('for') === element.id){
|
@@ -1285,8 +1292,8 @@ $.fn.dropdown = function(parameters) {
|
|
1285
1292
|
},
|
1286
1293
|
select: {
|
1287
1294
|
mutation: function(mutations) {
|
1288
|
-
module.debug('<select> modified, recreating menu');
|
1289
1295
|
if(module.is.selectMutation(mutations)) {
|
1296
|
+
module.debug('<select> modified, recreating menu');
|
1290
1297
|
module.disconnect.selectObserver();
|
1291
1298
|
module.refresh();
|
1292
1299
|
module.setup.select();
|
@@ -1349,13 +1356,15 @@ $.fn.dropdown = function(parameters) {
|
|
1349
1356
|
},
|
1350
1357
|
mouseleave: function(event) {
|
1351
1358
|
var
|
1352
|
-
$subMenu = $(this).
|
1359
|
+
$subMenu = $(this).find(selector.menu)
|
1353
1360
|
;
|
1354
1361
|
if($subMenu.length > 0) {
|
1355
1362
|
clearTimeout(module.itemTimer);
|
1356
1363
|
module.itemTimer = setTimeout(function() {
|
1357
1364
|
module.verbose('Hiding sub-menu', $subMenu);
|
1358
|
-
|
1365
|
+
$subMenu.each(function() {
|
1366
|
+
module.animate.hide(false, $(this));
|
1367
|
+
});
|
1359
1368
|
}, settings.delay.hide);
|
1360
1369
|
}
|
1361
1370
|
},
|
@@ -1381,7 +1390,7 @@ $.fn.dropdown = function(parameters) {
|
|
1381
1390
|
module.remove.userAddition();
|
1382
1391
|
}
|
1383
1392
|
module.remove.searchTerm();
|
1384
|
-
if(!module.is.focusedOnSearch() &&
|
1393
|
+
if(!module.is.focusedOnSearch() && skipRefocus !== true) {
|
1385
1394
|
module.focusSearch(true);
|
1386
1395
|
}
|
1387
1396
|
}
|
@@ -1416,8 +1425,7 @@ $.fn.dropdown = function(parameters) {
|
|
1416
1425
|
isFocusedOnSearch = module.is.focusedOnSearch(),
|
1417
1426
|
isFocused = module.is.focused(),
|
1418
1427
|
caretAtStart = (isFocusedOnSearch && module.get.caretPosition(false) === 0),
|
1419
|
-
isSelectedSearch = (caretAtStart && module.get.caretPosition(true) !== 0)
|
1420
|
-
$nextLabel
|
1428
|
+
isSelectedSearch = (caretAtStart && module.get.caretPosition(true) !== 0)
|
1421
1429
|
;
|
1422
1430
|
if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {
|
1423
1431
|
return;
|
@@ -1513,7 +1521,7 @@ $.fn.dropdown = function(parameters) {
|
|
1513
1521
|
keydown: function(event) {
|
1514
1522
|
var
|
1515
1523
|
pressedKey = event.which,
|
1516
|
-
isShortcutKey = module.is.inObject(pressedKey, keys)
|
1524
|
+
isShortcutKey = module.is.inObject(pressedKey, keys) || event.key === settings.delimiter
|
1517
1525
|
;
|
1518
1526
|
if(isShortcutKey) {
|
1519
1527
|
var
|
@@ -1531,11 +1539,10 @@ $.fn.dropdown = function(parameters) {
|
|
1531
1539
|
hasSubMenu = ($subMenu.length> 0),
|
1532
1540
|
hasSelectedItem = ($selectedItem.length > 0),
|
1533
1541
|
selectedIsSelectable = ($selectedItem.not(selector.unselectable).length > 0),
|
1534
|
-
delimiterPressed = (
|
1542
|
+
delimiterPressed = (event.key === settings.delimiter && module.is.multiple()),
|
1535
1543
|
isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),
|
1536
1544
|
$nextItem,
|
1537
|
-
isSubMenuItem
|
1538
|
-
newIndex
|
1545
|
+
isSubMenuItem
|
1539
1546
|
;
|
1540
1547
|
// allow selection with menu closed
|
1541
1548
|
if(isAdditionWithoutMenu) {
|
@@ -1629,7 +1636,7 @@ $.fn.dropdown = function(parameters) {
|
|
1629
1636
|
.addClass(className.selected)
|
1630
1637
|
;
|
1631
1638
|
module.set.scrollPosition($nextItem);
|
1632
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
1639
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1633
1640
|
module.set.selectedItem($nextItem);
|
1634
1641
|
}
|
1635
1642
|
}
|
@@ -1639,7 +1646,7 @@ $.fn.dropdown = function(parameters) {
|
|
1639
1646
|
// down arrow (traverse menu down)
|
1640
1647
|
if(pressedKey == keys.downArrow) {
|
1641
1648
|
$nextItem = (hasSelectedItem && inVisibleMenu)
|
1642
|
-
? $
|
1649
|
+
? $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)
|
1643
1650
|
: $item.eq(0)
|
1644
1651
|
;
|
1645
1652
|
if($nextItem.length === 0) {
|
@@ -1656,7 +1663,7 @@ $.fn.dropdown = function(parameters) {
|
|
1656
1663
|
.addClass(className.selected)
|
1657
1664
|
;
|
1658
1665
|
module.set.scrollPosition($nextItem);
|
1659
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
1666
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
1660
1667
|
module.set.selectedItem($nextItem);
|
1661
1668
|
}
|
1662
1669
|
}
|
@@ -1677,6 +1684,7 @@ $.fn.dropdown = function(parameters) {
|
|
1677
1684
|
if(pressedKey == keys.escape) {
|
1678
1685
|
module.verbose('Escape key pressed, closing dropdown');
|
1679
1686
|
module.hide();
|
1687
|
+
event.stopPropagation();
|
1680
1688
|
}
|
1681
1689
|
|
1682
1690
|
}
|
@@ -1787,7 +1795,7 @@ $.fn.dropdown = function(parameters) {
|
|
1787
1795
|
;
|
1788
1796
|
if( module.can.activate( $(element) ) ) {
|
1789
1797
|
module.set.selected(value, $(element));
|
1790
|
-
if(!module.is.multiple()) {
|
1798
|
+
if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
|
1791
1799
|
module.hideAndClear();
|
1792
1800
|
}
|
1793
1801
|
}
|
@@ -1800,7 +1808,7 @@ $.fn.dropdown = function(parameters) {
|
|
1800
1808
|
;
|
1801
1809
|
if( module.can.activate( $(element) ) ) {
|
1802
1810
|
module.set.value(value, text, $(element));
|
1803
|
-
if(!module.is.multiple()) {
|
1811
|
+
if(!module.is.multiple() && !(!settings.collapseOnActionable && $(element).hasClass(className.actionable))) {
|
1804
1812
|
module.hideAndClear();
|
1805
1813
|
}
|
1806
1814
|
}
|
@@ -1851,7 +1859,7 @@ $.fn.dropdown = function(parameters) {
|
|
1851
1859
|
;
|
1852
1860
|
$sizer.text(value);
|
1853
1861
|
// prevent rounding issues
|
1854
|
-
return Math.ceil( $sizer.width() + 1);
|
1862
|
+
return Math.ceil( $sizer.width() + (module.is.edge() ? 3 : 1));
|
1855
1863
|
},
|
1856
1864
|
selectionCount: function() {
|
1857
1865
|
var
|
@@ -1898,7 +1906,7 @@ $.fn.dropdown = function(parameters) {
|
|
1898
1906
|
},
|
1899
1907
|
caretPosition: function(returnEndPos) {
|
1900
1908
|
var
|
1901
|
-
input = $search
|
1909
|
+
input = $search[0],
|
1902
1910
|
range,
|
1903
1911
|
rangeLength
|
1904
1912
|
;
|
@@ -2320,7 +2328,7 @@ $.fn.dropdown = function(parameters) {
|
|
2320
2328
|
module.error(error.noStorage);
|
2321
2329
|
return;
|
2322
2330
|
}
|
2323
|
-
name = sessionStorage.getItem(value);
|
2331
|
+
name = sessionStorage.getItem(value + elementNamespace);
|
2324
2332
|
return (name !== undefined)
|
2325
2333
|
? name
|
2326
2334
|
: false
|
@@ -2364,7 +2372,7 @@ $.fn.dropdown = function(parameters) {
|
|
2364
2372
|
return;
|
2365
2373
|
}
|
2366
2374
|
module.verbose('Saving remote data to session storage', value, name);
|
2367
|
-
sessionStorage.setItem(value, name);
|
2375
|
+
sessionStorage.setItem(value + elementNamespace, name);
|
2368
2376
|
}
|
2369
2377
|
},
|
2370
2378
|
|
@@ -2393,7 +2401,6 @@ $.fn.dropdown = function(parameters) {
|
|
2393
2401
|
currentScroll = $menu.scrollTop(),
|
2394
2402
|
itemHeight = $item.eq(0).outerHeight(),
|
2395
2403
|
itemsPerPage = Math.floor(menuHeight / itemHeight),
|
2396
|
-
maxScroll = $menu.prop('scrollHeight'),
|
2397
2404
|
newScroll = (direction == 'up')
|
2398
2405
|
? currentScroll - (itemHeight * itemsPerPage)
|
2399
2406
|
: currentScroll + (itemHeight * itemsPerPage),
|
@@ -2424,7 +2431,7 @@ $.fn.dropdown = function(parameters) {
|
|
2424
2431
|
$nextSelectedItem
|
2425
2432
|
.addClass(className.selected)
|
2426
2433
|
;
|
2427
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
2434
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
2428
2435
|
module.set.selectedItem($nextSelectedItem);
|
2429
2436
|
}
|
2430
2437
|
$menu
|
@@ -2510,7 +2517,7 @@ $.fn.dropdown = function(parameters) {
|
|
2510
2517
|
var
|
2511
2518
|
length = module.get.query().length
|
2512
2519
|
;
|
2513
|
-
$search.val( text.
|
2520
|
+
$search.val( text.slice(0, length));
|
2514
2521
|
},
|
2515
2522
|
scrollPosition: function($item, forceScroll) {
|
2516
2523
|
var
|
@@ -2518,7 +2525,6 @@ $.fn.dropdown = function(parameters) {
|
|
2518
2525
|
$menu,
|
2519
2526
|
hasActive,
|
2520
2527
|
offset,
|
2521
|
-
itemHeight,
|
2522
2528
|
itemOffset,
|
2523
2529
|
menuOffset,
|
2524
2530
|
menuScroll,
|
@@ -2627,13 +2633,13 @@ $.fn.dropdown = function(parameters) {
|
|
2627
2633
|
module.set.scrollPosition($nextValue);
|
2628
2634
|
$selectedItem.removeClass(className.selected);
|
2629
2635
|
$nextValue.addClass(className.selected);
|
2630
|
-
if(settings.selectOnKeydown && module.is.single()) {
|
2636
|
+
if(settings.selectOnKeydown && module.is.single() && !$nextItem.hasClass(className.actionable)) {
|
2631
2637
|
module.set.selectedItem($nextValue);
|
2632
2638
|
}
|
2633
2639
|
}
|
2634
2640
|
},
|
2635
2641
|
direction: function($menu) {
|
2636
|
-
if(settings.direction
|
2642
|
+
if(settings.direction === 'auto') {
|
2637
2643
|
// reset position, remove upward if it's base menu
|
2638
2644
|
if (!$menu) {
|
2639
2645
|
module.remove.upward();
|
@@ -2652,7 +2658,7 @@ $.fn.dropdown = function(parameters) {
|
|
2652
2658
|
module.set.leftward($menu);
|
2653
2659
|
}
|
2654
2660
|
}
|
2655
|
-
else if(settings.direction
|
2661
|
+
else if(settings.direction === 'upward') {
|
2656
2662
|
module.set.upward($menu);
|
2657
2663
|
}
|
2658
2664
|
},
|
@@ -2665,6 +2671,11 @@ $.fn.dropdown = function(parameters) {
|
|
2665
2671
|
$element.addClass(className.leftward);
|
2666
2672
|
},
|
2667
2673
|
value: function(value, text, $selected, preventChangeTrigger) {
|
2674
|
+
if(typeof text === 'boolean') {
|
2675
|
+
preventChangeTrigger = text;
|
2676
|
+
$selected = undefined;
|
2677
|
+
text = undefined;
|
2678
|
+
}
|
2668
2679
|
if(value !== undefined && value !== '' && !(Array.isArray(value) && value.length === 0)) {
|
2669
2680
|
$input.removeClass(className.noselection);
|
2670
2681
|
} else {
|
@@ -2676,8 +2687,7 @@ $.fn.dropdown = function(parameters) {
|
|
2676
2687
|
currentValue = module.get.values(),
|
2677
2688
|
stringValue = (value !== undefined)
|
2678
2689
|
? String(value)
|
2679
|
-
: value
|
2680
|
-
newValue
|
2690
|
+
: value
|
2681
2691
|
;
|
2682
2692
|
if(hasInput) {
|
2683
2693
|
if(!settings.allowReselection && stringValue == currentValue) {
|
@@ -2728,12 +2738,21 @@ $.fn.dropdown = function(parameters) {
|
|
2728
2738
|
visible: function() {
|
2729
2739
|
$module.addClass(className.visible);
|
2730
2740
|
},
|
2731
|
-
exactly: function(value, $selectedItem) {
|
2741
|
+
exactly: function(value, $selectedItem, preventChangeTrigger) {
|
2742
|
+
if(typeof $selectedItem === 'boolean') {
|
2743
|
+
preventChangeTrigger = $selectedItem;
|
2744
|
+
$selectedItem = undefined;
|
2745
|
+
}
|
2732
2746
|
module.debug('Setting selected to exact values');
|
2733
2747
|
module.clear();
|
2734
|
-
module.set.selected(value, $selectedItem);
|
2748
|
+
module.set.selected(value, $selectedItem, preventChangeTrigger);
|
2735
2749
|
},
|
2736
2750
|
selected: function(value, $selectedItem, preventChangeTrigger, keepSearchTerm) {
|
2751
|
+
if(typeof $selectedItem === 'boolean') {
|
2752
|
+
keepSearchTerm = preventChangeTrigger;
|
2753
|
+
preventChangeTrigger = $selectedItem;
|
2754
|
+
$selectedItem = undefined;
|
2755
|
+
}
|
2737
2756
|
var
|
2738
2757
|
isMultiple = module.is.multiple()
|
2739
2758
|
;
|
@@ -2765,23 +2784,30 @@ $.fn.dropdown = function(parameters) {
|
|
2765
2784
|
|
2766
2785
|
isFiltered = $selected.hasClass(className.filtered),
|
2767
2786
|
isActive = $selected.hasClass(className.active),
|
2787
|
+
isActionable = $selected.hasClass(className.actionable),
|
2768
2788
|
isUserValue = $selected.hasClass(className.addition),
|
2769
|
-
shouldAnimate = (isMultiple && $selectedItem.length
|
2789
|
+
shouldAnimate = (isMultiple && $selectedItem && $selectedItem.length === 1)
|
2770
2790
|
;
|
2771
|
-
if(
|
2791
|
+
if(isActionable){
|
2792
|
+
if((!isMultiple || (!isActive || isUserValue)) && settings.apiSettings && settings.saveRemoteData) {
|
2793
|
+
module.save.remoteData(selectedText, selectedValue);
|
2794
|
+
}
|
2795
|
+
settings.onActionable.call(element, selectedValue, selectedText, $selected);
|
2796
|
+
}
|
2797
|
+
else if(isMultiple) {
|
2772
2798
|
if(!isActive || isUserValue) {
|
2773
2799
|
if(settings.apiSettings && settings.saveRemoteData) {
|
2774
2800
|
module.save.remoteData(selectedText, selectedValue);
|
2775
2801
|
}
|
2776
2802
|
if(settings.useLabels) {
|
2803
|
+
module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2777
2804
|
module.add.label(selectedValue, selectedText, shouldAnimate);
|
2778
|
-
module.add.value(selectedValue, selectedText, $selected);
|
2779
2805
|
module.set.activeItem($selected);
|
2780
2806
|
module.filterActive();
|
2781
2807
|
module.select.nextAvailable($selectedItem);
|
2782
2808
|
}
|
2783
2809
|
else {
|
2784
|
-
module.add.value(selectedValue, selectedText, $selected);
|
2810
|
+
module.add.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
2785
2811
|
module.set.text(module.add.variables(message.count));
|
2786
2812
|
module.set.activeItem($selected);
|
2787
2813
|
}
|
@@ -2795,7 +2821,7 @@ $.fn.dropdown = function(parameters) {
|
|
2795
2821
|
if(settings.apiSettings && settings.saveRemoteData) {
|
2796
2822
|
module.save.remoteData(selectedText, selectedValue);
|
2797
2823
|
}
|
2798
|
-
if (!keepSearchTerm) {
|
2824
|
+
if (!keepSearchTerm && !$selected.hasClass(className.actionable)) {
|
2799
2825
|
module.set.text(selectedText);
|
2800
2826
|
}
|
2801
2827
|
module.set.value(selectedValue, selectedText, $selected, preventChangeTrigger);
|
@@ -2847,6 +2873,7 @@ $.fn.dropdown = function(parameters) {
|
|
2847
2873
|
animation : settings.label.transition,
|
2848
2874
|
debug : settings.debug,
|
2849
2875
|
verbose : settings.verbose,
|
2876
|
+
silent : settings.silent,
|
2850
2877
|
duration : settings.label.duration
|
2851
2878
|
})
|
2852
2879
|
;
|
@@ -2869,7 +2896,7 @@ $.fn.dropdown = function(parameters) {
|
|
2869
2896
|
;
|
2870
2897
|
}
|
2871
2898
|
else {
|
2872
|
-
$
|
2899
|
+
$('<div/>')
|
2873
2900
|
.html(html)
|
2874
2901
|
.addClass(className.message)
|
2875
2902
|
.appendTo($menu)
|
@@ -2894,7 +2921,7 @@ $.fn.dropdown = function(parameters) {
|
|
2894
2921
|
$('<option/>')
|
2895
2922
|
.prop('value', escapedValue)
|
2896
2923
|
.addClass(className.addition)
|
2897
|
-
.
|
2924
|
+
.text(value)
|
2898
2925
|
.appendTo($input)
|
2899
2926
|
;
|
2900
2927
|
module.verbose('Adding user addition as an <option>', value);
|
@@ -2952,16 +2979,13 @@ $.fn.dropdown = function(parameters) {
|
|
2952
2979
|
hasCount = (message.search('{count}') !== -1),
|
2953
2980
|
hasMaxCount = (message.search('{maxCount}') !== -1),
|
2954
2981
|
hasTerm = (message.search('{term}') !== -1),
|
2955
|
-
count,
|
2956
2982
|
query
|
2957
2983
|
;
|
2958
2984
|
module.verbose('Adding templated variables to message', message);
|
2959
2985
|
if(hasCount) {
|
2960
|
-
|
2961
|
-
message = message.replace('{count}', count);
|
2986
|
+
message = message.replace('{count}', module.get.selectionCount());
|
2962
2987
|
}
|
2963
2988
|
if(hasMaxCount) {
|
2964
|
-
count = module.get.selectionCount();
|
2965
2989
|
message = message.replace('{maxCount}', settings.maxSelections);
|
2966
2990
|
}
|
2967
2991
|
if(hasTerm) {
|
@@ -2970,7 +2994,12 @@ $.fn.dropdown = function(parameters) {
|
|
2970
2994
|
}
|
2971
2995
|
return message;
|
2972
2996
|
},
|
2973
|
-
value: function(addedValue, addedText, $selectedItem) {
|
2997
|
+
value: function(addedValue, addedText, $selectedItem, preventChangeTrigger) {
|
2998
|
+
if(typeof addedText === 'boolean') {
|
2999
|
+
preventChangeTrigger = addedText;
|
3000
|
+
$selectedItem = undefined;
|
3001
|
+
addedText = undefined;
|
3002
|
+
}
|
2974
3003
|
var
|
2975
3004
|
currentValue = module.get.values(true),
|
2976
3005
|
newValue
|
@@ -2985,7 +3014,7 @@ $.fn.dropdown = function(parameters) {
|
|
2985
3014
|
}
|
2986
3015
|
// extend current array
|
2987
3016
|
if(Array.isArray(currentValue)) {
|
2988
|
-
newValue = currentValue.concat([addedValue]);
|
3017
|
+
newValue = $selectedItem && $selectedItem.hasClass(className.actionable) ? currentValue : currentValue.concat([addedValue]);
|
2989
3018
|
newValue = module.get.uniqueArray(newValue);
|
2990
3019
|
}
|
2991
3020
|
else {
|
@@ -3009,7 +3038,7 @@ $.fn.dropdown = function(parameters) {
|
|
3009
3038
|
else {
|
3010
3039
|
settings.onAdd.call(element, addedValue, addedText, $selectedItem);
|
3011
3040
|
}
|
3012
|
-
module.set.value(newValue, addedText, $selectedItem);
|
3041
|
+
module.set.value(newValue, addedText, $selectedItem, preventChangeTrigger);
|
3013
3042
|
module.check.maxSelections();
|
3014
3043
|
},
|
3015
3044
|
},
|
@@ -3069,18 +3098,10 @@ $.fn.dropdown = function(parameters) {
|
|
3069
3098
|
return;
|
3070
3099
|
}
|
3071
3100
|
// temporarily disconnect observer
|
3072
|
-
|
3073
|
-
selectObserver.disconnect();
|
3074
|
-
module.verbose('Temporarily disconnecting mutation observer');
|
3075
|
-
}
|
3101
|
+
module.disconnect.selectObserver();
|
3076
3102
|
$option.remove();
|
3077
3103
|
module.verbose('Removing user addition as an <option>', escapedValue);
|
3078
|
-
|
3079
|
-
selectObserver.observe($input[0], {
|
3080
|
-
childList : true,
|
3081
|
-
subtree : true
|
3082
|
-
});
|
3083
|
-
}
|
3104
|
+
module.observe.select();
|
3084
3105
|
},
|
3085
3106
|
message: function() {
|
3086
3107
|
$menu.children(selector.message).remove();
|
@@ -3379,8 +3400,11 @@ $.fn.dropdown = function(parameters) {
|
|
3379
3400
|
bubbledIconClick: function(event) {
|
3380
3401
|
return $(event.target).closest($icon).length > 0;
|
3381
3402
|
},
|
3403
|
+
edge: function() {
|
3404
|
+
return !!window.chrome && !!window.StyleMedia;
|
3405
|
+
},
|
3382
3406
|
chrome: function() {
|
3383
|
-
return !!window.chrome &&
|
3407
|
+
return !!window.chrome && !window.StyleMedia;
|
3384
3408
|
},
|
3385
3409
|
alreadySetup: function() {
|
3386
3410
|
return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);
|
@@ -3408,7 +3432,7 @@ $.fn.dropdown = function(parameters) {
|
|
3408
3432
|
return (document.activeElement === $search[0]);
|
3409
3433
|
},
|
3410
3434
|
allFiltered: function() {
|
3411
|
-
return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions
|
3435
|
+
return( (module.is.multiple() || module.has.search()) && !(!settings.hideAdditions && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );
|
3412
3436
|
},
|
3413
3437
|
hidden: function($subMenu) {
|
3414
3438
|
return !module.is.visible($subMenu);
|
@@ -3445,7 +3469,7 @@ $.fn.dropdown = function(parameters) {
|
|
3445
3469
|
selectChanged = false
|
3446
3470
|
;
|
3447
3471
|
$.each(mutations, function(index, mutation) {
|
3448
|
-
if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {
|
3472
|
+
if($(mutation.target).is('select, option, optgroup') || $(mutation.addedNodes).is('select')) {
|
3449
3473
|
selectChanged = true;
|
3450
3474
|
return false;
|
3451
3475
|
}
|
@@ -3476,7 +3500,7 @@ $.fn.dropdown = function(parameters) {
|
|
3476
3500
|
},
|
3477
3501
|
verticallyScrollableContext: function() {
|
3478
3502
|
var
|
3479
|
-
overflowY = ($context
|
3503
|
+
overflowY = ($context[0] !== window)
|
3480
3504
|
? $context.css('overflow-y')
|
3481
3505
|
: false
|
3482
3506
|
;
|
@@ -3484,7 +3508,7 @@ $.fn.dropdown = function(parameters) {
|
|
3484
3508
|
},
|
3485
3509
|
horizontallyScrollableContext: function() {
|
3486
3510
|
var
|
3487
|
-
overflowX = ($context
|
3511
|
+
overflowX = ($context[0] !== window)
|
3488
3512
|
? $context.css('overflow-X')
|
3489
3513
|
: false
|
3490
3514
|
;
|
@@ -3494,22 +3518,17 @@ $.fn.dropdown = function(parameters) {
|
|
3494
3518
|
|
3495
3519
|
can: {
|
3496
3520
|
activate: function($item) {
|
3497
|
-
|
3498
|
-
|
3499
|
-
|
3500
|
-
|
3501
|
-
|
3502
|
-
}
|
3503
|
-
if(module.has.maxSelections() && $item.hasClass(className.active)) {
|
3504
|
-
return true;
|
3505
|
-
}
|
3506
|
-
return false;
|
3521
|
+
return (
|
3522
|
+
settings.useLabels ||
|
3523
|
+
!module.has.maxSelections() ||
|
3524
|
+
(module.has.maxSelections() && $item.hasClass(className.active))
|
3525
|
+
);
|
3507
3526
|
},
|
3508
3527
|
openDownward: function($subMenu) {
|
3509
3528
|
var
|
3510
3529
|
$currentMenu = $subMenu || $menu,
|
3511
|
-
canOpenDownward
|
3512
|
-
onScreen
|
3530
|
+
canOpenDownward,
|
3531
|
+
onScreen,
|
3513
3532
|
calculations
|
3514
3533
|
;
|
3515
3534
|
$currentMenu
|
@@ -3517,7 +3536,7 @@ $.fn.dropdown = function(parameters) {
|
|
3517
3536
|
;
|
3518
3537
|
calculations = {
|
3519
3538
|
context: {
|
3520
|
-
offset : ($context
|
3539
|
+
offset : ($context[0] === window)
|
3521
3540
|
? { top: 0, left: 0}
|
3522
3541
|
: $context.offset(),
|
3523
3542
|
scrollTop : $context.scrollTop(),
|
@@ -3565,7 +3584,7 @@ $.fn.dropdown = function(parameters) {
|
|
3565
3584
|
;
|
3566
3585
|
calculations = {
|
3567
3586
|
context: {
|
3568
|
-
offset : ($context
|
3587
|
+
offset : ($context[0] === window)
|
3569
3588
|
? { top: 0, left: 0}
|
3570
3589
|
: $context.offset(),
|
3571
3590
|
scrollLeft : $context.scrollLeft(),
|
@@ -3587,9 +3606,6 @@ $.fn.dropdown = function(parameters) {
|
|
3587
3606
|
$currentMenu.removeClass(className.loading);
|
3588
3607
|
return canOpenRightward;
|
3589
3608
|
},
|
3590
|
-
click: function() {
|
3591
|
-
return (hasTouch || settings.on == 'click');
|
3592
|
-
},
|
3593
3609
|
extendSelect: function() {
|
3594
3610
|
return settings.allowAdditions || settings.apiSettings;
|
3595
3611
|
},
|
@@ -3638,6 +3654,7 @@ $.fn.dropdown = function(parameters) {
|
|
3638
3654
|
animation : transition + ' in',
|
3639
3655
|
debug : settings.debug,
|
3640
3656
|
verbose : settings.verbose,
|
3657
|
+
silent : settings.silent,
|
3641
3658
|
duration : settings.transition.showDuration || settings.duration,
|
3642
3659
|
queue : true,
|
3643
3660
|
onStart : start,
|
@@ -3659,9 +3676,7 @@ $.fn.dropdown = function(parameters) {
|
|
3659
3676
|
start = ($subMenu)
|
3660
3677
|
? function() {}
|
3661
3678
|
: function() {
|
3662
|
-
|
3663
|
-
module.unbind.intent();
|
3664
|
-
}
|
3679
|
+
module.unbind.intent();
|
3665
3680
|
module.remove.active();
|
3666
3681
|
},
|
3667
3682
|
transition = settings.transition.hideMethod || module.get.transition($subMenu)
|
@@ -3687,6 +3702,7 @@ $.fn.dropdown = function(parameters) {
|
|
3687
3702
|
duration : settings.transition.hideDuration || settings.duration,
|
3688
3703
|
debug : settings.debug,
|
3689
3704
|
verbose : settings.verbose,
|
3705
|
+
silent : settings.silent,
|
3690
3706
|
queue : false,
|
3691
3707
|
onStart : start,
|
3692
3708
|
displayType: module.get.displayType(),
|
@@ -3772,7 +3788,7 @@ $.fn.dropdown = function(parameters) {
|
|
3772
3788
|
}
|
3773
3789
|
;
|
3774
3790
|
if(shouldEscape.test(string)) {
|
3775
|
-
string = string.replace(/&(?![a-z0-9#]{1,
|
3791
|
+
string = string.replace(/&(?![a-z0-9#]{1,12};)/gi, "&");
|
3776
3792
|
return string.replace(badChars, escapedChar);
|
3777
3793
|
}
|
3778
3794
|
return string;
|
@@ -3894,7 +3910,7 @@ $.fn.dropdown = function(parameters) {
|
|
3894
3910
|
response
|
3895
3911
|
;
|
3896
3912
|
passedArguments = passedArguments || queryArguments;
|
3897
|
-
context =
|
3913
|
+
context = context || element;
|
3898
3914
|
if(typeof query == 'string' && object !== undefined) {
|
3899
3915
|
query = query.split(/[\. ]/);
|
3900
3916
|
maxDepth = query.length - 1;
|
@@ -3990,7 +4006,7 @@ $.fn.dropdown.settings = {
|
|
3990
4006
|
keepOnScreen : true, // Whether dropdown should check whether it is on screen before showing
|
3991
4007
|
|
3992
4008
|
match : 'both', // what to match against with search selection (both, text, or label)
|
3993
|
-
fullTextSearch :
|
4009
|
+
fullTextSearch : 'exact', // search anywhere in value (set to 'exact' to require exact matches)
|
3994
4010
|
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
4011
|
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
4012
|
|
@@ -3998,7 +4014,7 @@ $.fn.dropdown.settings = {
|
|
3998
4014
|
preserveHTML : true, // preserve html when selecting value
|
3999
4015
|
sortSelect : false, // sort selection on init
|
4000
4016
|
|
4001
|
-
forceSelection :
|
4017
|
+
forceSelection : false, // force a choice on blur with search selection
|
4002
4018
|
|
4003
4019
|
allowAdditions : false, // whether multiple select should allow user added values
|
4004
4020
|
ignoreCase : false, // whether to consider case sensitivity when creating labels
|
@@ -4009,7 +4025,7 @@ $.fn.dropdown.settings = {
|
|
4009
4025
|
useLabels : true, // whether multiple select should filter currently active selections from choices
|
4010
4026
|
delimiter : ',', // when multiselect uses normal <input> the values will be delimited with this character
|
4011
4027
|
|
4012
|
-
showOnFocus :
|
4028
|
+
showOnFocus : false, // show menu on focus
|
4013
4029
|
allowReselection : false, // whether current value should trigger callbacks when reselected
|
4014
4030
|
allowTab : true, // add tabindex to element
|
4015
4031
|
allowCategorySelection : false, // allow elements with sub-menus to be selected
|
@@ -4024,6 +4040,8 @@ $.fn.dropdown.settings = {
|
|
4024
4040
|
|
4025
4041
|
headerDivider : true, // whether option headers should have an additional divider line underneath when converted from <select> <optgroup>
|
4026
4042
|
|
4043
|
+
collapseOnActionable : true, // whether the dropdown should collapse upon selection of an actionable item
|
4044
|
+
|
4027
4045
|
// label settings on multi-select
|
4028
4046
|
label: {
|
4029
4047
|
transition : 'scale',
|
@@ -4036,13 +4054,13 @@ $.fn.dropdown.settings = {
|
|
4036
4054
|
hide : 300,
|
4037
4055
|
show : 200,
|
4038
4056
|
search : 20,
|
4039
|
-
touch : 50
|
4040
4057
|
},
|
4041
4058
|
|
4042
4059
|
/* Callbacks */
|
4043
4060
|
onChange : function(value, text, $selected){},
|
4044
4061
|
onAdd : function(value, text, $selected){},
|
4045
4062
|
onRemove : function(value, text, $selected){},
|
4063
|
+
onActionable : function(value, text, $selected){},
|
4046
4064
|
onSearch : function(searchTerm){},
|
4047
4065
|
|
4048
4066
|
onLabelSelect : function($selectedLabels){},
|
@@ -4105,12 +4123,12 @@ $.fn.dropdown.settings = {
|
|
4105
4123
|
icon : 'icon', // optional icon name
|
4106
4124
|
iconClass : 'iconClass', // optional individual class for icon (for example to use flag instead)
|
4107
4125
|
class : 'class', // optional individual class for item/header
|
4108
|
-
divider : 'divider' // optional divider append for group headers
|
4126
|
+
divider : 'divider', // optional divider append for group headers
|
4127
|
+
actionable : 'actionable' // optional actionable item
|
4109
4128
|
},
|
4110
4129
|
|
4111
4130
|
keys : {
|
4112
4131
|
backspace : 8,
|
4113
|
-
delimiter : 188, // comma
|
4114
4132
|
deleteKey : 46,
|
4115
4133
|
enter : 13,
|
4116
4134
|
escape : 27,
|
@@ -4177,7 +4195,8 @@ $.fn.dropdown.settings = {
|
|
4177
4195
|
header : 'header',
|
4178
4196
|
divider : 'divider',
|
4179
4197
|
groupIcon : '',
|
4180
|
-
unfilterable : 'unfilterable'
|
4198
|
+
unfilterable : 'unfilterable',
|
4199
|
+
actionable : 'actionable'
|
4181
4200
|
}
|
4182
4201
|
|
4183
4202
|
};
|
@@ -4206,7 +4225,7 @@ $.fn.dropdown.settings.templates = {
|
|
4206
4225
|
}
|
4207
4226
|
;
|
4208
4227
|
if(shouldEscape.test(string)) {
|
4209
|
-
string = string.replace(/&(?![a-z0-9#]{1,
|
4228
|
+
string = string.replace(/&(?![a-z0-9#]{1,12};)/gi, "&");
|
4210
4229
|
return string.replace(badChars, escapedChar);
|
4211
4230
|
}
|
4212
4231
|
return string;
|
@@ -4216,7 +4235,8 @@ $.fn.dropdown.settings.templates = {
|
|
4216
4235
|
var
|
4217
4236
|
placeholder = select.placeholder || false,
|
4218
4237
|
html = '',
|
4219
|
-
escape = $.fn.dropdown.settings.templates.escape
|
4238
|
+
escape = $.fn.dropdown.settings.templates.escape,
|
4239
|
+
deQuote = $.fn.dropdown.settings.templates.deQuote
|
4220
4240
|
;
|
4221
4241
|
html += '<i class="dropdown icon"></i>';
|
4222
4242
|
if(placeholder) {
|
@@ -4225,7 +4245,7 @@ $.fn.dropdown.settings.templates = {
|
|
4225
4245
|
else {
|
4226
4246
|
html += '<div class="text"></div>';
|
4227
4247
|
}
|
4228
|
-
html += '<div class="'+className.menu+'">';
|
4248
|
+
html += '<div class="'+deQuote(className.menu)+'">';
|
4229
4249
|
html += $.fn.dropdown.settings.templates.menu(select, fields, preserveHTML,className);
|
4230
4250
|
html += '</div>';
|
4231
4251
|
return html;
|
@@ -4252,6 +4272,9 @@ $.fn.dropdown.settings.templates = {
|
|
4252
4272
|
maybeText = (option[fields.text])
|
4253
4273
|
? ' data-text="' + deQuote(option[fields.text],true) + '"'
|
4254
4274
|
: '',
|
4275
|
+
maybeActionable = (option[fields.actionable])
|
4276
|
+
? className.actionable+' '
|
4277
|
+
: '',
|
4255
4278
|
maybeDisabled = (option[fields.disabled])
|
4256
4279
|
? className.disabled+' '
|
4257
4280
|
: '',
|
@@ -4260,27 +4283,27 @@ $.fn.dropdown.settings.templates = {
|
|
4260
4283
|
: '',
|
4261
4284
|
hasDescription = (escape(option[fields.description] || '', preserveHTML) != '')
|
4262
4285
|
;
|
4263
|
-
html += '<div class="'+ maybeDisabled + maybeDescriptionVertical + (option[fields.class] ?
|
4286
|
+
html += '<div class="'+ deQuote(maybeActionable + maybeDisabled + maybeDescriptionVertical + (option[fields.class] ? option[fields.class] : className.item))+'" data-value="' + deQuote(option[fields.value],true) + '"' + maybeText + '>';
|
4264
4287
|
if (isMenu) {
|
4265
4288
|
html += '<i class="'+ (itemType.indexOf('left') !== -1 ? 'left' : '') + ' dropdown icon"></i>';
|
4266
4289
|
}
|
4267
4290
|
if(option[fields.image]) {
|
4268
|
-
html += '<img class="'+(option[fields.imageClass] ?
|
4291
|
+
html += '<img class="'+deQuote(option[fields.imageClass] ? option[fields.imageClass] : className.image)+'" src="' + deQuote(option[fields.image]) + '">';
|
4269
4292
|
}
|
4270
4293
|
if(option[fields.icon]) {
|
4271
|
-
html += '<i class="'+deQuote(option[fields.icon]
|
4294
|
+
html += '<i class="'+deQuote(option[fields.icon]+' '+(option[fields.iconClass] ? option[fields.iconClass] : className.icon))+'"></i>';
|
4272
4295
|
}
|
4273
4296
|
if(hasDescription){
|
4274
|
-
html += '<span class="'+ className.description +'">'+ escape(option[fields.description] || '', preserveHTML) + '</span>';
|
4275
|
-
html += (!isMenu) ? '<span class="'+ className.text + '">' : '';
|
4297
|
+
html += '<span class="'+ deQuote(className.description) +'">'+ escape(option[fields.description] || '', preserveHTML) + '</span>';
|
4298
|
+
html += (!isMenu) ? '<span class="'+ deQuote(className.text) + '">' : '';
|
4276
4299
|
}
|
4277
4300
|
if (isMenu) {
|
4278
|
-
html += '<span class="' + className.text + '">';
|
4301
|
+
html += '<span class="' + deQuote(className.text) + '">';
|
4279
4302
|
}
|
4280
4303
|
html += escape(option[fields.name] || '', preserveHTML);
|
4281
4304
|
if (isMenu) {
|
4282
4305
|
html += '</span>';
|
4283
|
-
html += '<div class="' + itemType + '">';
|
4306
|
+
html += '<div class="' + deQuote(itemType) + '">';
|
4284
4307
|
html += $.fn.dropdown.settings.templates.menu(option, fields, preserveHTML, className);
|
4285
4308
|
html += '</div>';
|
4286
4309
|
} else if(hasDescription){
|
@@ -4289,18 +4312,18 @@ $.fn.dropdown.settings.templates = {
|
|
4289
4312
|
html += '</div>';
|
4290
4313
|
} else if (itemType === 'header') {
|
4291
4314
|
var groupName = escape(option[fields.name] || '', preserveHTML),
|
4292
|
-
groupIcon = option[fields.icon] ?
|
4315
|
+
groupIcon = deQuote(option[fields.icon] ? option[fields.icon] : className.groupIcon)
|
4293
4316
|
;
|
4294
4317
|
if(groupName !== '' || groupIcon !== '') {
|
4295
|
-
html += '<div class="' + (option[fields.class] ?
|
4318
|
+
html += '<div class="' + deQuote(option[fields.class] ? option[fields.class] : className.header) + '">';
|
4296
4319
|
if (groupIcon !== '') {
|
4297
|
-
html += '<i class="' + groupIcon + ' ' + (option[fields.iconClass] ?
|
4320
|
+
html += '<i class="' + deQuote(groupIcon + ' ' + (option[fields.iconClass] ? option[fields.iconClass] : className.icon)) + '"></i>';
|
4298
4321
|
}
|
4299
4322
|
html += groupName;
|
4300
4323
|
html += '</div>';
|
4301
4324
|
}
|
4302
4325
|
if(option[fields.divider]){
|
4303
|
-
html += '<div class="'+className.divider+'"></div>';
|
4326
|
+
html += '<div class="'+deQuote(className.divider)+'"></div>';
|
4304
4327
|
}
|
4305
4328
|
}
|
4306
4329
|
});
|
@@ -4310,8 +4333,10 @@ $.fn.dropdown.settings.templates = {
|
|
4310
4333
|
// generates label for multiselect
|
4311
4334
|
label: function(value, text, preserveHTML, className) {
|
4312
4335
|
var
|
4313
|
-
escape = $.fn.dropdown.settings.templates.escape
|
4314
|
-
|
4336
|
+
escape = $.fn.dropdown.settings.templates.escape,
|
4337
|
+
deQuote = $.fn.dropdown.settings.templates.deQuote
|
4338
|
+
;
|
4339
|
+
return escape(text,preserveHTML) + '<i class="'+deQuote(className.delete)+' icon"></i>';
|
4315
4340
|
},
|
4316
4341
|
|
4317
4342
|
|