webostvjs
Version:
Source code of the webOSTV.js library
1 lines • 13.3 kB
JavaScript
!function(){"use strict";var e={d:function(n,t){for(var o in t)e.o(t,o)&&!e.o(n,o)&&Object.defineProperty(n,o,{enumerable:!0,get:t[o]})},o:function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r:function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},n={};e.r(n),e.d(n,{deviceInfo:function(){return z},fetchAppId:function(){return t},fetchAppInfo:function(){return r},fetchAppRootPath:function(){return i},keyboard:function(){return I},libVersion:function(){return H},platform:function(){return T},platformBack:function(){return s},service:function(){return v},systemInfo:function(){return E}});var t=function(){return window.PalmSystem&&window.PalmSystem.identifier?window.PalmSystem.identifier.split(" ")[0]:""},o={},r=function(e,n){if(0===Object.keys(o).length){var r=function(n,r){if(!n&&r)try{o=JSON.parse(r),e&&e(o)}catch(n){console.error("Unable to parse appinfo.json file for",t()),e&&e()}else e&&e()},i=new window.XMLHttpRequest;i.onreadystatechange=function(){4===i.readyState&&(i.status>=200&&i.status<300||0===i.status?r(null,i.responseText):r({status:404}))};try{i.open("GET",n||"appinfo.json",!0),i.send(null)}catch(e){r({status:404})}}else e&&e(o)},i=function(){var e=window.location.href;if("baseURI"in window.document)e=window.document.baseURI;else{var n=window.document.getElementsByTagName("base");n.length>0&&(e=n[0].href)}var t=e.match(/.*:\/\/[^#]*\//);return t?t[0]:""},s=function(){if(window.PalmSystem&&window.PalmSystem.platformBack)return window.PalmSystem.platformBack()};function u(e){return u="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},u(e)}function a(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);n&&(o=o.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,o)}return t}function c(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?a(Object(t),!0).forEach((function(n){var o,r,i;o=e,r=n,i=t[n],(r=d(r))in o?Object.defineProperty(o,r,{value:i,enumerable:!0,configurable:!0,writable:!0}):o[r]=i})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):a(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}function l(e,n){for(var t=0;t<n.length;t++){var o=n[t];o.enumerable=o.enumerable||!1,o.configurable=!0,"value"in o&&(o.writable=!0),Object.defineProperty(e,d(o.key),o)}}function d(e){var n=function(e,n){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var o=t.call(e,"string");if("object"!=u(o))return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(n)?n:n+""}var f={},m=function(){return e=function e(){!function(e,n){if(!(e instanceof n))throw new TypeError("Cannot call a class as a function")}(this,e),this.bridge=null,this.cancelled=!1,this.subscribe=!1},n=[{key:"send",value:function(e){var n=e.service,t=void 0===n?"":n,o=e.method,r=void 0===o?"":o,i=e.parameters,s=void 0===i?{}:i,u=e.onSuccess,a=void 0===u?function(){}:u,l=e.onFailure,d=void 0===l?function(){}:l,m=e.onComplete,p=void 0===m?function(){}:m,v=e.subscribe,y=void 0!==v&&v;if(!window.PalmServiceBridge){var g={errorCode:-1,errorText:"PalmServiceBridge is not found.",returnValue:!1};return d(g),p(g),console.error("PalmServiceBridge is not found."),this}this.ts&&f[this.ts]&&delete f[this.ts];var w,b=c({},s);return this.subscribe=y,this.subscribe&&(b.subscribe=this.subscribe),b.subscribe&&(this.subscribe=b.subscribe),this.ts=Date.now(),f[this.ts]=this,this.bridge=new PalmServiceBridge,this.bridge.onservicecallback=this.callback.bind(this,a,d,p),this.bridge.call(("/"!==(w=t).slice(-1)&&(w+="/"),w+r),JSON.stringify(b)),this}},{key:"callback",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},o=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(!this.cancelled){var r={};try{r=JSON.parse(o)}catch(e){r={errorCode:-1,errorText:o,returnValue:!1}}var i=r,s=i.errorCode,u=i.returnValue;s||!1===u?(r.returnValue=!1,n(r)):(r.returnValue=!0,e(r)),t(r),this.subscribe||this.cancel()}}},{key:"cancel",value:function(){this.cancelled=!0,null!==this.bridge&&(this.bridge.cancel(),this.bridge=null),this.ts&&f[this.ts]&&delete f[this.ts]}}],n&&l(e.prototype,n),Object.defineProperty(e,"prototype",{writable:!1}),e;var e,n}(),p={request:function(){var e=c({service:arguments.length>0&&void 0!==arguments[0]?arguments[0]:""},arguments.length>1&&void 0!==arguments[1]?arguments[1]:{});return(new m).send(e)}},v=p;function y(e){return y="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},y(e)}var g={};if("object"===("undefined"==typeof window?"undefined":y(window))&&window.PalmSystem){if(window.navigator.userAgent.indexOf("SmartWatch")>-1)g.watch=!0;else if(window.navigator.userAgent.indexOf("SmartTV")>-1||window.navigator.userAgent.indexOf("Large Screen")>-1)g.tv=!0;else{try{var w=JSON.parse(window.PalmSystem.deviceInfo||"{}");if(w.platformVersionMajor&&w.platformVersionMinor){var b=Number(w.platformVersionMajor),h=Number(w.platformVersionMinor);b<3||3===b&&h<=0?g.legacy=!0:g.open=!0}}catch(e){g.open=!0}window.Mojo=window.Mojo||{relaunch:function(){}},window.PalmSystem.stageReady&&window.PalmSystem.stageReady()}if(window.navigator.userAgent.indexOf("Chr0me")>-1||window.navigator.userAgent.indexOf("Chrome")>-1){var S=window.navigator.userAgent.indexOf("Chr0me")>-1?window.navigator.userAgent.indexOf("Chr0me"):window.navigator.userAgent.indexOf("Chrome"),O=window.navigator.userAgent.slice(S).indexOf(" "),V=window.navigator.userAgent.slice(S+7,S+O).split(".");g.chrome=Number(V[0])}else g.chrome=0}else g.unknown=!0;var T=g,P={},k={},j=!1,A=!1,D=!1,C=[];function x(e){A&&D?(C.length&&(C.forEach((function(n){n!==e&&n(P)})),C=[]),e(P)):C.push(e)}function M(e){k.soundOutput&&0===k.soundOutput.indexOf("external_arc")&&"external_arc_sound_alive"!==k.soundOutput?e(!0):!k.soundOutput||0!==k.soundOutput.indexOf("tv_")&&"external_arc_sound_alive"!==k.soundOutput?e(null):e(!1)}function N(e){"auto"===k.soundOutputDigital||"passThrough"===k.soundOutputDigital?e(!0):e(!1)}function _(e,n){P.dolbyAtmos!==e&&(P.dolbyAtmos=e,A=!0,x(n))}function B(e){!function(e){P.sdkVersion&&e(P.sdkVersion.split(".")),(new m).send({service:"luna://com.webos.service.tv.systemproperty",method:"getSystemInfo",parameters:{keys:["sdkVersion"]},onSuccess:function(n){P.sdkVersion=n.sdkVersion||P.sdkVersion,e(P.sdkVersion.split("."))},onFailure:function(){e([0,0,0])}})}((function(n){parseInt(n[0],10)>=5?(new m).send({service:"luna://com.webos.service.arccontroller",method:"getARCState",subscribe:!0,onComplete:function(n){M((function(t){(t||!k.dolbyAtmosConfig&&"tv_speaker_external_arc_harmony"===k.soundOutput)&&N((function(t){_(!!t&&n.returnValue&&("ATMOS"===n.arcProfile||!0===n.earcATMOS),e)}))}))},onFailure:function(){console.log("[webOSTV.js] getARCState failed"),_(!1,e)}}):(new m).send({service:"luna://com.webos.service.eim",method:"getAllInputStatus",subscribe:!0,onComplete:function(n){M((function(t){!t&&(k.dolbyAtmosConfig||"tv_speaker_external_arc_harmony"!==k.soundOutput&&void 0!==k.soundOutput)||N((function(t){_(!!t&&n.returnValue&&!0===n.atmosDevice,e)}))}))},onFailure:function(){console.log("[webOSTV.js] getAllInputStatus failed"),_(!1,e)}})}))}function R(e){void 0===k.dolbyAtmosConfig?(new m).send({service:"luna://com.webos.service.config",method:"getConfigs",parameters:{configNames:["tv.config.supportDolbyTVATMOS","tv.model.soundModeType"]},onComplete:function(n){k.dolbyAtmosConfig=n.configs?n.configs["tv.config.supportDolbyTVATMOS"]||"Dolby Atmos"===n.configs["tv.model.soundModeType"]:"failure",R(e)}}):!0===k.dolbyAtmosConfig?_(!0,e):!1===k.dolbyAtmosConfig?"tv_speaker_external_arc_harmony"===k.soundOutput?N((function(n){n?B(e):_(!1,e)})):void 0===k.soundOutput?(console.log("[webOSTV.js] soundOutput value is",k.soundOutput),B(e)):_(!1,e):(console.log("[webOSTV.js] dolbyAtmos config is",k.dolbyAtmosConfig),_(!1,e))}var z=function(e){!function(e){(new m).send({service:"luna://com.webos.settingsservice",method:"getSystemSettings",parameters:{category:"sound",keys:["soundOutput","soundOutputDigital"]},subscribe:!0,onSuccess:function(n){n.settings?(k.soundOutput=n.settings.soundOutput||k.soundOutput,k.soundOutputDigital=n.settings.soundOutputDigital||k.soundOutputDigital,n.settings.soundOutput?(k.soundOutput=n.settings.soundOutput,M((function(n){n?N((function(n){n?B(e):_(!1,e)})):!1===n?R(e):_(!1,e)}))):n.settings.soundOutputDigital&&M((function(n){(n||"tv_speaker_external_arc_harmony"===k.soundOutput&&!0!==k.dolbyAtmosConfig)&&N((function(n){n?B(e):_(!1,e)}))}))):_(!1,e)},onFailure:function(){console.log("[webOSTV.js] getSystemSettings(soundOutput) failed"),R(e)}})}(e),j?x(e):(j=!0,function(){try{var e=JSON.parse(window.PalmSystem.deviceInfo);P.modelName=e.modelName,P.version=e.platformVersion,P.versionMajor=e.platformVersionMajor,P.versionMinor=e.platformVersionMinor,P.versionDot=e.platformVersionDot,P.screenWidth=e.screenWidth,P.screenHeight=e.screenHeight}catch(e){P.modelName="webOS Device"}P.screenHeight=P.screenHeight||window.screen.height,P.screenWidth=P.screenWidth||window.screen.width}(),T.tv?(P.uhd=!1,P.uhd8K=!1,P.hdr10=!1,P.dolbyVision=!1,P.brandName="LG",P.manufacturer="LG Electronics",P.platformBizType="LG",P.tuner=!0,function(e){(new m).send({service:"luna://com.webos.service.config",method:"getConfigs",parameters:{configNames:["com.webos.app.home.uiStyle","com.webos.service.utp.supportTunerless","profile.list","tv.config.supportDolbyHDRContents","tv.hw.ddrSize","tv.hw.displayType","tv.hw.panelResolution","tv.model.mainboardMaker","tv.model.modelname","tv.model.supportHDR","tv.model.supportTemp8K","tv.model.TVBrandName","tv.model.TVManufacturer","tv.nyx.firmwareVersion","tv.nyx.platformVersion","wee.platformBizType"]},onComplete:function(n){if(n.configs){if(P.modelName=n.configs["tv.model.modelname"]||P.modelName,n.configs["tv.nyx.firmwareVersion"]&&"0.0.0"!==n.configs["tv.nyx.firmwareVersion"]||(n.configs["tv.nyx.firmwareVersion"]=n.configs["tv.nyx.platformVersion"]),n.configs["tv.nyx.firmwareVersion"]){P.version=n.configs["tv.nyx.firmwareVersion"];for(var t=P.version.split("."),o=["versionMajor","versionMinor","versionDot"],r=0;r<o.length;r+=1)try{P[o[r]]=parseInt(t[r],10)}catch(e){P[o[r]]=t[r]}}P.sdkVersion=n.configs["tv.nyx.platformVersion"]||P.sdkVersion,P.uhd="UD"===n.configs["tv.hw.panelResolution"]||"8K"===n.configs["tv.hw.panelResolution"],P.uhd8K="8K"===n.configs["tv.hw.panelResolution"]||!0===n.configs["tv.model.supportTemp8K"],P.oled="OLED"===n.configs["tv.hw.displayType"],P.ddrSize=n.configs["tv.hw.ddrSize"],P.hdr10=!0===n.configs["tv.model.supportHDR"],P.dolbyVision=!0===n.configs["tv.config.supportDolbyHDRContents"],P.brandName=n.configs["tv.model.TVBrandName"]||P.brandName,P.manufacturer=n.configs["tv.model.TVManufacturer"]||P.manufacturer,P.mainboardMaker=n.configs["tv.model.mainboardMaker"],n.configs["wee.platformBizType"]?P.platformBizType=n.configs["wee.platformBizType"]:"WEE"===n.configs["com.webos.app.home.uiStyle"]&&(P.platformBizType="wee"),n.configs["profile.list"]?P.tuner=!n.configs["profile.list"].includes("tunerless"):n.configs["com.webos.service.utp.supportTunerless"]&&(P.tuner=!1)}!n.returnValue||function(e){var n=["com.webos.app.home.uiStyle","com.webos.service.utp.supportTunerless","profile.list","tv.model.mainboardMaker","tv.model.supportTemp8K","tv.model.TVBrandName","tv.model.TVManufacturer","wee.platformBizType"],t=!1;if(e&&Array.isArray(e))for(var o=0;o<e.length;o+=1)if(!n.includes(e[o])){t=!0;break}return t}(n.missingConfigs)?function(e){(new m).send({service:"luna://com.webos.service.tv.systemproperty",method:"getSystemInfo",parameters:{keys:["ddrSize","firmwareVersion","modelName","OLED","sdkVersion","UHD"]},onComplete:function(n){if(P.modelName=n.modelName||P.modelName,P.sdkVersion=n.sdkVersion||P.sdkVersion,P.uhd=n.UHD?"true"===n.UHD:P.uhd,P.oled=n.OLED?"true"===n.OLED:P.oled,P.ddrSize=n.ddrSize||P.ddrSize,n.firmwareVersion&&"0.0.0"!==n.firmwareVersion||(n.firmwareVersion=n.sdkVersion),n.firmwareVersion){P.version=n.firmwareVersion;for(var t=P.version.split("."),o=["versionMajor","versionMinor","versionDot"],r=0;r<o.length;r+=1)try{P[o[r]]=parseInt(t[r],10)}catch(e){P[o[r]]=t[r]}}D=!0,x(e)}})}(e):(D=!0,x(e))}})}(e)):(D=!0,x(e)))},I={isShowing:function(){return PalmSystem&&PalmSystem.isKeyboardVisible}},E=function(){var e={};if(window.PalmSystem){if(window.PalmSystem.country){var n=JSON.parse(window.PalmSystem.country);e.country=n.country,e.smartServiceCountry=n.smartServiceCountry}window.PalmSystem.timeZone&&(e.timezone=window.PalmSystem.timeZone)}return e},H="1.2.12";window.webOS=n}();