Skip to content

Commit f0fc7e6

Browse files
committed
1 parent 5b72164 commit f0fc7e6

File tree

3 files changed

+105
-1
lines changed

3 files changed

+105
-1
lines changed

dist/dll.esm.js

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
/*!
2+
* DLL.js v1.5.2 (https://thednp.github.io/dll.js/)
3+
* Copyright 2020 © thednp
4+
* Licensed under MIT (https://github.com/thednp/dll.js/blob/master/LICENSE)
5+
*/
6+
function queryElement (selector, parent) {
7+
var lookUp = parent && parent instanceof Element ? parent : document;
8+
return selector instanceof Element ? selector : lookUp.querySelector(selector);
9+
}
10+
11+
function tryWrapper (fn,origin){
12+
try{ fn(); }
13+
catch(e){
14+
console.error((origin + ": " + e));
15+
}
16+
}
17+
18+
function on (element, event, handler, options) {
19+
options = options || false;
20+
element.addEventListener(event, handler, options);
21+
}
22+
23+
function off (element, event, handler, options) {
24+
options = options || false;
25+
element.removeEventListener(event, handler, options);
26+
}
27+
28+
function one (element, event, handler, options) {
29+
on(element, event, function handlerWrapper(e){
30+
if (e.target === element) {
31+
handler(e);
32+
off(element, event, handlerWrapper, options);
33+
}
34+
}, options);
35+
}
36+
37+
function loadMedia(mediaElement, imageCallback) {
38+
var isVideo = mediaElement.tagName === 'SOURCE',
39+
loadEvent = isVideo ? 'loadstart' : 'load',
40+
newVideo = isVideo ? document.createElement('VIDEO') : 0,
41+
mediaObject = isVideo ? document.createElement('SOURCE') : new Image(),
42+
loadTarget = isVideo ? newVideo : mediaObject,
43+
src = mediaElement.getAttribute('data-src');
44+
one(loadTarget,loadEvent,function (){
45+
if (mediaElement.tagName === 'IMG') { mediaElement.src=src; }
46+
else if (mediaElement.tagName === 'SOURCE') {
47+
mediaElement.src=src;
48+
mediaElement.parentNode.load();
49+
}
50+
else {mediaElement.style.backgroundImage = 'url("'+src+'")'; }
51+
mediaElement.removeAttribute('data-src');
52+
imageCallback && imageCallback();
53+
});
54+
mediaObject.src = src;
55+
newVideo && ( newVideo.appendChild(mediaObject) );
56+
}
57+
58+
function getMediaElements(source) {
59+
var queue, mediaItems = [],
60+
matchedSelectors = source.querySelectorAll('[data-src]'),
61+
elementSRC = source ? source.getAttribute('data-src') : null;
62+
if ( elementSRC && !matchedSelectors) {
63+
queue = [source];
64+
} else if ( !elementSRC && matchedSelectors ) {
65+
queue = matchedSelectors;
66+
} else if ( elementSRC && matchedSelectors ){
67+
queue = matchedSelectors;
68+
mediaItems.unshift(source);
69+
} else if ( !elementSRC && !matchedSelectors ){
70+
queue = document.querySelectorAll('[data-src]');
71+
}
72+
Array.from(queue).map(function (x){ return mediaItems.push(x); });
73+
return mediaItems;
74+
}
75+
76+
function DLL (element,callbackFn){
77+
tryWrapper(function (){
78+
element = queryElement(element);
79+
callbackFn = typeof callbackFn === 'function' ? callbackFn : null;
80+
var mediaTargets = getMediaElements(element),
81+
elementSRC = element ? element.getAttribute('data-src') : null;
82+
if (elementSRC || element.querySelector('[data-src]') !== null) {
83+
mediaTargets.map(function (x,i){
84+
if ( i === mediaTargets.length-1 && callbackFn) {
85+
loadMedia(x,callbackFn);
86+
} else {
87+
loadMedia(x);
88+
}
89+
});
90+
}
91+
},'DLL.js:');
92+
}
93+
94+
function initComponent() {
95+
var DLLImages = Array.from(document.querySelectorAll('[data-src]'));
96+
DLLImages.map(function (x){ return new DLL(x); });
97+
}
98+
document.body ? initComponent() : one(document, 'DOMContentLoaded', initComponent);
99+
100+
export default DLL;

dist/dll.esm.min.js

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
"description": "Double Lazy Load for Images, Videos and Background Images.",
55
"main": "dist/dll.min.js",
66
"module": "dist/dll-esm.min.js",
7-
"files": ["dist/{css,js}/*.{css,js,map}"],
7+
"files": [
8+
"dist/{css,js}/*.{css,js,map}"
9+
],
810
"scripts": {
911
"test": "echo \"Error: no test specified\" && exit 1",
1012
"build": "npm-run-all --parallel build-*",

0 commit comments

Comments
 (0)