PageSourceSearch

https://karofilm.ru/assets/js/embed.js

js karofilm.ru collected 2026-10-01 10:21:23 UTC 9,488 bytes, 249 lines download raw bytes

1var KARO = KARO || {};
2KARO.Embed = function() {
3    var object = {
4        data: {
5            baseUrl: 'https://kassa.karofilm.ru'
6        },
7        extend: function () {
8            var self = this;
9            var extended = {};
10            var deep = false;
11            var i = 0;
12            var length = arguments.length;
13            if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
14                deep = arguments[0];
15                i++;
16            }
17            var merge = function (obj) {
18                for ( var prop in obj ) {
19                    if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
20                        if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {
21                            extended[prop] = self.extend(true, extended[prop], obj[prop]);
22                        } else {
23                            extended[prop] = obj[prop];
24                        }
25                    }
26                }
27            };
28            for ( ; i < length; i++ ) {
29                var obj = arguments[i];
30                merge(obj);
31            }
32            return extended;
33        },
34
35        live: function(eventType, elementQuerySelector, cb) {
36            document.addEventListener(eventType, function (event) {
37                var qs = document.querySelectorAll(elementQuerySelector);
38                if (qs) {
39                    var el = event.target, index = -1;
40                    while (el && ((index = Array.prototype.indexOf.call(qs, el)) === -1)) {
41                        el = el.parentElement;
42                    }
43                    if (index > -1) {
44                        cb.call(el, event);
45                    }
46                }
47            });
48        },
49        construct:function(){
50            var self=this,
51                data=this.data;
52            if(typeof arguments[0] !=='undefined') {
53                self.extend(true,data,data,arguments[0]);
54            }
55        },
56        getData: function(element, attribute) {
57            var result = element.getAttribute('data-'+attribute);
58            return (result)?result:undefined;
59        },
60        initialize: function(){
61            var self=this;
62            self.live('click', '.karo-external', self.buttonClickHandler);
63            // window.addEventListener('resize', function(event){
64            //     self.adopt();
65            // });
66        },
67        buttonClickHandler: function(e){
68            var self = this;
69            e.preventDefault();
70            e.stopPropagation();
71            var key = KARO.Embed.getData(self,'key');
72            KARO.Embed.openUrl(KARO.Embed.getData(self,'route'), {
73                'widget_id': key
74            });
75        },
76        openUrl: function(route, params){
77          if(typeof params === 'undefined') {
78            params = {}
79          }
80          var self = this;
81          if(typeof params.widget_id === 'undefined') {
82              params.widget_id = KARO.Embed.getData(self,'key');
83          }
84          route = KARO.Embed.generateRoute(route, params);
85          KARO.Embed.createModal(params.widget_id,route);
86        },
87        connectButton: function(id){
88            var self=this,
89                widgetId = id,
90                route=$('#'+widgetId).data('karo-route');
91
92            $(document).on('click', '#'+widgetId, function(e){
93                e.preventDefault();
94                self.openModal(id, route);
95            });
96        },
97        listenerModal:function(e){
98            //var self=this;
99            if(e.data==='close') {
100                KARO.Embed.closeModalFrame();
101            }
102        },
103        close:function(){
104            var self=this;
105            self.closeModalFrame();
106        },
107        closeModalFrame:function(){
108            document.getElementById('karo-embed-filter').remove();
109            document.getElementById('karo-embed-wrapper').remove();
110        },
111        isMobile: function() {
112            return (navigator.userAgent.match(/Android/i) || navigator.userAgent.match(/BlackBerry/i) || navigator.userAgent.match(/iPhone|iPad|iPod/i) || navigator.userAgent.match(/Opera Mini/i) || navigator.userAgent.match(/IEMobile/i));
113        },
114        createFilter: function(){
115            var element=document.createElement('div');
116            element.setAttribute('id','karo-embed-filter');
117            var s = element.style;
118            s.position = 'fixed';
119            s.background = 'rgba(0,0,0, 0.9)';
120            s.top = '0';
121            s.left = '0';
122            s.right = '0';
123            s.bottom = '0';
124            s['z-index']= '9998';
125            return element;
126        },
127        generateRoute: function(route){
128          if(typeof params === 'undefined') {
129            params = {};
130          }
131          var result = this.data.baseUrl + ((typeof route !== 'undefined')?route+'':'');
132          var join_str = Object.keys(params).map(key => key + '=' + params[key]).join('&');
133          if(join_str) {
134              result+="?"+join_str;
135          }
136          return result;
137        },
138        createIframe: function(id, route){
139            //var self = this;
140            var element=document.createElement('iframe');
141            element.setAttribute('src', route);
142            element.setAttribute('height','100%');
143            element.setAttribute('width','100%');
144            element.setAttribute('margin','auto');
145            element.setAttribute('border','none');
146            element.setAttribute('class','widget_modal_iframe');
147            element.setAttribute('frameborder','0');
148            element.setAttribute('allowTransparency','true');
149            element.setAttribute('name','widget_modal_iframe_'+id);
150            element.setAttribute('id','widget_modal_iframe_'+id);
151            element.setAttribute('onload',"KARO.Embed.onFrameMod
151al('"+id+"')");
152            var s = element.style;
153            s.overflow = 'hidden';
154            s.height = '100%';
155            s.width = '100%';
156            s.opacity = '0';
157            return element;
158        },
159        createFrame: function(id, route){
160            var self = this;
161            var element=document.createElement('div');
162            element.setAttribute('id','karo-embed-wrapper');
163            var s = element.style;
164            s.position = 'fixed';
165            s.top = '0';
166            s.left = '0';
167            s.bottom = '0';
168            s.right = '0';
169            s.width = '100%';
170            s.height = '100%';
171            s.margin = 'auto';
172            s['max-width'] = '1280px';
173            s['max-height'] = '700px';
174            s['z-index'] = '9999';
175            element.appendChild(self.createIframe(id, route));
176            return element;
177        },
178        createModal:function(id, route){
179            var self=this;
180            if(self.isMobile()) {
181                window.location.href=route;
182            } else {
183                document.body.appendChild(self.createFilter());
184                document.body.appendChild(self.createFrame(id,route));
185                //self.adopt();
186            }
187        },
188        extractHostname: function(url) {
189            var hostname;
190            if (url.indexOf("://") > -1) {
191                hostname = url.split('/')[2];
192            }
193            else {
194                hostname = url.split('/')[0];
195            }
196            hostname = hostname.split(':')[0];
197            hostname = hostname.split('?')[0];
198            return hostname;
199        },
200        extractRootDomain: function(url) {
201            var self = this,
202                domain = self.extractHostname(url),
203                splitArr = domain.split('.'),
204                arrLen = splitArr.length;
205
206            if (arrLen > 2) {
207                domain = splitArr[arrLen - 2] + '.' + splitArr[arrLen - 1];
208                if (splitArr[arrLen - 2].length === 2 && splitArr[arrLen - 1].length === 2) {
209                    domain = splitArr[arrLen - 3] + '.' + domain;
210                }
211            }
212            return domain;
213        },
214        listener: function(event) {
215            //var self = this;
216            if (KARO.Embed.extractRootDomain(event.origin) !== 'karofilm.ru') {
217                return;
218            }
219            if(event.data === 'close') {
220                KARO.Embed.closeModalFrame();
221            }
222            var action = (typeof event.data !== "undefined" && event.data && typeof  event.data === 'string')?event.data.split('_'):[];
223            if((typeof action[0] === "string") && (action[0] === "open")) {
224                window.location.href = event.data.substr(5,event.data.length);
225            }
226        },
227        onFrameModal: function(id){
228            var self=this;
229            var iframe = document.getElementById('widget_modal_iframe_'+id);
230            var c = iframe.style;
231            c.opacity = '1';
232            c['background-color'] = '#23262a';
233            var filter = document.getElementById('karo-embed-filter');
234            filter.addEventListener('click', function(e) {
235                e.preventDefault();
236                window.frames['widget_modal_iframe_'+id].postMessage('close', "*")
237            }, false);
238            if (window.addEventListener) {
239                window.addEventListener("message", self.listener);
240            } else {
241                window.attachEvent("onmessage", self.listener);
242            }
243        },
244    };
245    object.construct.apply(object, arguments);
246    return object;
247};
248KARO.Embed=KARO.Embed({});
249KARO.Embed.initialize();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.