From e59affcea0879aa7a3d2c277fdc6ae3256698b0d Mon Sep 17 00:00:00 2001 From: Aar-if Date: Wed, 21 Feb 2024 18:29:42 +0530 Subject: [PATCH 1/5] Player, Telemetry and api changes --- .../src/components/SunbirdPlayer.js | 22 +- .../services/Telemetry/telemetryFactory.js | 17 +- .../services/subjectListRegistryService.js | 2 + packages/players/pdf/index.html | 1 + .../quml/assets/styles/quml-carousel.css | 240 + packages/players/quml/carousel.css | 0 packages/players/quml/demoData.js | 1 + packages/players/quml/index copy.html | 686 - packages/players/quml/index.html | 13 +- packages/players/quml/styles.css | 495 +- .../players/quml/sunbird-quml-player.min.js | 205811 ++++++--------- packages/players/quml/theme.css | 258 + .../studentprogram/src/pages/lessonList.js | 5 +- 13 files changed, 87429 insertions(+), 120122 deletions(-) create mode 100644 packages/players/quml/assets/styles/quml-carousel.css delete mode 100644 packages/players/quml/carousel.css delete mode 100644 packages/players/quml/index copy.html create mode 100644 packages/players/quml/theme.css diff --git a/packages/common-lib/src/components/SunbirdPlayer.js b/packages/common-lib/src/components/SunbirdPlayer.js index be3444f0..bf573eae 100644 --- a/packages/common-lib/src/components/SunbirdPlayer.js +++ b/packages/common-lib/src/components/SunbirdPlayer.js @@ -12,6 +12,15 @@ const SunbirdPlayer = ({ ...props }) => { const { mimeType } = props + // console.log('🚀 ~ mimeType:', mimeType); + + const typeMatch = mimeType.match(/\/(.+)$/) + const fileType = typeMatch ? typeMatch[1] : null + + localStorage.setItem('contentType', fileType) + + console.log(fileType) + let trackData = [] const [url, setUrl] = React.useState() React.useEffect(() => { @@ -54,6 +63,17 @@ const SunbirdPlayer = ({ const handleEvent = (event) => { const data = event?.data + + // console.log( + // '🚀 ~ handleEvent ~ Total Duration:', + // event?.data.edata.duration + // ) + let milliseconds = event?.data.edata.duration + let seconds = milliseconds / 1000 + + console.log(seconds) + localStorage.setItem('totalDuration', seconds) + let telemetry = {} if (data && typeof data?.data === 'string') { telemetry = JSON.parse(data.data) @@ -99,7 +119,7 @@ const SunbirdPlayer = ({ } ] } - // console.log(telemetry, trackData) + console.log(telemetry, trackData) } else if ( telemetry?.eid === 'INTERACT' && mimeType === 'video/x-youtube' diff --git a/packages/common-lib/src/services/Telemetry/telemetryFactory.js b/packages/common-lib/src/services/Telemetry/telemetryFactory.js index 4792971d..770e8d7d 100644 --- a/packages/common-lib/src/services/Telemetry/telemetryFactory.js +++ b/packages/common-lib/src/services/Telemetry/telemetryFactory.js @@ -17,7 +17,7 @@ const telemetryConfig = { did: 'did', authtoken: '', studentid: 'student-id', - uid: 'user-id', + uid: localStorage.getItem('id'), sid: 'session-id', batchsize: 1, mode: '', @@ -41,6 +41,8 @@ export const telemetryFactory = { interact: (interactEventInput) => { const eventData = getEventData(interactEventInput) + + console.log('check interact eventData', eventData) if (CsTelemetryModule.instance.isInitialised) { CsTelemetryModule.instance.telemetryService.raiseInteractTelemetry({ options: eventData.options, @@ -53,7 +55,7 @@ export const telemetryFactory = { impression: (impressionEventInput) => { const eventData = getEventData(impressionEventInput) - console.log('check eventData', eventData) + console.log('check impression eventData', eventData) if (CsTelemetryModule.instance.isInitialised) { CsTelemetryModule.instance.telemetryService.raiseImpressionTelemetry({ options: eventData.options, @@ -65,7 +67,7 @@ export const telemetryFactory = { // This API is used to log telemetry of assessments that have occured when the user is viewing content assess: (assessEventInput) => { const eventData = getEventData(assessEventInput) - + if (CsTelemetryModule.instance.isInitialised) { CsTelemetryModule.instance.telemetryService.raiseAssesTelemetry({ options: eventData.options, @@ -78,10 +80,9 @@ export const telemetryFactory = { response: (responseEventInput) => { const eventData = getEventData(responseEventInput) - + if (CsTelemetryModule.instance.isInitialised) { CsTelemetryModule.instance.telemetryService.raiseResponseTelemetry({ - options: eventData.options, edata: eventData.edata }) @@ -128,13 +129,15 @@ export const telemetryFactory = { } function getEventData(eventInput) { + const timestamp = Date.now() const event = { edata: eventInput.edata, options: { context: getEventContext(eventInput), object: getEventObject(eventInput), tags: [] - } + }, + ets: timestamp } return event } @@ -159,7 +162,7 @@ function getEventContext(eventInput) { pdata: eventInput.context.pdata || telemetryConfig.pdata, env: eventInput.context.env || telemetryConfig.env, sid: eventInput.sid || telemetryConfig.sid, - uid: 'user-id', //user id + uid: localStorage.getItem('id'), //user id cdata: eventInput.context.cdata || [] } if (telemetryConfig.sid) { diff --git a/packages/common-lib/src/services/subjectListRegistryService.js b/packages/common-lib/src/services/subjectListRegistryService.js index 65c44c95..691b7763 100644 --- a/packages/common-lib/src/services/subjectListRegistryService.js +++ b/packages/common-lib/src/services/subjectListRegistryService.js @@ -21,6 +21,8 @@ export const getProgramId = async (props) => { { headers } ) if (programID?.data?.data) { + console.log(programID?.data?.data[0]?.programId) + localStorage.setItem('programID', programID?.data?.data[0]?.programId) return programID?.data?.data[0] } } diff --git a/packages/players/pdf/index.html b/packages/players/pdf/index.html index c53fa1ac..0874d973 100644 --- a/packages/players/pdf/index.html +++ b/packages/players/pdf/index.html @@ -130,6 +130,7 @@ pdfElement.addEventListener("playerEvent", (event) => { console.log("On playerEvent", event); window?.parent?.postMessage(event?.detail, "*"); + window?.parent?.postMessage(event, "*"); }); diff --git a/packages/players/quml/assets/styles/quml-carousel.css b/packages/players/quml/assets/styles/quml-carousel.css new file mode 100644 index 00000000..da48c31d --- /dev/null +++ b/packages/players/quml/assets/styles/quml-carousel.css @@ -0,0 +1,240 @@ +html, body { + height: 100%; + } + .carousel { + position: relative; + } + + .carousel-inner { + position: relative; + width: 100%; + overflow: hidden; + } + + .carousel-item { + position: relative; + display: none; + -ms-flex-align: center; + align-items: center; + width: 100%; + transition: -webkit-transform 0.6s ease; + transition: transform 0.6s ease; + transition: transform 0.6s ease, -webkit-transform 0.6s ease; + -webkit-backface-visibility: hidden; + backface-visibility: hidden; + -webkit-perspective: 1000px; + perspective: 1000px; + } + + @media screen and (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } + } + + .carousel-item.active, + .carousel-item-next, + .carousel-item-prev { + display: block; + } + + .carousel-item-next, + .carousel-item-prev { + position: absolute; + top: 0; + } + + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next.carousel-item-left, + .carousel-item-prev.carousel-item-right { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + } + + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translateX(100%); + transform: translateX(100%); + } + + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-next, + .active.carousel-item-right { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + } + + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translateX(-100%); + transform: translateX(-100%); + } + + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-item-prev, + .active.carousel-item-left { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + } + + .carousel-fade .carousel-item { + opacity: 0; + transition-duration: .6s; + transition-property: opacity; + } + + .carousel-fade .carousel-item.active, + .carousel-fade .carousel-item-next.carousel-item-left, + .carousel-fade .carousel-item-prev.carousel-item-right { + opacity: 1; + } + + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + opacity: 0; + } + + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active, + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + @supports ((-webkit-transform-style: preserve-3d) or (transform-style: preserve-3d)) { + .carousel-fade .carousel-item-next, + .carousel-fade .carousel-item-prev, + .carousel-fade .carousel-item.active, + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-prev { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + } + + .carousel-control-prev, + .carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + display: -ms-flexbox; + display: flex; + -ms-flex-align: center; + align-items: center; + -ms-flex-pack: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + } + + .carousel-control-prev:hover, .carousel-control-prev:focus, + .carousel-control-next:hover, + .carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: .9; + } + + .carousel-control-prev { + left: 0; + } + + .carousel-control-next { + right: 0; + } + + .carousel-control-prev-icon, + .carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: transparent no-repeat center center; + background-size: 100% 100%; + } + + .carousel-control-prev-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3E%3C/svg%3E"); + } + + .carousel-control-next-icon { + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3E%3C/svg%3E"); + } + + .carousel-indicators { + position: absolute; + right: 0; + bottom: 10px; + left: 0; + z-index: 15; + display: -ms-flexbox; + display: flex; + -ms-flex-pack: center; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; + } + + .carousel-indicators li { + position: relative; + -ms-flex: 0 1 auto; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: rgba(255, 255, 255, 0.5); + } + + .carousel-indicators li::before { + position: absolute; + top: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; + } + + .carousel-indicators li::after { + position: absolute; + bottom: -10px; + left: 0; + display: inline-block; + width: 100%; + height: 10px; + content: ""; + } + + .carousel-indicators .active { + background-color: #fff; + } + + .carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; + } \ No newline at end of file diff --git a/packages/players/quml/carousel.css b/packages/players/quml/carousel.css deleted file mode 100644 index e69de29b..00000000 diff --git a/packages/players/quml/demoData.js b/packages/players/quml/demoData.js index dee93ace..4d496053 100644 --- a/packages/players/quml/demoData.js +++ b/packages/players/quml/demoData.js @@ -246,6 +246,7 @@ const sectionContent = { }, pkgVersion: 1, }; + let metadata = window.name ? JSON.parse(window.name) : sectionContent; const playerConfig = { context: { diff --git a/packages/players/quml/index copy.html b/packages/players/quml/index copy.html deleted file mode 100644 index 9be51500..00000000 --- a/packages/players/quml/index copy.html +++ /dev/null @@ -1,686 +0,0 @@ - - - - - - - QUML Player web component demo - - - - - - -
- - - - - - diff --git a/packages/players/quml/index.html b/packages/players/quml/index.html index d5ea2c47..d912e303 100644 --- a/packages/players/quml/index.html +++ b/packages/players/quml/index.html @@ -5,6 +5,8 @@ QUML Player web component demo + +