j1-template 2021.1.25 → 2021.1.29
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/themes/j1/layouts/content_generator_article_navigator.html +1 -1
- data/_includes/themes/j1/layouts/content_generator_blog_archive.html +6 -4
- data/_includes/themes/j1/layouts/content_generator_news_panel_posts.html +1 -1
- data/_includes/themes/j1/modules/navigator/generator.html +1 -1
- data/_includes/themes/j1/procedures/posts/collate_timeline.proc +1 -1
- data/_layouts/default.html +1 -0
- data/assets/data/panel.html +1 -15
- data/assets/themes/j1/adapter/js/j1.js +6 -6
- data/assets/themes/j1/adapter/js/j1scroll.js +304 -0
- data/assets/themes/j1/core/css/themes/uno-light/bootstrap.css +42 -0
- data/assets/themes/j1/core/css/themes/uno-light/bootstrap.min.css +1 -1
- data/assets/themes/j1/core/js/template.js +4 -4
- data/assets/themes/j1/core/js/template.js.map +1 -1
- data/assets/themes/j1/core/js/template.min.js +4 -4
- data/assets/themes/j1/core/js/template.min.js.map +1 -1
- data/assets/themes/j1/modules/{infiniteScroll → j1Scroll}/css/theme/uno.css +4 -50
- data/assets/themes/j1/modules/j1Scroll/css/theme/uno.min.css +15 -0
- data/assets/themes/j1/modules/j1Scroll/js/j1scroll.js +263 -0
- data/assets/themes/j1/modules/j1Scroll/js/j1scroll.min.js +16 -0
- data/assets/themes/j1/modules/showOnScroll/js/showOnScroll.js +19 -7
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/blocks/panel.yml +217 -183
- data/lib/starter_web/_data/builder/blog_navigator.yml +1 -0
- data/lib/starter_web/_data/layouts/home.yml +20 -16
- data/lib/starter_web/_data/modules/defaults/navigator.yml +1 -1
- data/lib/starter_web/_data/modules/j1scroll.yml +67 -0
- data/lib/starter_web/_data/resources.yml +35 -34
- data/lib/starter_web/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/_plugins/lunr_index.rb +1 -1
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-01-post-test-series.adoc +1 -1
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-02-post-test-series.adoc +1 -1
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-03-post-test-series.adoc +1 -1
- data/lib/starter_web/collections/posts/public/series/_posts/2020-01-04-post-test-series.adoc +1 -1
- data/lib/starter_web/index.html +1 -1
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/blog/navigator/index.html +3 -2
- data/lib/starter_web/pages/public/features/modules.adoc +104 -0
- data/lib/starter_web/pages/public/features/platform.adoc +104 -0
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +10 -9
- data/assets/themes/j1/adapter/js/infiniteScroll.js +0 -245
- data/assets/themes/j1/modules/infiniteScroll/css/theme/uno.min.css +0 -15
- data/assets/themes/j1/modules/infiniteScroll/js/infiniteScroll.js +0 -1909
- data/assets/themes/j1/modules/infiniteScroll/js/infiniteScroll.min.js +0 -17
- data/lib/starter_web/_data/modules/defaults/infiniteScroll.yml +0 -73
- data/lib/starter_web/_data/modules/infiniteScroll.yml +0 -66
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
# -----------------------------------------------------------------------------
|
3
|
-
# ~/assets/themes/j1/modules/
|
4
|
-
# Provides styles for J1 Module
|
3
|
+
# ~/assets/themes/j1/modules/j1Scroll/css/uno.css
|
4
|
+
# Provides styles for J1 Module j1Scroll
|
5
5
|
#
|
6
6
|
# Product/Info:
|
7
7
|
# https://jekyll.one
|
@@ -32,53 +32,7 @@ span {
|
|
32
32
|
}
|
33
33
|
*/
|
34
34
|
|
35
|
-
/*
|
36
|
-
-------------------------------------------------------------------------------- */
|
37
|
-
.list-group-item {
|
38
|
-
width: 96%;
|
39
|
-
margin-right: 1% !important;
|
40
|
-
}
|
41
|
-
|
42
|
-
/* Media breakpoints */
|
43
|
-
@media only screen and (min-width: 576px) {
|
44
|
-
.list-group-item.items-auto {
|
45
|
-
width: 48.3%; }
|
46
|
-
.list-group-item.items-1 {
|
47
|
-
width: 96%; }
|
48
|
-
.list-group-item.items-2 {
|
49
|
-
width: 48.3%; }
|
50
|
-
.list-group-item.items-3 {
|
51
|
-
width: 48.3%; }
|
52
|
-
.list-group-item.items-4 {
|
53
|
-
width: 48.3%; } }
|
54
|
-
|
55
|
-
@media only screen and (min-width: 768px) {
|
56
|
-
.list-group-item.items-auto {
|
57
|
-
width: 31.333%; }
|
58
|
-
.list-group-item.items-1 {
|
59
|
-
width: 96%; }
|
60
|
-
.list-group-item.items-2 {
|
61
|
-
width: 48.3%; }
|
62
|
-
.list-group-item.items-3 {
|
63
|
-
width: 48.3%; }
|
64
|
-
.list-group-item.items-4 {
|
65
|
-
width: 48.3%; } }
|
66
|
-
|
67
|
-
@media only screen and (min-width: 992px) {
|
68
|
-
.list-group-item.items-auto {
|
69
|
-
width: 23.8%; }
|
70
|
-
.list-group-item.items-1 {
|
71
|
-
width: 96%; }
|
72
|
-
.list-group-item.items-2 {
|
73
|
-
width: 48.3%;
|
74
|
-
}
|
75
|
-
.list-group-item.items-3 {
|
76
|
-
width: 31.333%; }
|
77
|
-
.list-group-item.items-4 {
|
78
|
-
width: 23.8%; } }
|
79
|
-
|
80
|
-
|
81
|
-
/* controls
|
35
|
+
/* plugin controls
|
82
36
|
-------------------------------------------------------------------------------- */
|
83
37
|
.page-load-status, .page-scroll-last {
|
84
38
|
display: none; /* hidden by default */
|
@@ -97,7 +51,7 @@ span.infinite-scroll-last {
|
|
97
51
|
padding: 10px 3px;
|
98
52
|
}
|
99
53
|
|
100
|
-
/*
|
54
|
+
/* plugin spinner
|
101
55
|
-------------------------------------------------------------------------------- */
|
102
56
|
.loader-ellips {
|
103
57
|
font-size: 20px; /* change size here */
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/*
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/assets/themes/j1/modules/infiniteScroll/css/uno.min.css
|
4
|
+
# Provides styles for J1 Module infiniteScroll
|
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
|
+
# See: https://github.com/jekyll-one-org/J1 Template/blob/master/LICENSE
|
13
|
+
# -----------------------------------------------------------------------------
|
14
|
+
*/
|
15
|
+
.page-load-status,.page-scroll-last{display:none;padding-top:.5rem;border-top:1px dotted #212121;color:#777}span.infinite-scroll-last{border-bottom-width:1px;border-bottom-style:dotted;border-bottom-color:#212121;display:inline-block;margin:0 0 -1px 0;padding:10px 3px}.loader-ellips{font-size:20px;position:relative;width:4em;height:1em;margin:10px auto}.loader-ellips__dot{display:block;width:1em;height:1em;border-radius:.5em;background:#555;position:absolute;animation-duration:.5s;animation-timing-function:ease;animation-iteration-count:infinite}.loader-ellips__dot:nth-child(1),.loader-ellips__dot:nth-child(2){left:0}.loader-ellips__dot:nth-child(3){left:1.5em}.loader-ellips__dot:nth-child(4){left:3em}@keyframes reveal{from{transform:scale(0.001)}to{transform:scale(1)}}@keyframes slide{to{transform:translateX(1.5em)}}.loader-ellips__dot:nth-child(1){animation-name:reveal}.loader-ellips__dot:nth-child(2),.loader-ellips__dot:nth-child(3){animation-name:slide}.loader-ellips__dot:nth-child(4){animation-name:reveal;animation-direction:reverse}
|
@@ -0,0 +1,263 @@
|
|
1
|
+
/*
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/assets/themes/j1/modules/j1Scroll/js/j1scroll.js
|
4
|
+
# J1 core module for j1scroll
|
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
|
+
|
16
|
+
// the semi-colon before function invocation is a SAFETY method against
|
17
|
+
// concatenated scripts and/or other plugins which may NOT be closed
|
18
|
+
// properly.
|
19
|
+
//
|
20
|
+
;(function($, window, document, undefined) {
|
21
|
+
|
22
|
+
'use strict';
|
23
|
+
|
24
|
+
// Create the defaults
|
25
|
+
var pluginName = 'j1Scroll',
|
26
|
+
defaults = {
|
27
|
+
type: 'infiniteScroll',
|
28
|
+
scrollOffset: 100,
|
29
|
+
elementScroll: false,
|
30
|
+
firstPage: 2,
|
31
|
+
lastPage: false,
|
32
|
+
infoLastPage: false,
|
33
|
+
loadStatus: false,
|
34
|
+
onInit: function (){}, // callback after plugin has initialized
|
35
|
+
onBeforeLoad: function (){}, // callback before new items are loaded
|
36
|
+
onAfterLoad: function (){} // callback after new items are loaded
|
37
|
+
};
|
38
|
+
|
39
|
+
// Plugin constructor
|
40
|
+
function Plugin (element, options) {
|
41
|
+
this.element = element;
|
42
|
+
this.settings = $.extend( {}, defaults, options);
|
43
|
+
this.settings.elementID = '#' + this.element["id"]
|
44
|
+
|
45
|
+
// call the initializer
|
46
|
+
this.init(this.settings);
|
47
|
+
}
|
48
|
+
|
49
|
+
// Avoid Plugin.prototype conflicts
|
50
|
+
$.extend(Plugin.prototype, {
|
51
|
+
// -------------------------------------------------------------------------
|
52
|
+
// init: initializer
|
53
|
+
// -------------------------------------------------------------------------
|
54
|
+
init: function(options) {
|
55
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
56
|
+
|
57
|
+
logger.info('\n' + 'initializing plugin: started');
|
58
|
+
logger.info('\n' + 'state: started');
|
59
|
+
|
60
|
+
if ( options.elementScroll ) {
|
61
|
+
this.scroller = this.element;
|
62
|
+
} else {
|
63
|
+
this.scroller = window;
|
64
|
+
}
|
65
|
+
|
66
|
+
if (options.loadStatus) {
|
67
|
+
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>';
|
68
|
+
$(spinner).insertAfter(options.elementID);
|
69
|
+
}
|
70
|
+
|
71
|
+
if (options.infoLastPage) {
|
72
|
+
var message = options.lastPageInfo;
|
73
|
+
$(message).insertAfter(options.elementID);
|
74
|
+
}
|
75
|
+
|
76
|
+
// initialize infinite scroll
|
77
|
+
if ( options.type === 'infiniteScroll') {
|
78
|
+
logger.info('\n' + 'processing mode: infiniteScroll');
|
79
|
+
logger.info('\n' + 'loading items from path: ' + options.path + "#");
|
80
|
+
logger.info('\n' + 'monitoring element set to: ' + this.scroller);
|
81
|
+
this.registerScrollEvent(options);
|
82
|
+
}
|
83
|
+
logger.info('\n' + 'initializing plugin: finished');
|
84
|
+
logger.info('\n' + 'state: finished');
|
85
|
+
},
|
86
|
+
// -------------------------------------------------------------------------
|
87
|
+
// bottomReached: detect final scroll position
|
88
|
+
// NOTE: the calculation for BOTTOM position is different for
|
89
|
+
// elementScroll and windowScroll. For elementScroll, the
|
90
|
+
// trigger isBottomReached is TRUE, if the scroll position has
|
91
|
+
// the end of the container PLUS a given scrollOffset.
|
92
|
+
// For windowScroll, the trigger isBottomReached is TRUE, if
|
93
|
+
// the scroll position has the end of the window MINUS
|
94
|
+
// a given scrollOffset.
|
95
|
+
// -------------------------------------------------------------------------
|
96
|
+
isBottomReached: function (options) {
|
97
|
+
var _this = this;
|
98
|
+
var bottom, scrollY;
|
99
|
+
var clientHeight = $(options.elementID).height();
|
100
|
+
|
101
|
+
if ( _this.settings.elementScroll ) {
|
102
|
+
// check scroll position of the container items are to be added
|
103
|
+
var $window = $(window);
|
104
|
+
var viewport_top = $window.scrollTop();
|
105
|
+
var viewport_height = $window.height();
|
106
|
+
var viewport_bottom = viewport_top + viewport_height - options.scrollOffset;
|
107
|
+
var $elm = $(options.elementID);
|
108
|
+
var top = $elm.offset().top + clientHeight;
|
109
|
+
var height = $elm.height();
|
110
|
+
bottom = top + height;
|
111
|
+
|
112
|
+
|
113
|
+
return (top >= viewport_top && top < viewport_bottom) ||
|
114
|
+
(bottom > viewport_top && bottom <= viewport_bottom) ||
|
115
|
+
(height > viewport_height && top <= viewport_top && bottom >= viewport_bottom);
|
116
|
+
} else {
|
117
|
+
// check scroll position of the (overall) window
|
118
|
+
return (window.innerHeight + window.pageYOffset + options.scrollOffset >= document.body.offsetHeight);
|
119
|
+
}
|
120
|
+
},
|
121
|
+
// -------------------------------------------------------------------------
|
122
|
+
// detectScroll: EventHandler to load new items for infinite scroll
|
123
|
+
// if final scroll position reached
|
124
|
+
// -------------------------------------------------------------------------
|
125
|
+
registerScrollEvent: function (options) {
|
126
|
+
var _this = this;
|
127
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
128
|
+
|
129
|
+
logger.info('\n' + 'scroll event: register');
|
130
|
+
|
131
|
+
var eventHandler_onscroll = function (event) {
|
132
|
+
var options = _this.settings;
|
133
|
+
|
134
|
+
if (_this.isBottomReached(options)) {
|
135
|
+
if (options.firstPage > options.lastPage ) {
|
136
|
+
logger.info('\n' + 'last page detected on: ' + options.lastPage);
|
137
|
+
window.removeEventListener('scroll', eventHandler_onscroll);
|
138
|
+
logger.info('\n' + 'scroll event: removed');
|
139
|
+
|
140
|
+
if (options.infoLastPage ) {
|
141
|
+
_this.infoLastPage(options);
|
142
|
+
}
|
143
|
+
return false;
|
144
|
+
}
|
145
|
+
_this.getNewPost(options);
|
146
|
+
}
|
147
|
+
}
|
148
|
+
window.addEventListener('scroll', eventHandler_onscroll);
|
149
|
+
|
150
|
+
logger.info('\n' + 'scroll event: registered');
|
151
|
+
},
|
152
|
+
// -------------------------------------------------------------------------
|
153
|
+
// getNewPost: load new items (from current path)
|
154
|
+
// Note: loader flag prevents to load items if AJAX load in progress
|
155
|
+
// is NOT finished
|
156
|
+
// -------------------------------------------------------------------------
|
157
|
+
getNewPost: function (options) {
|
158
|
+
var _this = this;
|
159
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
160
|
+
|
161
|
+
logger.info('\n' + 'trigger loading ');
|
162
|
+
|
163
|
+
// initialze loader flag
|
164
|
+
if (this.itemsLoaded === false) return false;
|
165
|
+
|
166
|
+
// set loader flag (false == not loaded)
|
167
|
+
this.itemsLoaded = false;
|
168
|
+
|
169
|
+
// display spinner while loading
|
170
|
+
if (options.loadStatus) {
|
171
|
+
logger.info('\n' + 'show: spinner');
|
172
|
+
$('.loader-ellips').show();
|
173
|
+
}
|
174
|
+
|
175
|
+
var xmlhttp = new XMLHttpRequest();
|
176
|
+
xmlhttp.onreadystatechange = function () {
|
177
|
+
if (xmlhttp.readyState == XMLHttpRequest.DONE) {
|
178
|
+
if (xmlhttp.status == 200) {
|
179
|
+
options.firstPage++;
|
180
|
+
var childItems = _this.getChildItemsByAjaxHTML(options, xmlhttp.responseText);
|
181
|
+
_this.appendNewItems(childItems);
|
182
|
+
|
183
|
+
logger.info('\n' + 'loading new items: successful');
|
184
|
+
|
185
|
+
// hide the spinner after loading
|
186
|
+
if (options.loadStatus) {
|
187
|
+
logger.info('\n' + 'hide: spinner');
|
188
|
+
$('.loader-ellips').hide();
|
189
|
+
}
|
190
|
+
|
191
|
+
// set loader flag (true == loaded)
|
192
|
+
return _this.itemsLoaded = true;
|
193
|
+
} else {
|
194
|
+
// hide the spinner
|
195
|
+
if (options.loadStatus) {
|
196
|
+
logger.info('\n' + 'hide: spinner');
|
197
|
+
$('.loader-ellips').hide();
|
198
|
+
}
|
199
|
+
|
200
|
+
logger.error('\n' + 'loading new items failed, HTTP response: ' + xmlhttp.status );
|
201
|
+
// set loader flag (true == loaded)
|
202
|
+
return _this.itemsLoaded = false;
|
203
|
+
}
|
204
|
+
}
|
205
|
+
};
|
206
|
+
logger.info('\n' + 'loading new items from path: ' + options.path + options.firstPage);
|
207
|
+
xmlhttp.open("GET", location.origin + options.path + options.firstPage + '/index.html', true);
|
208
|
+
xmlhttp.send();
|
209
|
+
|
210
|
+
},
|
211
|
+
// -------------------------------------------------------------------------
|
212
|
+
// getChildItemsByAjaxHTML: extract items from page loaded
|
213
|
+
// -------------------------------------------------------------------------
|
214
|
+
getChildItemsByAjaxHTML: function (options, HTMLText) {
|
215
|
+
var newHTML = document.createElement('html');
|
216
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
217
|
+
|
218
|
+
logger.info('\n' + 'load new items');
|
219
|
+
newHTML.innerHTML = HTMLText;
|
220
|
+
var childItems = newHTML.querySelectorAll(options.elementID + ' > *');
|
221
|
+
return childItems;
|
222
|
+
},
|
223
|
+
// -------------------------------------------------------------------------
|
224
|
+
// appendNewItems: append items and run post processing
|
225
|
+
// -------------------------------------------------------------------------
|
226
|
+
appendNewItems: function (items) {
|
227
|
+
var _this = this;
|
228
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
229
|
+
|
230
|
+
logger.info('\n' + 'append new items');
|
231
|
+
items.forEach(function (item) {
|
232
|
+
_this.element.appendChild(item);
|
233
|
+
});
|
234
|
+
|
235
|
+
logger.info('\n' + 'post processing: createDropCap');
|
236
|
+
// initialize backdrops
|
237
|
+
j1.core.createDropCap();
|
238
|
+
},
|
239
|
+
// -------------------------------------------------------------------------
|
240
|
+
// getNewPost: load/append new items
|
241
|
+
// Note: loader flag prevents to load items if AJAX load in progress
|
242
|
+
// is NOT finished
|
243
|
+
// -------------------------------------------------------------------------
|
244
|
+
infoLastPage: function (options) {
|
245
|
+
var _this = this;
|
246
|
+
var logger = log4javascript.getLogger('j1Scroll');
|
247
|
+
|
248
|
+
logger.info('\n' + 'show: infoLastPage');
|
249
|
+
$('.page-scroll-last').show();
|
250
|
+
}
|
251
|
+
}); // END prototype
|
252
|
+
|
253
|
+
// wrapper around the constructor to prevent multiple instantiations
|
254
|
+
$.fn [pluginName] = function(options) {
|
255
|
+
return this.each(function() {
|
256
|
+
if (!$.data( this, "plugin_" + pluginName)) {
|
257
|
+
$.data(this, "plugin_" +
|
258
|
+
pluginName, new Plugin(this, options));
|
259
|
+
}
|
260
|
+
});
|
261
|
+
};
|
262
|
+
|
263
|
+
})(jQuery, window, document);
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/*
|
2
|
+
# -----------------------------------------------------------------------------
|
3
|
+
# ~/assets/themes/j1/modules/j1Scroll/js/j1scroll.min.js
|
4
|
+
# J1 core module for j1scroll
|
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
|
+
|
16
|
+
(function(e,c,a,g){var d="j1Scroll",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 h=log4javascript.getLogger("j1Scroll");h.info("\ninitializing plugin: started");h.info("\nstate: started");if(i.elementScroll){this.scroller=this.element}else{this.scroller=c}if(i.loadStatus){var k='<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(k).insertAfter(i.elementID)}if(i.infoLastPage){var j=i.lastPageInfo;e(j).insertAfter(i.elementID)}if(i.type==="infiniteScroll"){h.info("\nprocessing mode: infiniteScroll");h.info("\nloading items from path: "+i.path+"#");h.info("\nmonitoring element set to: "+this.scroller);this.registerScrollEvent(i)}h.info("\ninitializing plugin: finished");h.info("\nstate: finished")},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 k=this;var h=log4javascript.getLogger("j1Scroll");h.info("\nscroll event: register");var j=function(m){var l=k.settings;if(k.isBottomReached(l)){if(l.firstPage>l.lastPage){h.info("\nlast page detected on: "+l.lastPage);c.removeEventListener("scroll",j);h.info("\nscroll event: removed");if(l.infoLastPage){k.infoLastPage(l)}return false}k.getNewPost(l)}};c.addEventListener("scroll",j);h.info("\nscroll event: registered")},getNewPost:function(i){var k=this;var h=log4javascript.getLogger("j1Scroll");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()}return 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);return k.itemsLoaded=false}}};h.info("\nloading new items from path: "+i.path+i.firstPage);j.open("GET",location.origin+i.path+i.firstPage+"/index.html",true);j.send()},getChildItemsByAjaxHTML:function(j,i){var l=a.createElement("html");var h=log4javascript.getLogger("j1Scroll");h.info("\nload new items");l.innerHTML=i;var k=l.querySelectorAll(j.elementID+" > *");return k},appendNewItems:function(h){var j=this;var i=log4javascript.getLogger("j1Scroll");i.info("\nappend new items");h.forEach(function(k){j.element.appendChild(k)});i.info("\npost processing: createDropCap");j1.core.createDropCap()},infoLastPage:function(i){var j=this;var h=log4javascript.getLogger("j1Scroll");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);
|
@@ -1,7 +1,7 @@
|
|
1
1
|
/*
|
2
2
|
# -----------------------------------------------------------------------------
|
3
3
|
# ~/assets/themes/j1/modules/showOnScroll/js/showOnScroll.js
|
4
|
-
# J1 implementation for showOnScroll
|
4
|
+
# Very simple J1 implementation for showOnScroll
|
5
5
|
#
|
6
6
|
# Product/Info:
|
7
7
|
# https://jekyll.one
|
@@ -12,7 +12,10 @@
|
|
12
12
|
# For details, see https://jekyll.one
|
13
13
|
# -----------------------------------------------------------------------------
|
14
14
|
*/
|
15
|
-
|
15
|
+
// -------------------------------------------------------------------------
|
16
|
+
// isInViewport:
|
17
|
+
// Detects if an element is visible in an viewport specified
|
18
|
+
// -------------------------------------------------------------------------
|
16
19
|
function isInViewport(elm, offset) {
|
17
20
|
// if the element doesn't exist, abort
|
18
21
|
if( elm.length == 0 ) {
|
@@ -32,27 +35,36 @@ function isInViewport(elm, offset) {
|
|
32
35
|
(height > viewport_height && top <= viewport_top && bottom >= viewport_bottom);
|
33
36
|
}
|
34
37
|
|
38
|
+
// -----------------------------------------------------------------------------
|
39
|
+
// Initializer
|
40
|
+
// -----------------------------------------------------------------------------
|
35
41
|
$(document).ready( function() {
|
36
42
|
|
37
43
|
var showDelay = 700;
|
38
44
|
var yOffset = 500;
|
39
|
-
var logger = log4javascript.getLogger('
|
45
|
+
var logger = log4javascript.getLogger('j1ShowOnScroll');
|
40
46
|
|
47
|
+
// ---------------------------------------------------------------------------
|
48
|
+
// EventHandler: Service Panel
|
49
|
+
// ---------------------------------------------------------------------------
|
41
50
|
var eventHandler_service_panel = function (event) {
|
42
51
|
if (isInViewport ($('#home_service_panel'), yOffset)) {
|
43
|
-
logger.info('\n' + '
|
44
|
-
//console.log('The specified container is in view.');
|
52
|
+
logger.info('\n' + 'specified container is in view: home_service_panel');
|
45
53
|
$(".home_service_panel").show(showDelay);
|
54
|
+
logger.info('\n' + 'remove eventHandler');
|
46
55
|
window.removeEventListener('scroll', eventHandler_service_panel);
|
47
56
|
}
|
48
57
|
}
|
49
58
|
window.addEventListener('scroll', eventHandler_service_panel);
|
50
59
|
|
60
|
+
// ---------------------------------------------------------------------------
|
61
|
+
// EventHandler: Intro Panel
|
62
|
+
// ---------------------------------------------------------------------------
|
51
63
|
var eventHandler_intro_panel = function (event) {
|
52
64
|
if (isInViewport ($('#home_intro_panel'), yOffset)) {
|
53
|
-
logger.info('\n' + '
|
54
|
-
//console.log('The specified container is in view.');
|
65
|
+
logger.info('\n' + 'specified container is in view: home_intro_panel');
|
55
66
|
$(".home_intro_panel").show(showDelay);
|
67
|
+
logger.info('\n' + 'remove eventHandler');
|
56
68
|
window.removeEventListener('scroll', eventHandler_intro_panel);
|
57
69
|
}
|
58
70
|
}
|
data/lib/j1/version.rb
CHANGED
data/lib/starter_web/Gemfile
CHANGED
@@ -53,7 +53,7 @@ gem 'jekyll', '~> 4.2'
|
|
53
53
|
|
54
54
|
# Theme Rubies, default: J1 Template (NOT used for the development system)
|
55
55
|
#
|
56
|
-
gem 'j1-template', '~> 2021.1.
|
56
|
+
gem 'j1-template', '~> 2021.1.29'
|
57
57
|
|
58
58
|
# ------------------------------------------------------------------------------
|
59
59
|
# PRODUCTION: Gem needed for the Jekyll and J1 prod environment
|
data/lib/starter_web/_config.yml
CHANGED
@@ -53,7 +53,7 @@ environment: production
|
|
53
53
|
# ------------------------------------------------------------------------------
|
54
54
|
# Sets the build version of J1 Template Gem
|
55
55
|
#
|
56
|
-
version: 2021.1.
|
56
|
+
version: 2021.1.29
|
57
57
|
|
58
58
|
# version
|
59
59
|
# ------------------------------------------------------------------------------
|