@lmjs/core 1.0.7 → 2.0.2

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.
package/src/lstnrs.js ADDED
@@ -0,0 +1,1409 @@
1
+ /**************************************/
2
+ /****** START GLOBAL EVENTS LISTENERS */
3
+ /**************************************/
4
+
5
+ var _navT = 0;
6
+ var _nav = false;
7
+ var _pbc;
8
+ var _vuid = {};
9
+ $("body").on("click touch tap", function (e) {
10
+ if (!_pbc) _pbc = new AudioContext();
11
+ if (_pbc.state == "suspended") {
12
+ _pbc.resume().then(() => { });
13
+ }
14
+ });
15
+ $("body").on("click touch", ".navTgl", function (e) {
16
+ _nav = false;
17
+ clearTimeout(_navT);
18
+ if ($("nav").hasClass("nav-opened")) {
19
+ $("nav").removeClass("nav-opened");
20
+ $("body").removeClass("nav-opened");
21
+ } else {
22
+ $("nav").addClass("nav-opened");
23
+ $("body").addClass("nav-opened");
24
+ _navT = setTimeout(function () {
25
+ _nav = true;
26
+ }, 20);
27
+ }
28
+ e.stopPropagation();
29
+ });
30
+
31
+ $(document).keydown(function (e) {
32
+ var keyCode = e.keyCode || e.which;
33
+ if (keyCode == 27) {
34
+ e.preventDefault();
35
+ e.stopPropagation();
36
+ if ($("[loader]").length) {
37
+ if (_loader.options.Dismissible) _loader.hide();
38
+ } else if (_nav) {
39
+ $("nav").removeClass("nav-opened");
40
+ $("body").removeClass("nav-opened");
41
+ _nav = false;
42
+ } else {
43
+ if ($("popup").length && $("droplet").length) {
44
+ $("droplet")
45
+ .removeClass("is-visible")
46
+ .each(function () {
47
+ var p = $(this);
48
+ setTimeout(function () {
49
+ p.remove();
50
+ }, 150);
51
+ });
52
+ } else if ($("popup").length) {
53
+ $("[close-modal]:last").click();
54
+ } else {
55
+ $("body").css({ overflow: "visible" });
56
+ $("droplet")
57
+ .removeClass("is-visible")
58
+ .each(function () {
59
+ var p = $(this);
60
+ setTimeout(function () {
61
+ p.remove();
62
+ }, 150);
63
+ });
64
+ }
65
+ }
66
+ }
67
+ });
68
+
69
+ _csswrk.on('css-ready', function (e) {
70
+ let data = e.originalEvent.data;
71
+ _vuid[data.key].resolve(data.csses);
72
+ });
73
+
74
+ _upwrk.on('message', function (e) {
75
+ let data = e.originalEvent.data;
76
+ });
77
+ _upwrk.on('files-added', function (e) {
78
+ let data = e.originalEvent.data;
79
+ processEv(e, $('[upid="' + data.upid + '"]'), "files-added", data.files, data.newfiles);
80
+ });
81
+ _upwrk.on('queue-changed', function (e) {
82
+ let data = e.originalEvent.data;
83
+ processEv(e, $('[upid="' + data.upid + '"]'), "queue-changed", data.files);
84
+ });
85
+ _upwrk.on('file-removed', function (e) {
86
+ let data = e.originalEvent.data;
87
+ processEv(e, $('[upid="' + data.upid + '"]'), "file-removed", data.files, data.removedfile);
88
+ });
89
+ _upwrk.on('upload-start', function (e) {
90
+ let data = e.originalEvent.data;
91
+ processEv(e, $('[upid="' + data.upid + '"]'), "upload-start", data.files);
92
+ });
93
+ _upwrk.on('file-uploaded', function (e) {
94
+ let data = e.originalEvent.data;
95
+ processEv(e, $('[upid="' + data.upid + '"]'), "file-uploaded", data.files, data.file);
96
+ });
97
+ _upwrk.on('upload-progress', function (e) {
98
+ let data = e.originalEvent.data;
99
+ processEv(e, $('[upid="' + data.upid + '"]'), "upload-progress", data.files);
100
+ });
101
+ _upwrk.on('upload-complete', function (e) {
102
+ let data = e.originalEvent.data;
103
+ processEv(e, $('[upid="' + data.upid + '"]'), "upload-complete", data.files);
104
+ });
105
+ _upwrk.on('upload-stop', function (e) {
106
+ let data = e.originalEvent.data;
107
+ processEv(e, $('[upid="' + data.upid + '"]'), "upload-stop", data.files);
108
+ });
109
+ _upwrk.on('queue-empty', function (e) {
110
+ let data = e.originalEvent.data;
111
+ processEv(e, $('[upid="' + data.upid + '"]'), "queue-empty");
112
+ });
113
+
114
+
115
+ $.fn.extend({
116
+ startUpload: function () {
117
+ if (this.hasAttr('up')) {
118
+ _upwrk.trigger('start-upload', {
119
+ "upid": this.attr('upid')
120
+ });
121
+ }
122
+ return this;
123
+ },
124
+ stopUpload: function () {
125
+ if (this.hasAttr('up')) {
126
+ _upwrk.trigger('stop-upload', {
127
+ "upid": this.attr('upid')
128
+ });
129
+ }
130
+ return this;
131
+ },
132
+ removeFile: function (id) {
133
+ if (this.hasAttr('up')) {
134
+ _upwrk.trigger('remove-file', {
135
+ "upid": this.attr('upid'),
136
+ "id": id
137
+ });
138
+ }
139
+ return this;
140
+ }
141
+ });
142
+
143
+
144
+ $("body").on("FilesAdded", "[up]", function (e, files) {
145
+ let t = $(this);
146
+ var size = t.attr('data-mxs') ? t.attr('data-mxs') : '10mb';
147
+ //TODO: Filter + Reset File Input
148
+ _upwrk.trigger('handle-files', {
149
+ "upid": t.attr('upid'),
150
+ "files": files
151
+ });
152
+ processEv(e, t, "browse-files", files);
153
+ });
154
+
155
+ $("body").on("dragover", "[up] [drpzn]", function (e) {
156
+ e.stopPropagation();
157
+ e.preventDefault();
158
+ let t = $(this).closest('[up]');
159
+ $(this).addClass('dragover');
160
+ e.originalEvent.dataTransfer.dropEffect = 'copy';
161
+ return false;
162
+ });
163
+ $("body").on("dragleave", "[up] [drpzn]", function (e) {
164
+ e.stopPropagation();
165
+ e.preventDefault();
166
+ $(this).removeClass('dragover');
167
+ });
168
+ $("body").on("drop", "[up] [drpzn]", function (e) {
169
+ e.stopPropagation();
170
+ e.preventDefault();
171
+ var files = e.originalEvent.dataTransfer?.files || e.target?.files;
172
+ let t = $(this).closest('[up]');
173
+ $(this).removeClass('dragover');
174
+ t.trigger('FilesAdded', [files]);
175
+ return false;
176
+ });
177
+ $("body").on("click", "[up] [browse]", function (e) {
178
+ e.stopPropagation();
179
+ e.preventDefault();
180
+ let t = $(this).closest('[up]');
181
+ t.find("[files]").click();
182
+ });
183
+ $("body").on("change", "[up] [files]", function (e) {
184
+ e.stopPropagation();
185
+ e.preventDefault();
186
+ var files = e.originalEvent.dataTransfer?.files || e.target?.files;
187
+ let t = $(this).closest('[up]');
188
+ t.trigger('FilesAdded', [files]);
189
+ });
190
+
191
+ $("body").on("click touch", "[ctc]", function (ev) {
192
+ var el = $(this);
193
+ var ctc = el.attr("ctc");
194
+ var selector = el;
195
+ if (ctc.indexOf("el.") !== -1) {
196
+ selector = eval(ctc);
197
+ } else if (ctc != "") selector = $(ctc);
198
+
199
+ if (!navigator.clipboard) {
200
+ var temp = $("<textarea class='pf' style='left: -40%;' />");
201
+ $("body").append(temp);
202
+ temp.val(selector.text()).select();
203
+ document.execCommand("copy");
204
+ temp.remove();
205
+ } else {
206
+ navigator.clipboard.writeText(selector.text()).then(
207
+ function () {
208
+ // console.log("Async: Copying to clipboard was successful!");
209
+ },
210
+ function (err) {
211
+ // console.error("Async: Could not copy text: ", err);
212
+ var temp = $("<textarea class='pf' style='left: -40%;' />");
213
+ $("body").append(temp);
214
+ temp.val(selector.text()).select();
215
+ document.execCommand("copy");
216
+ temp.remove();
217
+ }
218
+ );
219
+ }
220
+
221
+ if (el.hasAttr("stop")) ev.stopPropagation();
222
+ });
223
+
224
+ $("body").on("click touch", "[scroll-left]", function (ev) {
225
+ var _el = $(this);
226
+ var _wrap = _el.closest("[wrapper]");
227
+ if (_wrap.length) {
228
+ var _p = _wrap.find("div").first();
229
+ _p.stop().animate(
230
+ { scrollLeft: _p.scrollLeft() - 100 },
231
+ {
232
+ duration: 200,
233
+ easing: "easeOutCirc",
234
+ complete: function () { },
235
+ }
236
+ );
237
+ }
238
+ });
239
+
240
+ $("body").on("click touch", "[scroll-right]", function (ev) {
241
+ var _el = $(this);
242
+ var _wrap = _el.closest("[wrapper]");
243
+ if (_wrap.length) {
244
+ var _p = _wrap.find("div").first();
245
+ _p.stop().animate(
246
+ { scrollLeft: _p.scrollLeft() + 100 },
247
+ {
248
+ duration: 200,
249
+ easing: "easeOutCirc",
250
+ complete: function () { },
251
+ }
252
+ );
253
+ }
254
+ });
255
+
256
+ $("body").on("click touch", "[scroll-top]", function (ev) {
257
+ var _el = $(this);
258
+ var _wrap = _el.closest("[wrapper]");
259
+ if (_wrap.length) {
260
+ var _p = _wrap.find("div").first();
261
+ _p.stop().animate(
262
+ { scrollTop: _p.scrollTop() - 100 },
263
+ {
264
+ duration: 200,
265
+ easing: "easeOutCirc",
266
+ complete: function () { },
267
+ }
268
+ );
269
+ }
270
+ });
271
+
272
+ $("body").on("click touch", "[scroll-bottom]", function (ev) {
273
+ var _el = $(this);
274
+ var _wrap = _el.closest("[wrapper]");
275
+ if (_wrap.length) {
276
+ var _p = _wrap.find("div").first();
277
+ _p.stop().animate(
278
+ { scrollTop: _p.scrollTop() + 100 },
279
+ {
280
+ duration: 200,
281
+ easing: "easeOutCirc",
282
+ complete: function () { },
283
+ }
284
+ );
285
+ }
286
+ });
287
+
288
+ function bs(t) {
289
+ $("body").css({ overflow: t ? "visible" : "hidden" });
290
+ }
291
+
292
+ $("body").on("open-modal", "[modal]", function (ev) {
293
+ var el = $(this);
294
+ var n = popups.modals.length;
295
+ var _view = el.attr("modal");
296
+ bs();
297
+
298
+ var va = el.attr("modal-align") ?? "center middle";
299
+ var padding = el.attr("modal-spacing") ?? "p10";
300
+ var ov = el.attr("modal-ov") ?? "bgb20";
301
+ va = va.split(" ");
302
+ if (va.length == 2) {
303
+ va = {
304
+ h: ["left", "center", "right"].indexOf(va[0]) >= 0 ? va[0] : "center",
305
+ v:
306
+ ["top", "center", "middle", "bottom"].indexOf(va[1]) >= 0
307
+ ? va[1]
308
+ : "middle",
309
+ };
310
+ } else {
311
+ va = {
312
+ h: "center",
313
+ v: "middle",
314
+ };
315
+ setError(null, "Modal align should be modal-align='vertical horizontal'.");
316
+ }
317
+
318
+ if (!el.hasAttr("data-modal")) {
319
+ var selector = "modals_" + n;
320
+
321
+ var popup =
322
+ '<popup class="ov pf [c] z10000">' +
323
+ '<pop-o class="ov pf [ov]"></pop-o>' +
324
+ '<tbl_nm fixed class="hv100">' +
325
+ '<cl class="[va] [ta] [p]">' +
326
+ "<pop-c>" +
327
+ '<pop-x close-modal data-dismiss="modal" aria-label="Close"><span aria-hidden="true" class="cc c">&times;</span></pop-x>' +
328
+ "<pop-h><pop-t>[t]</pop-t><pop-d>[d]</pop-d></pop-h>" +
329
+ "<pop-b>[b]</pop-b>" +
330
+ "<pop-f>[f]</pop-f>" +
331
+ "</pop-c>" +
332
+ "</cl>" +
333
+ "</tbl_nm>" +
334
+ "</popup>";
335
+
336
+ var verticalAlign =
337
+ va["v"] == "center" || va["v"] == "middle"
338
+ ? "vm"
339
+ : va["v"] == "top"
340
+ ? "vt"
341
+ : "vb";
342
+ var textAlign = va["h"] == "center" ? "c" : va["h"] == "left" ? "l" : "r";
343
+
344
+ popup = popup
345
+ .split("[va]")
346
+ .join(verticalAlign)
347
+ .split("[p]")
348
+ .join(padding)
349
+ .split("[ta]")
350
+ .join(textAlign)
351
+ .split("[ov]")
352
+ .join(ov);
353
+ let attrsData = {
354
+ t: el.attr("modal-title") ?? "New Modal",
355
+ d: el.attr("modal-description") ?? "",
356
+ c: el.attr("modal-class") ?? "",
357
+ };
358
+ if (_view != "") {
359
+ popup = popup.split("[t]").join(attrsData.t);
360
+ popup = popup.split("[d]").join(attrsData.d);
361
+ popup = popup
362
+ .split("[b]")
363
+ .join('<div for-modal="' + selector + "\" view='" + _view + "'></div>");
364
+ popup = popup.split("[f]").join("");
365
+ } else {
366
+ var c = getComData(el);
367
+ if (!c) {
368
+ if (el.find("modal").length > 0) {
369
+ var modalData = el.find("modal:first");
370
+ var c = getComData(modalData, true);
371
+ }
372
+ }
373
+ if (c) {
374
+ if (c.Title) popup = popup.split("[t]").join(c.Title ?? attrsData.t);
375
+ popup = popup.split("[d]").join(c.Description ?? attrsData.d);
376
+ popup = popup.split("[b]").join(c.Body ?? "");
377
+ popup = popup.split("[f]").join(c.Footer ?? "");
378
+ } else {
379
+ popup = popup.split("[t]").join(attrsData.t);
380
+ popup = popup.split("[d]").join(attrsData.d);
381
+ popup = popup.split("[b]").join("");
382
+ popup = popup.split("[f]").join("");
383
+ }
384
+ }
385
+ popup = popup.split("[c]").join(attrsData.c);
386
+ var newModal = $(popup);
387
+ newModal.attr("id", selector).appendTo("body");
388
+ // el.attach('Open');
389
+ let modal = $("#" + selector);
390
+
391
+ el.trigger("modal-open", [modal]);
392
+
393
+ modal.data("props", el.data("props"));
394
+
395
+ modal
396
+ .addClass("modal-open")
397
+ .delay(10)
398
+ .queue(function (next) {
399
+ $(this).addClass("in");
400
+ next();
401
+ });
402
+ $(this).attr("data-modal", selector);
403
+ popups["modals"].push(newModal.get(0));
404
+
405
+ // el.trigger('Open', [$("#" + selector), el, c]);
406
+
407
+ // if (el.attr('modal-open')) {
408
+ // var mo = el.attr('modal-open');
409
+ // if (typeof window[mo] === "function") {
410
+ // window[mo]($("#" + selector), el, c);
411
+ // }
412
+ // }
413
+
414
+ globalWatch();
415
+ }
416
+
417
+ if (el.hasAttr("stop")) ev.stopPropagation();
418
+ });
419
+
420
+ $("body").on("click touch", "[modal]", function (ev) {
421
+ let modalTriggered = false;
422
+ var obj = {};
423
+ $.each($(this)[0].attributes, function () {
424
+ if (this.value.toLowerCase() == "openmodal") {
425
+ modalTriggered = true;
426
+ return;
427
+ }
428
+ obj[this.name] = this.value;
429
+ });
430
+ if (!modalTriggered) {
431
+ $(this).trigger("open-modal");
432
+ }
433
+ });
434
+
435
+ $("body").on("modal-close", "[\\@modal-close]", function (ev, modal, cb) {
436
+ let el = $(this),
437
+ _v = el.attr("@modal-close");
438
+ let props = modal.data("props");
439
+ let _fn = _v.split("(")[0];
440
+ try {
441
+ if (typeof window[_v] === "function") cb(window[_fn](ev, el, modal, props));
442
+ else {
443
+ let _eva = eval(_v);
444
+ cb(_eva);
445
+ }
446
+ } catch (e) {
447
+ cb();
448
+ }
449
+
450
+ // let el = $(this),
451
+ // _v = el.attr("@modal-close"),
452
+ // _bv = el.attr("@modal-beforeclose");
453
+
454
+ // let props = modal.data("props");
455
+ // let _fn = _v.split("(")[0];
456
+
457
+ // try {
458
+ // let ex = true;
459
+ // if (_bv) {
460
+ // let r = true;
461
+ // let _bfn = _bv.split("(")[0];
462
+ // if (typeof window[_bv] === "function") r = cb(window[_bfn](ev, el, modal, props));
463
+ // else {
464
+ // let _eva = eval(_bv);
465
+ // r = cb(_eva);
466
+ // }
467
+ // ex = r;
468
+ // }
469
+ // if (ex) {
470
+ // if (typeof window[_v] === "function") cb(window[_fn](ev, el, modal, props));
471
+ // else {
472
+ // let _eva = eval(_v);
473
+ // cb(_eva);
474
+ // }
475
+ // }
476
+ // } catch (e) {
477
+ // cb();
478
+ // }
479
+ });
480
+
481
+ $("body").on("modal-open", "[\\@modal-open]", function (ev, modal) {
482
+ let el = $(this),
483
+ _v = el.attr("@modal-open");
484
+ let _fn = _v.split("(")[0];
485
+ try {
486
+ if (typeof window[_v] === "function") {
487
+ var _data = window[_fn](ev, el, modal);
488
+ modal.data("props", _data);
489
+ } else {
490
+ let _eva = eval(_v);
491
+ modal.data("props", _eva);
492
+ }
493
+ } catch (e) { }
494
+ });
495
+
496
+ function evalEvAttr(_v, ev, el, n, arg1, arg2, arg3) {
497
+ let _fn = _v.split("(")[0];
498
+ try {
499
+ // 2026-09-17: prefer the triggering element's OWN rendering instance's
500
+ // function registry (._ownerRe.view.fns, set up by walk.js's
501
+ // _fnRegisterStatement() + _re.js's createEl()/renderHST()) over the
502
+ // plain `window[_fn]` lookup below — real bug found and fixed: every
503
+ // mounted instance of the same subview declaring a same-named handler
504
+ // (e.g. multiple `<div view="widgets/card">` each with their own
505
+ // `function bump(){}`) used to collide on one global, since a plain
506
+ // <script> tag's top-level function declarations all write to the
507
+ // same `window` object — window.bump silently became whichever
508
+ // instance's script last ran, so every instance's @click fired THAT
509
+ // one instance's handler regardless of which was actually clicked.
510
+ // Only applies to the plain-name form (`_v === _fn`, no `(...)`) —
511
+ // a parameterized attribute like `@click="fn(x)"` already falls
512
+ // through to the eval() branch below unchanged, exactly as before.
513
+ let _rawEl = el[0];
514
+ let _ownerFns = _rawEl && _rawEl._ownerRe && _rawEl._ownerRe.view && _rawEl._ownerRe.view.fns;
515
+ let _ownFn = (_v === _fn && _ownerFns && typeof _ownerFns[_fn] === "function") ? _ownerFns[_fn] : null;
516
+ if (_ownFn || typeof window[_v] === "function") {
517
+ ev["cType"] = n;
518
+ let _handler = _ownFn || window[_fn];
519
+ var _data = arg3 ? _handler(ev, el, arg1, arg2, arg3) : (arg2 ? _handler(ev, el, arg1, arg2) : (arg1 ? _handler(ev, el, arg1) : _handler(ev, el)));
520
+ return _data;
521
+ } else {
522
+ let _eva = eval(_v);
523
+ return _eva;
524
+ }
525
+ } catch (e) {
526
+ return false;
527
+ }
528
+ }
529
+
530
+ function processEv(ev, el, n, arg1, arg2, arg3) {
531
+ if (el.attr("stop")) ev.stopPropagation();
532
+ if (n == "focusin") n = "focus";
533
+ else if (n == "focusout") n = "blur";
534
+ if (!el.hasAttr("@" + n)) return;
535
+ if (el.hasAttr("@before-" + n)) {
536
+ if (!evalEvAttr(el.attr("@before-" + n), ev, el, n, arg1, arg2, arg3)) return;
537
+ }
538
+ let _v = el.attr("@" + n);
539
+ if (_v.toLowerCase() == "openmodal") {
540
+ el.trigger("open-modal");
541
+ return;
542
+ }
543
+ evalEvAttr(_v, ev, el, n, arg1, arg2, arg3);
544
+ }
545
+
546
+ $("body").on("click touch", "[ci]", function (ev) {
547
+ var el = $(this);
548
+ var f = el.closest("form");
549
+ var inputs = $("");
550
+
551
+ if (el.attr("ci") != "") {
552
+ let ci = el.attr("ci").split(",");
553
+ for (let index = 0; index < ci.length; index++) {
554
+ const selector = ci[index];
555
+ inputs = inputs.add(f.find(selector));
556
+ }
557
+ } else {
558
+ inputs = f.find(
559
+ $("input[\\:required],select[\\:required],textarea[\\:required]")
560
+ );
561
+ }
562
+
563
+ f.removeClass("validation-error");
564
+ for (var i = 0; i < inputs.length; i++) {
565
+ if (!checkFormInputs(f, inputs[i])) {
566
+ f.addClass("validation-error");
567
+ break;
568
+ }
569
+ }
570
+ });
571
+
572
+ $("body").on("doubletap", "[\\@dblclick]", function (ev) {
573
+ processEv(ev, $(this), "dblclick");
574
+ });
575
+
576
+ $("body").on("doubletap", "[\\@dbltap]", function (ev) {
577
+ processEv(ev, $(this), "dbltap");
578
+ });
579
+
580
+ $("body").on("singletap", "[\\@singleclick]", function (ev) {
581
+ processEv(ev, $(this), "singleclick");
582
+ });
583
+
584
+ $("body").on("singletap", "[\\@singletap]", function (ev) {
585
+ processEv(ev, $(this), "singletap");
586
+ });
587
+
588
+ $("body").on("taphold", "[\\@taphold]", function (ev) {
589
+ processEv(ev, $(this), "taphold");
590
+ });
591
+
592
+ $("body").on("taphold", "[\\@clickhold]", function (ev) {
593
+ processEv(ev, $(this), "clickhold");
594
+ });
595
+
596
+ $("body").on("click touch", "[\\@click]", function (ev) {
597
+ processEv(ev, $(this), "click");
598
+ });
599
+
600
+ $("body").on("tap", "[\\@tap]", function (ev) {
601
+ processEv(ev, $(this), "click touch");
602
+ });
603
+
604
+ $("body").on("tap2", "[\\@click2]", function (ev) {
605
+ processEv(ev, $(this), "click2");
606
+ });
607
+
608
+ $("body").on("tap2", "[\\@tap2]", function (ev) {
609
+ processEv(ev, $(this), "tap2");
610
+ });
611
+
612
+ $("body").on("tap2hold", "[\\@click2hold]", function (ev) {
613
+ processEv(ev, $(this), "click2hold");
614
+ });
615
+
616
+ $("body").on("tap2hold", "[\\@tap2hold]", function (ev) {
617
+ processEv(ev, $(this), "tap2hold");
618
+ });
619
+
620
+ $("body").on("orientationchange", "[\\@orientationchange]", function (ev) {
621
+ processEv(ev, $(this), "orientationchange");
622
+ });
623
+
624
+ $("body").on(
625
+ "swipe swipeleft swipedown swipeend swipeup swiperight",
626
+ "[\\@swipe],[\\@swipe-down],[\\@swipe-up],[\\@swipe-left],[\\@swipe-right],[\\@swipe-end]",
627
+ function (ev) {
628
+ let _v =
629
+ ev.type.length == 5 ? "swipe" : ev.type.split("swipe").join("swipe-");
630
+ processEv(ev, $(this), _v);
631
+ }
632
+ );
633
+
634
+ $("body").on("mouseover", "[\\@mouse-over]", function (ev) {
635
+ processEv(ev, $(this), "mouse-over");
636
+ });
637
+
638
+ $("body").on("mousedown touchstart", "[\\@mouse-down]", function (ev) {
639
+ processEv(ev, $(this), "mouse-down");
640
+ });
641
+
642
+ $("body").on("tapstart", "[\\@tap-start]", function (ev) {
643
+ processEv(ev, $(this), "tap-start");
644
+ });
645
+
646
+ $("body").on("tapend", "[\\@tap-end]", function (ev) {
647
+ processEv(ev, $(this), "tap-end");
648
+ });
649
+
650
+ $("body").on("tapmove", "[\\@tap-move]", function (ev) {
651
+ processEv(ev, $(this), "tap-move");
652
+ });
653
+
654
+ $("body").on("mouseup touchend", "[\\@mouse-up]", function (ev) {
655
+ processEv(ev, $(this), "mouse-up");
656
+ });
657
+
658
+ $("body").on("mouseout", "[\\@mouse-out]", function (ev) {
659
+ processEv(ev, $(this), "mouse-out");
660
+ });
661
+
662
+ $("body").on("mouseenter touchmove", "[\\:hover]", function (ev) {
663
+ let _s = $(this).attr(":hover");
664
+ $(this).attr(
665
+ "style",
666
+ ($(this).hasAttr("style") ? $(this).attr("style").rtrim(";") + ";" : "") +
667
+ _s
668
+ );
669
+ });
670
+
671
+ $("body").on("mouseleave touchend", "[\\:hover]", function (ev) {
672
+ let _s = $(this).attr(":hover");
673
+ $(this).attr("style", $(this).attr("style").split(_s).join(""));
674
+ });
675
+
676
+ $("body").on("mouseenter", "[\\@mouse-enter]", function (ev) {
677
+ processEv(ev, $(this), "mouse-enter");
678
+ });
679
+
680
+ $("body").on("mouseleave", "[\\@mouse-leave]", function (ev) {
681
+ processEv(ev, $(this), "mouse-leave");
682
+ });
683
+
684
+ $("body").on("mousemove", "[\\@mouse-move]", function (ev) {
685
+ processEv(ev, $(this), "mouse-move");
686
+ });
687
+
688
+ $("body").on("touchmove", "[\\@mouse-move]", function (ev) {
689
+ processEv(ev, $(this), "mouse-move");
690
+ });
691
+
692
+ $("body").on("sort", "[\\@sort]", function (ev, ui) {
693
+ processEv(ev, $(this), "sort", ui);
694
+ });
695
+
696
+ $("body").on("sortupdate", "[\\@sort-update]", function (ev, ui) {
697
+ processEv(ev, $(this), "sort-update", ui);
698
+ });
699
+
700
+ $("body").on("sortchange", "[\\@sort-change]", function (ev, ui) {
701
+ processEv(ev, $(this), "sort-change", ui);
702
+ });
703
+
704
+ $("body").on("sortstart", "[\\@sort-start]", function (ev, ui) {
705
+ processEv(ev, $(this), "sort-start", ui);
706
+ });
707
+
708
+ $("body").on("sortstop", "[\\@sort-stop]", function (ev, ui) {
709
+ processEv(ev, $(this), "sort-stop", ui);
710
+ });
711
+
712
+ $("body").on("sortbeforestop", "[\\@sort-before-stop]", function (ev, ui) {
713
+ processEv(ev, $(this), "sort-before-stop", ui);
714
+ });
715
+
716
+ $("body").on("drag", "[\\@drag]", function (ev, ui) {
717
+ processEv(ev, $(this), "drag", ui);
718
+ });
719
+
720
+ $("body").on("dragstart", "[\\@drag-start]", function (ev, ui) {
721
+ processEv(ev, $(this), "drag-start", ui);
722
+ });
723
+
724
+ $("body").on("dragstop", "[\\@drag-stop]", function (ev, ui) {
725
+ processEv(ev, $(this), "drag-stop", ui);
726
+ });
727
+
728
+ $("body").on("drop", "[\\@drop]", function (ev, ui) {
729
+ processEv(ev, $(this), "drop", ui);
730
+ });
731
+
732
+ $("body").on("clear", "[sl]", function (ev, ui) {
733
+ let t = $(this);
734
+ t.empty().change();
735
+ try {
736
+ let opts = t.data("select2")?.options?.options;
737
+ opts.data = null;
738
+ t.select2(opts);
739
+ } catch (e) {
740
+ cl(e);
741
+ }
742
+ });
743
+
744
+ $("body").on(
745
+ "change blur focus keyup keydown input",
746
+ "[\\@input],[\\@change],[\\@blur],[\\@focus],[\\@keyup],[\\@keydown]",
747
+ function (ev) {
748
+ processEv(ev, $(this), ev.type);
749
+ }
750
+ );
751
+
752
+ $("body").on("click touch", "[close-modal]", function (ev) {
753
+ var el = $(this);
754
+ var modal = el.closest("popup");
755
+ var id = modal.attr("id");
756
+ var element_to_remove = $("#" + id).get(0);
757
+ var index = $.inArray(element_to_remove, popups.modals);
758
+ var modalOwner = $("[modal][data-modal=" + id + "]");
759
+ if (el.attr("stop")) ev.stopPropagation();
760
+ ev.preventDefault();
761
+ if (modalOwner.hasAttr("@modal-beforeclose")) {
762
+ cl("kuku");
763
+ try {
764
+ let _bv = modalOwner.attr("@modal-beforeclose");
765
+ let _fn = _bv.split("(")[0];
766
+ if (typeof window[_bv] === "function") {
767
+ cl("sasha");
768
+ if (window[_fn](ev, el, modalOwner) == false) return;
769
+ else {
770
+ cl("llll");
771
+ let _eva = eval(_bv);
772
+ if (_eva == false) return;
773
+ cl("khaaawwwww");
774
+ }
775
+ }
776
+ } catch (e) {
777
+ cl("haha");
778
+ cl(e);
779
+ }
780
+ }
781
+ if (modalOwner.hasAttr("@modal-close")) {
782
+ modalOwner.trigger("modal-close", [
783
+ modal,
784
+ function (res) {
785
+ if (res === false) return;
786
+ $(
787
+ ".select2-container:not(.select2),.colorpicker.colorpicker-visible"
788
+ ).remove();
789
+ if (index > -1) {
790
+ $("[modal][data-modal=" + id + "]").removeAttr("data-modal");
791
+ modal
792
+ .removeClass("in")
793
+ .delay(150)
794
+ .queue(function (next) {
795
+ $(this).remove();
796
+ if (popups.modals.length == 0) bs(true);
797
+ next();
798
+ });
799
+ popups.modals.splice(index, 1);
800
+ }
801
+ },
802
+ ]);
803
+ } else {
804
+ $(
805
+ ".select2-container:not(.select2),.colorpicker.colorpicker-visible"
806
+ ).remove();
807
+ if (index > -1) {
808
+ $("[modal][data-modal=" + id + "]").removeAttr("data-modal");
809
+ modal
810
+ .removeClass("in")
811
+ .delay(150)
812
+ .queue(function (next) {
813
+ $(this).remove();
814
+ if (popups.modals.length == 0) bs(true);
815
+ next();
816
+ });
817
+ popups.modals.splice(index, 1);
818
+ }
819
+ }
820
+ });
821
+
822
+ $("body").on("change keyup", "[password]", function (e) {
823
+ let el = $(this);
824
+ let lbl = el.closest("label");
825
+ let f = el.closest("form");
826
+ var v = $.trim($(this).val());
827
+ let allCls = "has-spaces weak strong very-strong medium";
828
+ let cls = passwordStrength(v);
829
+
830
+ el.removeClass(allCls).addClass(cls);
831
+ if (f.length) f.removeClass(allCls).addClass(cls);
832
+ if (lbl.length) lbl.removeClass(allCls).addClass(cls);
833
+
834
+ if (!$(this).next().hasClass("passStrength"))
835
+ $(this).after("<span class='passStrength'></span>");
836
+ $(this).parent().find(".passStrength").removeClass(allCls).addClass(cls);
837
+ });
838
+
839
+ $("body").on("change keyup", "[username]", function (e) {
840
+ var keyCode = e.keyCode || e.which;
841
+ if (
842
+ keyCode != 9 &&
843
+ keyCode != 16 &&
844
+ keyCode != 27 &&
845
+ keyCode != 93 &&
846
+ keyCode != 91 &&
847
+ keyCode != 17 &&
848
+ keyCode != 18
849
+ ) {
850
+ var el = $(this);
851
+ let f = el.closest("form");
852
+ checkFormInputs(f, el, true);
853
+ }
854
+ });
855
+
856
+ // ############################ FORM VALIDATION ############################
857
+ // >>>>>>>>>>>>>>>>>>>> Input on focus(typing in it) <<<<<<<<<<<<<<<<<<<<<<<
858
+ $("body").on(
859
+ "focus",
860
+ "input:not(.select2-search__field,.mobinit),textarea,select",
861
+ function (ev) {
862
+ var el = $(this);
863
+ var f = el.closest("form");
864
+ let lbl = el.closest("label");
865
+ if (f.length) f.addClass("focused");
866
+ if (lbl.length) lbl.addClass("focused");
867
+ el.parent().addClass("focused");
868
+ el.addClass("focused");
869
+ }
870
+ );
871
+ // >>>>>>>>>>>>>>>>>>>> Input on focus(typing in it) <<<<<<<<<<<<<<<<<<<<<<<
872
+
873
+ // >>>>>>>>>>>>>>>>> Input on blur(stopped typing in it and press out of it) <<<<<<<<<<<<<<<<<<<
874
+ $("body").on(
875
+ "blur",
876
+ "input:not(.select2-search__field,.mobinit),textarea,select",
877
+ function (ev) {
878
+ var el = $(this);
879
+ var f = el.closest("form");
880
+ if (f.length) f.removeClass("focused");
881
+ el.parent().removeClass("focused");
882
+ el.removeClass("focused");
883
+ }
884
+ );
885
+ // >>>>>>>>>>>>>>>>> Input on blur(stopped typing in it and press out of it) <<<<<<<<<<<<<<<<<<<
886
+
887
+ // >>>>>>>>>>>>>>>>> Input change(change the input value) blur(remove focus) focus(type it) keyup(remove finger) keydown(put finger) <<<<<<<<<<<<<<<<<<<
888
+ $("body").on(
889
+ "change keyup",
890
+ "input:not(.select2-search__field,.mobinit),textarea,select",
891
+ function (ev) {
892
+ var el = $(this);
893
+ let f = el.closest("form");
894
+ checkFormInputs(f, el, true);
895
+ }
896
+ );
897
+ // >>>>>>>>>>>>>>>>> Input change(change the input value) blur(remove focus) focus(type it) keyup(remove finger) keydown(put finger) <<<<<<<<<<<<<<<<<<<
898
+ // ############################ FORM VALIDATION ############################
899
+
900
+ var _lookups = 0;
901
+ var _debs = {};
902
+ var _proms = {};
903
+
904
+ $("body").on("change keyup", "[\\:lookup]", function (e) {
905
+ var keyCode = e.keyCode || e.which;
906
+ if (
907
+ keyCode != 9 &&
908
+ keyCode != 16 &&
909
+ keyCode != 27 &&
910
+ keyCode != 93 &&
911
+ keyCode != 91 &&
912
+ keyCode != 17 &&
913
+ keyCode != 18
914
+ ) {
915
+ var el = $(this);
916
+ if (!el.attr("data-i")) {
917
+ el.attr("data-i", _lookups);
918
+ _lookups++;
919
+ }
920
+ var key = "lu_" + el.attr("data-i");
921
+
922
+ clearTimeout(_debs[key]);
923
+ // $(this).removeClass('error success not-4-chars not-on-pattern');
924
+ // $(this).addClass('pending');
925
+ // var n = $(this).attr('data-n');
926
+ var v = $(this).val();
927
+ var callback = el.attr(":lookup-callback");
928
+ // var fi = $(this).closest('.fields');
929
+ if (!_proms.hasOwnProperty(key)) {
930
+ _proms[key] = defer();
931
+ _proms[key]
932
+ .then(function (val) {
933
+ el.addClass("finished").removeClass("pending");
934
+ })
935
+ .catch((reason) => {
936
+ el.addClass("pending").removeClass("finished");
937
+ });
938
+ } else {
939
+ // _proms[key].reject();
940
+ // _proms[key] = defer();
941
+ // _proms[key].then(function(val) {
942
+ // el.addClass('finished').removeClass('pending');
943
+ // }).catch((reason) => {
944
+ // el.addClass('pending').removeClass('finished');
945
+ // });
946
+ }
947
+ el.addClass("pending").removeClass("finished");
948
+
949
+ _debs[key] = setTimeout(function () {
950
+ _proms[key].reject();
951
+ _proms[key] = defer();
952
+ _proms[key]
953
+ .then(function (val) {
954
+ el.addClass("finished").removeClass("pending");
955
+ })
956
+ .catch((reason) => {
957
+ el.addClass("pending").removeClass("finished");
958
+ });
959
+ window[callback](v, _proms[key]);
960
+ }, 200);
961
+
962
+ // if (v.length < 4) {
963
+ // $(this).addClass('error not-4-chars');
964
+ // fi.addClass('error');
965
+ // $('[tip][for-username]').attr('tip', $(this).attr('data-4-chars')).click();
966
+ // return false;
967
+ // }
968
+
969
+ // prom.resolve();
970
+ // prom.reject();
971
+
972
+ // var k = v.match(/[A-Za-z]+(?!\.)(?!.*\.$)(?!.*?\.\.)[a-zA-Z0-9.]+[A-Za-z0-9]/);
973
+ // if (!k) {
974
+ // $(this).addClass('error not-on-pattern');
975
+ // fi.addClass('error');
976
+ // $('[tip][for-username]').attr('tip', $(this).attr('data-chars-not-allowed')).click();
977
+ // } else {
978
+ // if (k.input != k[0]) {
979
+ // $(this).addClass('error not-on-pattern');
980
+ // fi.addClass('error');
981
+ // $('[tip][for-username]').attr('tip', $(this).attr('data-chars-not-allowed')).click();
982
+ // return false;
983
+ // }
984
+ // }
985
+ }
986
+ });
987
+
988
+ // $('body').on('click touch', '[ci]', function (ev) {
989
+ // var el = $(this)
990
+ // var form = el.closest("form")
991
+ // var inputs = $("input[req]")
992
+ // for (var i = 0; i < inputs.length; i++) {
993
+ // if ($(inputs[i]).attr('type') === 'checkbox' || $(inputs[i]).attr('type') === 'radio') {
994
+ // if ($('input[req]:checked').length == 0 && $(inputs[i]).hasAttr('data-into')) {
995
+ // form.addClass("validation-error")
996
+ // if ($(inputs[i]).hasAttr('data-empty')) {
997
+ // $($(inputs[i]).attr('data-into')).text($(inputs[i]).attr('data-empty'))
998
+ // } else {
999
+ // alert("checkbox or radio don't have data-empty attribute")
1000
+ // }
1001
+ // }
1002
+ // } else {
1003
+ // if ($(inputs[i]).val().length === 0 && $(inputs[i]).hasAttr('data-into')) {
1004
+ // form.addClass("validation-error")
1005
+ // if ($(inputs[i]).hasAttr('data-empty')) {
1006
+ // $($(inputs[i]).attr('data-into')).text($(inputs[i]).attr('data-empty'))
1007
+ // } else {
1008
+ // console.log("place holder ", $(inputs[i]).attr('placeholder'))
1009
+ // alert($(inputs[i]).attr('placeholder'))
1010
+ // }
1011
+ // }
1012
+ // }
1013
+ // }
1014
+
1015
+ // });
1016
+
1017
+ // $('body').on('click touch', '[ci]', function (ev) {
1018
+
1019
+ // var el = $(this);
1020
+ // var f = el.closest('form');
1021
+
1022
+ // var inps = []; $(el.attr('ci')).each(function () { inps.push($(this).attr('name')); });
1023
+
1024
+ // for (var i = 0; i < inps.length; i++) {
1025
+ // var inp = f.find("input[name='" + inps[i] + "']");
1026
+ // var sel = f.find('select[name="' + inps[i] + '"]');
1027
+ // var txt = f.find('textarea[name="' + inps[i] + '"]');
1028
+ // var e = inp; if (!e.length) e = sel; if (!e.length) e = txt;
1029
+ // var or = e.attr('or');
1030
+
1031
+ // // alert(or);
1032
+
1033
+ // if (or != "") {
1034
+ // var inp2 = f.find("input[name='" + or + "']");
1035
+ // var sel2 = f.find('select[name="' + or + '"]');
1036
+ // var txt2 = f.find('textarea[name="' + or + '"]');
1037
+ // var or = inp2; if (!or.length) or = sel2; if (!or.length) or = txt2;
1038
+ // }
1039
+
1040
+ // // alert(or.val());
1041
+
1042
+ // if (e.is(':checkbox') || e.is(':radio')) {
1043
+ // if (!e.is(":checked")) {
1044
+ // if (or.length) {
1045
+ // if (!or.is(":checked")) {
1046
+ // alert(e.attr('placeholder') + ' or ' + or.attr('placeholder'));
1047
+ // e.addClass('error');
1048
+ // e.focus();
1049
+ // ev.preventDefault();
1050
+ // ev.stopPropagation();
1051
+ // return false;
1052
+ // }
1053
+ // } else {
1054
+ // alert(e.attr('placeholder'));
1055
+ // e.addClass('error');
1056
+ // e.focus();
1057
+ // ev.preventDefault();
1058
+ // ev.stopPropagation();
1059
+ // return false;
1060
+ // }
1061
+ // }
1062
+ // } else {
1063
+ // if ($.trim(e.val()).length == 0) {
1064
+ // if (or.length) {
1065
+ // if ($.trim(or.val()).length == 0) {
1066
+ // alert(e.attr('placeholder') + ' or ' + or.attr('placeholder'));
1067
+ // e.addClass('error');
1068
+ // e.focus();
1069
+ // ev.preventDefault();
1070
+ // ev.stopPropagation();
1071
+ // return false;
1072
+ // }
1073
+ // } else {
1074
+ // if (e.attr('data-into')) {
1075
+ // $(e.attr('data-into')).html(e.attr('data-empty') ?? e.attr('placeholder'))
1076
+ // } else {
1077
+ // alert(e.attr('placeholder'));
1078
+ // }
1079
+ // e.addClass('error');
1080
+ // e.focus();
1081
+ // ev.preventDefault();
1082
+ // ev.stopPropagation();
1083
+ // return false;
1084
+ // }
1085
+ // }
1086
+
1087
+ // if (e.attr('data-into')) {
1088
+ // $(e.attr('data-into')).html("")
1089
+ // }
1090
+
1091
+ // if (e.is('[password]')) {
1092
+ // if (!passwordValid(e.val())) {
1093
+ // alert(e.attr('data-wpm'));
1094
+ // e.addClass('error');
1095
+ // e.focus();
1096
+ // ev.preventDefault();
1097
+ // ev.stopPropagation();
1098
+ // return false;
1099
+ // }
1100
+ // }
1101
+ // if (e.is('[rpassword]')) {
1102
+ // if ($.trim(e.val()) != $.trim(e.closest('form').find('[password]').val())) {
1103
+ // e.addClass('error');
1104
+ // alert(e.attr('data-pnm'));
1105
+ // e.focus();
1106
+ // ev.preventDefault();
1107
+ // ev.stopPropagation();
1108
+ // return false;
1109
+ // }
1110
+ // e.removeClass('error');
1111
+ // $('.passStrength').remove();
1112
+ // }
1113
+
1114
+ // }
1115
+
1116
+ // }
1117
+ // });
1118
+
1119
+ $("body").on("click touch", "a,area", function (e) {
1120
+ var el = $(this);
1121
+ var link = el.attr("href");
1122
+
1123
+ if (
1124
+ link == "" ||
1125
+ $(this).closest(".cke").length == 1 ||
1126
+ $(this).closest(".chosen-container").length == 1 ||
1127
+ $(this).attr("target") == "_blank" ||
1128
+ $(this).attr("target") == "_new" ||
1129
+ $(this).hasClass("norm") ||
1130
+ $(this).closest(".gm-style").length == 1
1131
+ ) {
1132
+ } else {
1133
+ var local = false;
1134
+
1135
+ // alert(link);
1136
+
1137
+ var l = getLocation(link);
1138
+ var l2 = getLocation(appSettings.Base);
1139
+ // console.log("ll ",[l])
1140
+ var url = "home";
1141
+ local = l.hostname == l2.hostname;
1142
+
1143
+ var url = l.pathname.split(l2.pathname);
1144
+
1145
+ // alert(url);
1146
+
1147
+ if (l.pathname == "/" || l.pathname == "/home") {
1148
+ url = "home";
1149
+ } else {
1150
+ url = url.join("/");
1151
+ }
1152
+ // alert(url);
1153
+
1154
+ if (local && !cntrlon) {
1155
+ e.preventDefault();
1156
+ if (el.hasAttr("stop")) e.stopPropagation();
1157
+
1158
+ pushURL(url + (l.search != "" ? l.search : "") ?? "home");
1159
+ } else {
1160
+ }
1161
+ }
1162
+ });
1163
+
1164
+ $("body").on("click touch", "[h],[s]", function (e) {
1165
+ var el = $(this);
1166
+
1167
+ if (el.hasAttr("confirm")) if (!confirm(el.attr("confirm"))) return false;
1168
+ if (el.hasAttr("econfirm")) eval(el.attr("econfirm"));
1169
+ var attrs = el.attr();
1170
+
1171
+ var hI = Object.keys(attrs).indexOf("h");
1172
+ var sI = Object.keys(attrs).indexOf("s");
1173
+ if (sI < hI) {
1174
+ $(el.attr("s")).show();
1175
+ $(el.attr("h")).hide();
1176
+ } else {
1177
+ $(el.attr("h")).hide();
1178
+ $(el.attr("s")).show();
1179
+ }
1180
+ if (el.hasAttr("stop")) e.stopPropagation();
1181
+ });
1182
+
1183
+ $("body").on("click touch", "[e]", function (e) {
1184
+ var el = $(this);
1185
+ if (el.hasAttr("confirm")) if (!confirm(el.attr("confirm"))) return false;
1186
+ if (el.hasAttr("econfirm")) eval(el.attr("econfirm"));
1187
+ if ($($(this).attr("e")).is("input")) $($(this).attr("e")).val("");
1188
+ else $($(this).attr("e")).empty();
1189
+ });
1190
+
1191
+ $("body").on("click touch", "[f]", function (e) {
1192
+ var el = $(this);
1193
+ $(el.attr("f")).trigger("focus");
1194
+ if (el.hasAttr("stop")) e.stopPropagation();
1195
+ });
1196
+ $("body").on("click touch", "[tgl]", function (e) {
1197
+ var el = $(this);
1198
+ if (el.hasAttr("confirm")) if (!confirm(el.attr("confirm"))) return false;
1199
+ if (el.hasAttr("econfirm")) eval(el.attr("econfirm"));
1200
+ el.toggleClass(el.attr("tgl"));
1201
+ el.toggleClass("toggled");
1202
+ if (el.hasAttr("stop")) e.stopPropagation();
1203
+ });
1204
+
1205
+ $("body").on("click touch", "[t]", function (e) {
1206
+ var el = $(this);
1207
+ var tcn = el.attr("tcn") ? el.attr("tcn") : "active";
1208
+ if (el.hasAttr("confirm")) if (!confirm(el.attr("confirm"))) return false;
1209
+ if (el.hasAttr("econfirm")) eval(el.attr("econfirm"));
1210
+ $(el.attr("t")).toggleClass(tcn);
1211
+ el.toggleClass("toggled");
1212
+ if (el.hasAttr("stop")) e.stopPropagation();
1213
+ });
1214
+
1215
+ $("body").on("click touch", "[actv]", function (e) {
1216
+ let el = $(this);
1217
+ if (el.attr("actv") != "") $(el.attr("actv")).removeClass("active");
1218
+ el.addClass("active");
1219
+ if (el.attr("stop")) e.stopPropagation();
1220
+ });
1221
+
1222
+ $("body").on("click touch", "[actvt]", function (e) {
1223
+ let el = $(this);
1224
+ if (el.attr("actvt") != "") $(el.attr("actvt")).removeClass("active");
1225
+ if (el.hasClass("active")) el.removeClass("active");
1226
+ else el.addClass("active");
1227
+ if (el.attr("stop")) e.stopPropagation();
1228
+ });
1229
+
1230
+ $("body").on("click touch", "[close-notify]", function (e) {
1231
+ var tis = $(this).parent();
1232
+ tis.fadeOut(function () {
1233
+ tis.remove();
1234
+ });
1235
+ if ($(this).attr("stop")) e.stopPropagation();
1236
+ });
1237
+
1238
+ let _keyInt;
1239
+ $("body").on(
1240
+ "change blur focus keyup keydown input", '[icons_search]', function (ev) {
1241
+ var key = $.trim($(this).val());
1242
+ var outlet = $($(this).attr('icons_outlet'));
1243
+ var count_outlet = $($(this).attr('icons_count_outlet'));
1244
+ clearTimeout(_keyInt);
1245
+ if (key == "" || key.length <= 2) {
1246
+ count_outlet.hide();
1247
+ outlet.html('');
1248
+ } else {
1249
+ _keyInt = setTimeout(function () {
1250
+
1251
+ fetch('https://api.iconify.design/search?query=' + key + '&limit=250', {
1252
+ method: 'GET'
1253
+ })
1254
+ .then(function (response) { return response.json(); })
1255
+ .then(function (r) {
1256
+ count_outlet.show();
1257
+ let icons = r.icons;
1258
+ outlet.html('');
1259
+ count_outlet.html((r.total > 250 ? r.total + '+' : r.total) + ' ' + 'icons found..');
1260
+ for (let i = 0; i < icons.length; i++) {
1261
+ outlet.append(`
1262
+ <li class="w20 md_w25 m_w33 m_m_w50 c icoLi" data-class="`+ icons[i] + `"><div><span class="iconify fs24 mb5 lh40 g_nm" style="height: 40px;" data-icon="` + icons[i] + `" ></span><span class="name-class">` + icons[i] + `</span></div></li>
1263
+ `);
1264
+ }
1265
+
1266
+ });
1267
+ }, 400);
1268
+ }
1269
+ });
1270
+
1271
+ $("body").on("click touch", "[alert]", function (e) {
1272
+ notify(
1273
+ $(this).attr("alert-t"),
1274
+ $(this).attr("alert"),
1275
+ $(this).attr("alert-icon") ? $(this).attr("alert-icon") : "alert-circle",
1276
+ $(this).attr("alert-type") ? $(this).attr("alert-type") : "alert"
1277
+ );
1278
+ });
1279
+
1280
+ $("body").on("click touch", "[rcl],[acl]", function (e) {
1281
+ var el = $(this);
1282
+ if (el.hasAttr("confirm")) if (!confirm(el.attr("confirm"))) return false;
1283
+ if (el.hasAttr("econfirm")) eval(el.attr("econfirm"));
1284
+
1285
+ if (el.hasAttr("acl") && el.hasAttr("rcl")) {
1286
+ var attrs = el.attr();
1287
+
1288
+ var rclcn = el.attr("rclcn") ? el.attr("rclcn") : "active";
1289
+ var aclcn = el.attr("aclcn") ? el.attr("aclcn") : "active";
1290
+ var rCl = Object.keys(attrs).indexOf("rcl");
1291
+ var aCl = Object.keys(attrs).indexOf("acl");
1292
+ if (aCl < rCl) {
1293
+ $(el.attr("acl")).addClass(aclcn);
1294
+ el.addClass("added").removeClass("removed");
1295
+ if (el.hasAttr("stop")) e.stopPropagation();
1296
+
1297
+ $(el.attr("rcl")).removeClass(rclcn);
1298
+ el.addClass("removed").removeClass("added");
1299
+ if (el.hasAttr("stop")) e.stopPropagation();
1300
+ } else {
1301
+ $(el.attr("rcl")).removeClass(rclcn);
1302
+ el.addClass("removed").removeClass("added");
1303
+ if (el.hasAttr("stop")) e.stopPropagation();
1304
+
1305
+ $(el.attr("acl")).addClass(aclcn);
1306
+ el.addClass("added").removeClass("removed");
1307
+ if (el.hasAttr("stop")) e.stopPropagation();
1308
+ }
1309
+ } else {
1310
+ if (el.hasAttr("rcl")) {
1311
+ var rclcn = el.attr("rclcn") ? el.attr("rclcn") : "active";
1312
+ $(el.attr("rcl")).removeClass(rclcn);
1313
+ el.addClass("removed").removeClass("added");
1314
+ if (el.hasAttr("stop")) e.stopPropagation();
1315
+ } else {
1316
+ var aclcn = el.attr("aclcn") ? el.attr("aclcn") : "active";
1317
+ $(el.attr("acl")).addClass(aclcn);
1318
+ el.addClass("added").removeClass("removed");
1319
+ if (el.hasAttr("stop")) e.stopPropagation();
1320
+ }
1321
+ }
1322
+ });
1323
+
1324
+ $("body").on("click touch", "[st]", function (e) {
1325
+ st($(this).attr("st"));
1326
+ });
1327
+
1328
+ class Loader {
1329
+ options = {
1330
+ Dismissible: true,
1331
+ Class: "loader",
1332
+ Message: "Please Wait...",
1333
+ };
1334
+
1335
+ constructor(options) {
1336
+ for (var k in options) {
1337
+ this.options[k] = options[k];
1338
+ }
1339
+ }
1340
+
1341
+ dismiss() {
1342
+ if (this.options.Dismissible) {
1343
+ this.hide();
1344
+ }
1345
+ }
1346
+
1347
+ init() {
1348
+ let l = `
1349
+ <div loader class="${this.options.Class}">
1350
+ <div class="ov pf" @click="_loader.dismiss()"></div>
1351
+ <div class="wrapper cc sh20">
1352
+ <div class="animation"></div>
1353
+ <div class="text">${this.options.Message}</div>
1354
+ </div>
1355
+ </div>
1356
+ `;
1357
+ $("body").append(l);
1358
+
1359
+ if (this.options.hasOwnProperty("Progress")) {
1360
+ var min = this.options.Progress;
1361
+ var max = 100;
1362
+ if (this.options.hasOwnProperty("MaxProgress"))
1363
+ max = this.options.MaxProgress;
1364
+ $("." + this.options.Class + "[loader] .wrapper").append(
1365
+ $('<div class="prog">' + min + "/" + max + "</div>")
1366
+ );
1367
+ }
1368
+ }
1369
+
1370
+ show() {
1371
+ if ($("." + this.options.Class + "[loader]").length) return;
1372
+ this.init();
1373
+ $("body").css("overflow", "hidden");
1374
+ }
1375
+
1376
+ hide() {
1377
+ $("." + this.options.Class + "[loader]").unbind("click");
1378
+ $("." + this.options.Class + "[loader]").remove();
1379
+ $("body").css("overflow", "auto");
1380
+ }
1381
+
1382
+ update(options) {
1383
+ for (var k in options) {
1384
+ this.options[k] = options[k];
1385
+ }
1386
+
1387
+ if (options.hasOwnProperty("Message")) {
1388
+ $("." + this.options.Class + "[loader] .wrapper .text").html(
1389
+ options.Message
1390
+ );
1391
+ }
1392
+ if (options.hasOwnProperty("Progress")) {
1393
+ var max = 100;
1394
+ if (options.hasOwnProperty("MaxProgress")) max = this.options.MaxProgress;
1395
+ if (!$("." + this.options.Class + "[loader] .wrapper .prog").length)
1396
+ $("." + this.options.Class + "[loader] .wrapper").append(
1397
+ $('<div class="prog">' + options.Progress + "/" + max + "</div>")
1398
+ );
1399
+ else
1400
+ $("." + this.options.Class + "[loader] .wrapper .prog").html(
1401
+ options.Progress + "/" + max
1402
+ );
1403
+ }
1404
+ }
1405
+ }
1406
+ var _loader = new Loader();
1407
+ /**************************************/
1408
+ /****** END GLOBAL EVENTS LISTENERS ***/
1409
+ /**************************************/