j1-template 2021.2.10 → 2021.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/_includes/themes/j1/blocks/footer/boxes/contacts_box.proc +1 -1
  3. data/_includes/themes/j1/layouts/content_generator_article_navigator.html +2 -2
  4. data/_includes/themes/j1/layouts/content_generator_blog_archive.html +2 -2
  5. data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +2 -2
  6. data/_includes/themes/j1/modules/boards/news_pin_board.html +10 -10
  7. data/_includes/themes/j1/modules/connectors/translators/google-translator.html +18 -3
  8. data/_includes/themes/j1/modules/navigator/generator.html +6 -6
  9. data/_includes/themes/j1/procedures/posts/collate_calendar.proc +3 -3
  10. data/_includes/themes/j1/procedures/posts/create_series_header.proc +1 -1
  11. data/_includes/themes/j1/procedures/posts/pager.proc +1 -1
  12. data/_layouts/compress.html +12 -4
  13. data/assets/data/gallery_customizer.html +1 -1
  14. data/assets/data/menu.html +17 -17
  15. data/assets/data/mmenu.html +17 -17
  16. data/assets/data/private.json +49 -0
  17. data/assets/data/quicklinks.html +3 -3
  18. data/assets/themes/j1/adapter/js/j1.js +1 -1
  19. data/assets/themes/j1/adapter/js/{j1scroll.js → scroller.js} +86 -105
  20. data/assets/themes/j1/adapter/js/translator.js +17 -3
  21. data/assets/themes/j1/core/js/template.js +3930 -55
  22. data/assets/themes/j1/core/js/template.min.js +9 -8
  23. data/assets/themes/j1/core/js/template.min.js.map +1 -1
  24. data/assets/themes/j1/modules/backstretch/js/backstretch.min.js +1 -1
  25. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.full.js +1 -1
  26. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.js +1 -1
  27. data/assets/themes/j1/modules/bmd/js/bootstrap-material-design.min.js +1 -1
  28. data/assets/themes/j1/modules/cookieConsent/js/cookieConsent.min.js +1 -1
  29. data/assets/themes/j1/modules/datatables/js/datatables.js +1 -1
  30. data/assets/themes/j1/modules/datatables/js/datatables.min.js +5 -5
  31. data/assets/themes/j1/modules/{j1Deepl/js/j1deepl.js → deeplAPI/js/deeplAPI.js} +36 -11
  32. data/assets/themes/j1/modules/deeplAPI/js/deeplAPI.min.js +18 -0
  33. data/assets/themes/j1/modules/iframeResizer/examples/frame.absolute.html +3 -3
  34. data/assets/themes/j1/modules/iframeResizer/examples/frame.content.html +6 -6
  35. data/assets/themes/j1/modules/iframeResizer/examples/frame.tolerance.html +2 -2
  36. data/assets/themes/j1/modules/iframeResizer/js/client/iframeResizer.contentWindow.js +1 -1
  37. data/assets/themes/j1/modules/iframeResizer/js/client/iframeResizer.contentWindow.min.js +1 -1
  38. data/assets/themes/j1/modules/iframeResizer/js/resizer.min.js +1 -1
  39. data/assets/themes/j1/modules/jquery/js/jquery.js +2 -2
  40. data/assets/themes/j1/modules/jquery/js/jquery.min.js +1 -1
  41. data/assets/themes/j1/modules/jquery/js/jqueryUI.js +7 -7
  42. data/assets/themes/j1/modules/jquery/js/jqueryUI.min.js +3 -3
  43. data/assets/themes/j1/modules/lightGallery/js/core/j1/lightgallery-x.min.js +1 -1
  44. data/assets/themes/j1/modules/lightGallery/js/core/lightgallery.min.js +1 -1
  45. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-video.min.js +1 -1
  46. data/assets/themes/j1/modules/lightGallery/js/modules/j1/j1-x-video.min.js +1 -1
  47. data/assets/themes/j1/modules/lightbox/js/lightbox.js +1 -1
  48. data/assets/themes/j1/modules/lightbox/js/lightbox.min.js +1 -1
  49. data/assets/themes/j1/modules/lunrSearch/js/mustache.js +1 -1
  50. data/assets/themes/j1/modules/lunrSearch/js/mustache.min.js +1 -1
  51. data/assets/themes/j1/modules/lunrSearch/js/uri.js +1 -1
  52. data/assets/themes/j1/modules/lunrSearch/js/uri.min.js +7 -7
  53. data/assets/themes/j1/modules/mdiPreviewer/js/previewer.min.js +1 -1
  54. data/assets/themes/j1/modules/mdilPreviewer/js/previewer.min.js +1 -1
  55. data/assets/themes/j1/modules/{j1Scroll → scroller}/css/theme/uno.css +2 -2
  56. data/assets/themes/j1/modules/{j1Scroll → scroller}/css/theme/uno.min.css +0 -0
  57. data/assets/themes/j1/modules/scroller/js/scroller.js +346 -0
  58. data/assets/themes/j1/modules/scroller/js/scroller.min.js +15 -0
  59. data/assets/themes/j1/modules/themeSwitcher/js/switcher.js +1 -1
  60. data/assets/themes/j1/modules/themeSwitcher/js/switcher.min.js +1 -1
  61. data/assets/themes/j1/modules/translator/js/translator.js +38 -27
  62. data/assets/themes/j1/modules/translator/js/translator.min.js +1 -1
  63. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.js +1 -1
  64. data/assets/themes/j1/modules/twemoji/js/picker/twemoji-picker.min.js +1 -1
  65. data/assets/themes/j1/modules/videojs/js/video.min.js +2 -2
  66. data/lib/j1/version.rb +3 -3
  67. data/lib/starter_web/Gemfile +1 -1
  68. data/lib/starter_web/_config.yml +6 -2
  69. data/lib/starter_web/_data/_defaults/j1_config.1.yml +478 -0
  70. data/lib/starter_web/_data/apps/carousel.yml +4 -4
  71. data/lib/starter_web/_data/blocks/defaults/footer.yml +2 -2
  72. data/lib/starter_web/_data/blocks/footer.yml +2 -2
  73. data/lib/starter_web/_data/modules/attics.yml +1 -1
  74. data/lib/starter_web/_data/modules/defaults/attics.yml +2 -2
  75. data/lib/starter_web/_data/modules/defaults/translator.yml +1 -0
  76. data/lib/starter_web/_data/modules/{j1scroll.yml → scroller.yml} +30 -5
  77. data/lib/starter_web/_data/modules/translator.yml +3 -0
  78. data/lib/starter_web/_data/private.default.yml +8 -1
  79. data/lib/starter_web/_data/private.yml +8 -1
  80. data/lib/starter_web/_data/resources.yml +14 -35
  81. data/lib/starter_web/_includes/attributes.asciidoc +1 -1
  82. data/lib/starter_web/_plugins/lunr_index.rb +1 -1
  83. data/lib/starter_web/index.html +2 -1
  84. data/lib/starter_web/package.json +1 -1
  85. data/lib/starter_web/pages/public/blog/navigator/archive/dateview.html +2 -2
  86. data/lib/starter_web/pages/public/blog/navigator/archive/tagview.html +3 -3
  87. data/lib/starter_web/pages/public/blog/navigator/index.html +1 -1
  88. data/lib/starter_web/pages/public/learn/roundtrip/600_quicksearch.adoc +6 -6
  89. data/lib/starter_web/pages/public/manuals/dropdown-help.adoc +743 -743
  90. data/lib/starter_web/pages/public/previewer/preview_bootstrap_theme.adoc +85 -85
  91. data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
  92. data/lib/starter_web/utilsrv/package.json +1 -1
  93. metadata +12 -13
  94. data/assets/themes/j1/adapter/js/translator.1.js +0 -525
  95. data/assets/themes/j1/modules/j1Deepl/js/j1deepl.min.js +0 -18
  96. data/assets/themes/j1/modules/j1Scroll/js/j1scroll.js +0 -280
  97. data/assets/themes/j1/modules/j1Scroll/js/j1scroll.min.js +0 -15
  98. data/assets/themes/j1/modules/showOnScroll/js/showOnScroll.js +0 -73
  99. data/assets/themes/j1/modules/showOnScroll/js/showOnScroll.min.js +0 -15
