j1-template 2024.1.5 → 2024.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/themes/j1/layouts/content_generator_page.html +0 -34
- data/_includes/themes/j1/modules/searcher/generator.html +4 -1
- data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +59 -56
- data/assets/data/authclient.html +1 -8
- data/assets/data/banner.html +1 -7
- data/assets/data/fab.html +2 -13
- data/assets/data/footer.html +0 -3
- data/assets/data/galeries.html +2 -13
- data/assets/data/gemini-ui.html +74 -21
- data/assets/data/iframes.html +1 -4
- data/assets/data/masonry.html +1 -13
- data/assets/data/masterslider.html +10 -21
- data/assets/data/menu.html +6 -14
- data/assets/data/mmenu.html +6 -5
- data/assets/data/mmenu_toc.html +2 -1
- data/assets/data/panel.html +4 -11
- data/assets/data/particles.yml +8 -8
- data/assets/data/quicklinks.html +4 -23
- data/assets/data/rtext_resizer.html +3 -1
- data/assets/data/slick.html +9 -11
- data/assets/data/translator.html +0 -1
- data/assets/themes/j1/adapter/js/advertising.js +141 -172
- data/assets/themes/j1/adapter/js/algolia.js +61 -54
- data/assets/themes/j1/adapter/js/analytics.js +67 -47
- data/assets/themes/j1/adapter/js/asciidoctor.js +32 -20
- data/assets/themes/j1/adapter/js/attic.js +75 -69
- data/assets/themes/j1/adapter/js/bmd.js +195 -177
- data/assets/themes/j1/adapter/js/carousel.js +786 -761
- data/assets/themes/j1/adapter/js/chatbot.js +77 -35
- data/assets/themes/j1/adapter/js/clipboard.js +66 -49
- data/assets/themes/j1/adapter/js/comments.js +92 -70
- data/assets/themes/j1/adapter/js/cookieConsent.js +466 -462
- data/assets/themes/j1/adapter/js/customFunctions.js +52 -35
- data/assets/themes/j1/adapter/js/customModule.js +56 -46
- data/assets/themes/j1/adapter/js/docsearch.js +54 -34
- data/assets/themes/j1/adapter/js/dropdowns.js +65 -52
- data/assets/themes/j1/adapter/js/fab.js +123 -109
- data/assets/themes/j1/adapter/js/gallery.js +494 -476
- data/assets/themes/j1/adapter/js/gemini.js +933 -299
- data/assets/themes/j1/adapter/js/iconPicker.js +255 -235
- data/assets/themes/j1/adapter/js/iconPickerPage.js +279 -0
- data/assets/themes/j1/adapter/js/iframer.js +81 -61
- data/assets/themes/j1/adapter/js/j1.js +3285 -3222
- data/assets/themes/j1/adapter/js/lazyLoader.js +241 -222
- data/assets/themes/j1/adapter/js/lightbox.js +241 -241
- data/assets/themes/j1/adapter/js/logger.js +77 -66
- data/assets/themes/j1/adapter/js/lunr.js +688 -86
- data/assets/themes/j1/adapter/js/masonry.js +426 -411
- data/assets/themes/j1/adapter/js/masterslider.js +526 -527
- data/assets/themes/j1/adapter/js/mmenu.js +101 -66
- data/assets/themes/j1/adapter/js/navigator.js +291 -356
- data/assets/themes/j1/adapter/js/particles.js +61 -40
- data/assets/themes/j1/adapter/js/rangeSlider.js +65 -48
- data/assets/themes/j1/adapter/js/rouge.js +287 -269
- data/assets/themes/j1/adapter/js/rtable.js +309 -293
- data/assets/themes/j1/adapter/js/rtextResizer.js +57 -44
- data/assets/themes/j1/adapter/js/scroller.js +170 -133
- data/assets/themes/j1/adapter/js/slick.js +487 -485
- data/assets/themes/j1/adapter/js/slimSelect.js +290 -0
- data/assets/themes/j1/adapter/js/speak2me.js +124 -128
- data/assets/themes/j1/adapter/js/themeToggler.js +280 -260
- data/assets/themes/j1/adapter/js/{themer.js → themes.js} +145 -113
- data/assets/themes/j1/adapter/js/toccer.js +87 -54
- data/assets/themes/j1/adapter/js/translator.js +73 -70
- data/assets/themes/j1/adapter/js/waves.js +74 -58
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +29 -11
- data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +2 -2
- data/assets/themes/j1/core/js/template.js +474 -420
- data/assets/themes/j1/core/js/template.min.js +7 -7
- data/assets/themes/j1/core/js/template.min.js.map +1 -1
- data/assets/themes/j1/modules/carousel/css/theme/uno.css +4 -4
- data/assets/themes/j1/modules/carousel/css/theme/uno.min.css +1 -1
- data/assets/themes/j1/modules/clipboard/js/clipboard.js +0 -1
- data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +4 -4
- data/assets/themes/j1/modules/iconPicker/css/theme/uno.css +58 -0
- data/assets/themes/j1/modules/iconPicker/css/theme/uno.min.css +16 -0
- data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.0.js +493 -0
- data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.js +7 -7
- data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +4 -4
- data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.min.js +2 -10
- data/assets/themes/j1/modules/lunr/css/j1.css +12 -6
- data/assets/themes/j1/modules/lunr/css/j1.min.css +1 -1
- data/assets/themes/j1/modules/lunr/js/j1.js +46 -43
- data/assets/themes/j1/modules/lunr/js/j1.min.js +1 -1
- data/assets/themes/j1/modules/masterslider/js/masterslider.js +1 -1
- data/assets/themes/j1/modules/scroller/js/scroller.js +64 -74
- data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
- data/assets/themes/j1/modules/slick/slider/css/theme/uno.css +4 -4
- data/assets/themes/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
- data/assets/themes/j1/modules/slimSelect/js/select.js +1865 -1821
- data/assets/themes/j1/modules/slimSelect/js/select.min.js +2 -1
- data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +87 -89
- data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
- data/assets/themes/j1/modules/videojs/js/plugins/vm/api/player.min.js +5 -7
- data/assets/themes/j1/modules/videojs/js/plugins/vm/api/v2.20.1/player.min.js +23 -0
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +2 -2
- data/lib/starter_web/README.md +5 -5
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/blocks/_panel.yml +775 -0
- data/lib/starter_web/_data/blocks/panel.yml +53 -53
- data/lib/starter_web/_data/j1_config.yml +3 -2
- data/lib/starter_web/_data/layouts/default.yml +0 -2
- data/lib/starter_web/_data/modules/_scroller.yml +102 -0
- data/lib/starter_web/_data/modules/carousel.yml +3 -3
- data/lib/starter_web/_data/modules/defaults/attics.yml +5 -5
- data/lib/starter_web/_data/modules/defaults/docsearch.yml +1 -1
- data/lib/starter_web/_data/modules/defaults/gemini.yml +204 -46
- data/lib/starter_web/_data/modules/defaults/{iconPicker.yml → icon_picker.yml} +6 -12
- data/lib/starter_web/_data/modules/defaults/lunr.yml +20 -5
- data/lib/starter_web/_data/modules/defaults/masterslider.yml +4 -4
- data/lib/starter_web/_data/modules/defaults/navigator.yml +20 -24
- data/lib/starter_web/_data/modules/defaults/particles.yml +3 -3
- data/lib/starter_web/_data/modules/defaults/slim_select.yml +54 -0
- data/lib/starter_web/_data/modules/defaults/{themer.yml → themes.yml} +171 -171
- data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
- data/lib/starter_web/_data/modules/gallery.yml +33 -38
- data/lib/starter_web/_data/modules/gemini.yml +42 -3
- data/lib/starter_web/_data/modules/{iconPicker.yml → icon_picker.yml} +31 -3
- data/lib/starter_web/_data/modules/lunr.yml +12 -1
- data/lib/starter_web/_data/modules/masonry.yml +37 -38
- data/lib/starter_web/_data/modules/masterslider.yml +78 -95
- data/lib/starter_web/_data/modules/navigator_menu.yml +12 -20
- data/lib/starter_web/_data/modules/particles.yml +3 -3
- data/lib/starter_web/_data/modules/scroller.yml +3 -3
- data/lib/starter_web/_data/modules/slim_select.yml +110 -0
- data/lib/starter_web/_data/modules/{themer.yml → themes.yml} +4 -4
- data/lib/starter_web/_data/resources.yml +57 -47
- data/lib/starter_web/_data/templates/feed.xml +1 -1
- data/lib/starter_web/_includes/attributes.asciidoc +354 -355
- data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
- data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +45 -0
- data/lib/starter_web/_plugins/index/lunr.rb +1 -1
- data/lib/starter_web/collections/asciidoc_skeletons/simple-post/_posts/yyyy-mm-dd-your-post-name.asciidoc +5 -2
- data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +3 -3
- data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +9 -9
- data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +4 -4
- data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +3 -2
- data/lib/starter_web/collections/posts/public/featured/_posts/2023-10-18-url-types.adoc +12 -12
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/about/features.adoc +1 -1
- data/lib/starter_web/pages/public/about/reporting_issues.adoc +1 -0
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/attributes.asciidoc +44 -44
- data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -0
- data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/_includes/attributes.asciidoc +12 -12
- data/lib/starter_web/pages/public/blog/navigator/archive/allview.html +1 -1
- data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/attributes.asciidoc +42 -28
- data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/highlghter_rouge.adoc +1 -0
- data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/lunr_search.adoc +1 -0
- data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_audio_video.adoc +18 -2
- data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_images.adoc +500 -507
- data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +6 -11
- data/lib/starter_web/pages/public/legal/en/200_impress.adoc +4 -11
- data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +5 -12
- data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +5 -10
- data/lib/starter_web/pages/public/tools/previewer/_includes/attributes.asciidoc +10 -9
- data/lib/starter_web/pages/public/tools/previewer/preview_bootstrap_theme.adoc +77 -75
- metadata +50 -46
- data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/attributes.asciidoc +0 -47
- data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
- data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/readme +0 -0
- data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/tables/readme +0 -0
- data/lib/starter_web/pages/public/manuals/integrations/gemini/gemini.adoc +0 -525
- data/lib/starter_web/pages/public/manuals/integrations/gemini/security.asccidoc +0 -274
- data/lib/starter_web/pages/public/manuals/integrations/gemini/security.hrml +0 -560
- /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_biography.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_fantasy.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_romance.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/jekyll_collections.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/viewer_all_books.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/100_gistblock.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_info.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_central_success.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_left_info.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_right_success.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_info.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_left_info.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_right_success.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_bootstrap.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_rouge.asciidoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/asciidoc_extensions.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/bootstrap_themes.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/icon_fonts.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/modal_extentions.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/responsive_tables.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/typography.adoc +0 -0
- /data/lib/starter_web/pages/public/{legal/learn → learn}/where_to_go.adoc +0 -0
@@ -5,4 +5,5 @@
|
|
5
5
|
* Licensed MIT © Brian Voelker
|
6
6
|
* https://github.com/brianvoe/slim-select/blob/master/LICENSE
|
7
7
|
*/
|
8
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).SlimSelect=t()}(this,function(){"use strict";function e(){return Math.random().toString(36).substring(2,10)}function t(e,t=50,s=!1){let i;return function(...n){const a=self,l=s&&!i;clearTimeout(i),i=setTimeout(()=>{i=null,s||e.apply(a,n)},t),l&&e.apply(a,n)}}function s(e,t){return JSON.stringify(e)===JSON.stringify(t)}class i{constructor(t){this.id="",this.style="",this.class=[],this.isMultiple=!1,this.isOpen=!1,this.isFullOpen=!1,this.intervalMove=null,t||(t={}),this.id="ss-"+e(),this.style=t.style||"",this.class=t.class||[],this.disabled=void 0!==t.disabled&&t.disabled,this.alwaysOpen=void 0!==t.alwaysOpen&&t.alwaysOpen,this.showSearch=void 0===t.showSearch||t.showSearch,this.searchPlaceholder=t.searchPlaceholder||"Search",this.searchText=t.searchText||"No Results",this.searchingText=t.searchingText||"Searching...",this.searchHighlight=void 0!==t.searchHighlight&&t.searchHighlight,this.closeOnSelect=void 0===t.closeOnSelect||t.closeOnSelect,this.contentLocation=t.contentLocation||document.body,this.contentPosition=t.contentPosition||"absolute",this.openPosition=t.openPosition||"auto",this.placeholderText=void 0!==t.placeholderText?t.placeholderText:"Select Value",this.allowDeselect=void 0!==t.allowDeselect&&t.allowDeselect,this.hideSelected=void 0!==t.hideSelected&&t.hideSelected,this.showOptionTooltips=void 0!==t.showOptionTooltips&&t.showOptionTooltips,this.minSelected=t.minSelected||0,this.maxSelected=t.maxSelected||1e3,this.timeoutDelay=t.timeoutDelay||200,this.maxValuesShown=t.maxValuesShown||20,this.maxValuesMessage=t.maxValuesMessage||"{number} selected"}}class n{constructor(t){if(this.id=t.id&&""!==t.id?t.id:e(),this.label=t.label||"",this.selectAll=void 0!==t.selectAll&&t.selectAll,this.selectAllText=t.selectAllText||"Select All",this.closable=t.closable||"off",this.options=[],t.options)for(const e of t.options)this.options.push(new a(e))}}class a{constructor(t){this.id=t.id&&""!==t.id?t.id:e(),this.value=void 0===t.value?t.text:t.value,this.text=t.text||"",this.html=t.html||"",this.selected=void 0!==t.selected&&t.selected,this.display=void 0===t.display||t.display,this.disabled=void 0!==t.disabled&&t.disabled,this.mandatory=void 0!==t.mandatory&&t.mandatory,this.placeholder=void 0!==t.placeholder&&t.placeholder,this.class=t.class||"",this.style=t.style||"",this.data=t.data||{}}}class l{constructor(e,t){this.selectType="single",this.data=[],this.selectType=e,this.setData(t)}validateDataArray(e){if(!Array.isArray(e))return new Error("Data must be an array");for(let t of e){if(!(t instanceof n||"label"in t))return t instanceof a||"text"in t?this.validateOption(t):new Error("Data object must be a valid optgroup or option");if(!("label"in t))return new Error("Optgroup must have a label");if("options"in t&&t.options)for(let e of t.options)return this.validateOption(e)}return null}validateOption(e){return"text"in e?null:new Error("Option must have a text")}partialToFullData(e){let t=[];return e.forEach(e=>{if(e instanceof n||"label"in e){let s=[];"options"in e&&e.options&&e.options.forEach(e=>{s.push(new a(e))}),s.length>0&&t.push(new n(e))}(e instanceof a||"text"in e)&&t.push(new a(e))}),t}setData(e){this.data=this.partialToFullData(e),"single"===this.selectType&&this.setSelectedBy("value",this.getSelected())}getData(){return this.filter(null,!0)}getDataOptions(){return this.filter(null,!1)}addOption(e){this.setData(this.getData().concat(new a(e)))}setSelectedBy(e,t){let s=null,i=!1;for(let l of this.data){if(l instanceof n)for(let n of l.options)s||(s=n),n.selected=!i&&t.includes(n[e]),n.selected&&"single"===this.selectType&&(i=!0);l instanceof a&&(s||(s=l),l.selected=!i&&t.includes(l[e]),l.selected&&"single"===this.selectType&&(i=!0))}"single"===this.selectType&&s&&!i&&(s.selected=!0)}getSelected(){let e=this.getSelectedOptions(),t=[];return e.forEach(e=>{t.push(e.value)}),t}getSelectedOptions(){return this.filter(e=>e.selected,!1)}getSelectedIDs(){let e=this.getSelectedOptions(),t=[];return e.forEach(e=>{t.push(e.id)}),t}getOptgroupByID(e){for(let t of this.data)if(t instanceof n&&t.id===e)return t;return null}getOptionByID(e){let t=this.filter(t=>t.id===e,!1);return t.length?t[0]:null}search(e,t){return""===(e=e.trim())?this.getData():this.filter(s=>t(s,e),!0)}filter(e,t){const s=[];return this.data.forEach(i=>{if(i instanceof n){let l=[];if(i.options.forEach(i=>{e&&!e(i)||(t?l.push(new a(i)):s.push(new a(i)))}),l.length>0){let e=new n(i);e.options=l,s.push(e)}}i instanceof a&&(e&&!e(i)||s.push(new a(i)))}),s}getSelectType(){return this.selectType}}class o{constructor(e,t,s){this.classes={main:"ss-main",placeholder:"ss-placeholder",values:"ss-values",single:"ss-single",max:"ss-max",value:"ss-value",valueText:"ss-value-text",valueDelete:"ss-value-delete",valueOut:"ss-value-out",deselect:"ss-deselect",deselectPath:"M10,10 L90,90 M10,90 L90,10",arrow:"ss-arrow",arrowClose:"M10,30 L50,70 L90,30",arrowOpen:"M10,70 L50,30 L90,70",content:"ss-content",openAbove:"ss-open-above",openBelow:"ss-open-below",search:"ss-search",searchHighlighter:"ss-search-highlight",searching:"ss-searching",addable:"ss-addable",addablePath:"M50,10 L50,90 M10,50 L90,50",list:"ss-list",optgroup:"ss-optgroup",optgroupLabel:"ss-optgroup-label",optgroupLabelText:"ss-optgroup-label-text",optgroupActions:"ss-optgroup-actions",optgroupSelectAll:"ss-selectall",optgroupSelectAllBox:"M60,10 L10,10 L10,90 L90,90 L90,50",optgroupSelectAllCheck:"M30,45 L50,70 L90,10",optgroupClosable:"ss-closable",option:"ss-option",optionDelete:"M10,10 L90,90 M10,90 L90,10",highlighted:"ss-highlighted",open:"ss-open",close:"ss-close",selected:"ss-selected",error:"ss-error",disabled:"ss-disabled",hide:"ss-hide"},this.store=t,this.settings=e,this.callbacks=s,this.main=this.mainDiv(),this.content=this.contentDiv(),this.updateClassStyles(),this.updateAriaAttributes(),this.settings.contentLocation.appendChild(this.content.main)}enable(){this.main.main.classList.remove(this.classes.disabled),this.content.search.input.disabled=!1}disable(){this.main.main.classList.add(this.classes.disabled),this.content.search.input.disabled=!0}open(){this.main.arrow.path.setAttribute("d",this.classes.arrowOpen),this.main.main.classList.add("up"===this.settings.openPosition?this.classes.openAbove:this.classes.openBelow),this.main.main.setAttribute("aria-expanded","true"),this.moveContent();const e=this.store.getSelectedOptions();if(e.length){const t=e[e.length-1].id,s=this.content.list.querySelector('[data-id="'+t+'"]');s&&this.ensureElementInView(this.content.list,s)}}close(){this.main.main.classList.remove(this.classes.openAbove),this.main.main.classList.remove(this.classes.openBelow),this.main.main.setAttribute("aria-expanded","false"),this.content.main.classList.remove(this.classes.openAbove),this.content.main.classList.remove(this.classes.openBelow),this.main.arrow.path.setAttribute("d",this.classes.arrowClose)}updateClassStyles(){if(this.main.main.className="",this.main.main.removeAttribute("style"),this.content.main.className="",this.content.main.removeAttribute("style"),this.main.main.classList.add(this.classes.main),this.content.main.classList.add(this.classes.content),""!==this.settings.style&&(this.main.main.style.cssText=this.settings.style,this.content.main.style.cssText=this.settings.style),this.settings.class.length)for(const e of this.settings.class)""!==e.trim()&&(this.main.main.classList.add(e.trim()),this.content.main.classList.add(e.trim()));"relative"===this.settings.contentPosition&&this.content.main.classList.add("ss-"+this.settings.contentPosition)}updateAriaAttributes(){this.main.main.role="combobox",this.main.main.setAttribute("aria-haspopup","listbox"),this.main.main.setAttribute("aria-controls",this.content.main.id),this.main.main.setAttribute("aria-expanded","false"),this.content.main.setAttribute("role","listbox")}mainDiv(){var e;const t=document.createElement("div");t.dataset.id=this.settings.id,t.id=this.settings.id,t.tabIndex=0,t.onkeydown=(e=>{switch(e.key){case"ArrowUp":case"ArrowDown":return this.callbacks.open(),"ArrowDown"===e.key?this.highlight("down"):this.highlight("up"),!1;case"Tab":return this.callbacks.close(),!0;case"Enter":case" ":this.callbacks.open();const t=this.content.list.querySelector("."+this.classes.highlighted);return t&&t.click(),!1;case"Escape":return this.callbacks.close(),!1}}),t.onclick=(e=>{this.settings.disabled||(this.settings.isOpen?this.callbacks.close():this.callbacks.open())});const s=document.createElement("div");s.classList.add(this.classes.values),t.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.deselect);const n=null===(e=this.store)||void 0===e?void 0:e.getSelectedOptions();!this.settings.allowDeselect||this.settings.isMultiple&&n&&n.length<=0?i.classList.add(this.classes.hide):i.classList.remove(this.classes.hide),i.onclick=(e=>{if(e.stopPropagation(),this.settings.disabled)return;let t=!0;const s=this.store.getSelectedOptions(),i=[];this.callbacks.beforeChange&&(t=!0===this.callbacks.beforeChange(i,s)),t&&(this.settings.isMultiple?(this.callbacks.setSelected([],!1),this.updateDeselectAll()):this.callbacks.setSelected([""],!1),this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(i))});const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.deselectPath),a.appendChild(l),i.appendChild(a),t.appendChild(i);const o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.classList.add(this.classes.arrow),o.setAttribute("viewBox","0 0 100 100");const c=document.createElementNS("http://www.w3.org/2000/svg","path");return c.setAttribute("d",this.classes.arrowClose),this.settings.alwaysOpen&&o.classList.add(this.classes.hide),o.appendChild(c),t.appendChild(o),{main:t,values:s,deselect:{main:i,svg:a,path:l},arrow:{main:o,path:c}}}mainFocus(e){"click"!==e&&this.main.main.focus({preventScroll:!0})}placeholder(){const e=this.store.filter(e=>e.placeholder,!1);let t=this.settings.placeholderText;e.length&&(""!==e[0].html?t=e[0].html:""!==e[0].text&&(t=e[0].text));const s=document.createElement("div");return s.classList.add(this.classes.placeholder),s.innerHTML=t,s}renderValues(){this.settings.isMultiple?this.renderMultipleValues():this.renderSingleValue()}renderSingleValue(){const e=this.store.filter(e=>e.selected&&!e.placeholder,!1),t=e.length>0?e[0]:null;if(t){const e=document.createElement("div");e.classList.add(this.classes.single),t.html?e.innerHTML=t.html:e.innerText=t.text,this.main.values.innerHTML=e.outerHTML}else this.main.values.innerHTML=this.placeholder().outerHTML;this.settings.allowDeselect&&e.length?this.main.deselect.main.classList.remove(this.classes.hide):this.main.deselect.main.classList.add(this.classes.hide)}renderMultipleValues(){let e=this.main.values.childNodes,t=this.store.filter(e=>e.selected&&e.display,!1);if(0===t.length)return void(this.main.values.innerHTML=this.placeholder().outerHTML);{const e=this.main.values.querySelector("."+this.classes.placeholder);e&&e.remove()}if(t.length>this.settings.maxValuesShown){const e=document.createElement("div");return e.classList.add(this.classes.max),e.textContent=this.settings.maxValuesMessage.replace("{number}",t.length.toString()),void(this.main.values.innerHTML=e.outerHTML)}{const e=this.main.values.querySelector("."+this.classes.max);e&&e.remove()}let s=[];for(let i=0;i<e.length;i++){const n=e[i],a=n.getAttribute("data-id");if(a){t.filter(e=>e.id===a,!1).length||s.push(n)}}for(const e of s)e.classList.add(this.classes.valueOut),setTimeout(()=>{this.main.values.hasChildNodes()&&this.main.values.contains(e)&&this.main.values.removeChild(e)},100);e=this.main.values.childNodes;for(let s=0;s<t.length;s++){let i=!0;for(let n=0;n<e.length;n++)t[s].id===String(e[n].dataset.id)&&(i=!1);i&&(0===e.length?this.main.values.appendChild(this.multipleValue(t[s])):0===s?this.main.values.insertBefore(this.multipleValue(t[s]),e[s]):e[s-1].insertAdjacentElement("afterend",this.multipleValue(t[s])))}this.updateDeselectAll()}multipleValue(e){const t=document.createElement("div");t.classList.add(this.classes.value),t.dataset.id=e.id;const s=document.createElement("div");if(s.classList.add(this.classes.valueText),s.innerText=e.text,t.appendChild(s),!e.mandatory){const s=document.createElement("div");s.classList.add(this.classes.valueDelete),s.onclick=(t=>{if(t.preventDefault(),t.stopPropagation(),this.settings.disabled)return;let s=!0;const i=this.store.getSelectedOptions(),l=i.filter(t=>t.selected&&t.id!==e.id,!0);if(!(this.settings.minSelected&&l.length<this.settings.minSelected)&&(this.callbacks.beforeChange&&(s=!0===this.callbacks.beforeChange(l,i)),s)){let e=[];for(const t of l){if(t instanceof n)for(const s of t.options)e.push(s.value);t instanceof a&&e.push(t.value)}this.callbacks.setSelected(e,!1),this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(l),this.updateDeselectAll()}});const i=document.createElementNS("http://www.w3.org/2000/svg","svg");i.setAttribute("viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.optionDelete),i.appendChild(l),s.appendChild(i),t.appendChild(s)}return t}contentDiv(){const e=document.createElement("div");e.dataset.id=this.settings.id,e.id=this.settings.id;const t=this.searchDiv();e.appendChild(t.main);const s=this.listDiv();return e.appendChild(s),{main:e,search:t,list:s}}moveContent(){"relative"!==this.settings.contentPosition&&"down"!==this.settings.openPosition?"up"!==this.settings.openPosition?"up"===this.putContent()?this.moveContentAbove():this.moveContentBelow():this.moveContentAbove():this.moveContentBelow()}searchDiv(){const e=document.createElement("div"),s=document.createElement("input"),i=document.createElement("div");e.classList.add(this.classes.search);const n={main:e,input:s};if(this.settings.showSearch||(e.classList.add(this.classes.hide),s.readOnly=!0),s.type="search",s.placeholder=this.settings.searchPlaceholder,s.tabIndex=-1,s.setAttribute("aria-label",this.settings.searchPlaceholder),s.setAttribute("autocapitalize","off"),s.setAttribute("autocomplete","off"),s.setAttribute("autocorrect","off"),s.oninput=t(e=>{this.callbacks.search(e.target.value)},100),s.onkeydown=(e=>{switch(e.key){case"ArrowUp":case"ArrowDown":return"ArrowDown"===e.key?this.highlight("down"):this.highlight("up"),!1;case"Tab":return this.callbacks.close(),!0;case"Escape":return this.callbacks.close(),!1;case"Enter":case" ":if(this.callbacks.addable&&e.ctrlKey)return i.click(),!1;{const e=this.content.list.querySelector("."+this.classes.highlighted);if(e)return e.click(),!1}return!0}}),e.appendChild(s),this.callbacks.addable){i.classList.add(this.classes.addable);const t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("viewBox","0 0 100 100");const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d",this.classes.addablePath),t.appendChild(s),i.appendChild(t),i.onclick=(e=>{if(e.preventDefault(),e.stopPropagation(),!this.callbacks.addable)return;const t=this.content.search.input.value.trim();if(""===t)return void this.content.search.input.focus();const s=e=>{let t=new a(e);if(this.callbacks.addOption(t),this.settings.isMultiple){let e=this.store.getSelected();e.push(t.value),this.callbacks.setSelected(e,!0)}else this.callbacks.setSelected([t.value],!0);this.callbacks.search(""),this.settings.closeOnSelect&&setTimeout(()=>{this.callbacks.close()},100)},i=this.callbacks.addable(t);!1!==i&&null!=i&&(i instanceof Promise?i.then(e=>{s("string"==typeof e?{text:e,value:e}:e)}):s("string"==typeof i?{text:i,value:i}:i))}),e.appendChild(i),n.addable={main:i,svg:t,path:s}}return n}searchFocus(){this.content.search.input.focus()}getOptions(e=!1,t=!1,s=!1){let i="."+this.classes.option;return e&&(i+=":not(."+this.classes.placeholder+")"),t&&(i+=":not(."+this.classes.disabled+")"),s&&(i+=":not(."+this.classes.hide+")"),Array.from(this.content.list.querySelectorAll(i))}highlight(e){const t=this.getOptions(!0,!0,!0);if(0!==t.length)if(1!==t.length||t[0].classList.contains(this.classes.highlighted)){for(let s=0;s<t.length;s++)if(t[s].classList.contains(this.classes.highlighted)){const i=t[s];i.classList.remove(this.classes.highlighted);const n=i.parentElement;if(n&&n.classList.contains(this.classes.open)){const e=n.querySelector("."+this.classes.optgroupLabel);e&&e.click()}let a=t["down"===e?s+1<t.length?s+1:0:s-1>=0?s-1:t.length-1];a.classList.add(this.classes.highlighted),this.ensureElementInView(this.content.list,a);const l=a.parentElement;if(l&&l.classList.contains(this.classes.close)){const e=l.querySelector("."+this.classes.optgroupLabel);e&&e.click()}return}t["down"===e?0:t.length-1].classList.add(this.classes.highlighted),this.ensureElementInView(this.content.list,t["down"===e?0:t.length-1])}else t[0].classList.add(this.classes.highlighted)}listDiv(){const e=document.createElement("div");return e.classList.add(this.classes.list),e}renderError(e){this.content.list.innerHTML="";const t=document.createElement("div");t.classList.add(this.classes.error),t.textContent=e,this.content.list.appendChild(t)}renderSearching(){this.content.list.innerHTML="";const e=document.createElement("div");e.classList.add(this.classes.searching),e.textContent=this.settings.searchingText,this.content.list.appendChild(e)}renderOptions(e){if(this.content.list.innerHTML="",0===e.length){const e=document.createElement("div");return e.classList.add(this.classes.search),e.innerHTML=this.settings.searchText,void this.content.list.appendChild(e)}for(const t of e){if(t instanceof n){const e=document.createElement("div");e.classList.add(this.classes.optgroup);const s=document.createElement("div");s.classList.add(this.classes.optgroupLabel),e.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.optgroupLabelText),i.textContent=t.label,s.appendChild(i);const n=document.createElement("div");if(n.classList.add(this.classes.optgroupActions),s.appendChild(n),this.settings.isMultiple&&t.selectAll){const e=document.createElement("div");e.classList.add(this.classes.optgroupSelectAll);let s=!0;for(const e of t.options)if(!e.selected){s=!1;break}s&&e.classList.add(this.classes.selected);const i=document.createElement("span");i.textContent=t.selectAllText,e.appendChild(i);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100"),e.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.optgroupSelectAllBox),a.appendChild(l);const o=document.createElementNS("http://www.w3.org/2000/svg","path");o.setAttribute("d",this.classes.optgroupSelectAllCheck),a.appendChild(o),e.addEventListener("click",e=>{e.preventDefault(),e.stopPropagation();const i=this.store.getSelected();if(s){const e=i.filter(e=>{for(const s of t.options)if(e===s.value)return!1;return!0});this.callbacks.setSelected(e,!0)}else{const e=i.concat(t.options.map(e=>e.value));for(const e of t.options)this.store.getOptionByID(e.id)||this.callbacks.addOption(e);this.callbacks.setSelected(e,!0)}}),n.appendChild(e)}if("off"!==t.closable){const i=document.createElement("div");i.classList.add(this.classes.optgroupClosable);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100"),a.classList.add(this.classes.arrow),i.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");a.appendChild(l),t.options.some(e=>e.selected)||""!==this.content.search.input.value.trim()?(i.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):"open"===t.closable?(e.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):"close"===t.closable&&(e.classList.add(this.classes.close),l.setAttribute("d",this.classes.arrowClose)),s.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation(),e.classList.contains(this.classes.close)?(e.classList.remove(this.classes.close),e.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):(e.classList.remove(this.classes.open),e.classList.add(this.classes.close),l.setAttribute("d",this.classes.arrowClose))}),n.appendChild(i)}e.appendChild(s);for(const s of t.options)e.appendChild(this.option(s));this.content.list.appendChild(e)}t instanceof a&&this.content.list.appendChild(this.option(t))}}option(e){if(e.placeholder){const e=document.createElement("div");return e.classList.add(this.classes.option),e.classList.add(this.classes.hide),e}const t=document.createElement("div");return t.dataset.id=e.id,t.id=e.id,t.classList.add(this.classes.option),t.setAttribute("role","option"),e.class&&e.class.split(" ").forEach(e=>{t.classList.add(e)}),e.style&&(t.style.cssText=e.style),this.settings.searchHighlight&&""!==this.content.search.input.value.trim()?t.innerHTML=this.highlightText(""!==e.html?e.html:e.text,this.content.search.input.value,this.classes.searchHighlighter):""!==e.html?t.innerHTML=e.html:t.textContent=e.text,this.settings.showOptionTooltips&&t.textContent&&t.setAttribute("title",t.textContent),e.display||t.classList.add(this.classes.hide),e.disabled&&t.classList.add(this.classes.disabled),e.selected&&this.settings.hideSelected&&t.classList.add(this.classes.hide),e.selected?(t.classList.add(this.classes.selected),t.setAttribute("aria-selected","true"),this.main.main.setAttribute("aria-activedescendant",t.id)):(t.classList.remove(this.classes.selected),t.setAttribute("aria-selected","false")),t.addEventListener("click",t=>{t.preventDefault(),t.stopPropagation();const s=this.store.getSelected(),i=t.currentTarget,n=String(i.dataset.id);if(e.disabled||e.selected&&!this.settings.allowDeselect)return;if(this.settings.isMultiple&&this.settings.maxSelected<=s.length&&!e.selected||this.settings.isMultiple&&this.settings.minSelected>=s.length&&e.selected)return;let a=!1;const l=this.store.getSelectedOptions();let o=[];this.settings.isMultiple&&(o=e.selected?l.filter(e=>e.id!==n):l.concat(e)),this.settings.isMultiple||(o=e.selected?[]:[e]),this.callbacks.beforeChange||(a=!0),this.callbacks.beforeChange&&(a=!1!==this.callbacks.beforeChange(o,l)),a&&(this.store.getOptionByID(n)||this.callbacks.addOption(e),this.callbacks.setSelected(o.map(e=>e.value),!1),this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(o))}),t}destroy(){this.main.main.remove(),this.content.main.remove()}highlightText(e,t,s){let i=e;const n=new RegExp("("+t.trim()+")(?![^<]*>[^<>]*</)","i");if(!e.match(n))return e;const a=e.match(n).index,l=a+e.match(n)[0].toString().length,o=e.substring(a,l);return i=i.replace(n,`<mark class="${s}">${o}</mark>`)}moveContentAbove(){const e=this.main.main.offsetHeight,t=this.content.main.offsetHeight;this.main.main.classList.remove(this.classes.openBelow),this.main.main.classList.add(this.classes.openAbove),this.content.main.classList.remove(this.classes.openBelow),this.content.main.classList.add(this.classes.openAbove);const s=this.main.main.getBoundingClientRect();this.content.main.style.margin="-"+(e+t-1)+"px 0px 0px 0px",this.content.main.style.top=s.top+s.height+window.scrollY+"px",this.content.main.style.left=s.left+window.scrollX+"px",this.content.main.style.width=s.width+"px"}moveContentBelow(){this.main.main.classList.remove(this.classes.openAbove),this.main.main.classList.add(this.classes.openBelow),this.content.main.classList.remove(this.classes.openAbove),this.content.main.classList.add(this.classes.openBelow);const e=this.main.main.getBoundingClientRect();this.content.main.style.margin="-1px 0px 0px 0px","relative"!==this.settings.contentPosition&&(this.content.main.style.top=e.top+e.height+window.scrollY+"px",this.content.main.style.left=e.left+window.scrollX+"px",this.content.main.style.width=e.width+"px")}ensureElementInView(e,t){const s=e.scrollTop+e.offsetTop,i=s+e.clientHeight,n=t.offsetTop,a=n+t.clientHeight;n<s?e.scrollTop-=s-n:a>i&&(e.scrollTop+=a-i)}putContent(){const e=this.main.main.offsetHeight,t=this.main.main.getBoundingClientRect(),s=this.content.main.offsetHeight;return window.innerHeight-(t.top+e)<=s&&t.top>s?"up":"down"}updateDeselectAll(){if(!this.store||!this.settings)return;const e=this.store.getSelectedOptions(),t=e&&e.length>0,s=this.settings.isMultiple,i=this.settings.allowDeselect,n=this.main.deselect.main,a=this.classes.hide;!i||s&&!t?n.classList.add(a):n.classList.remove(a)}}class c{constructor(e){this.listen=!1,this.observer=null,this.select=e,this.select.addEventListener("change",this.valueChange.bind(this),{passive:!0}),this.observer=new MutationObserver(this.observeCall.bind(this)),this.changeListen(!0)}enable(){this.select.disabled=!1}disable(){this.select.disabled=!0}hideUI(){this.select.tabIndex=-1,this.select.style.display="none",this.select.setAttribute("aria-hidden","true")}showUI(){this.select.removeAttribute("tabindex"),this.select.style.display="",this.select.removeAttribute("aria-hidden")}changeListen(e){this.listen=e,e&&this.observer&&this.observer.observe(this.select,{subtree:!0,childList:!0,attributes:!0}),e||this.observer&&this.observer.disconnect()}valueChange(e){return this.listen&&this.onValueChange&&this.onValueChange(this.getSelectedValues()),!0}observeCall(e){if(!this.listen)return;let t=!1,s=!1,i=!1;for(const n of e)n.target===this.select&&("disabled"===n.attributeName&&(s=!0),"class"===n.attributeName&&(t=!0)),"OPTGROUP"!==n.target.nodeName&&"OPTION"!==n.target.nodeName||(i=!0);t&&this.onClassChange&&this.onClassChange(this.select.className.split(" ")),s&&this.onDisabledChange&&(this.changeListen(!1),this.onDisabledChange(this.select.disabled),this.changeListen(!0)),i&&this.onOptionsChange&&(this.changeListen(!1),this.onOptionsChange(this.getData()),this.changeListen(!0))}getData(){let e=[];const t=this.select.childNodes;for(const s of t)"OPTGROUP"===s.nodeName&&e.push(this.getDataFromOptgroup(s)),"OPTION"===s.nodeName&&e.push(this.getDataFromOption(s));return e}getDataFromOptgroup(e){let t={id:e.id,label:e.label,selectAll:!!e.dataset&&"true"===e.dataset.selectall,selectAllText:e.dataset?e.dataset.selectalltext:"Select all",closable:e.dataset?e.dataset.closable:"off",options:[]};const s=e.childNodes;for(const e of s)"OPTION"===e.nodeName&&t.options.push(this.getDataFromOption(e));return t}getDataFromOption(e){return{id:e.id,value:e.value,text:e.text,html:e.dataset&&e.dataset.html?e.dataset.html:"",selected:e.selected,display:"none"!==e.style.display,disabled:e.disabled,mandatory:!!e.dataset&&"true"===e.dataset.mandatory,placeholder:"true"===e.dataset.placeholder,class:e.className,style:e.style.cssText,data:e.dataset}}getSelectedValues(){let e=[];const t=this.select.childNodes;for(const s of t){if("OPTGROUP"===s.nodeName){const t=s.childNodes;for(const s of t)if("OPTION"===s.nodeName){const t=s;t.selected&&e.push(t.value)}}if("OPTION"===s.nodeName){const t=s;t.selected&&e.push(t.value)}}return e}setSelected(e){this.changeListen(!1);const t=this.select.childNodes;for(const s of t){if("OPTGROUP"===s.nodeName){const t=s.childNodes;for(const s of t)if("OPTION"===s.nodeName){const t=s;t.selected=e.includes(t.value)}}if("OPTION"===s.nodeName){const t=s;t.selected=e.includes(t.value)}}this.changeListen(!0)}updateSelect(e,t,s){this.changeListen(!1),e&&(this.select.dataset.id=e),t&&(this.select.style.cssText=t),s&&(this.select.className="",s.forEach(e=>{""!==e.trim()&&this.select.classList.add(e.trim())})),this.changeListen(!0)}updateOptions(e){this.changeListen(!1),this.select.innerHTML="";for(const t of e)t instanceof n&&this.select.appendChild(this.createOptgroup(t)),t instanceof a&&this.select.appendChild(this.createOption(t));this.select.dispatchEvent(new Event("change")),this.changeListen(!0)}createOptgroup(e){const t=document.createElement("optgroup");if(t.id=e.id,t.label=e.label,e.selectAll&&(t.dataset.selectAll="true"),"off"!==e.closable&&(t.dataset.closable=e.closable),e.options)for(const s of e.options)t.appendChild(this.createOption(s));return t}createOption(e){const t=document.createElement("option");return t.id=e.id,t.value=e.value,t.innerHTML=e.text,""!==e.html&&t.setAttribute("data-html",e.html),e.selected&&(t.selected=e.selected),e.disabled&&(t.disabled=!0),!1===e.display&&(t.style.display="none"),e.placeholder&&t.setAttribute("data-placeholder","true"),e.mandatory&&t.setAttribute("data-mandatory","true"),e.class&&e.class.split(" ").forEach(e=>{t.classList.add(e)}),e.data&&"object"==typeof e.data&&Object.keys(e.data).forEach(s=>{t.setAttribute("data-"+function(e){const t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,e=>"-"+e.toLowerCase());return e[0]===e[0].toUpperCase()?t.substring(1):t}(s),e.data[s])}),t}destroy(){this.changeListen(!1),this.select.removeEventListener("change",this.valueChange.bind(this)),this.observer&&(this.observer.disconnect(),this.observer=null),delete this.select.dataset.id,this.showUI()}}return class{constructor(e){var s;if(this.events={search:void 0,searchFilter:(e,t)=>-1!==e.text.toLowerCase().indexOf(t.toLowerCase()),addable:void 0,beforeChange:void 0,afterChange:void 0,beforeOpen:void 0,afterOpen:void 0,beforeClose:void 0,afterClose:void 0},this.windowResize=t(()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()}),this.windowScroll=t(()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()}),this.documentClick=(e=>{this.settings.isOpen&&e.target&&!function(e,t){function s(e,s){return s&&e&&e.classList&&e.classList.contains(s)?e:s&&e&&e.dataset&&e.dataset.id&&e.dataset.id===t?e:null}return s(e,t)||function e(t,i){return t&&t!==document?s(t,i)?t:e(t.parentNode,i):null}(e,t)}(e.target,this.settings.id)&&this.close(e.type)}),this.windowVisibilityChange=(()=>{document.hidden&&this.close()}),this.selectEl="string"==typeof e.select?document.querySelector(e.select):e.select,!this.selectEl)return void(e.events&&e.events.error&&e.events.error(new Error("Could not find select element")));if("SELECT"!==this.selectEl.tagName)return void(e.events&&e.events.error&&e.events.error(new Error("Element isnt of type select")));this.selectEl.dataset.ssid&&this.destroy(),this.settings=new i(e.settings);const n=["afterChange","beforeOpen","afterOpen","beforeClose","afterClose"];for(const s in e.events)e.events.hasOwnProperty(s)&&(-1!==n.indexOf(s)?this.events[s]=t(e.events[s],100):this.events[s]=e.events[s]);this.settings.disabled=(null===(s=e.settings)||void 0===s?void 0:s.disabled)?e.settings.disabled:this.selectEl.disabled,this.settings.isMultiple=this.selectEl.multiple,this.settings.style=this.selectEl.style.cssText,this.settings.class=this.selectEl.className.split(" "),this.select=new c(this.selectEl),this.select.updateSelect(this.settings.id,this.settings.style,this.settings.class),this.select.hideUI(),this.select.onValueChange=(e=>{this.setSelected(e)}),this.select.onClassChange=(e=>{this.settings.class=e,this.render.updateClassStyles()}),this.select.onDisabledChange=(e=>{e?this.disable():this.enable()}),this.select.onOptionsChange=(e=>{this.setData(e)}),this.store=new l(this.settings.isMultiple?"multiple":"single",e.data?e.data:this.select.getData()),e.data&&this.select.updateOptions(this.store.getData());const a={open:this.open.bind(this),close:this.close.bind(this),addable:this.events.addable?this.events.addable:void 0,setSelected:this.setSelected.bind(this),addOption:this.addOption.bind(this),search:this.search.bind(this),beforeChange:this.events.beforeChange,afterChange:this.events.afterChange};this.render=new o(this.settings,this.store,a),this.render.renderValues(),this.render.renderOptions(this.store.getData());const h=this.selectEl.getAttribute("aria-label"),r=this.selectEl.getAttribute("aria-labelledby");h?this.render.main.main.setAttribute("aria-label",h):r&&this.render.main.main.setAttribute("aria-labelledby",r),this.selectEl.parentNode&&this.selectEl.parentNode.insertBefore(this.render.main.main,this.selectEl.nextSibling),document.addEventListener("click",this.documentClick),window.addEventListener("resize",this.windowResize,!1),"auto"===this.settings.openPosition&&window.addEventListener("scroll",this.windowScroll,!1),document.addEventListener("visibilitychange",this.windowVisibilityChange),this.settings.disabled&&this.disable(),this.settings.alwaysOpen&&this.open(),this.selectEl.slim=this}enable(){this.settings.disabled=!1,this.select.enable(),this.render.enable()}disable(){this.settings.disabled=!0,this.select.disable(),this.render.disable()}getData(){return this.store.getData()}setData(e){const t=this.store.getSelected(),i=this.store.validateDataArray(e);if(i)return void(this.events.error&&this.events.error(i));this.store.setData(e);const n=this.store.getData();this.select.updateOptions(n),this.render.renderValues(),this.render.renderOptions(n),this.events.afterChange&&!s(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}getSelected(){return this.store.getSelected()}setSelected(e,t=!0){const i=this.store.getSelected();this.store.setSelectedBy("value",Array.isArray(e)?e:[e]);const n=this.store.getData();this.select.updateOptions(n),this.render.renderValues(),""!==this.render.content.search.input.value?this.search(this.render.content.search.input.value):this.render.renderOptions(n),t&&this.events.afterChange&&!s(i,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}addOption(e){const t=this.store.getSelected();this.store.getDataOptions().some(t=>{var s;return t.value===(null!==(s=e.value)&&void 0!==s?s:e.text)})||this.store.addOption(e);const i=this.store.getData();this.select.updateOptions(i),this.render.renderValues(),this.render.renderOptions(i),this.events.afterChange&&!s(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}open(){this.settings.disabled||this.settings.isOpen||(this.events.beforeOpen&&this.events.beforeOpen(),this.render.open(),this.settings.showSearch&&this.render.searchFocus(),this.settings.isOpen=!0,setTimeout(()=>{this.events.afterOpen&&this.events.afterOpen(),this.settings.isOpen&&(this.settings.isFullOpen=!0)},this.settings.timeoutDelay),"absolute"===this.settings.contentPosition&&(this.settings.intervalMove&&clearInterval(this.settings.intervalMove),this.settings.intervalMove=setInterval(this.render.moveContent.bind(this.render),500)))}close(e=null){this.settings.isOpen&&!this.settings.alwaysOpen&&(this.events.beforeClose&&this.events.beforeClose(),this.render.close(),""!==this.render.content.search.input.value&&this.search(""),this.render.mainFocus(e),this.settings.isOpen=!1,this.settings.isFullOpen=!1,setTimeout(()=>{this.events.afterClose&&this.events.afterClose()},this.settings.timeoutDelay),this.settings.intervalMove&&clearInterval(this.settings.intervalMove))}search(e){if(this.render.content.search.input.value!==e&&(this.render.content.search.input.value=e),!this.events.search)return void this.render.renderOptions(""===e?this.store.getData():this.store.search(e,this.events.searchFilter));this.render.renderSearching();const t=this.events.search(e,this.store.getSelectedOptions());t instanceof Promise?t.then(e=>{this.render.renderOptions(this.store.partialToFullData(e))}).catch(e=>{this.render.renderError("string"==typeof e?e:e.message)}):Array.isArray(t)?this.render.renderOptions(this.store.partialToFullData(t)):this.render.renderError("Search event must return a promise or an array of data")}destroy(){document.removeEventListener("click",this.documentClick),window.removeEventListener("resize",this.windowResize,!1),"auto"===this.settings.openPosition&&window.removeEventListener("scroll",this.windowScroll,!1),document.removeEventListener("visibilitychange",this.windowVisibilityChange),this.store.setData([]),this.render.destroy(),this.select.destroy()}}});
|
8
|
+
|
9
|
+
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).SlimSelect=t()}(this,(function(){"use strict";function e(){return Math.random().toString(36).substring(2,10)}function t(e,t=50,s=!1){let i;return function(...n){const a=self,l=s&&!i;clearTimeout(i),i=setTimeout((()=>{i=null,s||e.apply(a,n)}),t),l&&e.apply(a,n)}}function s(e,t){return JSON.stringify(e)===JSON.stringify(t)}class i{constructor(t){if(this.id=t.id&&""!==t.id?t.id:e(),this.label=t.label||"",this.selectAll=void 0!==t.selectAll&&t.selectAll,this.selectAllText=t.selectAllText||"Select All",this.closable=t.closable||"off",this.options=[],t.options)for(const e of t.options)this.options.push(new n(e))}}class n{constructor(t){this.id=t.id&&""!==t.id?t.id:e(),this.value=void 0===t.value?t.text:t.value,this.text=t.text||"",this.html=t.html||"",this.selected=void 0!==t.selected&&t.selected,this.display=void 0===t.display||t.display,this.disabled=void 0!==t.disabled&&t.disabled,this.mandatory=void 0!==t.mandatory&&t.mandatory,this.placeholder=void 0!==t.placeholder&&t.placeholder,this.class=t.class||"",this.style=t.style||"",this.data=t.data||{}}}class a{constructor(e,t){this.selectType="single",this.data=[],this.selectType=e,this.setData(t)}validateDataArray(e){if(!Array.isArray(e))return new Error("Data must be an array");for(let t of e){if(!(t instanceof i||"label"in t))return t instanceof n||"text"in t?this.validateOption(t):new Error("Data object must be a valid optgroup or option");if(!("label"in t))return new Error("Optgroup must have a label");if("options"in t&&t.options)for(let e of t.options)return this.validateOption(e)}return null}validateOption(e){return"text"in e?null:new Error("Option must have a text")}partialToFullData(e){let t=[];return e.forEach((e=>{if(e instanceof i||"label"in e){let s=[];"options"in e&&e.options&&e.options.forEach((e=>{s.push(new n(e))})),s.length>0&&t.push(new i(e))}(e instanceof n||"text"in e)&&t.push(new n(e))})),t}setData(e){this.data=this.partialToFullData(e),"single"===this.selectType&&this.setSelectedBy("value",this.getSelected())}getData(){return this.filter(null,!0)}getDataOptions(){return this.filter(null,!1)}addOption(e){this.setData(this.getData().concat(new n(e)))}setSelectedBy(e,t){let s=null,a=!1;for(let l of this.data){if(l instanceof i)for(let i of l.options)s||(s=i),i.selected=!a&&t.includes(i[e]),i.selected&&"single"===this.selectType&&(a=!0);l instanceof n&&(s||(s=l),l.selected=!a&&t.includes(l[e]),l.selected&&"single"===this.selectType&&(a=!0))}"single"===this.selectType&&s&&!a&&(s.selected=!0)}getSelected(){let e=this.getSelectedOptions(),t=[];return e.forEach((e=>{t.push(e.value)})),t}getSelectedOptions(){return this.filter((e=>e.selected),!1)}getSelectedIDs(){let e=this.getSelectedOptions(),t=[];return e.forEach((e=>{t.push(e.id)})),t}getOptgroupByID(e){for(let t of this.data)if(t instanceof i&&t.id===e)return t;return null}getOptionByID(e){let t=this.filter((t=>t.id===e),!1);return t.length?t[0]:null}getSelectType(){return this.selectType}getFirstOption(){let e=null;for(let t of this.data)if(t instanceof i?e=t.options[0]:t instanceof n&&(e=t),e)break;return e}search(e,t){return""===(e=e.trim())?this.getData():this.filter((s=>t(s,e)),!0)}filter(e,t){const s=[];return this.data.forEach((a=>{if(a instanceof i){let l=[];if(a.options.forEach((i=>{e&&!e(i)||(t?l.push(new n(i)):s.push(new n(i)))})),l.length>0){let e=new i(a);e.options=l,s.push(e)}}a instanceof n&&(e&&!e(a)||s.push(new n(a)))})),s}}class l{constructor(e,t,s){this.classes={main:"ss-main",placeholder:"ss-placeholder",values:"ss-values",single:"ss-single",max:"ss-max",value:"ss-value",valueText:"ss-value-text",valueDelete:"ss-value-delete",valueOut:"ss-value-out",deselect:"ss-deselect",deselectPath:"M10,10 L90,90 M10,90 L90,10",arrow:"ss-arrow",arrowClose:"M10,30 L50,70 L90,30",arrowOpen:"M10,70 L50,30 L90,70",content:"ss-content",openAbove:"ss-open-above",openBelow:"ss-open-below",search:"ss-search",searchHighlighter:"ss-search-highlight",searching:"ss-searching",addable:"ss-addable",addablePath:"M50,10 L50,90 M10,50 L90,50",list:"ss-list",optgroup:"ss-optgroup",optgroupLabel:"ss-optgroup-label",optgroupLabelText:"ss-optgroup-label-text",optgroupActions:"ss-optgroup-actions",optgroupSelectAll:"ss-selectall",optgroupSelectAllBox:"M60,10 L10,10 L10,90 L90,90 L90,50",optgroupSelectAllCheck:"M30,45 L50,70 L90,10",optgroupClosable:"ss-closable",option:"ss-option",optionDelete:"M10,10 L90,90 M10,90 L90,10",highlighted:"ss-highlighted",open:"ss-open",close:"ss-close",selected:"ss-selected",error:"ss-error",disabled:"ss-disabled",hide:"ss-hide"},this.store=t,this.settings=e,this.callbacks=s,this.main=this.mainDiv(),this.content=this.contentDiv(),this.updateClassStyles(),this.updateAriaAttributes(),this.settings.contentLocation.appendChild(this.content.main)}enable(){this.main.main.classList.remove(this.classes.disabled),this.content.search.input.disabled=!1}disable(){this.main.main.classList.add(this.classes.disabled),this.content.search.input.disabled=!0}open(){this.main.arrow.path.setAttribute("d",this.classes.arrowOpen),this.main.main.classList.add("up"===this.settings.openPosition?this.classes.openAbove:this.classes.openBelow),this.main.main.setAttribute("aria-expanded","true"),this.moveContent();const e=this.store.getSelectedOptions();if(e.length){const t=e[e.length-1].id,s=this.content.list.querySelector('[data-id="'+t+'"]');s&&this.ensureElementInView(this.content.list,s)}}close(){this.main.main.classList.remove(this.classes.openAbove),this.main.main.classList.remove(this.classes.openBelow),this.main.main.setAttribute("aria-expanded","false"),this.content.main.classList.remove(this.classes.openAbove),this.content.main.classList.remove(this.classes.openBelow),this.main.arrow.path.setAttribute("d",this.classes.arrowClose)}updateClassStyles(){if(this.main.main.className="",this.main.main.removeAttribute("style"),this.content.main.className="",this.content.main.removeAttribute("style"),this.main.main.classList.add(this.classes.main),this.content.main.classList.add(this.classes.content),""!==this.settings.style&&(this.main.main.style.cssText=this.settings.style,this.content.main.style.cssText=this.settings.style),this.settings.class.length)for(const e of this.settings.class)""!==e.trim()&&(this.main.main.classList.add(e.trim()),this.content.main.classList.add(e.trim()));"relative"===this.settings.contentPosition&&this.content.main.classList.add("ss-"+this.settings.contentPosition)}updateAriaAttributes(){this.main.main.role="combobox",this.main.main.setAttribute("aria-haspopup","listbox"),this.main.main.setAttribute("aria-controls",this.content.main.id),this.main.main.setAttribute("aria-expanded","false"),this.content.main.setAttribute("role","listbox")}mainDiv(){var e;const t=document.createElement("div");t.dataset.id=this.settings.id,t.setAttribute("aria-label",this.settings.ariaLabel),t.tabIndex=0,t.onkeydown=e=>{switch(e.key){case"ArrowUp":case"ArrowDown":return this.callbacks.open(),"ArrowDown"===e.key?this.highlight("down"):this.highlight("up"),!1;case"Tab":return this.callbacks.close(),!0;case"Enter":case" ":this.callbacks.open();const t=this.content.list.querySelector("."+this.classes.highlighted);return t&&t.click(),!1;case"Escape":return this.callbacks.close(),!1}return!1},t.onclick=e=>{this.settings.disabled||(this.settings.isOpen?this.callbacks.close():this.callbacks.open())};const s=document.createElement("div");s.classList.add(this.classes.values),t.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.deselect);const n=null===(e=this.store)||void 0===e?void 0:e.getSelectedOptions();!this.settings.allowDeselect||this.settings.isMultiple&&n&&n.length<=0?i.classList.add(this.classes.hide):i.classList.remove(this.classes.hide),i.onclick=e=>{if(e.stopPropagation(),this.settings.disabled)return;let t=!0;const s=this.store.getSelectedOptions(),i=[];if(this.callbacks.beforeChange&&(t=!0===this.callbacks.beforeChange(i,s)),t){if(this.settings.isMultiple)this.callbacks.setSelected([],!1),this.updateDeselectAll();else{const e=this.store.getFirstOption(),t=e?e.value:"";this.callbacks.setSelected(t,!1)}this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(this.store.getSelectedOptions())}};const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.deselectPath),a.appendChild(l),i.appendChild(a),t.appendChild(i);const o=document.createElementNS("http://www.w3.org/2000/svg","svg");o.classList.add(this.classes.arrow),o.setAttribute("viewBox","0 0 100 100");const c=document.createElementNS("http://www.w3.org/2000/svg","path");return c.setAttribute("d",this.classes.arrowClose),this.settings.alwaysOpen&&o.classList.add(this.classes.hide),o.appendChild(c),t.appendChild(o),{main:t,values:s,deselect:{main:i,svg:a,path:l},arrow:{main:o,path:c}}}mainFocus(e){"click"!==e&&this.main.main.focus({preventScroll:!0})}placeholder(){const e=this.store.filter((e=>e.placeholder),!1);let t=this.settings.placeholderText;e.length&&(""!==e[0].html?t=e[0].html:""!==e[0].text&&(t=e[0].text));const s=document.createElement("div");return s.classList.add(this.classes.placeholder),s.innerHTML=t,s}renderValues(){this.settings.isMultiple?(this.renderMultipleValues(),this.updateDeselectAll()):this.renderSingleValue()}renderSingleValue(){const e=this.store.filter((e=>e.selected&&!e.placeholder),!1),t=e.length>0?e[0]:null;if(t){const e=document.createElement("div");e.classList.add(this.classes.single),t.html?e.innerHTML=t.html:e.innerText=t.text,this.main.values.innerHTML=e.outerHTML}else this.main.values.innerHTML=this.placeholder().outerHTML;this.settings.allowDeselect&&e.length?this.main.deselect.main.classList.remove(this.classes.hide):this.main.deselect.main.classList.add(this.classes.hide)}renderMultipleValues(){let e=this.main.values.childNodes,t=this.store.filter((e=>e.selected&&e.display),!1);if(0===t.length)return void(this.main.values.innerHTML=this.placeholder().outerHTML);{const e=this.main.values.querySelector("."+this.classes.placeholder);e&&e.remove()}if(t.length>this.settings.maxValuesShown){const e=document.createElement("div");return e.classList.add(this.classes.max),e.textContent=this.settings.maxValuesMessage.replace("{number}",t.length.toString()),void(this.main.values.innerHTML=e.outerHTML)}{const e=this.main.values.querySelector("."+this.classes.max);e&&e.remove()}let s=[];for(let i=0;i<e.length;i++){const n=e[i],a=n.getAttribute("data-id");if(a){t.filter((e=>e.id===a),!1).length||s.push(n)}}for(const e of s)e.classList.add(this.classes.valueOut),setTimeout((()=>{this.main.values.hasChildNodes()&&this.main.values.contains(e)&&this.main.values.removeChild(e)}),100);e=this.main.values.childNodes;for(let s=0;s<t.length;s++){let i=!0;for(let n=0;n<e.length;n++)t[s].id===String(e[n].dataset.id)&&(i=!1);i&&(this.settings.keepOrder||0===e.length?this.main.values.appendChild(this.multipleValue(t[s])):0===s?this.main.values.insertBefore(this.multipleValue(t[s]),e[s]):e[s-1].insertAdjacentElement("afterend",this.multipleValue(t[s])))}}multipleValue(e){const t=document.createElement("div");t.classList.add(this.classes.value),t.dataset.id=e.id;const s=document.createElement("div");if(s.classList.add(this.classes.valueText),s.innerText=e.text,t.appendChild(s),!e.mandatory){const s=document.createElement("div");s.classList.add(this.classes.valueDelete),s.onclick=t=>{if(t.preventDefault(),t.stopPropagation(),this.settings.disabled)return;let s=!0;const a=this.store.getSelectedOptions(),l=a.filter((t=>t.selected&&t.id!==e.id),!0);if(!(this.settings.minSelected&&l.length<this.settings.minSelected)&&(this.callbacks.beforeChange&&(s=!0===this.callbacks.beforeChange(l,a)),s)){let e=[];for(const t of l){if(t instanceof i)for(const s of t.options)e.push(s.value);t instanceof n&&e.push(t.value)}this.callbacks.setSelected(e,!1),this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(l),this.updateDeselectAll()}};const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.optionDelete),a.appendChild(l),s.appendChild(a),t.appendChild(s)}return t}contentDiv(){const e=document.createElement("div");e.dataset.id=this.settings.id;const t=this.searchDiv();e.appendChild(t.main);const s=this.listDiv();return e.appendChild(s),{main:e,search:t,list:s}}moveContent(){"relative"!==this.settings.contentPosition&&"down"!==this.settings.openPosition?"up"!==this.settings.openPosition?"up"===this.putContent()?this.moveContentAbove():this.moveContentBelow():this.moveContentAbove():this.moveContentBelow()}searchDiv(){const e=document.createElement("div"),s=document.createElement("input"),i=document.createElement("div");e.classList.add(this.classes.search);const a={main:e,input:s};if(this.settings.showSearch||(e.classList.add(this.classes.hide),s.readOnly=!0),s.type="search",s.placeholder=this.settings.searchPlaceholder,s.tabIndex=-1,s.setAttribute("aria-label",this.settings.searchPlaceholder),s.setAttribute("autocapitalize","off"),s.setAttribute("autocomplete","off"),s.setAttribute("autocorrect","off"),s.oninput=t((e=>{this.callbacks.search(e.target.value)}),100),s.onkeydown=e=>{switch(e.key){case"ArrowUp":case"ArrowDown":return"ArrowDown"===e.key?this.highlight("down"):this.highlight("up"),!1;case"Tab":return this.callbacks.close(),!0;case"Escape":return this.callbacks.close(),!1;case"Enter":case" ":if(this.callbacks.addable&&e.ctrlKey)return i.click(),!1;{const e=this.content.list.querySelector("."+this.classes.highlighted);if(e)return e.click(),!1}return!0}return!0},e.appendChild(s),this.callbacks.addable){i.classList.add(this.classes.addable);const t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttribute("viewBox","0 0 100 100");const s=document.createElementNS("http://www.w3.org/2000/svg","path");s.setAttribute("d",this.classes.addablePath),t.appendChild(s),i.appendChild(t),i.onclick=e=>{if(e.preventDefault(),e.stopPropagation(),!this.callbacks.addable)return;const t=this.content.search.input.value.trim();if(""===t)return void this.content.search.input.focus();const s=e=>{let t=new n(e);if(this.callbacks.addOption(t),this.settings.isMultiple){let e=this.store.getSelected();e.push(t.value),this.callbacks.setSelected(e,!0)}else this.callbacks.setSelected([t.value],!0);this.callbacks.search(""),this.settings.closeOnSelect&&setTimeout((()=>{this.callbacks.close()}),100)},i=this.callbacks.addable(t);!1!==i&&null!=i&&(i instanceof Promise?i.then((e=>{s("string"==typeof e?{text:e,value:e}:e)})):s("string"==typeof i?{text:i,value:i}:i))},e.appendChild(i),a.addable={main:i,svg:t,path:s}}return a}searchFocus(){this.content.search.input.focus()}getOptions(e=!1,t=!1,s=!1){let i="."+this.classes.option;return e&&(i+=":not(."+this.classes.placeholder+")"),t&&(i+=":not(."+this.classes.disabled+")"),s&&(i+=":not(."+this.classes.hide+")"),Array.from(this.content.list.querySelectorAll(i))}highlight(e){const t=this.getOptions(!0,!0,!0);if(0===t.length)return;if(1===t.length&&!t[0].classList.contains(this.classes.highlighted))return void t[0].classList.add(this.classes.highlighted);let s=!1;for(const e of t)e.classList.contains(this.classes.highlighted)&&(s=!0);if(!s)for(const e of t)if(e.classList.contains(this.classes.selected)){e.classList.add(this.classes.highlighted);break}for(let s=0;s<t.length;s++)if(t[s].classList.contains(this.classes.highlighted)){const i=t[s];i.classList.remove(this.classes.highlighted);const n=i.parentElement;if(n&&n.classList.contains(this.classes.open)){const e=n.querySelector("."+this.classes.optgroupLabel);e&&e.click()}let a=t["down"===e?s+1<t.length?s+1:0:s-1>=0?s-1:t.length-1];a.classList.add(this.classes.highlighted),this.ensureElementInView(this.content.list,a);const l=a.parentElement;if(l&&l.classList.contains(this.classes.close)){const e=l.querySelector("."+this.classes.optgroupLabel);e&&e.click()}return}t["down"===e?0:t.length-1].classList.add(this.classes.highlighted),this.ensureElementInView(this.content.list,t["down"===e?0:t.length-1])}listDiv(){const e=document.createElement("div");return e.classList.add(this.classes.list),e}renderError(e){this.content.list.innerHTML="";const t=document.createElement("div");t.classList.add(this.classes.error),t.textContent=e,this.content.list.appendChild(t)}renderSearching(){this.content.list.innerHTML="";const e=document.createElement("div");e.classList.add(this.classes.searching),e.textContent=this.settings.searchingText,this.content.list.appendChild(e)}renderOptions(e){if(this.content.list.innerHTML="",0===e.length){const e=document.createElement("div");return e.classList.add(this.classes.search),e.innerHTML=this.settings.searchText,void this.content.list.appendChild(e)}for(const t of e){if(t instanceof i){const e=document.createElement("div");e.classList.add(this.classes.optgroup);const s=document.createElement("div");s.classList.add(this.classes.optgroupLabel),e.appendChild(s);const i=document.createElement("div");i.classList.add(this.classes.optgroupLabelText),i.textContent=t.label,s.appendChild(i);const n=document.createElement("div");if(n.classList.add(this.classes.optgroupActions),s.appendChild(n),this.settings.isMultiple&&t.selectAll){const e=document.createElement("div");e.classList.add(this.classes.optgroupSelectAll);let s=!0;for(const e of t.options)if(!e.selected){s=!1;break}s&&e.classList.add(this.classes.selected);const i=document.createElement("span");i.textContent=t.selectAllText,e.appendChild(i);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100"),e.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");l.setAttribute("d",this.classes.optgroupSelectAllBox),a.appendChild(l);const o=document.createElementNS("http://www.w3.org/2000/svg","path");o.setAttribute("d",this.classes.optgroupSelectAllCheck),a.appendChild(o),e.addEventListener("click",(e=>{e.preventDefault(),e.stopPropagation();const i=this.store.getSelected();if(s){const e=i.filter((e=>{for(const s of t.options)if(e===s.value)return!1;return!0}));this.callbacks.setSelected(e,!0)}else{const e=i.concat(t.options.map((e=>e.value)));for(const e of t.options)this.store.getOptionByID(e.id)||this.callbacks.addOption(e);this.callbacks.setSelected(e,!0)}})),n.appendChild(e)}if("off"!==t.closable){const i=document.createElement("div");i.classList.add(this.classes.optgroupClosable);const a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.setAttribute("viewBox","0 0 100 100"),a.classList.add(this.classes.arrow),i.appendChild(a);const l=document.createElementNS("http://www.w3.org/2000/svg","path");a.appendChild(l),t.options.some((e=>e.selected))||""!==this.content.search.input.value.trim()?(i.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):"open"===t.closable?(e.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):"close"===t.closable&&(e.classList.add(this.classes.close),l.setAttribute("d",this.classes.arrowClose)),s.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),e.classList.contains(this.classes.close)?(e.classList.remove(this.classes.close),e.classList.add(this.classes.open),l.setAttribute("d",this.classes.arrowOpen)):(e.classList.remove(this.classes.open),e.classList.add(this.classes.close),l.setAttribute("d",this.classes.arrowClose))})),n.appendChild(i)}e.appendChild(s);for(const s of t.options)e.appendChild(this.option(s));this.content.list.appendChild(e)}t instanceof n&&this.content.list.appendChild(this.option(t))}}option(e){if(e.placeholder){const e=document.createElement("div");return e.classList.add(this.classes.option),e.classList.add(this.classes.hide),e}const t=document.createElement("div");return t.dataset.id=e.id,t.id=e.id,t.classList.add(this.classes.option),t.setAttribute("role","option"),e.class&&e.class.split(" ").forEach((e=>{t.classList.add(e)})),e.style&&(t.style.cssText=e.style),this.settings.searchHighlight&&""!==this.content.search.input.value.trim()?t.innerHTML=this.highlightText(""!==e.html?e.html:e.text,this.content.search.input.value,this.classes.searchHighlighter):""!==e.html?t.innerHTML=e.html:t.textContent=e.text,this.settings.showOptionTooltips&&t.textContent&&t.setAttribute("title",t.textContent),e.display||t.classList.add(this.classes.hide),e.disabled&&t.classList.add(this.classes.disabled),e.selected&&this.settings.hideSelected&&t.classList.add(this.classes.hide),e.selected?(t.classList.add(this.classes.selected),t.setAttribute("aria-selected","true"),this.main.main.setAttribute("aria-activedescendant",t.id)):(t.classList.remove(this.classes.selected),t.setAttribute("aria-selected","false")),t.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation();const s=this.store.getSelected(),i=t.currentTarget,n=String(i.dataset.id);if(e.disabled||e.selected&&!this.settings.allowDeselect)return;if(this.settings.isMultiple&&this.settings.maxSelected<=s.length&&!e.selected||this.settings.isMultiple&&this.settings.minSelected>=s.length&&e.selected)return;let a=!1;const l=this.store.getSelectedOptions();let o=[];this.settings.isMultiple&&(o=e.selected?l.filter((e=>e.id!==n)):l.concat(e)),this.settings.isMultiple||(o=e.selected?[]:[e]),this.callbacks.beforeChange||(a=!0),this.callbacks.beforeChange&&(a=!1!==this.callbacks.beforeChange(o,l)),a&&(this.store.getOptionByID(n)||this.callbacks.addOption(e),this.callbacks.setSelected(o.map((e=>e.value)),!1),this.settings.closeOnSelect&&this.callbacks.close(),this.callbacks.afterChange&&this.callbacks.afterChange(o))})),t}destroy(){this.main.main.remove(),this.content.main.remove()}highlightText(e,t,s){let i=e;const n=new RegExp("("+t.trim()+")(?![^<]*>[^<>]*</)","i");if(!e.match(n))return e;const a=e.match(n).index,l=a+e.match(n)[0].toString().length,o=e.substring(a,l);return i=i.replace(n,`<mark class="${s}">${o}</mark>`),i}moveContentAbove(){const e=this.main.main.offsetHeight,t=this.content.main.offsetHeight;this.main.main.classList.remove(this.classes.openBelow),this.main.main.classList.add(this.classes.openAbove),this.content.main.classList.remove(this.classes.openBelow),this.content.main.classList.add(this.classes.openAbove);const s=this.main.main.getBoundingClientRect();this.content.main.style.margin="-"+(e+t-1)+"px 0px 0px 0px",this.content.main.style.top=s.top+s.height+window.scrollY+"px",this.content.main.style.left=s.left+window.scrollX+"px",this.content.main.style.width=s.width+"px"}moveContentBelow(){this.main.main.classList.remove(this.classes.openAbove),this.main.main.classList.add(this.classes.openBelow),this.content.main.classList.remove(this.classes.openAbove),this.content.main.classList.add(this.classes.openBelow);const e=this.main.main.getBoundingClientRect();this.content.main.style.margin="-1px 0px 0px 0px","relative"!==this.settings.contentPosition&&(this.content.main.style.top=e.top+e.height+window.scrollY+"px",this.content.main.style.left=e.left+window.scrollX+"px",this.content.main.style.width=e.width+"px")}ensureElementInView(e,t){const s=e.scrollTop+e.offsetTop,i=s+e.clientHeight,n=t.offsetTop,a=n+t.clientHeight;n<s?e.scrollTop-=s-n:a>i&&(e.scrollTop+=a-i)}putContent(){const e=this.main.main.offsetHeight,t=this.main.main.getBoundingClientRect(),s=this.content.main.offsetHeight;return window.innerHeight-(t.top+e)<=s&&t.top>s?"up":"down"}updateDeselectAll(){if(!this.store||!this.settings)return;const e=this.store.getSelectedOptions(),t=e&&e.length>0,s=this.settings.isMultiple,i=this.settings.allowDeselect,n=this.main.deselect.main,a=this.classes.hide;!i||s&&!t?n.classList.add(a):n.classList.remove(a)}}class o{constructor(e){this.listen=!1,this.observer=null,this.select=e,this.valueChange=this.valueChange.bind(this),this.select.addEventListener("change",this.valueChange,{passive:!0}),this.observer=new MutationObserver(this.observeCall.bind(this)),this.changeListen(!0)}enable(){this.select.disabled=!1}disable(){this.select.disabled=!0}hideUI(){this.select.tabIndex=-1,this.select.style.display="none",this.select.setAttribute("aria-hidden","true")}showUI(){this.select.removeAttribute("tabindex"),this.select.style.display="",this.select.removeAttribute("aria-hidden")}changeListen(e){this.listen=e,e&&this.observer&&this.observer.observe(this.select,{subtree:!0,childList:!0,attributes:!0}),e||this.observer&&this.observer.disconnect()}valueChange(e){return this.listen&&this.onValueChange&&this.onValueChange(this.getSelectedValues()),!0}observeCall(e){if(!this.listen)return;let t=!1,s=!1,i=!1;for(const n of e)n.target===this.select&&("disabled"===n.attributeName&&(s=!0),"class"===n.attributeName&&(t=!0)),"OPTGROUP"!==n.target.nodeName&&"OPTION"!==n.target.nodeName||(i=!0);t&&this.onClassChange&&this.onClassChange(this.select.className.split(" ")),s&&this.onDisabledChange&&(this.changeListen(!1),this.onDisabledChange(this.select.disabled),this.changeListen(!0)),i&&this.onOptionsChange&&(this.changeListen(!1),this.onOptionsChange(this.getData()),this.changeListen(!0))}getData(){let e=[];const t=this.select.childNodes;for(const s of t)"OPTGROUP"===s.nodeName&&e.push(this.getDataFromOptgroup(s)),"OPTION"===s.nodeName&&e.push(this.getDataFromOption(s));return e}getDataFromOptgroup(e){let t={id:e.id,label:e.label,selectAll:!!e.dataset&&"true"===e.dataset.selectall,selectAllText:e.dataset?e.dataset.selectalltext:"Select all",closable:e.dataset?e.dataset.closable:"off",options:[]};const s=e.childNodes;for(const e of s)"OPTION"===e.nodeName&&t.options.push(this.getDataFromOption(e));return t}getDataFromOption(e){return{id:e.id,value:e.value,text:e.text,html:e.dataset&&e.dataset.html?e.dataset.html:"",selected:e.selected,display:"none"!==e.style.display,disabled:e.disabled,mandatory:!!e.dataset&&"true"===e.dataset.mandatory,placeholder:"true"===e.dataset.placeholder,class:e.className,style:e.style.cssText,data:e.dataset}}getSelectedValues(){let e=[];const t=this.select.childNodes;for(const s of t){if("OPTGROUP"===s.nodeName){const t=s.childNodes;for(const s of t)if("OPTION"===s.nodeName){const t=s;t.selected&&e.push(t.value)}}if("OPTION"===s.nodeName){const t=s;t.selected&&e.push(t.value)}}return e}setSelected(e){this.changeListen(!1);const t=this.select.childNodes;for(const s of t){if("OPTGROUP"===s.nodeName){const t=s.childNodes;for(const s of t)if("OPTION"===s.nodeName){const t=s;t.selected=e.includes(t.value)}}if("OPTION"===s.nodeName){const t=s;t.selected=e.includes(t.value)}}this.changeListen(!0)}updateSelect(e,t,s){this.changeListen(!1),e&&(this.select.dataset.id=e),t&&(this.select.style.cssText=t),s&&(this.select.className="",s.forEach((e=>{""!==e.trim()&&this.select.classList.add(e.trim())}))),this.changeListen(!0)}updateOptions(e){this.changeListen(!1),this.select.innerHTML="";for(const t of e)t instanceof i&&this.select.appendChild(this.createOptgroup(t)),t instanceof n&&this.select.appendChild(this.createOption(t));this.select.dispatchEvent(new Event("change")),this.changeListen(!0)}createOptgroup(e){const t=document.createElement("optgroup");if(t.id=e.id,t.label=e.label,e.selectAll&&(t.dataset.selectAll="true"),"off"!==e.closable&&(t.dataset.closable=e.closable),e.options)for(const s of e.options)t.appendChild(this.createOption(s));return t}createOption(e){const t=document.createElement("option");return t.id=e.id,t.value=e.value,t.innerHTML=e.text,""!==e.html&&t.setAttribute("data-html",e.html),e.selected&&(t.selected=e.selected),e.disabled&&(t.disabled=!0),!1===e.display&&(t.style.display="none"),e.placeholder&&t.setAttribute("data-placeholder","true"),e.mandatory&&t.setAttribute("data-mandatory","true"),e.class&&e.class.split(" ").forEach((e=>{t.classList.add(e)})),e.data&&"object"==typeof e.data&&Object.keys(e.data).forEach((s=>{t.setAttribute("data-"+function(e){const t=e.replace(/[A-Z\u00C0-\u00D6\u00D8-\u00DE]/g,(e=>"-"+e.toLowerCase()));return e[0]===e[0].toUpperCase()?t.substring(1):t}(s),e.data[s])})),t}destroy(){this.changeListen(!1),this.select.removeEventListener("change",this.valueChange),this.observer&&(this.observer.disconnect(),this.observer=null),delete this.select.dataset.id,this.showUI()}}class c{constructor(t){this.id="",this.style="",this.class=[],this.isMultiple=!1,this.isOpen=!1,this.isFullOpen=!1,this.intervalMove=null,t||(t={}),this.id="ss-"+e(),this.style=t.style||"",this.class=t.class||[],this.disabled=void 0!==t.disabled&&t.disabled,this.alwaysOpen=void 0!==t.alwaysOpen&&t.alwaysOpen,this.showSearch=void 0===t.showSearch||t.showSearch,this.ariaLabel=t.ariaLabel||"Combobox",this.searchPlaceholder=t.searchPlaceholder||"Search",this.searchText=t.searchText||"No Results",this.searchingText=t.searchingText||"Searching...",this.searchHighlight=void 0!==t.searchHighlight&&t.searchHighlight,this.closeOnSelect=void 0===t.closeOnSelect||t.closeOnSelect,this.contentLocation=t.contentLocation||document.body,this.contentPosition=t.contentPosition||"absolute",this.openPosition=t.openPosition||"auto",this.placeholderText=void 0!==t.placeholderText?t.placeholderText:"Select Value",this.allowDeselect=void 0!==t.allowDeselect&&t.allowDeselect,this.hideSelected=void 0!==t.hideSelected&&t.hideSelected,this.keepOrder=void 0!==t.keepOrder&&t.keepOrder,this.showOptionTooltips=void 0!==t.showOptionTooltips&&t.showOptionTooltips,this.minSelected=t.minSelected||0,this.maxSelected=t.maxSelected||1e3,this.timeoutDelay=t.timeoutDelay||200,this.maxValuesShown=t.maxValuesShown||20,this.maxValuesMessage=t.maxValuesMessage||"{number} selected"}}return class{constructor(e){var s;if(this.events={search:void 0,searchFilter:(e,t)=>-1!==e.text.toLowerCase().indexOf(t.toLowerCase()),addable:void 0,beforeChange:void 0,afterChange:void 0,beforeOpen:void 0,afterOpen:void 0,beforeClose:void 0,afterClose:void 0},this.windowResize=t((()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()})),this.windowScroll=t((()=>{(this.settings.isOpen||this.settings.isFullOpen)&&this.render.moveContent()})),this.documentClick=e=>{this.settings.isOpen&&e.target&&!function(e,t){function s(e,s){return s&&e&&e.classList&&e.classList.contains(s)||s&&e&&e.dataset&&e.dataset.id&&e.dataset.id===t?e:null}return s(e,t)||function e(t,i){return t&&t!==document?s(t,i)?t:e(t.parentNode,i):null}(e,t)}(e.target,this.settings.id)&&this.close(e.type)},this.windowVisibilityChange=()=>{document.hidden&&this.close()},this.selectEl="string"==typeof e.select?document.querySelector(e.select):e.select,!this.selectEl)return void(e.events&&e.events.error&&e.events.error(new Error("Could not find select element")));if("SELECT"!==this.selectEl.tagName)return void(e.events&&e.events.error&&e.events.error(new Error("Element isnt of type select")));this.selectEl.dataset.ssid&&this.destroy(),this.settings=new c(e.settings);const i=["afterChange","beforeOpen","afterOpen","beforeClose","afterClose"];for(const s in e.events)e.events.hasOwnProperty(s)&&(-1!==i.indexOf(s)?this.events[s]=t(e.events[s],100):this.events[s]=e.events[s]);this.settings.disabled=(null===(s=e.settings)||void 0===s?void 0:s.disabled)?e.settings.disabled:this.selectEl.disabled,this.settings.isMultiple=this.selectEl.multiple,this.settings.style=this.selectEl.style.cssText,this.settings.class=this.selectEl.className.split(" "),this.select=new o(this.selectEl),this.select.updateSelect(this.settings.id,this.settings.style,this.settings.class),this.select.hideUI(),this.select.onValueChange=e=>{this.setSelected(e)},this.select.onClassChange=e=>{this.settings.class=e,this.render.updateClassStyles()},this.select.onDisabledChange=e=>{e?this.disable():this.enable()},this.select.onOptionsChange=e=>{this.setData(e)},this.store=new a(this.settings.isMultiple?"multiple":"single",e.data?e.data:this.select.getData()),e.data&&this.select.updateOptions(this.store.getData());const n={open:this.open.bind(this),close:this.close.bind(this),addable:this.events.addable?this.events.addable:void 0,setSelected:this.setSelected.bind(this),addOption:this.addOption.bind(this),search:this.search.bind(this),beforeChange:this.events.beforeChange,afterChange:this.events.afterChange};this.render=new l(this.settings,this.store,n),this.render.renderValues(),this.render.renderOptions(this.store.getData());const h=this.selectEl.getAttribute("aria-label"),r=this.selectEl.getAttribute("aria-labelledby");h?this.render.main.main.setAttribute("aria-label",h):r&&this.render.main.main.setAttribute("aria-labelledby",r),this.selectEl.parentNode&&this.selectEl.parentNode.insertBefore(this.render.main.main,this.selectEl.nextSibling),window.addEventListener("resize",this.windowResize,!1),"auto"===this.settings.openPosition&&window.addEventListener("scroll",this.windowScroll,!1),document.addEventListener("visibilitychange",this.windowVisibilityChange),this.settings.disabled&&this.disable(),this.settings.alwaysOpen&&this.open(),this.selectEl.slim=this}enable(){this.settings.disabled=!1,this.select.enable(),this.render.enable()}disable(){this.settings.disabled=!0,this.select.disable(),this.render.disable()}getData(){return this.store.getData()}setData(e){const t=this.store.getSelected(),i=this.store.validateDataArray(e);if(i)return void(this.events.error&&this.events.error(i));this.store.setData(e);const n=this.store.getData();this.select.updateOptions(n),this.render.renderValues(),this.render.renderOptions(n),this.events.afterChange&&!s(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}getSelected(){return this.store.getSelected()}setSelected(e,t=!0){const i=this.store.getSelected();this.store.setSelectedBy("value",Array.isArray(e)?e:[e]);const n=this.store.getData();this.select.updateOptions(n),this.render.renderValues(),""!==this.render.content.search.input.value?this.search(this.render.content.search.input.value):this.render.renderOptions(n),t&&this.events.afterChange&&!s(i,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}addOption(e){const t=this.store.getSelected();this.store.getDataOptions().some((t=>{var s;return t.value===(null!==(s=e.value)&&void 0!==s?s:e.text)}))||this.store.addOption(e);const i=this.store.getData();this.select.updateOptions(i),this.render.renderValues(),this.render.renderOptions(i),this.events.afterChange&&!s(t,this.store.getSelected())&&this.events.afterChange(this.store.getSelectedOptions())}open(){this.settings.disabled||this.settings.isOpen||(this.events.beforeOpen&&this.events.beforeOpen(),this.render.open(),this.settings.showSearch&&this.render.searchFocus(),this.settings.isOpen=!0,setTimeout((()=>{this.events.afterOpen&&this.events.afterOpen(),this.settings.isOpen&&(this.settings.isFullOpen=!0),document.addEventListener("click",this.documentClick)}),this.settings.timeoutDelay),"absolute"===this.settings.contentPosition&&(this.settings.intervalMove&&clearInterval(this.settings.intervalMove),this.settings.intervalMove=setInterval(this.render.moveContent.bind(this.render),500)))}close(e=null){this.settings.isOpen&&!this.settings.alwaysOpen&&(this.events.beforeClose&&this.events.beforeClose(),this.render.close(),""!==this.render.content.search.input.value&&this.search(""),this.render.mainFocus(e),this.settings.isOpen=!1,this.settings.isFullOpen=!1,setTimeout((()=>{this.events.afterClose&&this.events.afterClose(),document.removeEventListener("click",this.documentClick)}),this.settings.timeoutDelay),this.settings.intervalMove&&clearInterval(this.settings.intervalMove))}search(e){if(this.render.content.search.input.value!==e&&(this.render.content.search.input.value=e),!this.events.search)return void this.render.renderOptions(""===e?this.store.getData():this.store.search(e,this.events.searchFilter));this.render.renderSearching();const t=this.events.search(e,this.store.getSelectedOptions());t instanceof Promise?t.then((e=>{this.render.renderOptions(this.store.partialToFullData(e))})).catch((e=>{this.render.renderError("string"==typeof e?e:e.message)})):Array.isArray(t)?this.render.renderOptions(this.store.partialToFullData(t)):this.render.renderError("Search event must return a promise or an array of data")}destroy(){document.removeEventListener("click",this.documentClick),window.removeEventListener("resize",this.windowResize,!1),"auto"===this.settings.openPosition&&window.removeEventListener("scroll",this.windowScroll,!1),document.removeEventListener("visibilitychange",this.windowVisibilityChange),this.store.setData([]),this.render.destroy(),this.select.destroy()}}}));
|
@@ -5,7 +5,7 @@
|
|
5
5
|
#
|
6
6
|
# Product/Info:
|
7
7
|
# https://jekyll.one
|
8
|
-
# https://github.com/jguadagno/
|
8
|
+
# https://github.com/jguadagno/ThemeSwitcher
|
9
9
|
#
|
10
10
|
# Copyright (C) 2023, 2024 Juergen Adams
|
11
11
|
# Copyright (C) 2014 Joseph Guadagno
|
@@ -13,7 +13,7 @@
|
|
13
13
|
# J1 Template is licensed under the MIT License.
|
14
14
|
# See: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
|
15
15
|
# Bootstrap Theme Switcher is licensed under the MIT License.
|
16
|
-
# See: https://github.com/jguadagno/
|
16
|
+
# See: https://github.com/jguadagno/ThemeSwitcher
|
17
17
|
# -----------------------------------------------------------------------------
|
18
18
|
# NOTE: This modules is MODIFIED to be used with MobileMenu (mmenuLight).
|
19
19
|
# The original version cannot be used with J1 for theme menu creation!
|
@@ -36,7 +36,7 @@
|
|
36
36
|
|
37
37
|
/**
|
38
38
|
* jQuery Twitter Bootstrap Theme Switcher v1.1.5
|
39
|
-
* https://github.com/jguadagno/
|
39
|
+
* https://github.com/jguadagno/ThemeSwitcher
|
40
40
|
*
|
41
41
|
* Copyright 2014, Joseph Guadagno
|
42
42
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
@@ -44,31 +44,29 @@
|
|
44
44
|
|
45
45
|
'use strict';
|
46
46
|
;(function ($, window, document, undefined) {
|
47
|
-
|
48
|
-
var
|
49
|
-
|
50
|
-
var
|
51
|
-
var
|
52
|
-
var
|
53
|
-
var
|
54
|
-
var
|
55
|
-
var
|
56
|
-
|
57
|
-
|
58
|
-
var logger = log4javascript.getLogger('j1.core.switcher');
|
59
|
-
var logText;
|
60
|
-
|
61
|
-
var user_state_detected;
|
62
|
-
var user_state = {};
|
47
|
+
var cookie_names = j1.getCookieNames();
|
48
|
+
var gaCookies = j1.findCookie('_ga');
|
49
|
+
var j1Cookies = j1.findCookie('j1');
|
50
|
+
var url = new liteURL(window.location.href);
|
51
|
+
var hostname = url.hostname;
|
52
|
+
var domain = hostname.substring(hostname.lastIndexOf('.', hostname.lastIndexOf('.') - 1) + 1);
|
53
|
+
var secure = (url.protocol.includes('https')) ? true : false;
|
54
|
+
var logger = log4javascript.getLogger('j1.themes.switcher');
|
55
|
+
var message = {};
|
56
|
+
|
57
|
+
var user_state;
|
63
58
|
var user_state_json;
|
64
59
|
var user_state_cookie;
|
60
|
+
var user_state_detected;
|
61
|
+
|
62
|
+
var menu_type;
|
65
63
|
|
66
64
|
// Constructor
|
67
65
|
// ---------------------------------------------------------------------------
|
68
|
-
var
|
66
|
+
var ThemeSwitcher = function (element, options) {
|
69
67
|
|
70
68
|
this.$element = $(element);
|
71
|
-
this.settings = $.extend({}, $.fn.
|
69
|
+
this.settings = $.extend({}, $.fn.ThemeSwitcher.defaults, options);
|
72
70
|
this.themesList = [];
|
73
71
|
|
74
72
|
// loading local themes
|
@@ -78,15 +76,15 @@
|
|
78
76
|
|
79
77
|
// Prototype
|
80
78
|
// ---------------------------------------------------------------------------
|
81
|
-
|
79
|
+
ThemeSwitcher.prototype = {
|
82
80
|
clear: function () {
|
83
|
-
logger.debug('\n' + '
|
81
|
+
logger.debug('\n' + 'ThemeSwitcher.clear');
|
84
82
|
return this.$element.each(function () {
|
85
83
|
this.$element.empty();
|
86
84
|
});
|
87
85
|
},
|
88
86
|
update: function () {
|
89
|
-
logger.debug('\n' + '
|
87
|
+
logger.debug('\n' + 'ThemeSwitcher.update');
|
90
88
|
this.getThemes();
|
91
89
|
},
|
92
90
|
|
@@ -116,9 +114,8 @@
|
|
116
114
|
// to load theme CSS from cookies, finally.
|
117
115
|
// -------------------------------------------------------------------------
|
118
116
|
switchTheme: function (name, cssFile) {
|
119
|
-
|
120
117
|
var $this = $(this);
|
121
|
-
var settings = $.extend({}, $.fn.
|
118
|
+
var settings = $.extend({}, $.fn.ThemeSwitcher.defaults, $this.data('ThemeSwitcher'));
|
122
119
|
var id = settings.cssThemeLink;
|
123
120
|
var debug = settings.debug;
|
124
121
|
var includeCSS = this.settings.includeBootswatch;
|
@@ -128,14 +125,14 @@
|
|
128
125
|
// detect|set user state cookie
|
129
126
|
user_state_detected = j1.existsCookie (cookie_names.user_state);
|
130
127
|
if ( user_state_detected ) {
|
131
|
-
logger.
|
128
|
+
logger.info('\n' + 'cookie found: ' + cookie_names.user_state);
|
132
129
|
user_state = j1.readCookie(cookie_names.user_state);
|
133
130
|
} else {
|
134
131
|
logger.error('\n' + 'cookie not found: ' + cookie_names.user_state);
|
135
|
-
logger.
|
136
|
-
j1Cookies.forEach(function (item) {console.log('j1.
|
137
|
-
logger.
|
138
|
-
gaCookies.forEach(function (item) {console.log('j1.
|
132
|
+
logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
|
133
|
+
j1Cookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
134
|
+
logger.info('\n' + 'ga cookies found:' + gaCookies.length);
|
135
|
+
gaCookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
139
136
|
}
|
140
137
|
|
141
138
|
themeName = user_state.theme_name;
|
@@ -164,7 +161,7 @@
|
|
164
161
|
user_state.theme_author_url = 'https://jekyll.one/';
|
165
162
|
}
|
166
163
|
|
167
|
-
logger.
|
164
|
+
logger.info('\n' + 'write to cookie : ' + cookie_names.user_state);
|
168
165
|
j1.writeCookie({
|
169
166
|
name: cookie_names.user_state,
|
170
167
|
data: user_state,
|
@@ -175,7 +172,7 @@
|
|
175
172
|
// reload current page (skip cache)
|
176
173
|
location.reload(true);
|
177
174
|
} else {
|
178
|
-
logger.
|
175
|
+
logger.info('\n' + 'write to cookie : disabled');
|
179
176
|
logger.warn('\n' + 'selected theme not activated: ' + name);
|
180
177
|
} // END if saveToCookie
|
181
178
|
|
@@ -191,7 +188,7 @@
|
|
191
188
|
return false;
|
192
189
|
}
|
193
190
|
|
194
|
-
var settings = $.extend({}, $.fn.
|
191
|
+
var settings = $.extend({}, $.fn.ThemeSwitcher.defaults, options);
|
195
192
|
|
196
193
|
// detect|set user state cookie
|
197
194
|
user_state_detected = j1.existsCookie (cookie_names.user_state);
|
@@ -201,10 +198,10 @@
|
|
201
198
|
user_state = j1.readCookie(cookie_names.user_state);
|
202
199
|
} else {
|
203
200
|
logger.error('\n' + 'cookie not found: ' + cookie_names.user_state);
|
204
|
-
logger.
|
205
|
-
j1Cookies.forEach(function (item) {console.log('j1.
|
206
|
-
logger.
|
207
|
-
gaCookies.forEach(function (item) {console.log('j1.
|
201
|
+
logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
|
202
|
+
j1Cookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
203
|
+
logger.info('\n' + 'ga cookies found:' + gaCookies.length);
|
204
|
+
gaCookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
208
205
|
}
|
209
206
|
|
210
207
|
var themeName = user_state.theme_name;
|
@@ -216,7 +213,7 @@
|
|
216
213
|
// -------------------------------------------------------------------------
|
217
214
|
// addTheme
|
218
215
|
// -------------------------------------------------------------------------
|
219
|
-
addTheme: function(name, cssFile, start, deleteCount) {
|
216
|
+
addTheme: function (name, cssFile, start, deleteCount) {
|
220
217
|
if (typeof start === 'undefined') { start = 0; }
|
221
218
|
if (typeof deleteCount === 'undefined') { deleteCount = 0; }
|
222
219
|
this.themesList.splice(start, deleteCount, {name: name, css: cssFile});
|
@@ -226,7 +223,7 @@
|
|
226
223
|
// -------------------------------------------------------------------------
|
227
224
|
// addThemesToControl
|
228
225
|
// -------------------------------------------------------------------------
|
229
|
-
addThemesToControl: function() {
|
226
|
+
addThemesToControl: function () {
|
230
227
|
if (typeof this.$element === 'undefined') {
|
231
228
|
logger.error('\n' + 'bootstrapThemeSelector|addThemesToControl: Element is undefined');
|
232
229
|
return false;
|
@@ -262,7 +259,7 @@
|
|
262
259
|
|
263
260
|
if (this.$element.is('ul')) {
|
264
261
|
var $this = $(this);
|
265
|
-
var settings = $.extend({}, $.fn.
|
262
|
+
var settings = $.extend({}, $.fn.ThemeSwitcher.defaults, $this.data('ThemeSwitcher'));
|
266
263
|
var id = settings.cssThemeLink;
|
267
264
|
var debug = settings.debug;
|
268
265
|
var themeName;
|
@@ -270,60 +267,67 @@
|
|
270
267
|
// detect|set user state cookie
|
271
268
|
user_state_detected = j1.existsCookie (cookie_names.user_state);
|
272
269
|
if ( user_state_detected ) {
|
273
|
-
logger.
|
270
|
+
logger.info('\n' + 'user state cookie found');
|
274
271
|
user_state = j1.readCookie(cookie_names.user_state);
|
275
272
|
} else {
|
276
273
|
logger.error('\n' + 'user state NOT cookie found');
|
277
|
-
logger.
|
278
|
-
j1Cookies.forEach(function (item) {console.log('j1.
|
279
|
-
logger.
|
280
|
-
gaCookies.forEach(function (item) {console.log('j1.
|
274
|
+
logger.info('\n' + 'j1 cookies found:' + j1Cookies.length);
|
275
|
+
j1Cookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
276
|
+
logger.info('\n' + 'ga cookies found:' + gaCookies.length);
|
277
|
+
gaCookies.forEach(function (item) {console.log('j1.themes.switcher: ' + item);});
|
281
278
|
}
|
282
279
|
|
283
280
|
themeName = user_state.theme_name;
|
284
281
|
|
285
282
|
if ( debug === 'true' ) {
|
286
|
-
logger.
|
283
|
+
logger.info('\n' + 'bootstrapThemeSelector: UL element selected');
|
287
284
|
}
|
288
285
|
this.$element.empty();
|
289
286
|
|
290
|
-
var cssClass;
|
287
|
+
var cssClass = '';
|
291
288
|
var iconColor = '#9E9E9E';
|
292
289
|
$.each(this.themesList, function (i, value) {
|
293
|
-
// Use DIFFERENT class for
|
294
|
-
//if (base.$element[0].id.includes('MMenu')) {
|
290
|
+
// Use DIFFERENT class for Mobile Menu
|
295
291
|
if (base.$element[0].id.includes('mmenu')) {
|
296
292
|
cssClass = 'mmenu-item';
|
297
293
|
} else {
|
298
294
|
cssClass = 'dropdown-item';
|
299
295
|
}
|
300
296
|
// Add class "active" to the current theme selected
|
301
|
-
if (
|
302
|
-
//
|
297
|
+
if (value.name === themeName) {
|
298
|
+
// check Mobile Menu first
|
303
299
|
if (base.$element[0].id.includes('mmenu')) {
|
304
300
|
cssClass = 'mmenu-item active';
|
305
301
|
} else {
|
306
302
|
cssClass = 'dropdown-item active';
|
307
303
|
}
|
308
304
|
}
|
309
|
-
var li = $('<li />')
|
310
|
-
.attr('class',cssClass)
|
311
|
-
.append('<a class="link-no-decoration" href="#"><i class="mdib mdib-view-quilt mdib-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
|
312
|
-
.on('click', function () {
|
313
|
-
if (settings.loadFromBootswatch) {
|
314
|
-
base.switchTheme(value.name, value.css);
|
315
|
-
} else {
|
316
|
-
base.switchTheme(value.name, value.cssCdn);
|
317
|
-
}
|
318
|
-
// remove previous "active" class and apply to latest clicked element
|
319
|
-
$(this).parent().find('li').removeClass('active');
|
320
|
-
$(this).addClass('active');
|
321
|
-
});
|
322
|
-
base.$element.append(li);
|
323
|
-
});
|
324
305
|
|
306
|
+
var li = $('<li />')
|
307
|
+
.attr('class', cssClass)
|
308
|
+
.append('<a class="link-no-decoration" href="#"><i class="mdib mdib-view-quilt mdib-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
|
309
|
+
.on('click', function () {
|
310
|
+
if (settings.loadFromBootswatch) {
|
311
|
+
base.switchTheme(value.name, value.css);
|
312
|
+
} else {
|
313
|
+
base.switchTheme(value.name, value.cssCdn);
|
314
|
+
}
|
315
|
+
// remove previous "active" class and apply to latest clicked element
|
316
|
+
$(this).parent().find('li').removeClass('active');
|
317
|
+
$(this).addClass('active');
|
318
|
+
});
|
319
|
+
base.$element.append(li);
|
320
|
+
}); // END $.each
|
321
|
+
|
322
|
+
menu_type = (base.$element[0].className.includes("dropdown-menu")) ? 'desktop' : 'mobile';
|
323
|
+
message.type = 'state';
|
324
|
+
message.action = 'menu loaded for : ' + menu_type;
|
325
|
+
message.text = 'menu loaded on id: ' + base.$element[0].id;
|
326
|
+
j1.sendMessage('ThemeSwitcher', 'j1.adapter.navigator', message);
|
327
|
+
|
328
|
+
// END if element is 'ul'
|
325
329
|
} else if (this.$element.is('select')) {
|
326
|
-
logger.
|
330
|
+
logger.info('\n' + 'bootstrapThemeSelector: SELECT element selected');
|
327
331
|
this.$element.empty();
|
328
332
|
|
329
333
|
var optionSelectedMarker;
|
@@ -342,19 +346,19 @@
|
|
342
346
|
var optionSelected = $('option:selected', this);
|
343
347
|
base.switchTheme(optionSelected.text(), optionSelected.val());
|
344
348
|
});
|
345
|
-
|
349
|
+
// END if element is 'select'
|
346
350
|
} else {
|
347
351
|
// no container found to add Theme list
|
348
352
|
logger.info('\n' + 'bootstrapThemeSelector: no UL or SELECT element found');
|
349
353
|
logger.error('\n' + 'bootstrapThemeSelector: failed');
|
350
354
|
// console.warn('bootstrapThemeSelector only works with ul or select elements');
|
351
|
-
}
|
355
|
+
} // END if
|
352
356
|
}, // END addThemesToControl
|
353
357
|
|
354
358
|
// -------------------------------------------------------------------------
|
355
359
|
// getThemes
|
356
360
|
// -------------------------------------------------------------------------
|
357
|
-
getThemes: function() {
|
361
|
+
getThemes: function () {
|
358
362
|
var base = this;
|
359
363
|
|
360
364
|
if (this.settings.localFeed !== null && this.settings.localFeed !== '') {
|
@@ -376,11 +380,11 @@
|
|
376
380
|
// Deferred loading remote themes from Bootswatch API
|
377
381
|
// -----------------------------------------------------------------------
|
378
382
|
$.ajax({
|
379
|
-
url:
|
383
|
+
url: this.settings.bootswatchApiUrl + '/' + this.settings.bootswatchApiVersion + '.json',
|
380
384
|
// jadams 2016-10-10: removed the setting for sychronous XMLHttpRequest
|
381
385
|
// async: false,
|
382
|
-
dataType:
|
383
|
-
success:
|
386
|
+
dataType: 'json',
|
387
|
+
success: function (data) {
|
384
388
|
if (typeof data.themes === 'undefined') {
|
385
389
|
return null;
|
386
390
|
}
|
@@ -409,23 +413,23 @@
|
|
409
413
|
|
410
414
|
// Plugin definition
|
411
415
|
// ---------------------------------------------------------------------------
|
412
|
-
$.fn.
|
413
|
-
var methodReturn;
|
416
|
+
$.fn.ThemeSwitcher = function (option) {
|
414
417
|
var args = Array.prototype.slice.call(arguments, 1);
|
415
418
|
var $this = $(this);
|
416
|
-
var data = $this.data('
|
419
|
+
var data = $this.data('ThemeSwitcher');
|
417
420
|
var options = typeof option === 'object' && option;
|
421
|
+
var methodReturn;
|
418
422
|
|
419
423
|
if (!data) {
|
420
|
-
$this.data('
|
424
|
+
$this.data('ThemeSwitcher', (data = new ThemeSwitcher(this, options) ));
|
421
425
|
}
|
422
426
|
if (typeof option === 'string') {
|
423
|
-
methodReturn = data[
|
427
|
+
methodReturn = data[option].apply(data, args);
|
424
428
|
}
|
425
|
-
return (
|
429
|
+
return (typeof methodReturn === 'undefined') ? $this : methodReturn;
|
426
430
|
};
|
427
431
|
|
428
|
-
$.fn.
|
432
|
+
$.fn.ThemeSwitcher.defaults = {
|
429
433
|
debug: false,
|
430
434
|
saveToCookie: true,
|
431
435
|
cssThemeLink: 'bootstrapTheme',
|
@@ -435,17 +439,11 @@
|
|
435
439
|
cookiePath: '/',
|
436
440
|
defaultCssFile: 'https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css',
|
437
441
|
bootswatchApiUrl: 'https://bootswatch.com/api/',
|
438
|
-
bootswatchApiVersion: '
|
442
|
+
bootswatchApiVersion: '5',
|
439
443
|
loadFromBootswatch: true,
|
440
444
|
localFeed: '',
|
441
445
|
excludeBootswatch: ''
|
442
446
|
};
|
443
447
|
|
444
|
-
$.fn.
|
445
|
-
|
446
|
-
$.fn.bootstrapThemeSwitcher.noConflict = function () {
|
447
|
-
$.fn.BootstrapThemeSwitcher = old;
|
448
|
-
return this;
|
449
|
-
};
|
450
|
-
|
448
|
+
$.fn.ThemeSwitcher.Constructor = ThemeSwitcher;
|
451
449
|
})(jQuery, window, document);
|
@@ -19,4 +19,4 @@
|
|
19
19
|
# The original version cannot be used with J1 for theme menu creation!
|
20
20
|
# -----------------------------------------------------------------------------
|
21
21
|
*/
|
22
|
-
|
22
|
+
"use strict";!function(e,t,o,s){var n,i,a=j1.getCookieNames(),h=j1.findCookie("_ga"),r=j1.findCookie("j1"),c=new liteURL(t.location.href),l=c.hostname,m=(l.substring(l.lastIndexOf(".",l.lastIndexOf(".")-1)+1),!!c.protocol.includes("https")),d=log4javascript.getLogger("j1.themes.switcher"),u={},f=function(t,o){return this.$element=e(t),this.settings=e.extend({},e.fn.ThemeSwitcher.defaults,o),this.themesList=[],this.getThemes(),this};f.prototype={clear:function(){return d.debug("\nThemeSwitcher.clear"),this.$element.each(function(){this.$element.empty()})},update:function(){d.debug("\nThemeSwitcher.update"),this.getThemes()},checkStyleSheetByName:function(e){for(var t=!1,s=new RegExp("/"+e+"/","i"),n=0;n<o.styleSheets.length;n++)if(s.test(o.styleSheets[n].href)){t=!0;break}return t},switchTheme:function(t,o){var s=e(this),i=e.extend({},e.fn.ThemeSwitcher.defaults,s.data("ThemeSwitcher")),c=(i.cssThemeLink,i.debug);this.settings.includeBootswatch;if(j1.existsCookie(a.user_state)?(d.info("\ncookie found: "+a.user_state),n=j1.readCookie(a.user_state)):(d.error("\ncookie not found: "+a.user_state),d.info("\nj1 cookies found:"+r.length),r.forEach(function(e){console.log("j1.themes.switcher: "+e)}),d.info("\nga cookies found:"+h.length),h.forEach(function(e){console.log("j1.themes.switcher: "+e)})),n.theme_name,n.theme_css,void 0===o&&(o=this.settings.defaultCssFile),void 0===t&&(t=o),i.saveToCookie){if("undefined"==typeof Cookies)return"true"===c&&d.error("\ncookies library not present"),!1;n.theme_name=t,n.theme_css=o,n.theme_name.includes("Uno")||"Bootstrap"==n.theme_name?(n.theme_author="J1 Team",n.theme_author_url="https://jekyll.one/"):(n.theme_author="Bootswatch",n.theme_author_url="https://bootswatch.com/"),d.info("\nwrite to cookie : "+a.user_state),j1.writeCookie({name:a.user_state,data:n,secure:m,expires:365}),location.reload(!0)}else d.info("\nwrite to cookie : disabled"),d.warn("\nselected theme not activated: "+t)},loadThemeFromCookie:function(t){if("undefined"==typeof Cookies)return d.error("\ncookies library not present"),!1;e.extend({},e.fn.ThemeSwitcher.defaults,t);j1.existsCookie(a.user_state)?(d.info("\ncookie found: "+a.user_state),n=j1.readCookie(a.user_state)):(d.error("\ncookie not found: "+a.user_state),d.info("\nj1 cookies found:"+r.length),r.forEach(function(e){console.log("j1.themes.switcher: "+e)}),d.info("\nga cookies found:"+h.length),h.forEach(function(e){console.log("j1.themes.switcher: "+e)}));var o=n.theme_name,s=n.theme_css;this.switchTheme(o,s)},addTheme:function(e,t,o,s){void 0===o&&(o=0),void 0===s&&(s=0),this.themesList.splice(o,s,{name:e,css:t}),this.addThemesToControl()},addThemesToControl:function(){if(void 0===this.$element)return d.error("\nbootstrapThemeSelector|addThemesToControl: Element is undefined"),!1;if(void 0===this.themesList)return d.error("\nbootstrapThemeSelector|addThemesToControl: Themes is undefined"),!1;if(this.settings.excludeBootswatch){var t;-1!==this.settings.excludeBootswatch.indexOf(",")?t=this.settings.excludeBootswatch.replace(/ /g,"").split(","):(t=[]).push(this.settings.excludeBootswatch);var o=this.themesList;e.each(o,function(s,n){n&&n.name&&-1!==e.inArray(n.name,t)&&o.splice(s,1)}),this.themesList=o}var s=this;if(this.$element.is("ul")){var c,l=e(this),m=e.extend({},e.fn.ThemeSwitcher.defaults,l.data("ThemeSwitcher")),f=(m.cssThemeLink,m.debug);j1.existsCookie(a.user_state)?(d.info("\nuser state cookie found"),n=j1.readCookie(a.user_state)):(d.error("\nuser state NOT cookie found"),d.info("\nj1 cookies found:"+r.length),r.forEach(function(e){console.log("j1.themes.switcher: "+e)}),d.info("\nga cookies found:"+h.length),h.forEach(function(e){console.log("j1.themes.switcher: "+e)})),c=n.theme_name,"true"===f&&d.info("\nbootstrapThemeSelector: UL element selected"),this.$element.empty();var p="";e.each(this.themesList,function(t,o){p=s.$element[0].id.includes("mmenu")?"mmenu-item":"dropdown-item",o.name===c&&(p=s.$element[0].id.includes("mmenu")?"mmenu-item active":"dropdown-item active");var n=e("<li />").attr("class",p).append('<a class="link-no-decoration" href="#"><i class="mdib mdib-view-quilt mdib-18px mr-2" style="color: #9E9E9E"></i>'+o.name+"</a>").on("click",function(){m.loadFromBootswatch?s.switchTheme(o.name,o.css):s.switchTheme(o.name,o.cssCdn),e(this).parent().find("li").removeClass("active"),e(this).addClass("active")});s.$element.append(n)}),i=s.$element[0].className.includes("dropdown-menu")?"desktop":"mobile",u.type="state",u.action="menu loaded for : "+i,u.text="menu loaded on id: "+s.$element[0].id,j1.sendMessage("ThemeSwitcher","j1.adapter.navigator",u)}else if(this.$element.is("select")){var T;d.info("\nbootstrapThemeSelector: SELECT element selected"),this.$element.empty(),e.each(this.themesList,function(e,t){T=null,t.name===c&&(T="selected"),m.loadFromBootswatch?s.$element.append("<option "+T+" value='"+t.css+"'>"+t.name+"</option>"):s.$element.append("<option "+T+" value='"+t.cssCdn+"'>"+t.name+"</option>")}),this.$element.on("change",function(){var t=e("option:selected",this);s.switchTheme(t.text(),t.val())})}else d.info("\nbootstrapThemeSelector: no UL or SELECT element found"),d.error("\nbootstrapThemeSelector: failed")},getThemes:function(){var t=this;null!==this.settings.localFeed&&""!==this.settings.localFeed?e.ajax({url:this.settings.localFeed,dataType:"json",success:function(e){t.themesList=e.themes,t.addThemesToControl()},error:function(e,o,s){d.error("\nfailed to retrieve the local feed from: '"+t.settings.localFeed+"'")}}):e.ajax({url:this.settings.bootswatchApiUrl+"/"+this.settings.bootswatchApiVersion+".json",dataType:"json",success:function(e){if(void 0===e.themes)return null;t.themesList=e.themes,t.themesList.splice(0,0,{name:"default",css:t.settings.defaultCssFile}),t.addThemesToControl()}})},themes:function(e){if(void 0===e)return this.themesList;this.themesList=e}},e.fn.ThemeSwitcher=function(t){var o,s=Array.prototype.slice.call(arguments,1),n=e(this),i=n.data("ThemeSwitcher"),a="object"==typeof t&&t;return i||n.data("ThemeSwitcher",i=new f(this,a)),"string"==typeof t&&(o=i[t].apply(i,s)),void 0===o?n:o},e.fn.ThemeSwitcher.defaults={debug:!1,saveToCookie:!0,cssThemeLink:"bootstrapTheme",cookieThemeName:"bootstrapTheme.name",cookieThemeCss:"boostrapTheme.css",cookieExpiration:365,cookiePath:"/",defaultCssFile:"https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/css/bootstrap.min.css",bootswatchApiUrl:"https://bootswatch.com/api/",bootswatchApiVersion:"5",loadFromBootswatch:!0,localFeed:"",excludeBootswatch:""},e.fn.ThemeSwitcher.Constructor=f}(jQuery,window,document);
|