j1-template 2024.1.5 → 2024.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (195) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/layouts/content_generator_page.html +0 -34
  3. data/_includes/themes/j1/modules/searcher/generator.html +4 -1
  4. data/_includes/themes/j1/modules/searcher/procedures/topsearch.proc +59 -56
  5. data/assets/data/authclient.html +1 -8
  6. data/assets/data/banner.html +1 -7
  7. data/assets/data/fab.html +2 -13
  8. data/assets/data/footer.html +0 -3
  9. data/assets/data/galeries.html +2 -13
  10. data/assets/data/gemini-ui.html +74 -21
  11. data/assets/data/iframes.html +1 -4
  12. data/assets/data/masonry.html +1 -13
  13. data/assets/data/masterslider.html +10 -21
  14. data/assets/data/menu.html +6 -14
  15. data/assets/data/mmenu.html +6 -5
  16. data/assets/data/mmenu_toc.html +2 -1
  17. data/assets/data/panel.html +4 -11
  18. data/assets/data/particles.yml +8 -8
  19. data/assets/data/quicklinks.html +4 -23
  20. data/assets/data/rtext_resizer.html +3 -1
  21. data/assets/data/slick.html +9 -11
  22. data/assets/data/translator.html +0 -1
  23. data/assets/themes/j1/adapter/js/advertising.js +143 -182
  24. data/assets/themes/j1/adapter/js/algolia.js +61 -54
  25. data/assets/themes/j1/adapter/js/analytics.js +68 -52
  26. data/assets/themes/j1/adapter/js/asciidoctor.js +32 -20
  27. data/assets/themes/j1/adapter/js/attic.js +75 -69
  28. data/assets/themes/j1/adapter/js/bmd.js +44 -26
  29. data/assets/themes/j1/adapter/js/carousel.js +117 -92
  30. data/assets/themes/j1/adapter/js/chatbot.js +77 -35
  31. data/assets/themes/j1/adapter/js/clipboard.js +67 -49
  32. data/assets/themes/j1/adapter/js/comments.js +93 -70
  33. data/assets/themes/j1/adapter/js/cookieConsent.js +157 -159
  34. data/assets/themes/j1/adapter/js/customFunctions.js +52 -35
  35. data/assets/themes/j1/adapter/js/customModule.js +61 -50
  36. data/assets/themes/j1/adapter/js/docsearch.js +55 -34
  37. data/assets/themes/j1/adapter/js/dropdowns.js +66 -52
  38. data/assets/themes/j1/adapter/js/fab.js +124 -109
  39. data/assets/themes/j1/adapter/js/gallery.js +68 -49
  40. data/assets/themes/j1/adapter/js/gemini.js +961 -301
  41. data/assets/themes/j1/adapter/js/iconPicker.js +76 -54
  42. data/assets/themes/j1/adapter/js/iconPickerPage.js +279 -0
  43. data/assets/themes/j1/adapter/js/iframer.js +84 -63
  44. data/assets/themes/j1/adapter/js/j1.js +605 -542
  45. data/assets/themes/j1/adapter/js/lazyLoader.js +43 -24
  46. data/assets/themes/j1/adapter/js/lightbox.js +53 -52
  47. data/assets/themes/j1/adapter/js/logger.js +78 -66
  48. data/assets/themes/j1/adapter/js/lunr.js +684 -86
  49. data/assets/themes/j1/adapter/js/masonry.js +84 -68
  50. data/assets/themes/j1/adapter/js/masterslider.js +136 -137
  51. data/assets/themes/j1/adapter/js/mmenu.js +102 -66
  52. data/assets/themes/j1/adapter/js/navigator.js +291 -356
  53. data/assets/themes/j1/adapter/js/particles.js +62 -40
  54. data/assets/themes/j1/adapter/js/rangeSlider.js +66 -48
  55. data/assets/themes/j1/adapter/js/rouge.js +63 -44
  56. data/assets/themes/j1/adapter/js/rtable.js +56 -40
  57. data/assets/themes/j1/adapter/js/rtextResizer.js +57 -44
  58. data/assets/themes/j1/adapter/js/scroller.js +170 -133
  59. data/assets/themes/j1/adapter/js/slick.js +99 -97
  60. data/assets/themes/j1/adapter/js/slimSelect.js +288 -0
  61. data/assets/themes/j1/adapter/js/speak2me.js +124 -128
  62. data/assets/themes/j1/adapter/js/themeToggler.js +118 -97
  63. data/assets/themes/j1/adapter/js/{themer.js → themes.js} +144 -113
  64. data/assets/themes/j1/adapter/js/toccer.js +88 -54
  65. data/assets/themes/j1/adapter/js/translator.js +74 -70
  66. data/assets/themes/j1/adapter/js/waves.js +75 -58
  67. data/assets/themes/j1/core/css/themes/unolight/bootstrap.css +29 -11
  68. data/assets/themes/j1/core/css/themes/unolight/bootstrap.min.css +2 -2
  69. data/assets/themes/j1/core/js/template.js +474 -420
  70. data/assets/themes/j1/core/js/template.min.js +7 -7
  71. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  72. data/assets/themes/j1/modules/carousel/css/theme/uno.css +4 -4
  73. data/assets/themes/j1/modules/carousel/css/theme/uno.min.css +1 -1
  74. data/assets/themes/j1/modules/clipboard/js/clipboard.js +0 -1
  75. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.js +27 -21
  76. data/assets/themes/j1/modules/iconPicker/css/theme/uno.css +58 -0
  77. data/assets/themes/j1/modules/iconPicker/css/theme/uno.min.css +16 -0
  78. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.0.js +493 -0
  79. data/assets/themes/j1/modules/iconPicker/js/universal-icon-picker.js +7 -7
  80. data/assets/themes/j1/modules/js-cookies/js/js.cookie.js +147 -0
  81. data/assets/themes/j1/modules/js-cookies/js/js.cookie.min.js +2 -0
  82. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.js +4 -4
  83. data/assets/themes/j1/modules/lightGallery/js/plugins/lg-video.min.js +2 -10
  84. data/assets/themes/j1/modules/lunr/css/j1.css +12 -6
  85. data/assets/themes/j1/modules/lunr/css/j1.min.css +1 -1
  86. data/assets/themes/j1/modules/lunr/js/j1.js +46 -43
  87. data/assets/themes/j1/modules/lunr/js/j1.min.js +1 -1
  88. data/assets/themes/j1/modules/masterslider/js/masterslider.js +1 -1
  89. data/assets/themes/j1/modules/scroller/js/scroller.js +64 -74
  90. data/assets/themes/j1/modules/scroller/js/scroller.min.js +1 -1
  91. data/assets/themes/j1/modules/slick/slider/css/theme/uno.css +4 -4
  92. data/assets/themes/j1/modules/slick/slider/css/theme/uno.min.css +1 -1
  93. data/assets/themes/j1/modules/slimSelect/js/select.js +1865 -1821
  94. data/assets/themes/j1/modules/slimSelect/js/select.min.js +2 -1
  95. data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +87 -89
  96. data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  97. data/assets/themes/j1/modules/videojs/js/plugins/vm/api/player.min.js +5 -7
  98. data/assets/themes/j1/modules/videojs/js/plugins/vm/api/v2.20.1/player.min.js +23 -0
  99. data/lib/j1/version.rb +1 -1
  100. data/lib/starter_web/Gemfile +2 -2
  101. data/lib/starter_web/README.md +5 -5
  102. data/lib/starter_web/_config.yml +1 -1
  103. data/lib/starter_web/_data/blocks/_panel.yml +775 -0
  104. data/lib/starter_web/_data/blocks/panel.yml +53 -53
  105. data/lib/starter_web/_data/j1_config.yml +3 -2
  106. data/lib/starter_web/_data/layouts/default.yml +0 -2
  107. data/lib/starter_web/_data/modules/_scroller.yml +102 -0
  108. data/lib/starter_web/_data/modules/carousel.yml +3 -3
  109. data/lib/starter_web/_data/modules/defaults/attics.yml +5 -5
  110. data/lib/starter_web/_data/modules/defaults/docsearch.yml +1 -1
  111. data/lib/starter_web/_data/modules/defaults/gemini.yml +204 -46
  112. data/lib/starter_web/_data/modules/defaults/{iconPicker.yml → icon_picker.yml} +6 -12
  113. data/lib/starter_web/_data/modules/defaults/lunr.yml +20 -5
  114. data/lib/starter_web/_data/modules/defaults/masterslider.yml +4 -4
  115. data/lib/starter_web/_data/modules/defaults/navigator.yml +20 -24
  116. data/lib/starter_web/_data/modules/defaults/particles.yml +3 -3
  117. data/lib/starter_web/_data/modules/defaults/slim_select.yml +54 -0
  118. data/lib/starter_web/_data/modules/defaults/{themer.yml → themes.yml} +10 -10
  119. data/lib/starter_web/_data/modules/defaults/toccer.yml +1 -1
  120. data/lib/starter_web/_data/modules/gallery.yml +33 -38
  121. data/lib/starter_web/_data/modules/gemini.yml +42 -3
  122. data/lib/starter_web/_data/modules/{iconPicker.yml → icon_picker.yml} +31 -3
  123. data/lib/starter_web/_data/modules/lunr.yml +12 -1
  124. data/lib/starter_web/_data/modules/masonry.yml +37 -38
  125. data/lib/starter_web/_data/modules/masterslider.yml +78 -95
  126. data/lib/starter_web/_data/modules/navigator_menu.yml +12 -20
  127. data/lib/starter_web/_data/modules/particles.yml +3 -3
  128. data/lib/starter_web/_data/modules/scroller.yml +3 -3
  129. data/lib/starter_web/_data/modules/slim_select.yml +110 -0
  130. data/lib/starter_web/_data/modules/{themer.yml → themes.yml} +4 -4
  131. data/lib/starter_web/_data/resources.yml +83 -47
  132. data/lib/starter_web/_data/templates/feed.xml +1 -1
  133. data/lib/starter_web/_includes/attributes.asciidoc +354 -355
  134. data/lib/starter_web/_plugins/asciidoctor/gemini-ui-block.rb +1 -1
  135. data/lib/starter_web/_plugins/asciidoctor/slim-select-block.rb +45 -0
  136. data/lib/starter_web/_plugins/index/lunr.rb +1 -1
  137. data/lib/starter_web/collections/asciidoc_skeletons/simple-post/_posts/yyyy-mm-dd-your-post-name.asciidoc +5 -2
  138. data/lib/starter_web/collections/posts/public/featured/_posts/0000-00-00-welcome-to-j1.adoc.erb +3 -3
  139. data/lib/starter_web/collections/posts/public/featured/_posts/2021-01-01-about-cookies.adoc +9 -9
  140. data/lib/starter_web/collections/posts/public/featured/_posts/2021-02-01-static-site-generators.adoc +4 -4
  141. data/lib/starter_web/collections/posts/public/featured/_posts/2022-02-01-about-j1.adoc +3 -2
  142. data/lib/starter_web/collections/posts/public/featured/_posts/2023-10-18-url-types.adoc +12 -12
  143. data/lib/starter_web/package.json +1 -1
  144. data/lib/starter_web/pages/public/about/features.adoc +1 -1
  145. data/lib/starter_web/pages/public/about/reporting_issues.adoc +1 -0
  146. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/_includes/attributes.asciidoc +44 -44
  147. data/lib/starter_web/pages/public/asciidoc_skeletons/documentation/documentation.adoc +1 -0
  148. data/lib/starter_web/pages/public/asciidoc_skeletons/multi-document/_includes/attributes.asciidoc +12 -12
  149. data/lib/starter_web/pages/public/blog/navigator/archive/allview.html +1 -1
  150. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/attributes.asciidoc +42 -28
  151. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/highlghter_rouge.adoc +1 -0
  152. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/lunr_search.adoc +1 -0
  153. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_audio_video.adoc +18 -2
  154. data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/present_images.adoc +43 -50
  155. data/lib/starter_web/pages/public/legal/en/100_copyright.adoc +6 -11
  156. data/lib/starter_web/pages/public/legal/en/200_impress.adoc +4 -11
  157. data/lib/starter_web/pages/public/legal/en/300_privacy.adoc +5 -12
  158. data/lib/starter_web/pages/public/legal/en/400_comment_policy.adoc +5 -10
  159. data/lib/starter_web/pages/public/tools/previewer/_includes/attributes.asciidoc +10 -9
  160. data/lib/starter_web/pages/public/tools/previewer/preview_bootstrap_theme.adoc +77 -75
  161. metadata +52 -46
  162. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/attributes.asciidoc +0 -47
  163. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/preview_google_adsense.asciidoc +0 -448
  164. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/documents/readme +0 -0
  165. data/lib/starter_web/pages/public/manuals/integrations/gemini/_includes/tables/readme +0 -0
  166. data/lib/starter_web/pages/public/manuals/integrations/gemini/gemini.adoc +0 -525
  167. data/lib/starter_web/pages/public/manuals/integrations/gemini/security.asccidoc +0 -274
  168. data/lib/starter_web/pages/public/manuals/integrations/gemini/security.hrml +0 -560
  169. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_biography.adoc +0 -0
  170. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_fantasy.adoc +0 -0
  171. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/article_previewer/viewer_romance.adoc +0 -0
  172. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/jekyll_collections.adoc +0 -0
  173. /data/lib/starter_web/pages/public/{legal/learn → learn}/bookshelf/viewer_all_books.adoc +0 -0
  174. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/100_gistblock.asciidoc +0 -0
  175. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_info.asciidoc +0 -0
  176. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_left_warning.asciidoc +0 -0
  177. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_bottom_right_danger.asciidoc +0 -0
  178. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_central_success.asciidoc +0 -0
  179. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_left_info.asciidoc +0 -0
  180. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_full_height_right_success.asciidoc +0 -0
  181. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_table_bs_modal_examples.asciidoc +0 -0
  182. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_info.asciidoc +0 -0
  183. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_left_info.asciidoc +0 -0
  184. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/410_top_right_success.asciidoc +0 -0
  185. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/419_advanced_modals_demo.asciidoc +0 -0
  186. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/tables/bs_modal_examples.asciidoc +0 -0
  187. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_bootstrap.asciidoc +0 -0
  188. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/_includes/documents/themes_rouge.asciidoc +0 -0
  189. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/asciidoc_extensions.adoc +0 -0
  190. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/bootstrap_themes.adoc +0 -0
  191. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/icon_fonts.adoc +0 -0
  192. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/modal_extentions.adoc +0 -0
  193. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/responsive_tables.adoc +0 -0
  194. /data/lib/starter_web/pages/public/{legal/learn → learn}/roundtrip/typography.adoc +0 -0
  195. /data/lib/starter_web/pages/public/{legal/learn → learn}/where_to_go.adoc +0 -0
