szdl-utils-kit 0.3.30 → 0.3.32

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.
@@ -0,0 +1,1491 @@
1
+ const t = `;(function(){
2
+
3
+ 'use strict';
4
+
5
+ window.BX24 = {};
6
+
7
+ /***************** private properties ******************/
8
+ var
9
+ isInit = false,
10
+ initList = [],
11
+ installList = [],
12
+
13
+ /* ready props */
14
+ isReady = false,
15
+ readyList = [],
16
+
17
+ /* list of registered proxy functions */
18
+ proxySalt = Math.random(),
19
+ proxyId = 1,
20
+ proxyList = [],
21
+ proxyContext = null,
22
+
23
+ /* list of registered event handlers */
24
+ eventsList = [],
25
+
26
+ /* chars list for string id generator */
27
+ charsList = '0123456789abcdefghijklmnopqrstuvwxyz';
28
+
29
+ /*************** public section ***********************/
30
+
31
+ BX24.init = function(callback)
32
+ {
33
+ if(!!callback)
34
+ {
35
+ initList.push(callback);
36
+ }
37
+ };
38
+
39
+ BX24.install = function(callback)
40
+ {
41
+ if(!!callback)
42
+ {
43
+ installList.push(callback);
44
+ }
45
+ };
46
+
47
+ BX24.installFinish = function()
48
+ {
49
+ sendMessage('setInstallFinish',{});
50
+ };
51
+
52
+ BX24.callMethod = function(method, params, callback)
53
+ {
54
+ return ajax({
55
+ method: method,
56
+ data: params,
57
+ callback: callback
58
+ });
59
+ };
60
+
61
+ /*
62
+ calls = [[method,params],[method,params]];
63
+ calls = [{method:method,params:params},[method,params]];
64
+ calls = {call_id:[method,params],...};
65
+ */
66
+ BX24.callBatch = function(calls, callback, bHaltOnError)
67
+ {
68
+ var cmd = util.type.isArray(calls) ? [] : {}, cnt = 0, cb = function(cmd){
69
+ ajax.batch(cmd, callback, bHaltOnError);
70
+ };
71
+
72
+ for(var i in calls)
73
+ {
74
+ var method = null, params = null;
75
+
76
+ if(!!calls[i] && calls.hasOwnProperty(i))
77
+ {
78
+ if(util.type.isArray(calls[i]))
79
+ {
80
+ method = calls[i][0]; params = calls[i][1];
81
+ }
82
+ else if (!!calls[i].method)
83
+ {
84
+ method = calls[i].method; params = calls[i].params;
85
+ }
86
+
87
+ if(!!method)
88
+ {
89
+ cnt++;
90
+ cmd[i] = [method,params];
91
+ }
92
+ }
93
+ }
94
+
95
+ if(cnt > 0)
96
+ {
97
+ var e = function(i)
98
+ {
99
+ return function(str)
100
+ {
101
+ cmd[i] = cmd[i][0]+'?'+str;
102
+ if(--cnt <= 0)
103
+ cb(cmd);
104
+ }
105
+ }
106
+
107
+ for(var i in cmd)
108
+ {
109
+ ajax.prepareData(cmd[i][1], '', e(i));
110
+ }
111
+ }
112
+
113
+ return;
114
+ };
115
+
116
+ BX24.callBind = function(event, handler, auth_type, callback)
117
+ {
118
+ if(!isInit)
119
+ {
120
+ var _a = arguments;
121
+ BX24.init(function(){
122
+ BX24.callBind.apply(document,_a);
123
+ });
124
+ }
125
+ else if(BX24.isAdmin())
126
+ {
127
+ var p = {
128
+ event: event||'',
129
+ handler: handler||'',
130
+ auth_type: (typeof auth_type == 'undefined') ? 0 : auth_type
131
+ };
132
+
133
+ return BX24.callMethod('event.bind', p, callback);
134
+ }
135
+
136
+ return false;
137
+ };
138
+
139
+ BX24.callUnBind =
140
+ BX24.callUnbind = function(event, handler, auth_type, callback)
141
+ {
142
+ if(!isInit)
143
+ {
144
+ var _a = arguments;
145
+ BX24.init(function(){
146
+ BX24.callUnBind.apply(document,_a);
147
+ });
148
+ }
149
+ else if(BX24.isAdmin())
150
+ {
151
+ var p = {
152
+ event: event||'',
153
+ handler: handler||''
154
+ };
155
+
156
+ if(typeof auth_type != 'undefined' && auth_type !== null)
157
+ {
158
+ p.auth_type = auth_type;
159
+ }
160
+
161
+ return BX24.callMethod('event.unbind', p, callback);
162
+ }
163
+
164
+ return false;
165
+ };
166
+
167
+ BX24.canUse = function(method)
168
+ {
169
+ switch(method)
170
+ {
171
+ case 'upload':
172
+ return fileReader.canUse();
173
+ default:
174
+ return true;
175
+ }
176
+ };
177
+
178
+ BX24.isAdmin = function()
179
+ {
180
+ return !!PARAMS.IS_ADMIN;
181
+ };
182
+
183
+ BX24.getAuth = function()
184
+ {
185
+ return (isInit && PARAMS.AUTH_EXPIRES > (new Date()).valueOf())
186
+ ? {access_token: PARAMS.AUTH_ID, refresh_token: PARAMS.REFRESH_ID, expires_in: PARAMS.AUTH_EXPIRES, domain: PARAMS.DOMAIN, member_id: PARAMS.MEMBER_ID}
187
+ : false;
188
+ };
189
+
190
+ BX24.getLang = function()
191
+ {
192
+ return PARAMS.LANG;
193
+ };
194
+
195
+ BX24.getDomain = function()
196
+ {
197
+ return PARAMS.DOMAIN;
198
+ };
199
+
200
+ BX24.refreshAuth = function(cb)
201
+ {
202
+ if(isInit)
203
+ {
204
+ sendMessage('refreshAuth', {}, function(p){
205
+ PARAMS.AUTH_ID = p.AUTH_ID;
206
+ PARAMS.REFRESH_ID = p.REFRESH_ID;
207
+ PARAMS.AUTH_EXPIRES = (new Date()).valueOf()+p.AUTH_EXPIRES*1000;
208
+ if(!!cb)
209
+ {
210
+ cb(BX24.getAuth());
211
+ }
212
+ });
213
+ }
214
+ };
215
+
216
+ BX24.resizeWindow = function(width, height, cb)
217
+ {
218
+ width = parseInt(width); height = parseInt(height);
219
+ if(width > 0 && height > 0)
220
+ {
221
+ sendMessage('resizeWindow', {width:width,height:height}, cb);
222
+ }
223
+ };
224
+
225
+ BX24.fitWindow = function(cb)
226
+ {
227
+ sendMessage('resizeWindow', {
228
+ width:'100%', height:BX24.getScrollSize().scrollHeight
229
+ }, cb);
230
+ };
231
+
232
+ BX24.reloadWindow = function(cb)
233
+ {
234
+ sendMessage('reloadWindow', {}, cb);
235
+ };
236
+
237
+ BX24.setTitle = function(title, cb)
238
+ {
239
+ sendMessage('setTitle', {title:title.toString()}, cb);
240
+ };
241
+
242
+ BX24.scrollParentWindow = function(scroll, cb)
243
+ {
244
+ scroll = parseInt(scroll);
245
+ if(!isNaN(scroll))
246
+ {
247
+ sendMessage('setScroll', {scroll:scroll}, cb);
248
+ }
249
+ };
250
+
251
+ BX24.isReady = function()
252
+ {
253
+ return !!isReady;
254
+ };
255
+
256
+ BX24.ready = function(handler)
257
+ {
258
+ if (util.type.isFunction(handler))
259
+ {
260
+ readyList.push(handler);
261
+ }
262
+ };
263
+
264
+ BX24.proxy = function(func, thisObject)
265
+ {
266
+ if (!func || !thisObject)
267
+ return func;
268
+
269
+ util.initObjectProxy(thisObject)
270
+
271
+ if (typeof func['__proxy_id_' + proxySalt] == 'undefined')
272
+ func['__proxy_id_' + proxySalt] = proxyId++;
273
+
274
+ if (!proxyList[thisObject['__proxy_id_' + proxySalt]][func['__proxy_id_' + proxySalt]])
275
+ proxyList[thisObject['__proxy_id_' + proxySalt]][func['__proxy_id_' + proxySalt]] = util.delegate(func, thisObject);
276
+
277
+ return proxyList[thisObject['__proxy_id_' + proxySalt]][func['__proxy_id_' + proxySalt]];
278
+ };
279
+
280
+ BX24.proxyContext = function()
281
+ {
282
+ return proxyContext;
283
+ };
284
+
285
+ BX24.bind = function(el, evname, func)
286
+ {
287
+ if (!el)
288
+ return;
289
+
290
+ if (evname === 'mousewheel')
291
+ {
292
+ BX24.bind(el, 'DOMMouseScroll', func);
293
+ }
294
+ else if (evname === 'transitionend')
295
+ {
296
+ BX24.bind(el, 'webkitTransitionEnd', func);
297
+ BX24.bind(el, 'msTransitionEnd', func);
298
+ BX24.bind(el, 'oTransitionEnd', func);
299
+ // IE8-9 doesn't support this feature!
300
+ }
301
+
302
+ if (el.addEventListener)
303
+ el.addEventListener(evname, func, false);
304
+ else if(el.attachEvent) // IE
305
+ el.attachEvent("on" + evname, BX24.proxy(func, el));
306
+ else
307
+ el["on" + evname] = func;
308
+
309
+ eventsList[eventsList.length] = {'element': el, 'event': evname, 'fn': func};
310
+
311
+ };
312
+
313
+ BX24.unbind = function(el, evname, func)
314
+ {
315
+ if (!el)
316
+ return;
317
+
318
+ if (evname === 'mousewheel')
319
+ BX24.unbind(el, 'DOMMouseScroll', func);
320
+
321
+ if(el.removeEventListener) // Gecko / W3C
322
+ el.removeEventListener(evname, func, false);
323
+ else if(el.detachEvent) // IE
324
+ el.detachEvent("on" + evname, BX24.proxy(func, el));
325
+ else
326
+ el["on" + evname] = null;
327
+ };
328
+
329
+ BX24.getScrollSize = function()
330
+ {
331
+ return {
332
+ scrollWidth: Math.max(document.documentElement.scrollWidth, document.documentElement.offsetWidth),
333
+ scrollHeight: Math.max(document.documentElement.scrollHeight, document.documentElement.offsetHeight)
334
+ };
335
+ };
336
+
337
+ BX24.selectAccess = function(title, value, cb)
338
+ {
339
+ if(!util.type.isString(title))
340
+ {
341
+ cb = value; value = title;
342
+ }
343
+
344
+ if(util.type.isFunction(value))
345
+ {
346
+ cb = value; value = [];
347
+ }
348
+
349
+ sendMessage('selectAccess', {value:value}, cb);
350
+ };
351
+
352
+ BX24.selectUser = function(title, cb)
353
+ {
354
+ if(util.type.isFunction(title))
355
+ {
356
+ cb = title; title = '';
357
+ }
358
+
359
+ sendMessage('selectUser', {title: title, mult:false}, cb);
360
+ };
361
+
362
+ BX24.selectUsers = function(title, cb)
363
+ {
364
+ if(util.type.isFunction(title))
365
+ {
366
+ cb = title; title = '';
367
+ }
368
+
369
+ sendMessage('selectUser', {title: title, mult:true}, cb);
370
+ };
371
+
372
+ BX24.selectCRM = function(params, cb)
373
+ {
374
+ if(util.type.isFunction(params))
375
+ {
376
+ cb = params;
377
+ params = {};
378
+ }
379
+
380
+ sendMessage('selectCRM', {
381
+ entityType: params.entityType,
382
+ multiple: params.multiple,
383
+ value: params.value,
384
+ }, cb);
385
+ };
386
+
387
+ BX24.openApplication = function(params, cb, settings)
388
+ {
389
+ if(util.type.isFunction(params))
390
+ {
391
+ cb = params;
392
+ params = {};
393
+ }
394
+
395
+ if(util.type.isObject(settings))
396
+ {
397
+ for (var item in settings)
398
+ {
399
+ params["bx24_" + item] = settings[item];
400
+ }
401
+ }
402
+
403
+ sendMessage('openApplication', params, cb);
404
+ };
405
+
406
+ BX24.openPath = function(path, cb)
407
+ {
408
+ sendMessage(
409
+ 'openPath',
410
+ {
411
+ path: path
412
+ },
413
+ cb
414
+ );
415
+ };
416
+
417
+ BX24.closeApplication = function(cb)
418
+ {
419
+ sendMessage('closeApplication', cb);
420
+ };
421
+
422
+ BX24.im = {
423
+ callTo: function(userId, video)
424
+ {
425
+ sendMessage('imCallTo', {userId: userId, video: video});
426
+ },
427
+ phoneTo: function(phone)
428
+ {
429
+ sendMessage('imPhoneTo', {phone: phone});
430
+ },
431
+ openMessenger: function(dialogId)
432
+ {
433
+ sendMessage('imOpenMessenger', {dialogId: dialogId});
434
+ },
435
+ openHistory: function(dialogId)
436
+ {
437
+ sendMessage('imOpenHistory', {dialogId: dialogId});
438
+ }
439
+ };
440
+
441
+ BX24.placement = {
442
+
443
+ info: function()
444
+ {
445
+ return {
446
+ placement: PARAMS.PLACEMENT,
447
+ options: PARAMS.PLACEMENT_OPTIONS
448
+ }
449
+ },
450
+
451
+ getInterface: function(cb)
452
+ {
453
+ sendMessage('getInterface', cb);
454
+ },
455
+
456
+ call: function(cmd, params, cb)
457
+ {
458
+ if(!!BX24[cmd])
459
+ {
460
+ return;
461
+ }
462
+ else
463
+ {
464
+ if(util.type.isFunction(params))
465
+ {
466
+ cb = params;
467
+ params = {};
468
+ }
469
+
470
+ sendMessage(cmd, params, cb);
471
+ }
472
+ },
473
+
474
+ bindEvent: function(eventName, cb)
475
+ {
476
+ sendMessage('placementBindEvent', {event: eventName}, cb);
477
+ }
478
+ };
479
+
480
+ BX24.loadScript = function(script, callback)
481
+ {
482
+ if (!isReady)
483
+ {
484
+ var _args = arguments;
485
+ BX24.ready(function() {
486
+ BX24.loadScript.apply(this, _args);
487
+ });
488
+ return;
489
+ }
490
+
491
+ if (util.type.isString(script))
492
+ script = [script];
493
+ var _callback = function()
494
+ {
495
+ return (callback && util.type.isFunction(callback)) ? callback() : null
496
+ }
497
+ var load_js = function(ind)
498
+ {
499
+ if(ind >= script.length)
500
+ return _callback();
501
+
502
+ if(!!script[ind])
503
+ {
504
+ var oHead = document.getElementsByTagName("HEAD")[0] || document.documentElement;
505
+ var oScript = document.createElement('SCRIPT');
506
+ oScript.setAttribute('charset', 'UTF-8');
507
+
508
+ oScript.src = script[ind];
509
+
510
+ var bLoaded = false;
511
+ oScript.onload = oScript.onreadystatechange = function()
512
+ {
513
+ if (!bLoaded && (!oScript.readyState || oScript.readyState == "loaded" || oScript.readyState == "complete"))
514
+ {
515
+ bLoaded = true;
516
+ setTimeout(function (){load_js(++ind);}, 50);
517
+
518
+ oScript.onload = oScript.onreadystatechange = null;
519
+ if (oHead && oScript.parentNode)
520
+ {
521
+ oHead.removeChild(oScript);
522
+ }
523
+ }
524
+ }
525
+
526
+ return oHead.insertBefore(oScript, oHead.firstChild);
527
+ }
528
+ else
529
+ {
530
+ load_js(++ind);
531
+ }
532
+ }
533
+
534
+ load_js(0);
535
+ };
536
+
537
+ BX24.userOption = BX24.appOption = {
538
+ get:function(){},set:function(){}
539
+ };
540
+
541
+ BX24.init(function(){
542
+ BX24.userOption = {
543
+ get: function(name)
544
+ {
545
+ return PARAMS.USER_OPTIONS[name];
546
+ },
547
+ set: function(name, value)
548
+ {
549
+ PARAMS.USER_OPTIONS[name] = value;
550
+ sendMessage('setUserOption', {name:name,value:value});
551
+ }
552
+ };
553
+
554
+ BX24.appOption = {
555
+ get: function(name)
556
+ {
557
+ return PARAMS.APP_OPTIONS[name];
558
+ },
559
+ set: BX24.isAdmin() ? function(name,value,cb)
560
+ {
561
+ PARAMS.APP_OPTIONS[name] = value;
562
+ sendMessage('setAppOption', {name:name,value:value}, cb);
563
+ } : util.blank
564
+ };
565
+ });
566
+ /*************** private section ***********************/
567
+
568
+ // utility
569
+ var util = {
570
+ blank: function(){},
571
+ init: function()
572
+ {
573
+ var f = function(data)
574
+ {
575
+ if(!PARAMS.DOMAIN)
576
+ PARAMS.DOMAIN = data.DOMAIN;
577
+ if(!PARAMS.PATH)
578
+ PARAMS.PATH = data.PATH;
579
+ if(!PARAMS.LANG)
580
+ PARAMS.LANG = data.LANG;
581
+ if(!PARAMS.PLACEMENT)
582
+ PARAMS.PLACEMENT = data.PLACEMENT;
583
+
584
+ PARAMS.PROTOCOL = data.PROTOCOL;
585
+ PARAMS.DOMAIN = PARAMS.DOMAIN.replace(/\\:(80|443)$/, '');
586
+
587
+ if(!!data.AUTH_ID)
588
+ {
589
+ PARAMS.AUTH_ID = data.AUTH_ID;
590
+ PARAMS.REFRESH_ID = data.REFRESH_ID;
591
+ PARAMS.AUTH_EXPIRES = (new Date()).valueOf()+data.AUTH_EXPIRES*1000;
592
+ PARAMS.IS_ADMIN = !!data.IS_ADMIN;
593
+ PARAMS.MEMBER_ID = data.MEMBER_ID||'';
594
+ }
595
+
596
+ if(!PARAMS.USER_OPTIONS)
597
+ PARAMS.USER_OPTIONS = data.USER_OPTIONS;
598
+
599
+ if(!PARAMS.APP_OPTIONS)
600
+ PARAMS.APP_OPTIONS = data.APP_OPTIONS;
601
+
602
+ if(!PARAMS.PLACEMENT_OPTIONS)
603
+ PARAMS.PLACEMENT_OPTIONS = data.PLACEMENT_OPTIONS;
604
+
605
+ isInit = true;
606
+
607
+ var doInit = function()
608
+ {
609
+ BX24.init = function(fn)
610
+ {
611
+ util.defer(fn).call(document);
612
+ }
613
+
614
+ if(!data.INSTALL)
615
+ {
616
+ BX24.installFinish = util.blank;
617
+ }
618
+
619
+ var fn, i = 0;
620
+ while (initList && (fn = initList[i++]))
621
+ {
622
+ BX24.init(fn);
623
+ }
624
+ }
625
+
626
+ if(!!data.FIRST_RUN && installList.length > 0)
627
+ {
628
+ util.install(doInit);
629
+ }
630
+ else
631
+ {
632
+ doInit();
633
+ }
634
+ }
635
+
636
+ if(!PARAMS.DOMAIN||!PARAMS.LANG||!PARAMS.AUTH_ID)
637
+ {
638
+ sendMessage('getInitData', f);
639
+ }
640
+ else
641
+ {
642
+ f(PARAMS);
643
+ }
644
+
645
+ util.init = util.blank;
646
+ },
647
+
648
+ install: function(cb)
649
+ {
650
+ var installer = null,
651
+ installFinish = function()
652
+ {
653
+ util.install(cb);
654
+ };
655
+
656
+ installer = installList.shift();
657
+ if(!!installer)
658
+ {
659
+ if(util.type.isFunction(installer))
660
+ {
661
+ try
662
+ {
663
+ BX24.installFinish = installFinish;
664
+ installer.call(document); // no defer!
665
+ }
666
+ catch(e)
667
+ {
668
+ alert('Installation failed!');
669
+ console.log(e);
670
+ }
671
+ }
672
+ else
673
+ {
674
+ BX24.loadScript(installer, function(){
675
+ BX24.installFinish = installFinish;
676
+ });
677
+ }
678
+ }
679
+ else
680
+ {
681
+ BX24.installFinish = util.install = util.blank;
682
+ sendMessage('setInstall', {install:true});
683
+
684
+ util.defer(cb).call(document);
685
+ }
686
+ },
687
+
688
+ ready: function()
689
+ {
690
+ if (document.readyState === "complete")
691
+ {
692
+ return util.runReady();
693
+ }
694
+
695
+ var __readyHandler;
696
+ if (document.addEventListener)
697
+ {
698
+ __readyHandler = function()
699
+ {
700
+ document.removeEventListener("DOMContentLoaded", __readyHandler, false);
701
+ util.runReady();
702
+ }
703
+ document.addEventListener("DOMContentLoaded", __readyHandler, false);
704
+ window.addEventListener("load", util.runReady, false);
705
+ }
706
+ else if (document.attachEvent)
707
+ {
708
+ __readyHandler = function()
709
+ {
710
+ if (document.readyState === "complete")
711
+ {
712
+ document.detachEvent("onreadystatechange", __readyHandler);
713
+ util.runReady();
714
+ }
715
+ }
716
+ document.attachEvent("onreadystatechange", __readyHandler);
717
+ window.attachEvent("onload", util.runReady);
718
+ }
719
+
720
+ util.ready = util.blank;
721
+
722
+ return null;
723
+ },
724
+
725
+ runReady: function()
726
+ {
727
+ if (!isReady)
728
+ {
729
+ if (!document.body)
730
+ return setTimeout(util.runReady, 15);
731
+
732
+ isReady = true;
733
+
734
+ BX24.ready = function(handler)
735
+ {
736
+ if (util.type.isFunction(handler))
737
+ {
738
+ util.defer(handler).call(document);
739
+ }
740
+ };
741
+
742
+ if (readyList && readyList.length > 0)
743
+ {
744
+ var fn, i = 0;
745
+ while (readyList && (fn = readyList[i++]))
746
+ {
747
+ BX24.ready(fn);
748
+ }
749
+
750
+ readyList = null;
751
+ }
752
+ }
753
+
754
+ return null;
755
+ },
756
+
757
+ delegate: function (func, thisObject)
758
+ {
759
+ if (!func || !thisObject)
760
+ return func;
761
+
762
+ return function() {
763
+ var cur = proxyContext;
764
+ proxyContext = this;
765
+ var res = func.apply(thisObject, arguments);
766
+ proxyContext = cur;
767
+ return res;
768
+ }
769
+ },
770
+
771
+ initObjectProxy: function(thisObject)
772
+ {
773
+ if (typeof thisObject['__proxy_id_' + proxySalt] == 'undefined')
774
+ {
775
+ thisObject['__proxy_id_' + proxySalt] = proxyList.length;
776
+ proxyList[thisObject['__proxy_id_' + proxySalt]] = {};
777
+ }
778
+ },
779
+
780
+ defer: function(fn,t)
781
+ {
782
+ return function(){
783
+ var arg = arguments;
784
+ setTimeout(function(){fn.apply(this,arg)}, t||10);
785
+ };
786
+ },
787
+
788
+ split: function(s,ss)
789
+ {
790
+ var r = s.split(ss);
791
+ return [r[0],r.slice(1).join(ss)];
792
+ },
793
+
794
+ clone: function(obj, bCopyObj)
795
+ {
796
+ var _obj, i, l;
797
+ if (bCopyObj !== false)
798
+ bCopyObj = true;
799
+
800
+ if (obj === null)
801
+ return null;
802
+
803
+ if (util.type.isDomNode(obj))
804
+ {
805
+ _obj = obj.cloneNode(bCopyObj);
806
+ }
807
+ else if (typeof obj == 'object')
808
+ {
809
+ if (util.type.isArray(obj))
810
+ {
811
+ _obj = [];
812
+ for (i=0,l=obj.length;i<l;i++)
813
+ {
814
+ if (typeof obj[i] == "object" && bCopyObj)
815
+ _obj[i] = util.clone(obj[i], bCopyObj);
816
+ else
817
+ _obj[i] = obj[i];
818
+ }
819
+ }
820
+ else
821
+ {
822
+ _obj = {};
823
+ if (obj.constructor)
824
+ {
825
+ if (obj.constructor === Date)
826
+ _obj = new Date(obj);
827
+ else
828
+ _obj = new obj.constructor();
829
+ }
830
+
831
+ for (i in obj)
832
+ {
833
+ if (typeof obj[i] == "object" && bCopyObj)
834
+ _obj[i] = util.clone(obj[i], bCopyObj);
835
+ else
836
+ _obj[i] = obj[i];
837
+ }
838
+ }
839
+
840
+ }
841
+ else
842
+ {
843
+ _obj = obj;
844
+ }
845
+
846
+ return _obj;
847
+ },
848
+
849
+ uniqid: function()
850
+ {
851
+ var s = '';
852
+ for (var i = 0; i <32; i++)
853
+ s += charsList[Math.round(Math.random()*(charsList.length-1))];
854
+ return s;
855
+ },
856
+
857
+ // datatype utility
858
+ type: {
859
+ isString: function(item) {
860
+ return item === '' ? true : (item ? (typeof (item) == "string" || item instanceof String) : false);
861
+ },
862
+ isNotEmptyString: function(item) {
863
+ return util.type.isString(item) ? item.length > 0 : false;
864
+ },
865
+ isBoolean: function(item) {
866
+ return item === true || item === false;
867
+ },
868
+ isNumber: function(item) {
869
+ return item === 0 ? true : (item ? (typeof (item) == "number" || item instanceof Number) : false);
870
+ },
871
+ isFunction: function(item) {
872
+ return item === null ? false : (typeof (item) == "function" || item instanceof Function);
873
+ },
874
+ isElementNode: function(item) {
875
+ return item && typeof (item) == "object" && "nodeType" in item && item.nodeType == 1 && item.tagName && item.tagName.toUpperCase() != 'SCRIPT' && item.tagName.toUpperCase() != 'STYLE' && item.tagName.toUpperCase() != 'LINK';
876
+ },
877
+ isDomNode: function(item) {
878
+ return item && typeof (item) == "object" && "nodeType" in item;
879
+ },
880
+ isObject: function(item) {
881
+ return item && (typeof (item) == "object" || item instanceof Object) ? true : false;
882
+ },
883
+ isArray: function(item) {
884
+ return item && Object.prototype.toString.call(item) == "[object Array]";
885
+ },
886
+ isDate : function(item) {
887
+ return item && Object.prototype.toString.call(item) == "[object Date]";
888
+ }
889
+ }
890
+ };
891
+
892
+ // communication with parent frame utility
893
+ var sendMessage = function(cmd, params, cb)
894
+ {
895
+ if(util.type.isFunction(params))
896
+ {
897
+ cb = params; params = null;
898
+ }
899
+
900
+ if (cmd.indexOf(':') >= 0)
901
+ {
902
+ parent.postMessage(
903
+ {
904
+ method: cmd,
905
+ params: !!params ? params : '',
906
+ callback: sendMessage.setCallback(cb),
907
+ appSid: PARAMS.APP_SID
908
+ },
909
+ 'http'+(PARAMS.PROTOCOL?'s':'')+'://' + PARAMS.DOMAIN
910
+ );
911
+ }
912
+ else
913
+ {
914
+ /* TODO: delete after rest 22.0.0 */
915
+ cmd += ':' + (!!params ? JSON.stringify(params) : '')
916
+ + ':' + sendMessage.setCallback(cb)
917
+ + (!!PARAMS.APP_SID ? (':' + PARAMS.APP_SID) : '');
918
+
919
+ parent.postMessage(cmd, 'http'+(PARAMS.PROTOCOL?'s':'')+'://' + PARAMS.DOMAIN);
920
+ }
921
+ };
922
+
923
+ sendMessage.setCallback = function(cb)
924
+ {
925
+ var cbId = '';
926
+ if(!!cb)
927
+ {
928
+ cbId = util.uniqid();
929
+ sendMessage[cbId] = cb;
930
+ }
931
+
932
+ return cbId;
933
+ };
934
+
935
+ sendMessage.runCallback = function(e)
936
+ {
937
+ e = e || window.event;
938
+
939
+ if(e.origin != 'http'+(PARAMS.PROTOCOL?'s':'')+'://'+PARAMS.DOMAIN)
940
+ return;
941
+
942
+ if(!!e.data)
943
+ {
944
+ var cmd = util.split(e.data,':',2),
945
+ args = [];
946
+
947
+ if(!!sendMessage[cmd[0]])
948
+ {
949
+ if(!!cmd[1])
950
+ args = JSON.parse(cmd[1]);
951
+
952
+ sendMessage[cmd[0]].apply(window, [args]);
953
+ }
954
+ }
955
+ };
956
+
957
+ var ajax = function(config)
958
+ {
959
+ RestrictionManager.check(function(){
960
+ ajax.call(config);
961
+ });
962
+ }
963
+
964
+ ajax.call = function(config)
965
+ {
966
+ if(!isInit)
967
+ {
968
+ BX24.init(function(){
969
+ ajax.call(config);
970
+ });
971
+ }
972
+ else if(PARAMS.AUTH_EXPIRES < (new Date()).valueOf())
973
+ {
974
+ ajax.refreshAuth(config);
975
+ }
976
+ else
977
+ {
978
+ var xhr = ajax.xhr(),
979
+ url = 'http'+(PARAMS.PROTOCOL?'s':'')+'://' + PARAMS.DOMAIN + PARAMS.PATH + '/' + ajax.escape(config.method) + '.json';
980
+
981
+ xhr.open('POST', url);
982
+
983
+ var bRequestCompleted = false;
984
+
985
+ // IE fix
986
+ xhr.onprogress = function(){};
987
+ xhr.ontimeout = function(){};
988
+ xhr.timeout = 0;
989
+
990
+ xhr.onload = function()
991
+ {
992
+ if (bRequestCompleted)
993
+ return;
994
+
995
+ xhr.onload = util.blank;
996
+
997
+ var bSuccess = ajax.isSuccess(xhr);
998
+
999
+ if(bSuccess)
1000
+ {
1001
+ var data = xhr.responseText;
1002
+
1003
+ if(data.length > 0)
1004
+ {
1005
+ try{
1006
+ data = JSON.parse(data);
1007
+ }catch(e){bSuccess = false;}
1008
+ }
1009
+ else
1010
+ {
1011
+ data = {result:{}};
1012
+ }
1013
+ }
1014
+
1015
+ var s = xhr.status;
1016
+
1017
+ xhr = null;
1018
+
1019
+ if(bSuccess)
1020
+ {
1021
+ if(data.error && data.error == 'expired_token')
1022
+ {
1023
+ ajax.refreshAuth(config);
1024
+ }
1025
+ else if(!!config.callback && util.type.isFunction(config.callback))
1026
+ {
1027
+ var res = new ajaxResult(data, config, s);
1028
+ config.callback.apply(window, [res]);
1029
+ }
1030
+ }
1031
+ else
1032
+ {
1033
+ throw('Query error!');
1034
+ }
1035
+ };
1036
+
1037
+ xhr.onerror = function()
1038
+ {
1039
+ throw('Query error!');
1040
+ };
1041
+
1042
+ var query_data = 'auth=' + PARAMS.AUTH_ID;
1043
+
1044
+ if(typeof config.start != 'undefined')
1045
+ {
1046
+ query_data += '&start=' + parseInt(config.start);
1047
+ }
1048
+
1049
+ if(!!config.data)
1050
+ {
1051
+ if(!!config.data['start'])
1052
+ {
1053
+ delete config.data['start'];
1054
+ }
1055
+
1056
+ ajax.prepareData(config.data, '', function(res){
1057
+ query_data += '&' + res;
1058
+ util.defer(xhr.send.bind(xhr))(query_data);
1059
+ });
1060
+ }
1061
+ else
1062
+ {
1063
+ util.defer(xhr.send.bind(xhr))(query_data);
1064
+ }
1065
+
1066
+ return xhr;
1067
+ }
1068
+ };
1069
+
1070
+ ajax.batch = function(calls, callback, bHaltOnError)
1071
+ {
1072
+ return ajax({
1073
+ method: 'batch',
1074
+ data: {halt:!!bHaltOnError?1:0, cmd:calls},
1075
+ callback: function(res, config, status){
1076
+ if(!!callback)
1077
+ {
1078
+ var data = res.data(),
1079
+ result = util.type.isArray(calls) ? [] : {};
1080
+
1081
+ for(var i in calls)
1082
+ {
1083
+ if(!!calls[i] && calls.hasOwnProperty(i))
1084
+ {
1085
+ if(typeof data.result[i] !== 'undefined' || typeof data.result_error[i] !== 'undefined')
1086
+ {
1087
+ if(util.type.isString(calls[i]))
1088
+ {
1089
+ var q = calls[i].split('?');
1090
+ }
1091
+ else
1092
+ {
1093
+ q = [
1094
+ util.type.isArray(calls[i]) ? calls[i][0] : calls[i].method,
1095
+ util.type.isArray(calls[i]) ? calls[i][1] : calls[i].data,
1096
+ ];
1097
+ }
1098
+
1099
+ result[i] = new ajaxResult({
1100
+ result: typeof data.result[i] !== 'undefined' ? data.result[i] : {},
1101
+ error: data.result_error[i]||undefined,
1102
+ total: data.result_total[i],
1103
+ next: data.result_next[i]
1104
+ }, {
1105
+ method: q[0],
1106
+ data:q[1],
1107
+ callback: callback
1108
+ }, res.status);
1109
+ }
1110
+ }
1111
+ }
1112
+
1113
+ callback.apply(window, [result]);
1114
+ }
1115
+ }
1116
+ });
1117
+ };
1118
+
1119
+ ajax.refreshAuth = function(config)
1120
+ {
1121
+ BX24.refreshAuth(function(){
1122
+ ajax(config)
1123
+ });
1124
+ };
1125
+
1126
+ ajax.xhr = function()
1127
+ {
1128
+ if(!!window.XDomainRequest)
1129
+ return new XDomainRequest();
1130
+ else
1131
+ return new XMLHttpRequest();
1132
+ };
1133
+
1134
+ ajax.escape = function(str)
1135
+ {
1136
+ return encodeURIComponent(str);
1137
+ };
1138
+
1139
+ ajax.prepareData = function(arData, prefix, callback)
1140
+ {
1141
+ var data = '', objects = [];
1142
+ if (util.type.isString(arData) || arData == null)
1143
+ {
1144
+ callback.call(document, arData||'');
1145
+ }
1146
+ else
1147
+ {
1148
+ for(var i in arData)
1149
+ {
1150
+ if (!arData.hasOwnProperty(i))
1151
+ {
1152
+ continue;
1153
+ }
1154
+
1155
+ var name = ajax.escape(i);
1156
+
1157
+ if(prefix)
1158
+ name = prefix + '[' + name + ']';
1159
+
1160
+ if(typeof arData[i] == 'object')
1161
+ {
1162
+ objects.push([name,arData[i]]);
1163
+ }
1164
+ else
1165
+ {
1166
+ if (data.length > 0)
1167
+ {
1168
+ data += '&';
1169
+ }
1170
+
1171
+ data += name + '=' + ajax.escape(arData[i])
1172
+ }
1173
+ }
1174
+
1175
+ var cnt = objects.length;
1176
+ if(cnt > 0)
1177
+ {
1178
+ var cb = function(str)
1179
+ {
1180
+ data += (!!str ? '&' : '') + str;
1181
+ if(--cnt <= 0)
1182
+ {
1183
+ callback.call(document, data)
1184
+ }
1185
+ }
1186
+
1187
+ var cnt1 = cnt;
1188
+ for(var i = 0; i < cnt1; i++)
1189
+ {
1190
+ if(util.type.isDomNode(objects[i][1]))
1191
+ {
1192
+ if(objects[i][1].tagName.toUpperCase() == 'INPUT' && objects[i][1].type == 'file')
1193
+ {
1194
+ if(fileReader.canUse())
1195
+ {
1196
+ fileReader(objects[i][1], (function(name){
1197
+ return function(result){
1198
+ if(util.type.isArray(result)&&result.length>0)
1199
+ {
1200
+ cb(name + '[0]=' + ajax.escape(result[0]) + '&' + name + '[1]=' + ajax.escape(result[1]));
1201
+ }
1202
+ else
1203
+ {
1204
+ cb(name+'=');
1205
+ }
1206
+ }
1207
+ })(objects[i][0]));
1208
+ }
1209
+ }
1210
+ else if(typeof objects[i][1].value != 'undefined')
1211
+ {
1212
+ cb(objects[i][0] + '=' + ajax.escape(objects[i][1].value));
1213
+ }
1214
+ else
1215
+ {
1216
+ cb('');
1217
+ }
1218
+ }
1219
+ else if(util.type.isDate(objects[i][1]))
1220
+ {
1221
+ cb(objects[i][0] + '=' + ajax.escape(objects[i][1].toJSON()));
1222
+ }
1223
+ else if(util.type.isArray(objects[i][1]) && objects[i][1].length <= 0)
1224
+ {
1225
+ cb(objects[i][0] + '=');
1226
+ }
1227
+ else
1228
+ {
1229
+ ajax.prepareData(objects[i][1], objects[i][0], cb);
1230
+ }
1231
+ }
1232
+ }
1233
+ else
1234
+ {
1235
+ callback.call(document, data)
1236
+ }
1237
+ }
1238
+ };
1239
+
1240
+ ajax.isSuccess = function(xhr)
1241
+ {
1242
+ return typeof xhr.status == 'undefined' || (xhr.status >= 200 && xhr.status < 300) || xhr.status === 304 || xhr.status >= 400 && xhr.status < 500 || xhr.status === 1223 || xhr.status === 0;
1243
+ };
1244
+
1245
+ var ajaxResult = function(answer, query, status)
1246
+ {
1247
+ this.answer = answer;
1248
+ this.query = util.clone(query);
1249
+ this.status = status;
1250
+
1251
+ if(typeof this.answer.next != 'undefined')
1252
+ {
1253
+ this.answer.next = parseInt(this.answer.next);
1254
+ }
1255
+
1256
+ if(typeof this.answer.error != 'undefined')
1257
+ {
1258
+ this.answer.ex = new ajaxError(this.status, typeof this.answer.error == 'string' ? this.answer : this.answer.error)
1259
+ }
1260
+ };
1261
+
1262
+ ajaxResult.prototype.data = function()
1263
+ {
1264
+ return this.answer.result;
1265
+ };
1266
+
1267
+ ajaxResult.prototype.error = function()
1268
+ {
1269
+ return this.answer.ex;
1270
+ };
1271
+
1272
+ ajaxResult.prototype.error_description = function()
1273
+ {
1274
+ return this.answer.error_description;
1275
+ };
1276
+
1277
+ ajaxResult.prototype.more = function()
1278
+ {
1279
+ return !isNaN(this.answer.next);
1280
+ };
1281
+
1282
+ ajaxResult.prototype.total = function()
1283
+ {
1284
+ return parseInt(this.answer.total);
1285
+ };
1286
+
1287
+ ajaxResult.prototype.next = function(cb)
1288
+ {
1289
+ if(this.more())
1290
+ {
1291
+ this.query.start = this.answer.next;
1292
+
1293
+ if(!!cb && util.type.isFunction(cb))
1294
+ {
1295
+ this.query.callback = cb;
1296
+ }
1297
+
1298
+ return ajax(this.query);
1299
+ }
1300
+
1301
+ return false;
1302
+ };
1303
+
1304
+ var ajaxError = function(status, ex)
1305
+ {
1306
+ this.status = status;
1307
+ this.ex = ex;
1308
+ };
1309
+
1310
+ ajaxError.prototype.getError = function()
1311
+ {
1312
+ return this.ex;
1313
+ };
1314
+
1315
+ ajaxError.prototype.getStatus = function()
1316
+ {
1317
+ return this.status;
1318
+ };
1319
+
1320
+ ajaxError.prototype.toString = function()
1321
+ {
1322
+ return this.ex.error + (
1323
+ !!this.ex.error_description
1324
+ ? ': ' + this.ex.error_description
1325
+ : ''
1326
+ ) + ' ('+this.status+')';
1327
+ };
1328
+
1329
+
1330
+ var fileReader = function(fileInput, cb)
1331
+ {
1332
+ if(fileReader.canUse())
1333
+ {
1334
+ var files = fileInput.files,
1335
+ len = 0,
1336
+ result = fileInput.multiple ? [] : null;
1337
+
1338
+ for (var i = 0, f; f = files[i]; i++)
1339
+ {
1340
+ var reader = new window.FileReader();
1341
+
1342
+ reader.BXFILENAME = files[i].name;
1343
+
1344
+ reader.onload = function(e){
1345
+ e = e||window.event;
1346
+
1347
+ var res = [this.BXFILENAME,btoa(e.target.result)];
1348
+
1349
+ if(result === null)
1350
+ result = res;
1351
+ else
1352
+ result.push(res);
1353
+
1354
+ if(--len <= 0)
1355
+ {
1356
+ cb(result);
1357
+ }
1358
+ };
1359
+
1360
+ reader.readAsBinaryString(f);
1361
+ }
1362
+ len = i;
1363
+ if(len <= 0)
1364
+ {
1365
+ cb(result);
1366
+ }
1367
+ }
1368
+ };
1369
+
1370
+ fileReader.canUse = function()
1371
+ {
1372
+ return !!window.FileReader;
1373
+ };
1374
+
1375
+ var RestrictionManager = function()
1376
+ {
1377
+ var _ = this;
1378
+
1379
+ this.param = {
1380
+ SLEEP: 1000,
1381
+ ALLOWED_SPEED: 0.002,
1382
+ ALLOWED_AMOUNT: 90
1383
+ };
1384
+
1385
+ this.storage = {
1386
+ lastDecrement: 0,
1387
+ currentAmount: 0
1388
+ };
1389
+
1390
+ this.wait = function(callback)
1391
+ {
1392
+ return util.defer(function()
1393
+ {
1394
+ return _.check(callback);
1395
+ }, this.param.SLEEP);
1396
+ };
1397
+ };
1398
+
1399
+ RestrictionManager.prototype.check = function(callback)
1400
+ {
1401
+ this.decrementStorage();
1402
+
1403
+ if(!this.checkStorage())
1404
+ {
1405
+ this.wait(callback)();
1406
+ }
1407
+ else
1408
+ {
1409
+ this.incrementStorage();
1410
+
1411
+ this.run(callback);
1412
+ }
1413
+ };
1414
+
1415
+ RestrictionManager.prototype.run = function(callback)
1416
+ {
1417
+ callback();
1418
+ }
1419
+
1420
+ RestrictionManager.prototype.decrementStorage = function()
1421
+ {
1422
+ if(this.storage.lastDecrement > 0)
1423
+ {
1424
+ this.storage.currentAmount -= ((new Date()).valueOf() - this.storage.lastDecrement) * this.param.ALLOWED_SPEED;
1425
+
1426
+ if(this.storage.currentAmount < 0)
1427
+ {
1428
+ this.storage.currentAmount = 0;
1429
+ }
1430
+ }
1431
+
1432
+ this.storage.lastDecrement = (new Date()).valueOf();
1433
+ };
1434
+
1435
+ RestrictionManager.prototype.checkStorage = function()
1436
+ {
1437
+ return this.storage.currentAmount < this.param.ALLOWED_AMOUNT;
1438
+ };
1439
+
1440
+ RestrictionManager.prototype.incrementStorage = function()
1441
+ {
1442
+ this.storage.currentAmount++;
1443
+ };
1444
+
1445
+ /***************** exec ********************************/
1446
+
1447
+ // AUTH_ID can also be set via GET, but it's not recommended due to security reasons
1448
+
1449
+ var PARAMS = {
1450
+ DOMAIN: '',
1451
+ PROTOCOL: 1,
1452
+ APP_SID: false,
1453
+ PATH: '',
1454
+ LANG: '',
1455
+ AUTH_ID: '',
1456
+ REFRESH_ID: null,
1457
+ MEMBER_ID: null,
1458
+ PLACEMENT: null,
1459
+ IS_ADMIN: false,
1460
+ AUTH_EXPIRES: 0,
1461
+ USER_OPTIONS: null,
1462
+ APP_OPTIONS: null,
1463
+ PLACEMENT_OPTIONS: null
1464
+ };
1465
+
1466
+ if(!!window.name)
1467
+ {
1468
+ var q = window.name.split('|');
1469
+ PARAMS.DOMAIN = q[0].replace(/\\:(80|443)$/, '');
1470
+ PARAMS.PROTOCOL = parseInt(q[1])||0;
1471
+ PARAMS.APP_SID = q[2];
1472
+ }
1473
+
1474
+ if(!PARAMS.DOMAIN||!PARAMS.APP_SID)
1475
+ {
1476
+ BX24 = null;
1477
+ throw new Error('Unable to initialize Bitrix24 JS library!');
1478
+ }
1479
+
1480
+ /* bindings */
1481
+ BX24.bind(window, 'message', sendMessage.runCallback);
1482
+
1483
+ util.ready();
1484
+ util.init();
1485
+
1486
+ RestrictionManager = new RestrictionManager();
1487
+
1488
+ })();`;
1489
+ export {
1490
+ t as default
1491
+ };