{"version":3,"sources":["sdk/src/utils/logger.ts","sdk/src/utils/underscore.ts","sdk/src/utils/device/detection/feature.ts","sdk/src/utils/device/detection/os.ts","sdk/src/utils/device/detection/viewport.ts","sdk/src/utils/device/detection/model.ts","sdk/src/utils/device/detection/browser.ts","sdk/src/utils/device/detection/hybrid.ts","sdk/src/utils/device/device.ts","sdk/src/utils/dom.ts","sdk/src/utils/store.ts","../node_modules/ua-parser-js/src/ua-parser.js","../node_modules/webpack/buildin/amd-options.js","../node_modules/js-logger/src/logger.js","../node_modules/@888webteam/iframe-allow-camera/dist/index.js","../node_modules/assign-deep/index.js","../node_modules/is-primitive/index.js","../node_modules/assign-deep/node_modules/assign-symbols/index.js","../node_modules/assign-deep/node_modules/kind-of/index.js","sdk/src/utils/strings.ts"],"names":["logger","useDefaults","Logger","name","_logger","logLevel","this","_getQueryParameters","window","get","setLevel","SET_LOG_LEVEL","log","_log","severity","_isConsoleEnabled","console","str","document","location","search","replace","split","map","n","bind","level","toString","toUpperCase","DEBUG","INFO","WARN","ERROR","OFF","Underscore","input","Object","prototype","call","isNaN","expectedArray","Array","isArray","value","isNull","isUndefined","obj","propChain","properties","length","shift","isNullOrUndefined","constructor","keys","defaultValue","Error","result","Number","expectedNodeList","stringRepr","test","nodeType","expectedElement","HTMLElement","substr","indexOf","src","id","Date","now","type","Promise","resolve","reject","s","createElement","onload","onerror","body","appendChild","s4","Math","floor","random","substring","text","possible","i","charAt","link","url","match","isString","URL","err","isFullScreen","closeFullScreen","openFullScreen","documentElement","Element","DOM","hasClass","addClass","removeClass","event","charCode","which","keyCode","shiftOn","shiftKey","modifiers","target","source","forEach","curr","assign","xmlStr","xmlDoc","ActiveXObject","async","loadXML","DOMParser","parseFromString","_createXmlDoc","pairs","slice","pair","pairMatch","decodeURIComponent","e","JSON","parse","stringify","json","isEmpty","key","encodeURIComponent","join","getBody","toParse","defaultInException","ex","val","undefined","toLowerCase","trim","strFunction","startFunctionParams","endFunctionParams","strFunctionName","strFunctionParams","arrayFunctionParams","rawStringFunction","functionName","functionStringParams","functionArrayParams","options","removeUndefined","removeNull","cleanObject","entries","Boolean","direction","scrollSize","duration","container","smoothLevel","res","stepInterval","ceil","restSize","scrollStepSize","scrollStepFn","scrollLeft","scrollTop","setTimeout","reduce","accum","prop","arr1","arr2","areItemsEqual","num","digits","index","formatMap","symbol","toFixed","fn","context","apply","arguments","DeviceFeatureDetection","DocumentTouch","navigator","maxTouchPoints","DeviceOSDetection","parser","os","getOS","parseInt","version","isMobileOS","isIOS","isAndroid","DeviceViewportDetection","innerWidth","innerHeight","screen","height","width","ratio","systemXDPI","logicalXDPI","devicePixelRatio","matchMedia","matches","DeviceModelDetection","device","getDevice","vendor","model","DeviceBrowserDetection","browser","getBrowser","allowAttrValue","getAllowAttr","NATIVE_TYPE","DeviceHybridDetection","_hybrid","_inPoker","_inSport","_embedded","CLASS","buildHybridInfo","casinoHybrid","build_isCasinoHybrid","inPokerHybrid","build_isInPokerHybrid","inSportHybrid","build_isInSportHybrid","genericHybridEmbedded","casinoHybridEmbedded","inPokerHybridEmbedded","inSportHybridEmbedded","dataSanityCheck","isNativeIOS","isNativeAndroid","NativeInterface","Store","storedClientVersion","startsWith","storedSourceProductPackage","className","webkit","messageHandlers","error","Device","_uaParser","UAParser","feature","viewport","hybrid","getUA","connection","effectiveType","rtt","downlink","uuid","media","standalone","isStandalone","getContext","isProbablyIOSDevice","isHybrid","cookieEnabled","isMacOS","isTouch","isIpad","isIphone","isMobile","screenWidth","screenHeight","getIphoneVersion","isTablet","b","m","bd","bmt","t","count","tt","max","_createLogger","element","append","query","el","_","isTag","tag","isId","getElementById","querySelectorAll","isNodeList","selector","querySelector","content","newStyle","innerHTML","html","classList","domElement","_class","isElement","parentNode","removeChild","insertBefore","firstChild","add","toggle","contains","attribute","setAttribute","style","removeProperty","getCurrentStyle","horizontMargin","parseFloat","marginLeft","marginRight","verticalMargin","marginBottom","marginTop","offsetWidth","offsetHeight","horizontPadding","paddingLeft","paddingRight","verticalPadding","paddingBottom","paddingTop","horizontBorder","borderLeftWidth","borderRightWidth","verticalBorder","borderBottomWidth","borderTopWidth","fullWidth","fullHeight","size","unit","getComputedStyle","remove","attr","removeAttribute","tagName","g","data","attributes","camelCaseName","$0","$1","textContent","callback","msgElement","msgType","msgCallback","useCapture","addEventListener","removeEventListener","eventName","isFunction","timeout","namedSetInterval","handle","clearInterval","namedSetTimeout","clearTimeout","CGPLogger","CGPStorage","_selectedStorage","init","isLocalStorageNameSupported","debug","LocalStorage","WindowStorage","setFullYear","getFullYear","cookie","toUTCString","RegExp","testKey","storage","localStorage","setItem","removeItem","set","delKey","delArray","del","clear","_perfix","getQueryParameters","localStorageExists","getKeyConvention","getItem","filter","isKeyConvention","push","Strings","keyConvention","_storgeKeyName","_cgpStorage","storageExists","defaultGetter","FUNC_TYPE","UNDEF_TYPE","OBJ_TYPE","STR_TYPE","MODEL","NAME","TYPE","VENDOR","VERSION","ARCHITECTURE","CONSOLE","MOBILE","TABLET","SMARTTV","WEARABLE","EMBEDDED","AMAZON","APPLE","ASUS","BLACKBERRY","FIREFOX","GOOGLE","HUAWEI","LG","MICROSOFT","MOTOROLA","OPERA","SAMSUNG","SONY","XIAOMI","ZEBRA","FACEBOOK","enumerize","arr","enums","has","str1","str2","lowerize","len","rgxMapper","ua","arrays","j","k","p","q","regex","props","exec","strMapper","windowsVersionMap","regexes","CHROME","cpu","engine","EDGE","extensions","getResult","_ua","userAgent","_rgxmap","mergedRegexes","concat","extend","_browser","major","getCPU","_cpu","_device","getEngine","_engine","_os","setUA","BROWSER","CPU","DEVICE","ENGINE","OS","exports","module","define","$","jQuery","Zepto","__webpack_amd_options__","global","logHandler","contextualLoggersByNameMap","scope","func","merge","args","hasOwnProperty","defineLogLevel","TRACE","TIME","ContextualLogger","defaultContext","filterLevel","info","newLevel","getLevel","enabledFor","lvl","trace","invoke","warn","time","label","timeEnd","msgArgs","globalLogger","L","setHandler","createDefaultHandler","formatter","messages","unshift","timerStartTimeByLabelMap","invokeConsoleMethod","hdlr","Function","timerLabel","getTime","defaultLevel","r","o","l","c","d","defineProperty","enumerable","Symbol","toStringTag","__esModule","create","default","BrowserInfo","platform","NodeInfo","bot","BotInfo","a","u","detect","parseUserAgent","detectOS","getNodeVersion","f","nodeName","run","h","fun","array","w","nextTick","title","env","argv","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","umask","isPrimitive","require","assignSymbols","typeOf","isObject","isValidKey","hasOwn","receiver","objects","TypeError","getOwnPropertySymbols","isEnumerable","propertyIsEnumerable","provider","names","String","isBuffer","_curlyBracesPattern","_string","found","currentMatch","_getBindingMethod","bindExpression","bindMap","to","bindRelatedMethod","stringToInjectT","stringToInject","n1","from","partialString","searchString","position","bindingParams","bindTo","tokens"],"mappings":"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","file":"static/js/cgp-sdk~launcher.0381ac6c.chunk.js","sourcesContent":["import logger from 'js-logger';\n\nlogger.useDefaults();\n\nexport default class Logger {\n\n static SET_LOG_LEVEL(level = 'ERROR'): any {\n switch (level.toString().toUpperCase()) {\n case 'DEBUG':\n return logger.DEBUG;\n case 'INFO':\n return logger.INFO;\n case 'WARN':\n return logger.WARN;\n case 'ERROR':\n default:\n return logger.ERROR;\n case 'OFF':\n return logger.OFF;\n }\n }\n\n _logger;\n\n\n constructor(name: string) {\n let logLevel = this._getQueryParameters()['logLevel'] || window['LOG_LEVEL'];\n this._logger = logger.get(name);\n this._logger.setLevel(Logger.SET_LOG_LEVEL(logLevel));\n }\n\n\n /**\n * Fatal errors. Mission critical - application can not run properly when present.\n */\n error(...log): void {\n this._log('error', log);\n }\n\n\n /**\n * Warning only. Should be fixed but application been able to recover.\n */\n warn(...log): void {\n this._log('warn', log);\n }\n\n\n /**\n * Information only. General info printed.\n */\n info(...log): void {\n this._log('info', log);\n }\n\n\n /**\n * Debug mode. Print as much as possible to allow quick and easy debugging when needed.\n */\n debug(...log): void {\n this._log('debug', log);\n }\n\n\n /**\n * ULTRA Debug mode, almost silly to use. Print as much as possible to allow quick and easy debugging when needed.\n * But very useful debugging, should contain ALOT of prints via this method.\n */\n silly(...log) : void {\n this._log('silly', log);\n }\n\n\n /**\n * Private method, provides single point of access to the \"console.log\" API.\n * Prevents mess around the code and a clean way to prevent the output of the log or the severity level.\n */\n _log(severity: string, log: any) {\n if (this._isConsoleEnabled(severity)) {\n this._logger[severity](log);\n }\n }\n\n\n /**\n * Checks that console is globally defined and able to use it to print out log data to it.\n */\n private _isConsoleEnabled(severity: string): boolean {\n return 'undefined' !== typeof console && 'undefined' !== typeof console[severity]; // eslint-disable-line no-console\n }\n\n /**\n * Get Query String or \"string\" as Object\n */\n private _getQueryParameters(str?: string) {\n return (str || document.location.search).replace(/(^\\?)/, '').split(\"&\").map(function (n) {\n n = n.split(\"=\");\n this[n[0]] = n[1];\n\n return this;\n }.bind({}))[0];\n }\n\n}","import DOM from './dom';\nimport assign from 'assign-deep';\n\n\nclass Underscore {\n isArguments(input) : boolean {\n return '[object Arguments]' === Object.prototype.toString.call(input);\n }\n\n isFunction(input) : boolean {\n return '[object Function]' === Object.prototype.toString.call(input);\n }\n\n isString(input) : boolean {\n return '[object String]' === Object.prototype.toString.call(input);\n }\n\n isNumber(input) : boolean {\n return '[object Number]' === Object.prototype.toString.call(input) && !isNaN(input);\n }\n\n isObject(input) : boolean {\n return '[object Object]' === Object.prototype.toString.call(input);\n }\n\n isDate(input) : boolean {\n return '[object Date]' === Object.prototype.toString.call(input);\n }\n\n isArray(expectedArray) : boolean {\n return Array.isArray(expectedArray);\n }\n\n isBoolean(input) : boolean {\n return true === input || false === input || '[object Boolean]' === Object.prototype.toString.call(input);\n }\n\n\n isError(input) : boolean {\n return '[object Error]' === Object.prototype.toString.call(input);\n }\n\n isSymbol(input) : boolean {\n return '[object Symbol]' === Object.prototype.toString.call(input);\n }\n\n isUndefined(input) : boolean {\n return '[object Undefined]' === Object.prototype.toString.call(input);\n }\n\n isHTMLDivElement(input) : boolean {\n return '[object HTMLDivElement]' === Object.prototype.toString.call(input);\n }\n\n isHTMLImgElement(input) : boolean {\n return '[object HTMLImageElement]' === Object.prototype.toString.call(input);\n }\n\n\n isNull(value) : boolean {\n return 'null' === value || value === null;\n }\n\n isNullOrUndefined(input) : boolean {\n return this.isNull(input) || this.isUndefined(input);\n }\n\n\tpropertyChainExists(obj: any, propChain: string) : boolean {\n let properties = propChain.split('.');\n while (properties.length > 0) {\n obj = obj[properties.shift()];\n if (this.isUndefined(obj)) {\n return false;\n }\n }\n return true;\n }\n\n isEmpty(input) : boolean {\n\n return this.isNullOrUndefined(input) || 0 === input.length || (input.constructor === Object && Object.keys(input).length === 0);\n }\n\n\n safeStringToNumber(str: string, defaultValue?: number) : number {\n\n if(this.isNullOrUndefined(str)) {\n if(this.isNullOrUndefined(defaultValue)) {\n throw new Error(`str parameter is null or undefined and no default value provided`);\n }\n\n return defaultValue;\n }\n\n let result = Number(str);\n\n if (Number.isNaN(result)) {\n if(this.isNullOrUndefined(defaultValue)) {\n throw new Error(`${str} is not a number and no default value provided`);\n }\n return defaultValue;\n }\n\n return result;\n }\n\n\n isNodeList(expectedNodeList: any) : boolean {\n var stringRepr = Object.prototype.toString.call(expectedNodeList);\n\n return typeof expectedNodeList === 'object' &&\n /^\\[object (HTMLCollection|NodeList|Object)\\]$/.test(stringRepr) &&\n (typeof expectedNodeList.length === 'number') &&\n (expectedNodeList.length === 0 || (typeof expectedNodeList[0] === \"object\" && expectedNodeList[0].nodeType > 0));\n }\n\n\n isElement(expectedElement: any) : boolean {\n return expectedElement instanceof HTMLElement;\n }\n\n /**\n * Check if string includes another substring\n *\n */\n includes(str: string, substr: string) : boolean{\n return str.indexOf(substr) !== -1;\n }\n\n\n /**\n * Load async js script code.\n *\n */\n loadAsyncScript(src: string, id: string = 'cgp-dynamic-script-' + Date.now(), type: string = 'text/javascript') : Promise {\n return new Promise((resolve, reject) => {\n var s;\n s = document.createElement('script');\n s.src = src;\n s.id = id;\n s.type = type;\n s.onload = resolve;\n s.onerror = reject;\n document.body.appendChild(s);\n });\n }\n\n\n /**\n * Generate GUID\n */\n getGuid(): string {\n let s4 = () => {\n return Math.floor((1 + Math.random()) * 0x10000)\n .toString(16)\n .substring(1);\n };\n\n return s4() + s4() + s4() + s4() +\n s4() + s4() + s4() + s4();\n }\n\n\n /**\n * Make id.\n *\n */\n makeid() : string {\n var text = \"\";\n var possible = \"abcdefghijklmnopqrstuvwxyz\";\n\n for (var i = 0; i < 10; i++)\n text += possible.charAt(Math.floor(Math.random() * possible.length));\n\n return text;\n }\n\n /**\n * return if the link is absolute\n * @param link\n * @returns {boolean}\n */\n isAbsoluteLink(link) {\n let regex = /^https?:\\/\\//i;\n return regex.test(link);\n }\n\n /**\n * Get hostname.\n *\n */\n getHostName(url: string) : string {\n const match = url.match(/(https?:\\/\\/[^/?#]+)/i);\n if (match != null && match.length === 2 && typeof match[1] === 'string' && match[1].length > 0) {\n return match[1];\n }\n else {\n return null;\n }\n }\n\n\n /**\n * Determinate if the given URL is valid(support also mailto url)\n *\n */\n isValidUrl(url: any): boolean {\n if (!this.isString(url))\n return false;\n var rg = /(^(((https?):\\/\\/)|(\\/))[^\\s]+$)|((^(mailto:))[^\\s]+@[^\\s]+$)/;\n return rg.test(url);\n }\n\n isAbsolutUrl(url: string): boolean {\n try {\n new URL(url);\n }catch (err) {\n return false;\n }\n\n return true;\n }\n\n /**\n * toggle option, kicks into and out of fullscreen mode.\n */\n toggleFullScreen(): void {\n if (this.isFullScreen()) {\n this.closeFullScreen();\n } else {\n this.openFullScreen();\n }\n }\n\n openFullScreen(): void {\n if (document.documentElement['requestFullScreen']) {\n document.documentElement['requestFullScreen']();\n } else if (document.documentElement['mozRequestFullScreen']) {\n document.documentElement['mozRequestFullScreen']();\n } else if (document.documentElement['webkitRequestFullScreen']) {\n document.documentElement['webkitRequestFullScreen'](Element['ALLOW_KEYBOARD_INPUT']);\n } else if (document.documentElement['msRequestFullscreen']) {\n if (!DOM.hasClass(document.body, 'cgp-ie-fullscreen')) {\n DOM.addClass(document.body, 'cgp-ie-fullscreen');\n }\n document.documentElement['msRequestFullscreen']();\n }\n\n }\n\n closeFullScreen(): void {\n if (document['cancelFullScreen']) {\n document['cancelFullScreen']();\n } else if (document['mozCancelFullScreen']) {\n document['mozCancelFullScreen']();\n } else if (document['webkitCancelFullScreen']) {\n document['webkitCancelFullScreen']();\n } else if (document['msExitFullscreen']) {\n DOM.removeClass(document.body, 'cgp-ie-fullscreen');\n document['msExitFullscreen']();\n }\n }\n\n isFullScreen() : boolean {\n return !this.isNullOrUndefined(document['mozFullScreenElement'])\n || !this.isNullOrUndefined(document['webkitFullscreenElement'])\n || !this.isNullOrUndefined(document['webkitCurrentFullScreenElement'])\n || !this.isNullOrUndefined(document['msFullscreenElement'])\n || !this.isNullOrUndefined(document['fullscreenElement']);\n }\n\n\n /**\n * If the user is caps lock.\n */\n isCapslock(event: any) : boolean {\n event = (event) ? event : window.event;\n\n let charCode: number = null;\n if (event.which) {\n charCode = event.which;\n } else if (event.keyCode) {\n charCode = event.keyCode;\n }\n\n let shiftOn = false;\n if (event.shiftKey) {\n shiftOn = event.shiftKey;\n } else if (event.modifiers) {\n shiftOn = !!(event.modifiers & 4);\n }\n\n if (charCode >= 97 && charCode <= 122 && shiftOn) {\n return true;\n }\n\n if (charCode >= 65 && charCode <= 90 && !shiftOn) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Merge/Extend Object\n *\n */\n mergeDeep(target: any, ...source) : any {\n source.forEach(curr => {\n assign(target, curr);\n });\n\n return target;\n }\n\n _createXmlDoc(xmlStr: string) {\n const xmlDoc = new (window as any).ActiveXObject(\"Microsoft.XMLDOM\");\n xmlDoc.async = \"false\";\n xmlDoc.loadXML(xmlStr);\n return xmlDoc;\n }\n\n parseXml(xmlStr: string)\n {\n try {\n if ((window as any).DOMParser) {\n return new DOMParser().parseFromString(xmlStr, \"text/xml\");\n } else if ((window as any).ActiveXObject) {\n return this._createXmlDoc(xmlStr);\n }\n }\n catch(err) {\n return null;\n }\n if ((window as any).DOMParser) {\n try {\n return new DOMParser().parseFromString(xmlStr, \"text/xml\");\n }\n catch(err) {\n return null;\n }\n } else if ((window as any).ActiveXObject) {\n try {\n return this._createXmlDoc(xmlStr);\n }\n catch(err) {\n return null;\n }\n }\n else\n return null;\n }\n\n /**\n * Get Query String or \"string\" as Object\n *\n */\n getQueryParameters() : any {\n let pairs = window.location.search.slice(1).split('&');\n let result = {};\n\n pairs.forEach(pair => {\n try {\n let pairMatch = pair.match(/([^?=]+)=(([^&]*))/).slice(1);\n result[pairMatch[0]] = decodeURIComponent(pairMatch[1] || '');\n } catch(e) {\n //failed to parse QS\n }\n });\n\n return JSON.parse(JSON.stringify(result));\n }\n\n jsonToQueryString(json: any): string {\n return this.isEmpty(json) ? '' : '?' +\n Object.keys(json).map(function(key) {\n return encodeURIComponent(key) + '=' +\n encodeURIComponent(json[key]);\n }).join('&');\n }\n\n\n /**\n * Add stop scrolling class to body.\n *\n */\n stopScrolling() {\n DOM.addClass(DOM.getBody(), 'stop-scrolling');\n }\n\n\n /**\n * Safe way to parse json stringfy.\n *\n * @param toParse - The string we want to parse to json.\n * @param defaultInException - The default value to return when exception thrown.\n * @returns {undefined}\n */\n safeJSON(toParse: string, defaultInException?: any) : any {\n try {\n return JSON.parse(toParse);\n } catch (ex) {\n return defaultInException || ex;\n }\n }\n\n safeJSONandDecode(input: string): object{\n try {\n const json = decodeURIComponent(input);\n return JSON.parse(json);\n } catch(e) {\n }\n return {};\n }\n\n getJSONVal(json: object, key: string): any {\n\n let val;\n try {\n val = json[key];\n } catch (e) {\n }\n return (undefined !== val) ? val : '';\n }\n\n\n dasherize(str: string): string {\n return (str[0].toLowerCase() + str.slice(1)).trim().replace(/[_\\s]+/g, '-').replace(/([A-Z])/g, '-$1').replace(/-+/g, '-').toLowerCase();\n }\n\n\n /**\n * Parse string function.\n */\n parseStringFunction(strFunction: string) : {rawStringFunction: string, functionName: string, functionStringParams:string, functionArrayParams: Array} {\n const START = 0;\n\n let startFunctionParams = strFunction.indexOf('('),\n endFunctionParams = strFunction.indexOf(')');\n\n let strFunctionName = strFunction.substring(START, startFunctionParams),\n strFunctionParams = strFunction.substring(startFunctionParams + 1, endFunctionParams),\n arrayFunctionParams = strFunctionParams.replace(/\\s+/g, '').split(',');\n\n return {\n rawStringFunction: strFunction,\n functionName: strFunctionName,\n functionStringParams: strFunctionParams,\n functionArrayParams: arrayFunctionParams\n }\n }\n\n\n /**\n * Returns the object without nullable or undefined parameters\n */\n cleanObject(obj: any, options: any) : any {\n options = Object.assign({removeUndefined: true, removeNull: false}, options);\n var cleanObject = {};\n Object.entries(obj).forEach(([key, value]) => {\n if ((undefined === value && true === options.removeUndefined) || (null === value && true === options.removeNull)) {\n return;\n } else {\n cleanObject[key] = value;\n }\n });\n return cleanObject;\n }\n\n\n /**\n * Generic convert to boolean\n */\n toBoolean(value) {\n if (this.isString(value) && (value === 'false' || value === 'true')) {\n return value === 'true';\n }\n return Boolean(value);\n }\n\n\n /**\n * Scroll with smooth animation\n * @param direction\n * @param scrollSize\n * @param container\n * @param duration\n * @param smooothLevel\n * @private\n */\n smoothScrolling(direction: string, scrollSize: number, duration: number, container: HTMLElement, smoothLevel: number = 20): Promise {\n return new Promise((res) => {\n let stepInterval = Math.ceil(duration / smoothLevel); // 1000 / 20 = 50\n let restSize = scrollSize;\n let scrollStepSize = Math.ceil(scrollSize / smoothLevel); // 100 / 50 = 2 (0.5 rest)\n\n let scrollStepFn = () => {\n scrollSize = restSize > scrollStepSize ? scrollStepSize : restSize;\n switch (direction) {\n case 'left':\n container.scrollLeft -= scrollSize;\n break;\n case 'right':\n container.scrollLeft += scrollSize;\n break;\n case 'up':\n container.scrollTop -= scrollSize;\n break;\n case 'down':\n container.scrollTop += scrollSize;\n break;\n }\n restSize -= scrollSize;\n if (0 < restSize) {\n DOM.setTimeout(scrollStepFn, stepInterval, null);\n } else {\n res();\n }\n };\n scrollStepFn();\n // DOM.setTimeout(scrollStepFn, stepInterval);\n });\n\n }\n\n toLowerCaseKeys(obj: object): object {\n return Object.keys(obj).reduce((accum, key) => {\n accum[key.toLowerCase()] = obj[key];\n return accum;\n }, {});\n }\n\n removeEmptyPropertiesfromObject(obj) {\n if(typeof(obj) !== 'object') {\n return obj;\n }\n\n Object.keys(obj).forEach((prop)=> {\n if(this.isNullOrUndefined(obj[prop])) {\n delete obj[prop];\n }\n });\n\n return obj;\n }\n\n /**\n * @description Remove the localhost\n */\n removeLocalhost(url){\n try {\n return url.replace(/^[a-z]{4,5}:\\/{2}[a-z]{1,}:[0-9]{1,4}.(.*)/, '$1');\n }catch (e) {\n return url;\n }\n }\n\n capitalizeFirstLetter(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n }\n\n\n lowerFirstLetter(str: string): string {\n return str.charAt(0).toLowerCase() + str.slice(1);\n }\n\n\n arraysAreEqual(arr1: any[], arr2: any[], areItemsEqual?: (item1: any, item2: any) => boolean): boolean {\n arr1 = arr1 || [];\n arr2 = arr2 || [];\n\n if(arr1.length !== arr2.length) {\n return false;\n }\n\n for(let i = 0; i < arr1.length; i++) {\n if(this.isNullOrUndefined(areItemsEqual)) {\n if(arr1[i] !== arr2[i]) {\n return false;\n }\n } else {\n if(!areItemsEqual(arr1[i], arr2[i])) {\n return false;\n }\n }\n }\n\n return true;\n }\n\n /**\n * should return the number as bytes notation.\n * for example:\n * formatNumberToBytesNotation(1000, 0) will return 1K\n * formatNumberToBytesNotation(3000000, 0) will return 3M\n * formatNumberToBytesNotation(1500, 1) will return 1.5K\n * @param num\n * @param digits\n */\n formatNumberToBytesNotation(num: number, digits: number) {\n const formatMap = [\n { value: 1, symbol: \"\" },\n { value: 1E3, symbol: \"K\" },\n { value: 1E6, symbol: \"M\" },\n { value: 1E9, symbol: \"G\" },\n { value: 1E12, symbol: \"T\" },\n { value: 1E15, symbol: \"P\" },\n { value: 1E18, symbol: \"E\" }\n ];\n const rx = /\\.0+$|(\\.[0-9]*[1-9])0+$/;\n let index;\n for (index = formatMap.length - 1; index > 0; index--) {\n if (num >= formatMap[index].value) {\n break;\n }\n }\n return (num / formatMap[index].value).toFixed(digits).replace(rx, \"$1\") + formatMap[index].symbol;\n }\n\n once(fn, context = this) {\n let result;\n return function() {\n if (fn) {\n result = fn.apply(context || this, arguments);\n fn = null;\n }\n return result;\n };\n }\n}\n\nexport default new Underscore();","export class DeviceFeatureDetection {\n /**\n * The device supports touch, does it have a touchscreen\n */\n public get isTouch() {\n return (\n ('ontouchstart' in window)\n || ((window as any).DocumentTouch && document instanceof (window as any).DocumentTouch)\n || (window.navigator.maxTouchPoints !== undefined && window.navigator.maxTouchPoints > 0)\n );\n }\n}\n","import UAParser from \"ua-parser-js\";\n\nexport class DeviceOSDetection {\n private os: UAParser.IOS;\n constructor(private parser: UAParser) {\n this.os = this.parser.getOS();\n }\n\n /**\n * Returns the name of the operating system\n *\n * Possible 'os.name' - data taken from ua-parser-js\n * AIX, AmigaOS, Android, Arch, Bada, BeOS, BlackBerry, CentOS, ChromiumOS, Contiki,\n * Fedora, FirefoxOS, FreeBSD, Debian, DragonFly, Gentoo, GNU, Haiku, Hurd, iOS,\n * Joli, Linpus, Linux, MacOS, Mageia, Mandriva, MeeGo, Minix, Mint, MorphOS, NetBSD,\n * Nintendo, OpenBSD, OpenVMS, OS/2, Palm, PCLinuxOS, Plan9, Playstation, QNX, RedHat,\n * RIM Tablet OS, RISCOS, Sailfish, Series40, Slackware, Solaris, SUSE, Symbian, Tizen,\n * Ubuntu, UNIX, VectorLinux, WebOS, Windows[Phone/Mobile], Zenwalk\n */\n public get name() {\n // ua-parser-js returns human readable names like \"Mac OS\". I want without spaces to be able to use them as keys in an object\n // example in the external_links_consts.js where macos and safari are used as keys.\n // also, we make it lowercase for comodity\n return this.os.name.replace(/\\s/g, \"\").toLowerCase();\n }\n\n /**\n * Returns the major version of the operating system\n */\n public get version() {\n return parseInt(this.os.version.split(\".\")[0]);\n }\n\n public get isIOS() {\n return this.name === 'ios';\n }\n\n public get isAndroid() {\n return this.name === 'android';\n }\n\n public get isPC() {\n return [\"centos\", \"fedora\", \"debian\", \"linux\", \"macos\", \"pclinuxos\", \"redhat\", \"ubuntu\", \"unix\", \"vectorlinux\", \"windows\"].indexOf(this.name) && !this.isMobileOS;\n }\n\n public get isMacOS() {\n return this.name === 'macos';\n }\n\n public get isMobileOS() {\n return (this.isIOS || this.isAndroid);\n }\n\n}\n","export class DeviceViewportDetection {\n\n /**\n * Get viewport width.\n */\n public get width() {\n return window.innerWidth;\n }\n\n\n /**\n * Get viewport height.\n */\n public get height() {\n return window.innerHeight;\n }\n\n /**\n * Get screen height.\n */\n public get screenHeight() {\n return window.screen.height;\n }\n\n /**\n * Get screen width.\n */\n public get screenWidth() {\n return window.screen.width;\n }\n\n /**\n * Get the pixel ratio for the current running device.\n */\n public get pixelRatio() {\n var ratio = 1;\n\n const screen = window.screen as any;\n\n // To account for zoom, change to use deviceXDPI instead of systemXDPI\n if (screen.systemXDPI !== undefined && screen.logicalXDPI !== undefined && screen.systemXDPI > screen.logicalXDPI) {\n // Only allow for values > 1\n ratio = screen.systemXDPI / screen.logicalXDPI;\n } else if (window.devicePixelRatio !== undefined) {\n ratio = window.devicePixelRatio;\n }\n return ratio;\n }\n\n public get isPortrait() {\n return window.matchMedia(\"(orientation: portrait)\").matches;\n }\n}","import UAParser from \"ua-parser-js\";\n\nexport class DeviceModelDetection {\n private device: UAParser.IDevice;\n constructor(private parser: UAParser) {\n this.device = this.parser.getDevice();\n }\n\n /**\n * Is it an iPhone?\n */\n public get isIphone() {\n return this.device.vendor === \"Apple\" && this.device.model === \"iPhone\";\n }\n\n public get isIpad() {\n return this.device.vendor === \"Apple\" && this.device.model === \"iPad\";\n }\n\n}\n","import UAParser from \"ua-parser-js\";\n//https://confluence/pages/viewpage.action?spaceKey=WEB&title=iframe-allow-camera\nimport { getAllowAttr } from '@888webteam/iframe-allow-camera';\n\nexport class DeviceBrowserDetection {\n private browser: UAParser.IBrowser;\n constructor(private parser: UAParser) {\n this.browser = this.parser.getBrowser();\n }\n\n /**\n * Returns the name of the browser\n *\n * Possible values :\n * Amaya, Android Browser, Arora, Avant, Baidu, Blazer, Bolt, Camino, Chimera, Chrome,\n * Chromium, Comodo Dragon, Conkeror, Dillo, Dolphin, Doris, Edge, Epiphany, Fennec,\n * Firebird, Firefox, Flock, GoBrowser, iCab, ICE Browser, IceApe, IceCat, IceDragon,\n * Iceweasel, IE [Mobile], Iron, Jasmine, K-Meleon, Konqueror, Kindle, Links,\n * Lunascape, Lynx, Maemo, Maxthon, Midori, Minimo, MIUI Browser, [Mobile] Safari,\n * Mosaic, Mozilla, Netfront, Netscape, NetSurf, Nokia, OmniWeb, Opera [Mini/Mobi/Tablet],\n * Phoenix, Polaris, QQBrowser, RockMelt, Silk, Skyfire, SeaMonkey, SlimBrowser, Swiftfox,\n * Tizen, UCBrowser, Vivaldi, w3m, Yandex\n */\n public get name() {\n // ua-parser-js returns human readable names like \"Mobile Safari\". I want without spaces to be able to use them as keys in an object\n // example in the external_links_consts.js where macos and safari are used as keys.\n // also, we make it lowercase for comodity\n return this.browser.name.replace(/\\s/g, \"\").toLowerCase();\n }\n\n /**\n * Returns the major version of the browser\n */\n public get version() {\n return parseInt(this.browser.version.split(\".\")[0]);\n }\n\n /**\n * Is it a Firefox?\n */\n public get isFirefox() {\n return this.name === \"firefox\";\n }\n\n\n /**\n * Is it a Chrome?\n */\n public get isChrome() {\n return this.name === \"chrome\";\n }\n\n\n /**\n * Is it a Safari?\n */\n public get isSafari() {\n // Can be \"Safari\" or \"Mobile Safari\"\n return this.name.indexOf(\"safari\") !== -1;\n }\n\n /**\n * Is it a Opera?\n */\n public get isOpera() {\n // Can be \"Opera\", \"Opera Mobi\", \"Opera Mini\", \"Opera Tablet\"\n return this.name.indexOf(\"opera\") !== -1;\n }\n\n\n /**\n * Is browser an Edge instance?\n */\n public get isEdge() {\n return this.name === \"edge\";\n }\n\n getIframeAllowAttributeValue(){\n let allowAttrValue = getAllowAttr();\n if(allowAttrValue.indexOf('autoplay') >= 0) {\n return allowAttrValue;\n } else {\n return `autoplay; ${allowAttrValue}`;\n }\n }\n\n}\n","import Store from '../../store';\nimport Logger from '../../logger';\nimport { DeviceOSDetection } from \"./os\";\n\nconst NATIVE_TYPE = {\n CASINO_IOS: 'cbCallBackHandlerCGP',\n CASINO_ANDROID: 'WrapperInterfaceCGP',\n POKER_IOS: 'NativeInterface',\n POKER_ANDROID: 'NativeInterface',\n CIP8_ANDROID: 'pokerNativeInterface',//TODO - will be also used in CGP so that we have a unique source\n SPORT_IOS: 'callbackHandler',\n SPORT_IOS_EMBEDDED: 'sportHybridOnly',\n SPORT_ANDROID: 'WrapperInterface'\n};\n\nexport class DeviceHybridDetection {\n private logger: Logger;\n private _hybrid = false;\n private _inPoker = false;\n private _inSport = false;\n private _embedded = false;\n\n constructor(private os: DeviceOSDetection) {\n this.logger = new Logger((this.constructor as any).CLASS);\n this.buildHybridInfo();\n }\n\n public get isHybrid() {\n return this._hybrid;\n }\n\n public get inPoker() {\n return this._inPoker;\n }\n\n public get inSport() {\n return this._inSport;\n }\n\n public get isEmbedded() {\n return this._embedded;\n }\n\n\n /**\n * FOR BUILDING HYBRID INFO I AM BEING EXTRA CAREFULL AND DOUBLECHECKING THE RESULTS FROM DIFFERENT DATA\n */\n private buildHybridInfo() {\n const casinoHybrid = this.build_isCasinoHybrid();\n const inPokerHybrid = this.build_isInPokerHybrid();\n const inSportHybrid = this.build_isInSportHybrid();\n\n const genericHybridEmbedded = window['cgp_isHybridEmbedded'] || false;\n const casinoHybridEmbedded = window['cgp_isHybridCasinoIos'] || false;\n const inPokerHybridEmbedded = window['cgp_isHybridPokerIos'] || false;\n const inSportHybridEmbedded = window['cgp_isHybridSportIos'] || false;\n\n if (\n casinoHybrid || inPokerHybrid || inSportHybrid ||\n genericHybridEmbedded || casinoHybridEmbedded || inPokerHybridEmbedded || inSportHybridEmbedded\n ) {\n this._hybrid = true;\n }\n\n if (genericHybridEmbedded) {\n this._embedded = true;\n }\n\n if (casinoHybridEmbedded) {\n this._inPoker = false;\n this._inSport = false;\n }\n\n if (inPokerHybrid || inPokerHybridEmbedded) {\n this._inPoker = true;\n }\n\n if (inSportHybrid || inSportHybridEmbedded) {\n this._inSport = true;\n }\n\n this.dataSanityCheck(\n casinoHybrid, inPokerHybrid, inSportHybrid,\n genericHybridEmbedded, casinoHybridEmbedded, inPokerHybridEmbedded, inSportHybridEmbedded\n );\n }\n\n private build_isCasinoHybrid() {\n // checks for normal casino hybrid\n if (this.os.isIOS) {\n return this.isNativeIOS();\n }\n\n if (this.os.isAndroid) {\n return this.isNativeAndroid();\n }\n\n return false;\n }\n\n private build_isInPokerHybrid() {\n if (this.os.isIOS) {\n // On iOS, first check if poker put a known object in global namespace. If it's there, we know it's poker hybrid, we don't need anything else\n if ((window as any).NativeInterface && (this.isNativeIOS(NATIVE_TYPE.POKER_IOS))) {\n return true;\n }\n // ... otherwise, we have to make an additional check for New Jersey. 103 and 106 are the subbrands of poker in NJ (poker 7, the old one)\n if (['103', '106'].indexOf(Store.get('sourceSubBrand')) === -1) {\n // not NJ, so it's not poker hybrid\n return false;\n }\n // we are in NJ, so now we have to check for the ClientVersion key in storage. If exists and starts with \"mp-\" or \"sp-\", then it is poker hybrid\n let storedClientVersion = Store.get('ClientVersion');\n if (storedClientVersion && (storedClientVersion.toLowerCase().startsWith('mp-') || storedClientVersion.toLowerCase().startsWith('sp-'))) {\n return true;\n } else {\n return false;\n }\n\n }\n if (this.os.isAndroid) {\n // On Android, first check if poker put a known object in global namespace. If it's there, we know it's poker hybrid, we don't need anything else\n if ((window as any)[NATIVE_TYPE.POKER_ANDROID] && this.isNativeAndroid(NATIVE_TYPE.POKER_ANDROID)) {\n return true;\n }\n // Same check for CIP8_ANDROID, because it is a different object name\n if ((window as any)[NATIVE_TYPE.CIP8_ANDROID] && this.isNativeAndroid(NATIVE_TYPE.CIP8_ANDROID)) {\n return true;\n }\n // ... otherwise, we have to make an additional check for New Jersey. 103 and 106 are the subbrands of poker in NJ (poker 7, the old one)\n if (['103', '106'].indexOf(Store.get('sourceSubBrand')) === -1) {\n // not NJ, so it's not poker hybrid\n return false;\n }\n let storedSourceProductPackage = Store.get('sourceProductPackage');\n if (storedSourceProductPackage && (storedSourceProductPackage.toString() === '52' || storedSourceProductPackage.toString() === '95')) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n }\n\n private build_isInSportHybrid(): boolean {\n if (this.os.isIOS) {\n return this.isNativeIOS(NATIVE_TYPE.SPORT_IOS_EMBEDDED);\n }\n\n if (this.os.isAndroid) {\n return this.isNativeAndroid(NATIVE_TYPE.SPORT_ANDROID);\n }\n\n return false;\n }\n\n /**\n * Is it an IOS Hybrid?\n */\n private isNativeIOS(name?: string): boolean {\n const className = undefined !== name ? name : NATIVE_TYPE.CASINO_IOS;\n\n return ('object' === typeof ((window as any).webkit)\n && 'object' === typeof ((window as any).webkit.messageHandlers[className]));\n }\n\n /**\n * Is it an Android Hybrid?\n */\n private isNativeAndroid(name?: string): boolean {\n const className = undefined !== name ? name : NATIVE_TYPE.CASINO_ANDROID;\n return ('object' === typeof ((window as any)[className]));\n }\n\n private dataSanityCheck(\n casinoHybrid: boolean, inPokerHybrid: boolean, inSportHybrid: boolean,\n genericHybridEmbedded: boolean, casinoHybridEmbedded: boolean, inPokerHybridEmbedded: boolean, inSportHybridEmbedded: boolean\n ) {\n // Casino in Poker and casino in sport cannot be true at the same time\n if (inPokerHybrid === true && inSportHybrid === true) {\n this.logger.error(\"Hybrid data sanity check. 1. inPokerHybrid and inSportHybrid are both true\");\n }\n\n // From the trio: casinoHybridEmbedded, casinoInPokerHybridEmbedded, casinoInSportHybridEmbedded at most one can be true.\n // And this, only if genericHybridEmbedded is true\n if (genericHybridEmbedded === false && (casinoHybridEmbedded === true || inPokerHybridEmbedded === true || inSportHybridEmbedded === true)) {\n this.logger.error(\"Hybrid data sanity check. 2. if genericHybridEmbedded is false, none of any other embedded flags can be true\");\n }\n if (casinoHybridEmbedded === true && inPokerHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 3. casinoHybridEmbedded and inPokerHybridEmbedded are both true\");\n }\n if (casinoHybridEmbedded === true && inSportHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 4. casinoHybridEmbedded and inSportHybridEmbedded are both true\");\n }\n if (inPokerHybridEmbedded === true && inSportHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 5. inPokerHybridEmbedded and inSportHybridEmbedded are both true\");\n }\n\n // CASINO: If it's not hybrid it cannot be hybrid embedded\n if (casinoHybrid === false && genericHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 6. genericHybridEmbedded is true but casinoHybrid is false\");\n }\n // POKER: If it's not hybrid it cannot be hybrid embedded\n if (inPokerHybrid === false && inPokerHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 7. inPokerHybridEmbedded is true but inPokerHybrid is false\");\n }\n // SPORT: If it's not hybrid it cannot be hybrid embedded\n if (inSportHybrid === false && inSportHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 8. inSportHybridEmbedded is true but inSportHybrid is false\");\n }\n\n // In poker and in sport cannot be true at the same time (cross check hybrid and embedded)\n if (inPokerHybrid === true && inSportHybridEmbedded === true) {\n this.logger.error(\"Hybrid data sanity check. 9. inPokerHybrid and inSportHybridEmbedded are both true\");\n }\n if (inPokerHybridEmbedded === true && inSportHybrid === true) {\n this.logger.error(\"Hybrid data sanity check. 10. inPokerHybridEmbedded and inSportHybrid are both true\");\n }\n }\n}\n","import uuid from 'uuid/v4';\nimport { UAParser } from 'ua-parser-js';\nimport Logger from '../logger';\nimport { DeviceFeatureDetection } from './detection/feature';\nimport { DeviceOSDetection } from './detection/os';\nimport { DeviceViewportDetection } from './detection/viewport';\nimport { DeviceModelDetection } from './detection/model';\nimport { DeviceBrowserDetection } from './detection/browser';\nimport { DeviceHybridDetection } from './detection/hybrid';\n\nclass Device {\n public logger: Logger;\n private _uaParser: UAParser = new UAParser();\n public readonly feature = new DeviceFeatureDetection();\n public readonly os = new DeviceOSDetection(this._uaParser);\n public readonly viewport = new DeviceViewportDetection();\n public readonly model = new DeviceModelDetection(this._uaParser);\n public readonly browser = new DeviceBrowserDetection(this._uaParser);\n public readonly hybrid = new DeviceHybridDetection(this.os);\n\n /**\n * Initialize the device.\n *\n * @constructor\n */\n constructor() {\n this.logger = new Logger((this.constructor as any).CLASS);\n }\n\n /**\n * Getter for the user-agent for the client being handled in this request.\n *\n * @example 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53'\n */\n public get userAgent() {\n return this._uaParser.getUA();\n }\n\n public get networkData() {\n let connection = navigator[\"connection\"] || navigator[\"mozConnection\"] || navigator[\"webkitConnection\"];\n if(connection) {\n return (connection.effectiveType?connection.effectiveType:'') + '_'\n + (connection.rtt?connection.rtt:'') + '_'\n + (connection.downlink?connection.downlink:'');\n }\n return null;\n }\n\n /**\n * Generates a GUID\n */\n public generateGuid(): string {\n return uuid();\n }\n\n private matchMedia(media: string) {\n return window.matchMedia(media).matches;\n }\n\n /**\n * Used to detected if user clicked and loaded the app using home screen\n *\n * Returns true if the app is running in standalone mode (iOS only)\n */\n public get isStandalone() {\n return 'standalone' in window.navigator ? (window.navigator as any).standalone : false;\n }\n\n public get isProgressiveWebApp(): boolean {\n\t\t// PWA setting is \"display\": \"fullscreen\"\n\t\t// but installed on desktop it's detected as \"standalone\" if app is not in fullscreen mode or \"fullscreen\" if user enters fullscreen mode\n // iOS is identified through check the navigator to have attribute 'standalone'\n\n\t\treturn this.isStandalone ||\n this.matchMedia('(display-mode: fullscreen)') ||\n this.matchMedia('(display-mode: standalone)');\n\n }\n\n public get isSupportHTML5() {\n return 'function' === typeof document.createElement('canvas').getContext;\n }\n\n public get isMobileWebApp() {\n return (this.os.isMobileOS || this.isProbablyIOSDevice) && !this.hybrid.isHybrid;\n }\n\n /**\n * Check whether the browser has cookie enable 3rd party.\n */\n public get isCookieEnable() {\n return window.navigator.cookieEnabled;\n }\n\n /**\n * From iOS 13, Safari decided to put the \"Request Desktop Website\" setting on true by default on iPad.\n * For users that disable this setting, Device.model.isIpad will be true, but for the majority it will be false because\n * Safari will send the desktop user agent.\n *\n * Also, iPhone users have that option also although not many people enable it.\n *\n * The only clue we have that it is most probably an iPad is to detect if the device has touchscreen because up until now\n * Apple does not produce MacBooks or Macs with touchscreens. So it's most probably an iOS (iPad or an iPhone)\n *\n * @Note IMPORTANT! Should be use only in rare cases (for example force GRS(GGP games) to return the mobile version on iPad)\n * @Note IMPORTANT! This method should return true for all iOS and iOS + \"Request Desktop Website\", iPhone INCLUDED\n */\n public get isProbablyIOSDevice() {\n if (this.os.isIOS) {\n return true;\n }\n if (!this.os.isMacOS) {\n return false;\n }\n // At this point we know that we are on Mac\n // Let's see if it has touchscreen\n return this.feature.isTouch;\n }\n\n /**\n * From iOS 13, Safari decided to put the \"Request Desktop Website\" setting on true by default on iPad.\n * For users that disable this setting, Device.model.isIpad will be true, but for the majority it will be false because\n * Safari will send the desktop user agent.\n *\n * Also, iPhone users have that option also although not many people enable it.\n *\n * The only clue we have that it is most probably an iPad is to detect if the device has touchscreen because up until now\n * Apple does not produce MacBooks or Macs with touchscreens. So it's most probably an iOS (iPad or an iPhone)\n *\n * @Note IMPORTANT! Should be use only in rare cases (for example force GRS(GGP games) to return the mobile version on iPad)\n * @Note IMPORTANT! This method should return true for all iPad and iOS + \"Request Desktop Website\", iPhone NOT INCLUDED\n * HOWEVER, FOR IPHONE THAT HAVE \"Request Desktop Website\", this method will return true\n */\n public get isProbablyIPad() {\n // Pre iOS 13 detection\n if (this.model.isIpad) {\n return true;\n }\n if (this.model.isIphone) {\n return false;\n }\n if (!this.os.isMacOS) {\n return false;\n }\n // At this point we know that is a Safari browser on Mac (in the past, Safari was available for Windows too)\n // Let's see if it has touchscreen\n return this.feature.isTouch;\n }\n\n /**\n * Check the device is in a portrait mode.\n *\n * @deprecated use \"Device.viewport.isPortrait\"\n */\n public get isPortrait(): boolean {\n if (this.isMobile() && this.os.isAndroid) {\n // fix for Samsung S8 series (S8-S9...).\n // In full screen mode window.screen.width and window.screen.height after single rotation get wrong values (width equal to height)\n // So we should test it by innerWidth and innerHeight like in iOS\n if (this.viewport.screenWidth === this.viewport.screenHeight) {\n return this.viewport.width < this.viewport.height;\n }\n return this.viewport.screenWidth < this.viewport.screenHeight;\n } else {\n return this.viewport.width < this.viewport.height;\n }\n }\n\n /**\n * TODO: Replace with NOTCH DETECTION. We don't care about the iPhone version, we care to know for iPhone X if it has a notch.\n *\n * Getting the current running iPhone device version, hardware version.\n * Able to detect iPhone 4 and 5 and iphone x (10)\n * Returns NULL if device is not an iPhone. Will return a Number of the hardware version.\n * @deprecated\n */\n public getIphoneVersion() {\n\n if (this.os.isIOS && 11 <= this.os.version &&\n (\n //iphone 12 pro max\n (926 === window.screen.height && 428 === window.screen.width) || (926 === window.screen.width && 428 === window.screen.height)\n ||\n //iphone 12 pro\n (844 === window.screen.height && 390 === window.screen.width) || (844 === window.screen.width && 390 === window.screen.height)\n ||\n // iPhone X / Xs\n (812 === window.screen.height && 375 === window.screen.width) || (812 === window.screen.width && 375 === window.screen.height)\n ||\n // iPhone Xr / Xs Max\n (896 === window.screen.height && 414 === window.screen.width) || (896 === window.screen.width && 414 === window.screen.height)\n )\n ) {\n return 10;\n }\n\n if (this.os.isIOS && 8 <= this.os.version && 375 === window.screen.width) {\n return 6;\n }\n\n if (this.os.isIOS && 6 <= this.os.version && 320 === window.screen.width) {\n return 5;\n }\n\n // iphone 4/s (Retina)\n if (this.os.isIOS && 5 <= this.os.version && 640 === window.screen.width) {\n return 4;\n }\n\n return 0;\n }\n\n /**\n * TODO: Replace with NOTCH DETECTION. We don't care about the iPhone version, we care to know for iPhone X if it has a notch.\n * Is IphoneX\n * Returns true if the device is IphoneX\n * @deprecated\n */\n public isIphoneX(): boolean {\n return 10 === this.getIphoneVersion();\n }\n\n /**\n * TODO: Check usages and delete/refactor\n * @deprecated\n */\n public isMobileNotTablet(): boolean {\n return this.viewport.width < 1280 && !this.isTablet();\n }\n\n\n /**\n * TODO: Check usages and delete/refactor\n * Returns true only for ipads smaller than 1280\n * @deprecated\n */\n public isTablet(): boolean {\n return this.model.isIpad && this.viewport.width < 1280;\n }\n\n /**\n * Those are not the droids you are looking for\n * Use media queries, feature detection, client hints, os detection.\n * Think of what you want to achieve with your code and put a condition for that, not a general isMobile condition\n *\n * TODO: Check usages and delete/refactor\n * @deprecated\n */\n public isMobile(): boolean {\n return this.viewport.width < 1280;\n }\n\n /**\n * Get benchmark.\n */\n public getBenchMark() {\n var b = { m: 0 }, bd = [], bmt = + new Date() + 50;\n do {\n var t, count = 0, tt = + new Date();\n do { t = + new Date(); } while (t === tt);\n do { count++; tt = +new Date(); } while (t === tt);\n if ((tt - t) === 1) { bd[bd.length] = count; }\n } while ((bd.length < 20) && (t < bmt));\n\n if (bd.length === 0) b.m = 0; else b.m = Math.max.apply(Math, bd);\n\n return b.m;\n }\n\n}\n\nexport default new Device();\n","import _ from './underscore';\nimport Logger from './logger';\nimport {namedSetInterval, namedSetTimeout} from '../../../common/utils/time-functions';\nimport {TimeIntervalName} from '../../../common/utils/time-interval-names';\n\nexport interface TimeoutSubscription {\n clear(): void;\n}\n\n\n\nexport interface ElementDimensions {\n\n width: number,\n height: number,\n horizontMargin: number,\n verticalMargin: number,\n horizontPadding: number,\n verticalPadding: number,\n horizontBorder: number,\n verticalBorder: number,\n fullWidth: number,\n fullHeight: number,\n marginRight: number,\n marginLeft: number,\n marginTop: number,\n marginBottom: number\n}\n\nexport interface ElementSize {\n width: number,\n height: number\n}\n\nexport interface DomEventSubscription {\n remove: () => void\n}\n\n\n\nclass DOM {\n\n static CLASS = 'DOM';\n\n constructor() {\n this._createLogger();\n }\n\n logger: Logger;\n _createLogger() {\n this.logger = new Logger(DOM.CLASS);\n }\n\n\n getBody() : HTMLElement {\n return document.body;\n }\n\n\n getHTML(): HTMLElement {\n return document.documentElement;\n }\n\n\n /**\n * Draw element into the DOM.\n */\n draw(element: Element) : DOM {\n\n this.append(this.getBody(), element);\n\n return this;\n }\n\n\n /**\n * Selector jQuery like for getting the object from the dom.\n * $$ is double the fun, $ is cool, $$ is cooler.\n */\n $$(query: any): any {\n let el = null;\n\n // first off if it's not a string assume it's already an element\n if (!_.isString(query)) {\n el = query;\n } else if ( this.isTag(query) ) {\n // check if it's a tag\n let tag = query.substring(1, query.length - 1);\n el = document.createElement( tag );\n } else if ( this.isId(query) ) {\n // check if it's an id\n let id = query.substr(1);\n el = document.getElementById( id );\n } else {\n // run a basic query\n el = document.querySelectorAll(query);\n }\n\n if (_.isNodeList(el)) {\n el = [].slice.call(el);\n }\n\n return el;\n }\n\n querySelector(selector: string): Element {\n return document.querySelector(selector);\n }\n\n\n injectStyleToDOM(content: string): HTMLStyleElement {\n let newStyle = document.createElement('style');\n newStyle.innerHTML = content;\n return document.body.appendChild(newStyle);\n }\n\n createElement(type: string = 'div', html: string = '', classList = []): HTMLElement {\n let domElement = document.createElement(type);\n if(html) {\n domElement.innerHTML = html;\n }\n\n if(classList.length > 0){\n classList.forEach(_class => this.addClass(domElement, _class));\n }\n\n return domElement;\n }\n\n append(target: Element, el: Element) : DOM {\n if (!target || !_.isElement(target)) {\n return this;\n }\n\n if (!el || !_.isElement(el)) {\n return this;\n }\n\n target.appendChild(el);\n\n return this;\n }\n\n\n\n removeElement(target: Element, el: Element) : DOM {\n if (!target || !_.isElement(target)) {\n return this;\n }\n\n if (!el || !_.isElement(el)) {\n return this;\n }\n el.parentNode.removeChild(el);\n\n return this;\n }\n\n appendFirst(target: Element, el: Element): void {\n\n if (!_.isElement(target)) {\n throw new Error('target argument must be an Element');\n }\n\n if (!_.isElement(el)) {\n throw new Error('el argument must be an Element');\n }\n\n target.insertBefore(el, target.firstChild);\n }\n\n addClass(el: Element, className: any) : DOM {\n if (!_.isElement(el)) {\n return this;\n }\n\n if (!className || 0 === className.length) {\n return this;\n }\n\n let name = _.isArray(className) ? className[0] : className;\n\n if (el.classList) {\n el.classList.add(name);\n } else {\n el.className += ' ' + name;\n }\n\n return _.isArray(className) ? this.addClass(el, className.slice(1)) : this;\n }\n\n\n\n /**\n * toggle class to element\n */\n toggleClass(el: Element, className: string) : DOM {\n if (!_.isElement(el)) {\n return this;\n }\n\n if (!className) {\n return this;\n }\n\n el.classList.toggle(className);\n\n return this;\n }\n\n\n /**\n * if element already has the class\n */\n hasClass(el: Element, className: string) : boolean {\n if (!_.isElement(el)) {\n throw new Error(`el argument is required! el = ${el}; className = ${className}`);\n }\n\n if (!className) {\n throw new Error(`className argument is required! el = ${el}; className = ${className}`);\n }\n\n return el.classList.contains(className);\n }\n\n\n /**\n * Add attribute to the element.\n */\n addAttribute(el: Element, attribute: string = '', value: string = ''): DOM {\n if (!_.isElement(el)) {\n return this;\n }\n el.setAttribute(attribute, value);\n\n return this;\n }\n\n\n /**\n * Add Style to the element.\n */\n addStyle(el: HTMLElement, key: string, value: string): DOM {\n if (!_.isElement(el)) {\n return this;\n }\n el.style[key] = value;\n\n return this;\n }\n\n\n /**\n * Remove Style from the element.\n */\n removeStyle(el: HTMLElement, key: string): DOM {\n if (!_.isElement(el)) {\n return this;\n }\n el.style.removeProperty(key);\n\n return this;\n }\n\n\n\n /**\n * Get current element dimensions\n */\n getDimensions(el: HTMLElement): ElementDimensions {\n if (!_.isElement(el)) {\n throw new Error('el argument must be an HTMLElement');\n }\n\n let style = this.getCurrentStyle(el);\n let horizontMargin = parseFloat(style.marginLeft) + parseFloat(style.marginRight);\n let verticalMargin = parseFloat(style.marginBottom) + parseFloat(style.marginTop);\n\n return {\n width: el.offsetWidth,\n height: el.offsetHeight,\n horizontMargin: horizontMargin,\n verticalMargin: verticalMargin,\n horizontPadding: parseFloat(style.paddingLeft) + parseFloat(style.paddingRight),\n verticalPadding: parseFloat(style.paddingBottom) + parseFloat(style.paddingTop),\n horizontBorder: parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth),\n verticalBorder: parseFloat(style.borderBottomWidth) + parseFloat(style.borderTopWidth),\n fullWidth: el.offsetWidth + horizontMargin,\n fullHeight: el.offsetHeight + verticalMargin,\n marginRight: parseFloat(style.marginRight),\n marginLeft: parseFloat(style.marginLeft),\n marginTop: parseFloat(style.marginTop),\n marginBottom: parseFloat(style.marginBottom)\n };\n }\n\n setElementSize(element: HTMLElement, size: ElementSize, unit: string = 'px') : void {\n element.style.width = size.width + unit;\n element.style.height = size.height + unit;\n }\n\n getCurrentStyle(el: HTMLElement) : CSSStyleDeclaration {\n if (!_.isElement(el)) {\n throw new Error('el argument must be an HTMLElement');\n }\n return window.getComputedStyle(el) || el['currentStyle'];\n }\n\n\n /**\n * Hide element from dom.\n */\n hide(el: Element): DOM {\n this.removeClass(el, 'show');\n this.addClass(el, 'hide');\n return this;\n }\n\n\n /**\n * Get element to be invisible\n * @param el\n * @returns {DOM}\n */\n invisible(el: HTMLElement): DOM {\n this.removeClass(el, 'cgp-visible');\n this.addClass(el, 'cgp-invisible');\n return this;\n }\n\n\n /**\n * Show element on dom\n * @param el\n */\n show(el: Element): DOM {\n this.removeClass(el, 'hide');\n this.addClass(el, 'show');\n return this;\n }\n\n /**\n * Get element to be visible\n * @param el\n * @returns {DOM}\n */\n visible(el: HTMLElement): DOM {\n this.removeClass(el, 'cgp-invisible');\n this.addClass(el, 'cgp-visible');\n return this;\n }\n\n\n /**\n * Remove class from element.\n * @param el\n * @param className\n */\n removeClass(el: Element, className: string): DOM {\n if (!_.isElement(el)) {\n throw new Error('el argument must be an element');\n }\n\n el.classList.remove(className);\n return this;\n }\n\n\n removeAttribute(el: Element, attr: string = ''): DOM {\n if (!_.isElement(el)) {\n throw new Error('el argument must be an element');\n }\n\n el.removeAttribute(attr);\n return this;\n }\n\n isInputElement(tagName: string = ''): boolean {\n return 'INPUT' === tagName;\n }\n\n\n /**\n * Sets the innerHTML for the provided element\n */\n html(html: string, el: Element): DOM {\n if (_.isNullOrUndefined(html)) {\n this.logger.error('Html is not valid parameter');\n return this;\n }\n el.innerHTML = html;\n return this;\n }\n\n\n /**\n * Clear elements from his node childs nor content.\n */\n clear(target: Element): DOM {\n while (target.firstChild) {\n target.removeChild(target.firstChild);\n }\n\n return this;\n }\n\n\n camelCase(str: string): string {\n return str.replace(/-([a-z])/g, (g) => {\n return g[1].toUpperCase();\n });\n }\n\n\n isTag(str: string): boolean {\n return 0 === str.search(/^<\\w+>$/);\n }\n\n isId(str: string ) {\n return 0 === str.search(/^#\\w+$/);\n }\n\n parseDataAttributes(el: Element): object {\n let data = {};\n\n [].forEach.call(el.attributes, (attr) => {\n if (/^data-/.test(attr.name)) {\n let camelCaseName = attr.name.substr(5).replace(/-(.)/g, ($0, $1) => {\n return $1.toUpperCase();\n });\n data[camelCaseName] = attr.value;\n }\n });\n\n return data;\n }\n\n text(el: Element, value: string): DOM {\n if (!_.isElement(el)) {\n throw new Error('el argument must be a HTMLElement');\n }\n el.textContent = value;\n return this;\n }\n\n /**\n * wrapper for add event listeners on DOM, returns a self removing method.\n */\n addEventListener(el: Element | Document, type: string, callback: EventListenerOrEventListenerObject, useCapture: boolean = false) : DomEventSubscription {\n\n el.addEventListener(type, callback, useCapture);\n\n return {\n remove: function(msgElement: Element | Document, msgType: string, msgCallback: EventListenerOrEventListenerObject) {\n return () => {\n return msgElement.removeEventListener(msgType, msgCallback);\n };\n }(el, type, callback)\n };\n }\n\n\n\n\n /**\n *\n *\n * @description - Generic event handler, all the component should subscribe to one event function,\n * They should pass the element it self define specific id inside the element,\n * Event type, And the event callback.\n *\n * @usage:\n * onDOMEvent(DOMElement, '#testid', 'click', ()=> {alert('onClick happend'});\n * onDOMEvent(DOMElement, 'click', ()=> {alert('onClick happend'});\n */\n onDOMElementEvent(element: Element, eventName: string, callback: EventListenerOrEventListenerObject, useCapture: boolean = false) : DomEventSubscription {\n\n if (!_.isElement(element)) {\n throw new Error('element argument must be of type HTMLElement');\n }\n\n if(!_.isString(eventName)) {\n throw new Error('eventName argument must be of type String');\n }\n\n if(!_.isFunction(callback)) {\n throw new Error('callback argument must be of type Function');\n }\n\n element.addEventListener(eventName, callback, useCapture);\n\n return {\n remove: () => element.removeEventListener(eventName, callback)\n };\n }\n\n\n setInterval(callback: () => void, timeout: number, name?: TimeIntervalName) : number {\n return namedSetInterval(name, callback, timeout);\n }\n\n\n clearInterval(handle: number): void {\n clearInterval(handle);\n }\n\n\n setTimeout(callback: () => void, timeout: number, name?: TimeIntervalName): number {\n return namedSetTimeout(name, callback, timeout);\n }\n\n clearTimeout(handle: number): void {\n clearTimeout(handle);\n }\n}\n\nexport default new DOM();\n","import CGPLogger from './logger';\nimport Strings from './strings';\nimport _ from './underscore';\n\ninterface IStorage {\n set(key: string, value: any) : boolean;\n\n del(key: string): boolean;\n\n get(key: string, defaultValue: any): any | null;\n\n clear(): void;\n};\n\nconst logger = new CGPLogger('Store');\n\nclass CGPStorage {\n /**\n * @property\n * @type {null|LocalStorage|WindowStorage}\n */\n _selectedStorage: IStorage = null;\n\n\n /**\n * CGP storage business logic place.\n */\n constructor() {\n this.init();\n }\n\n\n /**\n * Initialize the storage and initialize the currect instance of storage\n * Or from the window['localStorage'] or our window cgp storage ;).\n *\n * @returns {LocalStorage}\n */\n init() : void {\n if (this.isLocalStorageNameSupported()) {\n logger.debug('Selected to be main priority cgp storage from localstorage.');\n this._selectedStorage = new LocalStorage();\n } else {\n logger.debug('Selected to be main priority cgp storage from window unique localstorage.');\n this._selectedStorage = new WindowStorage();\n }\n }\n\n\n /**\n * Create cookie that shared/not between sub domains\n * @param name\n * @param value\n */\n setCookie(name: string, value: string) : void {\n let now = new Date();\n now.setFullYear(now.getFullYear() + 1);\n document.cookie = name + '=' + value + ';expires=' + now.toUTCString() + ';path=/';\n }\n\n /**\n * Get cookie by key\n * @param name\n * @returns {string}\n */\n getCookie(name: string): string {\n let match = document.cookie.match(new RegExp(name + '=([^;]+)'));\n if (match) {\n return match[1];\n }\n return '';\n }\n\n /**\n * Remove cookie by key\n * @param name\n */\n removeCookie(name: string) : void {\n document.cookie = name + \"=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/\";\n }\n\n /**\n * Check wheter local storage supported.\n *\n * @returns {boolean}\n */\n isLocalStorageNameSupported(): boolean {\n let testKey = 'test';\n\n try\n {\n const storage: Storage = window.localStorage;\n storage.setItem(testKey, '1');\n storage.removeItem(testKey);\n return 'localStorage' in window && null !== window.localStorage;\n }\n catch (error)\n {\n logger.error('Local storage is not supported the user might running under incognito mode on safari yak!');\n return false;\n }\n }\n\n\n /**\n * Stores a value to the assigned key.\n *\n *\n * @param {string} key - the name of the key to be stored.\n * @param {*} value - could be anything, Array/String/Object.\n *\n * @returns {boolean} stating the save was successfully or not.\n * @public\n */\n set(key: string, value: any): boolean {\n return this._selectedStorage.set(key, value);\n }\n\n\n /**\n * Removes a key from the storage, also checks if exists.\n *\n *\n * @param {string} key - the name of the key to be deleted.\n * @returns {boolean} stating the delete was successfully or not.\n * @public\n */\n del(key: any): boolean {\n if(typeof key === 'string') {\n return this.delKey(key);\n } else {\n return this.delArray(key);\n }\n }\n\n /**\n * Removes a key from the storage, also checks if exists.\n *\n *\n * @param {string} key - the name of the key to be deleted.\n * @returns {boolean} stating the delete was successfully or not.\n * @public\n */\n delKey(key: string): boolean {\n return this._selectedStorage.del(key);\n }\n\n /**\n * remove array of keys from storage, also check if exists.\n * @param keys\n * @returns {boolean} stating the delete was successfully or not\n */\n delArray(keys: string[]): boolean {\n let result = true;\n keys.forEach(function (key) {\n result = result && this._selectedStorage.del(key);\n }, this);\n\n return result;\n }\n\n /**\n * Get a specific key from the store. If is not set, optionally can set a default value\n *\n *\n * @param {string} key - the name of the key to be returned.\n * @param {*} defaultValue - if key is empty, will return the default\n *\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\n * @public\n */\n get(key: string, defaultValue?: any): any | null {\n return this._selectedStorage.get(key, defaultValue);\n }\n\n clearLocalStorage() {\n this._selectedStorage.clear();\n }\n}\n\n/**\n *\n */\nclass LocalStorage implements IStorage {\n /**\n * @property\n * @type {string}\n * @private\n */\n private readonly _perfix = 'cgp_';\n\n\n /**\n * Creates the store object and ensures it remains a Singleton.\n *\n * @constructor\n */\n constructor() {\n if (_.getQueryParameters()['clearstorage']) {\n this.clear();\n }\n }\n\n /**\n * Stores a value to the assigned key.\n *\n *\n * @param {string} key - the name of the key to be stored.\n * @param {*} value - could be anything, Array/String/Object.\n *\n * @returns {boolean} stating the save was successfully or not.\n * @public\n */\n set(key: string, value: any): boolean {\n if (!this.localStorageExists()) {\n return false;\n }\n\n try {\n localStorage.setItem(this.getKeyConvention(key), value);\n } catch (error) {\n throw new Error(error);\n }\n\n return true;\n }\n\n\n /**\n * Removes a key from the storage, also checks if exists.\n *\n *\n * @param {string} key - the name of the key to be deleted.\n * @returns {boolean} stating the delete was successfully or not.\n * @public\n */\n del(key: string): boolean {\n if (!this.localStorageExists() || null === this.get(key)) {\n return false;\n }\n\n localStorage.removeItem(this.getKeyConvention(key));\n return true;\n }\n\n\n /**\n * Get a specific key from the store. If is not set, optionally can set a default value\n *\n *\n * @param {string} key - the name of the key to be returned.\n * @param {*} defaultValue - if key is empty, will return the default\n *\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\n * @public\n */\n get(key: string, defaultValue?: any): any | null {\n if (!this.localStorageExists()) {\n return false;\n }\n\n key = this.getKeyConvention(key);\n\n return null === localStorage.getItem(key) && 'undefined' !== typeof defaultValue ? defaultValue : localStorage.getItem(key);\n }\n\n\n /**\n * Get all keys for the whole key convention\n *\n *\n *\n * @usage:\n * // Defined already in localstorage\n * localStorageKeys = [cgp_test1,test2,cgp_test3,test4]\n *\n * getAll() {\n * return [cgp_test1, cgp_test3];\n * };\n *\n * @returns {*} Gets all the data stored in the cache.\n * @public\n */\n getAll() : any[] {\n let keys: any[] = [];\n\n if (!this.localStorageExists()) {\n return keys;\n }\n\n Object\n .keys(localStorage)\n .filter(key => this.isKeyConvention(key))\n .forEach((key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n\n /**\n * Verify localStore is defined and can be used in here :)\n *\n *\n * @returns {boolean} makes sure that localStorage exists and we are allowed to use it.\n * @public\n */\n localStorageExists() {\n try {\n return 'localStorage' in window && null !== window.localStorage;\n } catch (error) {\n logger.error(['localStorage not found, features related to store will be disabled for this session.']);\n return false;\n }\n }\n\n\n /**\n * Clear all the data from the localStorage, return true when the local is clear\n * and false when the localStorage not found in the global scope.\n *\n *\n *\n * @usage:\n * clearLocalStorage() {\n * // if the localStorage is defined in the global window.\n * return true;\n * };\n *\n * @public\n */\n clear() : void {\n if (!this.localStorageExists()) {\n return;\n }\n\n localStorage.clear();\n }\n\n\n /**\n * This function will check key start with cgp prefix.\n *\n *\n *\n * @usage:\n * isKeyConvention('test') {\n * return false;\n * };\n *\n * getKeyConvention('cgp_test') {\n * return true;\n * };\n *\n *\n * @param {string} key - that needs to be verified for convention.\n * @returns {boolean} if they key is valid.\n * @public\n */\n isKeyConvention(key: string) {\n let stringUtil = new Strings(key);\n if (stringUtil.startsWith(this._perfix)) {\n return true;\n }\n\n return false;\n }\n\n\n /**\n * Get string convention for localStorage key.\n * Extend the input key with the static prefix we define.\n *\n *\n *\n * @usage:\n * getKeyConvention('test') {\n * return cgp_test\n * };\n *\n * @param {string} key - that needs to be converted to our convention.\n * @returns {string} of the key to be stored. With naming convention set.\n * @public\n */\n getKeyConvention(key: string) {\n if (!key) {\n return '';\n }\n\n // remove unwanted white spaces.\n let keyConvention = key.trim();\n let stringUtil = new Strings(keyConvention);\n if (!stringUtil.startsWith(this._perfix)) {\n return this._perfix + keyConvention;\n }\n\n return keyConvention;\n }\n}\n\nclass WindowStorage implements IStorage {\n /**\n * @property\n * @type {string}\n * @private\n */\n private readonly _storgeKeyName = 'cgpStorage';\n\n\n /**\n * @property\n * @type {null|object}\n * @private\n */\n private _cgpStorage: {[key: string]: any} = null;\n\n\n /**\n * Creates the store object and ensures it remains a Singleton.\n *\n * @constructor\n */\n constructor() {\n if (_.getQueryParameters()['clearstorage']) {\n this.clear();\n }\n\n this.init();\n }\n\n\n /**\n * Initializing the CGP window local storage.\n */\n init() {\n // Define CGP storage on the global window.\n this._cgpStorage = (window as any)[this._storgeKeyName] = {};\n\n logger.debug('Defined a new window cgp local storage.');\n logger.debug('Finish initializing window storage.');\n }\n\n\n /**\n * Stores a value to the assigned key.\n *\n *\n * @param {string} key - the name of the key to be stored.\n * @param {*} value - could be anything, Array/String/Object.\n *\n * @returns {boolean} stating the save was successfully or not.\n * @public\n */\n set(key: string, value: any): boolean {\n if (!this.storageExists()) {\n return false;\n }\n\n try {\n this._cgpStorage[key] = value;\n } catch (error) {\n throw new Error(error);\n }\n\n return true;\n }\n\n\n /**\n * Removes a key from the storage, also checks if exists.\n *\n *\n * @param {string} key - the name of the key to be deleted.\n * @returns {boolean} stating the delete was successfully or not.\n * @public\n */\n del(key: string): boolean {\n if (!this.storageExists() || _.isUndefined(this.get(key))) {\n return false;\n }\n\n delete this._cgpStorage[key];\n return true;\n }\n\n\n /**\n * Get a specific key from the store. If is not set, optionally can set a default value\n *\n *\n * @param {string} key - the name of the key to be returned.\n * @param {*} defaultValue - if key is empty, will return the default\n *\n * @returns {*} the data is mixed, what-ever is stored in the cache will be returned.\n * @public\n */\n get(key: string, defaultValue?: any): any | null {\n if (!this.storageExists()) {\n return defaultValue;\n }\n\n const defaultGetter = _.isUndefined(defaultValue) ? undefined : defaultValue;\n return this._cgpStorage[key] || defaultGetter;\n }\n\n\n /**\n * Check if window cgp stroage is exist.\n *\n * @returns {boolean}\n */\n storageExists(): boolean {\n return !_.isNull(this._cgpStorage);\n }\n\n\n /**\n * Get all keys for the whole key convention\n *\n *\n *\n * @usage:\n * // Defined already in localstorage\n * localStorageKeys = [cgp_test1,test2,cgp_test3,test4]\n *\n * getAll() {\n * return [cgp_test1, cgp_test3];\n * };\n *\n * @returns {*} Gets all the data stored in the cache.\n * @public\n */\n getAll(): any[] {\n let keys: any[] = [];\n\n if (!this.storageExists()) {\n return keys;\n }\n\n Object\n .keys(this._cgpStorage)\n .forEach((key) => {\n keys.push(key);\n });\n\n return keys;\n }\n\n\n /**\n * Clear all the data from the localStorage, return true when the local is clear\n * and false when the localStorage not found in the global scope.\n *\n *\n *\n * @usage:\n * clear() {\n * };\n *\n * @returns {boolean} stating the clear was successfully or not.\n * @public\n */\n clear() : void {\n (window as any)[this._storgeKeyName] = {};\n }\n}\n\n\nexport default new CGPStorage();\n","/////////////////////////////////////////////////////////////////////////////////\n/* UAParser.js v1.0.2\n Copyright © 2012-2021 Faisal Salman \n MIT License *//*\n Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n Supports browser & node.js environment. \n Demo : https://faisalman.github.io/ua-parser-js\n Source : https://github.com/faisalman/ua-parser-js */\n/////////////////////////////////////////////////////////////////////////////////\n\n(function (window, undefined) {\n\n 'use strict';\n\n //////////////\n // Constants\n /////////////\n\n\n var LIBVERSION = '1.0.2',\n EMPTY = '',\n UNKNOWN = '?',\n FUNC_TYPE = 'function',\n UNDEF_TYPE = 'undefined',\n OBJ_TYPE = 'object',\n STR_TYPE = 'string',\n MAJOR = 'major',\n MODEL = 'model',\n NAME = 'name',\n TYPE = 'type',\n VENDOR = 'vendor',\n VERSION = 'version',\n ARCHITECTURE= 'architecture',\n CONSOLE = 'console',\n MOBILE = 'mobile',\n TABLET = 'tablet',\n SMARTTV = 'smarttv',\n WEARABLE = 'wearable',\n EMBEDDED = 'embedded',\n UA_MAX_LENGTH = 255;\n\n var AMAZON = 'Amazon',\n APPLE = 'Apple',\n ASUS = 'ASUS',\n BLACKBERRY = 'BlackBerry',\n BROWSER = 'Browser',\n CHROME = 'Chrome',\n EDGE = 'Edge',\n FIREFOX = 'Firefox',\n GOOGLE = 'Google',\n HUAWEI = 'Huawei',\n LG = 'LG',\n MICROSOFT = 'Microsoft',\n MOTOROLA = 'Motorola',\n OPERA = 'Opera',\n SAMSUNG = 'Samsung',\n SONY = 'Sony',\n XIAOMI = 'Xiaomi',\n ZEBRA = 'Zebra',\n FACEBOOK = 'Facebook';\n\n ///////////\n // Helper\n //////////\n\n var extend = function (regexes, extensions) {\n var mergedRegexes = {};\n for (var i in regexes) {\n if (extensions[i] && extensions[i].length % 2 === 0) {\n mergedRegexes[i] = extensions[i].concat(regexes[i]);\n } else {\n mergedRegexes[i] = regexes[i];\n }\n }\n return mergedRegexes;\n },\n enumerize = function (arr) {\n var enums = {};\n for (var i=0; i 0) {\n if (q.length === 2) {\n if (typeof q[1] == FUNC_TYPE) {\n // assign modified match\n this[q[0]] = q[1].call(this, match);\n } else {\n // assign given value, ignore regex match\n this[q[0]] = q[1];\n }\n } else if (q.length === 3) {\n // check whether function or regex\n if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n // call function (usually string mapper)\n this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined;\n } else {\n // sanitize match using given regex\n this[q[0]] = match ? match.replace(q[1], q[2]) : undefined;\n }\n } else if (q.length === 4) {\n this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined;\n }\n } else {\n this[q] = match ? match : undefined;\n }\n }\n }\n }\n i += 2;\n }\n },\n\n strMapper = function (str, map) {\n\n for (var i in map) {\n // check if current value is array\n if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n for (var j = 0; j < map[i].length; j++) {\n if (has(map[i][j], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n } else if (has(map[i], str)) {\n return (i === UNKNOWN) ? undefined : i;\n }\n }\n return str;\n };\n\n ///////////////\n // String map\n //////////////\n\n // Safari < 3.0\n var oldSafariMap = {\n '1.0' : '/8',\n '1.2' : '/1',\n '1.3' : '/3',\n '2.0' : '/412',\n '2.0.2' : '/416',\n '2.0.3' : '/417',\n '2.0.4' : '/419',\n '?' : '/'\n },\n windowsVersionMap = {\n 'ME' : '4.90',\n 'NT 3.11' : 'NT3.51',\n 'NT 4.0' : 'NT4.0',\n '2000' : 'NT 5.0',\n 'XP' : ['NT 5.1', 'NT 5.2'],\n 'Vista' : 'NT 6.0',\n '7' : 'NT 6.1',\n '8' : 'NT 6.2',\n '8.1' : 'NT 6.3',\n '10' : ['NT 6.4', 'NT 10.0'],\n 'RT' : 'ARM'\n };\n\n //////////////\n // Regex map\n /////////////\n\n var regexes = {\n\n browser : [[\n\n /\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n ], [VERSION, [NAME, 'Chrome']], [\n /edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n ], [VERSION, [NAME, 'Edge']], [\n\n // Presto based\n /(opera mini)\\/([-\\w\\.]+)/i, // Opera Mini\n /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i, // Opera Mobi/Tablet\n /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n ], [NAME, VERSION], [\n /opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n ], [VERSION, [NAME, OPERA+' Mini']], [\n /\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n ], [VERSION, [NAME, OPERA]], [\n\n // Mixed\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i, // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n // Trident based\n /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i, // Avant/IEMobile/SlimBrowser\n /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i, // Baidu Browser\n /(?:ms|\\()(ie) ([\\w\\.]+)/i, // Internet Explorer\n\n // Webkit/KHTML based // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq)\\/([-\\w\\.]+)/i,\n // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n /(weibo)__([\\d\\.]+)/i // Weibo\n ], [NAME, VERSION], [\n /(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n ], [VERSION, [NAME, 'UC'+BROWSER]], [\n /\\bqbcore\\/([\\w\\.]+)/i // WeChat Desktop for Windows Built-in Browser\n ], [VERSION, [NAME, 'WeChat(Win) Desktop']], [\n /micromessenger\\/([\\w\\.]+)/i // WeChat\n ], [VERSION, [NAME, 'WeChat']], [\n /konqueror\\/([\\w\\.]+)/i // Konqueror\n ], [VERSION, [NAME, 'Konqueror']], [\n /trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n ], [VERSION, [NAME, 'IE']], [\n /yabrowser\\/([\\w\\.]+)/i // Yandex\n ], [VERSION, [NAME, 'Yandex']], [\n /(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n ], [[NAME, /(.+)/, '$1 Secure '+BROWSER], VERSION], [\n /\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n ], [VERSION, [NAME, FIREFOX+' Focus']], [\n /\\bopt\\/([\\w\\.]+)/i // Opera Touch\n ], [VERSION, [NAME, OPERA+' Touch']], [\n /coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n ], [VERSION, [NAME, 'Coc Coc']], [\n /dolfin\\/([\\w\\.]+)/i // Dolphin\n ], [VERSION, [NAME, 'Dolphin']], [\n /coast\\/([\\w\\.]+)/i // Opera Coast\n ], [VERSION, [NAME, OPERA+' Coast']], [\n /miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n ], [VERSION, [NAME, 'MIUI '+BROWSER]], [\n /fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n ], [VERSION, [NAME, FIREFOX]], [\n /\\bqihu|(qi?ho?o?|360)browser/i // 360\n ], [[NAME, '360 '+BROWSER]], [\n /(oculus|samsung|sailfish)browser\\/([\\w\\.]+)/i\n ], [[NAME, /(.+)/, '$1 '+BROWSER], VERSION], [ // Oculus/Samsung/Sailfish Browser\n /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n ], [[NAME, /_/g, ' '], VERSION], [\n /(electron)\\/([\\w\\.]+) safari/i, // Electron-based App\n /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i, // Tesla\n /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n ], [NAME, VERSION], [\n /(metasr)[\\/ ]?([\\w\\.]+)/i, // SouGouBrowser\n /(lbbrowser)/i // LieBao Browser\n ], [NAME], [\n\n // WebView\n /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n ], [[NAME, FACEBOOK], VERSION], [\n /safari (line)\\/([\\w\\.]+)/i, // Line App for iOS\n /\\b(line)\\/([\\w\\.]+)\\/iab/i, // Line App for Android\n /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n ], [NAME, VERSION], [\n /\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n ], [VERSION, [NAME, 'GSA']], [\n\n /headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n ], [VERSION, [NAME, CHROME+' Headless']], [\n\n / wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n ], [[NAME, CHROME+' WebView'], VERSION], [\n\n /droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n ], [VERSION, [NAME, 'Android '+BROWSER]], [\n\n /(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n ], [NAME, VERSION], [\n\n /version\\/([\\w\\.]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n ], [VERSION, [NAME, 'Mobile Safari']], [\n /version\\/([\\w\\.]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n ], [VERSION, NAME], [\n /webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n ], [NAME, [VERSION, strMapper, oldSafariMap]], [\n\n /(webkit|khtml)\\/([\\w\\.]+)/i\n ], [NAME, VERSION], [\n\n // Gecko based\n /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n ], [[NAME, 'Netscape'], VERSION], [\n /mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n ], [VERSION, [NAME, FIREFOX+' Reality']], [\n /ekiohf.+(flow)\\/([\\w\\.]+)/i, // Flow\n /(swiftfox)/i, // Swiftfox\n /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n /(firefox)\\/([\\w\\.]+)/i, // Other Firefox-based\n /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i, // Mozilla\n\n // Other\n /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n /(links) \\(([\\w\\.]+)/i // Links\n ], [NAME, VERSION]\n ],\n\n cpu : [[\n\n /(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n ], [[ARCHITECTURE, 'amd64']], [\n\n /(ia32(?=;))/i // IA32 (quicktime)\n ], [[ARCHITECTURE, lowerize]], [\n\n /((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n ], [[ARCHITECTURE, 'ia32']], [\n\n /\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n ], [[ARCHITECTURE, 'arm64']], [\n\n /\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n ], [[ARCHITECTURE, 'armhf']], [\n\n // PocketPC mistakenly identified as PowerPC\n /windows (ce|mobile); ppc;/i\n ], [[ARCHITECTURE, 'arm']], [\n\n /((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [\n\n /(sun4\\w)[;\\)]/i // SPARC\n ], [[ARCHITECTURE, 'sparc']], [\n\n /((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n ], [[ARCHITECTURE, lowerize]]\n ],\n\n device : [[\n\n //////////////////////////\n // MOBILES & TABLETS\n // Ordered by popularity\n /////////////////////////\n\n // Samsung\n /\\b(sch-i[89]0\\d|shw-m380s|sm-[pt]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [\n /\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i,\n /samsung[- ]([-\\w]+)/i,\n /sec-(sgh\\w+)/i\n ], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n\n // Apple\n /\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [\n /\\((ipad);[-\\w\\),; ]+apple/i, // iPad\n /applecoremedia\\/[\\w\\.]+ \\((ipad)/i,\n /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i\n ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [\n\n // Huawei\n /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [\n /(?:huawei|honor)([-\\w ]+)[;\\)]/i,\n /\\b(nexus 6p|\\w{2,4}-[atu]?[ln][01259x][012359][an]?)\\b(?!.+d\\/s)/i\n ], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n\n // Xiaomi\n /\\b(poco[\\w ]+)(?: bui|\\))/i, // Xiaomi POCO\n /\\b; (\\w+) build\\/hm\\1/i, // Xiaomi Hongmi 'numeric' models\n /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i, // Xiaomi Hongmi\n /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i, // Xiaomi Redmi\n /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n ], [[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, MOBILE]], [\n /\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n ],[[MODEL, /_/g, ' '], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n\n // OPPO\n /; (\\w+) bui.+ oppo/i,\n /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i\n ], [MODEL, [VENDOR, 'OPPO'], [TYPE, MOBILE]], [\n\n // Vivo\n /vivo (\\w+)(?: bui|\\))/i,\n /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i\n ], [MODEL, [VENDOR, 'Vivo'], [TYPE, MOBILE]], [\n\n // Realme\n /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i\n ], [MODEL, [VENDOR, 'Realme'], [TYPE, MOBILE]], [\n\n // Motorola\n /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i,\n /\\bmot(?:orola)?[- ](\\w*)/i,\n /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [\n /\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i\n ], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n\n // LG\n /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i\n ], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [\n /(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i,\n /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i,\n /\\blg-?([\\d\\w]+) bui/i\n ], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n\n // Lenovo\n /(ideatab[-\\w ]+)/i,\n /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i\n ], [MODEL, [VENDOR, 'Lenovo'], [TYPE, TABLET]], [\n\n // Nokia\n /(?:maemo|nokia).*(n900|lumia \\d+)/i,\n /nokia[-_ ]?([-\\w\\.]*)/i\n ], [[MODEL, /_/g, ' '], [VENDOR, 'Nokia'], [TYPE, MOBILE]], [\n\n // Google\n /(pixel c)\\b/i // Google Pixel C\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [\n /droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n\n // Sony\n /droid.+ ([c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i\n ], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [\n /sony tablet [ps]/i,\n /\\b(?:sony)?sgp\\w+(?: bui|\\))/i\n ], [[MODEL, 'Xperia Tablet'], [VENDOR, SONY], [TYPE, TABLET]], [\n\n // OnePlus\n / (kb2005|in20[12]5|be20[12][59])\\b/i,\n /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i\n ], [MODEL, [VENDOR, 'OnePlus'], [TYPE, MOBILE]], [\n\n // Amazon\n /(alexa)webm/i,\n /(kf[a-z]{2}wi)( bui|\\))/i, // Kindle Fire without Silk\n /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [\n /((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n ], [[MODEL, /(.+)/g, 'Fire Phone $1'], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n\n // BlackBerry\n /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n ], [MODEL, VENDOR, [TYPE, TABLET]], [\n /\\b((?:bb[a-f]|st[hv])100-\\d)/i,\n /\\(bb10; (\\w+)/i // BlackBerry 10\n ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n\n // Asus\n /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [\n / (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i\n ], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n\n // HTC\n /(nexus 9)/i // HTC Nexus 9\n ], [MODEL, [VENDOR, 'HTC'], [TYPE, TABLET]], [\n /(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i, // HTC\n\n // ZTE\n /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i,\n /(alcatel|geeksphone|nexian|panasonic|sony)[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n ], [VENDOR, [MODEL, /_/g, ' '], [TYPE, MOBILE]], [\n\n // Acer\n /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i\n ], [MODEL, [VENDOR, 'Acer'], [TYPE, TABLET]], [\n\n // Meizu\n /droid.+; (m[1-5] note) bui/i,\n /\\bmz-([-\\w]{2,})/i\n ], [MODEL, [VENDOR, 'Meizu'], [TYPE, MOBILE]], [\n\n // Sharp\n /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, MOBILE]], [\n\n // MIXED\n /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n /(hp) ([\\w ]+\\w)/i, // HP iPAQ\n /(asus)-?(\\w+)/i, // Asus\n /(microsoft); (lumia[\\w ]+)/i, // Microsoft Lumia\n /(lenovo)[-_ ]?([-\\w]+)/i, // Lenovo\n /(jolla)/i, // Jolla\n /(oppo) ?([\\w ]+) bui/i // OPPO\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n\n /(archos) (gamepad2?)/i, // Archos\n /(hp).+(touchpad(?!.+tablet)|tablet)/i, // HP TouchPad\n /(kindle)\\/([\\w\\.]+)/i, // Kindle\n /(nook)[\\w ]+build\\/(\\w+)/i, // Nook\n /(dell) (strea[kpr\\d ]*[\\dko])/i, // Dell Streak\n /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i, // Le Pan Tablets\n /(trinity)[- ]*(t\\d{3}) bui/i, // Trinity Tablets\n /(gigaset)[- ]+(q\\w{1,9}) bui/i, // Gigaset Tablets\n /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n ], [VENDOR, MODEL, [TYPE, TABLET]], [\n\n /(surface duo)/i // Surface Duo\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [\n /droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n ], [MODEL, [VENDOR, 'Fairphone'], [TYPE, MOBILE]], [\n /(u304aa)/i // AT&T\n ], [MODEL, [VENDOR, 'AT&T'], [TYPE, MOBILE]], [\n /\\bsie-(\\w*)/i // Siemens\n ], [MODEL, [VENDOR, 'Siemens'], [TYPE, MOBILE]], [\n /\\b(rct\\w+) b/i // RCA Tablets\n ], [MODEL, [VENDOR, 'RCA'], [TYPE, TABLET]], [\n /\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n ], [MODEL, [VENDOR, 'Dell'], [TYPE, TABLET]], [\n /\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n ], [MODEL, [VENDOR, 'Verizon'], [TYPE, TABLET]], [\n /\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n ], [MODEL, [VENDOR, 'Barnes & Noble'], [TYPE, TABLET]], [\n /\\b(tm\\d{3}\\w+) b/i\n ], [MODEL, [VENDOR, 'NuVision'], [TYPE, TABLET]], [\n /\\b(k88) b/i // ZTE K Series Tablet\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, TABLET]], [\n /\\b(nx\\d{3}j) b/i // ZTE Nubia\n ], [MODEL, [VENDOR, 'ZTE'], [TYPE, MOBILE]], [\n /\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, MOBILE]], [\n /\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n ], [MODEL, [VENDOR, 'Swiss'], [TYPE, TABLET]], [\n /\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n ], [MODEL, [VENDOR, 'Zeki'], [TYPE, TABLET]], [\n /\\b([yr]\\d{2}) b/i,\n /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n ], [[VENDOR, 'Dragon Touch'], MODEL, [TYPE, TABLET]], [\n /\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n ], [MODEL, [VENDOR, 'Insignia'], [TYPE, TABLET]], [\n /\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n ], [MODEL, [VENDOR, 'NextBook'], [TYPE, TABLET]], [\n /\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n ], [[VENDOR, 'Voice'], MODEL, [TYPE, MOBILE]], [\n /\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n ], [[VENDOR, 'LvTel'], MODEL, [TYPE, MOBILE]], [\n /\\b(ph-1) /i // Essential PH-1\n ], [MODEL, [VENDOR, 'Essential'], [TYPE, MOBILE]], [\n /\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n ], [MODEL, [VENDOR, 'Envizen'], [TYPE, TABLET]], [\n /\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n ], [MODEL, [VENDOR, 'MachSpeed'], [TYPE, TABLET]], [\n /\\btu_(1491) b/i // Rotor Tablets\n ], [MODEL, [VENDOR, 'Rotor'], [TYPE, TABLET]], [\n /(shield[\\w ]+) b/i // Nvidia Shield Tablets\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, TABLET]], [\n /(sprint) (\\w+)/i // Sprint Phones\n ], [VENDOR, MODEL, [TYPE, MOBILE]], [\n /(kin\\.[onetw]{3})/i // Microsoft Kin\n ], [[MODEL, /\\./g, ' '], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [\n /droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [\n /droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n\n ///////////////////\n // CONSOLES\n ///////////////////\n\n /(ouya)/i, // Ouya\n /(nintendo) ([wids3utch]+)/i // Nintendo\n ], [VENDOR, MODEL, [TYPE, CONSOLE]], [\n /droid.+; (shield) bui/i // Nvidia\n ], [MODEL, [VENDOR, 'Nvidia'], [TYPE, CONSOLE]], [\n /(playstation [345portablevi]+)/i // Playstation\n ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [\n /\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n\n ///////////////////\n // SMARTTVS\n ///////////////////\n\n /smart-tv.+(samsung)/i // Samsung\n ], [VENDOR, [TYPE, SMARTTV]], [\n /hbbtv.+maple;(\\d+)/i\n ], [[MODEL, /^/, 'SmartTV'], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [\n /(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n ], [[VENDOR, LG], [TYPE, SMARTTV]], [\n /(apple) ?tv/i // Apple TV\n ], [VENDOR, [MODEL, APPLE+' TV'], [TYPE, SMARTTV]], [\n /crkey/i // Google Chromecast\n ], [[MODEL, CHROME+'cast'], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [\n /droid.+aft(\\w)( bui|\\))/i // Fire TV\n ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [\n /\\(dtv[\\);].+(aquos)/i // Sharp\n ], [MODEL, [VENDOR, 'Sharp'], [TYPE, SMARTTV]], [\n /\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i, // Roku\n /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [\n /\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n ], [[TYPE, SMARTTV]], [\n\n ///////////////////\n // WEARABLES\n ///////////////////\n\n /((pebble))app/i // Pebble\n ], [VENDOR, MODEL, [TYPE, WEARABLE]], [\n /droid.+; (glass) \\d/i // Google Glass\n ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [\n /droid.+; (wt63?0{2,3})\\)/i\n ], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [\n /(quest( 2)?)/i // Oculus Quest\n ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n\n ///////////////////\n // EMBEDDED\n ///////////////////\n\n /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n ], [VENDOR, [TYPE, EMBEDDED]], [\n\n ////////////////////\n // MIXED (GENERIC)\n ///////////////////\n\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n ], [MODEL, [TYPE, MOBILE]], [\n /droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n ], [MODEL, [TYPE, TABLET]], [\n /\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n ], [[TYPE, TABLET]], [\n /(phone|mobile(?:[;\\/]| safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n ], [[TYPE, MOBILE]], [\n /(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n ], [MODEL, [VENDOR, 'Generic']]\n ],\n\n engine : [[\n\n /windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n ], [VERSION, [NAME, EDGE+'HTML']], [\n\n /webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n ], [VERSION, [NAME, 'Blink']], [\n\n /(presto)\\/([\\w\\.]+)/i, // Presto\n /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i, // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n /ekioh(flow)\\/([\\w\\.]+)/i, // Flow\n /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i, // KHTML/Tasman/Links\n /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n ], [NAME, VERSION], [\n\n /rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n ], [VERSION, NAME]\n ],\n\n os : [[\n\n // Windows\n /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n ], [NAME, VERSION], [\n /(windows) nt 6\\.2; (arm)/i, // Windows RT\n /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i, // Windows Phone\n /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i\n ], [NAME, [VERSION, strMapper, windowsVersionMap]], [\n /(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i\n ], [[NAME, 'Windows'], [VERSION, strMapper, windowsVersionMap]], [\n\n // iOS/macOS\n /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i, // iOS\n /cfnetwork\\/.+darwin/i\n ], [[VERSION, /_/g, '.'], [NAME, 'iOS']], [\n /(mac os x) ?([\\w\\. ]*)/i,\n /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n ], [[NAME, 'Mac OS'], [VERSION, /_/g, '.']], [\n\n // Mobile OSes\n /droid ([\\w\\.]+)\\b.+(android[- ]x86)/i // Android-x86\n ], [VERSION, NAME], [ // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i,\n /(blackberry)\\w*\\/([\\w\\.]*)/i, // Blackberry\n /(tizen|kaios)[\\/ ]([\\w\\.]+)/i, // Tizen/KaiOS\n /\\((series40);/i // Series 40\n ], [NAME, VERSION], [\n /\\(bb(10);/i // BlackBerry 10\n ], [VERSION, [NAME, BLACKBERRY]], [\n /(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n ], [VERSION, [NAME, 'Symbian']], [\n /mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n ], [VERSION, [NAME, FIREFOX+' OS']], [\n /web0s;.+rt(tv)/i,\n /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n ], [VERSION, [NAME, 'webOS']], [\n\n // Google Chromecast\n /crkey\\/([\\d\\.]+)/i // Google Chromecast\n ], [VERSION, [NAME, CHROME+'cast']], [\n /(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n ], [[NAME, 'Chromium OS'], VERSION],[\n\n // Console\n /(nintendo|playstation) ([wids345portablevuch]+)/i, // Nintendo/Playstation\n /(xbox); +xbox ([^\\);]+)/i, // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n // Other\n /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i, // Joli/Palm\n /(mint)[\\/\\(\\) ]?(\\w*)/i, // Mint\n /(mageia|vectorlinux)[; ]/i, // Mageia/VectorLinux\n /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n /(hurd|linux) ?([\\w\\.]*)/i, // Hurd/Linux\n /(gnu) ?([\\w\\.]*)/i, // GNU\n /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i, // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n /(haiku) (\\w+)/i // Haiku\n ], [NAME, VERSION], [\n /(sunos) ?([\\w\\.\\d]*)/i // Solaris\n ], [[NAME, 'Solaris'], VERSION], [\n /((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i, // Solaris\n /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i, // AIX\n /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i, // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n /(unix) ?([\\w\\.]*)/i // UNIX\n ], [NAME, VERSION]\n ]\n };\n\n /////////////////\n // Constructor\n ////////////////\n\n var UAParser = function (ua, extensions) {\n\n if (typeof ua === OBJ_TYPE) {\n extensions = ua;\n ua = undefined;\n }\n\n if (!(this instanceof UAParser)) {\n return new UAParser(ua, extensions).getResult();\n }\n\n var _ua = ua || ((typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent) ? window.navigator.userAgent : EMPTY);\n var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n\n this.getBrowser = function () {\n var _browser = {};\n _browser[NAME] = undefined;\n _browser[VERSION] = undefined;\n rgxMapper.call(_browser, _ua, _rgxmap.browser);\n _browser.major = majorize(_browser.version);\n return _browser;\n };\n this.getCPU = function () {\n var _cpu = {};\n _cpu[ARCHITECTURE] = undefined;\n rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n return _cpu;\n };\n this.getDevice = function () {\n var _device = {};\n _device[VENDOR] = undefined;\n _device[MODEL] = undefined;\n _device[TYPE] = undefined;\n rgxMapper.call(_device, _ua, _rgxmap.device);\n return _device;\n };\n this.getEngine = function () {\n var _engine = {};\n _engine[NAME] = undefined;\n _engine[VERSION] = undefined;\n rgxMapper.call(_engine, _ua, _rgxmap.engine);\n return _engine;\n };\n this.getOS = function () {\n var _os = {};\n _os[NAME] = undefined;\n _os[VERSION] = undefined;\n rgxMapper.call(_os, _ua, _rgxmap.os);\n return _os;\n };\n this.getResult = function () {\n return {\n ua : this.getUA(),\n browser : this.getBrowser(),\n engine : this.getEngine(),\n os : this.getOS(),\n device : this.getDevice(),\n cpu : this.getCPU()\n };\n };\n this.getUA = function () {\n return _ua;\n };\n this.setUA = function (ua) {\n _ua = (typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH) ? trim(ua, UA_MAX_LENGTH) : ua;\n return this;\n };\n this.setUA(_ua);\n return this;\n };\n\n UAParser.VERSION = LIBVERSION;\n UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n UAParser.CPU = enumerize([ARCHITECTURE]);\n UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n ///////////\n // Export\n //////////\n\n // check js environment\n if (typeof(exports) !== UNDEF_TYPE) {\n // nodejs env\n if (typeof module !== UNDEF_TYPE && module.exports) {\n exports = module.exports = UAParser;\n }\n exports.UAParser = UAParser;\n } else {\n // requirejs env (optional)\n if (typeof(define) === FUNC_TYPE && define.amd) {\n define(function () {\n return UAParser;\n });\n } else if (typeof window !== UNDEF_TYPE) {\n // browser env\n window.UAParser = UAParser;\n }\n }\n\n // jQuery/Zepto specific (optional)\n // Note:\n // In AMD env the global scope should be kept clean, but jQuery is an exception.\n // jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n // and we should catch that.\n var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n if ($ && !$.ua) {\n var parser = new UAParser();\n $.ua = parser.getResult();\n $.ua.get = function () {\n return parser.getUA();\n };\n $.ua.set = function (ua) {\n parser.setUA(ua);\n var result = parser.getResult();\n for (var prop in result) {\n $.ua[prop] = result[prop];\n }\n };\n }\n\n})(typeof window === 'object' ? window : this);\n","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","/*!\r\n * js-logger - http://github.com/jonnyreeves/js-logger\r\n * Jonny Reeves, http://jonnyreeves.co.uk/\r\n * js-logger may be freely distributed under the MIT license.\r\n */\r\n(function (global) {\r\n\t\"use strict\";\r\n\r\n\t// Top level module for the global, static logger instance.\r\n\tvar Logger = { };\r\n\r\n\t// For those that are at home that are keeping score.\r\n\tLogger.VERSION = \"1.6.0\";\r\n\r\n\t// Function which handles all incoming log messages.\r\n\tvar logHandler;\r\n\r\n\t// Map of ContextualLogger instances by name; used by Logger.get() to return the same named instance.\r\n\tvar contextualLoggersByNameMap = {};\r\n\r\n\t// Polyfill for ES5's Function.bind.\r\n\tvar bind = function(scope, func) {\r\n\t\treturn function() {\r\n\t\t\treturn func.apply(scope, arguments);\r\n\t\t};\r\n\t};\r\n\r\n\t// Super exciting object merger-matron 9000 adding another 100 bytes to your download.\r\n\tvar merge = function () {\r\n\t\tvar args = arguments, target = args[0], key, i;\r\n\t\tfor (i = 1; i < args.length; i++) {\r\n\t\t\tfor (key in args[i]) {\r\n\t\t\t\tif (!(key in target) && args[i].hasOwnProperty(key)) {\r\n\t\t\t\t\ttarget[key] = args[i][key];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn target;\r\n\t};\r\n\r\n\t// Helper to define a logging level object; helps with optimisation.\r\n\tvar defineLogLevel = function(value, name) {\r\n\t\treturn { value: value, name: name };\r\n\t};\r\n\r\n\t// Predefined logging levels.\r\n\tLogger.TRACE = defineLogLevel(1, 'TRACE');\r\n\tLogger.DEBUG = defineLogLevel(2, 'DEBUG');\r\n\tLogger.INFO = defineLogLevel(3, 'INFO');\r\n\tLogger.TIME = defineLogLevel(4, 'TIME');\r\n\tLogger.WARN = defineLogLevel(5, 'WARN');\r\n\tLogger.ERROR = defineLogLevel(8, 'ERROR');\r\n\tLogger.OFF = defineLogLevel(99, 'OFF');\r\n\r\n\t// Inner class which performs the bulk of the work; ContextualLogger instances can be configured independently\r\n\t// of each other.\r\n\tvar ContextualLogger = function(defaultContext) {\r\n\t\tthis.context = defaultContext;\r\n\t\tthis.setLevel(defaultContext.filterLevel);\r\n\t\tthis.log = this.info; // Convenience alias.\r\n\t};\r\n\r\n\tContextualLogger.prototype = {\r\n\t\t// Changes the current logging level for the logging instance.\r\n\t\tsetLevel: function (newLevel) {\r\n\t\t\t// Ensure the supplied Level object looks valid.\r\n\t\t\tif (newLevel && \"value\" in newLevel) {\r\n\t\t\t\tthis.context.filterLevel = newLevel;\r\n\t\t\t}\r\n\t\t},\r\n\t\t\r\n\t\t// Gets the current logging level for the logging instance\r\n\t\tgetLevel: function () {\r\n\t\t\treturn this.context.filterLevel;\r\n\t\t},\r\n\r\n\t\t// Is the logger configured to output messages at the supplied level?\r\n\t\tenabledFor: function (lvl) {\r\n\t\t\tvar filterLevel = this.context.filterLevel;\r\n\t\t\treturn lvl.value >= filterLevel.value;\r\n\t\t},\r\n\r\n\t\ttrace: function () {\r\n\t\t\tthis.invoke(Logger.TRACE, arguments);\r\n\t\t},\r\n\r\n\t\tdebug: function () {\r\n\t\t\tthis.invoke(Logger.DEBUG, arguments);\r\n\t\t},\r\n\r\n\t\tinfo: function () {\r\n\t\t\tthis.invoke(Logger.INFO, arguments);\r\n\t\t},\r\n\r\n\t\twarn: function () {\r\n\t\t\tthis.invoke(Logger.WARN, arguments);\r\n\t\t},\r\n\r\n\t\terror: function () {\r\n\t\t\tthis.invoke(Logger.ERROR, arguments);\r\n\t\t},\r\n\r\n\t\ttime: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'start' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\ttimeEnd: function (label) {\r\n\t\t\tif (typeof label === 'string' && label.length > 0) {\r\n\t\t\t\tthis.invoke(Logger.TIME, [ label, 'end' ]);\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\t// Invokes the logger callback if it's not being filtered.\r\n\t\tinvoke: function (level, msgArgs) {\r\n\t\t\tif (logHandler && this.enabledFor(level)) {\r\n\t\t\t\tlogHandler(msgArgs, merge({ level: level }, this.context));\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Protected instance which all calls to the to level `Logger` module will be routed through.\r\n\tvar globalLogger = new ContextualLogger({ filterLevel: Logger.OFF });\r\n\r\n\t// Configure the global Logger instance.\r\n\t(function() {\r\n\t\t// Shortcut for optimisers.\r\n\t\tvar L = Logger;\r\n\r\n\t\tL.enabledFor = bind(globalLogger, globalLogger.enabledFor);\r\n\t\tL.trace = bind(globalLogger, globalLogger.trace);\r\n\t\tL.debug = bind(globalLogger, globalLogger.debug);\r\n\t\tL.time = bind(globalLogger, globalLogger.time);\r\n\t\tL.timeEnd = bind(globalLogger, globalLogger.timeEnd);\r\n\t\tL.info = bind(globalLogger, globalLogger.info);\r\n\t\tL.warn = bind(globalLogger, globalLogger.warn);\r\n\t\tL.error = bind(globalLogger, globalLogger.error);\r\n\r\n\t\t// Don't forget the convenience alias!\r\n\t\tL.log = L.info;\r\n\t}());\r\n\r\n\t// Set the global logging handler. The supplied function should expect two arguments, the first being an arguments\r\n\t// object with the supplied log messages and the second being a context object which contains a hash of stateful\r\n\t// parameters which the logging function can consume.\r\n\tLogger.setHandler = function (func) {\r\n\t\tlogHandler = func;\r\n\t};\r\n\r\n\t// Sets the global logging filter level which applies to *all* previously registered, and future Logger instances.\r\n\t// (note that named loggers (retrieved via `Logger.get`) can be configured independently if required).\r\n\tLogger.setLevel = function(level) {\r\n\t\t// Set the globalLogger's level.\r\n\t\tglobalLogger.setLevel(level);\r\n\r\n\t\t// Apply this level to all registered contextual loggers.\r\n\t\tfor (var key in contextualLoggersByNameMap) {\r\n\t\t\tif (contextualLoggersByNameMap.hasOwnProperty(key)) {\r\n\t\t\t\tcontextualLoggersByNameMap[key].setLevel(level);\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t// Gets the global logging filter level\r\n\tLogger.getLevel = function() {\r\n\t\treturn globalLogger.getLevel();\r\n\t};\r\n\r\n\t// Retrieve a ContextualLogger instance. Note that named loggers automatically inherit the global logger's level,\r\n\t// default context and log handler.\r\n\tLogger.get = function (name) {\r\n\t\t// All logger instances are cached so they can be configured ahead of use.\r\n\t\treturn contextualLoggersByNameMap[name] ||\r\n\t\t\t(contextualLoggersByNameMap[name] = new ContextualLogger(merge({ name: name }, globalLogger.context)));\r\n\t};\r\n\r\n\t// CreateDefaultHandler returns a handler function which can be passed to `Logger.setHandler()` which will\r\n\t// write to the window's console object (if present); the optional options object can be used to customise the\r\n\t// formatter used to format each log message.\r\n\tLogger.createDefaultHandler = function (options) {\r\n\t\toptions = options || {};\r\n\r\n\t\toptions.formatter = options.formatter || function defaultMessageFormatter(messages, context) {\r\n\t\t\t// Prepend the logger's name to the log message for easy identification.\r\n\t\t\tif (context.name) {\r\n\t\t\t\tmessages.unshift(\"[\" + context.name + \"]\");\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\t// Map of timestamps by timer labels used to track `#time` and `#timeEnd()` invocations in environments\r\n\t\t// that don't offer a native console method.\r\n\t\tvar timerStartTimeByLabelMap = {};\r\n\r\n\t\t// Support for IE8+ (and other, slightly more sane environments)\r\n\t\tvar invokeConsoleMethod = function (hdlr, messages) {\r\n\t\t\tFunction.prototype.apply.call(hdlr, console, messages);\r\n\t\t};\r\n\r\n\t\t// Check for the presence of a logger.\r\n\t\tif (typeof console === \"undefined\") {\r\n\t\t\treturn function () { /* no console */ };\r\n\t\t}\r\n\r\n\t\treturn function(messages, context) {\r\n\t\t\t// Convert arguments object to Array.\r\n\t\t\tmessages = Array.prototype.slice.call(messages);\r\n\r\n\t\t\tvar hdlr = console.log;\r\n\t\t\tvar timerLabel;\r\n\r\n\t\t\tif (context.level === Logger.TIME) {\r\n\t\t\t\ttimerLabel = (context.name ? '[' + context.name + '] ' : '') + messages[0];\r\n\r\n\t\t\t\tif (messages[1] === 'start') {\r\n\t\t\t\t\tif (console.time) {\r\n\t\t\t\t\t\tconsole.time(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\ttimerStartTimeByLabelMap[timerLabel] = new Date().getTime();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t\telse {\r\n\t\t\t\t\tif (console.timeEnd) {\r\n\t\t\t\t\t\tconsole.timeEnd(timerLabel);\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tinvokeConsoleMethod(hdlr, [ timerLabel + ': ' +\r\n\t\t\t\t\t\t\t(new Date().getTime() - timerStartTimeByLabelMap[timerLabel]) + 'ms' ]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\telse {\r\n\t\t\t\t// Delegate through to custom warn/error loggers if present on the console.\r\n\t\t\t\tif (context.level === Logger.WARN && console.warn) {\r\n\t\t\t\t\thdlr = console.warn;\r\n\t\t\t\t} else if (context.level === Logger.ERROR && console.error) {\r\n\t\t\t\t\thdlr = console.error;\r\n\t\t\t\t} else if (context.level === Logger.INFO && console.info) {\r\n\t\t\t\t\thdlr = console.info;\r\n\t\t\t\t} else if (context.level === Logger.DEBUG && console.debug) {\r\n\t\t\t\t\thdlr = console.debug;\r\n\t\t\t\t} else if (context.level === Logger.TRACE && console.trace) {\r\n\t\t\t\t\thdlr = console.trace;\r\n\t\t\t\t}\r\n\r\n\t\t\t\toptions.formatter(messages, context);\r\n\t\t\t\tinvokeConsoleMethod(hdlr, messages);\r\n\t\t\t}\r\n\t\t};\r\n\t};\r\n\r\n\t// Configure and example a Default implementation which writes to the `window.console` (if present). The\r\n\t// `options` hash can be used to configure the default logLevel and provide a custom message formatter.\r\n\tLogger.useDefaults = function(options) {\r\n\t\tLogger.setLevel(options && options.defaultLevel || Logger.DEBUG);\r\n\t\tLogger.setHandler(Logger.createDefaultHandler(options));\r\n\t};\r\n\r\n\t// Export to popular environments boilerplate.\r\n\tif (typeof define === 'function' && define.amd) {\r\n\t\tdefine(Logger);\r\n\t}\r\n\telse if (typeof module !== 'undefined' && module.exports) {\r\n\t\tmodule.exports = Logger;\r\n\t}\r\n\telse {\r\n\t\tLogger._prevLogger = global.Logger;\r\n\r\n\t\tLogger.noConflict = function () {\r\n\t\t\tglobal.Logger = Logger._prevLogger;\r\n\t\t\treturn Logger;\r\n\t\t};\r\n\r\n\t\tglobal.Logger = Logger;\r\n\t}\r\n}(this));\r\n","!function(e,r){for(var n in r)e[n]=r[n]}(exports,function(e){var r={};function n(t){if(r[t])return r[t].exports;var o=r[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,n),o.l=!0,o.exports}return n.m=e,n.c=r,n.d=function(e,r,t){n.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},n.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},n.t=function(e,r){if(1&r&&(e=n(e)),8&r)return e;if(4&r&&\"object\"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(n.r(t),Object.defineProperty(t,\"default\",{enumerable:!0,value:e}),2&r&&\"string\"!=typeof e)for(var o in e)n.d(t,o,function(r){return e[r]}.bind(null,o));return t},n.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(r,\"a\",r),r},n.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},n.p=\"\",n(n.s=1)}([function(e,r,n){\"use strict\";(function(e){Object.defineProperty(r,\"__esModule\",{value:!0});var n=function(){return function(e,r,n){this.name=e,this.version=r,this.os=n}}();r.BrowserInfo=n;var t=function(){return function(r){this.version=r,this.name=\"node\",this.os=e.platform}}();r.NodeInfo=t;var o=function(){return function(){this.bot=!0,this.name=\"bot\",this.version=null,this.os=null}}();r.BotInfo=o;var i=3,a=[[\"aol\",/AOLShield\\/([0-9\\._]+)/],[\"edge\",/Edge\\/([0-9\\._]+)/],[\"yandexbrowser\",/YaBrowser\\/([0-9\\._]+)/],[\"vivaldi\",/Vivaldi\\/([0-9\\.]+)/],[\"kakaotalk\",/KAKAOTALK\\s([0-9\\.]+)/],[\"samsung\",/SamsungBrowser\\/([0-9\\.]+)/],[\"silk\",/\\bSilk\\/([0-9._-]+)\\b/],[\"miui\",/MiuiBrowser\\/([0-9\\.]+)$/],[\"beaker\",/BeakerBrowser\\/([0-9\\.]+)/],[\"edge-chromium\",/Edg\\/([0-9\\.]+)/],[\"chromium-webview\",/(?!Chrom.*OPR)wv\\).*Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],[\"chrome\",/(?!Chrom.*OPR)Chrom(?:e|ium)\\/([0-9\\.]+)(:?\\s|$)/],[\"phantomjs\",/PhantomJS\\/([0-9\\.]+)(:?\\s|$)/],[\"crios\",/CriOS\\/([0-9\\.]+)(:?\\s|$)/],[\"firefox\",/Firefox\\/([0-9\\.]+)(?:\\s|$)/],[\"fxios\",/FxiOS\\/([0-9\\.]+)/],[\"opera-mini\",/Opera Mini.*Version\\/([0-9\\.]+)/],[\"opera\",/Opera\\/([0-9\\.]+)(?:\\s|$)/],[\"opera\",/OPR\\/([0-9\\.]+)(:?\\s|$)/],[\"ie\",/Trident\\/7\\.0.*rv\\:([0-9\\.]+).*\\).*Gecko$/],[\"ie\",/MSIE\\s([0-9\\.]+);.*Trident\\/[4-7].0/],[\"ie\",/MSIE\\s(7\\.0)/],[\"bb10\",/BB10;\\sTouch.*Version\\/([0-9\\.]+)/],[\"android\",/Android\\s([0-9\\.]+)/],[\"ios\",/Version\\/([0-9\\._]+).*Mobile.*Safari.*/],[\"safari\",/Version\\/([0-9\\._]+).*Safari/],[\"facebook\",/FBAV\\/([0-9\\.]+)/],[\"instagram\",/Instagram\\s([0-9\\.]+)/],[\"ios-webview\",/AppleWebKit\\/([0-9\\.]+).*Mobile/],[\"ios-webview\",/AppleWebKit\\/([0-9\\.]+).*Gecko\\)$/],[\"searchbot\",/alexa|bot|crawl(er|ing)|facebookexternalhit|feedburner|google web preview|nagios|postrank|pingdom|slurp|spider|yahoo!|yandex/]],u=[[\"iOS\",/iP(hone|od|ad)/],[\"Android OS\",/Android/],[\"BlackBerry OS\",/BlackBerry|BB10/],[\"Windows Mobile\",/IEMobile/],[\"Amazon OS\",/Kindle/],[\"Windows 3.11\",/Win16/],[\"Windows 95\",/(Windows 95)|(Win95)|(Windows_95)/],[\"Windows 98\",/(Windows 98)|(Win98)/],[\"Windows 2000\",/(Windows NT 5.0)|(Windows 2000)/],[\"Windows XP\",/(Windows NT 5.1)|(Windows XP)/],[\"Windows Server 2003\",/(Windows NT 5.2)/],[\"Windows Vista\",/(Windows NT 6.0)/],[\"Windows 7\",/(Windows NT 6.1)/],[\"Windows 8\",/(Windows NT 6.2)/],[\"Windows 8.1\",/(Windows NT 6.3)/],[\"Windows 10\",/(Windows NT 10.0)/],[\"Windows ME\",/Windows ME/],[\"Open BSD\",/OpenBSD/],[\"Sun OS\",/SunOS/],[\"Chrome OS\",/CrOS/],[\"Linux\",/(Linux)|(X11)/],[\"Mac OS\",/(Mac_PowerPC)|(Macintosh)/],[\"QNX\",/QNX/],[\"BeOS\",/BeOS/],[\"OS/2\",/OS\\/2/],[\"Search Bot\",/(nuhk)|(Googlebot)|(Yammybot)|(Openbot)|(Slurp)|(MSNBot)|(Ask Jeeves\\/Teoma)|(ia_archiver)/]];function s(e){var r=\"\"!==e&&a.reduce(function(r,n){var t=n[0],o=n[1];if(r)return r;var i=o.exec(e);return!!i&&[t,i]},!1);if(!r)return null;var t=r[0],u=r[1];if(\"searchbot\"===t)return new o;var s=u[1]&&u[1].split(/[._]/).slice(0,3);return s?s.length1)for(var n=1;n\n *\n * Copyright (c) 2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isPrimitive = require('is-primitive');\nvar assignSymbols = require('assign-symbols');\nvar typeOf = require('kind-of');\n\nfunction assign(target/*, objects*/) {\n target = target || {};\n var len = arguments.length, i = 0;\n if (len === 1) {\n return target;\n }\n while (++i < len) {\n var val = arguments[i];\n if (isPrimitive(target)) {\n target = val;\n }\n if (isObject(val)) {\n extend(target, val);\n }\n }\n return target;\n}\n\n/**\n * Shallow extend\n */\n\nfunction extend(target, obj) {\n assignSymbols(target, obj);\n\n for (var key in obj) {\n if (isValidKey(key) && hasOwn(obj, key)) {\n var val = obj[key];\n if (isObject(val)) {\n if (typeOf(target[key]) === 'undefined' && typeOf(val) === 'function') {\n target[key] = val;\n }\n target[key] = assign(target[key] || {}, val);\n } else {\n target[key] = val;\n }\n }\n }\n return target;\n}\n\n/**\n * Returns true if the object is a plain object or a function.\n */\n\nfunction isObject(obj) {\n return typeOf(obj) === 'object' || typeOf(obj) === 'function';\n}\n\n/**\n * Returns true if the given `key` is an own property of `obj`.\n */\n\nfunction hasOwn(obj, key) {\n return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\n/**\n * Returns true if the given `key` is a valid key that can be used for assigning properties.\n */\n\nfunction isValidKey(key) {\n return key !== '__proto__' && key !== 'constructor' && key !== 'prototype';\n}\n\n/**\n * Expose `assign`\n */\n\nmodule.exports = assign;\n","/*!\n * is-primitive \n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\n// see http://jsperf.com/testing-value-is-primitive/7\nmodule.exports = function isPrimitive(value) {\n return value == null || (typeof value !== 'function' && typeof value !== 'object');\n};\n","/*!\n * assign-symbols \n *\n * Copyright (c) 2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(receiver, objects) {\n if (receiver === null || typeof receiver === 'undefined') {\n throw new TypeError('expected first argument to be an object.');\n }\n\n if (typeof objects === 'undefined' || typeof Symbol === 'undefined') {\n return receiver;\n }\n\n if (typeof Object.getOwnPropertySymbols !== 'function') {\n return receiver;\n }\n\n var isEnumerable = Object.prototype.propertyIsEnumerable;\n var target = Object(receiver);\n var len = arguments.length, i = 0;\n\n while (++i < len) {\n var provider = Object(arguments[i]);\n var names = Object.getOwnPropertySymbols(provider);\n\n for (var j = 0; j < names.length; j++) {\n var key = names[j];\n\n if (isEnumerable.call(provider, key)) {\n target[key] = provider[key];\n }\n }\n }\n return target;\n};\n","var toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nmodule.exports = function kindOf(val) {\n var type = typeof val;\n\n // primitivies\n if (type === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (type === 'string' || val instanceof String) {\n return 'string';\n }\n if (type === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (type === 'function' || val instanceof Function) {\n if (typeof val.constructor.name !== 'undefined' && val.constructor.name.slice(0, 9) === 'Generator') {\n return 'generatorfunction';\n }\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n type = toString.call(val);\n\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n if (type === '[object Promise]') {\n return 'promise';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n \n if (type === '[object Map Iterator]') {\n return 'mapiterator';\n }\n if (type === '[object Set Iterator]') {\n return 'setiterator';\n }\n if (type === '[object String Iterator]') {\n return 'stringiterator';\n }\n if (type === '[object Array Iterator]') {\n return 'arrayiterator';\n }\n \n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n\n/**\n * If you need to support Safari 5-7 (8-10 yr-old browser),\n * take a look at https://github.com/feross/is-buffer\n */\n\nfunction isBuffer(val) {\n return val.constructor\n && typeof val.constructor.isBuffer === 'function'\n && val.constructor.isBuffer(val);\n}\n","interface ICurlyBracesBinding {\n to: string,\n value: string,\n fn: string\n}\n\n/**\n * Basic String\n *\n * Enables chaning events, output must be called, else will return a chain\n *\n *\n */\nexport default class Strings {\n\n\n private _curlyBracesPattern = /{([^}]+)}/g;\n\n\n /**\n * Initialized the object with the source string to work with.\n */\n constructor(str: string) {\n this._string = str || '';\n }\n\n _string: string;\n\n\n\n /**\n * Make a string's first character uppercase\n * @see: http://php.net/manual/en/function.ucfirst.php\n */\n ucFirst() : string {\n return this._string.charAt(0).toUpperCase() + this._string.slice(1);\n }\n\n getCurlyBracesBinding(): Array {\n let found: Array = []; // an array to collect the strings that are found\n\n let currentMatch = this._curlyBracesPattern.exec(this._string);\n while (currentMatch) {\n found.push(this._getBindingMethod(currentMatch[1]));\n currentMatch = this._curlyBracesPattern.exec(this._string)\n }\n\n return found;\n }\n\n private _getBindingMethod(bindExpression: string) : ICurlyBracesBinding {\n let bindMap = {\n to: bindExpression,\n value: '',\n fn: ''\n };\n\n let bindRelatedMethod = bindExpression.split('|');\n if (2 === bindRelatedMethod.length) {\n bindMap.value = bindRelatedMethod[0].trim();\n bindMap.fn = bindRelatedMethod[1].trim();\n }\n\n return bindMap;\n }\n\n\n /**\n * @description - Insert char at a specific position in the string.\n */\n insertAt(index: number, stringToInjectT: string, stringToInject: string) {\n return stringToInjectT.substr(0, index) + stringToInject + stringToInjectT.substr(index);\n }\n\n /**\n *\n * @returns {string}\n */\n stripslashes(): string {\n return (this._string + '')\n .replace(/\\\\(.?)/g, function (s, n1) {\n switch (n1) {\n case '\\\\':\n return '\\\\'\n case '0':\n return '\\u0000'\n case '':\n return ''\n default:\n return n1\n }\n });\n }\n replaceAll(from: string, to: string)\n {\n return this._string.replace(new RegExp(to, 'g'), from);\n }\n\n getString() :string {\n return this._string;\n }\n\n setString(str): void {\n this._string = str;\n }\n\n /**\n * @description - Determines if a value is a empty string.\n */\n isEmpty(): boolean {\n return this._string.length === 0 || !this._string.trim();\n }\n\n\n /**\n *\n * @param partialString\n */\n startsWith(partialString) {\n if (!String.prototype.startsWith) {\n // eslint-disable-next-line\n String.prototype.startsWith = function (searchString, position) {\n position = position || 0;\n return this.substr(position, searchString.length) === searchString;\n };\n }\n\n return this._string.startsWith(partialString);\n }\n\n injectIntoCurly(bindingParams: object): string {\n if (bindingParams === undefined || bindingParams === null) {\n return this._string;\n }\n Object\n .keys(bindingParams)\n .forEach((bindTo) => {\n let tokens = this._string.split('{' + bindTo + '}');\n this._string = tokens.join(bindingParams[bindTo]);\n });\n\n return this._string;\n }\n}\n"],"sourceRoot":""}