@@ -0,0 +1,493 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/theme_uno/modules/iconPicker/js/universal-icon-picker.js
4
+ # UniversalIconPicker v.1.1.0 implementation for J1 Theme
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ # https://github.com/migliori/universal-icon-picker
9
+ #
10
+ # Copyright (C) 2023, 2024 Juergen Adams
11
+ # Copyright (C) 2023 Gilles Migliori
12
+ #
13
+ # J1 Template is licensed under the MIT License.
14
+ # See: https://github.com/jekyll-one-org/j1-template/blob/main/LICENSE.md
15
+ # -----------------------------------------------------------------------------
16
+ */
17
+ const iconPickerUrl = document.currentScript.src.replace(/js\/([a-z\.-]+)$/gm, '');
18
+ const loadedDependencies = [];
19
+
20
+ (function (root, factory) {
21
+ if (typeof define === 'function' && define.amd) {
22
+ define([], factory('UniversalIconPicker'));
23
+ } else if (typeof exports === 'object') {
24
+ module.exports = factory('UniversalIconPicker');
25
+ } else {
26
+ root['UniversalIconPicker'] = factory('UniversalIconPicker');
27
+ }
28
+ }(this, function () {
29
+ 'use strict';
30
+
31
+ const createDomEle = function (string) {
32
+ const ele = document.createElement('div');
33
+ ele.innerHTML = string;
34
+ return ele.firstChild;
35
+ }
36
+
37
+ const debounce = function (func, wait, immediate) {
38
+ let timeout;
39
+ return function () {
40
+ const context = this,
41
+ args = arguments;
42
+ const later = function () {
43
+ timeout = null;
44
+ if (!immediate) func.apply(context, args);
45
+ };
46
+ const callNow = immediate && !timeout;
47
+ clearTimeout(timeout);
48
+ timeout = setTimeout(later, wait);
49
+ if (callNow) func.apply(context, args);
50
+ };
51
+ };
52
+
53
+ const escapeHtml = function (text) {
54
+ const map = {
55
+ '&': '&',
56
+ '<': '&lt;',
57
+ '>': '&gt;',
58
+ '"': '&quot;',
59
+ "'": '&#039;'
60
+ };
61
+
62
+ return text.replace(/[&<>"']/g, function (m) { return map[m]; });
63
+ };
64
+
65
+ /**
66
+ * Merge defaults with user options
67
+ * @param {Object} defaults Default settings
68
+ * @param {Object} options User options
69
+ */
70
+ const extend = function (defaults, options) {
71
+ let prop, extended = {};
72
+ for (prop in defaults) {
73
+ if (Object.prototype.hasOwnProperty.call(defaults, prop)) {
74
+ extended[prop] = defaults[prop];
75
+ }
76
+ }
77
+ for (prop in options) {
78
+ if (Object.prototype.hasOwnProperty.call(options, prop)) {
79
+ extended[prop] = options[prop];
80
+ }
81
+ }
82
+
83
+ return extended;
84
+ };
85
+
86
+ const getLibraryName = function (string) {
87
+ return string.replace(/([A-Z])/g, ' $1');
88
+ }
89
+
90
+ /**
91
+ * Plugin Object
92
+ * @param selector The html selector to initialize
93
+ * @param {Object} options User options
94
+ * @constructor
95
+ */
96
+ function UniversalIconPicker (selector, options) {
97
+ this.selector = selector;
98
+
99
+ let defaults = {
100
+ allowEmpty: true,
101
+ iconLibraries: null,
102
+ iconLibrariesCss: null,
103
+ mode: 'autoload', // autoload | onrequest
104
+ onBeforeOpen: null,
105
+ onReset: null,
106
+ onSelect: null,
107
+ resetSelector: null,
108
+ loadCustomCss: false
109
+ };
110
+ this.options = extend(defaults, options);
111
+
112
+ this.activeLibraryId = '';
113
+ this.filterIcon = '';
114
+ this.iconEventsLoaded = false;
115
+ this.iconLibraries = {};
116
+ this.iconLibrariesLoaded = false;
117
+ this.iconMarkup = '';
118
+ this.iconWrap = '';
119
+ this.idSuffix = '-' + this.selector.replace(/[#\s[\]="]/g, '');
120
+ this.sideBarBtn = '';
121
+ this.sideBarList = [];
122
+
123
+ this.universalWrap = '<div class="uip-modal uip-open" id="uip-modal' + this.idSuffix + '"><div class="uip-modal--content"><div class="uip-modal--header"><div class="uip-modal--header-logo-area"><span class="uip-modal--header-logo-title">Icon Picker</span></div><div class="uip-modal--header-close-btn"><img src="' + iconPickerUrl + '/images/xmark-solid.svg" width="40" height="40" alt="Close" title="Close"></div></div><div class="uip-modal--body"><div id="uip-modal--sidebar' + this.idSuffix + '" class="uip-modal--sidebar"><div class="uip-modal--sidebar-tabs"></div></div><div id="uip-modal--icon-preview-wrap' + this.idSuffix + '" class="uip-modal--icon-preview-wrap"><div class="uip-modal--icon-search"><input name="" value="" placeholder="Filter by name..."><img src="' + iconPickerUrl + '/images/magnifying-glass-solid.svg" width="20" height="16" alt="Search" title="Search"></div><div class="uip-modal--icon-preview-inner"><div id="uip-modal--icon-preview' + this.idSuffix + '" class="uip-modal--icon-preview"></div></div></div></div><div class="uip-modal--footer"><button class="uip-insert-icon-button mt-3 mb-3 mr-6">Copy to clipboard</button></div></div></div>';
124
+
125
+ this.universalDomEle = createDomEle(this.universalWrap);
126
+ this.sidebarTabs = this.universalDomEle.querySelector('.uip-modal--sidebar-tabs');
127
+ this.previewWrap = this.universalDomEle.querySelector('#uip-modal--icon-preview' + this.idSuffix);
128
+ this.searchInput = this.universalDomEle.querySelector('.uip-modal--icon-search input');
129
+ if (this.options.mode === 'autoload') {
130
+ this.init();
131
+ } else {
132
+ document.querySelector(this.selector).addEventListener('click', this.init.bind(this), { once: true });
133
+ }
134
+ }
135
+
136
+
137
+ // Plugin prototype
138
+ UniversalIconPicker.prototype = {
139
+
140
+ /* Public functions
141
+ ------------------------------------------------------------------------ */
142
+
143
+ init: function () {
144
+ this._loadCssFiles();
145
+ if (this.options.mode !== 'autoload') {
146
+ this._onBeforeOpen().then(() => {
147
+ this.open();
148
+ });
149
+ }
150
+ document.querySelector(this.selector).addEventListener('click', () => {
151
+ this._onBeforeOpen().then(() => {
152
+ this.open();
153
+ });
154
+ });
155
+
156
+ //Remove selected icon
157
+ if (this.options.resetSelector) {
158
+ document.querySelector(this.options.resetSelector).addEventListener('click', this.options.onReset);
159
+ }
160
+ },
161
+
162
+ open: function () {
163
+ this._loadIconLibraries().then(() => {
164
+ this.iconLibrariesLoaded = true;
165
+ if (!document.getElementById('uip-modal' + this.idSuffix)) {
166
+ // push universal dom to body
167
+ document.body.appendChild(this.universalDomEle);
168
+
169
+ // jadams, 2023-05-21: disable page scrolling if modal is OPEN
170
+ document.body.classList.add('stop-scrolling');
171
+
172
+ // Icon library close by clicking close button
173
+ this.universalDomEle.querySelector('.uip-modal--header-close-btn').addEventListener('click', () => {
174
+ this.universalDomEle.classList.add('uip-close');
175
+ this.universalDomEle.classList.remove('uip-open');
176
+ // jadams, 2023-05-21: (re-)enable page scrolling if modal is CLOSED
177
+ document.body.classList.remove('stop-scrolling');
178
+ });
179
+
180
+ // Insert button
181
+ this.universalDomEle.querySelector('.uip-insert-icon-button').addEventListener('click', () => {
182
+ let selected = this.universalDomEle.querySelector('.universal-selected');
183
+
184
+ if (selected) {
185
+ let iconHtml = selected.querySelector('i').outerHTML;
186
+ let jsonOutput = {
187
+ 'libraryId': selected.dataset.libraryId,
188
+ 'libraryName': selected.dataset.libraryName,
189
+ 'iconHtml': null,
190
+ 'iconMarkup': null,
191
+ 'iconClass': null,
192
+ 'iconText': null
193
+ };
194
+ if (!selected.querySelector('i').classList.value.match('uip-icon-none')) {
195
+ jsonOutput.iconHtml = iconHtml;
196
+ jsonOutput.iconMarkup = escapeHtml(iconHtml);
197
+ jsonOutput.iconClass = selected.querySelector('i').classList.value;
198
+ jsonOutput.iconText = selected.querySelector('i').innerText;
199
+ }
200
+
201
+ this.options.onSelect(jsonOutput);
202
+ }
203
+ // jadams, 2023-05-21: disable modal CLOSE on a select
204
+ // this.universalDomEle.classList.add('uip-close');
205
+ // this.universalDomEle.classList.remove('uip-open');
206
+ });
207
+ } else {
208
+ // Icon library open if dom element exist
209
+ this.universalDomEle.classList.remove('uip-close');
210
+ this.universalDomEle.classList.add('uip-open');
211
+ // jadams, 2023-05-21: disable page scrolling if modal is OPEN
212
+ document.body.classList.add('stop-scrolling');
213
+ }
214
+
215
+ if (!this.iconEventsLoaded) {
216
+ // selected icon highlighted by adding class
217
+ this.universalDomEle.querySelectorAll('.uip-icon-item').forEach((item) => {
218
+ item.addEventListener('click', (evt) => {
219
+ this.iconWrap.forEach((el) => {
220
+ el.classList.remove('universal-selected');
221
+ });
222
+ evt.currentTarget.classList.toggle('universal-selected');
223
+ });
224
+ item.addEventListener('dblclick', (evt) => {
225
+ this.universalDomEle.querySelector('.uip-insert-icon-button').click();
226
+ });
227
+ });
228
+ this.iconEventsLoaded = true;
229
+ }
230
+
231
+ this.universalDomEle.querySelector('.uip-modal--icon-search input').focus();
232
+ });
233
+ },
234
+
235
+ setOptions: function (opts) {
236
+ this.options = extend(this.options, opts);
237
+ if (opts.iconLibrariesCss) {
238
+ this._loadCssFiles();
239
+ }
240
+ if (opts.iconLibraries) {
241
+ // dom icon events need to be reloaded
242
+ this.iconEventsLoaded = false;
243
+ this.iconLibrariesLoaded = false;
244
+ this._resetIconAndSidebarList();
245
+ }
246
+ },
247
+
248
+ /* Private functions
249
+ ------------------------------------------------------------------------ */
250
+
251
+ _clickHandlerFunc: function (e) {
252
+ if (!e.currentTarget.classList.contains('universal-active')) {
253
+ this.sideBarBtn.forEach(function (item) {
254
+ item.classList.remove('universal-active');
255
+ });
256
+ e.currentTarget.classList.add('universal-active')
257
+ }
258
+ this._sidebarFilterFunc(e.currentTarget.dataset['libraryId']);
259
+ },
260
+
261
+ _iconItemMarkup: function (libraryName, libraryItem) {
262
+ let markup = '',
263
+ library = libraryItem['icon-style'],
264
+ prefix = libraryItem['prefix'];
265
+
266
+ if (this.options.allowEmpty) {
267
+ markup += '<div class="uip-icon-item" data-library-id="' + library + '" data-filter="" data-library-name="' + libraryName + '"><div class="uip-icon-item-inner"><i class="' + prefix + ' uip-icon-none">&nbsp;</i><div class="uip-icon-item-name" title="None">None</div></div></div>';
268
+ }
269
+ if (prefix.match(/^material-icons/)) {
270
+ libraryItem['icons'].forEach(function (item) {
271
+ markup += '<div class="uip-icon-item" data-library-id="' + library + '" data-filter="' + item + '" data-library-name="' + libraryName + '"><div class="uip-icon-item-inner"><i class="' + prefix + '">' + item + '</i><div class="uip-icon-item-name" title="' + item + '">' + item.replace("-", " ") + '</div></div></div>';
272
+ });
273
+ } else {
274
+ libraryItem['icons'].forEach(function (item) {
275
+ markup += '<div class="uip-icon-item" data-library-id="' + library + '" data-filter="' + item + '" data-library-name="' + libraryName + '"><div class="uip-icon-item-inner"><i class="' + [prefix, item].join('') + '"></i><div class="uip-icon-item-name" title="' + item + '">' + item.replace("-", " ") + '</div></div></div>';
276
+ });
277
+ }
278
+
279
+ return markup;
280
+ },
281
+
282
+ _iconItemPush: function (arrayList) {
283
+ this.previewWrap.innerHTML = '';
284
+ arrayList.forEach((item) => {
285
+ this.previewWrap.appendChild(item[1]);
286
+ });
287
+ },
288
+
289
+ _loadCssFiles: function () {
290
+ let link = document.createElement('link');
291
+ if (!loadedDependencies.includes('universal-icon-picker.min.css') & !this.options.loadCustomCss) {
292
+ link.rel = 'stylesheet';
293
+ link.type = 'text/css';
294
+ link.href = iconPickerUrl + 'css/universal-icon-picker.min.css';
295
+ link.media = 'screen';
296
+ document.head.appendChild(link);
297
+ loadedDependencies.push('universal-icon-picker.min.css');
298
+ }
299
+ if (this.options.iconLibrariesCss) {
300
+ this.options.iconLibrariesCss.forEach(cssFile => {
301
+ if (!loadedDependencies.includes(cssFile)) {
302
+ let cssFileLink = iconPickerUrl + 'css/' + cssFile;
303
+ if (cssFile.match(/^http|^\/\//)) {
304
+ cssFileLink = cssFile;
305
+ }
306
+ link = document.createElement('link');
307
+ link.rel = 'stylesheet';
308
+ link.type = 'text/css';
309
+ link.href = cssFileLink;
310
+ link.media = 'screen';
311
+ document.head.appendChild(link);
312
+ loadedDependencies.push(cssFile);
313
+ }
314
+ });
315
+ }
316
+ },
317
+
318
+ _loadIconLibraries: async function (i = 0) {
319
+ if (!this.options.iconLibraries) {
320
+ console.error('Universal icon picker - no icon library loaded');
321
+ return false;
322
+ }
323
+ if (this.iconLibrariesLoaded) {
324
+ return true;
325
+ }
326
+ if (i === 0 && this.options.iconLibraries.length > 1) {
327
+ this.sideBarList.push({
328
+ "title": "all icons",
329
+ "list-icon": "",
330
+ "library-id": "all",
331
+ "prefix": ""
332
+ });
333
+ }
334
+
335
+ let iconLib = this.options.iconLibraries[i];
336
+
337
+ await fetch(iconPickerUrl + 'icons-libraries/' + iconLib)
338
+ .then(response => response.json())
339
+ .then(data => {
340
+ // Success!
341
+ const camelCasedIconLibrary = iconLib.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); }).replace(/\.[a-z.]+$/, '');
342
+ let newLibrary = {};
343
+ newLibrary[camelCasedIconLibrary] = data;
344
+ Object.assign(this.iconLibraries, newLibrary); // new icon library merge
345
+ if (i + 1 === this.options.iconLibraries.length) {
346
+ //set icon and sidebar list
347
+ this._setIconAndSidebarList();
348
+
349
+ this.activeLibraryId = this.sideBarList[0]['library-id'];
350
+
351
+ //sidebar list markup push
352
+ this.sidebarTabs.innerHTML = this._sideBarListMarkup(this.sideBarList);
353
+
354
+ //icon markup push
355
+ this.previewWrap.innerHTML = this.iconMarkup;
356
+
357
+ // get all icon wrapper dom element
358
+ this.iconWrap = this.previewWrap.querySelectorAll('.uip-icon-item');
359
+
360
+ //set event lisner to search input
361
+ this.searchInput.addEventListener('keyup', debounce(this._searchFunc, 100).bind(this), false);
362
+
363
+ //get all sidebar list item wrapper dom element
364
+ this.sideBarBtn = this.sidebarTabs.querySelectorAll('.uip-modal--sidebar-tab-item');
365
+
366
+ //set click event lisner to sidebar list item
367
+ this.sideBarBtn.forEach((item) => {
368
+ item.addEventListener('click', this._clickHandlerFunc.bind(this), false);
369
+ });
370
+
371
+ return true;
372
+ } else {
373
+ return this._loadIconLibraries(i + 1);
374
+ }
375
+ }).catch((error) => {
376
+ console.log(error);
377
+ return error;
378
+ });
379
+ },
380
+
381
+ _onBeforeOpen: async function () {
382
+ if (typeof (this.options.onBeforeOpen) === 'function') {
383
+ return this.options.onBeforeOpen();
384
+ }
385
+ },
386
+
387
+ _resetIconAndSidebarList: function () {
388
+ this.sideBarList = [];
389
+ this.iconMarkup = '';
390
+ this.iconLibraries = {};
391
+ this.iconWrap = '';
392
+ this.filterIcon = '';
393
+ this.sideBarBtn = '';
394
+ this.activeLibraryId = '';
395
+ },
396
+
397
+ _searchFunc: function (e) {
398
+ // console.log(this.value.toLowerCase());
399
+
400
+ const searchText = e.target.value.toLowerCase();
401
+ this._searchFilterFunc(searchText, 'filter');
402
+
403
+ },
404
+
405
+ _searchFilterFunc: function (filterText, dataName) {
406
+ this.filterIcon = Object.entries(this.iconWrap).filter((item) => {
407
+ if (-1 == item[1].dataset[dataName].indexOf(filterText) || (this.activeLibraryId !== 'all' && item[1].dataset['libraryId'] !== this.activeLibraryId)) {
408
+ return false;
409
+ }
410
+ return true;
411
+ });
412
+
413
+ this._iconItemPush(this.filterIcon);
414
+
415
+ },
416
+
417
+ _setIconAndSidebarList: function () {
418
+ for (const [libraryName, libraryContent] of Object.entries(this.iconLibraries)) {
419
+ this._setSideBarList(getLibraryName(libraryName), libraryContent);
420
+ this._setIconMarkup(libraryName, libraryContent);
421
+ }
422
+ },
423
+
424
+ _setIconMarkup: function (libraryName, libraryContent) {
425
+ if (libraryContent.icons !== undefined) {
426
+ this.iconMarkup += this._iconItemMarkup(libraryName, libraryContent)
427
+ } else {
428
+ Object.entries(libraryContent).forEach((item) => {
429
+ this.iconMarkup += this._iconItemMarkup(libraryName, item[1])
430
+ });
431
+ }
432
+ },
433
+
434
+ _sidebarFilterFunc: function (filterText) {
435
+ this.activeLibraryId = filterText;
436
+ this.filterIcon = Object.entries(this.iconWrap).filter(function (item) {
437
+ if ('all' === filterText || filterText === item[1].dataset['libraryId']) {
438
+ return true;
439
+ }
440
+ return false;
441
+ });
442
+
443
+ this._iconItemPush(this.filterIcon);
444
+
445
+ },
446
+
447
+ _setSideBarList: function (libraryName, libraryContent) {
448
+ let listItem;
449
+ if (libraryContent.icons !== undefined) {
450
+ listItem = {
451
+ 'title': libraryName,
452
+ 'prefix': libraryContent['prefix'] !== undefined ? libraryContent['prefix'] : '',
453
+ 'list-icon': libraryContent['list-icon'] !== undefined ? libraryContent['list-icon'] : '',
454
+ 'library-id': libraryContent['icon-style'] !== undefined ? libraryContent['icon-style'] : 'all',
455
+ };
456
+ this.sideBarList.push(listItem);
457
+ } else {
458
+ Object.entries(libraryContent).forEach(item => {
459
+ listItem = {
460
+ "title": libraryName + ' - ' + item[0],
461
+ "prefix": item[1]['prefix'] !== undefined ? item[1]['prefix'] : '',
462
+ "list-icon": item[1]['list-icon'] !== undefined ? item[1]['list-icon'] : "",
463
+ "library-id": item[1]['icon-style'] !== undefined ? item[1]['icon-style'] : "all",
464
+ };
465
+ this.sideBarList.push(listItem)
466
+ });
467
+ }
468
+ },
469
+
470
+ _sideBarListMarkup: function (sideBarList) {
471
+ let markup = '';
472
+ sideBarList.forEach((item) => {
473
+ let activeClazz = '';
474
+ if (item['library-id'] === this.activeLibraryId) {
475
+ activeClazz = ' universal-active';
476
+ }
477
+ if ('all' !== item['library-id']) {
478
+ let iconTag = '<i class="' + item['list-icon'] + '"></i>';
479
+ if (item['prefix'].match(/^material-icons/)) {
480
+ iconTag = '<i class="' + item['prefix'] + '">' + item['list-icon'] + '</i>';
481
+ }
482
+ markup += '<div class="uip-modal--sidebar-tab-item' + activeClazz + '" data-library-id="' + item['library-id'] + '">' + iconTag + item['title'] + '</div>';
483
+ } else {
484
+ markup += '<div class="uip-modal--sidebar-tab-item' + activeClazz + '" data-library-id="' + item['library-id'] + '"><img src="' + iconPickerUrl + '/images/star-of-life-solid.svg" width="13.125px" height="auto" alt="All" title="All">' + item['title'] + '</div>';
485
+ }
486
+ });
487
+
488
+ return markup;
489
+ }
490
+ };
491
+
492
+ return UniversalIconPicker;
493
+ }));
@@ -302,14 +302,14 @@ const loadedDependencies = [];
302
302
  let cssFileLink = iconPickerUrl + 'css/' + cssFile;
303
303
  if (cssFile.match(/^http|^\/\//)) {
304
304
  cssFileLink = cssFile;
305
+ link = document.createElement('link');
306
+ link.rel = 'stylesheet';
307
+ link.type = 'text/css';
308
+ link.href = cssFileLink;
309
+ link.media = 'screen';
310
+ document.head.appendChild(link);
311
+ loadedDependencies.push(cssFile);
305
312
  }
306
- link = document.createElement('link');
307
- link.rel = 'stylesheet';
308
- link.type = 'text/css';
309
- link.href = cssFileLink;
310
- link.media = 'screen';
311
- document.head.appendChild(link);
312
- loadedDependencies.push(cssFile);
313
313
  }
314
314
  });
