From 5ae5f06183d39644bda5f2a0d5d24d49d28c67cc Mon Sep 17 00:00:00 2001 From: tom-win87 <76440079+tom-win87@users.noreply.github.com> Date: Thu, 18 Apr 2024 09:45:07 -0400 Subject: [PATCH] readme update --- .DS_Store | Bin 0 -> 6148 bytes README.md | 147 ++++++++++++ docs/MSPS_signatories.md | 55 +++++ images/logo.png | Bin 0 -> 31243 bytes tizen-example/config.xml | 13 + tizen-example/css/style.css | 75 ++++++ tizen-example/icon.png | Bin 0 -> 5167 bytes tizen-example/images/tizen_32.png | Bin 0 -> 12848 bytes tizen-example/index.html | 221 +++++++++++++++++ tizen-example/js/main.js | 16 ++ tizen-example/js/navigation.js | 92 ++++++++ tizen-example/tizen_guide.md | 44 ++++ webOS-example/appinfo.json | 11 + webOS-example/icon.png | Bin 0 -> 5570 bytes webOS-example/index.html | 223 ++++++++++++++++++ webOS-example/js/events_handler.js | 60 +++++ webOS-example/js/main.js | 2 + webOS-example/js/navigation.js | 110 +++++++++ webOS-example/largeIcon.png | Bin 0 -> 14871 bytes webOS-example/webOSTVjs-1.2.0/LICENSE-2.0.txt | 202 ++++++++++++++++ webOS-example/webOSTVjs-1.2.0/webOSTV-dev.js | 1 + webOS-example/webOSTVjs-1.2.0/webOSTV.js | 1 + webOS-example/webos_guide.md | 34 +++ 23 files changed, 1307 insertions(+) create mode 100644 .DS_Store create mode 100644 README.md create mode 100644 docs/MSPS_signatories.md create mode 100644 images/logo.png create mode 100644 tizen-example/config.xml create mode 100644 tizen-example/css/style.css create mode 100644 tizen-example/icon.png create mode 100644 tizen-example/images/tizen_32.png create mode 100644 tizen-example/index.html create mode 100644 tizen-example/js/main.js create mode 100644 tizen-example/js/navigation.js create mode 100644 tizen-example/tizen_guide.md create mode 100644 webOS-example/appinfo.json create mode 100644 webOS-example/icon.png create mode 100644 webOS-example/index.html create mode 100644 webOS-example/js/events_handler.js create mode 100644 webOS-example/js/main.js create mode 100644 webOS-example/js/navigation.js create mode 100644 webOS-example/largeIcon.png create mode 100644 webOS-example/webOSTVjs-1.2.0/LICENSE-2.0.txt create mode 100644 webOS-example/webOSTVjs-1.2.0/webOSTV-dev.js create mode 100644 webOS-example/webOSTVjs-1.2.0/webOSTV.js create mode 100644 webOS-example/webos_guide.md diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..077ec534d19b6f6527bf07c593316e324c8964b8 GIT binary patch literal 6148 zcmeHKJ5Iwu5Pb`g2%DIw|t96={b5 z%7DDP4yGtD!D`3*YkYZ;B;%|YGrs#;pS^#6yj^VO=Ed|!e|g{fHk!H1YJ9a`RZGry zjubCgp~4I~`nctjWmvO6qqUC&BlRxIYU@ryPw28;n?U{4v)6Rvx*r~9*Q83V?^?-`KuA)*S#igiGLbg=Oy z0I@@}7xtx=keo;{R;&ZkLvbOM7*d^<7%rsK9%)>xSO*O0a9VsgUD;`c;{58IKl0&l zaX@R00b^jBfx|HD$^C!%ef__kWFuq17}zTYTqjABA-AM=Yio0I*GAMks))qZ0h<(d i{8h|Yxr$GzUTBY`LyQ&cfV5ETN5IoyjWO`24157@)JpjP literal 0 HcmV?d00001 diff --git a/README.md b/README.md new file mode 100644 index 0000000..ec2ff3e --- /dev/null +++ b/README.md @@ -0,0 +1,147 @@ + + +Sourcepoint's HTML5 OTT solution allows you to surface a Sourcepoint CMP message on devices such as Tizen and webOS for supported regulatory frameworks. + +# Table of Contents + +- [Implementation overview](#implementation-overview) +- [Supported campaigns](#supported-campaigns) +- [Resurface OTT message](#resurface-ott-message) +- [Global Privacy Platform (GPP) Multi-State Privacy (MSPS) support](#global-privacy-platform-gpp-multi-state-privacy-msps-support) +- [APIs](#apis) + +## Implementation overview + +Every implementation requires a bundle of scripts that must be added to your `index.html` file in order to surface the appropriate message configured in the Sourcepoint portal. + +- [Stub file(s)](#stub-files) +- [Client configuration script](#client-configuration-script) +- [URL to messaging library](#url-to-messaging-library) + +### Stub file(s) + +The first part implementation script(s) contains the IAB stub functions. The stub functions set up the IAB privacy string object `__tcfapi` (for GDPR TCF campaigns) or `__uspapi` (for U.S. Privacy (Legacy) campaigns), respectively. + +This makes it available on queue to be called and released when needed. It is important to have these stub file(s) in the first position to avoid errors and failure of service. + +> Note: There is no stub file when configuring a GDPR Standard campaign for your project. + +```javascript +// GDPR TCF stub file. Example only. Please use stub file generated in Sourcepoint portal as it may have changed. + +``` + +```javascript +// US Privacy (Legacy) stub file. Example only. Please use stub file generated in Sourcepoint portal as it may have changed. + +``` + +```javascript +// US Multi-State Privacy stub file. Example only. Please use stub file generated in Sourcepoint portal as it may have changed. +window.__gpp_addFrame=function(e){if(!window.frames[e])if(document.body){var t=document.createElement("iframe");t.style.cssText="display:none",t.name=e,document.body.appendChild(t)}else window.setTimeout(window.__gpp_addFrame,10,e)},window.__gpp_stub=function(){var e=arguments;if(__gpp.queue=__gpp.queue||[],__gpp.events=__gpp.events||[],!e.length||1==e.length&&"queue"==e[0])return __gpp.queue;if(1==e.length&&"events"==e[0])return __gpp.events;var t=e[0],p=e.length>1?e[1]:null,s=e.length>2?e[2]:null;if("ping"===t)p({gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}},!0);else if("addEventListener"===t){"lastId"in __gpp||(__gpp.lastId=0),__gpp.lastId++;var n=__gpp.lastId;__gpp.events.push({id:n,callback:p,parameter:s}),p({eventName:"listenerRegistered",listenerId:n,data:!0,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else if("removeEventListener"===t){for(var a=!1,i=0;i<__gpp.events.length;i++)if(__gpp.events[i].id==s){__gpp.events.splice(i,1),a=!0;break}p({eventName:"listenerRemoved",listenerId:s,data:a,pingData:{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"not ready",supportedAPIs:["2:tcfeuv2","5:tcfcav1","6:uspv1","7:usnatv1","8:uscav1","9:usvav1","10:uscov1","11:usutv1","12:usctv1"],cmpId:0,sectionList:[],applicableSections:[],gppString:"",parsedSections:{}}},!0)}else"hasSection"===t?p(!1,!0):"getSection"===t||"getField"===t?p(null,!0):__gpp.queue.push([].slice.apply(e))},window.__gpp_msghandler=function(e){var t="string"==typeof e.data;try{var p=t?JSON.parse(e.data):e.data}catch(e){p=null}if("object"==typeof p&&null!==p&&"__gppCall"in p){var s=p.__gppCall;window.__gpp(s.command,(function(p,n){var a={__gppReturn:{returnValue:p,success:n,callId:s.callId}};e.source.postMessage(t?JSON.stringify(a):a,"*")}),"parameter"in s?s.parameter:null,"version"in s?s.version:"1.1")}},"__gpp"in window&&"function"==typeof window.__gpp||(window.__gpp=window.__gpp_stub,window.addEventListener("message",window.__gpp_msghandler,!1),window.__gpp_addFrame("__gppLocator")); + +``` + +### Client configuration script + +### URL to messaging library + +## Supported campaigns + +Campaign are surfaced on yout HTML5 device by adding campaign objects to your configuration + +The following Sourcepoint campaigns are supported via our HTML5 OTT solution: + +| **Config object** | **Campaign** | +| ----------------- | ------------------------- | +| `gdpr: {}` | GDPR TCF or GDPR Standard | +| `ccpa: {}` | U.S. Privacy (Legacy) | + +> U.S. Multi-State Privacy campaigns are currently not supported for HTML5 OTT devices. If your organization needs to support the Global Privacy Platform (GPP) Multi-State Privacy (MSPS) framework, you will need to configure a U.S. Privacy (Legacy) campaign to do so. [Click here](#us-multi-state-privacy-campaign-support) for more information about this configuration. + +## Resurface OTT message + +The privacy manager JavaScript code is a snippet that is added to your project and allows an end-user to resurface a privacy manager. Using this link/button, end-users can directly manage their consent preferences on an ongoing basis without having to re-encounter your organization's first layer message. + +Load the OTT message on demand by [retrieving the OTT message ID](https://docs.sourcepoint.com/hc/en-us/articles/20806618675603-Resurface-OTT-message) from the Sourcepoint portal and pass it to the `loadNativeOtt` function. + +```javascript +//GDPR +window._sp_.gdpr.loadNativeOtt(GDPR_OTT_ID); + +//U.S. Privacy (Legacy) +window._sp_.ccpa.loadNativeOtt(USP_LEGACY_OTT_ID); +``` + +Attach the `loadNativeOtt` function to an event handler on your project. Most organizations who implement this function will attach it to `onclick` event of an element. + +```javascript +//GDPR + + +//U.S. Privacy (Legacy) + +``` + +## Global Privacy Platform (GPP) Multi-State Privacy (MSPS) support + +In the Sourcepoint portal, U.S. Multi-State Privacy campaigns are created to support the Global Privacy Platform (GPP) Multi-State Privacy (MSPS) framework. Currently, U.S. Multi-State Privacy campaigns are not supported in Sourcepoint's HTML5 OTT solution. + +If your organization wishes to support the Global Privacy Platform (GPP) Multi-State Privacy (MSPS) framework you will need to specifically configure a U.S. Privacy (Legacy) campaign to do so. + +> Once successfully, configured Sourcepoint will enable the Multi-State Privacy String (MSPS) alongside the U.S. Privacy String. The MSPS can be acessed via the [GPP API](https://sourcepoint-public-api.readme.io/reference/iab-global-privacy-platform-gpp-api).

