Created
November 17, 2020 18:42
-
-
Save Peretz30/35f7cdd02d1fcea88f15deb7b8994228 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function (w) { | |
if (w.fastXDM) return; | |
var handlers = {}; | |
var onEnvLoad = []; | |
var env = {}; | |
// Key generation | |
function genKey() { | |
var key = ''; | |
for (var i = 0; i < 5; i++) { | |
key += Math.ceil(Math.random() * 15).toString(16); | |
} | |
return key; | |
} | |
function waitFor(obj, prop, func, self, count) { | |
if (obj[prop]) { | |
func.apply(self); | |
} else { | |
count = count || 0; | |
if (count < 1000) { | |
setTimeout(function () { | |
waitFor(obj, prop, func, self, count + 1); | |
}, 0); | |
} | |
} | |
} | |
function attachScript(url) { | |
setTimeout(function () { | |
var newScript = document.createElement('script'); | |
newScript.type = 'text/javascript'; | |
newScript.src = url || w.fastXDM.helperUrl; | |
waitFor(document, 'body', function () { | |
document.getElementsByTagName('HEAD')[0].appendChild(newScript); | |
}); | |
}, 0); | |
} | |
function walkVar(value, clean) { | |
var newValue; | |
switch (typeof value) { | |
case 'string': | |
if (clean) { | |
newValue = value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); | |
} else { | |
newValue = value.replace(/'/g, '\'').replace(/"/g, '"').replace(/>/g, '>').replace(/</g, '<').replace(/&/g, '&'); | |
} | |
break; | |
case 'object': | |
if (Object.prototype.toString.apply(value) === '[object Array]') { | |
newValue = []; | |
for (var i = 0, len = value.length; i < len; i++) { | |
newValue[i] = walkVar(value[i], clean); | |
} | |
} else { | |
newValue = {}; | |
for (var k in value) { | |
if (Object.hasOwnProperty.call(value, k)) { | |
newValue[k] = walkVar(value[k], clean); | |
} | |
} | |
} | |
break; | |
default: | |
newValue = value; | |
break; | |
} | |
return newValue; | |
} | |
// Env functions | |
function getEnv(callback, self) { | |
if (env.loaded) { | |
callback.apply(self, [env]); | |
} else { | |
onEnvLoad.push([self, callback]); | |
} | |
} | |
function envLoaded() { | |
env.loaded = true; | |
for (var i = 0, len = onEnvLoad.length; i < len; i++) { | |
onEnvLoad[i][1].apply(onEnvLoad[i][0], [env]); | |
} | |
} | |
function applyMethod(strData, self) { | |
getEnv(function (env) { | |
var data = env.json.parse(strData); | |
if (data[0]) { | |
if (!data[1]) data[1] = []; | |
for (var i = 0, len = data[1].length; i < len; i++) { | |
if (data[1][i] && data[1][i]._func) { | |
var funcNum = data[1][i]._func; | |
data[1][i] = function () { | |
var args = Array.prototype.slice.call(arguments); | |
args.unshift('_func' + funcNum); | |
self.callMethod.apply(self, args); | |
} | |
} else if (self.options.safe) { | |
data[1][i] = walkVar(data[1][i], true); | |
} | |
} | |
setTimeout(function () { | |
if (!self.methods[data[0]]) { | |
throw Error('fastXDM: Method ' + data[0] + ' is undefined'); | |
} | |
self.methods[data[0]].apply(self, data[1]); | |
}, 0); | |
} | |
}); | |
} | |
function extend(obj1, obj2) { | |
for (var i in obj2) { | |
if (obj1[i] && typeof (obj1[i]) === 'object') { | |
extend(obj1[i], obj2[i]) | |
} else { | |
obj1[i] = obj2[i]; | |
} | |
} | |
} | |
// XDM object | |
w.fastXDM = { | |
_id: 0, | |
helperUrl: 'https://sdk-narrator.kiozk.ru/js/xdmHelper.js', | |
Server: function (methods, filter, options) { | |
this.methods = methods || {}; | |
this.filter = filter; | |
this.options = options || {}; | |
this.id = w.fastXDM._id++; | |
this.key = genKey(); | |
this.frameName = 'fXD' + this.key; | |
this.server = true; | |
this.methods['%init%'] = this.methods.__fxdm_i = function () { | |
w.fastXDM.run(this.id); | |
if (this.methods.onInit) { | |
this.methods.onInit(); | |
} | |
}; | |
handlers[this.key] = [applyMethod, this]; | |
}, | |
Client: function (methods, options) { | |
this.methods = methods || {}; | |
this.options = options || {}; | |
this.id = w.fastXDM._id++; | |
this.client = true; | |
w.fastXDM.run(this.id); | |
if (window.name.indexOf('fXD') === 0) { | |
this.key = window.name.substr(3); | |
} else { | |
throw Error('Wrong window.name property.'); | |
} | |
this.caller = window.parent; | |
handlers[this.key] = [applyMethod, this]; | |
w.fastXDM.on('helper', function () { | |
w.fastXDM.onClientStart(this); | |
}, this); | |
getEnv(function (env) { | |
env.send(this, env.json.stringify(['%init%'])); | |
var methods = this.methods; | |
setTimeout(function () { | |
if (methods.onInit) { | |
methods.onInit(); | |
} | |
}, 0); | |
}, this); | |
}, | |
onMessage: function (e) { | |
var data = e.data; | |
if (!data) { | |
return false; | |
} | |
if (typeof data !== 'string' && !(data instanceof String)) { | |
return false; | |
} | |
var key = data.substr(0, 5); | |
if (handlers[key]) { | |
var self = handlers[key][1]; | |
if (self && (!self.filter || self.filter(e.origin))) { | |
handlers[key][0](data.substr(6), self); | |
} | |
} | |
}, | |
setJSON: function (json) { | |
env.json = json; | |
}, | |
getJSON: function (callback) { | |
if (!callback) { | |
return env.json; | |
} | |
getEnv(function (env) { | |
callback(env.json); | |
}); | |
}, | |
setEnv: function (exEnv) { | |
for (var i in exEnv) { | |
env[i] = exEnv[i]; | |
} | |
envLoaded(); | |
}, | |
_q: {}, | |
on: function (key, act, self) { | |
if (!this._q[key]) this._q[key] = []; | |
if (this._q[key] == -1) { | |
act.apply(self); | |
} else { | |
this._q[key].push([act, self]); | |
} | |
}, | |
run: function (key) { | |
var len = (this._q[key] || []).length; | |
for (var i = 0; i < len; i++) { | |
this._q[key][i][0].apply(this._q[key][i][1]); | |
} | |
this._q[key] = -1; | |
}, | |
waitFor: waitFor | |
} | |
w.fastXDM.Server.prototype.start = function (obj, count) { | |
if (obj.contentWindow) { | |
this.caller = obj.contentWindow; | |
this.frame = obj; | |
w.fastXDM.on('helper', function () { | |
w.fastXDM.onServerStart(this); | |
}, this); | |
} else { // Opera old versions | |
var self = this; | |
count = count || 0; | |
if (count < 50) { | |
setTimeout(function () { | |
self.start.apply(self, [obj, count + 1]); | |
}, 100); | |
} | |
} | |
} | |
w.fastXDM.Server.prototype.destroy = function () { | |
delete handlers[this.key]; | |
} | |
w.fastXDM.Server.prototype.append = function (obj, options, attrs) { | |
var div = document.createElement('DIV'); | |
div.innerHTML = '<iframe name="' + this.frameName + '" ' + (attrs || '') + '></iframe>'; | |
var frame = div.firstChild; | |
var self = this; | |
setTimeout(function () { | |
frame.frameBorder = '0'; | |
if (options) extend(frame, options); | |
obj.insertBefore(frame, obj.firstChild); | |
self.start(frame); | |
}, 0); | |
return frame; | |
} | |
w.fastXDM.Client.prototype.callMethod = w.fastXDM.Server.prototype.callMethod = function () { | |
var args = Array.prototype.slice.call(arguments); | |
var method = args.shift(); | |
for (var i = 0, len = args.length; i < len; i++) { | |
if (typeof (args[i]) === 'function') { | |
this.funcsCount = (this.funcsCount || 0) + 1; | |
var func = args[i]; | |
var funcName = '_func' + this.funcsCount; | |
this.methods[funcName] = function () { | |
func.apply(this, arguments); | |
delete this.methods[funcName]; | |
} | |
args[i] = { _func: this.funcsCount }; | |
} else if (this.options.safe) { | |
args[i] = walkVar(args[i], false); | |
} | |
} | |
waitFor(this, 'caller', function () { | |
w.fastXDM.on(this.id, function () { | |
getEnv(function (env) { | |
env.send(this, env.json.stringify([method, args])); | |
}, this); | |
}, this); | |
}, this); | |
} | |
if (w.JSON && typeof (w.JSON) === 'object' && w.JSON.parse && w.JSON.stringify && w.JSON.stringify({ a: [1, 2, 3] }).replace(/ /g, '') === '{"a":[1,2,3]}') { | |
env.json = { parse: w.JSON.parse, stringify: w.JSON.stringify }; | |
} else { | |
w.fastXDM._needJSON = true; | |
} | |
// PostMessage cover | |
if (w.postMessage) { | |
env.protocol = 'p'; | |
env.send = function (xdm, strData) { | |
var win = (xdm.frame ? xdm.frame.contentWindow : xdm.caller); | |
if (win) { | |
try { | |
win.postMessage(xdm.key + ':' + strData, "*"); | |
} catch (e) { | |
window.postMessage.call(win, xdm.key + ':' + strData, "*"); | |
} | |
} | |
} | |
if (w.addEventListener) { | |
w.addEventListener("message", w.fastXDM.onMessage, false); | |
} else { | |
w.attachEvent("onmessage", w.fastXDM.onMessage); | |
} | |
if (w.fastXDM._needJSON) { | |
w.fastXDM._onlyJSON = true; | |
attachScript(); | |
} else { | |
envLoaded(); | |
} | |
} else { | |
attachScript(); | |
} | |
})(window); | |
if (!window.KIOZK) window.KIOZK = {}; | |
/* | |
* Based on JavaScript implementation of the RSA Data Security, Inc. MD5 Message | |
* Copyright (C) Paul Johnston 1999 - 2009 | |
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet | |
* Distributed under the BSD License | |
*/ | |
if (!KIOZK.MD5) { | |
KIOZK.MD5 = function (n) { | |
var j = function (o, r) { | |
var q = (o & 65535) + (r & 65535), p = (o >> 16) + (r >> 16) + (q >> 16); | |
return (p << 16) | (q & 65535) | |
}, g = function (o, p) { | |
return (o << p) | (o >>> (32 - p)) | |
}, k = function (w, r, p, o, v, u) { | |
return j(g(j(j(r, w), j(o, u)), v), p) | |
}, a = function (q, p, w, v, o, u, r) { | |
return k((p & w) | ((~p) & v), q, p, o, u, r) | |
}, h = function (q, p, w, v, o, u, r) { | |
return k((p & v) | (w & (~v)), q, p, o, u, r) | |
}, c = function (q, p, w, v, o, u, r) { | |
return k(p ^ w ^ v, q, p, o, u, r) | |
}, m = function (q, p, w, v, o, u, r) { | |
return k(w ^ (p | (~v)), q, p, o, u, r) | |
}, b = function (A, u) { | |
var z = 1732584193, y = -271733879, w = -1732584194, v = 271733878, r, q, p, o; | |
A[u >> 5] |= 128 << ((u) % 32); | |
A[(((u + 64) >>> 9) << 4) + 14] = u; | |
for (var t = 0, s = A.length; t < s; t += 16) { | |
r = z; | |
q = y; | |
p = w; | |
o = v; | |
z = a(z, y, w, v, A[t + 0], 7, -680876936); | |
v = a(v, z, y, w, A[t + 1], 12, -389564586); | |
w = a(w, v, z, y, A[t + 2], 17, 606105819); | |
y = a(y, w, v, z, A[t + 3], 22, -1044525330); | |
z = a(z, y, w, v, A[t + 4], 7, -176418897); | |
v = a(v, z, y, w, A[t + 5], 12, 1200080426); | |
w = a(w, v, z, y, A[t + 6], 17, -1473231341); | |
y = a(y, w, v, z, A[t + 7], 22, -45705983); | |
z = a(z, y, w, v, A[t + 8], 7, 1770035416); | |
v = a(v, z, y, w, A[t + 9], 12, -1958414417); | |
w = a(w, v, z, y, A[t + 10], 17, -42063); | |
y = a(y, w, v, z, A[t + 11], 22, -1990404162); | |
z = a(z, y, w, v, A[t + 12], 7, 1804603682); | |
v = a(v, z, y, w, A[t + 13], 12, -40341101); | |
w = a(w, v, z, y, A[t + 14], 17, -1502002290); | |
y = a(y, w, v, z, A[t + 15], 22, 1236535329); | |
z = h(z, y, w, v, A[t + 1], 5, -165796510); | |
v = h(v, z, y, w, A[t + 6], 9, -1069501632); | |
w = h(w, v, z, y, A[t + 11], 14, 643717713); | |
y = h(y, w, v, z, A[t + 0], 20, -373897302); | |
z = h(z, y, w, v, A[t + 5], 5, -701558691); | |
v = h(v, z, y, w, A[t + 10], 9, 38016083); | |
w = h(w, v, z, y, A[t + 15], 14, -660478335); | |
y = h(y, w, v, z, A[t + 4], 20, -405537848); | |
z = h(z, y, w, v, A[t + 9], 5, 568446438); | |
v = h(v, z, y, w, A[t + 14], 9, -1019803690); | |
w = h(w, v, z, y, A[t + 3], 14, -187363961); | |
y = h(y, w, v, z, A[t + 8], 20, 1163531501); | |
z = h(z, y, w, v, A[t + 13], 5, -1444681467); | |
v = h(v, z, y, w, A[t + 2], 9, -51403784); | |
w = h(w, v, z, y, A[t + 7], 14, 1735328473); | |
y = h(y, w, v, z, A[t + 12], 20, -1926607734); | |
z = c(z, y, w, v, A[t + 5], 4, -378558); | |
v = c(v, z, y, w, A[t + 8], 11, -2022574463); | |
w = c(w, v, z, y, A[t + 11], 16, 1839030562); | |
y = c(y, w, v, z, A[t + 14], 23, -35309556); | |
z = c(z, y, w, v, A[t + 1], 4, -1530992060); | |
v = c(v, z, y, w, A[t + 4], 11, 1272893353); | |
w = c(w, v, z, y, A[t + 7], 16, -155497632); | |
y = c(y, w, v, z, A[t + 10], 23, -1094730640); | |
z = c(z, y, w, v, A[t + 13], 4, 681279174); | |
v = c(v, z, y, w, A[t + 0], 11, -358537222); | |
w = c(w, v, z, y, A[t + 3], 16, -722521979); | |
y = c(y, w, v, z, A[t + 6], 23, 76029189); | |
z = c(z, y, w, v, A[t + 9], 4, -640364487); | |
v = c(v, z, y, w, A[t + 12], 11, -421815835); | |
w = c(w, v, z, y, A[t + 15], 16, 530742520); | |
y = c(y, w, v, z, A[t + 2], 23, -995338651); | |
z = m(z, y, w, v, A[t + 0], 6, -198630844); | |
v = m(v, z, y, w, A[t + 7], 10, 1126891415); | |
w = m(w, v, z, y, A[t + 14], 15, -1416354905); | |
y = m(y, w, v, z, A[t + 5], 21, -57434055); | |
z = m(z, y, w, v, A[t + 12], 6, 1700485571); | |
v = m(v, z, y, w, A[t + 3], 10, -1894986606); | |
w = m(w, v, z, y, A[t + 10], 15, -1051523); | |
y = m(y, w, v, z, A[t + 1], 21, -2054922799); | |
z = m(z, y, w, v, A[t + 8], 6, 1873313359); | |
v = m(v, z, y, w, A[t + 15], 10, -30611744); | |
w = m(w, v, z, y, A[t + 6], 15, -1560198380); | |
y = m(y, w, v, z, A[t + 13], 21, 1309151649); | |
z = m(z, y, w, v, A[t + 4], 6, -145523070); | |
v = m(v, z, y, w, A[t + 11], 10, -1120210379); | |
w = m(w, v, z, y, A[t + 2], 15, 718787259); | |
y = m(y, w, v, z, A[t + 9], 21, -343485551); | |
z = j(z, r); | |
y = j(y, q); | |
w = j(w, p); | |
v = j(v, o) | |
} | |
return [z, y, w, v] | |
}, f = function (r) { | |
var q = "", s = -1, p = r.length, o, t; | |
while (++s < p) { | |
o = r.charCodeAt(s); | |
t = s + 1 < p ? r.charCodeAt(s + 1) : 0; | |
if (55296 <= o && o <= 56319 && 56320 <= t && t <= 57343) { | |
o = 65536 + ((o & 1023) << 10) + (t & 1023); | |
s++ | |
} | |
if (o <= 127) { | |
q += String.fromCharCode(o) | |
} else { | |
if (o <= 2047) { | |
q += String.fromCharCode(192 | ((o >>> 6) & 31), 128 | (o & 63)) | |
} else { | |
if (o <= 65535) { | |
q += String.fromCharCode(224 | ((o >>> 12) & 15), 128 | ((o >>> 6) & 63), 128 | (o & 63)) | |
} else { | |
if (o <= 2097151) { | |
q += String.fromCharCode(240 | ((o >>> 18) & 7), 128 | ((o >>> 12) & 63), 128 | ((o >>> 6) & 63), 128 | (o & 63)) | |
} | |
} | |
} | |
} | |
} | |
return q | |
}, e = function (p) { | |
var o = Array(p.length >> 2), r, q; | |
for (r = 0, q = o.length; r < q; r++) { | |
o[r] = 0 | |
} | |
for (r = 0, q = p.length * 8; r < q; r += 8) { | |
o[r >> 5] |= (p.charCodeAt(r / 8) & 255) << (r % 32) | |
} | |
return o | |
}, l = function (p) { | |
var o = ""; | |
for (var r = 0, q = p.length * 32; r < q; r += 8) { | |
o += String.fromCharCode((p[r >> 5] >>> (r % 32)) & 255) | |
} | |
return o | |
}, d = function (o) { | |
return l(b(e(o), o.length * 8)) | |
}, i = function (q) { | |
var t = "0123456789abcdef", p = "", o; | |
for (var s = 0, r = q.length; s < r; s++) { | |
o = q.charCodeAt(s); | |
p += t.charAt((o >>> 4) & 15) + t.charAt(o & 15) | |
} | |
return p | |
}; | |
return i(d(f(n))) | |
} | |
} | |
/* | |
* KIOZK widgets JavaScript library | |
* http://kiozk.ru/ | |
*/ | |
KIOZK.extend = function (target, source, overwrite) { | |
for (var key in source) { | |
if (overwrite || typeof target[key] === 'undefined') { | |
target[key] = source[key]; | |
} | |
} | |
return target; | |
}; | |
KIOZK._protocol = 'https:'; | |
KIOZK._base_domain = ''; | |
if (!KIOZK.xdConnectionCallbacks) { | |
KIOZK.extend(KIOZK, { | |
version: 1, | |
_apiKey: null, | |
_session: null, | |
_domain: { | |
// main: KIOZK._protocol + '//sdk-narrator.kiozk.ru/', | |
main: KIOZK._protocol + '//sdk-narrator.kiozk.ru/', | |
api: KIOZK._protocol + '//api-narrator.kiozk.ru/' | |
}, | |
_path: { | |
login: 'authorize', | |
proxy: 'fxdm_oauth_proxy.html' | |
}, | |
_rootId: 'kiozk_api_transport', | |
_nameTransportPath: '', | |
xdReady: false, | |
}); | |
KIOZK.init = function (options) { | |
var body, root; | |
KIOZK._apiKey = null; | |
if (!options.apiKey) { | |
throw Error('KIOZK.init() called without an apiKey'); | |
} | |
KIOZK._apiKey = options.apiKey; | |
KIOZK.userId = options.userId; | |
return true; | |
}; | |
} else { // if KIOZK.xdConnectionCallbacks | |
setTimeout(function () { | |
var callback; | |
while (callback = KIOZK.xdConnectionCallbacks.pop()) { | |
callback(); | |
} | |
}, 0); | |
if (KIOZK.Widgets && !KIOZK.Widgets._constructor) { | |
KIOZK.Widgets = false; | |
} | |
} | |
if (!KIOZK.XDM) { | |
KIOZK.XDM = { | |
remote: null, | |
init: function () { | |
if (this.remote) return false; | |
var url = KIOZK._domain.api + KIOZK._path.proxy; | |
this.remote = new fastXDM.Server({ | |
onInit: function () { | |
KIOZK.xdReady = true; | |
KIOZK.Observer.publish('xdm.init'); | |
} | |
}); | |
this.remote.append(document.getElementById(KIOZK._rootId), { | |
src: url | |
}); | |
}, | |
xdHandler: function (code) { | |
try { | |
eval('KIOZK.' + code); | |
} catch (e) { | |
// nope | |
} | |
} | |
}; | |
} | |
if (!KIOZK.Observer) { | |
KIOZK.Observer = { | |
_subscribers: function () { | |
if (!this._subscribersMap) { | |
this._subscribersMap = {}; | |
} | |
return this._subscribersMap; | |
}, | |
publish: function (eventName) { | |
var | |
args = Array.prototype.slice.call(arguments), | |
eventName = args.shift(), | |
subscribers = this._subscribers()[eventName], | |
i, j; | |
if (!subscribers) return; | |
for (i = 0, j = subscribers.length; i < j; i++) { | |
if (subscribers[i] != null) { | |
subscribers[i].apply(this, args); | |
} | |
} | |
}, | |
subscribe: function (eventName, handler) { | |
var | |
subscribers = this._subscribers(); | |
if (typeof handler != 'function') return false; | |
if (!subscribers[eventName]) { | |
subscribers[eventName] = [handler]; | |
} else { | |
subscribers[eventName].push(handler); | |
} | |
}, | |
unsubscribe: function (eventName, handler) { | |
var | |
subscribers = this._subscribers()[eventName], | |
i, j; | |
if (!subscribers) return false; | |
if (typeof handler == 'function') { | |
for (i = 0, j = subscribers.length; i < j; i++) { | |
if (subscribers[i] == handler) { | |
subscribers[i] = null; | |
} | |
} | |
} else { | |
delete this._subscribers()[eventName]; | |
} | |
} | |
}; | |
} | |
if (!KIOZK.Widgets) { | |
KIOZK.Widgets = {}; | |
KIOZK.Widgets.count = 0; | |
KIOZK.Widgets.RPC = {}; | |
KIOZK.Widgets.showBoxUrl = function (domain, url) { | |
domain = (domain || KIOZK._protocol + '//sdk-narrator.kiozk.ru').replace(/\/?\s*$/, ''); | |
url = url.replace(/^\s*\/?/, ''); | |
return domain + '/' + url; | |
}; | |
KIOZK.Widgets.loading = function (obj, enabled) { | |
obj.style.background = enabled ? 'url("' + KIOZK._protocol + '//sdk-narrator.kiozk.ru/images/upload2.gif") center center no-repeat transparent' : 'none'; | |
}; | |
/** | |
* | |
* @param objId | |
* @param options | |
* @returns {*|number} | |
* @constructor | |
*/ | |
KIOZK.Widgets.Stories = function (objId, options) { | |
if (!options.apiKey) { | |
throw Error('KIOZK.init() called without an apiKey'); | |
} | |
KIOZK._apiKey = options.apiKey; | |
if (!KIOZK._apiKey) throw Error('KIOZK not initialized. Please use KIOZK.init'); | |
options = options || {}; | |
let params = { | |
// настройки storiesList виджета | |
// storiesLayoutHeight: options.storiesLayoutHeight || 0, | |
storiesTitle: options.storiesTitle || '', | |
storiesTitleColor: options.storiesTitleColor || '', | |
storiesTitleFont: options.storiesTitleFont || '-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji', | |
storiesTitleFontSize: options.storiesTitleFontSize !== undefined ? options.storiesTitleFontSize : 20, | |
storiesTitleLineHeight: options.storiesTitleFontSize !== undefined ? options.storiesTitleLineHeight : 20, | |
storiesTitleFontWeight: options.storiesTitleFontWeight || 'bold', | |
storiesTitleMarginBottom: options.storiesTitleMarginBottom !== undefined ? options.storiesTitleMarginBottom : 20, | |
storiesListItemTitleColor: options.storiesListItemTitleColor || '', | |
storiesListItemTitleFont: options.storiesListItemTitleFont || '-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji', | |
storiesListItemTitleFontSize: options.storiesListItemTitleFontSize !== undefined ? options.storiesListItemTitleFontSize : 15, | |
storiesListItemTitleLineHeight: options.storiesListItemTitleLineHeight !== undefined ? options.storiesListItemTitleLineHeight : 15, | |
storiesListItemTitleFontWeight: options.storiesListItemTitleFontWeight || 'normal', | |
storiesBackgroundColor: options.storiesBackgroundColor || 'rgba(0,0,0,0)', | |
storiesHeight: options.storiesHeight || 70, | |
storiesListSidePadding: options.storiesListSidePadding || 20, | |
storiesListTopPadding: options.storiesListTopPadding || 20, | |
storiesListBottomPadding: options.storiesListBottomPadding || 20, | |
storiesGap: options.storiesGap || 10, | |
storiesStyle: ['circle', 'quad', 'rectangle'].indexOf(options.storiesStyle) !== -1 ? options.storiesStyle : 'circle', | |
storiesBorderNotReadColor: options.storiesBorderNotReadedColor || '#00b956', | |
storiesBorderReadColor: options.storiesBorderReadedColor || '#ededed', | |
storiesListBorderNotReadWidth: options.storiesListBorderNotReadWidth !== undefined ? options.storiesListBorderNotReadWidth : 2, | |
storiesListBorderReadWidth: options.storiesListBorderReadWidth !== undefined ? options.storiesListBorderReadWidth : 1, | |
storiesListBorderGapNotRead: options.storiesListBorderGapNotRead !== undefined ? options.storiesListBorderGapNotRead : 2, | |
storiesListBorderGapRead: options.storiesListBorderGapRead !== undefined ? options.storiesListBorderGapRead : 3, | |
storiesListBorderRadius: options.storiesListBorderRadius !== undefined ? options.storiesListBorderRadius : 5, | |
// настройки storiesViewer виджета | |
storiesCloseButtonPosition: options.storiesCloseButtonPosition || 'right', | |
storiesScrollStyle: options.storiesScrollStyle || 'flat', | |
tags: options.tags || '', | |
userId: options.userId || null, | |
hasLike: options.hasLike || false, | |
hasFavorite: options.hasFavorite || false, | |
}, | |
widgetRoot, | |
widget, | |
rpc, | |
inFullScreenMode = false, | |
scrollPosition = [0, 0]; | |
options.allowTransparency = true; | |
options.overflowTouch = false; | |
options.backgroundColor = params.storiesBackgroundColor; | |
var defaults = { | |
startHeight: 70, | |
minWidth: 150, | |
storiesHeight: 70 | |
}; | |
if (!params.storiesTitle) { | |
defaults.startHeight = parseFloat((params.storiesHeight || defaults.storiesHeight)) + parseFloat(params.storiesListTopPadding) + parseFloat(params.storiesListBottomPadding); | |
} else { | |
defaults.startHeight = 50 + parseFloat((params.storiesHeight || defaults.storiesHeight)) + parseFloat(params.storiesListTopPadding) + parseFloat(params.storiesListBottomPadding); | |
} | |
var body = document.querySelector('body'), | |
html = document.querySelector('html'), | |
zIndex = options.zIndex || 10000; | |
const functions = { | |
// TODO add class to body | |
switchToFullScreen: function () { | |
if (inFullScreenMode) { | |
return; | |
} | |
window.ReactNativeWebView.postMessage("onEnterFullscreen") | |
scrollPosition = KIOZK.Util.getScroll(); | |
if (body) { | |
body.style.setProperty('user-select', 'none'); | |
body.style.setProperty('-webkit-user-select', 'none'); | |
body.style.setProperty('overflow', 'hidden'); | |
body.style.setProperty('-webkit-overflow-scrolling', 'touch'); | |
} | |
if (html) { | |
html.style.setProperty('position', 'fixed'); | |
html.style.setProperty('overflow', 'hidden'); | |
} | |
if (widgetRoot && widget) { | |
// Р С—Р С•Р В»РЎС“РЎвЂЎР В°Р ВµР С РЎвЂљР ВµР С”РЎС“РЎвЂ°Р ВµР Вµ РЎРѓР Сещение РѕС‚ начала viewport | |
const viewportOffset = widgetRoot.getBoundingClientRect(); | |
const offsetTop = viewportOffset.top; | |
widget.style.setProperty('position', 'fixed') | |
widget.style.setProperty('top', '0') | |
widget.style.setProperty('bottom', '0') | |
widget.style.setProperty('left', '0') | |
widget.style.setProperty('right', '0') | |
widget.style.setProperty('height', '0') | |
widget.style.setProperty('min-height', '100%') | |
widget.style.setProperty('max-height', '100%') | |
widget.style.setProperty('z-index', zIndex) | |
rpc.callMethod('onEnterFullScreen', { offsetTop: offsetTop }) | |
} | |
inFullScreenMode = true; | |
// newWidth = parseInt(newWidth); | |
// newHeight = parseInt(newHeight); | |
// var widgetElem = document.getElementById('kiozkwidget' + widgetId); | |
// if (isFinite(newWidth)) { | |
// obj.style.width = newWidth + 'px'; | |
// if (widgetElem) { | |
// widgetElem.style.width = newWidth + 'px'; | |
// } | |
// } | |
// if (isFinite(newHeight)) { | |
// obj.style.height = newHeight + 'px'; | |
// if (widgetElem) { | |
// widgetElem.style.height = newHeight + 'px'; | |
// } | |
// } | |
// if (options.onResizeWidget) options.onResizeWidget(); | |
// | |
}, | |
switchFromFullScreen: function () { | |
if (!inFullScreenMode) { | |
return; | |
} | |
window.ReactNativeWebView.postMessage("onExitFullscreen") | |
if (widgetRoot && widget) { | |
widget.style.setProperty('position', '') | |
widget.style.setProperty('top', '') | |
widget.style.setProperty('bottom', '') | |
widget.style.setProperty('left', '') | |
widget.style.setProperty('right', '') | |
widget.style.setProperty('height', isFinite(defaults['startHeight']) ? defaults['startHeight'] + 'px' : '100%') | |
widget.style.setProperty('min-height', '') | |
widget.style.setProperty('max-height', '') | |
widget.style.setProperty('z-index', '') | |
rpc.callMethod('onLeaveFullScreen') | |
} | |
if (body) { | |
body.style.setProperty('user-select', ''); | |
body.style.setProperty('-webkit-user-select', ''); | |
body.style.setProperty('overflow', ''); | |
body.style.setProperty('-webkit-overflow-scrolling', ''); | |
} | |
if (html) { | |
html.style.setProperty('position', ''); | |
html.style.setProperty('overflow', ''); | |
} | |
window.scrollTo(scrollPosition[0], scrollPosition[1]) | |
inFullScreenMode = false; | |
}, | |
}; | |
return KIOZK.Widgets._constructor('widget_stories.php', objId, options, params, functions, defaults, function (o, i, r) { | |
widgetRoot = o; | |
widget = i; | |
rpc = r; | |
}); | |
}; | |
KIOZK.Widgets._constructor = function (widgetUrl, objId, options, params, funcs, defaults, onDone, widgetId, iter) { | |
var obj = document.getElementById(objId); | |
widgetId = widgetId || (++KIOZK.Widgets.count); | |
if (!obj) { | |
iter = iter || 0; | |
if (iter > 10) { | |
throw Error('KIOZK.Widgets: object #' + objId + ' not found.'); | |
} | |
setTimeout(function () { | |
KIOZK.Widgets._constructor(widgetUrl, objId, options, params, funcs, defaults, onDone, widgetId, iter + 1); | |
}, 500); | |
return widgetId; | |
} | |
options = options || {}; | |
defaults = defaults || {}; | |
funcs = funcs || {}; | |
if (options.preview) { | |
params.preview = 1; | |
delete options['preview']; | |
} | |
let ifr, url, urlQueryString, encodedParam, rpc, iframe, i, | |
base_domain = options.base_domain || KIOZK._protocol + '//sdk-narrator.kiozk.ru', | |
// base_domain = options.base_domain || KIOZK._protocol + '//sdk-nar-nar.test.kiozk.ru', | |
width = options.width === 'auto' ? (obj.clientWidth || obj.offsetWidth || defaults.minWidth) | 0 : parseInt(options.width || 0, 10); | |
width = width ? (Math.max(defaults.minWidth || 200, Math.min(defaults.maxWidth || 10000, width)) + 'px') : '100%'; | |
obj.style.width = width; | |
if (options.height) { | |
params.height = options.height; | |
obj.style.height = options.height + 'px'; | |
} else { | |
obj.style.height = (defaults.startHeight || 200) + 'px'; | |
} | |
if (options.overflowTouch) { | |
obj.style['overflow'] = 'auto'; | |
obj.style['-webkit-overflow-scrolling'] = 'touch'; | |
} | |
if (width === '100%') params.startWidth = (obj.clientWidth || obj.offsetWidth) | 0; | |
if (!params.url) params.url = options.pageUrl || location.href.replace(/#.*$/, ''); | |
url = base_domain + '/' + widgetUrl; | |
urlQueryString = ''; | |
if (!options.noDefaultParams) { | |
urlQueryString += '&appKey=' + KIOZK._apiKey + '&width=' + encodeURIComponent(width) | |
} | |
urlQueryString += '&_ver=' + KIOZK.version | |
params.url = params.url || ""; | |
params.referrer = params.referrer || document.referrer || ""; | |
params.title = params.title || document.title || ""; | |
params.userId = params.userId || null; | |
for (i in params) { | |
if (typeof (params[i]) == 'number') { | |
encodedParam = params[i]; | |
} else { | |
try { | |
encodedParam = encodeURIComponent(params[i]); | |
} catch (e) { | |
encodedParam = ''; | |
} | |
} | |
urlQueryString += '&' + i + '=' + encodedParam; | |
} | |
urlQueryString += '&' + (+new Date()).toString(16); | |
url += '?' + urlQueryString.substr(1); | |
funcs.onStartLoading && funcs.onStartLoading(); | |
if (!options.no_loading) { | |
KIOZK.Widgets.loading(obj, true); | |
} | |
funcs.showLoader = function (enable) { | |
KIOZK.Util.Loader(enable); | |
}; | |
funcs.publish = function () { | |
var args = Array.prototype.slice.call(arguments); | |
args.push(widgetId); | |
KIOZK.Observer.publish.apply(KIOZK.Observer, args); | |
}; | |
funcs.onInit = function () { | |
KIOZK.Widgets.loading(obj, false); | |
if (funcs.onReady) funcs.onReady(); | |
if (options.onReady) options.onReady(); | |
}; | |
funcs.resize = function (e, cb) { | |
obj.style.height = e + 'px'; | |
var el = document.getElementById('kiozkwidget' + widgetId); | |
if (el) { | |
el.style.height = e + 'px'; | |
} | |
}; | |
funcs.resizeWidget = function (newWidth, newHeight) { | |
newWidth = parseInt(newWidth); | |
newHeight = parseInt(newHeight); | |
var widgetElem = document.getElementById('kiozkwidget' + widgetId); | |
if (isFinite(newWidth)) { | |
obj.style.width = newWidth + 'px'; | |
if (widgetElem) { | |
widgetElem.style.width = newWidth + 'px'; | |
} | |
} | |
if (isFinite(newHeight)) { | |
obj.style.height = newHeight + 'px'; | |
if (widgetElem) { | |
widgetElem.style.height = newHeight + 'px'; | |
} | |
} | |
if (options.onResizeWidget) options.onResizeWidget(); | |
}; | |
rpc = KIOZK.Widgets.RPC[widgetId] = new fastXDM.Server(funcs, function (origin) { | |
if (!origin) return true; | |
origin = origin.toLowerCase(); | |
return (origin.match(/(\.|\/)kiozk\.ru($|\/|\?)/)); | |
}, { safe: true }); | |
iframe = KIOZK.Widgets.RPC[widgetId].append(obj, { | |
src: url, | |
width: (width.indexOf('%') != -1) ? width : (parseInt(width) || width), | |
height: defaults.startHeight || '100%', | |
scrolling: 'no', | |
id: 'kiozkwidget' + widgetId, | |
allowTransparency: options.allowTransparency || false, | |
style: { | |
overflow: 'hidden', | |
backgroundColor: options.backgroundColor || 'transparent' | |
} | |
}); | |
onDone && setTimeout(function () { | |
onDone(obj, iframe || obj.firstChild, rpc); | |
}, 10); | |
return widgetId; | |
}; | |
KIOZK.Widgets.destroy = function (widgetId, objId) { | |
var obj = document.getElementById(objId); | |
if (!obj) { | |
throw Error('KIOZK.Widgets: object #' + objId + ' not found.'); | |
} | |
var rpc = KIOZK.Widgets.RPC[widgetId]; | |
if (!rpc) { | |
rpc.destroy(); | |
} | |
// TODO destroy APP | |
obj.innerHTML = ''; | |
}; | |
} | |
if (!KIOZK.Util) { | |
KIOZK.Util = { | |
getStyle: function (elem, name) { | |
var ret, defaultView = document.defaultView || window; | |
if (defaultView.getComputedStyle) { | |
name = name.replace(/([A-Z])/g, '-$1').toLowerCase(); | |
var computedStyle = defaultView.getComputedStyle(elem, null); | |
if (computedStyle) { | |
ret = computedStyle.getPropertyValue(name); | |
} | |
} else if (elem.currentStyle) { | |
var camelCase = name.replace(/\-(\w)/g, function (all, letter) { | |
return letter.toUpperCase(); | |
}); | |
ret = elem.currentStyle[name] || elem.currentStyle[camelCase]; | |
} | |
return ret; | |
}, | |
getXY: function (obj, fixed) { | |
if (!obj || obj === undefined) return; | |
var left = 0, top = 0; | |
if (obj.getBoundingClientRect !== undefined) { | |
var rect = obj.getBoundingClientRect(); | |
left = rect.left; | |
top = rect.top; | |
fixed = true; | |
} else if (obj.offsetParent) { | |
do { | |
left += obj.offsetLeft; | |
top += obj.offsetTop; | |
if (fixed) { | |
left -= obj.scrollLeft; | |
top -= obj.scrollTop; | |
} | |
} while (obj = obj.offsetParent); | |
} | |
if (fixed) { | |
top += window.pageYOffset || window.scrollNode && scrollNode.scrollTop || document.documentElement.scrollTop; | |
left += window.pageXOffset || window.scrollNode && scrollNode.scrollLeft || document.documentElement.scrollLeft; | |
} | |
return [left, top]; | |
}, | |
Loader: function self(enable) { | |
if (!self.loader) { | |
self.loader = document.createElement('DIV'); | |
self.loader.innerHTML = '<style type="text/css">\ | |
@-webkit-keyframes KIOZKWidgetsLoaderKeyframes {0%{opacity: 0.2;}30%{opacity: 1;}100%{opacity: 0.2;}}\ | |
@keyframes KIOZKWidgetsLoaderKeyframes {0%{opacity: 0.2;}30%{opacity: 1;}100%{opacity: 0.2;}}\ | |
.KIOZKWidgetsLoader div {width: 7px;height: 7px;-webkit-border-radius: 50%;-khtml-border-radius: 50%;-moz-border-radius: 50%;border-radius: 50%;background: #fff;top: 21px;position: absolute;z-index: 2;-o-transition: opacity 350ms linear; transition: opacity 350ms linear;opacity: 0.2;-webkit-animation-duration: 750ms;-o-animation-duration: 750ms;animation-duration: 750ms;-webkit-animation-name: KIOZKWidgetsLoaderKeyframes;-o-animation-name: KIOZKWidgetsLoaderKeyframes;animation-name: KIOZKWidgetsLoaderKeyframes;-webkit-animation-iteration-count: infinite;-o-animation-iteration-count: infinite;animation-iteration-count: infinite;-webkit-transform: translateZ(0);transform: translateZ(0);}</style><div class="KIOZKWidgetsLoader" style="position: fixed;left: 50%;top: 50%;margin: -25px -50px;z-index: 1002;height: 50px;width: 100px;"><div style="left: 36px;-webkit-animation-delay: 0ms;-o-animation-delay: 0ms;animation-delay: 0ms;"></div><div style="left: 47px;-webkit-animation-delay: 180ms;-o-animation-delay: 180ms;animation-delay: 180ms;"></div><div style="left: 58px;-webkit-animation-delay: 360ms;-o-animation-delay: 360ms;animation-delay: 360ms;"></div><span style="display: block;background-color: #000;-webkit-border-radius: 4px;-khtml-border-radius: 4px;-moz-border-radius: 4px;border-radius: 4px;-webkit-box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.35);-moz-box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.35);box-shadow: 0px 2px 10px rgba(0, 0, 0, 0.35);position: absolute;left: 0;top: 0;bottom: 0; right: 0;z-index: 1;opacity: 0.7;"></span></div>'; | |
document.body.insertBefore(self.loader, document.body.firstChild); | |
} | |
self.loader.style.display = enable ? 'block' : 'none'; | |
}, | |
addEvent: function (type, func, target) { | |
target = target || window.document; | |
if (target.addEventListener) { | |
target.addEventListener(type, func, false); | |
} else if (target.attachEvent) { | |
target.attachEvent('on' + type, func); | |
} | |
}, | |
removeEvent: function (type, func, target) { | |
target = target || window.document; | |
if (target.removeEventListener) { | |
target.removeEventListener(type, func, false); | |
} else if (target.detachEvent) { | |
target.detachEvent('on' + type, func); | |
} | |
}, | |
ss: function (el, styles) { | |
KIOZK.extend(el.style, styles, true); | |
}, | |
getScroll: function () { | |
if (window.pageYOffset !== undefined) { | |
return [pageXOffset, pageYOffset]; | |
} else { | |
var sx, sy, d = document, | |
r = d.documentElement, | |
b = d.body; | |
sx = r.scrollLeft || b.scrollLeft || 0; | |
sy = r.scrollTop || b.scrollTop || 0; | |
return [sx, sy]; | |
} | |
} | |
}; | |
} | |
// Init asynchronous library loading | |
for (var i = 0; i < KIOZK._e.length; i++) { | |
setTimeout(KIOZK._e[i], 0); | |
} | |
// window.kiozkAsyncInit && setTimeout(kiozkAsyncInit, 0); | |
if (window.kiozkAsyncInitCallbacks && kiozkAsyncInitCallbacks.length) { | |
setTimeout(function () { | |
var callback; | |
while (callback = kiozkAsyncInitCallbacks.pop()) { | |
try { | |
callback(); | |
} catch (e) { | |
try { | |
console.error(e); | |
} catch (e2) { | |
} | |
} | |
} | |
}, 0); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment