isite 2025.8.8 → 2025.9.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.
@@ -1,1453 +1,1467 @@
1
1
  (function (window, document, undefined, $) {
2
- function escape(s) {
3
- if (!s) {
4
- return '';
5
- }
6
- if (typeof s !== 'string') {
7
- s = s.toString();
8
- }
9
- return s.replace(/[\/\\^$*+?.()\[\]{}]/g, '\\$&');
10
- }
11
-
12
- if (!String.prototype.test) {
13
- String.prototype.test = function (reg, flag = 'gium') {
14
- try {
15
- return new RegExp(reg, flag).test(this);
16
- } catch (error) {
17
- return !1;
18
- }
19
- };
20
- }
21
-
22
- if (!String.prototype.like) {
23
- String.prototype.like = function (name) {
24
- if (!name) {
25
- return !1;
26
- }
27
- let r = !1;
28
- name.split('|').forEach((n) => {
29
- n = n.split('*');
30
- n.forEach((w, i) => {
31
- n[i] = escape(w);
32
- });
33
- n = n.join('.*');
34
- if (this.test('^' + n + '$', 'gium')) {
35
- r = !0;
36
- }
37
- });
38
- return r;
39
- };
40
- }
41
-
42
- if (!String.prototype.contains) {
43
- String.prototype.contains = function (name) {
44
- let r = !1;
45
- if (!name) {
46
- return r;
47
- }
48
- name.split('|').forEach((n) => {
49
- if (n && this.test('^.*' + escape(n) + '.*$', 'gium')) {
50
- r = !0;
51
- }
52
- });
53
- return r;
54
- };
55
- }
56
-
57
- let site = {};
58
- site.onLoad = function (fn) {
59
- if (document.readyState !== 'loading') {
60
- fn();
61
- } else {
62
- document.addEventListener('DOMContentLoaded', () => {
63
- fn();
64
- });
65
- }
66
- };
67
-
68
- site.isMobile = function () {
69
- return (
70
- (navigator.userAgentData && navigator.userAgentData.mobile) ||
71
- (navigator.vendor && navigator.vendor.like('*apple*')) ||
72
- (navigator.platform && navigator.platform.like('*iPhone*|*iPad*|*iPod*')) ||
73
- navigator.maxTouchPoints > 1
74
- );
75
- };
76
-
77
- site.touchtime = 0;
78
- site.zoomElement = function (element) {
79
- if (site.touchtime == 0) {
80
- site.touchtime = new Date().getTime();
81
- return false;
82
- } else {
83
- if (new Date().getTime() - site.touchtime < 250) {
84
- site.touchtime = 0;
85
- } else {
86
- site.touchtime = new Date().getTime();
87
- return false;
88
- }
89
- }
90
- element = typeof element == 'string' ? document.querySelector(element) : element;
91
- if (element.classList.contains('zoom')) {
92
- element.classList.remove('zoom');
93
- } else {
94
- element.classList.add('zoom');
95
- }
96
- };
97
-
98
- site.zoomNumber = parseInt(localStorage.getItem('zoomNumber') || 100);
99
- site.zoom = function (op) {
100
- if (op == '+') {
101
- site.zoomNumber += 25;
102
- } else if (op == '-') {
103
- site.zoomNumber -= 25;
104
- } else if (op == '0') {
105
- } else {
106
- site.zoomNumber = 100;
2
+ function escape(s) {
3
+ if (!s) {
4
+ return '';
5
+ }
6
+ if (typeof s !== 'string') {
7
+ s = s.toString();
8
+ }
9
+ return s.replace(/[\/\\^$*+?.()\[\]{}]/g, '\\$&');
107
10
  }
108
- localStorage.setItem('zoomNumber', site.zoomNumber.toString());
109
- document.body.style.zoom = site.zoomNumber + '%';
110
- };
111
-
112
- site.printerList = [];
113
- site.getPrinters = function () {
114
- if (window.SOCIALBROWSER && SOCIALBROWSER.webContents.getPrintersAsync) {
115
- SOCIALBROWSER.webContents.getPrintersAsync().then((arr0) => {
116
- site.printerList = arr0;
117
- });
118
- } else if (window.SOCIALBROWSER && SOCIALBROWSER.webContents.getPrinters) {
119
- site.printerList = SOCIALBROWSER.webContents.getPrinters();
120
- } else {
121
- fetch('http://127.0.0.1:60080/printers/all')
122
- .then((res) => res.json())
123
- .then((data) => {
124
- site.printerList = data.list;
125
- })
126
- .catch((err) => {
127
- site.printerList = [];
128
- });
11
+
12
+ if (!String.prototype.test) {
13
+ String.prototype.test = function (reg, flag = 'gium') {
14
+ try {
15
+ return new RegExp(reg, flag).test(this);
16
+ } catch (error) {
17
+ return !1;
18
+ }
19
+ };
129
20
  }
130
21
 
131
- return site.printerList;
132
- };
22
+ if (!String.prototype.like) {
23
+ String.prototype.like = function (name) {
24
+ if (!name) {
25
+ return !1;
26
+ }
27
+ let r = !1;
28
+ name.split('|').forEach((n) => {
29
+ n = n.split('*');
30
+ n.forEach((w, i) => {
31
+ n[i] = escape(w);
32
+ });
33
+ n = n.join('.*');
34
+ if (this.test('^' + n + '$', 'gium')) {
35
+ r = !0;
36
+ }
37
+ });
38
+ return r;
39
+ };
40
+ }
133
41
 
134
- site.render = function (selector, data) {
135
- let template = document.querySelector(selector);
136
- if (template) {
137
- return Mustache.render(template.innerHTML, data);
42
+ if (!String.prototype.contains) {
43
+ String.prototype.contains = function (name) {
44
+ let r = !1;
45
+ if (!name) {
46
+ return r;
47
+ }
48
+ name.split('|').forEach((n) => {
49
+ if (n && this.test('^.*' + escape(n) + '.*$', 'gium')) {
50
+ r = !0;
51
+ }
52
+ });
53
+ return r;
54
+ };
138
55
  }
139
- return '';
140
- };
141
-
142
- site.html = function (template, data) {
143
- return Mustache.render(template, data);
144
- };
145
-
146
- site.getUniqueObjects = function (arr, comp) {
147
- const unique = arr
148
- .map((e) => e[comp])
149
- .map((e, i, final) => final.indexOf(e) === i && i)
150
- .filter((e) => arr[e])
151
- .map((e) => arr[e]);
152
- return unique;
153
- };
154
-
155
- site.$ = function (name) {
156
- let arr = document.querySelectorAll(name);
157
- return arr;
158
- };
159
-
160
- site.modal_z_index = 999999;
161
- site.showModal = function (name) {
162
- $(name).click(() => {
163
- $('popup').hide();
164
- });
165
56
 
166
- site.modal_z_index++;
57
+ let site = {};
58
+ site.onLoad = function (fn) {
59
+ if (document.readyState !== 'loading') {
60
+ fn();
61
+ } else {
62
+ document.addEventListener('DOMContentLoaded', () => {
63
+ fn();
64
+ });
65
+ }
66
+ };
167
67
 
168
- let el = site.$(name);
169
- if (el.length === 0) {
170
- return;
171
- }
68
+ site.isMobile = function () {
69
+ return (
70
+ (navigator.userAgentData && navigator.userAgentData.mobile) ||
71
+ (navigator.vendor && navigator.vendor.like('*apple*')) ||
72
+ (navigator.platform && navigator.platform.like('*iPhone*|*iPad*|*iPod*')) ||
73
+ navigator.maxTouchPoints > 1
74
+ );
75
+ };
172
76
 
173
- el[0].style.zIndex = site.modal_z_index;
174
- el[0].style.display = 'block';
77
+ site.touchtime = 0;
78
+ site.zoomElement = function (element) {
79
+ if (site.touchtime == 0) {
80
+ site.touchtime = new Date().getTime();
81
+ return false;
82
+ } else {
83
+ if (new Date().getTime() - site.touchtime < 250) {
84
+ site.touchtime = 0;
85
+ } else {
86
+ site.touchtime = new Date().getTime();
87
+ return false;
88
+ }
89
+ }
90
+ element = typeof element == 'string' ? document.querySelector(element) : element;
91
+ if (element.classList.contains('zoom')) {
92
+ element.classList.remove('zoom');
93
+ } else {
94
+ element.classList.add('zoom');
95
+ }
96
+ };
175
97
 
176
- let inputs = site.$(name + ' i-control input');
177
- if (inputs.length > 0) {
178
- inputs[0].focus();
179
- }
98
+ site.zoomNumber = parseInt(localStorage.getItem('zoomNumber') || 100);
99
+ site.zoom = function (op) {
100
+ if (op == '+') {
101
+ site.zoomNumber += 25;
102
+ } else if (op == '-') {
103
+ site.zoomNumber -= 25;
104
+ } else if (op == '0') {
105
+ } else {
106
+ site.zoomNumber = 100;
107
+ }
108
+ localStorage.setItem('zoomNumber', site.zoomNumber.toString());
109
+ document.body.style.zoom = site.zoomNumber + '%';
110
+ };
180
111
 
181
- site.$(name + ' .close').forEach((cl) => {
182
- cl.addEventListener('click', function () {
183
- site.hideModal(name);
184
- });
185
- });
186
- };
112
+ site.printerList = [];
113
+ site.getPrinters = function () {
114
+ if (window.SOCIALBROWSER && SOCIALBROWSER.webContents.getPrintersAsync) {
115
+ SOCIALBROWSER.webContents.getPrintersAsync().then((arr0) => {
116
+ site.printerList = arr0;
117
+ });
118
+ } else if (window.SOCIALBROWSER && SOCIALBROWSER.webContents.getPrinters) {
119
+ site.printerList = SOCIALBROWSER.webContents.getPrinters();
120
+ } else {
121
+ fetch('http://127.0.0.1:60080/printers/all')
122
+ .then((res) => res.json())
123
+ .then((data) => {
124
+ site.printerList = data.list;
125
+ })
126
+ .catch((err) => {
127
+ site.printerList = [];
128
+ });
129
+ }
187
130
 
188
- site.hideModal = function (name) {
189
- $('popup').hide();
131
+ return site.printerList;
132
+ };
190
133
 
191
- let el = site.$(name);
192
- if (el.length > 0) {
193
- el[0].style.display = 'none';
194
- }
195
- };
134
+ site.render = function (selector, data) {
135
+ let template = document.querySelector(selector);
136
+ if (template) {
137
+ return Mustache.render(template.innerHTML, data);
138
+ }
139
+ return '';
140
+ };
196
141
 
197
- site.eventList = [];
142
+ site.html = function (template, data) {
143
+ return Mustache.render(template, data);
144
+ };
198
145
 
199
- site.on = function (name, callback) {
200
- callback = callback || function () {};
201
- site.eventList.push({
202
- name: name,
203
- callback: callback,
204
- });
205
- };
206
-
207
- site.call = function (name, obj) {
208
- for (var i = 0; i < site.eventList.length; i++) {
209
- var ev = site.eventList[i];
210
- if (ev.name == name) {
211
- ev.callback(obj);
212
- }
213
- }
214
- };
215
-
216
- site.translate = function (op, callback) {
217
- if (typeof op === 'string') {
218
- op = {
219
- text: op,
220
- lang: 'ar',
221
- };
222
- }
223
- op.url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${op.lang}&dt=t&dt=bd&dj=1&q=${op.text}`;
224
- site.getData(op, callback);
225
- };
226
-
227
- site.getData = function (op, callback, error) {
228
- callback = callback || function () {};
229
- error = error || function () {};
230
-
231
- if (typeof op === 'string') {
232
- op = {
233
- url: op,
234
- };
235
- }
146
+ site.getUniqueObjects = function (arr, comp) {
147
+ const unique = arr
148
+ .map((e) => e[comp])
149
+ .map((e, i, final) => final.indexOf(e) === i && i)
150
+ .filter((e) => arr[e])
151
+ .map((e) => arr[e]);
152
+ return unique;
153
+ };
236
154
 
237
- op.headers = op.headers || {
238
- Accept: 'application/json',
239
- 'Content-Type': 'application/json',
240
- };
241
- op.url = site.handle_url(op.url);
242
- fetch(op.url, {
243
- mode: 'cors',
244
- method: 'get',
245
- headers: op.headers,
246
- })
247
- .then((res) => res.json())
248
- .then((data) => {
249
- callback(data);
250
- })
251
- .catch((err) => {
252
- error(err);
253
- });
254
- };
255
-
256
- site.getContent = function (op, callback, error) {
257
- callback = callback || function () {};
258
- error = error || function () {};
259
-
260
- if (typeof op === 'string') {
261
- op = {
262
- url: op,
263
- };
264
- }
265
- op.url = site.handle_url(op.url);
266
- fetch(op.url, {
267
- mode: 'cors',
268
- method: 'get',
269
- })
270
- .then(function (res) {
271
- return res.text();
272
- })
273
- .then(function (content) {
274
- callback(content);
275
- });
276
- };
277
-
278
- site.handle_url = function (u) {
279
- if (typeof u !== 'string') {
280
- return u;
281
- }
282
- u = u.trim();
283
- if (u.indexOf('//') === 0) {
284
- u = document.location.protocol + u;
285
- } else if (u.like('http*') || u.indexOf('data:') === 0) {
286
- u = u;
287
- } else if (u.indexOf('/') === 0) {
288
- u = window.location.origin + u;
289
- } else if (u.split('?')[0].split('.').length < 3) {
290
- let page = window.location.pathname.split('/').pop();
291
- u = window.location.origin + window.location.pathname.replace(page, '') + u;
292
- }
293
- return u;
294
- };
155
+ site.$ = function (name) {
156
+ let arr = document.querySelectorAll(name);
157
+ return arr;
158
+ };
295
159
 
296
- site.postData = function (op, callback, error) {
297
- callback = callback || function () {};
298
- error = error || function () {};
160
+ site.modal_z_index = 999999;
161
+ site.showModal = function (name) {
162
+ $(name).click(() => {
163
+ $('popup').hide();
164
+ });
299
165
 
300
- if (typeof op === 'string') {
301
- op = {
302
- url: op,
303
- };
304
- }
166
+ site.modal_z_index++;
305
167
 
306
- op.data = op.data || op.body;
307
- delete op.body;
168
+ let el = site.$(name);
169
+ if (el.length === 0) {
170
+ return;
171
+ }
308
172
 
309
- if (op.data && typeof op.data == 'object') {
310
- op.data = JSON.stringify(op.data);
311
- }
173
+ el[0].style.zIndex = site.modal_z_index;
174
+ el[0].style.display = 'block';
312
175
 
313
- op.headers = op.headers || {
314
- Accept: 'application/json',
315
- 'Content-Type': 'application/json',
176
+ let inputs = site.$(name + ' i-control input');
177
+ if (inputs.length > 0) {
178
+ inputs[0].focus();
179
+ }
180
+
181
+ site.$(name + ' .close').forEach((cl) => {
182
+ cl.addEventListener('click', function () {
183
+ site.hideModal(name);
184
+ });
185
+ });
316
186
  };
317
187
 
318
- if (op.data && typeof op.data == 'string') {
319
- op.headers['Content-Length'] = op.data.length.toString();
320
- }
188
+ site.hideModal = function (name) {
189
+ $('popup').hide();
321
190
 
322
- try {
323
- op.headers['Cookie'] = document.cookie;
324
- } catch (error) {
325
- console.log(error);
326
- }
191
+ let el = site.$(name);
192
+ if (el.length > 0) {
193
+ el[0].style.display = 'none';
194
+ }
195
+ };
327
196
 
328
- op.method = 'post';
329
- op.redirect = 'follow';
330
- op.mode = 'cors';
331
- op.url = site.handle_url(op.url);
332
-
333
- if (window.SOCIALBROWSER && window.SOCIALBROWSER.fetchJson) {
334
- SOCIALBROWSER.fetchJson(op, (data) => {
335
- callback(data);
336
- });
337
- } else {
338
- fetch(op.url, {
339
- mode: op.mode,
340
- method: op.method,
341
- headers: op.headers,
342
- body: op.data,
343
- redirect: op.redirect,
344
- })
345
- .then((res) => res.json())
346
- .then((data) => {
347
- callback(data);
348
- })
349
- .catch((err) => {
350
- error(err);
197
+ site.eventList = [];
198
+
199
+ site.on = function (name, callback) {
200
+ callback = callback || function () {};
201
+ site.eventList.push({
202
+ name: name,
203
+ callback: callback,
351
204
  });
352
- }
353
- };
354
-
355
- site.typeOf = function type(elem) {
356
- return Object.prototype.toString.call(elem).slice(8, -1);
357
- };
358
-
359
- site.getDate = function (_any) {
360
- let d = _any ? new Date(_any) : new Date();
361
- return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0));
362
- };
363
- site.getDateTime = function (_any) {
364
- let d = _any ? new Date(_any) : new Date();
365
- return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()));
366
- };
367
- site.toDateTime = function (_any) {
368
- if (!_any) return new Date();
369
- return new Date(_any);
370
- };
371
-
372
- site.toDateX = function (_any) {
373
- let d = site.toDateTime(_any);
374
- return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
375
- };
376
-
377
- site.toDateXT = function (_any) {
378
- let d = site.toDateTime(_any);
379
- return d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
380
- };
381
-
382
- site.toDateXF = function (_any) {
383
- let d = site.toDateTime(_any);
384
- return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
385
- };
386
-
387
- site.toDateOnly = function (_any) {
388
- let d = site.toDateTime(_any);
389
- return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);
390
- };
391
-
392
- site.toDateT = function (_any) {
393
- return site.toDateOnly(_any).getTime();
394
- };
395
-
396
- site.toDateF = function (_any) {
397
- return site.toDateTime(_any).getTime();
398
- };
399
-
400
- site.addZero = function (code, number) {
401
- let c = number - code.toString().length;
402
- for (let i = 0; i < c; i++) {
403
- code = '0' + code.toString();
404
- }
405
- return code;
406
- };
407
- site.addSubZero = function (n, fixed) {
408
- let c = fixed;
409
- if (n.toString().split('.').length == 2) {
410
- let c = fixed - n.toString().split('.')[1].length;
411
- n = n.toString();
412
- } else {
413
- n = n.toString() + '.';
414
- }
415
- for (let i = 0; i < c; i++) {
416
- n = n.toString() + 0;
417
- }
418
- return n;
419
- };
420
- site.fixed = 3;
421
- site.to_number = site.toNumber = function (_num, fixed) {
422
- let _fixed = fixed || site.fixed;
423
- let n = 0;
424
- if (_num) {
425
- n = parseFloat(_num).toFixed(_fixed);
426
- }
427
- return parseFloat(n);
428
- };
429
-
430
- site.to_money = site.toMoney = function (_num, float = true) {
431
- let n = 0;
432
- if (_num) {
433
- _num = _num.toFixed(2).split('.');
434
- let n1 = _num[0];
435
- let n2 = _num[1] || '00';
436
- if (n2) {
437
- let n3 = n2[0] || '0';
438
- let n4 = n2[1] || '0';
439
- if (n4 && parseInt(n4) > 5) {
440
- n3 = parseInt(n3) + 1;
441
- n3 = n3 * 10;
442
- if (n3 == 100) {
443
- n3 = 0;
444
- _num[0] = parseInt(_num[0]) + 1;
445
- _num[1] = '';
446
- } else {
447
- _num[1] = n3;
448
- }
449
- } else if (n4 && parseInt(n4) == 5) {
450
- _num[1] = n2;
451
- } else if (n4 && parseInt(n4) > 2) {
452
- n4 = 5;
453
- _num[1] = n3 + n4;
454
- } else {
455
- _num[1] = n3 + '0';
205
+ };
206
+
207
+ site.call = function (name, obj) {
208
+ for (var i = 0; i < site.eventList.length; i++) {
209
+ var ev = site.eventList[i];
210
+ if (ev.name == name) {
211
+ ev.callback(obj);
212
+ }
456
213
  }
457
- }
458
- n = _num.join('.');
459
- }
460
- if (!float) {
461
- if (n && n.endsWith('.')) {
462
- n = n + '00';
463
- }
464
- return n;
465
- } else {
466
- return site.to_float(n);
467
- }
468
- };
214
+ };
469
215
 
470
- site.to_float = site.toFloat = function (_num) {
471
- if (_num) {
472
- return parseFloat(_num);
473
- }
474
- return 0;
475
- };
216
+ site.translate = function (op, callback) {
217
+ if (typeof op === 'string') {
218
+ op = {
219
+ text: op,
220
+ lang: 'ar',
221
+ };
222
+ }
223
+ op.url = `https://translate.googleapis.com/translate_a/single?client=gtx&sl=auto&tl=${op.lang}&dt=t&dt=bd&dj=1&q=${op.text}`;
224
+ site.getData(op, callback);
225
+ };
476
226
 
477
- site.to_int = site.toInt = function (_num) {
478
- if (_num) {
479
- return parseInt(_num);
480
- }
481
- return 0;
482
- };
483
-
484
- site.$base64Letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
485
- site.$base64Numbers = [];
486
- for (let $i = 11; $i < 99; $i++) {
487
- if ($i % 10 !== 0 && $i % 11 !== 0) {
488
- site.$base64Numbers.push($i);
489
- }
490
- }
227
+ site.getData = function (op, callback, error) {
228
+ callback = callback || function () {};
229
+ error = error || function () {};
491
230
 
492
- site.toJson = (obj) => {
493
- if (typeof obj === undefined || obj === null) {
494
- return '';
495
- }
496
- return JSON.stringify(obj);
497
- };
231
+ if (typeof op === 'string') {
232
+ op = {
233
+ url: op,
234
+ };
235
+ }
498
236
 
499
- site.fromJson = (str) => {
500
- if (typeof str !== 'string') {
501
- return str;
502
- }
503
- return JSON.parse(str);
504
- };
237
+ op.headers = op.headers || {
238
+ Accept: 'application/json',
239
+ 'Content-Type': 'application/json',
240
+ };
241
+ op.url = site.handle_url(op.url);
242
+ fetch(op.url, {
243
+ mode: 'cors',
244
+ method: 'get',
245
+ headers: op.headers,
246
+ })
247
+ .then((res) => res.json())
248
+ .then((data) => {
249
+ callback(data);
250
+ })
251
+ .catch((err) => {
252
+ error(err);
253
+ });
254
+ };
505
255
 
506
- site.toBase64 = (str) => {
507
- if (typeof str === undefined || str === null || str === '') {
508
- return '';
509
- }
510
- if (typeof str !== 'string') {
511
- str = site.toJson(str);
512
- }
256
+ site.getContent = function (op, callback, error) {
257
+ callback = callback || function () {};
258
+ error = error || function () {};
513
259
 
514
- return Base64.encode(str);
515
- return window.btoa(unescape(encodeURIComponent(str)));
516
- };
260
+ if (typeof op === 'string') {
261
+ op = {
262
+ url: op,
263
+ };
264
+ }
265
+ op.url = site.handle_url(op.url);
266
+ fetch(op.url, {
267
+ mode: 'cors',
268
+ method: 'get',
269
+ })
270
+ .then(function (res) {
271
+ return res.text();
272
+ })
273
+ .then(function (content) {
274
+ callback(content);
275
+ });
276
+ };
517
277
 
518
- site.fromBase64 = (str) => {
519
- if (typeof str === undefined || str === null || str === '') {
520
- return '';
521
- }
522
- return Base64.decode(str);
523
- return decodeURIComponent(escape(window.atob(str)));
524
- };
525
-
526
- site.to123 = (data) => {
527
- data = site.toBase64(data);
528
- let newData = '';
529
- for (let i = 0; i < data.length; i++) {
530
- let letter = data[i];
531
- newData += site.$base64Numbers[site.$base64Letter.indexOf(letter)];
532
- }
533
- return newData;
534
- };
535
-
536
- site.from123 = (data) => {
537
- let newData = '';
538
- for (let i = 0; i < data.length; i++) {
539
- let num = data[i] + data[i + 1];
540
- let index = site.$base64Numbers.indexOf(parseInt(num));
541
- newData += site.$base64Letter[index];
542
- i++;
543
- }
544
- newData = site.fromBase64(newData);
545
- return newData;
546
- };
547
-
548
- site.hide = site.hideObject = function (obj) {
549
- return site.to123(JSON.stringify(obj));
550
- };
551
- site.show = site.showObject = function (obj) {
552
- if (!obj) {
553
- return {};
554
- }
555
- return JSON.parse(site.from123(obj));
556
- };
557
-
558
- site.typeOf = site.typeof = function type(elem) {
559
- return Object.prototype.toString.call(elem).slice(8, -1);
560
- };
561
-
562
- site.showTabContent = function (e, tabContentSelector) {
563
- tabContentSelector = tabContentSelector || e;
564
- let parent = document;
565
- if (e && e.target && e.target.parentNode && e.target.parentNode.parentNode) {
566
- parent = e.target.parentNode.parentNode;
567
- }
568
- if (parent && parent.className && parent.className.contains('tabs-header')) {
569
- parent = parent.parentNode;
570
- }
571
- let tabContent = parent.querySelector(tabContentSelector);
572
- if (tabContent) {
573
- let tabHeader = tabContent.parentNode;
574
- if (tabHeader) {
575
- let tabs = tabHeader.parentNode;
576
- if (tabs) {
577
- tabs.querySelectorAll('.tab-content').forEach((tabContent) => {
578
- tabContent.style.display = 'none';
579
- });
580
- tabs.querySelectorAll('.tab-link').forEach((tabLink) => {
581
- if (tabLink.getAttribute('onclick') && tabLink.getAttribute('onclick').contains(tabContentSelector + "'")) {
582
- tabLink.classList.add('active');
583
- } else {
584
- tabLink.classList.remove('active');
585
- }
586
- });
278
+ site.handle_url = function (u) {
279
+ if (typeof u !== 'string') {
280
+ return u;
281
+ }
282
+ u = u.trim();
283
+ if (u.indexOf('//') === 0) {
284
+ u = document.location.protocol + u;
285
+ } else if (u.like('http*') || u.indexOf('data:') === 0) {
286
+ u = u;
287
+ } else if (u.indexOf('/') === 0) {
288
+ u = window.location.origin + u;
289
+ } else if (u.split('?')[0].split('.').length < 3) {
290
+ let page = window.location.pathname.split('/').pop();
291
+ u = window.location.origin + window.location.pathname.replace(page, '') + u;
292
+ }
293
+ return u;
294
+ };
295
+
296
+ site.postData = function (op, callback, error) {
297
+ callback = callback || function () {};
298
+ error = error || function () {};
587
299
 
588
- tabs.querySelectorAll(tabContentSelector + '.tab-content').forEach((el) => {
589
- el.style.display = 'block';
590
- });
300
+ if (typeof op === 'string') {
301
+ op = {
302
+ url: op,
303
+ };
591
304
  }
592
- }
593
- }
594
- };
595
305
 
596
- site.showTabs = function (e, tabSelector) {
597
- if (e) {
598
- e.stopPropagation();
599
- }
306
+ op.data = op.data || op.body;
307
+ delete op.body;
600
308
 
601
- $('.main-menu .tabs').hide();
602
- $(tabSelector).show(100);
603
- };
309
+ if (op.data && typeof op.data == 'object') {
310
+ op.data = JSON.stringify(op.data);
311
+ }
604
312
 
605
- site.toHtmlTable = function (obj) {
606
- if (obj === undefined || obj === null) {
607
- return '';
608
- }
609
- if (site.typeOf(obj) == 'Object') {
610
- let table = '<table class="table">';
611
- for (let index = 0; index < Object.getOwnPropertyNames(obj).length; index++) {
612
- let p = Object.getOwnPropertyNames(obj)[index];
613
- table += '<tr>';
614
- table += `<td><p> ${p} </p></td>`;
615
- if (site.typeOf(obj[p]) == 'Object' || site.typeOf(obj[p]) == 'Array') {
616
- table += `<td><p> ${site.toHtmlTable(obj[p])} </p></td>`;
313
+ op.headers = op.headers || {
314
+ Accept: 'application/json',
315
+ 'Content-Type': 'application/json',
316
+ };
317
+
318
+ if (op.data && typeof op.data == 'string') {
319
+ op.headers['Content-Length'] = op.data.length.toString();
320
+ }
321
+
322
+ try {
323
+ op.headers['Cookie'] = document.cookie;
324
+ } catch (error) {
325
+ console.log(error);
326
+ }
327
+
328
+ op.method = 'post';
329
+ op.redirect = 'follow';
330
+ op.mode = 'cors';
331
+ op.url = site.handle_url(op.url);
332
+
333
+ if (window.SOCIALBROWSER && window.SOCIALBROWSER.fetchJson) {
334
+ SOCIALBROWSER.fetchJson(op, (data) => {
335
+ callback(data);
336
+ });
617
337
  } else {
618
- table += `<td><p> ${obj[p]} </p></td>`;
619
- }
620
-
621
- table += '</tr>';
622
- }
623
- table += '</table>';
624
- return table;
625
- } else if (site.typeOf(obj) == 'Array') {
626
- let table = '<table class="table">';
627
- for (let i = 0; i < obj.length; i++) {
628
- if (site.typeOf(obj[i]) == 'Object' || site.typeOf(obj[i]) == 'Array') {
629
- table += `<tr><td><p>${site.toHtmlTable(obj[i])}</p></td></tr>`;
338
+ fetch(op.url, {
339
+ mode: op.mode,
340
+ method: op.method,
341
+ headers: op.headers,
342
+ body: op.data,
343
+ redirect: op.redirect,
344
+ })
345
+ .then((res) => res.json())
346
+ .then((data) => {
347
+ callback(data);
348
+ })
349
+ .catch((err) => {
350
+ error(err);
351
+ });
352
+ }
353
+ };
354
+
355
+ site.typeOf = function type(elem) {
356
+ return Object.prototype.toString.call(elem).slice(8, -1);
357
+ };
358
+
359
+ site.getDate = function (_any) {
360
+ let d = _any ? new Date(_any) : new Date();
361
+ return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), 12, 0, 0));
362
+ };
363
+ site.getDateTime = function (_any) {
364
+ let d = _any ? new Date(_any) : new Date();
365
+ return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds()));
366
+ };
367
+ site.toDateTime = function (_any) {
368
+ if (!_any) return new Date();
369
+ return new Date(_any);
370
+ };
371
+
372
+ site.toDateX = function (_any) {
373
+ let d = site.toDateTime(_any);
374
+ return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate();
375
+ };
376
+
377
+ site.toDateXT = function (_any) {
378
+ let d = site.toDateTime(_any);
379
+ return d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
380
+ };
381
+
382
+ site.toDateXF = function (_any) {
383
+ let d = site.toDateTime(_any);
384
+ return d.getFullYear() + '-' + (d.getMonth() + 1) + '-' + d.getDate() + ' ' + d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds();
385
+ };
386
+
387
+ site.toDateOnly = function (_any) {
388
+ let d = site.toDateTime(_any);
389
+ return new Date(d.getFullYear(), d.getMonth(), d.getDate(), 0, 0, 0, 0);
390
+ };
391
+
392
+ site.toDateT = function (_any) {
393
+ return site.toDateOnly(_any).getTime();
394
+ };
395
+
396
+ site.toDateF = function (_any) {
397
+ return site.toDateTime(_any).getTime();
398
+ };
399
+
400
+ site.addZero = function (code, number) {
401
+ let c = number - code.toString().length;
402
+ for (let i = 0; i < c; i++) {
403
+ code = '0' + code.toString();
404
+ }
405
+ return code;
406
+ };
407
+ site.addSubZero = function (n, fixed) {
408
+ let c = fixed;
409
+ if (n.toString().split('.').length == 2) {
410
+ let c = fixed - n.toString().split('.')[1].length;
411
+ n = n.toString();
630
412
  } else {
631
- table += `<tr><td><p>${obj[i]}</p></td></tr>`;
413
+ n = n.toString() + '.';
632
414
  }
633
- }
634
- table += '</table>';
635
- return table;
636
- }
637
- return '';
638
- };
639
-
640
- site.resetValidated = function (s) {
641
- s = s || 'body';
642
- const arr = document.querySelectorAll(s + ' [v]');
643
- arr.forEach((el) => {
644
- el.classList.remove('is-invalid');
645
- el.classList.remove('is-valid');
646
- });
647
- };
648
-
649
- site.validated = function (s) {
650
- const res = {
651
- ok: !0,
652
- messages: [],
653
- };
654
-
655
- s = s || 'body';
656
- const arr = document.querySelectorAll(s + ' [v]');
657
- arr.forEach((el) => {
658
- el.classList.remove('is-invalid');
659
- el.classList.remove('is-valid');
660
- const v = el.getAttribute('v');
661
- const vList = v.split(' ');
662
- vList.forEach((vl) => {
663
- vl = vl.toLowerCase().trim();
664
- if (vl === 'r') {
665
- if ((el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.like('*undefined*'))) {
666
- el.classList.add('is-invalid');
667
- if ((f = el.parentNode.querySelector('.invalid-feedback'))) {
668
- if (site.session && site.session.language.id.like('*en*')) {
669
- f.innerHTML = 'Data Is Required';
670
- } else if (site.session && site.session.language.id.like('*ar*')) {
671
- f.innerHTML = 'هذا البيان مطلوب';
672
- }
415
+ for (let i = 0; i < c; i++) {
416
+ n = n.toString() + 0;
417
+ }
418
+ return n;
419
+ };
420
+ site.fixed = 3;
421
+ site.to_number = site.toNumber = function (_num, fixed) {
422
+ let _fixed = fixed || site.fixed;
423
+ let n = 0;
424
+ if (_num) {
425
+ n = parseFloat(_num).toFixed(_fixed);
426
+ }
427
+ return parseFloat(n);
428
+ };
429
+
430
+ site.to_money = site.toMoney = function (_num, float = true) {
431
+ let n = 0;
432
+ if (_num) {
433
+ _num = _num.toFixed(2).split('.');
434
+ let n1 = _num[0];
435
+ let n2 = _num[1] || '00';
436
+ if (n2) {
437
+ let n3 = n2[0] || '0';
438
+ let n4 = n2[1] || '0';
439
+ if (n4 && parseInt(n4) > 5) {
440
+ n3 = parseInt(n3) + 1;
441
+ n3 = n3 * 10;
442
+ if (n3 == 100) {
443
+ n3 = 0;
444
+ _num[0] = parseInt(_num[0]) + 1;
445
+ _num[1] = '';
446
+ } else {
447
+ _num[1] = n3;
448
+ }
449
+ } else if (n4 && parseInt(n4) == 5) {
450
+ _num[1] = n2;
451
+ } else if (n4 && parseInt(n4) > 2) {
452
+ n4 = 5;
453
+ _num[1] = n3 + n4;
454
+ } else {
455
+ _num[1] = n3 + '0';
456
+ }
673
457
  }
674
- res.ok = !1;
675
- res.messages.push({
676
- en: 'Data Is Required',
677
- ar: 'هذا البيان مطلوب',
678
- });
679
- } else if (el.nodeName === 'I-DATETIME' && !el.getAttribute('value')) {
680
- el.classList.add('is-invalid');
681
- res.ok = !1;
682
- res.messages.push({
683
- en: 'Data Is Required',
684
- ar: 'هذا البيان مطلوب',
685
- });
686
- } else if (el.nodeName === 'I-DATE' && !el.getAttribute('value')) {
687
- el.classList.add('is-invalid');
688
- res.ok = !1;
689
- res.messages.push({
690
- en: 'Data Is Required',
691
- ar: 'هذا البيان مطلوب',
692
- });
693
- } else if (el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA' || el.nodeName === 'I-DATETIME' || el.nodeName === 'I-DATE') {
694
- el.classList.add('is-valid');
695
- }
696
- } else if (vl.like('ml*')) {
697
- const length = parseInt(vl.replace('ml', ''));
698
- if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length > length)) {
699
- el.classList.add('is-invalid');
700
- res.ok = !1;
701
- res.messages.push({
702
- en: 'Letter Count Must be <= ' + length,
703
- ar: 'عدد الاحرف يجب ان يكون أقل من أو يساوى ' + length,
704
- });
705
- }
706
- } else if (vl.like('ll*')) {
707
- const length = parseInt(vl.replace('ll', ''));
708
- if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length < length)) {
709
- el.classList.add('is-invalid');
710
- res.ok = !1;
711
- res.messages.push({
712
- en: 'Letter Count Must be >= ' + length,
713
- ar: 'عدد الاحرف يجب ان يكون اكبر من أو يساوى ' + length,
714
- });
715
- }
716
- } else if (vl.like('l*')) {
717
- const length = parseInt(vl.replace('l', ''));
718
- if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length !== length)) {
719
- el.classList.add('is-invalid');
720
- res.ok = !1;
721
- res.messages.push({
722
- en: 'Letter Count Must be = ' + length,
723
- ar: 'عدد الاحرف يجب ان يساوى ' + length,
724
- });
725
- }
726
- } else if (vl.like('e')) {
727
- if (el.nodeName === 'INPUT' && (!el.value || !site.isEmail(el.value))) {
728
- el.classList.add('is-invalid');
729
- res.ok = !1;
730
- res.messages.push({
731
- en: 'Write Valid Email address',
732
- ar: 'اكتب البريد الالكترونى بطريقة صحيحة',
733
- });
734
- }
735
- } else if (vl.like('web') || vl.like('url')) {
736
- if (el.nodeName === 'INPUT' && (!el.value || !site.isURL(el.value))) {
737
- el.classList.add('is-invalid');
738
- res.ok = !1;
739
- res.messages.push({
740
- en: 'Write Valid Web address',
741
- ar: 'اكتب رابط الموقع بطريقة صحيحة',
742
- });
743
- }
458
+ n = _num.join('.');
459
+ }
460
+ if (!float) {
461
+ if (n && n.endsWith('.')) {
462
+ n = n + '00';
463
+ }
464
+ return n;
744
465
  } else {
466
+ return site.to_float(n);
745
467
  }
746
- });
747
- });
748
- return res;
749
- };
468
+ };
750
469
 
751
- site.isEmail = function (mail) {
752
- if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(mail)) {
753
- return true;
754
- }
755
- return false;
756
- };
757
- site.isURL = function (str) {
758
- var pattern = new RegExp(
759
- '^(https?:\\/\\/)?' + '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' + '((\\d{1,3}\\.){3}\\d{1,3}))' + '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' + '(\\?[;&a-z\\d%_.~+=-]*)?' + '(\\#[-a-z\\d_]*)?$',
760
- 'i'
761
- );
762
- return !!pattern.test(encodeURI(str));
763
- };
764
- let numbers = [
765
- {
766
- n: 1,
767
- i0: {
768
- ar: 'واحد',
769
- },
770
- i1: {
771
- ar: 'عشرة',
772
- },
773
- i2: {
774
- ar: 'مائة',
775
- },
776
- i3: {
777
- ar: 'الف',
778
- },
779
- i4: {
780
- ar: 'عشرة الاف',
781
- },
782
- },
783
- {
784
- n: 2,
785
- i0: {
786
- ar: 'اثنان ',
787
- },
788
- i1: {
789
- ar: 'عشرون',
790
- },
791
- i2: {
792
- ar: 'مائتان',
793
- },
794
- i3: {
795
- ar: 'الفان',
796
- },
797
- i4: {
798
- ar: 'عشرون الف',
799
- },
800
- },
801
- {
802
- n: 3,
803
- i0: {
804
- ar: 'ثلاثة',
805
- },
806
- i1: {
807
- ar: 'ثلاثون',
808
- },
809
- i2: {
810
- ar: 'ثلاثمائة',
811
- },
812
- i3: {
813
- ar: 'ثلاث الاف',
814
- },
815
- i4: {
816
- ar: 'ثلاثون الف',
817
- },
818
- },
819
- {
820
- n: 4,
821
- i0: {
822
- ar: 'اربعة',
823
- },
824
- i1: {
825
- ar: 'اربعون',
826
- },
827
- i2: {
828
- ar: 'اربعة مائة',
829
- },
830
- i3: {
831
- ar: 'اربعة الاف',
832
- },
833
- i4: {
834
- ar: 'اربعون الف',
835
- },
836
- },
837
- {
838
- n: 5,
839
- i0: {
840
- ar: 'خمسة',
841
- },
842
- i1: {
843
- ar: 'خمسون',
844
- },
845
- i2: {
846
- ar: 'خمسمائة',
847
- },
848
- i3: {
849
- ar: 'خمسة الاف',
850
- },
851
- i4: {
852
- ar: 'خمسون الف',
853
- },
854
- },
855
- {
856
- n: 6,
857
- i0: {
858
- ar: 'ستة',
859
- },
860
- i1: {
861
- ar: 'ستون',
862
- },
863
- i2: {
864
- ar: 'ستة مائة',
865
- },
866
- i3: {
867
- ar: 'ستة الااف',
868
- },
869
- i4: {
870
- ar: 'ستون الف',
871
- },
872
- },
873
- {
874
- n: 7,
875
- i0: {
876
- ar: 'سبعة',
877
- },
878
- i1: {
879
- ar: 'سبعون',
880
- },
881
- i2: {
882
- ar: 'سبعمائة',
883
- },
884
- i3: {
885
- ar: 'سبعة الااف',
886
- },
887
- i4: {
888
- ar: 'سبعون الف',
889
- },
890
- },
891
- {
892
- n: 8,
893
- i0: {
894
- ar: 'ثمانية',
895
- },
896
- i1: {
897
- ar: 'ثمانون',
898
- },
899
- i2: {
900
- ar: 'ثمانمائة',
901
- },
902
- i3: {
903
- ar: 'ثمان الااف',
904
- },
905
- i4: {
906
- ar: 'ثمانون الف',
907
- },
908
- },
909
- {
910
- n: 9,
911
- i0: {
912
- ar: 'تسعة',
913
- },
914
- i1: {
915
- ar: 'تسعون',
916
- },
917
- i2: {
918
- ar: 'تسعمائة',
919
- },
920
- i3: {
921
- ar: 'تسعة الااف',
922
- },
923
- i4: {
924
- ar: 'تسعون الف',
925
- },
926
- },
927
- {
928
- n: 11,
929
- i0: {
930
- ar: 'احدى عشر',
931
- },
932
- },
933
- {
934
- n: 12,
935
- i0: {
936
- ar: 'اثنى عشر',
937
- },
938
- },
939
- ];
940
-
941
- site.strings = {
942
- and: {
943
- ar: 'و',
944
- },
945
- space: {
946
- ar: ' ',
947
- },
948
- 10: {
949
- ar: 'آلاف',
950
- },
951
- 20: {
952
- ar: 'ألفاً',
953
- },
954
- 100: {
955
- ar: 'ألف',
956
- },
957
- currency: {
958
- ar: ' جنيها مصريا فقط لاغير ',
959
- },
960
- from10: {
961
- ar: ' قروش ',
962
- },
963
- from100: {
964
- ar: ' قرش ',
965
- },
966
- from1000: {
967
- ar: ' من الف ',
968
- },
969
- };
970
-
971
- function get1num(num, lang) {
972
- let s = '';
973
- numbers.forEach((n) => {
974
- if (n.n == num) {
975
- s = n.i0[lang];
976
- }
977
- });
978
- return s;
979
- }
980
-
981
- function get2num(num, lang) {
982
- let s = '';
983
- if (num == 11) {
984
- numbers.forEach((n) => {
985
- if (n.n == num) {
986
- s = n.i0[lang];
987
- }
988
- });
989
- } else if (num == 12) {
990
- numbers.forEach((n) => {
991
- if (n.n == num) {
992
- s = n.i0[lang];
993
- }
994
- });
995
- } else {
996
- numbers.forEach((n) => {
997
- if (n.n == num[1]) {
998
- s = n.i0[lang];
999
- }
1000
- });
1001
-
1002
- numbers.forEach((n) => {
1003
- if (n.n == num[0]) {
1004
- if (num[1] > 0 && num[0] > 1) {
1005
- s += site.strings['space'][lang] + site.strings['and'][lang];
1006
- } else {
1007
- s += '';
1008
- }
1009
- s += n.i1[lang];
1010
- }
1011
- });
1012
- }
1013
- return s;
1014
- }
1015
-
1016
- function get3num(num, lang) {
1017
- let s = '';
1018
- numbers.forEach((n) => {
1019
- if (n.n == num[0]) {
1020
- s = n.i2[lang] + site.strings['space'][lang];
1021
- }
1022
- });
470
+ site.to_float = site.toFloat = function (_num) {
471
+ if (_num) {
472
+ return parseFloat(_num);
473
+ }
474
+ return 0;
475
+ };
1023
476
 
1024
- let n2 = get2num(num.substring(1), lang);
1025
- if (n2) {
1026
- if (s) {
1027
- s += site.strings['and'][lang];
1028
- }
1029
- s += n2;
1030
- }
1031
- return s;
1032
- }
1033
-
1034
- function get4num(num, lang) {
1035
- let s = '';
1036
- numbers.forEach((n) => {
1037
- if (n.n == num[0]) {
1038
- s = n.i3[lang] + site.strings['space'][lang];
1039
- }
1040
- });
477
+ site.to_int = site.toInt = function (_num) {
478
+ if (_num) {
479
+ return parseInt(_num);
480
+ }
481
+ return 0;
482
+ };
1041
483
 
1042
- let n3 = get3num(num.substring(1), lang);
1043
- if (n3) {
1044
- if (s) {
1045
- s += site.strings['and'][lang];
1046
- }
1047
- s += n3;
1048
- }
1049
- return s;
1050
- }
1051
-
1052
- function get5num(num, lang) {
1053
- let s = get2num(num.substring(0, 2), lang) + site.strings['space'][lang];
1054
- if (num[0] == 1) {
1055
- s += site.strings['10'][lang] + site.strings['space'][lang];
1056
- } else {
1057
- s += site.strings['20'][lang] + site.strings['space'][lang];
1058
- }
1059
- let n3 = get3num(num.substring(2), lang);
1060
- if (n3) {
1061
- s += site.strings['and'][lang] + n3;
484
+ site.$base64Letter = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
485
+ site.$base64Numbers = [];
486
+ for (let $i = 11; $i < 99; $i++) {
487
+ if ($i % 10 !== 0 && $i % 11 !== 0) {
488
+ site.$base64Numbers.push($i);
489
+ }
1062
490
  }
1063
491
 
1064
- return s;
1065
- }
1066
- function get6num(num, lang) {
1067
- let s = get3num(num.substring(0, 3), lang) + site.strings['space'][lang];
492
+ site.toJson = (obj) => {
493
+ if (typeof obj === undefined || obj === null) {
494
+ return '';
495
+ }
496
+ return JSON.stringify(obj);
497
+ };
1068
498
 
1069
- s += site.strings['100'][lang] + site.strings['space'][lang];
499
+ site.fromJson = (str) => {
500
+ if (typeof str !== 'string') {
501
+ return str;
502
+ }
503
+ return JSON.parse(str);
504
+ };
1070
505
 
1071
- let n3 = get3num(num.substring(3), lang);
1072
- if (n3) {
1073
- s += site.strings['and'][lang] + n3;
1074
- }
506
+ site.toBase64 = (str) => {
507
+ if (typeof str === undefined || str === null || str === '') {
508
+ return '';
509
+ }
510
+ if (typeof str !== 'string') {
511
+ str = site.toJson(str);
512
+ }
1075
513
 
1076
- return s;
1077
- }
1078
- site.stringfiy = function (_num, lang) {
1079
- _num = _num || '';
1080
- lang = lang || 'ar';
1081
- _num = _num.toString().split('.');
1082
-
1083
- let num = _num[0];
1084
- let num2 = _num[1];
1085
-
1086
- let s = '';
1087
- if (num.length == 1) {
1088
- s = get1num(num, lang);
1089
- } else if (num.length == 2) {
1090
- s = get2num(num, lang);
1091
- } else if (num.length == 3) {
1092
- s = get3num(num, lang);
1093
- } else if (num.length == 4) {
1094
- s = get4num(num, lang);
1095
- } else if (num.length == 5) {
1096
- s = get5num(num, lang);
1097
- } else if (num.length == 6) {
1098
- s = get6num(num, lang);
1099
- }
514
+ return Base64.encode(str);
515
+ return window.btoa(unescape(encodeURIComponent(str)));
516
+ };
1100
517
 
1101
- let s2 = '';
518
+ site.fromBase64 = (str) => {
519
+ if (typeof str === undefined || str === null || str === '') {
520
+ return '';
521
+ }
522
+ return Base64.decode(str);
523
+ return decodeURIComponent(escape(window.atob(str)));
524
+ };
1102
525
 
1103
- if (num2) {
1104
- if (num2.length == 1) {
1105
- num2 += '0';
1106
- }
526
+ site.to123 = (data) => {
527
+ data = site.toBase64(data);
528
+ let newData = '';
529
+ for (let i = 0; i < data.length; i++) {
530
+ let letter = data[i];
531
+ newData += site.$base64Numbers[site.$base64Letter.indexOf(letter)];
532
+ }
533
+ return newData;
534
+ };
1107
535
 
1108
- if (num2.length == 1) {
1109
- s2 = get1num(num2, lang) + site.strings['from10'][lang];
1110
- } else if (num2.length == 2) {
1111
- s2 = get2num(num2, lang) + site.strings['from100'][lang];
1112
- } else if (num2.length == 3) {
1113
- s2 = get3num(num2, lang) + site.strings['from1000'][lang];
1114
- }
1115
- }
536
+ site.from123 = (data) => {
537
+ let newData = '';
538
+ for (let i = 0; i < data.length; i++) {
539
+ let num = data[i] + data[i + 1];
540
+ let index = site.$base64Numbers.indexOf(parseInt(num));
541
+ newData += site.$base64Letter[index];
542
+ i++;
543
+ }
544
+ newData = site.fromBase64(newData);
545
+ return newData;
546
+ };
1116
547
 
1117
- s += site.strings['currency'][lang];
548
+ site.hide = site.hideObject = function (obj) {
549
+ return site.to123(JSON.stringify(obj));
550
+ };
551
+ site.show = site.showObject = function (obj) {
552
+ if (!obj) {
553
+ return {};
554
+ }
555
+ return JSON.parse(site.from123(obj));
556
+ };
1118
557
 
1119
- if (s2) {
1120
- s += site.strings['space'][lang] + site.strings['and'][lang] + site.strings['space'][lang] + s2;
1121
- }
1122
- return s;
1123
- };
1124
-
1125
- site.ws = function (options, callback) {
1126
- if ('WebSocket' in window) {
1127
- if (typeof options === 'string') {
1128
- options = {
1129
- url: options,
558
+ site.typeOf = site.typeof = function type(elem) {
559
+ return Object.prototype.toString.call(elem).slice(8, -1);
560
+ };
561
+
562
+ site.showTabContent = function (e, tabContentSelector) {
563
+ tabContentSelector = tabContentSelector || e;
564
+ let parent = document;
565
+ if (e && e.target && e.target.parentNode && e.target.parentNode.parentNode) {
566
+ parent = e.target.parentNode.parentNode;
567
+ }
568
+ if (parent && parent.className && parent.className.contains('tabs-header')) {
569
+ parent = parent.parentNode;
570
+ }
571
+ let tabContent = parent.querySelector(tabContentSelector);
572
+ if (tabContent) {
573
+ let tabHeader = tabContent.parentNode;
574
+ if (tabHeader) {
575
+ let tabs = tabHeader.parentNode;
576
+ if (tabs) {
577
+ tabs.querySelectorAll('.tab-content').forEach((tabContent) => {
578
+ tabContent.style.display = 'none';
579
+ });
580
+ tabs.querySelectorAll('.tab-link').forEach((tabLink) => {
581
+ if (tabLink.getAttribute('onclick') && tabLink.getAttribute('onclick').contains(tabContentSelector + "'")) {
582
+ tabLink.classList.add('active');
583
+ } else {
584
+ tabLink.classList.remove('active');
585
+ }
586
+ });
587
+
588
+ tabs.querySelectorAll(tabContentSelector + '.tab-content').forEach((el) => {
589
+ el.style.display = 'block';
590
+ });
591
+ }
592
+ }
593
+ }
594
+ };
595
+
596
+ site.showTabs = function (e, tabSelector) {
597
+ if (e) {
598
+ e.stopPropagation();
599
+ }
600
+
601
+ $('.main-menu .tabs').hide();
602
+ $(tabSelector).show(100);
603
+ };
604
+
605
+ site.toHtmlTable = function (obj) {
606
+ if (obj === undefined || obj === null) {
607
+ return '';
608
+ }
609
+ if (site.typeOf(obj) == 'Object') {
610
+ let table = '<table class="table">';
611
+ for (let index = 0; index < Object.getOwnPropertyNames(obj).length; index++) {
612
+ let p = Object.getOwnPropertyNames(obj)[index];
613
+ table += '<tr>';
614
+ table += `<td><p> ${p} </p></td>`;
615
+ if (site.typeOf(obj[p]) == 'Object' || site.typeOf(obj[p]) == 'Array') {
616
+ table += `<td><p> ${site.toHtmlTable(obj[p])} </p></td>`;
617
+ } else {
618
+ table += `<td><p> ${obj[p]} </p></td>`;
619
+ }
620
+
621
+ table += '</tr>';
622
+ }
623
+ table += '</table>';
624
+ return table;
625
+ } else if (site.typeOf(obj) == 'Array') {
626
+ let table = '<table class="table">';
627
+ for (let i = 0; i < obj.length; i++) {
628
+ if (site.typeOf(obj[i]) == 'Object' || site.typeOf(obj[i]) == 'Array') {
629
+ table += `<tr><td><p>${site.toHtmlTable(obj[i])}</p></td></tr>`;
630
+ } else {
631
+ table += `<tr><td><p>${obj[i]}</p></td></tr>`;
632
+ }
633
+ }
634
+ table += '</table>';
635
+ return table;
636
+ }
637
+ return '';
638
+ };
639
+
640
+ site.resetValidated = function (s) {
641
+ s = s || 'body';
642
+ const arr = document.querySelectorAll(s + ' [v]');
643
+ arr.forEach((el) => {
644
+ el.classList.remove('is-invalid');
645
+ el.classList.remove('is-valid');
646
+ });
647
+ };
648
+
649
+ site.validated = function (s) {
650
+ const res = {
651
+ ok: !0,
652
+ messages: [],
1130
653
  };
1131
- }
1132
- let ws = new WebSocket(options.url);
1133
- let server = {
1134
- ws: ws,
1135
- options: options,
1136
- closed: true,
1137
- onError: (error) => {
1138
- console.log('server.onError Not Implement ... ');
654
+
655
+ s = s || 'body';
656
+ const arr = document.querySelectorAll(s + ' [v]');
657
+ arr.forEach((el) => {
658
+ el.classList.remove('is-invalid');
659
+ el.classList.remove('is-valid');
660
+ const v = el.getAttribute('v');
661
+ const vList = v.split(' ');
662
+ vList.forEach((vl) => {
663
+ vl = vl.toLowerCase().trim();
664
+ if (vl === 'r') {
665
+ if ((el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.like('*undefined*'))) {
666
+ el.classList.add('is-invalid');
667
+ if ((f = el.parentNode.querySelector('.invalid-feedback'))) {
668
+ if (site.session && site.session.language.id.like('*en*')) {
669
+ f.innerHTML = 'Data Is Required';
670
+ } else if (site.session && site.session.language.id.like('*ar*')) {
671
+ f.innerHTML = 'هذا البيان مطلوب';
672
+ }
673
+ }
674
+ res.ok = !1;
675
+ res.messages.push({
676
+ en: 'Data Is Required',
677
+ ar: 'هذا البيان مطلوب',
678
+ });
679
+ } else if (el.nodeName === 'I-DATETIME' && !el.getAttribute('value')) {
680
+ el.classList.add('is-invalid');
681
+ res.ok = !1;
682
+ res.messages.push({
683
+ en: 'Data Is Required',
684
+ ar: 'هذا البيان مطلوب',
685
+ });
686
+ } else if (el.nodeName === 'I-DATE' && !el.getAttribute('value')) {
687
+ el.classList.add('is-invalid');
688
+ res.ok = !1;
689
+ res.messages.push({
690
+ en: 'Data Is Required',
691
+ ar: 'هذا البيان مطلوب',
692
+ });
693
+ } else if (el.nodeName === 'INPUT' || el.nodeName === 'SELECT' || el.nodeName === 'TEXTAREA' || el.nodeName === 'I-DATETIME' || el.nodeName === 'I-DATE') {
694
+ el.classList.add('is-valid');
695
+ }
696
+ } else if (vl.like('ml*')) {
697
+ const length = parseInt(vl.replace('ml', ''));
698
+ if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length > length)) {
699
+ el.classList.add('is-invalid');
700
+ res.ok = !1;
701
+ res.messages.push({
702
+ en: 'Letter Count Must be <= ' + length,
703
+ ar: 'عدد الاحرف يجب ان يكون أقل من أو يساوى ' + length,
704
+ });
705
+ }
706
+ } else if (vl.like('ll*')) {
707
+ const length = parseInt(vl.replace('ll', ''));
708
+ if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length < length)) {
709
+ el.classList.add('is-invalid');
710
+ res.ok = !1;
711
+ res.messages.push({
712
+ en: 'Letter Count Must be >= ' + length,
713
+ ar: 'عدد الاحرف يجب ان يكون اكبر من أو يساوى ' + length,
714
+ });
715
+ }
716
+ } else if (vl.like('l*')) {
717
+ const length = parseInt(vl.replace('l', ''));
718
+ if ((el.nodeName === 'INPUT' || el.nodeName === 'TEXTAREA') && (!el.value || el.value.length !== length)) {
719
+ el.classList.add('is-invalid');
720
+ res.ok = !1;
721
+ res.messages.push({
722
+ en: 'Letter Count Must be = ' + length,
723
+ ar: 'عدد الاحرف يجب ان يساوى ' + length,
724
+ });
725
+ }
726
+ } else if (vl.like('e')) {
727
+ if (el.nodeName === 'INPUT' && (!el.value || !site.isEmail(el.value))) {
728
+ el.classList.add('is-invalid');
729
+ res.ok = !1;
730
+ res.messages.push({
731
+ en: 'Write Valid Email address',
732
+ ar: 'اكتب البريد الالكترونى بطريقة صحيحة',
733
+ });
734
+ }
735
+ } else if (vl.like('web') || vl.like('url')) {
736
+ if (el.nodeName === 'INPUT' && (!el.value || !site.isURL(el.value))) {
737
+ el.classList.add('is-invalid');
738
+ res.ok = !1;
739
+ res.messages.push({
740
+ en: 'Write Valid Web address',
741
+ ar: 'اكتب رابط الموقع بطريقة صحيحة',
742
+ });
743
+ }
744
+ } else {
745
+ }
746
+ });
747
+ });
748
+ return res;
749
+ };
750
+
751
+ site.isEmail = function (mail) {
752
+ if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(mail)) {
753
+ return true;
754
+ }
755
+ return false;
756
+ };
757
+ site.isURL = function (str) {
758
+ var pattern = new RegExp(
759
+ '^(https?:\\/\\/)?' +
760
+ '((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|' +
761
+ '((\\d{1,3}\\.){3}\\d{1,3}))' +
762
+ '(\\:\\d+)?(\\/[-a-z\\d%_.~+]*)*' +
763
+ '(\\?[;&a-z\\d%_.~+=-]*)?' +
764
+ '(\\#[-a-z\\d_]*)?$',
765
+ 'i',
766
+ );
767
+ return !!pattern.test(encodeURI(str));
768
+ };
769
+ let numbers = [
770
+ {
771
+ n: 1,
772
+ i0: {
773
+ ar: 'واحد',
774
+ },
775
+ i1: {
776
+ ar: 'عشرة',
777
+ },
778
+ i2: {
779
+ ar: 'مائة',
780
+ },
781
+ i3: {
782
+ ar: 'الف',
783
+ },
784
+ i4: {
785
+ ar: 'عشرة الاف',
786
+ },
1139
787
  },
1140
- onClose: function (event) {
1141
- if (event.wasClean) {
1142
- console.log(`[ws closed] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
1143
- } else {
1144
- console.warn('[ws closed] Connection died');
1145
-
1146
- setTimeout(() => {
1147
- site.ws(options, callback);
1148
- }, 1000 * 5);
1149
- }
788
+ {
789
+ n: 2,
790
+ i0: {
791
+ ar: 'اثنان ',
792
+ },
793
+ i1: {
794
+ ar: 'عشرون',
795
+ },
796
+ i2: {
797
+ ar: 'مائتان',
798
+ },
799
+ i3: {
800
+ ar: 'الفان',
801
+ },
802
+ i4: {
803
+ ar: 'عشرون الف',
804
+ },
1150
805
  },
1151
- onOpen: () => {
1152
- console.log('server.onOpen Not Implement ... ');
806
+ {
807
+ n: 3,
808
+ i0: {
809
+ ar: 'ثلاثة',
810
+ },
811
+ i1: {
812
+ ar: 'ثلاثون',
813
+ },
814
+ i2: {
815
+ ar: 'ثلاثمائة',
816
+ },
817
+ i3: {
818
+ ar: 'ثلاث الاف',
819
+ },
820
+ i4: {
821
+ ar: 'ثلاثون الف',
822
+ },
1153
823
  },
1154
- onMessage: () => {
1155
- console.log('server.onMessage Not Implement ... ');
824
+ {
825
+ n: 4,
826
+ i0: {
827
+ ar: 'اربعة',
828
+ },
829
+ i1: {
830
+ ar: 'اربعون',
831
+ },
832
+ i2: {
833
+ ar: 'اربعة مائة',
834
+ },
835
+ i3: {
836
+ ar: 'اربعة الاف',
837
+ },
838
+ i4: {
839
+ ar: 'اربعون الف',
840
+ },
1156
841
  },
1157
- onData: () => {
1158
- console.log('server.onData Not Implement ... ');
842
+ {
843
+ n: 5,
844
+ i0: {
845
+ ar: 'خمسة',
846
+ },
847
+ i1: {
848
+ ar: 'خمسون',
849
+ },
850
+ i2: {
851
+ ar: 'خمسمائة',
852
+ },
853
+ i3: {
854
+ ar: 'خمسة الاف',
855
+ },
856
+ i4: {
857
+ ar: 'خمسون الف',
858
+ },
1159
859
  },
1160
- sendMessage: function (msg) {
1161
- if (this.closed) {
1162
- return false;
1163
- }
1164
- if (typeof msg !== 'object') {
1165
- msg = {
1166
- type: 'text',
1167
- content: msg,
1168
- };
1169
- }
1170
- this.ws.send(JSON.stringify(msg));
860
+ {
861
+ n: 6,
862
+ i0: {
863
+ ar: 'ستة',
864
+ },
865
+ i1: {
866
+ ar: 'ستون',
867
+ },
868
+ i2: {
869
+ ar: 'ستة مائة',
870
+ },
871
+ i3: {
872
+ ar: 'ستة الااف',
873
+ },
874
+ i4: {
875
+ ar: 'ستون الف',
876
+ },
1171
877
  },
1172
- };
1173
- server.send = server.sendMessage;
1174
- ws.onerror = function (error) {
1175
- server.onError(error);
1176
- };
1177
- ws.onclose = function (event) {
1178
- server.closed = true;
1179
- server.onClose(event);
1180
- };
1181
-
1182
- ws.onopen = function () {
1183
- server.closed = false;
1184
- server.onOpen();
1185
- };
1186
-
1187
- ws.onmessage = function (message) {
1188
- if (message instanceof Blob) {
1189
- server.onData(message);
1190
- } else {
1191
- message = JSON.parse(message.data);
1192
- if (message.type) {
1193
- if (message.type === 'ping') {
1194
- server.sendMessage({
1195
- type: 'pong',
1196
- });
1197
- } else if (message.type === 'ready') {
1198
- server.uuid = message.uuid;
1199
- server.ip = message.ip;
1200
- server.id = message.id;
1201
- if (site.serverId) {
1202
- server.sendMessage({
1203
- type: 'attach',
1204
- id: site.serverId,
1205
- });
1206
- } else {
1207
- site.serverId = server.id;
1208
- }
1209
- } else if (message.type === 'attached') {
1210
- server.uuid = message.uuid;
1211
- server.ip = message.ip;
1212
- server.id = message.id;
878
+ {
879
+ n: 7,
880
+ i0: {
881
+ ar: 'سبعة',
882
+ },
883
+ i1: {
884
+ ar: 'سبعون',
885
+ },
886
+ i2: {
887
+ ar: 'سبعمائة',
888
+ },
889
+ i3: {
890
+ ar: 'سبعة الااف',
891
+ },
892
+ i4: {
893
+ ar: 'سبعون الف',
894
+ },
895
+ },
896
+ {
897
+ n: 8,
898
+ i0: {
899
+ ar: 'ثمانية',
900
+ },
901
+ i1: {
902
+ ar: 'ثمانون',
903
+ },
904
+ i2: {
905
+ ar: 'ثمانمائة',
906
+ },
907
+ i3: {
908
+ ar: 'ثمان الااف',
909
+ },
910
+ i4: {
911
+ ar: 'ثمانون الف',
912
+ },
913
+ },
914
+ {
915
+ n: 9,
916
+ i0: {
917
+ ar: 'تسعة',
918
+ },
919
+ i1: {
920
+ ar: 'تسعون',
921
+ },
922
+ i2: {
923
+ ar: 'تسعمائة',
924
+ },
925
+ i3: {
926
+ ar: 'تسعة الااف',
927
+ },
928
+ i4: {
929
+ ar: 'تسعون الف',
930
+ },
931
+ },
932
+ {
933
+ n: 11,
934
+ i0: {
935
+ ar: 'احدى عشر',
936
+ },
937
+ },
938
+ {
939
+ n: 12,
940
+ i0: {
941
+ ar: 'اثنى عشر',
942
+ },
943
+ },
944
+ ];
945
+
946
+ site.strings = {
947
+ and: {
948
+ ar: 'و',
949
+ },
950
+ space: {
951
+ ar: ' ',
952
+ },
953
+ 10: {
954
+ ar: 'آلاف',
955
+ },
956
+ 20: {
957
+ ar: 'ألفاً',
958
+ },
959
+ 100: {
960
+ ar: 'ألف',
961
+ },
962
+ currency: {
963
+ ar: ' جنيها مصريا فقط لاغير ',
964
+ },
965
+ from10: {
966
+ ar: ' قروش ',
967
+ },
968
+ from100: {
969
+ ar: ' قرش ',
970
+ },
971
+ from1000: {
972
+ ar: ' من الف ',
973
+ },
974
+ };
975
+
976
+ function get1num(num, lang) {
977
+ let s = '';
978
+ numbers.forEach((n) => {
979
+ if (n.n == num) {
980
+ s = n.i0[lang];
1213
981
  }
1214
- }
1215
- server.onMessage(message);
1216
- }
1217
- };
1218
- site.server = server;
1219
- callback(site.server);
1220
- return site.server;
1221
- } else {
1222
- console.error('WebSocket Not Supported');
1223
- }
1224
- };
1225
-
1226
- site.hex = function (txt) {
1227
- if (typeof txt == 'string') {
1228
- const encoder = new TextEncoder();
1229
- return Array.from(encoder.encode(txt))
1230
- .map((b) => b.toString(16).padStart(2, '0'))
1231
- .join('');
1232
- } else if (typeof txt == 'number') {
1233
- let value = txt.toString(16);
1234
- if (value.length == 1) {
1235
- value = '0' + value;
1236
- }
1237
- return value;
1238
- }
1239
- };
1240
- site.zakat = function (obj) {
1241
- let value = '';
1242
- if (obj.name) {
1243
- value += '01' + site.hex(obj.name.length) + site.hex(obj.name);
1244
- }
1245
- if (obj.vat_number) {
1246
- value += '02' + site.hex(obj.vat_number.length) + site.hex(obj.vat_number);
1247
- }
1248
- if (obj.time) {
1249
- value += '03' + site.hex(obj.time.length) + site.hex(obj.time);
982
+ });
983
+ return s;
1250
984
  }
1251
- if (obj.total) {
1252
- value += '04' + site.hex(obj.total.length) + site.hex(obj.total);
985
+
986
+ function get2num(num, lang) {
987
+ let s = '';
988
+ if (num == 11) {
989
+ numbers.forEach((n) => {
990
+ if (n.n == num) {
991
+ s = n.i0[lang];
992
+ }
993
+ });
994
+ } else if (num == 12) {
995
+ numbers.forEach((n) => {
996
+ if (n.n == num) {
997
+ s = n.i0[lang];
998
+ }
999
+ });
1000
+ } else {
1001
+ numbers.forEach((n) => {
1002
+ if (n.n == num[1]) {
1003
+ s = n.i0[lang];
1004
+ }
1005
+ });
1006
+
1007
+ numbers.forEach((n) => {
1008
+ if (n.n == num[0]) {
1009
+ if (num[1] > 0 && num[0] > 1) {
1010
+ s += site.strings['space'][lang] + site.strings['and'][lang];
1011
+ } else {
1012
+ s += '';
1013
+ }
1014
+ s += n.i1[lang];
1015
+ }
1016
+ });
1017
+ }
1018
+ return s;
1253
1019
  }
1254
- if (obj.vat_total) {
1255
- value += '05' + site.hex(obj.vat_total.length) + site.hex(obj.vat_total);
1020
+
1021
+ function get3num(num, lang) {
1022
+ let s = '';
1023
+ numbers.forEach((n) => {
1024
+ if (n.n == num[0]) {
1025
+ s = n.i2[lang] + site.strings['space'][lang];
1026
+ }
1027
+ });
1028
+
1029
+ let n2 = get2num(num.substring(1), lang);
1030
+ if (n2) {
1031
+ if (s) {
1032
+ s += site.strings['and'][lang];
1033
+ }
1034
+ s += n2;
1035
+ }
1036
+ return s;
1256
1037
  }
1257
- return site.toBase64(value);
1258
- };
1259
-
1260
- site.zakat2 = function (obj, callback) {
1261
- fetch('/x-api/zakat', { method: 'POST', body: JSON.stringify(obj) })
1262
- .then((res) => res.json())
1263
- .then((data) => {
1264
- callback(data);
1265
- });
1266
- };
1267
-
1268
- site.barcode = function (options) {
1269
- if (!options || !options.selector || !options.text) {
1270
- console.error('qrcode need {selector , text}');
1271
- return;
1038
+
1039
+ function get4num(num, lang) {
1040
+ let s = '';
1041
+ numbers.forEach((n) => {
1042
+ if (n.n == num[0]) {
1043
+ s = n.i3[lang] + site.strings['space'][lang];
1044
+ }
1045
+ });
1046
+
1047
+ let n3 = get3num(num.substring(1), lang);
1048
+ if (n3) {
1049
+ if (s) {
1050
+ s += site.strings['and'][lang];
1051
+ }
1052
+ s += n3;
1053
+ }
1054
+ return s;
1272
1055
  }
1273
- return JsBarcode(options.selector, options.text, options.options);
1274
- };
1275
- site.qrcode = function (options) {
1276
- if (!options || !options.selector || !options.text) {
1277
- console.error('qrcode need {selector , text}');
1278
- return;
1056
+
1057
+ function get5num(num, lang) {
1058
+ let s = get2num(num.substring(0, 2), lang) + site.strings['space'][lang];
1059
+ if (num[0] == 1) {
1060
+ s += site.strings['10'][lang] + site.strings['space'][lang];
1061
+ } else {
1062
+ s += site.strings['20'][lang] + site.strings['space'][lang];
1063
+ }
1064
+ let n3 = get3num(num.substring(2), lang);
1065
+ if (n3) {
1066
+ s += site.strings['and'][lang] + n3;
1067
+ }
1068
+
1069
+ return s;
1279
1070
  }
1071
+ function get6num(num, lang) {
1072
+ let s = get3num(num.substring(0, 3), lang) + site.strings['space'][lang];
1073
+
1074
+ s += site.strings['100'][lang] + site.strings['space'][lang];
1280
1075
 
1281
- let dom = typeof options.selector == 'string' ? document.querySelector(options.selector) : options.selector;
1282
- if (dom) {
1283
- dom.innerHTML = '';
1284
- /*if (192 <= options.text.length <= 217) {
1076
+ let n3 = get3num(num.substring(3), lang);
1077
+ if (n3) {
1078
+ s += site.strings['and'][lang] + n3;
1079
+ }
1080
+
1081
+ return s;
1082
+ }
1083
+ site.stringfiy = function (_num, lang) {
1084
+ _num = _num || '';
1085
+ lang = lang || 'ar';
1086
+ _num = _num.toString().split('.');
1087
+
1088
+ let num = _num[0];
1089
+ let num2 = _num[1];
1090
+
1091
+ let s = '';
1092
+ if (num.length == 1) {
1093
+ s = get1num(num, lang);
1094
+ } else if (num.length == 2) {
1095
+ s = get2num(num, lang);
1096
+ } else if (num.length == 3) {
1097
+ s = get3num(num, lang);
1098
+ } else if (num.length == 4) {
1099
+ s = get4num(num, lang);
1100
+ } else if (num.length == 5) {
1101
+ s = get5num(num, lang);
1102
+ } else if (num.length == 6) {
1103
+ s = get6num(num, lang);
1104
+ }
1105
+
1106
+ let s2 = '';
1107
+
1108
+ if (num2) {
1109
+ if (num2.length == 1) {
1110
+ num2 += '0';
1111
+ }
1112
+
1113
+ if (num2.length == 1) {
1114
+ s2 = get1num(num2, lang) + site.strings['from10'][lang];
1115
+ } else if (num2.length == 2) {
1116
+ s2 = get2num(num2, lang) + site.strings['from100'][lang];
1117
+ } else if (num2.length == 3) {
1118
+ s2 = get3num(num2, lang) + site.strings['from1000'][lang];
1119
+ }
1120
+ }
1121
+
1122
+ s += site.strings['currency'][lang];
1123
+
1124
+ if (s2) {
1125
+ s += site.strings['space'][lang] + site.strings['and'][lang] + site.strings['space'][lang] + s2;
1126
+ }
1127
+ return s;
1128
+ };
1129
+
1130
+ site.ws = function (options, callback) {
1131
+ if ('WebSocket' in window) {
1132
+ if (typeof options === 'string') {
1133
+ options = {
1134
+ url: options,
1135
+ };
1136
+ }
1137
+ let ws = new WebSocket(options.url);
1138
+ let server = {
1139
+ ws: ws,
1140
+ options: options,
1141
+ closed: true,
1142
+ onError: (error) => {
1143
+ console.log('server.onError Not Implement ... ');
1144
+ },
1145
+ onClose: function (event) {
1146
+ if (event.wasClean) {
1147
+ console.log(`[ws closed] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
1148
+ } else {
1149
+ console.warn('[ws closed] Connection died');
1150
+
1151
+ setTimeout(() => {
1152
+ site.ws(options, callback);
1153
+ }, 1000 * 5);
1154
+ }
1155
+ },
1156
+ onOpen: () => {
1157
+ console.log('server.onOpen Not Implement ... ');
1158
+ },
1159
+ onMessage: () => {
1160
+ console.log('server.onMessage Not Implement ... ');
1161
+ },
1162
+ onData: () => {
1163
+ console.log('server.onData Not Implement ... ');
1164
+ },
1165
+ sendMessage: function (msg) {
1166
+ if (this.closed) {
1167
+ return false;
1168
+ }
1169
+ if (typeof msg !== 'object') {
1170
+ msg = {
1171
+ type: 'text',
1172
+ content: msg,
1173
+ };
1174
+ }
1175
+ this.ws.send(JSON.stringify(msg));
1176
+ },
1177
+ };
1178
+ server.send = server.sendMessage;
1179
+ ws.onerror = function (error) {
1180
+ server.onError(error);
1181
+ };
1182
+ ws.onclose = function (event) {
1183
+ server.closed = true;
1184
+ server.onClose(event);
1185
+ };
1186
+
1187
+ ws.onopen = function () {
1188
+ server.closed = false;
1189
+ server.onOpen();
1190
+ };
1191
+
1192
+ ws.onmessage = function (message) {
1193
+ if (message instanceof Blob) {
1194
+ server.onData(message);
1195
+ } else {
1196
+ message = JSON.parse(message.data);
1197
+ if (message.type) {
1198
+ if (message.type === 'ping') {
1199
+ server.sendMessage({
1200
+ type: 'pong',
1201
+ });
1202
+ } else if (message.type === 'ready') {
1203
+ server.uuid = message.uuid;
1204
+ server.ip = message.ip;
1205
+ server.id = message.id;
1206
+ if (site.serverId) {
1207
+ server.sendMessage({
1208
+ type: 'attach',
1209
+ id: site.serverId,
1210
+ });
1211
+ } else {
1212
+ site.serverId = server.id;
1213
+ }
1214
+ } else if (message.type === 'attached') {
1215
+ server.uuid = message.uuid;
1216
+ server.ip = message.ip;
1217
+ server.id = message.id;
1218
+ }
1219
+ }
1220
+ server.onMessage(message);
1221
+ }
1222
+ };
1223
+ site.server = server;
1224
+ callback(site.server);
1225
+ return site.server;
1226
+ } else {
1227
+ console.error('WebSocket Not Supported');
1228
+ }
1229
+ };
1230
+
1231
+ site.hex = function (txt) {
1232
+ if (typeof txt == 'string') {
1233
+ const encoder = new TextEncoder();
1234
+ return Array.from(encoder.encode(txt))
1235
+ .map((b) => b.toString(16).padStart(2, '0'))
1236
+ .join('');
1237
+ } else if (typeof txt == 'number') {
1238
+ let value = txt.toString(16);
1239
+ if (value.length == 1) {
1240
+ value = '0' + value;
1241
+ }
1242
+ return value;
1243
+ }
1244
+ };
1245
+ site.zakat = function (obj) {
1246
+ let value = '';
1247
+ if (obj.name) {
1248
+ value += '01' + site.hex(obj.name.length) + site.hex(obj.name);
1249
+ }
1250
+ if (obj.vat_number) {
1251
+ value += '02' + site.hex(obj.vat_number.length) + site.hex(obj.vat_number);
1252
+ }
1253
+ if (obj.time) {
1254
+ value += '03' + site.hex(obj.time.length) + site.hex(obj.time);
1255
+ }
1256
+ if (obj.total) {
1257
+ value += '04' + site.hex(obj.total.length) + site.hex(obj.total);
1258
+ }
1259
+ if (obj.vat_total) {
1260
+ value += '05' + site.hex(obj.vat_total.length) + site.hex(obj.vat_total);
1261
+ }
1262
+ return site.toBase64(value);
1263
+ };
1264
+
1265
+ site.zakat2 = function (obj, callback) {
1266
+ fetch('/x-api/zakat', { method: 'POST', body: JSON.stringify(obj) })
1267
+ .then((res) => res.json())
1268
+ .then((data) => {
1269
+ callback(data);
1270
+ });
1271
+ };
1272
+
1273
+ site.barcode = function (options) {
1274
+ if (!options || !options.selector || !options.text) {
1275
+ console.error('qrcode need {selector , text}');
1276
+ return;
1277
+ }
1278
+ return JsBarcode(options.selector, options.text, options.options);
1279
+ };
1280
+ site.qrcode = function (options) {
1281
+ if (!options || !options.selector || !options.text) {
1282
+ console.error('qrcode need {selector , text}');
1283
+ return;
1284
+ }
1285
+
1286
+ let dom = typeof options.selector == 'string' ? document.querySelector(options.selector) : options.selector;
1287
+ if (dom) {
1288
+ dom.innerHTML = '';
1289
+ /*if (192 <= options.text.length <= 217) {
1285
1290
  options.text = options.text.padEnd(220);
1286
1291
  }*/
1287
1292
 
1288
- return new QRCode(dom, {
1289
- text: options.text,
1290
- width: options.width || 256,
1291
- height: options.height || 256,
1292
- colorDark: options.colorDark || '#000000',
1293
- colorLight: options.colorLight || '#ffffff',
1294
- correctLevel: options.correctLevel || QRCode.CorrectLevel.H,
1295
- });
1296
- }
1297
- };
1298
-
1299
- site.export = function (table, type = 'xlsx') {
1300
- var data = typeof table === 'string' ? document.querySelector(table) : table;
1301
- var excelFile = XLSX.utils.table_to_book(data, { sheet: 'sheet1' });
1302
- XLSX.write(excelFile, { bookType: type, bookSST: true, type: 'base64' });
1303
- XLSX.writeFile(excelFile, (data.id || data.tagName) + '.' + type);
1304
- };
1305
-
1306
- site.isSPA = false;
1307
- site.routeContainer = '[router]';
1308
- site.routeList = [];
1309
- site.getRoute = (name) => {
1310
- return site.routeList.find((r) => r.name == name) || { name: name, url: name };
1311
- };
1312
- site.route = (event) => {
1313
- event.preventDefault();
1314
- site.setRoute(site.getRoute(event.target.href));
1315
- };
1316
- site.setRoute = function (route) {
1317
- if (typeof route === 'string') {
1318
- route = site.getRoute(route);
1319
- }
1320
- window.history.pushState({}, '', route.name);
1321
- };
1322
- site.getRouteContent = async (route) => {
1323
- if (typeof route === 'string') {
1324
- route = site.getRoute(route);
1325
- }
1326
- return await fetch(route.url).then((data) => data.text());
1327
- };
1328
- site.showRouteContent = function (selector, route) {
1329
- if (typeof route === 'string') {
1330
- route = site.getRoute(route);
1331
- }
1293
+ return new QRCode(dom, {
1294
+ text: options.text,
1295
+ width: options.width || 256,
1296
+ height: options.height || 256,
1297
+ colorDark: options.colorDark || '#000000',
1298
+ colorLight: options.colorLight || '#ffffff',
1299
+ correctLevel: options.correctLevel || QRCode.CorrectLevel.H,
1300
+ });
1301
+ }
1302
+ };
1332
1303
 
1333
- site.setRoute(route.name);
1334
- site.getRouteContent(route.url).then((html) => {
1335
- document.querySelector(selector).innerHTML = html;
1304
+ site.export = function (table, type = 'xlsx') {
1305
+ var data = typeof table === 'string' ? document.querySelector(table) : table;
1306
+ var excelFile = XLSX.utils.table_to_book(data, { sheet: 'sheet1' });
1307
+ XLSX.write(excelFile, { bookType: type, bookSST: true, type: 'base64' });
1308
+ XLSX.writeFile(excelFile, (data.id || data.tagName) + '.' + type);
1309
+ };
1310
+
1311
+ site.changeBrowserURL = function (url, state = {}) {
1312
+ window.history.pushState(state, '', url);
1313
+ };
1314
+ window.addEventListener('popstate', (e) => {
1315
+ if (e.state && e.state.pageTitle) {
1316
+ document.title = e.state.pageTitle;
1317
+ }
1336
1318
  });
1337
- };
1338
1319
 
1339
- document.addEventListener('click', (e) => {
1340
- if (!site.isSPA) {
1341
- return;
1342
- }
1343
- if (e.target.hasAttribute('route')) {
1344
- e.preventDefault();
1345
- let route = e.target.getAttribute('route') || e.target.getAttribute('href');
1346
- site.showRouteContent(site.routeContainer, route);
1347
- }
1348
- });
1349
- window.addEventListener('hashchange', (e) => {
1350
- if (!site.isSPA) {
1351
- return;
1352
- }
1353
- let route = window.location.hash.replace('#', '');
1354
- if (!route) {
1355
- route = '/';
1356
- }
1357
- site.showRouteContent(site.routeContainer, route);
1358
- });
1320
+ site.isSPA = false;
1321
+ site.routeContainer = '[router]';
1322
+ site.routeList = [];
1323
+ site.getRoute = (name) => {
1324
+ return site.routeList.find((r) => r.name == name) || { name: name, url: name };
1325
+ };
1326
+ site.route = (event) => {
1327
+ event.preventDefault();
1328
+ site.setRoute(site.getRoute(event.target.href));
1329
+ };
1330
+ site.setRoute = function (route) {
1331
+ if (typeof route === 'string') {
1332
+ route = site.getRoute(route);
1333
+ }
1334
+ window.history.pushState({}, '', route.name);
1335
+ };
1336
+ site.getRouteContent = async (route) => {
1337
+ if (typeof route === 'string') {
1338
+ route = site.getRoute(route);
1339
+ }
1340
+ return await fetch(route.url).then((data) => data.text());
1341
+ };
1342
+ site.showRouteContent = function (selector, route) {
1343
+ if (typeof route === 'string') {
1344
+ route = site.getRoute(route);
1345
+ }
1346
+
1347
+ site.setRoute(route.name);
1348
+ site.getRouteContent(route.url).then((html) => {
1349
+ document.querySelector(selector).innerHTML = html;
1350
+ });
1351
+ };
1359
1352
 
1360
- if (document.querySelector('html').hasAttribute('spa')) {
1361
- site.isSPA = true;
1362
- }
1353
+ document.addEventListener('click', (e) => {
1354
+ if (!site.isSPA) {
1355
+ return;
1356
+ }
1357
+ if (e.target.hasAttribute('route')) {
1358
+ e.preventDefault();
1359
+ let route = e.target.getAttribute('route') || e.target.getAttribute('href');
1360
+ site.showRouteContent(site.routeContainer, route);
1361
+ }
1362
+ });
1363
+ window.addEventListener('hashchange', (e) => {
1364
+ if (!site.isSPA) {
1365
+ return;
1366
+ }
1367
+ let route = window.location.hash.replace('#', '');
1368
+ if (!route) {
1369
+ route = '/';
1370
+ }
1371
+ site.showRouteContent(site.routeContainer, route);
1372
+ });
1363
1373
 
1364
- site.openLinks = function (links) {
1365
- if (links.length === 0) {
1366
- return false;
1374
+ if (document.querySelector('html').hasAttribute('spa')) {
1375
+ site.isSPA = true;
1367
1376
  }
1368
- let refererLinkList = localStorage.getItem('refererLinkList');
1369
- if (refererLinkList) {
1370
- refererLinkList = JSON.parse(refererLinkList);
1371
1377
 
1372
- refererLinkList.links.forEach((l, i) => {
1373
- if ((new Date().getTime() - l.time) / 1000 > 60 * 60 * 24 * 30) {
1374
- refererLinkList.links.splice(i, 1);
1378
+ site.openLinks = function (links) {
1379
+ if (links.length === 0) {
1380
+ return false;
1381
+ }
1382
+ let refererLinkList = localStorage.getItem('refererLinkList');
1383
+ if (refererLinkList) {
1384
+ refererLinkList = JSON.parse(refererLinkList);
1385
+
1386
+ refererLinkList.links.forEach((l, i) => {
1387
+ if ((new Date().getTime() - l.time) / 1000 > 60 * 60 * 24 * 30) {
1388
+ refererLinkList.links.splice(i, 1);
1389
+ }
1390
+ });
1391
+ localStorage.setItem('refererLinkList', JSON.stringify(refererLinkList));
1392
+ if (refererLinkList.day == new Date().getDate()) {
1393
+ return false;
1394
+ }
1395
+ } else {
1396
+ refererLinkList = { links: [] };
1375
1397
  }
1376
- });
1377
- localStorage.setItem('refererLinkList', JSON.stringify(refererLinkList));
1378
- if (refererLinkList.day == new Date().getDate()) {
1379
- return false;
1380
- }
1381
- } else {
1382
- refererLinkList = { links: [] };
1383
- }
1384
1398
 
1385
- let link = links.pop();
1386
- if (refererLinkList.links.some((l) => l.url == link.url)) {
1387
- site.openLinks(links);
1388
- } else {
1389
- refererLinkList.links.push({ ...link, time: new Date().getTime() });
1390
- refererLinkList.day = new Date().getDate();
1391
- localStorage.setItem('refererLinkList', JSON.stringify(refererLinkList));
1392
- if ((w = window.open(link.url))) {
1393
- } else {
1394
- document.location.href = link.url;
1395
- }
1396
- }
1397
- };
1398
-
1399
- site.updateRefererLinkList = function (options = {}) {
1400
- options.url = 'https://social-browser.com/api/ref-links?page=' + document.location.href;
1401
- site.postData(options, (data) => {
1402
- if (data.done && data.links) {
1403
- site.openLinks(data.links);
1404
- }
1405
- });
1406
- };
1407
-
1408
- site.getTelegramBot = function (options) {
1409
- options.fetch = function (endPoint, callback) {
1410
- if (window.SOCIALBROWSER) {
1411
- SOCIALBROWSER.fetchJson(
1412
- {
1413
- url: options.api + endPoint,
1414
- method: 'POST',
1415
- redirect: 'follow',
1416
- body: JSON.stringify(body),
1417
- },
1418
- (data) => {
1419
- if (callback) {
1420
- callback(data);
1399
+ let link = links.pop();
1400
+ if (refererLinkList.links.some((l) => l.url == link.url)) {
1401
+ site.openLinks(links);
1402
+ } else {
1403
+ refererLinkList.links.push({ ...link, time: new Date().getTime() });
1404
+ refererLinkList.day = new Date().getDate();
1405
+ localStorage.setItem('refererLinkList', JSON.stringify(refererLinkList));
1406
+ if ((w = window.open(link.url))) {
1407
+ } else {
1408
+ document.location.href = link.url;
1421
1409
  }
1422
- }
1423
- );
1424
- }
1410
+ }
1425
1411
  };
1426
1412
 
1427
- options.sendMessage = function (chatID, message, callback) {
1428
- if (chatID && message) {
1429
- options.chatID = chatID;
1430
- options.message = message;
1431
- options.fetch('/telegram/send-message');
1432
- }
1413
+ site.updateRefererLinkList = function (options = {}) {
1414
+ options.url = 'https://social-browser.com/api/ref-links?page=' + document.location.href;
1415
+ site.postData(options, (data) => {
1416
+ if (data.done && data.links) {
1417
+ site.openLinks(data.links);
1418
+ }
1419
+ });
1433
1420
  };
1434
1421
 
1435
- return options;
1436
- };
1422
+ site.getTelegramBot = function (options) {
1423
+ options.fetch = function (endPoint, callback) {
1424
+ if (window.SOCIALBROWSER) {
1425
+ SOCIALBROWSER.fetchJson(
1426
+ {
1427
+ url: options.api + endPoint,
1428
+ method: 'POST',
1429
+ redirect: 'follow',
1430
+ body: JSON.stringify(body),
1431
+ },
1432
+ (data) => {
1433
+ if (callback) {
1434
+ callback(data);
1435
+ }
1436
+ },
1437
+ );
1438
+ }
1439
+ };
1440
+
1441
+ options.sendMessage = function (chatID, message, callback) {
1442
+ if (chatID && message) {
1443
+ options.chatID = chatID;
1444
+ options.message = message;
1445
+ options.fetch('/telegram/send-message');
1446
+ }
1447
+ };
1448
+
1449
+ return options;
1450
+ };
1437
1451
 
1438
- site.createTelegramBot = function (options = {}) {
1439
- options.api = 'http://127.0.0.1:60080';
1440
- let bot = site.getTelegramBot(options);
1441
- bot.fetch('/telegram/connect');
1442
- return bot;
1443
- };
1452
+ site.createTelegramBot = function (options = {}) {
1453
+ options.api = 'http://127.0.0.1:60080';
1454
+ let bot = site.getTelegramBot(options);
1455
+ bot.fetch('/telegram/connect');
1456
+ return bot;
1457
+ };
1444
1458
 
1445
- site.connectTelegramBot = function (options = {}) {
1446
- options.api = 'https://social-browser.com';
1447
- let bot = site.getTelegramBot(options);
1448
- bot.fetch('/telegram/connect');
1449
- return bot;
1450
- };
1459
+ site.connectTelegramBot = function (options = {}) {
1460
+ options.api = 'https://social-browser.com';
1461
+ let bot = site.getTelegramBot(options);
1462
+ bot.fetch('/telegram/connect');
1463
+ return bot;
1464
+ };
1451
1465
 
1452
- window.site = site;
1466
+ window.site = site;
1453
1467
  })(window, document, 'undefined', jQuery);