jekyll-theme-panda 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +79 -0
- data/_config.yml +72 -0
- data/_includes/about/en.md +1 -0
- data/_includes/about/zh.md +0 -0
- data/_includes/footer.html +80 -0
- data/_includes/head.html +81 -0
- data/_includes/header.html +158 -0
- data/_includes/policy/en.md +1 -0
- data/_includes/policy/zh.md +9 -0
- data/_includes/search.html +5 -0
- data/_includes/toc.html +112 -0
- data/_layouts/default.html +9 -0
- data/_layouts/forarchive.html +91 -0
- data/_layouts/home.html +115 -0
- data/_layouts/post.html +117 -0
- data/_sass/common.scss +4480 -0
- data/_sass/header.scss +622 -0
- data/_sass/post.scss +362 -0
- data/_sass/syntax.scss +191 -0
- data/assets/css/bootstrap.min.css +6 -0
- data/assets/css/font-awesome.min.css +4 -0
- data/assets/css/styles.scss +6 -0
- data/assets/fonts/FontAwesome.otf +0 -0
- data/assets/fonts/amarillo/AmarilloUSAF.svg +181 -0
- data/assets/fonts/amarillo/AmarilloUSAF.ttf +0 -0
- data/assets/fonts/amarillo/AmarilloUSAF.woff +0 -0
- data/assets/fonts/amarillo/amarillo-font.css +18 -0
- data/assets/fonts/amarillo/amarurgt.eot +0 -0
- data/assets/fonts/amarillo/amarurgt.woff2 +0 -0
- data/assets/fonts/fontawesome-webfont.eot +0 -0
- data/assets/fonts/fontawesome-webfont.svg +2671 -0
- data/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/assets/fonts/fontawesome-webfont.woff +0 -0
- data/assets/fonts/fontawesome-webfont.woff2 +0 -0
- data/assets/img/banner.gif +0 -0
- data/assets/img/logo_Nest.png +0 -0
- data/assets/img/switcher.png +0 -0
- data/assets/js/archive.min.js +5 -0
- data/assets/js/imagesLoaded-3.1.8.js +9434 -0
- data/assets/js/imagesLoaded-4.1.4.js +497 -0
- data/assets/js/jquery-3.5.1.min.js +2 -0
- data/assets/js/mermaid.min.js +31 -0
- data/assets/js/script.js +216 -0
- data/assets/js/slick.min.js +1 -0
- metadata +116 -0
@@ -0,0 +1,497 @@
|
|
1
|
+
/*!
|
2
|
+
* imagesLoaded PACKAGED v4.1.4
|
3
|
+
* JavaScript is all like "You images are done yet or what?"
|
4
|
+
* MIT License
|
5
|
+
*/
|
6
|
+
|
7
|
+
/**
|
8
|
+
* EvEmitter v1.1.0
|
9
|
+
* Lil' event emitter
|
10
|
+
* MIT License
|
11
|
+
*/
|
12
|
+
|
13
|
+
/* jshint unused: true, undef: true, strict: true */
|
14
|
+
|
15
|
+
( function( global, factory ) {
|
16
|
+
// universal module definition
|
17
|
+
/* jshint strict: false */ /* globals define, module, window */
|
18
|
+
if ( typeof define == 'function' && define.amd ) {
|
19
|
+
// AMD - RequireJS
|
20
|
+
define( 'ev-emitter/ev-emitter',factory );
|
21
|
+
} else if ( typeof module == 'object' && module.exports ) {
|
22
|
+
// CommonJS - Browserify, Webpack
|
23
|
+
module.exports = factory();
|
24
|
+
} else {
|
25
|
+
// Browser globals
|
26
|
+
global.EvEmitter = factory();
|
27
|
+
}
|
28
|
+
|
29
|
+
}( typeof window != 'undefined' ? window : this, function() {
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
function EvEmitter() {}
|
34
|
+
|
35
|
+
var proto = EvEmitter.prototype;
|
36
|
+
|
37
|
+
proto.on = function( eventName, listener ) {
|
38
|
+
if ( !eventName || !listener ) {
|
39
|
+
return;
|
40
|
+
}
|
41
|
+
// set events hash
|
42
|
+
var events = this._events = this._events || {};
|
43
|
+
// set listeners array
|
44
|
+
var listeners = events[ eventName ] = events[ eventName ] || [];
|
45
|
+
// only add once
|
46
|
+
if ( listeners.indexOf( listener ) == -1 ) {
|
47
|
+
listeners.push( listener );
|
48
|
+
}
|
49
|
+
|
50
|
+
return this;
|
51
|
+
};
|
52
|
+
|
53
|
+
proto.once = function( eventName, listener ) {
|
54
|
+
if ( !eventName || !listener ) {
|
55
|
+
return;
|
56
|
+
}
|
57
|
+
// add event
|
58
|
+
this.on( eventName, listener );
|
59
|
+
// set once flag
|
60
|
+
// set onceEvents hash
|
61
|
+
var onceEvents = this._onceEvents = this._onceEvents || {};
|
62
|
+
// set onceListeners object
|
63
|
+
var onceListeners = onceEvents[ eventName ] = onceEvents[ eventName ] || {};
|
64
|
+
// set flag
|
65
|
+
onceListeners[ listener ] = true;
|
66
|
+
|
67
|
+
return this;
|
68
|
+
};
|
69
|
+
|
70
|
+
proto.off = function( eventName, listener ) {
|
71
|
+
var listeners = this._events && this._events[ eventName ];
|
72
|
+
if ( !listeners || !listeners.length ) {
|
73
|
+
return;
|
74
|
+
}
|
75
|
+
var index = listeners.indexOf( listener );
|
76
|
+
if ( index != -1 ) {
|
77
|
+
listeners.splice( index, 1 );
|
78
|
+
}
|
79
|
+
|
80
|
+
return this;
|
81
|
+
};
|
82
|
+
|
83
|
+
proto.emitEvent = function( eventName, args ) {
|
84
|
+
var listeners = this._events && this._events[ eventName ];
|
85
|
+
if ( !listeners || !listeners.length ) {
|
86
|
+
return;
|
87
|
+
}
|
88
|
+
// copy over to avoid interference if .off() in listener
|
89
|
+
listeners = listeners.slice(0);
|
90
|
+
args = args || [];
|
91
|
+
// once stuff
|
92
|
+
var onceListeners = this._onceEvents && this._onceEvents[ eventName ];
|
93
|
+
|
94
|
+
for ( var i=0; i < listeners.length; i++ ) {
|
95
|
+
var listener = listeners[i]
|
96
|
+
var isOnce = onceListeners && onceListeners[ listener ];
|
97
|
+
if ( isOnce ) {
|
98
|
+
// remove listener
|
99
|
+
// remove before trigger to prevent recursion
|
100
|
+
this.off( eventName, listener );
|
101
|
+
// unset once flag
|
102
|
+
delete onceListeners[ listener ];
|
103
|
+
}
|
104
|
+
// trigger listener
|
105
|
+
listener.apply( this, args );
|
106
|
+
}
|
107
|
+
|
108
|
+
return this;
|
109
|
+
};
|
110
|
+
|
111
|
+
proto.allOff = function() {
|
112
|
+
delete this._events;
|
113
|
+
delete this._onceEvents;
|
114
|
+
};
|
115
|
+
|
116
|
+
return EvEmitter;
|
117
|
+
|
118
|
+
}));
|
119
|
+
|
120
|
+
/*!
|
121
|
+
* imagesLoaded v4.1.4
|
122
|
+
* JavaScript is all like "You images are done yet or what?"
|
123
|
+
* MIT License
|
124
|
+
*/
|
125
|
+
|
126
|
+
( function( window, factory ) { 'use strict';
|
127
|
+
// universal module definition
|
128
|
+
|
129
|
+
/*global define: false, module: false, require: false */
|
130
|
+
|
131
|
+
if ( typeof define == 'function' && define.amd ) {
|
132
|
+
// AMD
|
133
|
+
define( [
|
134
|
+
'ev-emitter/ev-emitter'
|
135
|
+
], function( EvEmitter ) {
|
136
|
+
return factory( window, EvEmitter );
|
137
|
+
});
|
138
|
+
} else if ( typeof module == 'object' && module.exports ) {
|
139
|
+
// CommonJS
|
140
|
+
module.exports = factory(
|
141
|
+
window,
|
142
|
+
require('ev-emitter')
|
143
|
+
);
|
144
|
+
} else {
|
145
|
+
// browser global
|
146
|
+
window.imagesLoaded = factory(
|
147
|
+
window,
|
148
|
+
window.EvEmitter
|
149
|
+
);
|
150
|
+
}
|
151
|
+
|
152
|
+
})( typeof window !== 'undefined' ? window : this,
|
153
|
+
|
154
|
+
// -------------------------- factory -------------------------- //
|
155
|
+
|
156
|
+
function factory( window, EvEmitter ) {
|
157
|
+
|
158
|
+
|
159
|
+
|
160
|
+
var $ = window.jQuery;
|
161
|
+
var console = window.console;
|
162
|
+
|
163
|
+
// -------------------------- helpers -------------------------- //
|
164
|
+
|
165
|
+
// extend objects
|
166
|
+
function extend( a, b ) {
|
167
|
+
for ( var prop in b ) {
|
168
|
+
a[ prop ] = b[ prop ];
|
169
|
+
}
|
170
|
+
return a;
|
171
|
+
}
|
172
|
+
|
173
|
+
var arraySlice = Array.prototype.slice;
|
174
|
+
|
175
|
+
// turn element or nodeList into an array
|
176
|
+
function makeArray( obj ) {
|
177
|
+
if ( Array.isArray( obj ) ) {
|
178
|
+
// use object if already an array
|
179
|
+
return obj;
|
180
|
+
}
|
181
|
+
|
182
|
+
var isArrayLike = typeof obj == 'object' && typeof obj.length == 'number';
|
183
|
+
if ( isArrayLike ) {
|
184
|
+
// convert nodeList to array
|
185
|
+
return arraySlice.call( obj );
|
186
|
+
}
|
187
|
+
|
188
|
+
// array of single index
|
189
|
+
return [ obj ];
|
190
|
+
}
|
191
|
+
|
192
|
+
// -------------------------- imagesLoaded -------------------------- //
|
193
|
+
|
194
|
+
/**
|
195
|
+
* @param {Array, Element, NodeList, String} elem
|
196
|
+
* @param {Object or Function} options - if function, use as callback
|
197
|
+
* @param {Function} onAlways - callback function
|
198
|
+
*/
|
199
|
+
function ImagesLoaded( elem, options, onAlways ) {
|
200
|
+
// coerce ImagesLoaded() without new, to be new ImagesLoaded()
|
201
|
+
if ( !( this instanceof ImagesLoaded ) ) {
|
202
|
+
return new ImagesLoaded( elem, options, onAlways );
|
203
|
+
}
|
204
|
+
// use elem as selector string
|
205
|
+
var queryElem = elem;
|
206
|
+
if ( typeof elem == 'string' ) {
|
207
|
+
queryElem = document.querySelectorAll( elem );
|
208
|
+
}
|
209
|
+
// bail if bad element
|
210
|
+
if ( !queryElem ) {
|
211
|
+
console.error( 'Bad element for imagesLoaded ' + ( queryElem || elem ) );
|
212
|
+
return;
|
213
|
+
}
|
214
|
+
|
215
|
+
this.elements = makeArray( queryElem );
|
216
|
+
this.options = extend( {}, this.options );
|
217
|
+
// shift arguments if no options set
|
218
|
+
if ( typeof options == 'function' ) {
|
219
|
+
onAlways = options;
|
220
|
+
} else {
|
221
|
+
extend( this.options, options );
|
222
|
+
}
|
223
|
+
|
224
|
+
if ( onAlways ) {
|
225
|
+
this.on( 'always', onAlways );
|
226
|
+
}
|
227
|
+
|
228
|
+
this.getImages();
|
229
|
+
|
230
|
+
if ( $ ) {
|
231
|
+
// add jQuery Deferred object
|
232
|
+
this.jqDeferred = new $.Deferred();
|
233
|
+
}
|
234
|
+
|
235
|
+
// HACK check async to allow time to bind listeners
|
236
|
+
setTimeout( this.check.bind( this ) );
|
237
|
+
}
|
238
|
+
|
239
|
+
ImagesLoaded.prototype = Object.create( EvEmitter.prototype );
|
240
|
+
|
241
|
+
ImagesLoaded.prototype.options = {};
|
242
|
+
|
243
|
+
ImagesLoaded.prototype.getImages = function() {
|
244
|
+
this.images = [];
|
245
|
+
|
246
|
+
// filter & find items if we have an item selector
|
247
|
+
this.elements.forEach( this.addElementImages, this );
|
248
|
+
};
|
249
|
+
|
250
|
+
/**
|
251
|
+
* @param {Node} element
|
252
|
+
*/
|
253
|
+
ImagesLoaded.prototype.addElementImages = function( elem ) {
|
254
|
+
// filter siblings
|
255
|
+
if ( elem.nodeName == 'IMG' ) {
|
256
|
+
this.addImage( elem );
|
257
|
+
}
|
258
|
+
// get background image on element
|
259
|
+
if ( this.options.background === true ) {
|
260
|
+
this.addElementBackgroundImages( elem );
|
261
|
+
}
|
262
|
+
|
263
|
+
// find children
|
264
|
+
// no non-element nodes, #143
|
265
|
+
var nodeType = elem.nodeType;
|
266
|
+
if ( !nodeType || !elementNodeTypes[ nodeType ] ) {
|
267
|
+
return;
|
268
|
+
}
|
269
|
+
var childImgs = elem.querySelectorAll('img');
|
270
|
+
// concat childElems to filterFound array
|
271
|
+
for ( var i=0; i < childImgs.length; i++ ) {
|
272
|
+
var img = childImgs[i];
|
273
|
+
this.addImage( img );
|
274
|
+
}
|
275
|
+
|
276
|
+
// get child background images
|
277
|
+
if ( typeof this.options.background == 'string' ) {
|
278
|
+
var children = elem.querySelectorAll( this.options.background );
|
279
|
+
for ( i=0; i < children.length; i++ ) {
|
280
|
+
var child = children[i];
|
281
|
+
this.addElementBackgroundImages( child );
|
282
|
+
}
|
283
|
+
}
|
284
|
+
};
|
285
|
+
|
286
|
+
var elementNodeTypes = {
|
287
|
+
1: true,
|
288
|
+
9: true,
|
289
|
+
11: true
|
290
|
+
};
|
291
|
+
|
292
|
+
ImagesLoaded.prototype.addElementBackgroundImages = function( elem ) {
|
293
|
+
var style = getComputedStyle( elem );
|
294
|
+
if ( !style ) {
|
295
|
+
// Firefox returns null if in a hidden iframe https://bugzil.la/548397
|
296
|
+
return;
|
297
|
+
}
|
298
|
+
// get url inside url("...")
|
299
|
+
var reURL = /url\((['"])?(.*?)\1\)/gi;
|
300
|
+
var matches = reURL.exec( style.backgroundImage );
|
301
|
+
while ( matches !== null ) {
|
302
|
+
var url = matches && matches[2];
|
303
|
+
if ( url ) {
|
304
|
+
this.addBackground( url, elem );
|
305
|
+
}
|
306
|
+
matches = reURL.exec( style.backgroundImage );
|
307
|
+
}
|
308
|
+
};
|
309
|
+
|
310
|
+
/**
|
311
|
+
* @param {Image} img
|
312
|
+
*/
|
313
|
+
ImagesLoaded.prototype.addImage = function( img ) {
|
314
|
+
var loadingImage = new LoadingImage( img );
|
315
|
+
this.images.push( loadingImage );
|
316
|
+
};
|
317
|
+
|
318
|
+
ImagesLoaded.prototype.addBackground = function( url, elem ) {
|
319
|
+
var background = new Background( url, elem );
|
320
|
+
this.images.push( background );
|
321
|
+
};
|
322
|
+
|
323
|
+
ImagesLoaded.prototype.check = function() {
|
324
|
+
var _this = this;
|
325
|
+
this.progressedCount = 0;
|
326
|
+
this.hasAnyBroken = false;
|
327
|
+
// complete if no images
|
328
|
+
if ( !this.images.length ) {
|
329
|
+
this.complete();
|
330
|
+
return;
|
331
|
+
}
|
332
|
+
|
333
|
+
function onProgress( image, elem, message ) {
|
334
|
+
// HACK - Chrome triggers event before object properties have changed. #83
|
335
|
+
setTimeout( function() {
|
336
|
+
_this.progress( image, elem, message );
|
337
|
+
});
|
338
|
+
}
|
339
|
+
|
340
|
+
this.images.forEach( function( loadingImage ) {
|
341
|
+
loadingImage.once( 'progress', onProgress );
|
342
|
+
loadingImage.check();
|
343
|
+
});
|
344
|
+
};
|
345
|
+
|
346
|
+
ImagesLoaded.prototype.progress = function( image, elem, message ) {
|
347
|
+
this.progressedCount++;
|
348
|
+
this.hasAnyBroken = this.hasAnyBroken || !image.isLoaded;
|
349
|
+
// progress event
|
350
|
+
this.emitEvent( 'progress', [ this, image, elem ] );
|
351
|
+
if ( this.jqDeferred && this.jqDeferred.notify ) {
|
352
|
+
this.jqDeferred.notify( this, image );
|
353
|
+
}
|
354
|
+
// check if completed
|
355
|
+
if ( this.progressedCount == this.images.length ) {
|
356
|
+
this.complete();
|
357
|
+
}
|
358
|
+
|
359
|
+
if ( this.options.debug && console ) {
|
360
|
+
console.log( 'progress: ' + message, image, elem );
|
361
|
+
}
|
362
|
+
};
|
363
|
+
|
364
|
+
ImagesLoaded.prototype.complete = function() {
|
365
|
+
var eventName = this.hasAnyBroken ? 'fail' : 'done';
|
366
|
+
this.isComplete = true;
|
367
|
+
this.emitEvent( eventName, [ this ] );
|
368
|
+
this.emitEvent( 'always', [ this ] );
|
369
|
+
if ( this.jqDeferred ) {
|
370
|
+
var jqMethod = this.hasAnyBroken ? 'reject' : 'resolve';
|
371
|
+
this.jqDeferred[ jqMethod ]( this );
|
372
|
+
}
|
373
|
+
};
|
374
|
+
|
375
|
+
// -------------------------- -------------------------- //
|
376
|
+
|
377
|
+
function LoadingImage( img ) {
|
378
|
+
this.img = img;
|
379
|
+
}
|
380
|
+
|
381
|
+
LoadingImage.prototype = Object.create( EvEmitter.prototype );
|
382
|
+
|
383
|
+
LoadingImage.prototype.check = function() {
|
384
|
+
// If complete is true and browser supports natural sizes,
|
385
|
+
// try to check for image status manually.
|
386
|
+
var isComplete = this.getIsImageComplete();
|
387
|
+
if ( isComplete ) {
|
388
|
+
// report based on naturalWidth
|
389
|
+
this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
|
390
|
+
return;
|
391
|
+
}
|
392
|
+
|
393
|
+
// If none of the checks above matched, simulate loading on detached element.
|
394
|
+
this.proxyImage = new Image();
|
395
|
+
this.proxyImage.addEventListener( 'load', this );
|
396
|
+
this.proxyImage.addEventListener( 'error', this );
|
397
|
+
// bind to image as well for Firefox. #191
|
398
|
+
this.img.addEventListener( 'load', this );
|
399
|
+
this.img.addEventListener( 'error', this );
|
400
|
+
this.proxyImage.src = this.img.src;
|
401
|
+
};
|
402
|
+
|
403
|
+
LoadingImage.prototype.getIsImageComplete = function() {
|
404
|
+
// check for non-zero, non-undefined naturalWidth
|
405
|
+
// fixes Safari+InfiniteScroll+Masonry bug infinite-scroll#671
|
406
|
+
return this.img.complete && this.img.naturalWidth;
|
407
|
+
};
|
408
|
+
|
409
|
+
LoadingImage.prototype.confirm = function( isLoaded, message ) {
|
410
|
+
this.isLoaded = isLoaded;
|
411
|
+
this.emitEvent( 'progress', [ this, this.img, message ] );
|
412
|
+
};
|
413
|
+
|
414
|
+
// ----- events ----- //
|
415
|
+
|
416
|
+
// trigger specified handler for event type
|
417
|
+
LoadingImage.prototype.handleEvent = function( event ) {
|
418
|
+
var method = 'on' + event.type;
|
419
|
+
if ( this[ method ] ) {
|
420
|
+
this[ method ]( event );
|
421
|
+
}
|
422
|
+
};
|
423
|
+
|
424
|
+
LoadingImage.prototype.onload = function() {
|
425
|
+
this.confirm( true, 'onload' );
|
426
|
+
this.unbindEvents();
|
427
|
+
};
|
428
|
+
|
429
|
+
LoadingImage.prototype.onerror = function() {
|
430
|
+
this.confirm( false, 'onerror' );
|
431
|
+
this.unbindEvents();
|
432
|
+
};
|
433
|
+
|
434
|
+
LoadingImage.prototype.unbindEvents = function() {
|
435
|
+
this.proxyImage.removeEventListener( 'load', this );
|
436
|
+
this.proxyImage.removeEventListener( 'error', this );
|
437
|
+
this.img.removeEventListener( 'load', this );
|
438
|
+
this.img.removeEventListener( 'error', this );
|
439
|
+
};
|
440
|
+
|
441
|
+
// -------------------------- Background -------------------------- //
|
442
|
+
|
443
|
+
function Background( url, element ) {
|
444
|
+
this.url = url;
|
445
|
+
this.element = element;
|
446
|
+
this.img = new Image();
|
447
|
+
}
|
448
|
+
|
449
|
+
// inherit LoadingImage prototype
|
450
|
+
Background.prototype = Object.create( LoadingImage.prototype );
|
451
|
+
|
452
|
+
Background.prototype.check = function() {
|
453
|
+
this.img.addEventListener( 'load', this );
|
454
|
+
this.img.addEventListener( 'error', this );
|
455
|
+
this.img.src = this.url;
|
456
|
+
// check if image is already complete
|
457
|
+
var isComplete = this.getIsImageComplete();
|
458
|
+
if ( isComplete ) {
|
459
|
+
this.confirm( this.img.naturalWidth !== 0, 'naturalWidth' );
|
460
|
+
this.unbindEvents();
|
461
|
+
}
|
462
|
+
};
|
463
|
+
|
464
|
+
Background.prototype.unbindEvents = function() {
|
465
|
+
this.img.removeEventListener( 'load', this );
|
466
|
+
this.img.removeEventListener( 'error', this );
|
467
|
+
};
|
468
|
+
|
469
|
+
Background.prototype.confirm = function( isLoaded, message ) {
|
470
|
+
this.isLoaded = isLoaded;
|
471
|
+
this.emitEvent( 'progress', [ this, this.element, message ] );
|
472
|
+
};
|
473
|
+
|
474
|
+
// -------------------------- jQuery -------------------------- //
|
475
|
+
|
476
|
+
ImagesLoaded.makeJQueryPlugin = function( jQuery ) {
|
477
|
+
jQuery = jQuery || window.jQuery;
|
478
|
+
if ( !jQuery ) {
|
479
|
+
return;
|
480
|
+
}
|
481
|
+
// set local variable
|
482
|
+
$ = jQuery;
|
483
|
+
// $().imagesLoaded()
|
484
|
+
$.fn.imagesLoaded = function( options, callback ) {
|
485
|
+
var instance = new ImagesLoaded( this, options, callback );
|
486
|
+
return instance.jqDeferred.promise( $(this) );
|
487
|
+
};
|
488
|
+
};
|
489
|
+
// try making plugin
|
490
|
+
ImagesLoaded.makeJQueryPlugin();
|
491
|
+
|
492
|
+
// -------------------------- -------------------------- //
|
493
|
+
|
494
|
+
return ImagesLoaded;
|
495
|
+
|
496
|
+
});
|
497
|
+
|