Issues (171)

1
// TODO: if function not exist try to load from main folder with the name {NameOfFunction}.js
2
var Load = function (target, success, error) {
3
    //url is URL of external file, success is the code
4
    //to be called from the file, location is the location to
5
    //insert the <script> element
6
    this.cfg = {};
7
    this.cfg.target = target;
8
    this.cfg.delay = 0;
9
    this.cfg.cache = 1;
10
11
    this.success = success;
12
    this.error = error;
13
14
15
    var self = this;
16
17
    this.target = function (target) {
18
        self.cfg.target = target;
19
        return this;
20
    };
21
22
    this.delay = function (delay) {
23
        self.cfg.delay = delay;
24
        return this;
25
    };
26
27
    this.cache = function (cache) {
28
        self.cfg.cache = cache;
29
        return this;
30
    };
31
32
    this.cacheOff = function () {
33
        self.cfg.cache = 0;
34
35
        return this;
36
    };
37
38
    this.cacheOn = function () {
39
        self.cfg.cache = 1;
40
41
        return this;
42
    };
43
44
    this.js = function (url) {
45
        if (typeof self.cfg.delay === 'number' && self.cfg.delay > 1) {
46
            setTimeout(function () {
47
                    console.log('delayed', self.cfg.delay, url);
48
                    self.loadJs(url, self.cfg.target, self.success, self.error);
49
                },
50
                self.cfg.delay
51
            );
52
        } else {
53
            console.log('loaded', url);
54
            self.loadJs(url, self.cfg.target, self.success, self.error);
55
        }
56
        return this;
57
    };
58
    this.javascript = this.js;
59
    this.script = this.js;
60
61
62
    this.css = function (url) {
63
        if (typeof self.cfg.delay === 'number' && self.cfg.delay > 1) {
64
            setTimeout(function () {
65
                    console.log('delayed', self.cfg.delay, url);
66
                    self.loadCss(url, self.cfg.target, self.success, self.error);
67
                },
68
                self.cfg.delay
69
            );
70
        } else {
71
            console.log('loaded', url);
72
            self.loadCss(url, self.cfg.target, self.success, self.error);
73
        }
74
        return this;
75
        //
76
        // if (typeof url === 'object') {
77
        //     //console.log('obj:', obj);
78
        //
79
        //     for (var i in url) {
80
        //
81
        //         console.log('load js url[i]', url[i]);
82
        //
83
        //         try {
84
        //             var exe = includeStyle(url[i], self.cfg.target, success, error);
85
        //             console.log('load js ', url[i], exe);
86
        //         } catch (err) {
87
        //             console.error('!load js ', url[i], err);
88
        //         }
89
        //     }
90
        // } else {
91
        //     includeHtml(url, self.cfg.target, success, error);
92
        //     // console.error('apiunit obj: is not object:', obj);
93
        // }
94
        // return this;
95
    };
96
    this.style = this.css;
97
98
    // TODO: check if is loaded
99
    this.loadJs = function (url, target, success, error) {
100
        var suffix = '';
101
        if (typeof self.cfg.cache === 'number' && self.cfg.cache !== 1) {
102
            suffix = '?' + time();
103
        }
104
105
        if (typeof url === 'object') {
106
            //console.log('obj:', obj);
107
108
            for (var i in url) {
109
110
                console.log('load js url[i]', url[i]);
111
112
                try {
113
                    var exe = includeJs(url[i] + suffix, target, success, error);
114
                    console.log('load js ', url[i], exe);
115
                } catch (err) {
116
                    console.error('!load js ', url[i], err);
117
                }
118
            }
119
        } else {
120
            includeJs(url + suffix, target, success, error);
121
            // console.error('apiunit obj: is not object:', obj);
122
        }
123
124
        return this;
125
    };
126
127
    this.loadCss = function (url, target, success, error) {
128
        var suffix = '';
129
        if (typeof self.cfg.cache === 'number' && self.cfg.cache !== 1) {
130
            suffix = '?' + time();
131
        }
132
133
        if (typeof url === 'object') {
134
            //console.log('obj:', obj);
135
136
            for (var i in url) {
137
138
                console.log('load CSS url[i]', url[i]);
139
140
                try {
141
                    var exe = includeStyle(url[i] + suffix, target, success, error);
142
                    console.log('load CSS ', url[i], exe);
143
                } catch (err) {
144
                    console.error('!load CSS ', url[i], err);
145
                }
146
            }
147
        } else {
148
            includeStyle(url + suffix, target, success, error);
149
            // console.error('apiunit obj: is not object:', obj);
150
        }
151
152
        return this;
153
    };
154
155
156
    this.html = function (url) {
157
        if (typeof url === 'object') {
158
            //console.log('obj:', obj);
159
160
            for (var i in url) {
161
162
                console.log('load js url[i]', url[i]);
163
164
                try {
165
                    var exe = includeHtml(url[i], self.cfg.target, success, error);
166
                    console.log('load js ', url[i], exe);
167
                } catch (err) {
168
                    console.error('!load js ', url[i], err);
169
                }
170
            }
171
        } else {
172
            includeHtml(url, self.cfg.target, success, error);
173
            // console.error('apiunit obj: is not object:', obj);
174
        }
175
        return this;
176
    };
177
178
179
    this.image = function (url) {
180
        if (typeof self.cfg.delay === 'number' && self.cfg.delay > 1) {
181
            setTimeout(function () {
182
                    console.log('image delayed', self.cfg.delay, url);
183
                    self.loadImage(url, self.cfg.target, self.success, self.error);
184
                },
185
                self.cfg.delay
186
            );
187
        } else {
188
            console.log('image loaded', url, self.cfg.delay);
189
            self.loadImage(url, self.cfg.target, self.success, self.error);
190
        }
191
        return this;
192
    };
193
194
    this.loadImage = function (url, target, success, error) {
195
        if (typeof url === 'object') {
196
            //console.log('obj:', obj);
197
198
            for (var i in url) {
199
200
                console.log('load js url[i]', url[i]);
201
202
                try {
203
                    var exe = includeImage(url[i], target, success, error);
204
                    console.log('load js ', url[i], exe);
205
                } catch (err) {
206
                    console.error('!load js ', url[i], err);
207
                }
208
            }
209
        } else {
210
            includeImage(url, self.cfg.target, success, error);
211
            // console.error('apiunit obj: is not object:', obj);
212
        }
213
        return this;
214
    };
215
216
    this.img = this.image;
217
218
    return this;
219
};
220
221
function includeJs(url, target, success, error) {
222
    var scriptTag = document.createElement('script');
223
    scriptTag.src = url;
224
    scriptTag.type = 'text/javascript';
225
226
    scriptTag.onerror = error;
227
    scriptTag.onload = success;
228
    scriptTag.onreadystatechange = success;
229
230
    return getTarget(target).appendChild(scriptTag);
231
}
232
233
function isEmpty(val) {
234
    return val == null || typeof val === 'undefined' || val.length < 1;
235
}
236
237
function getTarget(target) {
238
    if (isEmpty(target)) {
239
        console.log('HEAD');
240
        target = document.getElementsByTagName('head')[0];
241
        if (isEmpty(target)) {
242
            console.log('BODY');
243
            target = document.body;
244
        }
245
    }
246
    return target;
247
}
248
249
function createTagLink(url, success, error) {
250
    var link = document.createElement('link');
251
    link.href = url;
252
    link.rel = 'stylesheet';
253
    link.type = 'text/css';
254
    link.media = 'all';
255
256
    link.onerror = error;
257
    link.onload = success;
258
    link.onreadystatechange = success;
259
260
    return link;
261
}
262
263
264
function getXHRObject() {
265
    var xhrObj = false;
266
    try {
267
        xhrObj = new XMLHttpRequest();
268
    } catch (e) {
269
        var progid = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0',
270
            'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
271
        for (var i = 0; i < progid.length; ++i) {
272
            try {
273
                xhrObj = new ActiveXObject(progid[i]);
274
            } catch (e) {
275
                continue;
276
            }
277
            break;
278
        }
279
    } finally {
280
        return xhrObj;
281
    }
282
}
283
284
// TODO: replce path to id name and check if ID exist
285
// FASTEST loading:
286
// https://www.oreilly.com/library/view/even-faster-web/9780596803773/ch04.html
287
function includeStyle(url, target, success, error) {
288
    // console.log(target, target == null);
289
    // return false;
290
291
    // var xhrObj = getXHRObject(); // defined in the previous example
292
    // xhrObj.onreadystatechange =
293
    //     function () {
294
    //         if (xhrObj.readyState == 4) {
295
    //             // var scriptElem = document.createElement('script');
296
    //             var scriptElem = document.createElement('style');
297
    //             document.getElementsByTagName('head')[0].appendChild(scriptElem);
298
    //             scriptElem.text = xhrObj.responseText;
299
    //         }
300
    //     };
301
    // xhrObj.open('GET', url, true); // must be same domain as main page
302
    // return xhrObj.send('');
303
304
305
    var link = createTagLink(url, success, error);
306
    return getTarget(target).appendChild(link);
307
}
308
309
310 View Code Duplication
function includeHtml(url, target, success, error) {
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
311
    var xhttp;
312
313
    var el = new E(target);
314
    var elmnt = el.first();
315
316
    if (typeof success !== 'function') {
317
        success = function () {
318
            console.log('includeHtml success', "included");
319
        }
320
    }
321
322
    if (typeof error !== 'function') {
323
        error = function () {
324
            console.log('includeHtml error', "Page not found.");
325
        }
326
    }
327
    console.log('includeHtml url', url);
328
329
    if (url) {
330
        /* Make an HTTP request using the attribute value as the url name: */
331
        xhttp = new XMLHttpRequest();
332
        xhttp.onreadystatechange = function () {
333
            console.log('includeHtml el_id', target);
334
335
            if (this.readyState == 4) {
336
                if (this.status == 200) {
337
338
                    elmnt.insertAdjacentHTML('beforeend', this.responseText);
339
340
                    success(this);
341
                }
342
                if (this.status == 404) {
343
                    elmnt.innerHTML = "includeHtml Page not found.";
344
                    error(this);
345
                }
346
                /* Remove the attribute, and call this function once more: */
347
                // includeHtml(url, success, error);
348
            }
349
        }
350
        xhttp.open("GET", url, true);
351
        xhttp.send();
352
        /* Exit the function: */
353
        return this;
354
    }
355
    return false;
356
357
}
358
359
// function includeImage(url, target, success, error) {
360
361
function includeImage(url, target) {
362
    console.log('includeImg url: ', url);
363
    var el = new E(target);
364
    var elmnt = el.first();
365
366
    let img = new Image;
367
    img.onload = function () {
368
        console.log("includeImg onload: ", url);
369
        elmnt.appendChild(img);
370
    };
371
372
    return img.src = url;  // erst nach dem Event Listener!
373
374
}
375
376
377
var time = Date.now || function () {
378
    return +new Date;
379
};
380
381
382 View Code Duplication
var E = function (selector, area, error, success) {
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
383
    this.cfg = {};
384
    this.cfg.area = document;
385
    this.cfg.selector = selector;
386
    this.cfg.exist = false;
387
388
    this.success = function (elem) {
389
        console.log("Element elem: ", elem);
390
    };
391
392
    this.error = function (elem) {
393
        console.error("! Element elem: ", elem);
394
    };
395
396
    if (typeof success === 'function') {
397
        this.success = success;
398
    }
399
400
    if (typeof error === 'function') {
401
        this.error = error;
402
    }
403
404
405
    var self = this;
406
407
    this.selector = function (selector) {
408
        self.cfg.selector = selector;
409
        return this;
410
    }
411
412
    this.first = function (error, success) {
413
        if (typeof success !== 'function') {
414
            success = self.success;
415
        }
416
        if (typeof error !== 'function') {
417
            error = self.error;
418
        }
419
420
        const elem = document.querySelector(self.cfg.selector);
421
422
        console.log('E first self.cfg.selector', self.cfg.selector);
423
        console.log('E first elem', elem);
424
425
        if (elem !== null) {
426
            self.cfg.exist = true;
427
            success(elem);
428
            return elem;
429
        } else {
430
            self.cfg.exist = false;
431
            error();
432
        }
433
434
        return elem;
435
    }
436
437
    this.all = function (error, success) {
438
        if (typeof success !== 'function') {
439
            success = self.success;
440
        }
441
        if (typeof error !== 'function') {
442
            error = self.error;
443
        }
444
445
        const elem = document.querySelectorAll(self.cfg.selector);
446
447
        console.log('E all self.cfg.selector', self.cfg.selector);
448
        console.log('E all elem', elem);
449
450
        if (elem !== null) {
451
            self.cfg.exist = true;
452
            success(elem);
453
        } else {
454
            self.cfg.exist = false;
455
            error(elem);
456
        }
457
458
        return elem;
459
    }
460
};