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.