Please be aware that this solution will only set the [U.S. National Privacy section of the MSPS](https://sourcepoint-public-api.readme.io/reference/us-national-privacy-section) and will not set values for sensitive data categories. + +Add the GPP stub file in addition to the U.S. Privacy - CCPA stub file to `index.html`. + +```javascript +//Example only. Please use stub file generated in Sourcepoint portal as it may have changed. + +``` + +Add the `includeGppApi` parameter to the `ccpa` object in your client configuration and set one of the following flag(s) depending on your organization's use case. [Click here](docs/MSPS_signatories.md) for more information on each attribute, possible values, and examples for signatories and non-signatories of the MSPA. + +If `includeGppApi` is set to `true`, the following MSPA arguments will be set accordingly: + +- `MspaCoveredTransaction`: `"no"` +- `MspaOptOutOptionMode`: `"na"` +- `MspaServiceProviderMode`: `"na"` + +``` +window._sp_queue = []; +window._sp_ = { + config: { + accountId: 1584, + baseEndpoint: 'https://cdn.privacy-mgmt.com', + ccpa: { + includeGppApi: true + }, + propertyHref: 'https://www.testdemo.com', +``` + +Optionally, your organization can customize support for the MSPS by configuring the MSPA attributes as part of the GPP config. + +``` +window._sp_queue = []; +window._sp_ = { + config: { + accountId: 1584, + baseEndpoint: 'https://cdn.privacy-mgmt.com', + ccpa: { + includeGppApi: { + "MspaCoveredTransaction": "yes", + "MspaOptOutOptionMode": "yes", + "MspaServiceProviderMode": "no" + } + }, + propertyHref: 'https://www.testdemo.com', +``` + +## APIs + +Find comprehensive guides and documentation to help you start working with Sourcepoint's public APIs as quickly as possible for different regulatory frameworks in our [API Hub](https://sourcepoint-public-api.readme.io/reference/welcome-to-the-sourcepoint-api-hub). diff --git a/docs/MSPS_signatories.md b/docs/MSPS_signatories.md new file mode 100644 index 0000000..4066f41 --- /dev/null +++ b/docs/MSPS_signatories.md @@ -0,0 +1,55 @@ +The IAB Tech Lab's Global Privacy Platform's (GPP) Multi-State Privacy String (MSPS) is a signal that notifies downstream partners that participating publishers have provided end-users with specific notice and choice over data processing activities on their properties. + +Your organization will need to configure the following attributes as part of the GPP config: + +| Attribute | Possible values | Description | +| ------------------------- | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `MspaCoveredTransaction` | `yes`
`no` | Publisher or Advertiser, as applicable, is a signatory to the IAB Multistate Service Provider Agreement (MSPA), as may be amended from time to time, and declares that the transaction is a “Covered Transaction” as defined in the MSPA.

The configured value for the flag will translate to the following in the MSPS:
`yes` = 1
`no` = 2 | +| `MspaOptOutOptionMode` | `na`
`yes`
`no` | Publisher or Advertiser, as applicable, has enabled “Opt-Out Option Mode” for the “Covered Transaction,” as such terms are defined in the MSPA.

The configured value for the flag will translate to the following in the MSPS:
`na` = 0
`yes` = 1
`no` = 2 | +| `MspaServiceProviderMode` | `na`
`yes`
`no` | Publisher or Advertiser, as applicable, has enabled “Service Provider Mode” for the “Covered Transaction,” as such terms are defined in the MSPA.

The configured value for the flag will translate to the following in the MSPS:
`na` = 0
`yes` = 1
`no` = 2 | + +Depending on whether your organization is a signatory of the Multi-State Privacy Agreement (MSPA), your organization will configure the attributes in the following ways: + +### Non-signatory of the MSPA + +For organizations who have not signed the MSPA and only want to listen for the MSPS. When setting the attributes thusly, the MSPA, as a contractual framework, does not cover your transactions. + +> Note: This is the default settings for these attributes. Non-signatories of the MSPA can also just set the `includeGppApi` parameter to `true` within the `ccpa` object and these attributes will default to this configuration. + +``` +window._sp_queue = []; +window._sp_ = { + config: { + accountId: 1584, + baseEndpoint: 'https://cdn.privacy-mgmt.com', + ccpa: { + includeGppApi: { + "MspaCoveredTransaction": "no", + "MspaOptOutOptionMode": "na", + "MspaServiceProviderMode": "na" + } + }, + propertyHref: 'https://www.testdemo.com', + +``` + +### Signatory of the MSPA + +For transactions covered by the MSPA, signatories can choose to operate in [Opt-Out Option Mode or Service Provider Mode](https://www.iab.com/wp-content/uploads/2022/12/IAB_MSPA_Decision_Tree.pdf). + +``` +window._sp_queue = []; +window._sp_ = { + config: { + accountId: 1584, + baseEndpoint: 'https://cdn.privacy-mgmt.com', + ccpa: { + includeGppApi: { + "MspaCoveredTransaction": "yes", + "MspaOptOutOptionMode": "yes", + "MspaServiceProviderMode": "no" + } + }, + propertyHref: 'https://www.testdemo.com', + +``` diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8cd52a73eaf1d3250aa353fb75d9d50645b687 GIT binary patch literal 31243 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 Mtn%ARY2(oU18Xz^l>h($ literal 0 HcmV?d00001 diff --git a/tizen-example/config.xml b/tizen-example/config.xml new file mode 100644 index 0000000..6b61dce --- /dev/null +++ b/tizen-example/config.xml @@ -0,0 +1,13 @@ + + + + + + + + SourcepointCMP + + + + + diff --git a/tizen-example/css/style.css b/tizen-example/css/style.css new file mode 100644 index 0000000..12d6cb4 --- /dev/null +++ b/tizen-example/css/style.css @@ -0,0 +1,75 @@ +* { + font-family: Lucida Sans, Arial, Helvetica, sans-serif; +} + +body { + margin: 50px auto; + background-color: #ffffff; +} + +header h1 { + font-size: 108px; + margin: 0px; +} + +header h2 { + font-size: 54px; + margin: 0px; + color: #888; + font-style: italic; +} + +nav ul { + list-style: none; + padding: 20px; + display: block; + clear: right; + background-color: #666; + padding-left: 4px; + height: 48px; +} + +nav ul li { + display: inline; + padding: 0px 20px 5px 10px; + border-right: 1px solid #ccc; +} + +nav ul li a { + color: #EFD3D3; + text-decoration: none; + font-size: 39px; + font-weight: bold; +} + +nav ul li a:hover { + color: #fff; +} + +article > header h1 { + font-size: 60px; + margin-left: 14px; +} + +article > header h1 a { + color: #993333; +} + +article > header h1 img { + vertical-align:middle; +} + +article > section header h1 { + font-size: 48px; +} + +article p { + clear: both; +} + +footer p { + text-align: center; + font-size: 36px; + color: #888; + margin-top: 30px; +} diff --git a/tizen-example/icon.png b/tizen-example/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c4414d56d7887f84f870e7ea42d1ad3d0c9e6e57 GIT binary patch literal 5167 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 literal 0 HcmV?d00001 diff --git a/tizen-example/images/tizen_32.png b/tizen-example/images/tizen_32.png new file mode 100644 index 0000000000000000000000000000000000000000..647c3f9f4e521485471d6480f8ba8bdd53f851dd GIT binary patch literal 12848 zcmV-0GSAJ4P)SblQW2HvcWcBY``FL6e4FNf~@A?zy+RJ)Xa|zqY@&zcyzJ4-YTY zr%#`1!-fs(5D^hEV&cS!v9o8-PL7U_PLGO;%AP!V^3P)bkoW&d^A`0?2zMvTCK0R!;$ z*Iz?EN5_sG(YbSH$GUdyiY{Hcpi`$#&incq-_y@~_UwsozWD|N2M)xjQKKLLW>1|u zb<3DBVx9XfPqcX49;gb5QegbDcStFIhq69_d0L|-dtd`^HA zBn8lXuAi%Q>(&jzHVAVejLhJ<2Mrq3oo#vC{`gPbLIk8Raa4>*S*AD(-Me@9Ge%9F zZGvTjW}EJ3gKL@sZJtMf0y~PZFH<^AO#lA`EmR0Pu~QXio=HwA0RzA zMS8E(!`&QezGupuex~oKTn>>8*#EIM6A!qf7^yPBkqr@)vA>8zi@5+572pwwaR6YY@iu;x#>Pzy2Yc zWM)l7`jU9DcJH-83-*~hF4#VKF_k>?IOef}y{EvDaT4Q_L^hi|ZvXynn@CAzNuS4$ z9zFUYv#~(E*)4(47^IK3l<{@@_U+N6NfR_~+!zfSG(i3O^_|Ct4I83avt~gP4U<7O zIBrsDpPP@2yE3kOD8qvByw=C<@87h^SgEP>!0o+z_jZ*YI~6w_5oka2^{1bH>HtN+ z2vFk=a*XvS(0<-pG-}kydH>fiF4*Vhc+O2`Ikw}qN>bAFar^z>+9b0I7gpUe)AL|5 zV`gV|PdAeWO;B33YUO}MBUnvGPDjTRKcVaC|BLRYe@4A}_0YU|^Put0E$hr}|3Joe zQ9*=lw`4pQ{Hf`F}FM$od{1y#2UPRNQe@EEypV2zyXS5U0KHYWQ z511`sW)^A3Gi?VS%?@OOVqlU zcxcB-JGuBZLk#mhR!qi^AHSErdEEFsvPr`li3FtBiA7$5y?OCwtkCzE1)8y{ZdfaP zxNtA3@A@7e@A(0>_Wppn2mXfohkiukBR?YS=uc?5?TW)N#yPifnVY#K7{M|`d!TQh zLo-`;wy|T!rqD-^8z*ODLnNh5RfoF`Vznw^v&+pvCRpv-wR3=?^O>%H*lRdmUv~p< zC4Yx^c06=I`)KzMsJZV4)H(1Y8u&nKzV)&nFgG>?11>Lva)QB*6s#O(zUFZy8A%n@ zc)XzX=+UD#nWX{ROdj0yKajNOe&%rqmc}bO|C5MCsJh`kUfg^iuWfyRHwoJIhj@SI zLoaB1|AxBzy-aJe`SK$S3pNf5^uC)^1_IlR!)9kRA9-yek0}z<9*;bVL#s*JzLyRO z)Z6k}DYqR$uoS2UjT+;fIlEAN^&LEwbO+CExQmxI-NUO}?&HmE4^VCU1H31oeJE`E zWY71gEo`g5{(>`jZqcGeo>OwOLzzj1oe1RyWU%x2K-`w)YsXMbljv?T+V^(gl&nvue;hC3#f=h3r__CWQwIU1UR%W5% z>TFb5dkaqq+n!y22QO~8gI9!YZ)~}Tw}ox*?s$NY*PQdmFuPNkNsyVc>wb2%L$5El zdAC3bN+8f=oc2qfK7Ib!iU@0ig9i`36)1rSlm?sfXMb)=O;}i%phN)-E6rH6mR*y?qfc> z#Vt2;D{Hv{#q($zh7KKiOZNL?YLBc$ixh4*tLJXL$4o+OX*BnByAZ}5N@1_Dv*4L} z5uTVUB8k_LfAI|z65xsna3z=DL|Ku@3abRPHCcFa-7P$mbPLaKxGkXF!E2lE;@yPP z4oelVU^CPvfPta_@)*^a4Jd@5N|NKh`S$Gwm*nfdm)CXD_VOn{yN~<3Q?PUS&?G>jTX>HS{O+blu zd*7|b8O+RrwJEW-g4m#$3}!qF4-X&zyMp!QmtQvd_SlXQ?_>NtDJo5=z# zDhH}=*zwK{yg=a~P<6+AE_ngx3V)wTP)>o57%?Kr4yb`f^?`zHZi{AECnUqVe)$z@ zPuv2}*mM+{c?JcdFE~u|f_4r07F|cdB{xuXX$DFx%S4$KHwCntctSv{DiZm0Vm4k` zlID+Lrt>uUVO!W)nD#SnGBc&I4K(w)zSbE6^E1BYBadaPiQQ2G4Re&?^zrYq+@OE| z{=Hbl%u5Nz4b0rqXZ;QxK~@YNHVi#xZGdNJ3W`lheFU@+A7~*y(26X*ffDf<4rt{J z&|Y4A5_Rj=^;Y!dm}+FOX`C}NKR5T|cU7XfAI*90d#(GhV`#0D1O8wg)lPWKP$DYE z^_RVV6IjxKijv73Hp@-6hTBsQfnEn&JE3!2y!b_Pree&(P4M(TfD(~MQIw#~IE?~P z=Mg$jKywn2s|XR`3M{^kB5~JIJpKksFVB!gOw&RmCf10&F^O*=nuG)|h@ zVA*lq3=O6Y8Z_uIeg1C)*0*op0h+Sr#WXHy1GK?*yfPci_vkn}v$0(8hUE*fK6yXN z_TPy@gZH82xT6l!3eQMKf!XH}I`<;-&A)7bcI{uFEz3ZugqtWj?+hA<6G!*$i6KLW zIV*Z6OqhUa)23nGym^R^k4Hj60@kfthh@u_VfpgqShHr0^Lpc^P1v|`BTgUKhFu%i zq2sh|C=+oUo`_TMM5asjdJdi$BGFO8_W9RQA^s|wM9gNBP%;kiV#(O}_@($E>k>N7l*FUUCX|mj=zvyy z(n%Dab_xY&iA2u1AfSoU7F=;8GE|sWIPQi6TE2PL&}zUK?A^2mCypFKYFZl3oH>J2 zr%vJg`SUn;?i?;%y5zTu7cb(%g$uZR`LevejH_2JY zQ?l%IT^SQ72?(K~*XLG2p)3o_djDFyLImkuCK$OT4|%O0+WWFY@S=Eul&sym zcO&cOO~-M4V~@fUmVipb_jo~zID``8kD=&fvMmh-XEL^(Lw-sBpBs}P$LatXemKjk z-2e+@KmPb5{`R-OInVc{3u8WABVcVq*~r5vJ~74VAfaTJ!|Kb(AA1#rms~^frPn2P z-ati(omE!fl%Yiyo=?ign{lbA*|y6gY-2{6*U&=Wdw$JY{vJJggi%l3rVoP6YXutd zyNzqqbSi}@cwAf@Qd3irm6hcdM-nr!;vhaVguXgpqScKPOgl<2w^o^BgZVf23IJVm5)kX`wO%^ru% zmr-ER6%-Y~N(x}*1h7ggGw`GU_T0KGytFG60hl{*^cj{pV(k*{lvNQS5NN>q|_lp1pg#U~td zm|P(GoHusKAU-7a3JQt*7LU6oNzM&aNXU@PG!sv+xryf!v+(K$Vc4cycz4Tfe2{zx zHKR75PSY@Fn4ybYDcNqhfSHgTm;C*Wxkk4oXmcp`i|Dh%FvQO^!rwJXq(~&%wX(n?5 z4FK);?Nr_#m+*64uQ7G%R2)8h7`JZSavZ5Fppg}yjMxTG<2Y34lZ0BI4|PD|U6i`~ zTaQhKQEG4BzKuI~?l?xq(wJP(2;zeW55(>}$KQHPvdyq%DE-YQR2aGorAPYYaOz11 zu>5nqfQ3l>Dky*zi@S=_@z+p(`E^GQpI)7b=hxlDE9-CK4UxllHs3<^ZMRWF0IR+0 z9vbYqk0$#cpi$&})UI9I0Zy|>CL}cVvHF|WBiGhFSHNWK6|c^=Q%=6mgEN5Ypwq4m z+7=9SmW9}Gg0^DC3McKRGi|W=c;QMGUh6g!P1|&E;uQzBb{lok4w=U|n4O*N7(0O* zfRx>|OE*#Zi?s;tyats9??BmMdmfd;*=G*t#}g}Vpz5j& zJS%eeV&YA_wjm2|i5$MS^)^1F9PYe}db{tT@!kh$e((WW9sUlj5)Pq3tG50u(k+`- z6Pb?>3YLITx@XUx8TR1T1f;%EnlZ~cq`2+C+_E9Ef!}44ut^52ltcD>f}}a9jCNf&F2n4 zt)wS^*252)*3+~+!;{fz=8UpihNuPK;lqbx|Ni|>?>E6>oFQ10vD^IY;a!X#J#+aXoDEPbdhtDI+K>_pAAFBL0eEph7cvjF*{`ZIwjem zR}S+FV1*Z5Mv1s9C?j%Mam961S$PA`tjWL&B8RVv9KN|ROOlOS_)z5VlO1v0queykarnNdd>CpKv9xpmN+NnfP4mF!2SbR;e2qYOnC)4=^S_8Psvi3@z zlgGbu<%(lhuU^HqYu6l85NU@F9df|d+96|N^N!u|^x)MJzYe4DloOK9rz6A{zY4@& zLNNiXqySca*)>!Wz@8Goo)f@cPRzvX0@&M|ZsPr|+4yMNE!5g^TjcPr$l*PN31F?0 zPND7erD)T$uXA2rzqVUrm_FzG8r!5ZMFa#)8ok9W4w~)09u{pr zD7|RKVKf{ci@Ke@aGYtTv1*+2(uV2$7cDU{(Q&4kep3nw7-J2=qMVT-1Z>x?U8qy1 zj{mr3z$Tbvo0gtfa-u1CG(KlVffaI%7rZ5kcZE`(-~M)%16b(n)9}o@fP7?^09Hce zu#CuIh2_^!CE>ax8#jbqnRrD2dsF1_oy}SJz$b@wciush6-UuBaxPkZ<-IMKor2Yz zAw!1vL2;8p1BkX{e@=c^CHQI9* z^`%$US$-6?M@6Gn+pdmd15IP_{f^=+RyW9`KfUNQPKop&N1R)Z?LItd%K6aIhzltXWuqTCG z&kDO<60lxN$`p2G;r%VysI~k!nn*U-;)|~xCh?{S-f&Ojb1fFwta3BrAPSI8Y;pj` zg`t`q+8Lc071|@mPT=E+ zg{a-_8$VFa&3C@~VdThRIG%Fiks6dunoQ>vPz4M0rE}6t(2Qym6RJY98mOrxtsgaq)CI?`W^LJ1{^nhkS)F8;`l(VJ@ zhtWvb)L^#+*PW6P30O59pl&%py)W|cj%fPZ8zmU87mb%*_-5=;ydAj=A9d>|?DERx z${FKv?b1a*Sej&*aZ8!SI7B(qD*N%{$Nk9;AK5l4059_N>C;Y?UX1{9oJXJ-x6Epc zTZM+8l5LdEYF|%8ff?yeWuCRer8chllutsC&q27*LsO>N++hNp)Te2LW-W8DE-jInm z)@KM%(hJvR;Kj8!@cioQcvgDmGpi&9#GJsh-_Az+-rov)&im5$@0^%rCmAY(3Kp3{ z<`4vyv&?Lj6O)v-^z`%`#-2~-x&?b(E?~|~>u`mgp!JvEpytTAsM#+PO*?w)l`Mx5 zAjTxJk}_)o6Ntfq)XPpp)Z|C?JE-%0rf-og8!e^yw1I zcKHXnltN81D1`(|rI7MQu*f0;F=osd?*yo@jBO-4Y_KLzp6mc-&z6&Mj$-)Mb(k4$ zm;ectB z)swO3)mV01fXWm`W#XNU8F!vu-f#iWD-d3F#o-do0cfRw`rF)d<*f0=>K3kI5EvL`6r%6NgmG{GY_ zIRF!9rQ0%Sf6+WJ_p3d6o`98sx7T|a^_l?niZJR$0qS`HiqfY*RT4&35TMElP^FhJ zMZSn)v0{rZ;*C!I9ob>b;B-Ct7-L|@rO$UD7|DhhY@7D2^c%is@1FgSuf9*TS-oR8pyBa=Wa$dBQ`kz zlZ(kF-Az+@R5MS=&l|S?3~wgh5TLFLP}lL&nrnDoKzddf_0)M|-W^|GnV zl8Y!M02PnDfT9a8pwNQz2%Uc(6-TV_#|(l*Nn`b%;4w~U0B5Y=8jK@HjyMBt)5uJ9 zim%%3$QHrpu?P+sL}OWqOd?20Nl8uzAcM(d9b7YhQkDstR{i;W=gytZcuHfYTfNmz zECLn7-6YeDtqPg|mYoAI`QpzSyG&WM4{n}-7yVZ35id}}sOJQzrxUKAsxYcDfr`I` z@&Z;_0=1Yx38Mt4!U9x*7_N^vhmbjE5IX%N>NfVq4jxlw#T>`*w+%T#$ubfzn$Bjy zc*l+%&Sx6%?Y5Fx97Yf*ULSwxYvsz74r3{+WGtDR7r>Ydae|c#c?dc?nO#G5D@dEF zWOjO+eI~2;T8SgR_}Oh7_7B}b51;^=iHLb%%GjGD77C-T;F%Sd@#Kn20@NjmQSC|D=DR97vm!1BV!h2Piv5-Eb6)sf=cP6A9QZZtsZEz zC0LO+(4blUF4y>v9DvDA{|qF7CQ#-<*}EEb{sNU8>AQqV22f=LsFI5=2&2xUXv{f3 zP$2|LSQRom-2tn>)D#q%a0He5FZM6~w3+QT1wp25*HIORABPdtjEkq1$Fcrxnv2Gi#9 zFrE0+`7>R#X)X@c)k*e37j2_2aQ`lVQ6?#iix)5UPc^YU!Aec)csu#vb30eCa|k|? zOgR7($Nz)QCu?-R$<6HAB2U_M@ML&mE(lQPQJjoga87_aivsh{BHvsuNS>(E!m3kV zR!vJmp-D$kWc*z@AESe0aEVrJ^i*ioxiE$5LEIc3TeXY9n! zxR37wbM#bR8^?NN2OUnMEHaL9n4q;sN}kH1#xZl!ljB4J%Q(n!7-J*P?Kb=|Wi5~| z`KUfOjqPOz<)a)YrzFZ3f98h@n)y5!fVAcBX&~GE2=#z*Vb-ZOEO~ENQ1Zn>K`3^{A1wmp0VH(G4++WK|3Nnq) zDVaQuPH*Th%yGcZLH73T+x^+1&Y`I+l2y9AfPfK9o^#2PCC;^*DZU-Y>{_8Mn`X9X zvd(-i-_4oU%NNp3Mk&k8*MX?5W1q&eH^4Lg6g<-eq*rv>lRq)h~LA9{%4qFC>55Ur;OPyGw)eRjmyMe~)gf96e zK$J@|k!e3cGMUDb6f;W##~}j;*#wW{D^A-S+`mu2$?}6_8Uf?Lnr-43j>80o~ml^;&eAydBFo?8d3Ilm6PFmZQuH2LU6H z1nR_z6V7-{I}aJfcJO`En8>JX@_Mx01d8BsDn#pp&aVi3-V=RhY{lALr-WhuTF9e- zv0Voa9KhVUa~*c69GkJs^p9KRL;b2|`(IT}$dI!%B?pK#Z(=iLFt>Q7?=!t7)4rTA zA1_VXhk~OI!87mxJbib-(|Zd%-IL(yC?K_6jzXOiP;KCPbep~t@yThpd@aN86rIw~ z4K%WhQ~mnOqihR%JF`j~FvhDIHEN({&6=~XaVxKU5aY` z6A`{(A6D-^jm(=_KHxItxFU;jan5v#b_Tccs+oA$V_RFb+!7A~I%n}$zBs}y*>E$r z%ti;?S`qK^MK63A5shvWm!svR&8Rmn8LcKIqu>19n6l~+wj4b3$O9j(W zU@<&x;_$*Z>o9oH0h~Q|QQCY3yS8mYrjn`uWPHf{{-VE2eX z18IBAVUOrpzawzY?K6W0VeOK6*t%vp&ZQj0tt?*XO+QGs*%Ouunj6caqN1F*W8QmB z2M|C7in2*2>e!1(hW@;)j@z`l&TG(xK~=t9jB?*@M7jQ(P+lG@e7gx{`>sa_V{MD2 zsN8ckM#SxxYdVDWOXs3ZyHEX{!DLggPM#ZJ3YzSba{^N&qMA)jw<2(`2~KkYj!x4V z+m4;PVEpLeh@L&$xmk`*)TtAKqfDcji*0mC0HsmywMm?YNmLgW% z4<0<|IGv)a?G+2lM8khlT}(b)MW#l>te=8mg(;T^BB6$|K)C@ zQDXQ`6d$=8#U)WHHcB38BX>EkON`iwQu2AJVcX&9u^ANyCSzLE0@SVVWv3~(HoI&x zn4h`j4bndMML0fL++r4egOyYQ&6(MCGF|LRwlRICQ#ozIl$$p{(4o13X3jVhG|q8p z)!tn5sLR~645f2r3Y57phaE?qOUI}jl64gZu0WBo`(+q%z{zk6%Wy=Eubt22v1r6T zl!({^PxxLuH8L69`-DGIsc~B!*_jv}OR%&|!~}(v2BzI~EE(kn8l~~rv186T*eTrF!S=Fu z6Nq3y>H0*No`Mj+op6lrnU;Uraj#81hR`WT;fXwg!UA6VFTe56 zI_UMAele%8^f6d^FLD@oskZcp(z0_#pe)g?x42cK%~DLDRYQz39ITQpe9nb5TrwxI=alLwFsG&ijdi<@XS&>3C~Pg zs_&6@!fP`K=yAt9kw+0WX1;SA9YmYvHf5y~l{Robz=Gcl;frJOb_yS8z9zS+7`OF) z_Dy{pM=`z;2qq=7X3fI3ZQF8y#*z_PsjHLBtW^UxADKvWmkx0D?74s-X|0e_dtDek zdh}>-cG$QD3Pz{-tw3}tLZi}Qi8+QVqOi1wGnW7-LB^hR7 zVZUdT0)yXf#7(}?-7SvUw6zD#f%bPB5||Zg9SadSg2vZON)lGCbYfd(=2ho+G{`2# z87=7Q6pLvpZ_NBIUAiEEU3_GTwhflfdr@}l)TxU%I`ws!Rcvl5iqht!qKMB5)1tjr zh$a9Q6e}PWI-4e}o0^J`Ca!W47sjyM{1ME2Kl`5h4Sl>#Q=Fe^XEAQ|F0)6Nwa47z zU7&rK-Em;cN=c8;IwN+_MpK`3^{4|uDmxdCC6`$)hf?7;Lo$CeF zGcyezOjzk(lHgW^u){}?(37`YW__T=1UiYEv-8rRyn@K@F#V_e@uHs^I1ix{4mpxk zIQk^=&y;{KLB615a)rn2L9r1#P-4hdlo_xQ<@+Tfq}@`y*l!&&GdL)}{x9hhGw%~K z?QCia=FFajI{n5XH0B)2FHCo=+`>~Rw;b3#@1MDb$RJ zbz-8gr1VG@nAZ;N+c$4FrE?Q1hS@2oOF;CS-BZkjB)5jy63cOs&S5>(cREVMoEAr= zqJ;F~!chVkrDvLCW)o#xGZ$;Vu8&KhENf_ELMvd?_0?u{+kifjLPfZ8q zT5<2(vAxr#vJ*F>@}hK95_^Ic`!A~~0MaUmm0#esav!iit@c+1X~ z-Nv?-lI8tpA7l%WFYIzl)9t~sof(=dhVrsf$b3zC)rrdw+JA{B7oT<IH0uk7XR#j@gY8!;(>I;AWKVw;rAj@u)E*F$X{2jFIU{x&Ptv3vRee@v(P;tnv>#LjwyZF+qO`Sn`!4>0xZ8YJpjdCI(Xabq z6>jpS-fj}-(i0wGOrRbWsBz|Tn5i*os38f!^NZ8OQQ{2BQVb>MB#Me87MRUc`Z)4U zJ&FPoL>43Vp!o3ZC^<*~>zf2m`#5|efa#r@5Voxve8o_*Ou@_9Xv!a0bdem-z?6ScM7E){zIsMf?UF7^Ym>fLC zWPux{Z9r@$23p2tzpuYdNOrv?nHHTzhg6Cc=@Gz63B!sBV1)#*5Q$@+X-5${=@1G< z?nTj2l*KJ5`>mH@Hei%RW{Mn>v4+WCbK{~^t-eqd%xfWN)gu<+D9u5$Tau=oR{Wkq-~VdBe4q`mODTVZ={?JgT_5xr zi&vJPb)3SUOzEkxAWedNDvHlJDRJxs@)0l@sOF!1L}YP4ii{Rn9JH$wpd8wSaHU&@J$Y2b%rMitFGbNl}k?HmnE%L zt5!LyoCp*L-;}{X>sQz=r+VM66RNE`hqqVK&N^*-Gr?H`|67iJI;AcdhbiZuxEu~RTmMkG?W#< zN(f*@1h7y7CUGo8;#lZJ0c@msFiR6pCq1ltcKXf zG->lkVjssH^51!5c4`|KxACVhEIg!-e;2TH69F!V7fNZ9&wHcphKthHi%xrM(~>TrmROyM zao+o&UDU;vL$^*ZQu_P;(Ev9&Xk~Hq_T0u0xfy$)4vr~>4VLV7{yyrHb?5M*Fzj6c z>`jrxSA}6O#GMkr(gd(nKVT)IQ&4!eWQa443SeG_6%d9M8pWk_$>=tDC00g7qPq-) zneA~(CNGJSnp@_^_j#-)W1`S-(?vAc=(YM{^)_5U!!P?enXcK9^Aaj(!s6}p?e7j4 zw?>T`HI<%p%Pre8CBW=e+CWWXDIF?>4M)yIBXK}o>8+HS57&4BdrKJh>aujaD1bd9 z467=DRTRL=3ScD#up$Cj=*(jXQNSkbhiC9EJTYVwMvj|`4xPO}uTB}vjX`-So$7>H71inJAgonzML+)fwl%Q(hCmUJ}5bW5pvj6_sL6pxnF^loG&- z&OU~M!mtqjQq81;@Qm7vkfFQKD>51_TD5`x*>@mTnLxNP%$!tI#_=_!v3V;=ST>(W zi>;RsCf0P)BIjE59OjxBx4A_oEwAf^9oph&L6&U zlM_}EMkNLsv9p2Hbb_NPv-49CjT<=ZY7v(x7ktI(rA-(UHZXvnLyffp*y^)*CqV#P zo{m?Rp27=DynsC+l1PRXiei;RZ1Qmwkb!gU$w}zif0(oIhJ#_Y#hzR>Uz@<#7A)?X zK=53x$IV5XSu6ZMfuY9^wop``OJ`1$(D3K}i@Kb=nt--9m|pu9^7{v@om=~+@+Zwk z>(z%5mT(wNmmfgGrTbAYZa-=*-iME3_u~Bpd+^Tu-FS2EF1#AG3$M)HftP0_*Dq3|9_IzZuLU9be=|^ z(RY6;Sh`71sVxmi3Dz@p37YCVLDU-;+?;D>XJ(PuToO$qGj z9sN$A?9P@tb`mXb+1DJ1tt{-)XO9Ie-6YFtB%q}R%7{4a&x_+NJ$&TF=#OdfmjL)X z99-(g*L*ae>!a>NBS>Tuk45lwIkUMCCy*4`%b?w)OCR~U0$_jFmPs2R8))D8Qsw*q z8UL0}(AazIxRF~G!M;o5*L)V}yhH=7tccullQXwWDiHH* zX|yHB+}Dmd_V_6`(Cq=VJ-!N*=IeQU?P9s<Si-W%&=GJxK0IwrUH6-XxS@7s>H zk7omHgB>VoF|$P7Cr~zNKNnVQm+SpwYlDCE#!9rv4RfpS*EpP=f{y2FOLHm<|l)DD$~py>J6Qw?VoInwouHx9`hX zGlgyc&8wUK8#gYPl#A~zPT0j>YxZC_;OxY}2Fi`C+7Zl06L=diWvK}g-)9@y)_;4E z=l`-TMC2u`VZ(+o;+RbP$H?5+;l{o|Y_ZMk6y~r0*e24QDea13+dRK^t^5BkoAmIi z0$g_iE?yj#VW-xC&na;>o^5EE*ZZ^n+PoX@?-dzpB0W4p9JocCna!DO zb+qYhHx{|EO8-zmpGzFgmg8^XIe4yI?vogE)AESgZh>pzPq{(}H{xd)0KJuLV#`3#729L!blzH6O_1E^-_Sg2Gvi(0&we3zb0tyNM O0000 + + + + + + Tizen TV - Web Application + + + + + + + + + + + + diff --git a/tizen-example/js/main.js b/tizen-example/js/main.js new file mode 100644 index 0000000..ed3c8fd --- /dev/null +++ b/tizen-example/js/main.js @@ -0,0 +1,16 @@ +var DemoCMP = {}, + tileNavigation; + +DemoCMP.LoadCMP = function () { + tileNavigation = new Navigation(); + try { + console.log('Widget version:', window.tizen.application.getAppInfo().version); + console.log('Manufacturer:', window.tizen.systeminfo.getCapability('http://tizen.org/system/manufacturer')); + console.log('Model name:', window.tizen.systeminfo.getCapability('http://tizen.org/system/model_name')); + console.log('Platform:', window.tizen.systeminfo.getCapability('http://tizen.org/system/platform.name'), window.tizen.systeminfo.getCapability('http://tizen.org/feature/platform.version')); + } catch (e) { + console.log(e); + } +}; + +window.onload = DemoCMP.LoadCMP(); diff --git a/tizen-example/js/navigation.js b/tizen-example/js/navigation.js new file mode 100644 index 0000000..f8822bf --- /dev/null +++ b/tizen-example/js/navigation.js @@ -0,0 +1,92 @@ +function Navigation (options) { + options = options ? options : {}; + this.viewportModal = options.viewport || "[id^='sp_message_iframe_']"; + this.tvKey = { + KEY_ENTER: 13, // Enter + KEY_0: 48, // 0 + KEY_RETURN: 10009, // Back + KEY_EXIT: 10182, // Exit + }; + this.onLoad(); +} + +Navigation.prototype = { + onLoad: function () { + this.registerKey('0'); + this.bindEvents(); + }, + /** + * Returns the window object of an iframe from options + */ + getViewportWindow: function () { + const viewport = document.querySelector(this.viewportModal); + return !!viewport ? viewport.contentWindow : false; + }, + /** + * Returns the active element of a page, + * regardless of shadow root or iframe window. + * @returns {HTMLElement} + */ + getActiveElement: function ( element ) { + if (!element) {element = document.activeElement;} + const shadowRoot = element.shadowRoot; + const contentDocument = element.contentDocument; + if (shadowRoot && shadowRoot.activeElement) { + return this.getActiveElement(shadowRoot.activeElement); + } + if (contentDocument && contentDocument.activeElement) { + return this.getActiveElement(contentDocument.activeElement); + } + return element; + }, + /** + * Dispatch enter button event on an active DOM element + */ + triggerClick: function(){ + const activeElement = this.getActiveElement(); + var enterEvent = new Event('keydown', {bubbles: true, cancelable: true}); + enterEvent.keyCode = this.tvKey.KEY_ENTER; + if (activeElement.parentElement.className.split(' ').indexOf('categories') >= 0 ){ + enterEvent = new KeyboardEvent('keypress',{key: 'Enter', bubbles: true, charCode: 0, keyCode: this.tvKey.KEY_ENTER}); + } + activeElement.dispatchEvent(enterEvent); + }, + registerKey: function (keyName) { + window.tizen.tvinputdevice.registerKey(keyName); + }, + + unregisterKey: function (keyName) { + window.tizen.tvinputdevice.unregisterKey(keyName); + }, + /** + * Handles remotes key press event. + * Dispatch fired event to the iframe window. + */ + onKeyDown: function(event) { + const iframeWindow = tileNavigation.getViewportWindow(); + switch (event.keyCode) { + case tileNavigation.tvKey.KEY_ENTER: + if (!!iframeWindow) { + tileNavigation.triggerClick(); + } + break; + case tileNavigation.tvKey.KEY_EXIT: + window.tizen.application.getCurrentApplication().exit(); + break; + case tileNavigation.tvKey.KEY_0: + window.location.reload(); + break; + default: + if (!!iframeWindow){ + const evnt = new Event('keydown', {'bubbles': true, 'cancelable': true}); + evnt.currentTarget = event.currentTarget; + evnt.keyCode = event.keyCode; + iframeWindow.dispatchEvent(evnt); + } + break; + } + }, + bindEvents: function() { + window.addEventListener('keydown', this.onKeyDown); + } +}; diff --git a/tizen-example/tizen_guide.md b/tizen-example/tizen_guide.md new file mode 100644 index 0000000..57f859a --- /dev/null +++ b/tizen-example/tizen_guide.md @@ -0,0 +1,44 @@ +# Tizen Demo App + +Tizen Demo Web App that demonstrates ability to display integrated CMP + +## Requirements + +1. Tizen Studio + +## Import project + +If you already have Tizen Studio installed: + +1. Clone the repo to your workspace directory +2. In Tizen Studio click File > Import menu item +3. Choose the directory where you have just cloned the repo +4. Select project to import from the list + +## Running on the Samsung TV Simulator + +To run the application on the simulator: + +1. In the Project Explorer view, right-click the project and select Run As > Tizen Web Simulator Application (Samsung TV). + +## Useful links + +https://docs.tizen.org/application/web/get-started/overview/ +https://developer.samsung.com/smarttv/develop/getting-started/using-sdk/tv-simulator.html + +## Navigation class(navigation.js) + +Available methods: + +- `onLoad` runs on startup, trigger registerKey and bindEvents functions +- `getViewportWindow` get window object of an iframe +- `getActiveElement` get an active element of the document +- `triggerClick` handle enter button pressed event +- `registerKey` register a button of a remote control by key name +- `unregisterKey` unregister a button of a remote control by key name +- `onKeyDown` handle pressed keys of a remote control +- `bindEvents` add event listener from a remote control + +## Implementation + +Client-specific configurations should be added to the `index.html` file. See our [ReadMe](https://github.com/tom-win87/SP_HTML5_OTT/blob/main/README.md) for detailed information on how to customize the implementation. diff --git a/webOS-example/appinfo.json b/webOS-example/appinfo.json new file mode 100644 index 0000000..1d165a5 --- /dev/null +++ b/webOS-example/appinfo.json @@ -0,0 +1,11 @@ +{ + "vendor": "Sourcepoint", + "largeIcon": "largeIcon.png", + "icon": "icon.png", + "main": "index.html", + "id": "com.sourcepoint.app", + "title": "SourcepointCMP", + "type": "web", + "version": "0.0.3", + "disableBackHistoryAPI": true +} diff --git a/webOS-example/icon.png b/webOS-example/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..31627199f0f85634f6e3290b426a2b1cf3b52140 GIT binary patch literal 5570 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 QfB*mh07*qoM6N<$f~SVBX#fBK literal 0 HcmV?d00001 diff --git a/webOS-example/index.html b/webOS-example/index.html new file mode 100644 index 0000000..d19a749 --- /dev/null +++ b/webOS-example/index.html @@ -0,0 +1,223 @@ + + + + + + + WebOS Demo - Web Application + + + + + + + + + + + + + + diff --git a/webOS-example/js/events_handler.js b/webOS-example/js/events_handler.js new file mode 100644 index 0000000..7913acb --- /dev/null +++ b/webOS-example/js/events_handler.js @@ -0,0 +1,60 @@ +function EventsHandler (options) { + options = options ? options : {}; + this.viewportModal = options.viewport || "[id^='sp_message_iframe_']"; + this.tvKey = { + KEY_ENTER: 13, + }; + this.onLoad(); +} + +EventsHandler.prototype = { + onLoad: function () { + this.bindEvents(); + }, + getViewportWindow: function (retriesCounter) { + if (typeof(retriesCounter) === "undefined") { retriesCounter = 0; } + var that = this; + var viewport = document.querySelector(this.viewportModal); + retriesCounter = retriesCounter + 1; + if (retriesCounter <= 3) { + setTimeout(function () { + (viewport === null) ? that.getViewportWindow(retriesCounter) : viewport = viewport.contentWindow; + }, 1000); + } + return viewport; + }, + getActiveElement: function (element) { + if (typeof(element) === "undefined") { element = document.activeElement; } + const shadowRoot = element.shadowRoot; + const contentDocument = element.contentDocument; + if (shadowRoot && shadowRoot.activeElement) { + return this.getActiveElement(shadowRoot.activeElement); + } + if (contentDocument && contentDocument.activeElement) { + return this.getActiveElement(contentDocument.activeElement); + } + return element; + }, + triggerClick: function(activeElement){ + if (typeof (activeElement) === "undefined" ) { activeElement = this.getActiveElement(); } + var enterEvent = new Event('keydown', {bubbles: true, cancelable: true}); + enterEvent.keyCode = this.tvKey.KEY_ENTER; + if (activeElement.parentElement.className.split(' ').indexOf('categories') >= 0 ){ + enterEvent = new KeyboardEvent('keypress',{key: 'Enter', bubbles: true, charCode: 0, keyCode: this.tvKey.KEY_ENTER}); + } + if (activeElement.tagName === 'BUTTON' && activeElement.className.split(' ').indexOf('ott-switch') >=0){ + return; + } + activeElement.dispatchEvent(enterEvent); + }, + onClick: function(event){ + eventsHandler.triggerClick(); + }, + bindEvents: function() { + var that = this; + window.setTimeout(function(){ + var iframeWindow = (eventsHandler.getViewportWindow() && eventsHandler.getViewportWindow().contentDocument) || document; + iframeWindow.body.addEventListener('click', that.onClick); + }, 3000); + } +}; diff --git a/webOS-example/js/main.js b/webOS-example/js/main.js new file mode 100644 index 0000000..78a0155 --- /dev/null +++ b/webOS-example/js/main.js @@ -0,0 +1,2 @@ +var tileNavigation; +window.onload = function () { tileNavigation = new Navigation();}; diff --git a/webOS-example/js/navigation.js b/webOS-example/js/navigation.js new file mode 100644 index 0000000..1b551ba --- /dev/null +++ b/webOS-example/js/navigation.js @@ -0,0 +1,110 @@ +function Navigation (options) { + options = options ? options : {}; + this.viewportModal = options.viewport || "[id^='sp_message_iframe_']"; + this.tvKey = { + KEY_BACK_KEYBOARD: 8, // Back + KEY_ENTER: 13, // Enter 0x0D + KEY_BACK: 461, // Back 0x1CD + KEY_0: 48, // 0 + }; + this.onLoad(); +} + +Navigation.prototype = { + onLoad: function () { + try{ + webOS.fetchAppInfo(function (info) { + console.log('Widget version: ', info.version); + }, webOS.fetchAppRootPath() + 'appinfo.json'); + + webOS.deviceInfo(function (info) { + console.log('Model name:', info.modelName); + console.log('Platform:', info.sdkVersion); + }); + } catch (e) { + console.log('Something goes wrong on getting an application info'); + } + this.bindEvents(); + }, + /** + * Returns the window object of an iframe from options + */ + getViewportWindow: function (retriesCounter) { + if (typeof(retriesCounter) === "undefined") { retriesCounter = 0; } + var that = this; + var viewport = document.querySelector(this.viewportModal); + retriesCounter = retriesCounter + 1; + if (retriesCounter <= 3) { + setTimeout(function () { + (viewport === null) ? that.getViewportWindow(retriesCounter) : viewport = viewport.contentWindow; + }, 1000); + } + return viewport; + }, + /** + * Returns the active element of a page, + * regardless of shadow root or iframe window. + * @returns {HTMLElement} + */ + getActiveElement: function (element) { + if (typeof(element) === "undefined") { element = document.activeElement; } + const shadowRoot = element.shadowRoot; + const contentDocument = element.contentDocument; + if (shadowRoot && shadowRoot.activeElement) { + return this.getActiveElement(shadowRoot.activeElement); + } + if (contentDocument && contentDocument.activeElement) { + return this.getActiveElement(contentDocument.activeElement); + } + return element; + }, + getBackButton: function (){ + var iframeWindow = tileNavigation.getViewportWindow(), + backButtonCollection = iframeWindow.contentDocument.body.querySelectorAll('div.message-component.message-button'), + returnButtonCollection = iframeWindow.contentDocument.body.querySelectorAll('div.back-button.focusable'); + return !!backButtonCollection.length ? backButtonCollection[0] : !!returnButtonCollection.length ? returnButtonCollection[0] : null; + }, + /** + * Dispatch enter button event on an active DOM element + */ + triggerClick: function(activeElement){ + if (typeof (activeElement) === "undefined" ) { activeElement = this.getActiveElement(); } + var enterEvent = new Event('keydown', {bubbles: true, cancelable: true}); + enterEvent.keyCode = this.tvKey.KEY_ENTER; + if (activeElement.parentElement.className.split(' ').indexOf('categories') >= 0 ){ + enterEvent = new KeyboardEvent('keypress',{key: 'Enter', bubbles: true, charCode: 0, keyCode: this.tvKey.KEY_ENTER}); + } + if (activeElement.tagName === 'BUTTON' && activeElement.className.split(' ').indexOf('ott-switch') >=0){ + return; + } + activeElement.dispatchEvent(enterEvent); + }, + /** + * Handles remotes key press event. + * Dispatch fired event to the iframe window. + */ + onKeyDown: function(event) { + if (event.keyCode === tileNavigation.tvKey.KEY_BACK || event.keyCode === tileNavigation.tvKey.KEY_BACK_KEYBOARD) { + var backButton = tileNavigation.getBackButton(); + if (backButton){ + backButton.focus(); + tileNavigation.triggerClick(backButton); + } else { + webOS.platformBack(); + } + } + }, + onClick: function(event){ + tileNavigation.triggerClick(); + }, + bindEvents: function() { + var that = this; + window.setTimeout(function() { + var iframeWindow = tileNavigation.getViewportWindow(); + if (!!iframeWindow){ + iframeWindow.contentDocument.body.addEventListener('keydown', that.onKeyDown); + iframeWindow.contentDocument.body.addEventListener('click', that.onClick); + } + }, 3000); + } +}; diff --git a/webOS-example/largeIcon.png b/webOS-example/largeIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..9b3d43bb9a7739e23bd1010f035d218f25fab30c GIT binary patch literal 14871 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 0!==arguments[0]?arguments[0]:function(){},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},n=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(!this.cancelled){var i={};try{i=JSON.parse(n)}catch(e){i={errorCode:-1,errorText:n,returnValue:!1}}var o=i,u=o.errorCode,c=o.returnValue;u||!1===c?(i.returnValue=!1,r(i)):(i.returnValue=!0,e(i)),t(i),this.subscribe||this.cancel()}}},{key:"cancel",value:function(){this.cancelled=!0,null!==this.bridge&&(this.bridge.cancel(),this.bridge=null),this.ts&&c[this.ts]&&delete c[this.ts]}}])&&u(r.prototype,t),n&&u(r,n),e}(),s={BROWSER:"APP_BROWSER"},l=function(e){var r=e.id,t=void 0===r?"":r,n=e.params,i=void 0===n?{}:n,o=e.onSuccess,u=void 0===o?function(){}:o,c=e.onFailure,l=void 0===c?function(){}:c,d={id:t,params:i};s.BROWSER===t&&(d.params.target=i.target||"",d.params.fullMode=!0,d.id="com.webos.app.browser"),function(e){var r=e.parameters,t=e.onSuccess,n=e.onFailure;(new a).send({service:"luna://com.webos.applicationManager",method:"launch",parameters:r,onComplete:function(e){var r=e.returnValue,i=e.errorCode,o=e.errorText;return!0===r?t():n({errorCode:i,errorText:o})}})}({parameters:d,onSuccess:u,onFailure:l})},d=function(){var e={};if(window.PalmSystem&&""!==window.PalmSystem.launchParams)try{e=JSON.parse(window.PalmSystem.launchParams)}catch(e){console.error("JSON parsing error")}return e},f=function(){return window.PalmSystem&&window.PalmSystem.identifier?window.PalmSystem.identifier.split(" ")[0]:""};function v(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function p(e){for(var r=1;r0&&void 0!==arguments[0]?arguments[0]:function(){},r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};setTimeout(function(){return e(r)},0)},w=function(e){return e.state===y.LOADED&&""!==e.getClientId()},P=function(e,r){var t=r.errorCode,n=void 0===t?h.UNKNOWN_ERROR:t,i=r.errorText,o={errorCode:n,errorText:void 0===i?"Unknown error.":i};return e.setError(o),o},E={errorCode:h.CLIENT_NOT_LOADED,errorText:"DRM client is not loaded."},S=function(){function e(r){!function(e,r){if(!(e instanceof r))throw new TypeError("Cannot call a class as a function")}(this,e),this.clientId="",this.drmType=r,this.errorCode=h.NOT_ERROR,this.errorText="",this.state=y.UNLOADED}var r,t,n;return r=e,(t=[{key:"getClientId",value:function(){return this.clientId}},{key:"getDrmType",value:function(){return this.drmType}},{key:"getErrorCode",value:function(){return this.errorCode}},{key:"getErrorText",value:function(){return this.errorText}},{key:"setError",value:function(e){var r=e.errorCode,t=e.errorText;this.errorCode=r,this.errorText=t}},{key:"isLoaded",value:function(e){var r=this,t=e.onSuccess,n=void 0===t?function(){}:t,i=e.onFailure,o=void 0===i?function(){}:i;g({method:"isLoaded",parameters:{appId:f()},onComplete:function(e){if(!0===e.returnValue){if(r.clientId=e.clientId||"",r.state=e.loadStatus?y.LOADED:y.UNLOADED,!0===e.loadStatus&&e.drmType!==r.drmType){var t={errorCode:h.UNKNOWN_ERROR,errorText:"DRM types of set and loaded are not matched."};return o(P(r,t))}var i=p({},e);return delete i.returnValue,n(i)}return o(P(r,e))}})}},{key:"load",value:function(e){var r=this,t=e.onSuccess,n=void 0===t?function(){}:t,i=e.onFailure,o=void 0===i?function(){}:i;if(this.state!==y.LOADING&&this.state!==y.LOADED){var u={appId:f(),drmType:this.drmType};this.state=y.LOADING,g({method:"load",onComplete:function(e){return!0===e.returnValue?(r.clientId=e.clientId,r.state=y.LOADED,n({clientId:r.clientId})):o(P(r,e))},parameters:u})}else D(n,{isLoaded:!0,clientId:this.clientId})}},{key:"unload",value:function(e){var r=this,t=e.onSuccess,n=void 0===t?function(){}:t,i=e.onFailure,o=void 0===i?function(){}:i;if(w(this)){var u={clientId:this.clientId};this.state=y.UNLOADING,g({method:"unload",onComplete:function(e){return!0===e.returnValue?(r.clientId="",r.state=y.UNLOADED,n()):o(P(r,e))},parameters:u})}else D(o,P(this,E))}},{key:"getRightsError",value:function(e){var r=this,t=e.onSuccess,n=void 0===t?function(){}:t,i=e.onFailure,o=void 0===i?function(){}:i;w(this)?g({method:"getRightsError",parameters:{clientId:this.clientId,subscribe:!0},onComplete:function(e){if(!0===e.returnValue){var t=p({},e);return delete t.returnValue,n(t)}return o(P(r,e))}}):D(o,P(this,E))}},{key:"sendDrmMessage",value:function(e){var r=this,t=e.msg,n=void 0===t?"":t,i=e.onSuccess,o=void 0===i?function(){}:i,u=e.onFailure,c=void 0===u?function(){}:u;if(w(this)){var a=function(e){var r="",t="";switch(e){case O.PLAYREADY:r="application/vnd.ms-playready.initiator+xml",t="urn:dvb:casystemid:19219";break;case O.WIDEVINE:r="application/widevine+xml",t="urn:dvb:casystemid:19156"}return{msgType:r,drmSystemId:t}}(this.drmType),s=p({clientId:this.clientId,msg:n},a);g({method:"sendDrmMessage",onComplete:function(e){if(!0===e.returnValue){var t=p({},e);return delete t.returnValue,o(t)}return c(P(r,e))},parameters:s})}else D(c,P(this,E))}}])&&m(r.prototype,t),n&&m(r,n),e}(),I={Error:h,Type:O},T=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return""===e?null:new S(e)};function N(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);r&&(n=n.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,n)}return t}function R(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}var j=function(e){var r=e.service,t=e.subscribe,n=e.onSuccess,i=e.onFailure;(new a).send({service:r,method:"getStatus",parameters:{subscribe:t},onComplete:function(e){var r=function(e){for(var r=1;r-1&&(c="palm"),j({service:"luna://com.".concat(c,".connectionmanager"),subscribe:u,onSuccess:t,onFailure:i})}},A=function(e){var r=e.onSuccess,t=void 0===r?function(){}:r,n=e.onFailure,i=void 0===n?function(){}:n;-1!==navigator.userAgent.indexOf("Chrome")?(new a).send({service:"luna://com.webos.service.sm",method:"deviceid/getIDs",parameters:{idType:["LGUDID"]},onComplete:function(e){if(!0!==e.returnValue)i({errorCode:e.errorCode,errorText:e.errorText});else{var r=e.idList.filter(function(e){return"LGUDID"===e.idType})[0].idValue;t({id:r})}}}):setTimeout(function(){return i({errorCode:"ERROR.000",errorText:"Not supported."})},0)};t.d(r,"APP",function(){return s}),t.d(r,"connection",function(){return C}),t.d(r,"DRM",function(){return I}),t.d(r,"drmAgent",function(){return T}),t.d(r,"launch",function(){return l}),t.d(r,"launchParams",function(){return d}),t.d(r,"LGUDID",function(){return A})}]); \ No newline at end of file diff --git a/webOS-example/webOSTVjs-1.2.0/webOSTV.js b/webOS-example/webOSTVjs-1.2.0/webOSTV.js new file mode 100644 index 0000000..40c0d86 --- /dev/null +++ b/webOS-example/webOSTVjs-1.2.0/webOSTV.js @@ -0,0 +1 @@ +window.webOS=function(e){var n={};function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}return r.m=e,r.c=n,r.d=function(e,n,t){r.o(e,n)||Object.defineProperty(e,n,{enumerable:!0,get:t})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,n){if(1&n&&(e=r(e)),8&n)return e;if(4&n&&"object"==typeof e&&e&&e.__esModule)return e;var t=Object.create(null);if(r.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:e}),2&n&&"string"!=typeof e)for(var o in e)r.d(t,o,function(n){return e[n]}.bind(null,o));return t},r.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(n,"a",n),n},r.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},r.p="",r(r.s=0)}([function(e,n,r){"use strict";r.r(n);var t=function(){return window.PalmSystem&&window.PalmSystem.identifier?window.PalmSystem.identifier.split(" ")[0]:""},o={},i=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)},s=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 r=e.match(new RegExp(".*://[^#]*/"));return r?r[0]:""},a=function(){if(window.PalmSystem&&window.PalmSystem.platformBack)return window.PalmSystem.platformBack()};function c(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,t)}return r}function u(e){for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:function(){},n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:function(){},t=arguments.length>3&&void 0!==arguments[3]?arguments[3]:"";if(!this.cancelled){var o={};try{o=JSON.parse(t)}catch(e){o={errorCode:-1,errorText:t,returnValue:!1}}var i=o,s=i.errorCode,a=i.returnValue;s||!1===a?(o.returnValue=!1,n(o)):(o.returnValue=!0,e(o)),r(o),this.subscribe||this.cancel()}}},{key:"cancel",value:function(){this.cancelled=!0,null!==this.bridge&&(this.bridge.cancel(),this.bridge=null),this.ts&&d[this.ts]&&delete d[this.ts]}}])&&f(n.prototype,r),t&&f(n,t),e}(),w={request:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=u({service:e},n);return(new m).send(r)}};function v(e){return(v="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})(e)}var y={};if("object"===("undefined"==typeof window?"undefined":v(window))&&window.PalmSystem){if(window.navigator.userAgent.indexOf("SmartWatch")>-1)y.watch=!0;else if(window.navigator.userAgent.indexOf("SmartTV")>-1||window.navigator.userAgent.indexOf("Large Screen")>-1)y.tv=!0;else{try{var p=JSON.parse(window.PalmSystem.deviceInfo||"{}");if(p.platformVersionMajor&&p.platformVersionMinor){var h=Number(p.platformVersionMajor),b=Number(p.platformVersionMinor);h<3||3===h&&b<=0?y.legacy=!0:y.open=!0}}catch(e){y.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 g=window.navigator.userAgent.indexOf("Chr0me")>-1?window.navigator.userAgent.indexOf("Chr0me"):window.navigator.userAgent.indexOf("Chrome"),S=window.navigator.userAgent.slice(g).indexOf(" ");window.navigator.userAgent.slice(g+7,g+S).split(".")[0]>=68?y.jcl=!0:y.jcl=!1}else y.jcl=!1}else y.unknown=!0;var O=y,V={},P=function(e){if(0===Object.keys(V).length){try{var n=JSON.parse(window.PalmSystem.deviceInfo);V.modelName=n.modelName,V.version=n.platformVersion,V.versionMajor=n.platformVersionMajor,V.versionMinor=n.platformVersionMinor,V.versionDot=n.platformVersionDot,V.sdkVersion=n.platformVersion,V.screenWidth=n.screenWidth,V.screenHeight=n.screenHeight}catch(e){V.modelName="webOS Device"}V.screenHeight=V.screenHeight||window.screen.height,V.screenWidth=V.screenWidth||window.screen.width,O.tv&&(O.jcl?(new m).send({service:"luna://com.webos.service.config",method:"getConfigs",parameters:{configNames:["tv.nyx.firmwareVersion","tv.nyx.platformVersion","tv.hw.panelResolution","tv.model.modelname"]},onSuccess:function(n){if(V.modelName=n.configs["tv.model.modelname"]||V.modelName,V.sdkVersion=n.configs["tv.nyx.platformVersion"]||V.sdkVersion,V.uhd="UD"===n.configs["tv.hw.panelResolution"],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"]){V.version=n.configs["tv.nyx.firmwareVersion"];for(var r=V.version.split("."),t=["versionMajor","versionMinor","versionDot"],o=0;o Import` menu item +3. As source choose `Git`, then `Projects from Git > Existing local repository` +4. Choose the repo from step 1 + +## Running on the WebOS Emulator + +To run the application on the emulator: + +1. Turn on an Emulator machine +2. In the IDE Targe manager menu connect to the emulator machine +3. In the Project Explorer view of IDE, right-click the project and select `Run As / Debug As > webOS Application` + +## Useful links + +https://webostv.developer.lge.com/sdk/installation/ +https://webostv.developer.lge.com/sdk/tools/emulator/introduction-emulator/ +https://webostv.developer.lge.com/api/web-api/supported-standard-web-api/ + +## Implementation notes + +Client-specific configurations should be added to the `index.html` file. See our [ReadMe](https://github.com/tom-win87/SP_HTML5_OTT/blob/main/README.md) for detailed information on how to customize the implementation.