315
315
  }
@@ -0,0 +1,147 @@
1
+ /*! js-cookie v3.0.5 | MIT */
2
+ ;
3
+ (function (global, factory) {
4
+ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
5
+ typeof define === 'function' && define.amd ? define(factory) :
6
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, (function () {
7
+ var current = global.Cookies;
8
+ var exports = global.Cookies = factory();
9
+ exports.noConflict = function () { global.Cookies = current; return exports; };
10
+ })());
11
+ })(this, (function () { 'use strict';
12
+
13
+ /* eslint-disable no-var */
14
+ function assign (target) {
15
+ for (var i = 1; i < arguments.length; i++) {
16
+ var source = arguments[i];
17
+ for (var key in source) {
18
+ target[key] = source[key];
19
+ }
20
+ }
21
+ return target
22
+ }
23
+ /* eslint-enable no-var */
24
+
25
+ /* eslint-disable no-var */
26
+ var defaultConverter = {
27
+ read: function (value) {
28
+ if (value[0] === '"') {
29
+ value = value.slice(1, -1);
30
+ }
31
+ return value.replace(/(%[\dA-F]{2})+/gi, decodeURIComponent)
32
+ },
33
+ write: function (value) {
34
+ return encodeURIComponent(value).replace(
35
+ /%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,
36
+ decodeURIComponent
37
+ )
38
+ }
39
+ };
40
+ /* eslint-enable no-var */
41
+
42
+ /* eslint-disable no-var */
43
+
44
+ function init (converter, defaultAttributes) {
45
+ function set (name, value, attributes) {
46
+ if (typeof document === 'undefined') {
47
+ return
48
+ }
49
+
50
+ attributes = assign({}, defaultAttributes, attributes);
51
+
52
+ if (typeof attributes.expires === 'number') {
53
+ attributes.expires = new Date(Date.now() + attributes.expires * 864e5);
54
+ }
55
+ if (attributes.expires) {
56
+ attributes.expires = attributes.expires.toUTCString();
57
+ }
58
+
59
+ name = encodeURIComponent(name)
60
+ .replace(/%(2[346B]|5E|60|7C)/g, decodeURIComponent)
61
+ .replace(/[()]/g, escape);
62
+
63
+ var stringifiedAttributes = '';
64
+ for (var attributeName in attributes) {
65
+ if (!attributes[attributeName]) {
66
+ continue
67
+ }
68
+
69
+ stringifiedAttributes += '; ' + attributeName;
70
+
71
+ if (attributes[attributeName] === true) {
72
+ continue
73
+ }
74
+
75
+ // Considers RFC 6265 section 5.2:
76
+ // ...
77
+ // 3. If the remaining unparsed-attributes contains a %x3B (";")
78
+ // character:
79
+ // Consume the characters of the unparsed-attributes up to,
80
+ // not including, the first %x3B (";") character.
81
+ // ...
82
+ stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
83
+ }
84
+
85
+ return (document.cookie =
86
+ name + '=' + converter.write(value, name) + stringifiedAttributes)
87
+ }
88
+
89
+ function get (name) {
90
+ if (typeof document === 'undefined' || (arguments.length && !name)) {
91
+ return
92
+ }
93
+
94
+ // To prevent the for loop in the first place assign an empty array
95
+ // in case there are no cookies at all.
96
+ var cookies = document.cookie ? document.cookie.split('; ') : [];
97
+ var jar = {};
98
+ for (var i = 0; i < cookies.length; i++) {
99
+ var parts = cookies[i].split('=');
100
+ var value = parts.slice(1).join('=');
101
+
102
+ try {
103
+ var found = decodeURIComponent(parts[0]);
104
+ jar[found] = converter.read(value, found);
105
+
106
+ if (name === found) {
107
+ break
108
+ }
109
+ } catch (e) {}
110
+ }
111
+
112
+ return name ? jar[name] : jar
113
+ }
114
+
115
+ return Object.create(
116
+ {
117
+ set,
118
+ get,
119
+ remove: function (name, attributes) {
120
+ set(
121
+ name,
122
+ '',
123
+ assign({}, attributes, {
124
+ expires: -1
125
+ })
126
+ );
127
+ },
128
+ withAttributes: function (attributes) {
129
+ return init(this.converter, assign({}, this.attributes, attributes))
130
+ },
131
+ withConverter: function (converter) {
132
+ return init(assign({}, this.converter, converter), this.attributes)
133
+ }
134
+ },
135
+ {
136
+ attributes: { value: Object.freeze(defaultAttributes) },
137
+ converter: { value: Object.freeze(converter) }
138
+ }
139
+ )
140
+ }
141
+
142
+ var api = init(defaultConverter, { path: '/' });
143
+ /* eslint-enable no-var */
144
+
145
+ return api;
146
+
147
+ }));
@@ -0,0 +1,2 @@
1
+ /*! js-cookie v3.0.5 | MIT */
2
+ !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,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}var t=function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});return t}));