@@ -0,0 +1,346 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/modules/scroller/js/scroller.js
4
+ # J1 core module for scroller
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ #
9
+ # Copyright (C) 2021 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # For details, see https://jekyll.one
13
+ # -----------------------------------------------------------------------------
14
+ # NOTE: Based on https://github.com/jquery-boilerplate/jquery-boilerplate
15
+ # See: https://www.dotnetcurry.com/jquery/1069/authoring-jquery-plugins
16
+ # -----------------------------------------------------------------------------
17
+ */
18
+
19
+ // the semi-colon before function invocation is a SAFETY method
20
+ // against concatenated scripts and/or other plugins which may
21
+ // NOT be closed properly.
22
+ //
23
+ ;(function($, window, document, undefined) {
24
+ 'use strict';
25
+
26
+ // Create the defaults
27
+ var pluginName = 'scroller',
28
+ defaults = {
29
+ type: 'infiniteScroll',
30
+ scrollOffset: 100,
31
+ elementScroll: false,
32
+ firstPage: 2,
33
+ lastPage: false,
34
+ infoLastPage: false,
35
+ loadStatus: false,
36
+ onInit: function (){}, // callback after plugin has initialized
37
+ onBeforeLoad: function (){}, // callback before new items are loaded
38
+ onAfterLoad: function (){} // callback after new items are loaded
39
+ };
40
+
41
+ // Plugin constructor
42
+ function Plugin (element, options) {
43
+ this.element = element;
44
+ this.settings = $.extend( {}, defaults, options);
45
+ this.settings.elementID = '#' + this.element.id;
46
+
47
+ // call the initializer
48
+ this.init(this.settings);
49
+ }
50
+
51
+ // Avoid plugin prototype conflicts
52
+ $.extend(Plugin.prototype, {
53
+ // -----------------------------------------------------------------------
54
+ // init()
55
+ // plugin initializer
56
+ // -----------------------------------------------------------------------
57
+ init: function(options) {
58
+ var _this = this;
59
+ var logger = log4javascript.getLogger('');
60
+
61
+ logger.info('\n' + 'initializing plugin: started');
62
+ logger.info('\n' + 'state: started');
63
+
64
+ if (options.elementScroll) {
65
+ _this.scroller = _this.element;
66
+ } else {
67
+ _this.scroller = window;
68
+ }
69
+
70
+ if (options.loadStatus) {
71
+ var spinner = '<div class="loader-ellips" style="display: none"> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> </div>';
72
+ $(spinner).insertAfter(options.elementID);
73
+ }
74
+
75
+ if (options.infoLastPage) {
76
+ var message = options.lastPageInfo;
77
+ $(message).insertAfter(options.elementID);
78
+ }
79
+
80
+ // jadams, 2021-11-08: for testing reason, registerScrollEvent delayed
81
+ // until page_ready state
82
+ var dependencies_met_page_ready = setInterval (function () {
83
+ if (j1.getState() === 'finished') {
84
+
85
+ // initialize infinite scroll
86
+ if ( options.type === 'infiniteScroll') {
87
+ logger.info('\n' + 'processing mode: ' + options.type);
88
+ logger.info('\n' + 'loading items from path: ' + options.pagePath + "#void");
89
+ logger.info('\n' + 'monitoring element set to: ' + this.scroller);
90
+ _this.registerScrollEvent(options);
91
+ }
92
+ // initialize show on scroll
93
+ if ( options.type === 'showOnScroll') {
94
+ logger.info('\n' + 'processing mode: ' + options.type);
95
+ logger.info('\n' + 'loading items from path: ' + options.pagePath + "#void");
96
+ logger.info('\n' + 'monitoring element set to: ' + this.scroller);
97
+ _this.registerScrollEvent(options);
98
+ }
99
+ logger.info('\n' + 'initializing plugin: finished');
100
+ logger.info('\n' + 'state: finished');
101
+ clearInterval(dependencies_met_page_ready);
102
+ }
103
+ });
104
+ },
105
+
106
+ // -------------------------------------------------------------------------
107
+ // isInViewport()
108
+ // detects if an element is visible in an viewport specified
109
+ // -------------------------------------------------------------------------
110
+ isInViewport: function (elm, offset) {
111
+ // if the element doesn't exist, abort
112
+ if( elm.length == 0 ) {
113
+ return;
114
+ }
115
+ var $window = jQuery(window);
116
+ var viewport_top = $window.scrollTop();
117
+ var viewport_height = $window.height();
118
+ var viewport_bottom = viewport_top + viewport_height;
119
+ var $elm = jQuery(elm);
120
+ var top = $elm.offset().top + offset;
121
+ var height = $elm.height();
122
+ var bottom = top + height;
123
+
124
+ return (top >= viewport_top && top < viewport_bottom) ||
125
+ (bottom > viewport_top && bottom <= viewport_bottom) ||
126
+ (height > viewport_height && top <= viewport_top && bottom >= viewport_bottom);
127
+ },
128
+
129
+ // -------------------------------------------------------------------------
130
+ // bottomReached()
131
+ // detect final scroll position
132
+ // NOTE: the calculation for BOTTOM position is different for
133
+ // elementScroll and windowScroll. For elementScroll, the
134
+ // trigger isBottomReached is TRUE, if the scroll position has
135
+ // the end of the container PLUS a given scrollOffset.
136
+ // For windowScroll, the trigger isBottomReached is TRUE, if
137
+ // the scroll position has the end of the window MINUS
138
+ // a given scrollOffset.
139
+ // -------------------------------------------------------------------------
140
+ isBottomReached: function (options) {
141
+ var _this = this;
142
+ var bottom, scrollY;
143
+ var clientHeight = $(options.elementID).height();
144
+
145
+ if (_this.settings.elementScroll) {
146
+ // check scroll position of the container items are to be added
147
+ var $window = $(window);
148
+ var viewport_top = $window.scrollTop();
149
+ var viewport_height = $window.height();
150
+ var viewport_bottom = viewport_top + viewport_height - options.scrollOffset;
151
+ var $elm = $(options.elementID);
152
+ var top = $elm.offset().top + clientHeight;
153
+ var height = $elm.height();
154
+ bottom = top + height;
155
+
156
+ return (top >= viewport_top && top < viewport_bottom) ||
157
+ (bottom > viewport_top && bottom <= viewport_bottom) ||
158
+ (height > viewport_height && top <= viewport_top && bottom >= viewport_bottom);
159
+ } else {
160
+ // check scroll position of the (overall) window
161
+ return (window.innerHeight + window.pageYOffset + options.scrollOffset >= document.body.offsetHeight);
162
+ }
163
+ },
164
+
165
+ // -------------------------------------------------------------------------
166
+ // detectScroll()
167
+ // EventHandler to load new items for infinite scroll if final scroll
168
+ // position reached
169
+ // -------------------------------------------------------------------------
170
+ registerScrollEvent: function (options) {
171
+ var _this = this;
172
+ var logger = log4javascript.getLogger('');
173
+
174
+ // scroller type infiniteScroll
175
+ if (options.type === 'infiniteScroll') {
176
+ logger.info('\n' + 'register scroll event of type: ' + options.type);
177
+
178
+ // register event function DYNAMICALLY
179
+ _this[options.id] = function (event) {
180
+ var options = _this.settings;
181
+
182
+ if (_this.isBottomReached(options)) {
183
+ if (options.firstPage > options.lastPage ) {
184
+ logger.info('\n' + 'last page detected on: ' + options.lastPage);
185
+ window.removeEventListener('scroll', _this[options.id]);
186
+ logger.info('\n' + 'scroll event: removed');
187
+
188
+ if (options.infoLastPage ) {
189
+ _this.infoLastPage(options);
190
+ }
191
+ return false;
192
+ }
193
+ _this.getNewPost(options);
194
+ }
195
+ };
196
+ window.addEventListener('scroll', _this[options.id]);
197
+ logger.info('\n' + 'scroll event: registered');
198
+ }
199
+
200
+ // scroller type showOnScroll
201
+ if (options.type === 'showOnScroll') {
202
+ logger.info('\n' + 'register scroll event of type: ' + options.type);
203
+
204
+ // register event function DYNAMICALLY
205
+ _this[options.id] = function (event) {
206
+ if (_this.isInViewport ($('#' + options.id ), options.scrollOffset)) {
207
+ logger.info('\n' + 'specified container is in view: ' + options.id);
208
+ $('.' + options.id).show(options.showDelay);
209
+ logger.info('\n' + 'remove eventHandler');
210
+ window.removeEventListener('scroll', _this[options.id]);
211
+ }
212
+ }
213
+ window.addEventListener('scroll', _this[options.id]);
214
+ }
215
+
216
+ },
217
+
218
+ // -------------------------------------------------------------------------
219
+ // getNewPost()
220
+ // load new items (from current path)
221
+ // Note: loader flag prevents to load items if AJAX load in progress
222
+ // is NOT finished
223
+ // -------------------------------------------------------------------------
224
+ getNewPost: function (options) {
225
+ var _this = this;
226
+ var logger = log4javascript.getLogger('');
227
+
228
+ logger.info('\n' + 'trigger loading ');
229
+
230
+ // initialze loader flag
231
+ if (this.itemsLoaded === false) return false;
232
+
233
+ // set loader flag (false == not loaded)
234
+ this.itemsLoaded = false;
235
+
236
+ // display spinner while loading
237
+ if (options.loadStatus) {
238
+ logger.info('\n' + 'show: spinner');
239
+ $('.loader-ellips').show();
240
+ }
241
+
242
+ var xmlhttp = new XMLHttpRequest();
243
+ xmlhttp.onreadystatechange = function () {
244
+ if (xmlhttp.readyState == XMLHttpRequest.DONE) {
245
+ if (xmlhttp.status == 200) {
246
+ options.firstPage++;
247
+ var childItems = _this.getChildItemsByAjaxHTML(options, xmlhttp.responseText);
248
+ _this.appendNewItems(childItems);
249
+
250
+ logger.info('\n' + 'loading new items: successful');
251
+
252
+ // hide the spinner after loading
253
+ if (options.loadStatus) {
254
+ logger.info('\n' + 'hide: spinner');
255
+ $('.loader-ellips').hide();
256
+ }
257
+
258
+ // set loader flag (true == loaded)
259
+ // return _this.itemsLoaded = true;
260
+ _this.itemsLoaded = true;
261
+ } else {
262
+ // hide the spinner
263
+ if (options.loadStatus) {
264
+ logger.info('\n' + 'hide: spinner');
265
+ $('.loader-ellips').hide();
266
+ }
267
+
268
+ logger.error('\n' + 'loading new items failed, HTTP response: ' + xmlhttp.status );
269
+ // set loader flag (true == loaded)
270
+ // return _this.itemsLoaded = false;
271
+ _this.itemsLoaded = false;
272
+ }
273
+ }
274
+ };
275
+ logger.info('\n' + 'loading new items from path: ' + options.pagePath + options.firstPage);
276
+ xmlhttp.open("GET", location.origin + options.pagePath + options.firstPage + '/index.html', true);
277
+ xmlhttp.send();
278
+ },
279
+
280
+ // -------------------------------------------------------------------------
281
+ // getChildItemsByAjaxHTML()
282
+ // extract items from page loaded
283
+ // -------------------------------------------------------------------------
284
+ getChildItemsByAjaxHTML: function (options, HTMLText) {
285
+ var newHTML = document.createElement('html');
286
+ var logger = log4javascript.getLogger('');
287
+
288
+ logger.info('\n' + 'load new items');
289
+ newHTML.innerHTML = HTMLText;
290
+ var childItems = newHTML.querySelectorAll(options.elementID + ' > *');
291
+ return childItems;
292
+ },
293
+
294
+ // -------------------------------------------------------------------------
295
+ // appendNewItems()
296
+ // append items and run post processing
297
+ // -------------------------------------------------------------------------
298
+ appendNewItems: function (items) {
299
+ var _this = this;
300
+ var logger = log4javascript.getLogger('');
301
+ var cookie_names = j1.getCookieNames();
302
+ var user_translate = j1.readCookie(cookie_names.user_translate);
303
+
304
+ logger.info('\n' + 'append new items');
305
+ items.forEach(function (item) {
306
+ _this.element.appendChild(item);
307
+ });
308
+
309
+ // no dropcaps if translation enabled
310
+ if (user_translate.translationEnabled) {
311
+ logger.info('\n' + 'translation enabled: ' + user_translate.translationEnabled);
312
+ logger.warn('\n' + 'skipped processing of dropcaps');
313
+ } else {
314
+ // initialize dropcaps
315
+ logger.info('\n' + 'post processing: createDropCap');
316
+ j1.core.createDropCap();
317
+ }
318
+
319
+ },
320
+
321
+ // -------------------------------------------------------------------------
322
+ // getNewPost()
323
+ // load|append new items
324
+ // Note: loader flag prevents to load items if AJAX load in progress
325
+ // is NOT finished
326
+ // -------------------------------------------------------------------------
327
+ infoLastPage: function (options) {
328
+ var _this = this;
329
+ var logger = log4javascript.getLogger('');
330
+
331
+ logger.info('\n' + 'show: infoLastPage');
332
+ $('.page-scroll-last').show();
333
+ }
334
+ }); // END prototype
335
+
336
+ // wrapper around the constructor to prevent multiple instantiations
337
+ $.fn [pluginName] = function(options) {
338
+ return this.each(function() {
339
+ if (!$.data( this, "plugin_" + pluginName)) {
340
+ $.data(this, "plugin_" +
341
+ pluginName, new Plugin(this, options));
342
+ }
343
+ });
344
+ };
345
+
346
+ })(jQuery, window, document);
@@ -0,0 +1,15 @@
1
+ /*
2
+ # -----------------------------------------------------------------------------
3
+ # ~/assets/themes/j1/modules//js/scroller.min.js
4
+ # J1 core module for scroller
5
+ #
6
+ # Product/Info:
7
+ # https://jekyll.one
8
+ #
9
+ # Copyright (C) 2021 Juergen Adams
10
+ #
11
+ # J1 Template is licensed under the MIT License.
12
+ # For details, see https://jekyll.one
13
+ # -----------------------------------------------------------------------------
14
+ */
15
+ (function(e,c,a,g){var d="scroller",f={type:"infiniteScroll",scrollOffset:100,elementScroll:false,firstPage:2,lastPage:false,infoLastPage:false,loadStatus:false,onInit:function(){},onBeforeLoad:function(){},onAfterLoad:function(){}};function b(i,h){this.element=i;this.settings=e.extend({},f,h);this.settings.elementID="#"+this.element.id;this.init(this.settings)}e.extend(b.prototype,{init:function(i){var m=this;var h=log4javascript.getLogger("");h.info("\ninitializing plugin: started");h.info("\nstate: started");if(i.elementScroll){m.scroller=m.element}else{m.scroller=c}if(i.loadStatus){var l='<div class="loader-ellips" style="display: none"> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> <span class="loader-ellips__dot"></span> </div>';e(l).insertAfter(i.elementID)}if(i.infoLastPage){var j=i.lastPageInfo;e(j).insertAfter(i.elementID)}var k=setInterval(function(){if(j1.getState()==="finished"){if(i.type==="infiniteScroll"){h.info("\nprocessing mode: "+i.type);h.info("\nloading items from path: "+i.pagePath+"#void");h.info("\nmonitoring element set to: "+this.scroller);m.registerScrollEvent(i)}if(i.type==="showOnScroll"){h.info("\nprocessing mode: "+i.type);h.info("\nloading items from path: "+i.pagePath+"#void");h.info("\nmonitoring element set to: "+this.scroller);m.registerScrollEvent(i)}h.info("\ninitializing plugin: finished");h.info("\nstate: finished");clearInterval(k)}})},isInViewport:function(n,m){if(n.length==0){return}var j=jQuery(c);var q=j.scrollTop();var i=j.height();var k=q+i;var l=jQuery(n);var o=l.offset().top+m;var p=l.height();var h=o+p;return(o>=q&&o<k)||(h>q&&h<=k)||(p>i&&o<=q&&h>=k)},isBottomReached:function(s){var n=this;var h,p;var m=e(s.elementID).height();if(n.settings.elementScroll){var j=e(c);var r=j.scrollTop();var i=j.height();var l=r+i-s.scrollOffset;var k=e(s.elementID);var o=k.offset().top+m;var q=k.height();h=o+q;return(o>=r&&o<l)||(h>r&&h<=l)||(q>i&&o<=r&&h>=l)}else{return(c.innerHeight+c.pageYOffset+s.scrollOffset>=a.body.offsetHeight)}},registerScrollEvent:function(i){var j=this;var h=log4javascript.getLogger("");if(i.type==="infiniteScroll"){h.info("\nregister scroll event of type: "+i.type);j[i.id]=function(l){var k=j.settings;if(j.isBottomReached(k)){if(k.firstPage>k.lastPage){h.info("\nlast page detected on: "+k.lastPage);c.removeEventListener("scroll",j[k.id]);h.info("\nscroll event: removed");if(k.infoLastPage){j.infoLastPage(k)}return false}j.getNewPost(k)}};c.addEventListener("scroll",j[i.id]);h.info("\nscroll event: registered")}if(i.type==="showOnScroll"){h.info("\nregister scroll event of type: "+i.type);j[i.id]=function(k){if(j.isInViewport(e("#"+i.id),i.scrollOffset)){h.info("\nspecified container is in view: "+i.id);e("."+i.id).show(i.showDelay);h.info("\nremove eventHandler");c.removeEventListener("scroll",j[i.id])}};c.addEventListener("scroll",j[i.id])}},getNewPost:function(i){var k=this;var h=log4javascript.getLogger("");h.info("\ntrigger loading ");if(this.itemsLoaded===false){return false}this.itemsLoaded=false;if(i.loadStatus){h.info("\nshow: spinner");e(".loader-ellips").show()}var j=new XMLHttpRequest();j.onreadystatechange=function(){if(j.readyState==XMLHttpRequest.DONE){if(j.status==200){i.firstPage++;var l=k.getChildItemsByAjaxHTML(i,j.responseText);k.appendNewItems(l);h.info("\nloading new items: successful");if(i.loadStatus){h.info("\nhide: spinner");e(".loader-ellips").hide()}k.itemsLoaded=true}else{if(i.loadStatus){h.info("\nhide: spinner");e(".loader-ellips").hide()}h.error("\nloading new items failed, HTTP response: "+j.status);k.itemsLoaded=false}}};h.info("\nloading new items from path: "+i.pagePath+i.firstPage);j.open("GET",location.origin+i.pagePath+i.firstPage+"/index.html",true);j.send()},getChildItemsByAjaxHTML:function(j,i){var l=a.createElement("html");var h=log4javascript.getLogger("");h.info("\nload new items");l.innerHTML=i;var k=l.querySelectorAll(j.elementID+" > *");return k},appendNewItems:function(h){var l=this;var i=log4javascript.getLogger("");var k=j1.getCookieNames();var j=j1.readCookie(k.user_translate);i.info("\nappend new items");h.forEach(function(m){l.element.appendChild(m)});if(j.translationEnabled){i.info("\ntranslation enabled: "+j.translationEnabled);i.warn("\nskipped processing of dropcaps")}else{i.info("\npost processing: createDropCap");j1.core.createDropCap()}},infoLastPage:function(i){var j=this;var h=log4javascript.getLogger("");h.info("\nshow: infoLastPage");e(".page-scroll-last").show()}});e.fn[d]=function(h){return this.each(function(){if(!e.data(this,"plugin_"+d)){e.data(this,"plugin_"+d,new b(this,h))}})}})(jQuery,window,document);
@@ -309,7 +309,7 @@
309
309
  }
310
310
  var li = $('<li />')
311
311
  .attr('class',cssClass)
312
- .append('<a href="#"><i class="mdi mdi-view-quilt mdi-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
312
+ .append('<a href="#void"><i class="mdi mdi-view-quilt mdi-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
313
313
  .on('click', function () {
314
314
  if (settings.loadFromBootswatch) {
315
315
  base.switchTheme(value.name, value.css);
@@ -309,7 +309,7 @@
309
309
  }
310
310
  var li = $('<li />')
311
311
  .attr('class',cssClass)
312
- .append('<a href="#"><i class="mdi mdi-view-quilt mdi-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
312
+ .append('<a href="#void"><i class="mdi mdi-view-quilt mdi-18px mr-2" style="color: ' +iconColor+ '"></i>' +value.name+ '</a>')
313
313
  .on('click', function () {
314
314
  if (settings.loadFromBootswatch) {
315
315
  base.switchTheme(value.name, value.css);
@@ -308,34 +308,45 @@ function Translator(props) {
308
308
  // on 'shown'
309
309
  // ---------------------------------------------------------------------
310
310
  self.$modal.on('shown.bs.modal', function () {
311
- var msDropdownJSON = document.getElementById('dropdownJSON').msDropdown;
312
-
313
- if (!msDropdownJSON.length) {
314
- // critical error
315
- logger.error('\n' + 'no msDropdown found in translation dialog');
316
- self.$modal.hide();
317
- } else {
318
- // set translation language for auto detection
319
- if (self.props.translationLanguage === 'auto') {
320
- navigator_language = navigator.language || navigator.userLanguage;
321
- translation_language = navigator_language.split('-')[0];
322
- }
323
-
324
- // set translation language for the dropdown
325
- msDropdownJSON.selectedIndex = $('#dropdownJSON option[value=' + translation_language + ']').index();;
326
-
327
- // disable translation language selection
328
- if (self.props.disableLanguageSelector) {
329
- msDropdownJSON.disabled = true;
311
+ var msDropdownJSON;
312
+ var dependencies_met_msDropdownJSON_loaded;
313
+
314
+ // found msDropdownJSON loaded slow on some PC
315
+ dependencies_met_msDropdownJSON_loaded = setInterval (function () {
316
+ if (typeof document.getElementById('dropdownJSON').msDropdown !== 'undefined') {
317
+ msDropdownJSON = document.getElementById('dropdownJSON').msDropdown;
318
+ if (!msDropdownJSON.length) {
319
+ // critical error
320
+ logger.error('\n' + 'no msDropdown found in translation dialog');
321
+ self.$modal.hide();
322
+ } else {
323
+ // set translation language for auto detection
324
+ if (self.props.translationLanguage === 'auto') {
325
+ navigator_language = navigator.language || navigator.userLanguage;
326
+ translation_language = navigator_language.split('-')[0];
327
+ } else {
328
+ translation_language = self.props.translationLanguage;
329
+ }
330
+
331
+ // set translation language for the dropdown
332
+ msDropdownJSON.selectedIndex = $('#dropdownJSON option[value=' + translation_language + ']').index();;
333
+
334
+ // disable translation language selection
335
+ if (self.props.disableLanguageSelector) {
336
+ msDropdownJSON.disabled = true;
337
+ }
338
+
339
+ $('#dropdownJSON').show();
340
+
341
+ // jadams, 2021-10-18: added stop scrolling on the body,
342
+ // if modal is OPEN
343
+ $('body').addClass('stop-scrolling');
344
+
345
+ logger.info('\n' + 'msDropdown successfully loaded in translation dialog');
346
+ clearInterval(dependencies_met_msDropdownJSON_loaded);
347
+ }
330
348
  }
331
-
332
- $('#dropdownJSON').show();
333
-
334
- // jadams, 2021-10-18: added stop scrolling on the body,
335
- // if modal is OPEN
336
- $('body').addClass('stop-scrolling');
337
-
338
- }
349
+ }, 25);
339
350
 
340
351
  }); // END modal on 'shown'
341
352
 
@@ -12,4 +12,4 @@
12
12
  # See: https://github.com/jekyll-one/J1 Template/blob/master/LICENSE
13
13
  # -----------------------------------------------------------------------------
14
14
  */
15
- function Translator(d){var p=this;var u=log4javascript.getLogger("j1.core.translator");var l=new liteURL(window.location.href);var c=(l.protocol.includes("https"))?true:false;var q=false;var g;var s;this.props={contentURL:"/assets/data/translator",cookieName:"j1.user.state",cookieConsentName:"j1.user.consent",cookieStorageDays:365,cookieSameSite:"Strict",cookieSecure:c,translationEnabled:false,disableLanguageSelector:false,translatorName:"google",translationLanguages:"all",translationLanguage:"auto",translateAllPages:true,hideSuggestionBox:true,hidePoweredBy:true,hideTopFrame:true,dialogLanguage:"content",dialogLanguages:["en","de"],dialogContainerID:"translator-modal",xhrDataElement:"",postSelectionCallback:"",};for(var e in d){this.props[e]=d[e]}if(this.props.dialogLanguage.indexOf("-")!==-1){this.props.dialogLanguage=this.props.dialogLanguage.split("-")[0]}if(!this.props.dialogLanguages.includes(this.props.dialogLanguage)){this.props.dialogLanguage=this.props.dialogLanguages[0]}this.props.xhrDataElement=this.props.xhrDataElement+"-"+this.props.dialogLanguage;u.info("\ninitializing core module: started");u.info("\nstate: started");var f={set:function(x,z,C,y,A){var B=window.btoa(z);var v="";if(C){var w=new Date();w.setTime(w.getTime()+(C*24*60*60*1000));v="; expires="+w.toUTCString()}if(A){document.cookie=x+"="+(B||"")+v+"; Path=/; SameSite="+y+"; secure="+A+";"}else{document.cookie=x+"="+(B||"")+v+"; Path=/; SameSite="+y+";"}},get:function(w){var z=w+"=";var v=document.cookie.split(";");for(var x=0;x<v.length;x++){var B=v[x];while(B.charAt(0)===" "){B=B.substring(1,B.length)}if(B.indexOf(z)===0){var A=B.substring(z.length,B.length);var y=window.atob(A);return y}}return undefined}};var n={documentReady:function(v){if(document.readyState!=="loading"){v()}else{document.addEventListener("DOMContentLoaded",v)}}};function t(){var v={};var w=false;var x=0;var y=arguments.length;if(Object.prototype.toString.call(arguments[0])==="[object Boolean]"){w=arguments[0];x++}var A=function(B){for(var C in B){if(Object.prototype.hasOwnProperty.call(B,C)){if(w&&Object.prototype.toString.call(B[C])==="[object Object]"){v[C]=t(true,v[C],B[C])}else{v[C]=B[C]}}}};for(;x<y;x++){var z=arguments[x];A(z)}return v}function h(A,x){var v=Array.prototype.slice.call(arguments,2);var z=A.split(".");var y=z.pop();for(var w=0;w<z.length;w++){x=x[z[w]]}return x[y].apply(x,v)}function j(w){var v;var x=t({size:0,width:250,multiple:false,selectedIndex:1,enableAutoFilter:false,visibleRows:null,},w);v="#"+x.selector;$.ajax({url:x.url,dataType:"json",success:function(A){var z=[];if(p.props.translationLanguages.includes("all")){z=A[x.elm]}else{for(var y=0;y<A[x.elm].length;y++){if(p.props.translationLanguages.includes(A[x.elm][y].value)){z.push(A[x.elm][y])}}}if(x.visibleRows>z.length){x.visibleRows=z.length}MsDropdown.make(v,{byJson:{data:z,name:x.name,size:x.size,width:x.width,multiple:x.multiple,},enableAutoFilter:x.enableAutoFilter,visibleRows:x.visibleRows,})},error:function(y,A,z){u.error("\nfailed to retrieve JSON data from: "+x.url)}})}function m(){n.documentReady(function(){p.modal=document.getElementById(p.props.dialogContainerID);if(!p.modal){u.info("\nload consent modal");p.modal=document.createElement("div");p.modal.id=p.props.dialogContainerID;p.modal.setAttribute("class","modal fade");p.modal.setAttribute("tabindex","-1");p.modal.setAttribute("role","dialog");p.modal.setAttribute("aria-labelledby",p.props.dialogContainerID);document.body.append(p.modal);p.$modal=$(p.modal);p.$modal.on("show.bs.modal",function(){var w;var x;u.info("\nshow.bs.modal: entered");$.when(j({url:"/assets/data/iso-639-language-codes-flags.json",elm:"iso-639-languages",selector:"dropdownJSON",width:400,visibleRows:8,})).then(function(y){u.info("\ncreating msDropdown from JSON data: finished")})});p.$modal.on("shown.bs.modal",function(){var w=document.getElementById("dropdownJSON").msDropdown;if(!w.length){u.error("\nno msDropdown found in translation dialog");p.$modal.hide()}else{if(p.props.translationLanguage==="auto"){g=navigator.language||navigator.userLanguage;s=g.split("-")[0]}w.selectedIndex=$("#dropdownJSON option[value="+s+"]").index();if(p.props.disableLanguageSelector){w.disabled=true}$("#dropdownJSON").show();$("body").addClass("stop-scrolling")}});p.$modal.on("hidden.bs.modal",function(){$("body").removeClass("stop-scrolling");h(p.props.postSelectionCallback,window)});var v=p.props.contentURL+"/index.html";$.get(v).done(function(w){u.info("\nloading consent modal: successfully");p.modal.innerHTML=w;p.modal.innerHTML=$("#"+p.props.xhrDataElement).eq(0).html();$(p.modal).modal({backdrop:"static",keyboard:false});p.$buttonDoNotAgree=$("#translator-buttonDoNotAgree");p.$buttonAgree=$("#translator-buttonAgree");p.$buttonSave=$("#translator-buttonSave");p.$buttonAgreeAll=$("#translator-buttonAgreeAll");u.info("\nload/initialze options from cookie");k();i();$("#google-options").on("hide.bs.collapse",function(){q=false;k()}).on("show.bs.collapse",function(){q=true;k()});u.info("\ninitialze button event handler");p.$buttonDoNotAgree.click(function(){b()});p.$buttonAgree.click(function(){o()});p.$buttonSave.click(function(){$("#google-options").collapse("hide");r();i()});p.$buttonAgreeAll.click(function(){$("#google-options").collapse("hide");o()})}).fail(function(){u.error("\nloading translator dialog (modal): failed");u.warn("\nprobably no|wrong `contentURL` set")})}else{p.$modal.modal("show")}}.bind(this))}function i(){var x=p.getSettings();if(x){for(var w in x){var v=p.$modal.find("#google-options .translator-option[data-name="+w+'] input[type="checkbox"]');v.prop("checked",x[w])}}}function k(){if(q){p.$buttonDoNotAgree.hide();p.$buttonAgree.hide();p.$buttonSave.show();p.$buttonAgreeAll.show()}else{p.$buttonDoNotAgree.show();p.$buttonAgree.show();p.$buttonSave.hide();p.$buttonAgreeAll.hide()}}function a(w){var v=p.$modal.find("#google-options .translator-option");var y={};for(var z=0;z<v.length;z++){var B=v[z];var x=B.getAttribute("data-name");if(x==="necessary"){y[x]=true}else{if(w===undefined){var A=$(B).find('input[type="checkbox"]');y[x]=A.prop("checked")}else{y[x]=!!w}}}return y}function o(){var w=a(true);var v={};v=JSON.parse(f.get(p.props.cookieConsentName));v.analysis=w.analysis;v.personalization=w.personalization;f.set(p.props.cookieConsentName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);f.set(p.props.cookieName,JSON.stringify(w),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}function b(){var v=a();v.translationEnabled=false;f.set(p.props.cookieName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}function r(){var w;var v={};w=a();v=JSON.parse(f.get(p.props.cookieConsentName));v.analysis=w.analysis;v.personalization=w.personalization;f.set(p.props.cookieConsentName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);f.set(p.props.cookieName,JSON.stringify(a()),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}this.showDialog=function(){m()};this.getSettings=function(w){var v=f.get(p.props.cookieName);if(v){var x=JSON.parse(f.get(p.props.cookieName));if(w===undefined){return x}else{if(x){return x[w]}else{return false}}}else{return undefined}};u.info("\ninitializing core module finished");u.info("\nstate: finished")};
15
+ function Translator(d){var p=this;var u=log4javascript.getLogger("j1.core.translator");var l=new liteURL(window.location.href);var c=(l.protocol.includes("https"))?true:false;var q=false;var g;var s;this.props={contentURL:"/assets/data/translator",cookieName:"j1.user.state",cookieConsentName:"j1.user.consent",cookieStorageDays:365,cookieSameSite:"Strict",cookieSecure:c,translationEnabled:false,disableLanguageSelector:false,translatorName:"google",translationLanguages:"all",translationLanguage:"auto",translateAllPages:true,hideSuggestionBox:true,hidePoweredBy:true,hideTopFrame:true,dialogLanguage:"content",dialogLanguages:["en","de"],dialogContainerID:"translator-modal",xhrDataElement:"",postSelectionCallback:"",};for(var e in d){this.props[e]=d[e]}if(this.props.dialogLanguage.indexOf("-")!==-1){this.props.dialogLanguage=this.props.dialogLanguage.split("-")[0]}if(!this.props.dialogLanguages.includes(this.props.dialogLanguage)){this.props.dialogLanguage=this.props.dialogLanguages[0]}this.props.xhrDataElement=this.props.xhrDataElement+"-"+this.props.dialogLanguage;u.info("\ninitializing core module: started");u.info("\nstate: started");var f={set:function(x,z,C,y,A){var B=window.btoa(z);var v="";if(C){var w=new Date();w.setTime(w.getTime()+(C*24*60*60*1000));v="; expires="+w.toUTCString()}if(A){document.cookie=x+"="+(B||"")+v+"; Path=/; SameSite="+y+"; secure="+A+";"}else{document.cookie=x+"="+(B||"")+v+"; Path=/; SameSite="+y+";"}},get:function(w){var z=w+"=";var v=document.cookie.split(";");for(var x=0;x<v.length;x++){var B=v[x];while(B.charAt(0)===" "){B=B.substring(1,B.length)}if(B.indexOf(z)===0){var A=B.substring(z.length,B.length);var y=window.atob(A);return y}}return undefined}};var n={documentReady:function(v){if(document.readyState!=="loading"){v()}else{document.addEventListener("DOMContentLoaded",v)}}};function t(){var v={};var w=false;var x=0;var y=arguments.length;if(Object.prototype.toString.call(arguments[0])==="[object Boolean]"){w=arguments[0];x++}var A=function(B){for(var C in B){if(Object.prototype.hasOwnProperty.call(B,C)){if(w&&Object.prototype.toString.call(B[C])==="[object Object]"){v[C]=t(true,v[C],B[C])}else{v[C]=B[C]}}}};for(;x<y;x++){var z=arguments[x];A(z)}return v}function h(A,x){var v=Array.prototype.slice.call(arguments,2);var z=A.split(".");var y=z.pop();for(var w=0;w<z.length;w++){x=x[z[w]]}return x[y].apply(x,v)}function j(w){var v;var x=t({size:0,width:250,multiple:false,selectedIndex:1,enableAutoFilter:false,visibleRows:null,},w);v="#"+x.selector;$.ajax({url:x.url,dataType:"json",success:function(A){var z=[];if(p.props.translationLanguages.includes("all")){z=A[x.elm]}else{for(var y=0;y<A[x.elm].length;y++){if(p.props.translationLanguages.includes(A[x.elm][y].value)){z.push(A[x.elm][y])}}}if(x.visibleRows>z.length){x.visibleRows=z.length}MsDropdown.make(v,{byJson:{data:z,name:x.name,size:x.size,width:x.width,multiple:x.multiple,},enableAutoFilter:x.enableAutoFilter,visibleRows:x.visibleRows,})},error:function(y,A,z){u.error("\nfailed to retrieve JSON data from: "+x.url)}})}function m(){n.documentReady(function(){p.modal=document.getElementById(p.props.dialogContainerID);if(!p.modal){u.info("\nload consent modal");p.modal=document.createElement("div");p.modal.id=p.props.dialogContainerID;p.modal.setAttribute("class","modal fade");p.modal.setAttribute("tabindex","-1");p.modal.setAttribute("role","dialog");p.modal.setAttribute("aria-labelledby",p.props.dialogContainerID);document.body.append(p.modal);p.$modal=$(p.modal);p.$modal.on("show.bs.modal",function(){var w;var x;u.info("\nshow.bs.modal: entered");$.when(j({url:"/assets/data/iso-639-language-codes-flags.json",elm:"iso-639-languages",selector:"dropdownJSON",width:400,visibleRows:8,})).then(function(y){u.info("\ncreating msDropdown from JSON data: finished")})});p.$modal.on("shown.bs.modal",function(){var w;var x;x=setInterval(function(){if(typeof document.getElementById("dropdownJSON").msDropdown!=="undefined"){w=document.getElementById("dropdownJSON").msDropdown;if(!w.length){u.error("\nno msDropdown found in translation dialog");p.$modal.hide()}else{if(p.props.translationLanguage==="auto"){g=navigator.language||navigator.userLanguage;s=g.split("-")[0]}else{s=p.props.translationLanguage}w.selectedIndex=$("#dropdownJSON option[value="+s+"]").index();if(p.props.disableLanguageSelector){w.disabled=true}$("#dropdownJSON").show();$("body").addClass("stop-scrolling");u.info("\nmsDropdown successfully loaded in translation dialog");clearInterval(x)}}},25)});p.$modal.on("hidden.bs.modal",function(){$("body").removeClass("stop-scrolling");h(p.props.postSelectionCallback,window)});var v=p.props.contentURL+"/index.html";$.get(v).done(function(w){u.info("\nloading consent modal: successfully");p.modal.innerHTML=w;p.modal.innerHTML=$("#"+p.props.xhrDataElement).eq(0).html();$(p.modal).modal({backdrop:"static",keyboard:false});p.$buttonDoNotAgree=$("#translator-buttonDoNotAgree");p.$buttonAgree=$("#translator-buttonAgree");p.$buttonSave=$("#translator-buttonSave");p.$buttonAgreeAll=$("#translator-buttonAgreeAll");u.info("\nload/initialze options from cookie");k();i();$("#google-options").on("hide.bs.collapse",function(){q=false;k()}).on("show.bs.collapse",function(){q=true;k()});u.info("\ninitialze button event handler");p.$buttonDoNotAgree.click(function(){b()});p.$buttonAgree.click(function(){o()});p.$buttonSave.click(function(){$("#google-options").collapse("hide");r();i()});p.$buttonAgreeAll.click(function(){$("#google-options").collapse("hide");o()})}).fail(function(){u.error("\nloading translator dialog (modal): failed");u.warn("\nprobably no|wrong `contentURL` set")})}else{p.$modal.modal("show")}}.bind(this))}function i(){var x=p.getSettings();if(x){for(var w in x){var v=p.$modal.find("#google-options .translator-option[data-name="+w+'] input[type="checkbox"]');v.prop("checked",x[w])}}}function k(){if(q){p.$buttonDoNotAgree.hide();p.$buttonAgree.hide();p.$buttonSave.show();p.$buttonAgreeAll.show()}else{p.$buttonDoNotAgree.show();p.$buttonAgree.show();p.$buttonSave.hide();p.$buttonAgreeAll.hide()}}function a(w){var v=p.$modal.find("#google-options .translator-option");var y={};for(var z=0;z<v.length;z++){var B=v[z];var x=B.getAttribute("data-name");if(x==="necessary"){y[x]=true}else{if(w===undefined){var A=$(B).find('input[type="checkbox"]');y[x]=A.prop("checked")}else{y[x]=!!w}}}return y}function o(){var w=a(true);var v={};v=JSON.parse(f.get(p.props.cookieConsentName));v.analysis=w.analysis;v.personalization=w.personalization;f.set(p.props.cookieConsentName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);f.set(p.props.cookieName,JSON.stringify(w),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}function b(){var v=a();v.translationEnabled=false;f.set(p.props.cookieName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}function r(){var w;var v={};w=a();v=JSON.parse(f.get(p.props.cookieConsentName));v.analysis=w.analysis;v.personalization=w.personalization;f.set(p.props.cookieConsentName,JSON.stringify(v),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);f.set(p.props.cookieName,JSON.stringify(a()),p.props.cookieStorageDays,p.props.sameSite,p.props.secure);p.$modal.modal("hide")}this.showDialog=function(){m()};this.getSettings=function(w){var v=f.get(p.props.cookieName);if(v){var x=JSON.parse(f.get(p.props.cookieName));if(w===undefined){return x}else{if(x){return x[w]}else{return false}}}else{return undefined}};u.info("\ninitializing core module finished");u.info("\nstate: finished")};
@@ -96,7 +96,7 @@
96
96
  buttonsHTML += '</span>';
97
97
  buttonsHTML += '</div>';
98
98
 
99
- h.$id = "#" + h.$el["0"].id;
99
+ h.$id = "#void" + h.$el["0"].id;
100
100
  h.$pickerHeigth = h.options.height.replace("px", "");
101
101
  h.$pickerHeigth = Number(h.$pickerHeigth);
102
102
  h.$wrapper = h.$el.wrap('<div class="twemoji-wrap"></div>').parent();
@@ -16,4 +16,4 @@
16
16
  # For details, https://github.com/xLs51/Twemoji-Picker
17
17
  # -----------------------------------------------------------------------------
18
18
  */
19
- (function(c,h,a){var k=150;var i={};var e="/assets/data/twa_v1.json";var j;var l;c.TwemojiPicker=function(d,b){var f=this;c.when(this._loadDatabase()).done(function(m){f.$el=c(d);f._init(b)})};c.TwemojiPicker.defaults={init:null,language:"en",size:25,icon:"grinning",iconSize:25,height:100,width:null,category:["smile","cherry-blossom","video-game","oncoming-automobile","symbols"],categorySize:20,pickerPosition:null,pickerHeight:150,pickerWidth:null,placeholder:"Click on Picker to select Emoji's from a Category",};c.TwemojiPicker.prototype={_init:function(b){this.options=c.extend(true,{},c.TwemojiPicker.defaults,b);this._initPicker();this._initCategory();this._initTwemoji();this._initText();this._initStyle();this._initEvents()},_loadDatabase:function g(){return c.ajax({url:e,success:function(b){if(typeof b=="string"){i=JSON.parse(b)}if(typeof b=="object"){i=b}}})},_initPicker:function(){var f=this;var b;var d;if(f.options.language=="en"){b="Clear";j="Copied to Clipboard";l=f.options.placeholder}else{if(f.options.language=="de"){b="Löschen";j="Kopiert zur Zwischenablage";l="Klicken Sie auf Picker zur Auswahl von Emoji's aus einer Kategorie"}else{b="Clear";j="in Clipboard";l=f.options.placeholder}}d='<div class="twemoji-icon-picker">';d+='<span id="open-group" class="mr-2" style="width: 2rem; height: 2rem;">';d+='<button type="button" name="open-group" class="btn btn-raised btn-flex btn-primary mr-2"><i class="toggle-button mdi mdi-lg mr-1 mdi-toggle-switch-off"></i> Picker </button>';d+="</span>";d+='<span id="clear-textarea" style="width: 2rem; height: 2rem;">';d+='<button type="button" name="clear-textarea" class="btn btn-raised btn-flex btn-primary"><i class="mdi mdi-close mdi-lg mr-1"></i>'+b+"</button>";d+="</span>";d+="</div>";f.$id="#"+f.$el["0"].id;f.$pickerHeigth=f.options.height.replace("px","");f.$pickerHeigth=Number(f.$pickerHeigth);f.$wrapper=f.$el.wrap('<div class="twemoji-wrap"></div>').parent();f.$wrapper.append('<div class="twemoji-textarea" contentEditable="true" placeholder="'+l+'"></div>');f.$wrapper.append('<div class="twemoji-textarea-duplicate"></div>');f.$wrapper.append(d);f.$wrapper.append('<div class="twemoji-picker"></div>');f.$el.hide();f.$textarea=f.$wrapper.find(".twemoji-textarea");f.$textareaDuplicate=f.$wrapper.find(".twemoji-textarea-duplicate").hide();f.$iconPicker=f.$wrapper.find("#open-group");f.$clearTextarea=f.$wrapper.find("#clear-textarea");f.$picker=f.$wrapper.find(".twemoji-picker").hide()},_initCategory:function(){var d=this;var b=this.options.category;this.categoryName=["people","nature","object","place","symbol"];this.$picker.append('<div class="twemoji-picker-category"></div>');this.$pickerCategory=this.$picker.find(".twemoji-picker-category");c.each(this.categoryName,function(m,f){d.$pickerCategory.append('<span data-category="'+f+'">'+d.imageFromName(b[m])+"</span>")});this.$pickerCategory.find("span:first").addClass("active")},_initTwemoji:function(){var b=this;c.each(this.categoryName,function(f,d){b.$picker.append('<div class="twemoji-list '+d+'"></div>');c.each(i,function(n,m){if(m.category===d){b.$wrapper.find(".twemoji-picker ."+d).append('<span><img class="emoji" draggable="false" src="'+m.base64+'" alt="'+m.value+'" title="'+m.name+'"></span>')}})});this.$twemojiList=this.$picker.find(".twemoji-list");this.$twemojiList.not(":first").hide()},_initText:function(){if(this.options.init){var b=this.options.init;var d=/:([\w-]+):/g;var f;while(f==d.exec(b)){b=b.replace(f[0],this.imageFromName(f[1],true))}this.$textarea.html(b);this.copyTextArea(this.$textarea.html())}},_initStyle:function(){this.$wrapper.css({width:this.options.width?this.options.width:"100%",height:this.options.height?this.options.height:"",});this.$wrapper.find("img").css({width:this.options.size,height:this.options.size,});this.$iconPicker.css({width:this.options.iconSize,height:this.options.iconSize,});this.$pickerCategory.find("img").css({width:this.options.categorySize,height:this.options.categorySize,});this.$twemojiList.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",height:this.options.pickerHeight,});this.$picker.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",top:this.options.pickerPosition==="top"?"-"+this.$picker.outerHeight()+"px":"",})},_initEvents:function(){var b=this;this.$textarea.on("keyup",function(){b.copyTextArea(c(this).html())});this.$iconPicker.on("click",function(){var d=c(".twemoji-picker").height()+k;c("#picker").height(d);c(".toggle-button").toggleClass("mdi-toggle-switch-off mdi-toggle-switch");if(!b.openedPicker){b.openPicker()}else{b.closePicker();c("#picker").height(b.$pickerHeigth)}});this.$clearTextarea.on("click",function(){b.copyTextArea("");c(b.$id).val("");c(".twemoji-textarea > .emoji-span").remove()});this.$pickerCategory.find("span").on("click",function(){var d=c(this).data("category");b.openCategory(c(this),d)});this.$pickerCategory.find(".close").on("click",function(){if(b.openedPicker){b.closePicker()}});this.$twemojiList.find("img").on("click",function(){b.copyTwemoji(c(this))})},copyText:function(f){var d=document.createElement("textarea");d.setAttribute("style","position:fixed;opacity:0;top:100px;left:100px;");d.value=f;document.body.appendChild(d);d.select();document.execCommand("copy");var b=document.createElement("div");b.setAttribute("class","copied");b.appendChild(document.createTextNode(j));document.body.appendChild(b);setTimeout(function(){document.body.removeChild(d);document.body.removeChild(b)},1500)},openPicker:function(){this.$picker.show();this.openedPicker=true},closePicker:function(){this.$picker.hide();this.openedPicker=false},openCategory:function(d,b){this.$pickerCategory.find("span").removeClass("active");d.addClass("active");this.$twemojiList.not(".twemoji-picker ."+b).hide();this.$twemojiList.filter(".twemoji-picker ."+b).show()},copyTwemoji:function(b){var m=b.attr("alt");var d=b.attr("src");var f=b.attr("title");var n="emoji:"+f+"[]";this.copyText(n);this.$textarea.focus();this.pasteAtCursor('<span class="emoji-span"><img class="emoji" src="'+d+'" title="'+f+'" alt="'+m+'" width="'+this.options.size+'" height="'+this.options.size+'"> '+n+"</span> ");this.copyTextArea(this.$textarea.html())},copyTextArea:function(b){var f=this.$textareaDuplicate.html(b);f.find("img").replaceWith(function(){return this.alt});var d=f.html();this.$el.text(d)},imageFromName:function(d,b){var f=c.grep(i,function(m){return m.name==d});if(b){return'<img class="emoji" src="'+f[0].base64+'" alt="'+f[0].value+'" width="'+this.options.size+'" height="'+this.options.size+'">'}return'<img class="emoji" draggable="false" src="'+f[0].base64+'" alt="'+d+'">'},pasteAtCursor:function(b){var d,q;if(h.getSelection){d=h.getSelection();if(d.getRangeAt&&d.rangeCount){q=d.getRangeAt(0);q.deleteContents();var p=document.createElement("div");p.innerHTML=b;var r=document.createDocumentFragment(),f,o;while((f=p.firstChild)){o=r.appendChild(f)}q.insertNode(r);if(o){q=q.cloneRange();q.setStartAfter(o);q.collapse(true);d.removeAllRanges();d.addRange(q)}}}else{if(document.selection&&document.selection.type!="Control"){document.selection.createRange().pasteHTML(b)}}}};c.fn.twemojiPicker=function(b){var d=c.data(this,"twemojiPicker");this.each(function(){d?d._init():d=c.data(this,"twemojiPicker",new c.TwemojiPicker(this,b))});return d}})(jQuery,window);
19
+ (function(c,h,a){var k=150;var i={};var e="/assets/data/twa_v1.json";var j;var l;c.TwemojiPicker=function(d,b){var f=this;c.when(this._loadDatabase()).done(function(m){f.$el=c(d);f._init(b)})};c.TwemojiPicker.defaults={init:null,language:"en",size:25,icon:"grinning",iconSize:25,height:100,width:null,category:["smile","cherry-blossom","video-game","oncoming-automobile","symbols"],categorySize:20,pickerPosition:null,pickerHeight:150,pickerWidth:null,placeholder:"Click on Picker to select Emoji's from a Category",};c.TwemojiPicker.prototype={_init:function(b){this.options=c.extend(true,{},c.TwemojiPicker.defaults,b);this._initPicker();this._initCategory();this._initTwemoji();this._initText();this._initStyle();this._initEvents()},_loadDatabase:function g(){return c.ajax({url:e,success:function(b){if(typeof b=="string"){i=JSON.parse(b)}if(typeof b=="object"){i=b}}})},_initPicker:function(){var f=this;var b;var d;if(f.options.language=="en"){b="Clear";j="Copied to Clipboard";l=f.options.placeholder}else{if(f.options.language=="de"){b="Löschen";j="Kopiert zur Zwischenablage";l="Klicken Sie auf Picker zur Auswahl von Emoji's aus einer Kategorie"}else{b="Clear";j="in Clipboard";l=f.options.placeholder}}d='<div class="twemoji-icon-picker">';d+='<span id="open-group" class="mr-2" style="width: 2rem; height: 2rem;">';d+='<button type="button" name="open-group" class="btn btn-raised btn-flex btn-primary mr-2"><i class="toggle-button mdi mdi-lg mr-1 mdi-toggle-switch-off"></i> Picker </button>';d+="</span>";d+='<span id="clear-textarea" style="width: 2rem; height: 2rem;">';d+='<button type="button" name="clear-textarea" class="btn btn-raised btn-flex btn-primary"><i class="mdi mdi-close mdi-lg mr-1"></i>'+b+"</button>";d+="</span>";d+="</div>";f.$id="#void"+f.$el["0"].id;f.$pickerHeigth=f.options.height.replace("px","");f.$pickerHeigth=Number(f.$pickerHeigth);f.$wrapper=f.$el.wrap('<div class="twemoji-wrap"></div>').parent();f.$wrapper.append('<div class="twemoji-textarea" contentEditable="true" placeholder="'+l+'"></div>');f.$wrapper.append('<div class="twemoji-textarea-duplicate"></div>');f.$wrapper.append(d);f.$wrapper.append('<div class="twemoji-picker"></div>');f.$el.hide();f.$textarea=f.$wrapper.find(".twemoji-textarea");f.$textareaDuplicate=f.$wrapper.find(".twemoji-textarea-duplicate").hide();f.$iconPicker=f.$wrapper.find("#open-group");f.$clearTextarea=f.$wrapper.find("#clear-textarea");f.$picker=f.$wrapper.find(".twemoji-picker").hide()},_initCategory:function(){var d=this;var b=this.options.category;this.categoryName=["people","nature","object","place","symbol"];this.$picker.append('<div class="twemoji-picker-category"></div>');this.$pickerCategory=this.$picker.find(".twemoji-picker-category");c.each(this.categoryName,function(m,f){d.$pickerCategory.append('<span data-category="'+f+'">'+d.imageFromName(b[m])+"</span>")});this.$pickerCategory.find("span:first").addClass("active")},_initTwemoji:function(){var b=this;c.each(this.categoryName,function(f,d){b.$picker.append('<div class="twemoji-list '+d+'"></div>');c.each(i,function(n,m){if(m.category===d){b.$wrapper.find(".twemoji-picker ."+d).append('<span><img class="emoji" draggable="false" src="'+m.base64+'" alt="'+m.value+'" title="'+m.name+'"></span>')}})});this.$twemojiList=this.$picker.find(".twemoji-list");this.$twemojiList.not(":first").hide()},_initText:function(){if(this.options.init){var b=this.options.init;var d=/:([\w-]+):/g;var f;while(f==d.exec(b)){b=b.replace(f[0],this.imageFromName(f[1],true))}this.$textarea.html(b);this.copyTextArea(this.$textarea.html())}},_initStyle:function(){this.$wrapper.css({width:this.options.width?this.options.width:"100%",height:this.options.height?this.options.height:"",});this.$wrapper.find("img").css({width:this.options.size,height:this.options.size,});this.$iconPicker.css({width:this.options.iconSize,height:this.options.iconSize,});this.$pickerCategory.find("img").css({width:this.options.categorySize,height:this.options.categorySize,});this.$twemojiList.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",height:this.options.pickerHeight,});this.$picker.css({width:this.options.pickerWidth?this.options.pickerWidth:"100%",top:this.options.pickerPosition==="top"?"-"+this.$picker.outerHeight()+"px":"",})},_initEvents:function(){var b=this;this.$textarea.on("keyup",function(){b.copyTextArea(c(this).html())});this.$iconPicker.on("click",function(){var d=c(".twemoji-picker").height()+k;c("#picker").height(d);c(".toggle-button").toggleClass("mdi-toggle-switch-off mdi-toggle-switch");if(!b.openedPicker){b.openPicker()}else{b.closePicker();c("#picker").height(b.$pickerHeigth)}});this.$clearTextarea.on("click",function(){b.copyTextArea("");c(b.$id).val("");c(".twemoji-textarea > .emoji-span").remove()});this.$pickerCategory.find("span").on("click",function(){var d=c(this).data("category");b.openCategory(c(this),d)});this.$pickerCategory.find(".close").on("click",function(){if(b.openedPicker){b.closePicker()}});this.$twemojiList.find("img").on("click",function(){b.copyTwemoji(c(this))})},copyText:function(f){var d=document.createElement("textarea");d.setAttribute("style","position:fixed;opacity:0;top:100px;left:100px;");d.value=f;document.body.appendChild(d);d.select();document.execCommand("copy");var b=document.createElement("div");b.setAttribute("class","copied");b.appendChild(document.createTextNode(j));document.body.appendChild(b);setTimeout(function(){document.body.removeChild(d);document.body.removeChild(b)},1500)},openPicker:function(){this.$picker.show();this.openedPicker=true},closePicker:function(){this.$picker.hide();this.openedPicker=false},openCategory:function(d,b){this.$pickerCategory.find("span").removeClass("active");d.addClass("active");this.$twemojiList.not(".twemoji-picker ."+b).hide();this.$twemojiList.filter(".twemoji-picker ."+b).show()},copyTwemoji:function(b){var m=b.attr("alt");var d=b.attr("src");var f=b.attr("title");var n="emoji:"+f+"[]";this.copyText(n);this.$textarea.focus();this.pasteAtCursor('<span class="emoji-span"><img class="emoji" src="'+d+'" title="'+f+'" alt="'+m+'" width="'+this.options.size+'" height="'+this.options.size+'"> '+n+"</span> ");this.copyTextArea(this.$textarea.html())},copyTextArea:function(b){var f=this.$textareaDuplicate.html(b);f.find("img").replaceWith(function(){return this.alt});var d=f.html();this.$el.text(d)},imageFromName:function(d,b){var f=c.grep(i,function(m){return m.name==d});if(b){return'<img class="emoji" src="'+f[0].base64+'" alt="'+f[0].value+'" width="'+this.options.size+'" height="'+this.options.size+'">'}return'<img class="emoji" draggable="false" src="'+f[0].base64+'" alt="'+d+'">'},pasteAtCursor:function(b){var d,q;if(h.getSelection){d=h.getSelection();if(d.getRangeAt&&d.rangeCount){q=d.getRangeAt(0);q.deleteContents();var p=document.createElement("div");p.innerHTML=b;var r=document.createDocumentFragment(),f,o;while((f=p.firstChild)){o=r.appendChild(f)}q.insertNode(r);if(o){q=q.cloneRange();q.setStartAfter(o);q.collapse(true);d.removeAllRanges();d.addRange(q)}}}else{if(document.selection&&document.selection.type!="Control"){document.selection.createRange().pasteHTML(b)}}}};c.fn.twemojiPicker=function(b){var d=c.data(this,"twemojiPicker");this.each(function(){d?d._init():d=c.data(this,"twemojiPicker",new c.TwemojiPicker(this,b))});return d}})(jQuery,window);