@clickview/lite 0.52.3-dev.0 → 0.52.3-dev.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{1760-lite-d230b51c8b.chunk.css → 1019-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{6094-lite-d230b51c8b.chunk.css → 2548-lite-402889ede4.chunk.css} +2 -1
- package/dist/css/{1867-lite-991b6e8255.chunk.css → 3922-lite-e22262b911.chunk.css} +2 -1
- package/dist/css/{6546-lite-991b6e8255.chunk.css → 8478-lite-e22262b911.chunk.css} +2 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1760-33f1791560-lite.chunk.js → 1019-8fc84c7c2e-lite.chunk.js} +2 -2
- package/dist/scripts/{1760-33f1791560-lite.chunk.js.map → 1019-8fc84c7c2e-lite.chunk.js.map} +1 -1
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js +2 -0
- package/dist/scripts/1076-10e5ee6c22-lite.chunk.js.map +1 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js +2 -0
- package/dist/scripts/1169-9b1c04fd85-lite.chunk.js.map +1 -0
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js → 1379-6f35e2e9bb-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-082bbab71a-lite.chunk.js.map → 1379-6f35e2e9bb-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js → 2548-b81ae38f1f-lite.chunk.js} +2 -2
- package/dist/scripts/{6094-24c430efb3-lite.chunk.js.map → 2548-b81ae38f1f-lite.chunk.js.map} +1 -1
- package/dist/scripts/3922-d40b0ce5aa-lite.chunk.js +2 -0
- package/dist/scripts/{6546-faa6f93a0e-lite.chunk.js.map → 3922-d40b0ce5aa-lite.chunk.js.map} +1 -1
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js → 624-575b07d922-lite.chunk.js} +3 -3
- package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.map → 624-575b07d922-lite.chunk.js.map} +1 -1
- package/dist/scripts/8478-0292f02489-lite.chunk.js +2 -0
- package/dist/scripts/{1867-260ef9f8c2-lite.chunk.js.map → 8478-0292f02489-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js → 9395-4cf6f3948e-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-90b87097fa-lite.chunk.js.map → 9395-4cf6f3948e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js → 953-fd31f9f016-lite.chunk.js} +3 -3
- package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.map → 953-fd31f9f016-lite.chunk.js.map} +1 -1
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js +3 -0
- package/dist/scripts/9620-95e6cc7b2b-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-724fc2e388.min.js → bundle-fcc536bb54.min.js} +3 -3
- package/dist/scripts/{bundle-724fc2e388.min.js.map → bundle-fcc536bb54.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1169-534a29a204-lite.chunk.js +0 -2
- package/dist/scripts/1169-534a29a204-lite.chunk.js.map +0 -1
- package/dist/scripts/1867-260ef9f8c2-lite.chunk.js +0 -2
- package/dist/scripts/6546-faa6f93a0e-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js +0 -2
- package/dist/scripts/6587-ba8e36be0b-lite.chunk.js.map +0 -1
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js +0 -3
- package/dist/scripts/9620-f1d717b02b-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1379-082bbab71a-lite.chunk.js.LICENSE.txt → 1379-6f35e2e9bb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-7ab5fb3f3b-lite.chunk.js.LICENSE.txt → 624-575b07d922-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-90b87097fa-lite.chunk.js.LICENSE.txt → 9395-4cf6f3948e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-cbc7f0571e-lite.chunk.js.LICENSE.txt → 953-fd31f9f016-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9620-f1d717b02b-lite.chunk.js.LICENSE.txt → 9620-95e6cc7b2b-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-724fc2e388.min.js.LICENSE.txt → bundle-fcc536bb54.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1169],{1353:(e,t,n)=>{n.d(t,{$:()=>o});var a=n(32735),r=n(11607),i=n(54610),c=n(67453),l=n(22161);function o(e){var t=e.data;return a.createElement(r.L,{key:t.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ".concat(l.Z.tag," ").concat(e.selected?l.Z.selected:""),onClick:function(){return e.onChangeCurriculum(t.id.toString())}},a.createElement("div",{className:"bg-white ".concat(l.Z.cover," rounded-circle border")},a.createElement("img",{src:c.j.createUrl(t.cover.url,{size:i.h2.Small}),alt:t.name,className:"rounded-circle"})),a.createElement("div",{className:"ms-2"},t.name))}},38496:(e,t,n)=>{n.d(t,{p:()=>u});var a=n(32735),r=n(23481),i=n(23232),c=n(83345),l="shared.curriculumLinks",o=r.T.encloseNamespace(l);function u(e){return a.createElement(i.u,{className:"pt-3"},a.createElement(i.u.Image,{src:e.emptyStateUrl,altText:o("emptyInfo"),size:"small"}),a.createElement(i.u.Heading,null,a.createElement(c.x,{namespace:l,phrase:"emptyHeading"})),a.createElement(i.u.Info,null,a.createElement(c.x,{namespace:l,phrase:"emptyInfo"})))}},44599:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(32735);var r=function(){return a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ".concat("vDcrq")}),a.createElement("div",null,a.createElement("div",{className:"partial-loading-background mb-1 ".concat("GXhoW")}),a.createElement("div",{className:"mb-2 d-flex"},a.createElement("div",{className:"me-1 align-self-start ".concat("goKaS")},a.createElement("div",{className:"partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100"})),a.createElement("div",{className:"partial-loading-background ".concat("vFew6")}))))};function i(){return a.createElement("div",null,a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",{className:"mb-3"},a.createElement(r,null)),a.createElement("div",null,a.createElement(r,null)))}},34223:(e,t,n)=>{n.d(t,{Y:()=>y});var a=n(32735),r=n(38496),i=n(44599),c=n(83345),l=n(85597);const o={curriculumSubject:"i4D3h",curriculumSet:"WCdf9",areaLeafSet:"o8H8s",closeButton:"McsPs",leafDescriptionOnly:"xmEEo"};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 s(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=u(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=u(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var m=/(.*)\s\((.*)?\)/i,v="shared.curriculumLinks",p="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold";function f(e){function t(){var t=p+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var n=a.useRef();return a.useEffect((function(){if(n.current){var t=n.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[n.current]),a.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},a.createElement(c.x,{namespace:v,phrase:"noCode"}))),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?a.createElement(a.Fragment,null,a.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},a.createElement("h5",{ref:n,className:t()},e.leaf.name)),a.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):a.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function g(e){var t,n,r,i={},c=!1;function u(e){var t="mb-2";return e.name||c?t:t+" ms-4 "+o.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[l.k.Area].map((function(e){return e.name})).join(" - ");i[t]?e[l.k.Leaf].forEach((function(e){i[t].push(e),e.name&&(c=!0)})):i[t]=e[l.k.Leaf]})),a.createElement(a.Fragment,null,a.createElement("h3",{className:"".concat(p," text-white bg-dark-blue fw-normal me-1 mb-2")},(t=e.linkSet[l.k.Audience].name,n=e.linkSet[l.k.Subject].name,(r=t.match(m))?"".concat(r[1]," • ").concat(r[2]," • ").concat(n):"".concat(t," • ").concat(n))),a.createElement("div",{className:"me-2 ".concat(o.curriculumSubject)},Object.keys(i).map((function(t,n){return a.createElement("div",{key:n,className:o.areaLeafSet},t&&a.createElement("h4",{className:"mb-1 font-size-normal"},t),a.createElement("ul",{className:"list-unstyled"},i[t].map((function(t){return a.createElement("li",{key:t.id,className:u(t)},a.createElement(f,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:c}))}))))}))))}function y(e){var t,n,c,u=(n=a.useState(0),c=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw r}}return l}}(n,c)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(n,c)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),m=u[0],v=u[1];function p(e){v((function(t){return t>=e?t:e}))}var f=a.useMemo((function(){var t={};return e.curriculumLinks.forEach((function(e){var n=null,a=null,r=[],i=[];e.forEach((function(e){switch(e.type){case l.k.Subject:n=e;break;case l.k.Audience:a=e;break;case l.k.Area:r.push(e);break;case l.k.Leaf:i.push(e)}}));var c="".concat(n.id,":").concat(a.id);t[c]?t[c].areasAndLeaves.push(s(s({},l.k.Area,r),l.k.Leaf,i)):t[c]=s(s(s({},l.k.Subject,n),l.k.Audience,a),"areasAndLeaves",[s(s({},l.k.Area,r),l.k.Leaf,i)])})),t}),[e.curriculumLinks]);return e.curriculumLinks?(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)?a.createElement("ul",{className:"list-unstyled m-0"},Object.keys(f).map((function(e,t){return a.createElement("li",{key:"linkset-".concat(t),className:o.curriculumSet},a.createElement(g,{linkSet:f[e],trySetMaxCodeWidth:p,codeWidth:m}))}))):a.createElement(r.p,{emptyStateUrl:e.emptyStateUrl}):a.createElement(i.Z,null)}},22283:(e,t,n)=>{n.d(t,{P:()=>l});var a=n(32735),r=n(1353),i=n(63112),c=n(65163);function l(e){var t,n,l;return a.createElement(c.eb,{collection:(null===(t=e.selectedCurriculum)||void 0===t?void 0:t.id)?e.curriculums.nonEmptyCurriculums:null,childClassName:"flex-shrink-0",childComponent:function(t){var n,i;return a.createElement(r.$,Object.assign({},t,{selected:(null===(i=null===(n=e.selectedCurriculum)||void 0===n?void 0:n.id)||void 0===i?void 0:i.toString())===t.data.id.toString(),onChangeCurriculum:e.onChangeCurriculum}))},partialLoadingComponent:function(){return a.createElement(i.o,null)},widgetDataDeps:[null===(l=null===(n=e.selectedCurriculum)||void 0===n?void 0:n.id)||void 0===l?void 0:l.toString(),e.onChangeCurriculum],noNegativePadding:e.noNegativePadding})}},63112:(e,t,n)=>{n.d(t,{o:()=>i});var a=n(32735),r=n(91807),i=a.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(r.Z.partialTag);return a.createElement("div",{className:"mt-1"},a.createElement("span",{className:n}," "))}))},65163:(e,t,n)=>{n.d(t,{QL:()=>a.Q,eb:()=>a.e});var a=n(16450);n(14244)},85597:(e,t,n)=>{var a;n.d(t,{k:()=>a}),function(e){e.Subject="CurriculumSubject",e.Audience="CurriculumAudience",e.Area="CurriculumArea",e.Leaf="CurriculumLeaf"}(a||(a={}))},61169:(e,t,n)=>{n.d(t,{R:()=>q});var a=n(32735),r=n(5640),i=n(42648),c=n(23481),l=n(75896),o=n(49985),u=n(65858),s=n(44599),d=n(83345),m=n(69883),v=n(59598),p=n(34223),f=n(22283);function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var y="shared.curriculumLinks",h=c.T.encloseNamespace(y);function E(e){var t,n,r=e.curriculums,c=r.hasLoaded,E=r.activeCurriculum,b=r.availableCurriculums,S=r.curriculumLinks,k=r.updateCurriculum,C=r.customerHasCurriculumLinks,I=(t=a.useState(),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,c,l=[],o=!0,u=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);o=!0);}catch(e){u=!0,r=e}finally{try{if(!o&&null!=n.return&&(c=n.return(),Object(c)!==c))return}finally{if(u)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?g(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),A=I[0],L=I[1],N=(0,m.Z)();return a.useEffect((function(){c&&(A||L(null!=E?E:l.m.first(b)))}),[null==E?void 0:E.id,c]),e.canViewCurriculumLinks&&C?a.createElement("section",{id:v.K.CurriculumLinks,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(v.K.CurriculumLinks,t)},className:"play-page-section"},a.createElement("h2",{className:"h4 me-2 h-100"},a.createElement(d.x,{namespace:y,phrase:"heading"})),a.createElement("div",{className:"mb-2"},a.createElement(f.P,{curriculums:e.curriculums,selectedCurriculum:A,onChangeCurriculum:function(t){var n,a,r=b.find((function(e){return e.id.toString()===t}));(null==r?void 0:r.id)&&(null===(n=null==A?void 0:A.id)||void 0===n?void 0:n.toString())!==(null===(a=null==r?void 0:r.id)||void 0===a?void 0:a.toString())&&(L(r),k(r,(function(){o.k.logUserAction({id:r.id,name:r.id,description:r.description,videoId:e.video.id,videoName:e.video.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.PlayPage})}),(function(){L(A),N.error(h("updateFailed"))})))}})),a.createElement("div",{className:"rounded border position-relative"},a.createElement(i.$B,{autoHeight:!0,autoHeightMax:e.height},a.createElement("div",{className:"p-3"},c?a.createElement(p.Y,{curriculumLinks:S,emptyStateUrl:e.emptyStateUrl}):a.createElement(s.Z,null))))):a.createElement(a.Fragment,null)}var b=n(12059),S=n(51184),k=n(64921),C=n(95812),I=n(53709),A=n(40178),L=n(71063),N=n(10439),x=n(35429),w=n(4594),T=n(16714),R=n(22902),j=n(65332),O=n(76196),P=n(31908),U=n(26492),V=n(9465),M=n(91479),F=n(99092),G=n(47938),W=n(81024),_=n(78166),D=n(99742),H=n(14070),Z=n(97291),B=n(22490),K=n(63010),Y=n(14476),$=n(53256);const z={main:"xSI0l",expandedToc:"j5FCv"};var Q="shared.play";function q(e){var t,n,i,c,l,o,u,s,m=(0,x.g)(),p=(0,R.T)().hasPermissions,f=P.M.getCanBeConsumed(e.video).canConsume,g=(0,K.Q)(e.tableOfContentsId),y=g.tableOfContentsActiveId,h=g.setTableOfContentsActiveId,q=g.controlledId,X=g.setControlledId,J=g.tableOfContentsExpanded,ee=g.onToggleTableOfContents,te=(0,S.Wp)(e.video)&&e.featureAccess.canViewGlance,ne=(0,Y.i)(te),ae=ne.headingRef,re=ne.headingElements,ie=re.map((function(t){var n;return{id:t.id,name:$.d.getSectionHeading(t.id,{clips:e.clips,interactives:e.interactives,resources:null===(n=e.video.resources)||void 0===n?void 0:n.data})}})),ce=P.M.isVideoTypeArchived(e.video),le=p(T.C.StudentExperience);(0,j.D)({setActiveId:h,headingElements:re,controlledId:q,setControlledId:X}),(0,O.P)(re,q);var oe=a.useRef(!1),ue=(0,F.lU)();function se(){var e,t,n,a;oe.current=!(null===(t=null===(e=null==m?void 0:m.playerRef)||void 0===e?void 0:e.current)||void 0===t?void 0:t.isPaused()),null===(a=null===(n=null==m?void 0:m.playerRef)||void 0===n?void 0:n.current)||void 0===a||a.pause()}function de(){var e,t;oe.current&&(null===(t=null===(e=null==m?void 0:m.playerRef)||void 0===e?void 0:e.current)||void 0===t||t.play())}var me="picture-in-picture"===m.mode||e.featureAccess.canViewPublicLayout;return a.createElement(d.D.Provider,{value:Q},a.createElement("div",{className:"px-4 play-page-sections-container"},a.createElement("main",{className:"".concat(z.main," ").concat(e.shouldShowSideTableOfContents&&J?z.expandedToc:e.shouldShowSideTableOfContents&&!J?"pe-4":void 0)},a.createElement(G.W,{restrictions:e.video._restrictions,yearGroups:e.yearGroups,objectId:e.video.id,objectTypeId:w.E.Video,canManageVideoAccess:e.canManageVideoAccess}),ce&&a.createElement(U.T,{typeId:e.video.typeId,hasStudentExperience:le}),a.createElement("section",{id:v.K.Video,className:"mb-2 ".concat(L.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==ae?void 0:ae.current)&&ae.current.set(v.K.Video,e)}},f&&a.createElement(N.r,{key:e.video.id,objectId:e.video.id,objectTypeId:e.video.typeId,shareId:e.shareId,context:null===(t=e.params)||void 0===t?void 0:t.context,contextId:null===(n=e.params)||void 0===n?void 0:n.contextId,playNext:null===(i=e.params)||void 0===i?void 0:i.playNext,moviesAndTv:null===(c=e.params)||void 0===c?void 0:c.mtv,startTime:null!==(o=null===(l=e.params)||void 0===l?void 0:l.t)&&void 0!==o?o:null===(u=e.params)||void 0===u?void 0:u.startTime,endTime:null===(s=e.params)||void 0===s?void 0:s.endTime,mode:"default",location:"play-page"}),a.createElement("div",{className:me?"":"d-none"},a.createElement(W.S,{video:e.video,appLink:{application:Z.O.SIGN_UP,action:H.e.SignUp.SIGN_UP},type:"picture-in-picture"===m.mode?"pip":"public"}))),a.createElement(M.v,{media:e.video,yearGroups:e.yearGroups,audiences:e.audiences,getSeriesAppLink:function(t){return ue.getSeriesAppLink(t,e.params.mtv)},featureAccess:e.featureAccess,shareId:e.shareId}),te?a.createElement(k.j,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var t;return null===(t=m.playerRef.current)||void 0===t?void 0:t.currentTime(e)},getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:te}):a.createElement(b.a,{video:e.video,headingRef:ae,onLaunchImmersiveReader:se,onExitImmersiveReader:de,getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout}),a.createElement(E,{headingRef:ae,video:e.video,height:A.x,curriculums:e.curriculums,emptyStateUrl:D.W.EmptyStates.CURRICULUM_LINKS,canViewCurriculumLinks:e.featureAccess.canViewCurriculumLinks}),a.createElement(I.M,{headingRef:ae,video:e.video,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:ue.getResourceAppLink(e.video.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{videoId:e.video.id,videoName:e.video.name},resourceThumbnailFallbackUrl:D.W.Fallbacks.RESOURCE_THUMBNAIL}),a.createElement(C.J,{headingRef:ae,video:e.video,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{videoId:e.video.id,videoName:e.video.name},canViewInteractives:e.featureAccess.canViewInteractives,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),a.createElement(r.O,{video:e.video,headingRef:ae,clips:e.clips,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,analyticsData:{videoId:e.video.id,videoName:e.video.name},isPlugin:e.isPlugin}),te&&a.createElement(b.a,{video:e.video,headingRef:ae,onLaunchImmersiveReader:se,onExitImmersiveReader:de,getTagAppLink:ue.getTagAppLink,suppressInteractivity:e.featureAccess.canViewPublicLayout}),a.createElement(_.Z,{currentVideo:e.video,headingRef:ae,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,currentUser:e.currentUser,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(t,n){return B.W.getAppLink(t,Object.assign(Object.assign({},n),{context:e.params.context,contextId:e.params.contextId,playNext:e.params.playNext,shareId:e.shareId,moviesAndTv:e.params.mtv}))},audiences:e.audiences,moviesAndTv:e.params.mtv,isPlugin:e.isPlugin})),a.createElement(V.h,{isExpanded:J,setIsExpanded:ee,items:ie,activeId:y,setControlledId:X,analyticsData:{videoId:e.video.id,videoName:e.video.name},showInSide:e.shouldShowSideTableOfContents})))}},22161:(e,t,n)=>{n.d(t,{Z:()=>a});const a={curriculumSubject:"GvGYH",curriculumSet:"d7RK0",areaLeafSet:"XRTAe",closeButton:"N3l5Q",heading:"hAxR4",leafDescriptionOnly:"h66ke",dropdown:"CsG6G",tag:"rdLqY",cover:"etwaD",active:"aDLMe",selected:"BMrSd"}}}]);
|
|
2
|
-
//# sourceMappingURL=1169-534a29a204-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1169-534a29a204-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumLinksV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumsWidget.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/components/play-page-v2/curriculum-links/CurriculumLinksWithScrollbarV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/components/play-page/play-page.scss","file:///app/packages/projects/lite/src/shared/views/play/v2/components/play-page/PlayPageV2.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"i4D3h\",\"curriculumSet\":\"WCdf9\",\"areaLeafSet\":\"o8H8s\",\"closeButton\":\"McsPs\",\"leafDescriptionOnly\":\"xmEEo\"};","import React from 'react';\n\nimport { CurriculumLinksEmptyState } from 'libs/shared/components/curriculum-links/CurriculumLinksEmptyState';\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksV2Props {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksV2(props: CurriculumLinksV2Props): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\ninterface CurriculumsWidgetProps {\n curriculums: CurriculumData;\n selectedCurriculum: Presentation;\n onChangeCurriculum: (curriculumId: string) => void;\n noNegativePadding?: boolean;\n}\n\nexport function CurriculumsWidget(props: CurriculumsWidgetProps): JSX.Element {\n return (\n <DynamicWidget\n collection={props.selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={_props => {\n return (\n <CurriculumLinkItem\n {..._props}\n selected={props.selectedCurriculum?.id?.toString() === _props.data.id.toString()}\n onChangeCurriculum={props.onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[ props.selectedCurriculum?.id?.toString(), props.onChangeCurriculum ]}\n noNegativePadding={props.noNegativePadding}\n />\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurriculumData, Presentation, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { CurriculumLinksV2 } from './CurriculumLinksV2';\nimport { CurriculumsWidget } from './CurriculumsWidget';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksWithScrollbarV2Props {\n video: Video;\n curriculums: CurriculumData;\n emptyStateUrl: string;\n height?: number;\n canViewCurriculumLinks: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function CurriculumLinksWithScrollbarV2(props: CurriculumLinksWithScrollbarV2Props): JSX.Element {\n const {\n hasLoaded,\n activeCurriculum,\n availableCurriculums,\n curriculumLinks,\n updateCurriculum,\n customerHasCurriculumLinks\n } = props.curriculums;\n\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(activeCurriculum ?? ArrayHelper.first(availableCurriculums));\n }, [ activeCurriculum?.id, hasLoaded ]);\n\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(getPhrase('updateFailed'));\n };\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n if (!props.canViewCurriculumLinks || !customerHasCurriculumLinks)\n return <></>;\n \n return (\n <section\n id={PlayPageAnchor.CurriculumLinks}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.CurriculumLinks, el);\n }}\n className='play-page-section'\n >\n <h2 className='h4 me-2 h-100'>\n <Text namespace={namespace} phrase='heading' />\n </h2>\n <div className='mb-2'>\n <CurriculumsWidget\n curriculums={props.curriculums}\n selectedCurriculum={selectedCurriculum}\n onChangeCurriculum={onChangeCurriculum}\n />\n </div>\n\n <div className='rounded border position-relative'>\n <Scrollbars autoHeight autoHeightMax={props.height}>\n <div className='p-3'>\n {!hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinksV2\n curriculumLinks={curriculumLinks}\n emptyStateUrl={props.emptyStateUrl}\n />\n )}\n </div>\n </Scrollbars>\n </div>\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"main\":\"xSI0l\",\"expandedToc\":\"j5FCv\"};","import React from 'react';\n\nimport { PlayPageClips } from 'libs/shared/components/play-page-v2/clips-widget/PlayPageClips';\nimport { CurriculumLinksWithScrollbarV2 } from 'libs/shared/components/play-page-v2/curriculum-links/CurriculumLinksWithScrollbarV2';\nimport { VideoDetailsWithScrollbarV2 } from 'libs/shared/components/play-page-v2/details/VideoDetailsV2';\nimport { hasGlanceData } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceUtilsV2';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page-v2/glance/VideoAtAGlanceV2';\nimport { PlayPageInteractives } from 'libs/shared/components/play-page-v2/interactives-widget/PlayPageInteractives';\nimport { PlayPageResources } from 'libs/shared/components/play-page-v2/resources-widget/PlayPageResources';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { GlobalPlayerConsumer } from 'libs/shared/context/player-context/components/GlobalPlayerConsumer';\nimport { usePlayerContext } from 'libs/shared/context/player-context/PlayerContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CanFavouriteFunc, Clip, CurrentUser, CurriculumData, FavouriteFunc, InteractiveMetadata, PointOfInterest, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { PlayViewQueryParams } from 'libs/shared/interfaces/query-params/PlayViewQueryParams';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ArchivedBanner } from 'shared/components/play-page/ArchivedBanner';\nimport { TableOfContentsContainer } from 'shared/components/play-page/components/table-of-contents/TableOfContents';\nimport { PlayPageTitleAndActions } from 'shared/components/play-page/components/title-and-actions/PlayPageTitleAndActions';\nimport { getAppLinks } from 'shared/components/play-page/PlayPageUtils';\nimport { RestrictionBanner } from 'shared/components/play-page/RestrictionBanner';\nimport { PlayerPlaceholder } from 'shared/components/player-placeholder/PlayerPlaceholder';\nimport { RelatedVideos } from 'shared/components/related-videos/RelatedVideos';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { RelatedVideosHash } from 'shared/hooks/useGetRelatedVideos';\nimport { VideoFeaturesHash } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\nimport { usePlayPageTableOfContent } from 'shared/views/play/v2/hooks/usePlayPageTableOfContent';\nimport { useSectionHeadings } from 'shared/views/play/v2/hooks/useSectionHeadings';\nimport { PlayPageUtils } from 'shared/views/play/v2/PlayPageUtilV2';\n\nimport styles from './play-page.scss';\n\nconst namespace = 'shared.play';\n\ninterface PlayPageV2Props {\n video: Video;\n clips: Clip[];\n interactives: InteractiveMetadata[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n relatedVideos: RelatedVideosHash;\n audiences: PresentationAudience[];\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n currentUser: CurrentUser;\n pointsOfInterest?: PointOfInterest[];\n playNext: boolean;\n shareId?: string;\n curriculums: CurriculumData;\n featureAccess: VideoFeaturesHash;\n params?: PlayViewQueryParams;\n canManageVideoAccess: boolean;\n tableOfContentsId: string;\n shouldShowSideTableOfContents: boolean;\n isPlugin: boolean;\n}\n\nexport function PlayPageV2(props: PlayPageV2Props): JSX.Element {\n const playerContext = usePlayerContext();\n\n const { hasPermissions } = usePermissions();\n const { canConsume } = VideoHelper.getCanBeConsumed(props.video);\n\n const {\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n onToggleTableOfContents\n } = usePlayPageTableOfContent(props.tableOfContentsId);\n\n const hasGlance = hasGlanceData(props.video) && props.featureAccess.canViewGlance;\n\n const { headingRef, headingElements } = useSectionHeadings(hasGlance);\n const items = headingElements.map(ele => {\n return {\n id: ele.id as PlayPageAnchor,\n name: PlayPageUtils.getSectionHeading(\n ele.id as PlayPageAnchor,\n {\n clips: props.clips,\n interactives: props.interactives,\n resources: props.video.resources?.data\n }\n )\n };\n });\n\n const isArchived = VideoHelper.isVideoTypeArchived(props.video);\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentsActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n useTableOfContentsScroll(headingElements, controlledId);\n\n /**\n * Need to use a ref because if we use state, onExitImmersiveReader will have a stale\n * reference of the state. This is because the state is changed in onLaunchImmersiveReader\n * which is passed in at the same time as onExitImmersiveReader\n */\n const shouldPlayOnExitImmersiveReader = React.useRef(false);\n\n const appLinkFns = getAppLinks();\n\n function onLaunchImmersiveReader(): void {\n shouldPlayOnExitImmersiveReader.current = !playerContext?.playerRef?.current?.isPaused();\n playerContext?.playerRef?.current?.pause();\n }\n\n function onExitImmersiveReader(): void {\n if (!shouldPlayOnExitImmersiveReader.current)\n return;\n\n playerContext?.playerRef?.current?.play();\n }\n\n function getMainClassName() {\n if (props.shouldShowSideTableOfContents && tableOfContentsExpanded) {\n return styles.expandedToc;\n }\n if (props.shouldShowSideTableOfContents && !tableOfContentsExpanded)\n return 'pe-4';\n }\n\n const showPlayerPlaceholder = playerContext.mode === 'picture-in-picture' || props.featureAccess.canViewPublicLayout;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-4 play-page-sections-container'>\n <main className={`${styles.main} ${getMainClassName()}`}>\n <RestrictionBanner\n restrictions={props.video._restrictions}\n yearGroups={props.yearGroups}\n objectId={props.video.id}\n objectTypeId={MasterType.Video}\n canManageVideoAccess={props.canManageVideoAccess}\n />\n \n {isArchived && <ArchivedBanner typeId={props.video.typeId} hasStudentExperience={hasStudentExperience}/>}\n \n <section\n id={PlayPageAnchor.Video}\n className={`mb-2 ${SeoConstants.GLOBAL_PLAYER_SELECTOR}`}\n ref={el => { (el && headingRef?.current) && headingRef.current.set(PlayPageAnchor.Video, el); }}\n >\n {canConsume && (\n <GlobalPlayerConsumer\n key={props.video.id}\n objectId={props.video.id}\n objectTypeId={props.video.typeId}\n shareId={props.shareId}\n context={props.params?.context}\n contextId={props.params?.contextId}\n playNext={props.params?.playNext}\n moviesAndTv={props.params?.mtv}\n startTime={props.params?.t ?? props.params?.startTime}\n endTime={props.params?.endTime}\n mode='default'\n location='play-page'\n />\n )}\n <div className={showPlayerPlaceholder ? '' : 'd-none'}>\n <PlayerPlaceholder\n video={props.video}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n type={playerContext.mode === 'picture-in-picture' ? 'pip' : 'public'}\n />\n </div>\n </section>\n\n <PlayPageTitleAndActions\n media={props.video}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n getSeriesAppLink={series => appLinkFns.getSeriesAppLink(series, props.params.mtv)}\n featureAccess={props.featureAccess}\n shareId={props.shareId}\n />\n {/* if no glance render video details here */}\n {hasGlance ? (\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={(time: number) => playerContext.playerRef.current?.currentTime(time)}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n canViewGlance={hasGlance}\n />\n ) : (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <CurriculumLinksWithScrollbarV2\n headingRef={headingRef}\n video={props.video}\n height={MINIMUM_GLANCE_HEIGHT}\n curriculums={props.curriculums}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n canViewCurriculumLinks={props.featureAccess.canViewCurriculumLinks}\n />\n \n <PlayPageResources\n headingRef={headingRef}\n video={props.video}\n canViewResources={props.featureAccess.canViewResourceItems}\n imageCdnUrl={props.imageCdnUrl}\n getAppLink={\n appLinkFns.getResourceAppLink(props.video.id, props.shareId, props.featureAccess.canViewResourceItems)\n }\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n resourceThumbnailFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n />\n\n <PlayPageInteractives\n headingRef={headingRef}\n video={props.video}\n interactives={props.interactives}\n imageCdnUrl={props.imageCdnUrl}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n canViewInteractives={props.featureAccess.canViewInteractives}\n yearGroups={props.yearGroups}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n isPlugin={props.isPlugin}\n />\n\n <PlayPageClips\n video={props.video}\n headingRef={headingRef}\n clips={props.clips}\n canViewClips={props.featureAccess.canViewClips}\n yearGroups={props.yearGroups}\n audiences={props.audiences}\n imageCdnUrl={props.imageCdnUrl}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n isPlugin={props.isPlugin}\n />\n\n {/* if has glance, render video details here */}\n {hasGlance && (\n <VideoDetailsWithScrollbarV2\n video={props.video}\n headingRef={headingRef}\n onLaunchImmersiveReader={onLaunchImmersiveReader}\n onExitImmersiveReader={onExitImmersiveReader}\n getTagAppLink={appLinkFns.getTagAppLink}\n suppressInteractivity={props.featureAccess.canViewPublicLayout}\n />\n )}\n\n <RelatedVideos\n currentVideo={props.video}\n headingRef={headingRef}\n yearGroups={props.yearGroups}\n relatedVideos={props.relatedVideos}\n currentUser={props.currentUser}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: props.params.context,\n contextId: props.params.contextId,\n playNext: props.params.playNext,\n shareId: props.shareId,\n moviesAndTv: props.params.mtv\n })}\n audiences={props.audiences}\n moviesAndTv={props.params.mtv}\n isPlugin={props.isPlugin}\n />\n </main>\n\n <TableOfContentsContainer\n isExpanded={tableOfContentsExpanded}\n setIsExpanded={onToggleTableOfContents}\n items={items}\n activeId={tableOfContentsActiveId}\n setControlledId={setControlledId}\n analyticsData={{ videoId: props.video.id, videoName: props.video.name }}\n showInSide={props.shouldShowSideTableOfContents}\n />\n\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","namespace","getPhrase","CurriculumLinksEmptyState","emptyStateUrl","altText","phrase","PartialCurriculumLinkSection","PartialCurriculumLinks","BRACKET_SEGMENT_REGEX","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","Text","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","CurriculumType","map","ca","join","push","match","Object","keys","i","CurriculumLinksV2","setCodeWidth","currentVal","curriculumLinkSets","newSet","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","length","linkSetKey","CurriculumsWidget","collection","selectedCurriculum","curriculums","nonEmptyCurriculums","childClassName","childComponent","_props","partialLoadingComponent","widgetDataDeps","noNegativePadding","PartialTagItem","tagClass","classNames","LanguageService","CurriculumLinksWithScrollbarV2","hasLoaded","activeCurriculum","availableCurriculums","updateCurriculum","customerHasCurriculumLinks","setSelectedCurriculum","alerts","ArrayHelper","canViewCurriculumLinks","PlayPageAnchor","el","headingRef","set","curriculumId","newCurriculum","find","c","AnalyticsHelper","videoId","video","videoName","entity","actionType","descriptor","location","error","autoHeight","autoHeightMax","height","PlayPageV2","playerContext","hasPermissions","usePermissions","canConsume","VideoHelper","usePlayPageTableOfContent","tableOfContentsId","tableOfContentsActiveId","setTableOfContentsActiveId","controlledId","setControlledId","tableOfContentsExpanded","onToggleTableOfContents","hasGlance","featureAccess","canViewGlance","useSectionHeadings","headingElements","items","ele","clips","interactives","resources","isArchived","hasStudentExperience","PermissionName","useTableOfContentsActiveHeading","setActiveId","useTableOfContentsScroll","shouldPlayOnExitImmersiveReader","appLinkFns","onLaunchImmersiveReader","playerRef","isPaused","pause","onExitImmersiveReader","play","showPlayerPlaceholder","mode","canViewPublicLayout","value","shouldShowSideTableOfContents","RestrictionBanner","restrictions","_restrictions","yearGroups","objectId","objectTypeId","MasterType","canManageVideoAccess","ArchivedBanner","typeId","SeoConstants","GlobalPlayerConsumer","shareId","context","params","contextId","playNext","moviesAndTv","mtv","startTime","t","endTime","PlayerPlaceholder","appLink","application","action","PlayPageTitleAndActions","media","audiences","getSeriesAppLink","series","VideoAtAGlanceV2","pointsOfInterest","setStartTime","time","currentTime","getTagAppLink","suppressInteractivity","ImageUrls","PlayPageResources","canViewResources","canViewResourceItems","imageCdnUrl","getAppLink","getResourceAppLink","analyticsData","resourceThumbnailFallbackUrl","PlayPageInteractives","canViewInteractives","setFavourite","canFavourite","isPlugin","PlayPageClips","canViewClips","RelatedVideos","currentVideo","relatedVideos","currentUser","getVideoAppLink","v","opts","VideoAppLinkHelper","TableOfContents","isExpanded","setIsExpanded","activeId","showInSide"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1867],{70067:(e,a,i)=>{i.r(a),i.d(a,{PlaySharedClipViewV2:()=>L});var t=i(32735),n=i(20354),r=i(65858),s=i(16714),c=i(43012),o=i(39151),d=i(1666),l=i(20768),u=i(31949),p=i(1575),v=i(26304),m=i(22902),g=i(15311),I=i(79612),y=i(76753),h=i(51855),f=i(7179),P=i(49948),A=i(36873),C=i(27638),E=i(44110),V=i(35014),F=i(97816),O=i(81812),b=i(14085);function L(e){var a,i,L,G,k,x,R=(0,g.r)().hasProduct,S=(0,C.u)(r.LZ.VideoThumbnail),T=S.setFavourite,w=S.canFavourite,q=(0,m.T)().hasPermissions,N=(0,h.G)().isPlugin,U=(0,O.a)(),_=(0,V.I)(),M=n.a.useBasicFetch(u.N.currentUser()),j=n.a.useBasicFetch(o.L.config()),B=n.a.useBasicFetch(c.e.sharedClip(e.objectId,e.shareId)),D=n.a.useBasicFetch(!!(null===(a=B.data)||void 0===a?void 0:a._parentVideo)&&p.R.video(B.data._parentVideo.id)),W=n.a.useBasicFetch(!!(null===(L=null===(i=B.data)||void 0===i?void 0:i._parentVideo)||void 0===L?void 0:L.id)&&_.canViewClips&&c.e.videoClips(B.data._parentVideo.id)),H=n.a.useBasicFetch(_.canViewInteractives&&l.b.videoInteractives(e.objectId)),K=(0,A.k)({video:D.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:M.data}),Q=(0,E.i)(),Y=n.a.useBasicFetch((null===(G=M.data)||void 0===G?void 0:G.isAuthenticated)&&d.h.yearGroups(M.data.customerId)),Z=(0,P.l)(e.objectId);return(0,I.M)(y.CG.getClipMetadata({content:B.data})),(0,F.V)(null!==(k=K.videos)&&void 0!==k?k:[]),(0,v.b)(B),(0,f.P)({id:e.objectId,app:"clips",shareId:e.shareId}),B.data&&M.hasCompleted&&j.hasCompleted&&Z.hasCompleted?t.createElement(b.S,{shareId:e.shareId,clip:B.data,clips:W.data,interactives:H.data,originalVideo:D.data,currentUser:M.data,yearGroups:Y.data,relatedVideos:K,canFavourite:w,setFavourite:T,hasProduct:R,queryParams:e.queryParams,audiences:Q.data,imageCdnUrl:j.data.imageCdnUrl,canManageVideoAccess:q(s.C.ManageVideoAccess),pointsOfInterest:null==Z?void 0:Z.items,featureAccess:_,tableOfContentsId:null===(x=e.queryParams)||void 0===x?void 0:x.tocId,shouldShowSideTableOfContents:U,isPlugin:N}):t.createElement(t.Fragment,null)}},44110:(e,a,i)=>{i.d(a,{i:()=>s});var t=i(20354),n=i(89454),r=i(86698),s=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,s=a||i();return t.a.useBasicFetch(!!s&&n.O.presentationAudiences(s.id))}},14085:(e,a,i)=>{i.d(a,{S:()=>W});var t=i(32735),n=i(28400),r=i(5640),s=i(12059),c=i(51184),o=i(64921),d=i(95812),l=i(53709),u=i(71063),p=i(10439),v=i(35429),m=i(4594),g=i(16714),I=i(12754),y=i(22902),h=i(65332),f=i(76196),P=i(59598),A=i(31908),C=i(26492),E=i(9465),V=i(91479),F=i(47938),O=i(81024),b=i(78166),L=i(99742),G=i(14070),k=i(97291),x=i(22490),R=i(63010),S=i(14476),T=i(53256),w=i(83345),q=i(13231),N=i(51365),U=i(10671),_=i(10741),M="shared.playClipV2";function j(e){var a=(0,y.T)().hasPermissions,i=(0,U._)({location:U.i.VideoItem});return t.createElement("section",{className:"play-page-section",id:P.K.ClippedFrom,ref:function(a){var i;a&&(null===(i=e.headingRef)||void 0===i?void 0:i.current)&&e.headingRef.current.set(P.K.ClippedFrom,a)}},t.createElement("h2",{className:"h4 mb-0"},t.createElement(w.x,{namespace:M,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(q.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:a,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return _.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink})))}const B={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:k.O.VIDEOS,action:G.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:k.O.SIGN_UP,action:G.e.SignUp.SIGN_UP}}};function W(e){var a,i,w,q,N,U,_,M,W,H=(0,v.g)(),K=(0,y.T)().hasPermissions,Q=A.M.getCanBeConsumed(e.clip).canConsume,Y=(0,R.Q)(e.tableOfContentsId),Z=Y.tableOfContentsActiveId,J=Y.setTableOfContentsActiveId,z=Y.controlledId,X=Y.setControlledId,$=Y.tableOfContentsExpanded,ee=Y.onToggleTableOfContents,ae=(0,c.Wp)(e.clip)&&e.featureAccess.canViewGlance,ie=(0,S.i)(ae),te=ie.headingRef,ne=ie.headingElements,re=ne.map((function(a){var i;return{id:a.id,name:T.d.getSectionHeading(a.id,{clips:e.clips,interactives:e.interactives,resources:null===(i=e.clip.resources)||void 0===i?void 0:i.data,isPlayClipPage:!0})}}));(0,h.D)({setActiveId:J,headingElements:ne,controlledId:z,setControlledId:X}),(0,f.P)(ne,e.tableOfContentsId);var se=A.M.isVideoTypeArchived(e.clip),ce=K(g.C.StudentExperience),oe=t.useRef(!1);function de(){var e,a,i,t;oe.current=!(null===(a=null===(e=null==H?void 0:H.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==H?void 0:H.playerRef)||void 0===i?void 0:i.current)||void 0===t||t.pause()}function le(){var e,a;oe.current&&(null===(a=null===(e=null==H?void 0:H.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function ue(){var a,i;return!(!e.originalVideo||!(null===(a=e.clip._canBeConsumed)||void 0===a?void 0:a.value)||!(null===(i=e.currentUser)||void 0===i?void 0:i.isAuthenticated)||!e.hasProduct(I.x.Primary)||ce)}var pe="picture-in-picture"===H.mode||e.featureAccess.canViewPublicLayout,ve=null!==(i=null===(a=e.clips)||void 0===a?void 0:a.filter((function(a){return a.id.toString()!==e.clip.id.toString()})))&&void 0!==i?i:[];return t.createElement("div",{className:"px-4 play-page-sections-container"},t.createElement("main",{className:"".concat(B.main," ").concat(e.shouldShowSideTableOfContents&&$?B.expandedToc:e.shouldShowSideTableOfContents&&!$?"pe-4":void 0)},t.createElement(F.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:m.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),se&&t.createElement(C.T,{typeId:e.clip.typeId,hasStudentExperience:ce}),t.createElement("section",{id:P.K.Video,className:"mb-2 ".concat(u.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==te?void 0:te.current)&&te.current.set(P.K.Video,e)}},Q&&t.createElement(p.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(w=e.queryParams)||void 0===w?void 0:w.context,contextId:null===(q=e.queryParams)||void 0===q?void 0:q.contextId,moviesAndTv:null===(N=e.queryParams)||void 0===N?void 0:N.mtv,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,startTime:null!==(M=null===(_=e.queryParams)||void 0===_?void 0:_.t)&&void 0!==M?M:null===(W=e.queryParams)||void 0===W?void 0:W.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:pe?"":"d-none"},t.createElement(O.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ue()?{application:k.O.VIDEOS,action:G.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,n.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),ae?t.createElement(o.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var a;return null===(a=H.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:k.O.SEARCH,action:G.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ae}):t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:k.O.SEARCH,action:G.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),t.createElement(l.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:D(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:L.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:te}),t.createElement(d.J,{video:e.clip,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:te,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),t.createElement(r.O,{clips:ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,headingRef:te,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},isPlugin:e.isPlugin}),ae&&t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:k.O.SEARCH,action:G.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),!!ue()&&t.createElement(j,{originalVideo:e.originalVideo,setFavourite:e.setFavourite,canFavourite:e.canFavourite,yearGroups:e.yearGroups,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:te,isPlugin:e.isPlugin,getClassroomGuideAppLink:x.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:x.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:x.W.getResourceGuidanceAppLink}),t.createElement(b.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin})),t.createElement(E.h,{isExpanded:$,setIsExpanded:ee,items:re,activeId:Z,setControlledId:X,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
|
|
2
|
-
//# sourceMappingURL=1867-260ef9f8c2-lite.chunk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6546],{94644:(e,a,i)=>{i.d(a,{r:()=>l});var t=i(50242),n=i(81886),r=i(67058),s=i(14553),c=i(49267),o=i(49075),d={notFound:r.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:o._};function l(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},d),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==t.o.NotFound?r!==t.o.Forbidden?i.badRequest||n.Q.Ry.throw(new s.badRequest):i.forbidden||n.Q.Ry.throw(new s.forbidden.privacy):i.notFound||n.Q.Ry.throw(new s.notFound))}}},91286:(e,a,i)=>{i.d(a,{v:()=>s});var t=i(32735),n=i(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,a,i){var s=Array.isArray(e)?e:[e];(0,t.useEffect)((function(){s.forEach((function(e){(0,n.r)(e.statusCode,a,i)}))}),[r(s),a,i])}},44110:(e,a,i)=>{i.d(a,{i:()=>s});var t=i(20354),n=i(89454),r=i(86698),s=function(){var e=(0,r.y)({redirectOnError:!0}),a=e.activePresentation,i=e.getFallbackPresentation,s=a||i();return t.a.useBasicFetch(!!s&&n.O.presentationAudiences(s.id))}},36073:(e,a,i)=>{i.r(a),i.d(a,{PlayClipViewV2:()=>q});var t=i(32735),n=i(50242),r=i(23481),s=i(20354),c=i(65858),o=i(78417),d=i(16714),l=i(67058),u=i(33803),p=i(43012),v=i(39151),m=i(1666),g=i(20768),y=i(31949),f=i(1575),h=i(26304),I=i(91286),P=i(22902),C=i(15311),A=i(79612),E=i(76753),V=i(51855),b=i(7179),F=i(49948),O=i(36873),R=i(27638),L=i(44110),G=i(35014),x=i(97816),k=i(81812),S=i(14085),T=r.T.encloseNamespace("shared.playClipV2"),w={notFound:l.d,forbidden:{privacy:u.G}};function q(e){var a,i,r,l,u,q=e.queryParams,N=q.context,U=q.contextId,_=q.mtv,M=(0,C.r)().hasProduct,j=(0,R.u)(c.LZ.PlayClip),B=j.setFavourite,D=j.canFavourite,H=(0,P.T)().hasPermissions,W=(0,V.G)().isPlugin,Q=s.a.useBasicFetch(y.N.currentUser()),K=s.a.useBasicFetch(v.L.config()),Y=s.a.useBasicFetch(p.e.clip(e.id)),Z=s.a.useBasicFetch(g.b.videoInteractives(e.id)),J=s.a.useBasicFetch(!!(null===(a=Y.data)||void 0===a?void 0:a._parentVideo)&&f.R.video(Y.data._parentVideo.id));(0,x.V)([J.data]);var z=s.a.useBasicFetch(!!(null===(i=Y.data)||void 0===i?void 0:i._parentVideo)&&p.e.videoClips(Y.data._parentVideo.id)),X=s.a.useBasicFetch(Y.statusCode===n.o.Forbidden&&p.e.clip(e.id,o.r.StripMetadata)),$=(0,O.k)({video:J.data,context:N,contextId:U,moviesAndTv:_,currentUser:Q.data}),ee=(0,L.i)(),ae=s.a.useBasicFetch((null===(r=Q.data)||void 0===r?void 0:r.isAuthenticated)&&m.h.yearGroups(Q.data.customerId)),ie=(0,k.a)(),te=(0,F.l)(e.id,!0),ne=(0,G.I)();return(0,A.M)(E.CG.getClipMetadata({content:Y.data,phraseContext:{phraseHandler:T,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"}})),(0,I.v)(Y,w,{forbidden:!0}),(0,x.V)(null!==(l=$.videos)&&void 0!==l?l:[]),(0,h.b)(X),(0,b.P)({id:e.id,app:"clips"}),Y.data&&Q.hasCompleted&&K.hasCompleted&&te.hasCompleted?t.createElement(S.S,{clip:Y.data,clips:z.data,interactives:Z.data,originalVideo:J.data,currentUser:Q.data,yearGroups:ae.data,relatedVideos:"playlist"===N?$:Object.assign(Object.assign({},$),{videos:[]}),canFavourite:D,setFavourite:B,hasProduct:M,queryParams:e.queryParams,audiences:ee.data,imageCdnUrl:K.data.imageCdnUrl,canManageVideoAccess:H(d.C.ManageVideoAccess),pointsOfInterest:te.items,featureAccess:ne,tableOfContentsId:null===(u=e.queryParams)||void 0===u?void 0:u.tocId,shouldShowSideTableOfContents:ie,isPlugin:W}):t.createElement(t.Fragment,null)}q.defaultProps={queryParams:{}}},14085:(e,a,i)=>{i.d(a,{S:()=>H});var t=i(32735),n=i(28400),r=i(5640),s=i(12059),c=i(51184),o=i(64921),d=i(95812),l=i(53709),u=i(71063),p=i(10439),v=i(35429),m=i(4594),g=i(16714),y=i(12754),f=i(22902),h=i(65332),I=i(76196),P=i(59598),C=i(31908),A=i(26492),E=i(9465),V=i(91479),b=i(47938),F=i(81024),O=i(78166),R=i(99742),L=i(14070),G=i(97291),x=i(22490),k=i(63010),S=i(14476),T=i(53256),w=i(83345),q=i(13231),N=i(51365),U=i(10671),_=i(10741),M="shared.playClipV2";function j(e){var a=(0,f.T)().hasPermissions,i=(0,U._)({location:U.i.VideoItem});return t.createElement("section",{className:"play-page-section",id:P.K.ClippedFrom,ref:function(a){var i;a&&(null===(i=e.headingRef)||void 0===i?void 0:i.current)&&e.headingRef.current.set(P.K.ClippedFrom,a)}},t.createElement("h2",{className:"h4 mb-0"},t.createElement(w.x,{namespace:M,phrase:"clippedFrom"})),t.createElement(N.M.Provider,{value:i},t.createElement(q.E4,{videos:[e.originalVideo],yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},hasPermissions:a,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:function(e){return _.j.getPreviewQuestionsAppLink(e)},isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink})))}const B={main:"iQ0Ie",expandedToc:"sIoV8"};var D=function(e,a,i){return function(t){return i?{application:G.O.VIDEOS,action:L.e.Videos.PREVIEW_PDF,args:[t.id],params:{videoId:e,shareId:a}}:{application:G.O.SIGN_UP,action:L.e.SignUp.SIGN_UP}}};function H(e){var a,i,w,q,N,U,_,M,H,W=(0,v.g)(),Q=(0,f.T)().hasPermissions,K=C.M.getCanBeConsumed(e.clip).canConsume,Y=(0,k.Q)(e.tableOfContentsId),Z=Y.tableOfContentsActiveId,J=Y.setTableOfContentsActiveId,z=Y.controlledId,X=Y.setControlledId,$=Y.tableOfContentsExpanded,ee=Y.onToggleTableOfContents,ae=(0,c.Wp)(e.clip)&&e.featureAccess.canViewGlance,ie=(0,S.i)(ae),te=ie.headingRef,ne=ie.headingElements,re=ne.map((function(a){var i;return{id:a.id,name:T.d.getSectionHeading(a.id,{clips:e.clips,interactives:e.interactives,resources:null===(i=e.clip.resources)||void 0===i?void 0:i.data,isPlayClipPage:!0})}}));(0,h.D)({setActiveId:J,headingElements:ne,controlledId:z,setControlledId:X}),(0,I.P)(ne,e.tableOfContentsId);var se=C.M.isVideoTypeArchived(e.clip),ce=Q(g.C.StudentExperience),oe=t.useRef(!1);function de(){var e,a,i,t;oe.current=!(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a?void 0:a.isPaused()),null===(t=null===(i=null==W?void 0:W.playerRef)||void 0===i?void 0:i.current)||void 0===t||t.pause()}function le(){var e,a;oe.current&&(null===(a=null===(e=null==W?void 0:W.playerRef)||void 0===e?void 0:e.current)||void 0===a||a.play())}function ue(){var a,i;return!(!e.originalVideo||!(null===(a=e.clip._canBeConsumed)||void 0===a?void 0:a.value)||!(null===(i=e.currentUser)||void 0===i?void 0:i.isAuthenticated)||!e.hasProduct(y.x.Primary)||ce)}var pe="picture-in-picture"===W.mode||e.featureAccess.canViewPublicLayout,ve=null!==(i=null===(a=e.clips)||void 0===a?void 0:a.filter((function(a){return a.id.toString()!==e.clip.id.toString()})))&&void 0!==i?i:[];return t.createElement("div",{className:"px-4 play-page-sections-container"},t.createElement("main",{className:"".concat(B.main," ").concat(e.shouldShowSideTableOfContents&&$?B.expandedToc:e.shouldShowSideTableOfContents&&!$?"pe-4":void 0)},t.createElement(b.W,{restrictions:e.clip._restrictions,yearGroups:e.yearGroups,objectId:e.clip.id,objectTypeId:m.E.Clip,canManageVideoAccess:e.canManageVideoAccess}),se&&t.createElement(A.T,{typeId:e.clip.typeId,hasStudentExperience:ce}),t.createElement("section",{id:P.K.Video,className:"mb-2 ".concat(u.M.GLOBAL_PLAYER_SELECTOR),ref:function(e){e&&(null==te?void 0:te.current)&&te.current.set(P.K.Video,e)}},K&&t.createElement(p.r,{key:e.clip.id,objectId:e.clip.id,objectTypeId:e.clip.typeId,shareId:e.shareId,context:null===(w=e.queryParams)||void 0===w?void 0:w.context,contextId:null===(q=e.queryParams)||void 0===q?void 0:q.contextId,moviesAndTv:null===(N=e.queryParams)||void 0===N?void 0:N.mtv,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,startTime:null!==(M=null===(_=e.queryParams)||void 0===_?void 0:_.t)&&void 0!==M?M:null===(H=e.queryParams)||void 0===H?void 0:H.startTime,mode:"default",location:"play-page"}),t.createElement("div",{className:pe?"":"d-none"},t.createElement(F.S,{video:e.clip,type:"pip"}))),t.createElement(V.v,{media:e.clip,yearGroups:e.yearGroups,audiences:e.audiences,originalVideoAppLink:ue()?{application:G.O.VIDEOS,action:L.e.Videos.PLAY_VIDEO,args:[e.originalVideo.id,n.m.slugify(e.originalVideo.name)]}:null,featureAccess:e.featureAccess,shareId:e.shareId}),ae?t.createElement(o.j,{video:e.clip,pointsOfInterest:e.pointsOfInterest,setStartTime:function(e){var a;return null===(a=W.playerRef.current)||void 0===a?void 0:a.currentTime(e)},getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},suppressInteractivity:e.featureAccess.canViewPublicLayout,canViewGlance:ae}):t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),t.createElement(l.M,{video:e.clip,canViewResources:e.featureAccess.canViewResourceItems,imageCdnUrl:e.imageCdnUrl,getAppLink:D(e.clip.id,e.shareId,e.featureAccess.canViewResourceItems),analyticsData:{clipId:e.clip.id,clipName:e.clip.name},resourceThumbnailFallbackUrl:R.W.Fallbacks.RESOURCE_THUMBNAIL,headingRef:te}),t.createElement(d.J,{video:e.clip,interactives:e.interactives,imageCdnUrl:e.imageCdnUrl,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},canViewInteractives:e.featureAccess.canViewInteractives,headingRef:te,yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin}),t.createElement(r.O,{clips:ve||[],video:e.clip,canViewClips:e.featureAccess.canViewClips,yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,headingRef:te,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},isPlugin:e.isPlugin}),ae&&t.createElement(s.a,{video:e.clip,onLaunchImmersiveReader:de,onExitImmersiveReader:le,getTagAppLink:function(e){return{application:G.O.SEARCH,action:L.e.Search.HOME,params:{tagOrClassification:e.name}}},headingRef:te,suppressInteractivity:e.featureAccess.canViewPublicLayout}),!!ue()&&t.createElement(j,{originalVideo:e.originalVideo,setFavourite:e.setFavourite,canFavourite:e.canFavourite,yearGroups:e.yearGroups,shareId:e.shareId,queryParams:e.queryParams,audiences:e.audiences,headingRef:te,isPlugin:e.isPlugin,getClassroomGuideAppLink:x.W.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:x.W.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:x.W.getResourceGuidanceAppLink}),t.createElement(O.Z,{currentVideo:e.clip,yearGroups:e.yearGroups,relatedVideos:e.relatedVideos,setFavourite:e.setFavourite,canFavourite:e.canFavourite,currentUser:e.currentUser,audiences:e.audiences,getVideoAppLink:function(a,i){return x.W.getAppLink(a,Object.assign(Object.assign({},i),{context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv}))},moviesAndTv:e.queryParams.mtv,isPlugin:e.isPlugin})),t.createElement(E.h,{isExpanded:$,setIsExpanded:ee,items:re,activeId:Z,setControlledId:X,analyticsData:{clipId:e.clip.id,clipName:e.clip.name},showInSide:e.shouldShowSideTableOfContents}))}}}]);
|
|
2
|
-
//# sourceMappingURL=6546-faa6f93a0e-lite.chunk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6587],{50690:(e,t,n)=>{n.d(t,{b:()=>i});var a=n(12788),i={renderInPortalIfExists:function(e,t){return t?(0,a.createPortal)(e,t):e}}},72553:(e,t,n)=>{n.d(t,{j:()=>u});var a=n(32735),i=n(42029),r=n(83345),o=n(49439);const l={copyrightDisclaimer:"z8YoI",overlayContainer:"eJDbJ"};function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s="shared.copyrightDisclaimer",d=150;function u(e){var t,n,u,m=(n=(0,o.L)({}),u=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],c=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(n,u)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(n,u)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=m[0],v=m[1];return a.createElement("div",{ref:p,className:e.className},a.createElement("p",{className:"".concat(l.copyrightDisclaimer," mb-1")},a.createElement(r.x,{namespace:s,phrase:"copyrightDisclaimer"})),a.createElement(i.Z,{target:p.current,show:v,placement:e.overflowPlacement&&document.documentElement.clientHeight-(null===(t=p.current)||void 0===t?void 0:t.getBoundingClientRect().bottom)<d?e.overflowPlacement:e.placement},a.createElement("div",{className:"".concat(l.overlayContainer," mw-100 bg-white border rounded-3 p-2")},a.createElement("p",null,a.createElement(r.x,{namespace:s,phrase:"warning"})),a.createElement("p",{className:"fw-semibold mb-0"},a.createElement(r.x,{namespace:s,phrase:"sharing"})))))}},5640:(e,t,n)=>{n.d(t,{O:()=>h});var a=n(32735),i=n(23481),r=n(28400),o=n(11518),l=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(22843),p=n(84591),v=n(68626),g=n(80143),f=a.memo((function(e){var t,n=e.data,i=e.thumbnailSize,r=e.preloadImage,o=e.getAppLink,l=(0,g.n)(null===(t=n.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.audiences);return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(p.u,{type:"static",textPosition:v.z.Independent,video:n,appLink:o(n),imageOptions:{size:i},preload:r,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,audience:l,hideDuration:!1,isPlugin:e.isPlugin,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(m.h,Object.assign({},e,{video:n,appLink:e.getAppLink(n)}))))})),y="shared.playPageClipsV2";function h(e){var t;if(!e.canViewClips||!(null===(t=e.clips)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=s.M.isVideo(e.video),m=i.T.getPhrase(y,n?"clips":"otherClips",{count:e.clips.length});return a.createElement("section",{className:"play-page-section",id:c.K.Clips,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Clips,t)}},a.createElement(o.kM,{name:m,contents:l.z.ClipsV2,collection:e.clips,prefetched:!0,getChildAppLink:function(e){return{application:u.O.CLIPS,action:d.e.Clips.PLAY_CLIP,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_CLIPS,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_CLIPS,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:f,extraChildComponentProps:{yearGroups:e.yearGroups,audiences:e.audiences,imageCdnUrl:e.imageCdnUrl,setFavourite:e.setFavourite,canFavourite:e.canFavourite,isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},12059:(e,t,n)=>{n.d(t,{a:()=>k});var a=n(32735),i=n(42648),r=n(23481),o=n(110),l=n(78259),c=n(65858),s=n(72553),d=n(25723),u=n(87311),m=n(91743),p=n(83345),v=n(8730),g=n(40178),f=n(44829),y=n(59598),h=n(31908);const E={descriptionBorder:"YUC62"};var b="shared.videoDetailsV2",C=r.T.encloseNamespace(b);function I(e){var t=e.label,n=e.items,i=e.className;if(!(n&&n.data&&n.data.length))return a.createElement(a.Fragment,null);var r=n.data.map((function(e){return e.name})).join(", ");return a.createElement("div",{className:i},t,": ",r)}function w(e){var t,n,i,r,l,c,s,d,u,m=e.video;if(!h.M.isVideo(m)&&!h.M.isClip(m))return a.createElement(a.Fragment,null);var v=h.M.getParentVideo(m);return a.createElement("div",{className:m.description?"col-md-5 ps-md-3 pt-3 pt-md-0":"col-12"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"details"})),!!v.productionYear&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"productionYear",options:{year:v.productionYear}})),a.createElement(I,{label:C("productionCompanies",{smartCount:null===(n=null===(t=v.productionCompanies)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length}),items:v.productionCompanies,className:"mb-1"}),a.createElement(I,{label:C("distributors",{smartCount:null===(r=null===(i=v.distributors)||void 0===i?void 0:i.data)||void 0===r?void 0:r.length}),items:v.distributors,className:"mb-1"}),a.createElement(I,{label:C("producers",{smartCount:null===(c=null===(l=v.producers)||void 0===l?void 0:l.data)||void 0===c?void 0:c.length}),items:v.producers,className:"mb-1"}),a.createElement(I,{label:C("directors",{smartCount:null===(d=null===(s=v.directors)||void 0===s?void 0:s.data)||void 0===d?void 0:d.length}),items:v.directors,className:"mb-1"}),!!v.dateBroadcast&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"dateBroadcast",options:{date:o.O.format(v.dateBroadcast,"DD/MM/YYYY")}})),!!v.channel&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"channel",options:{channel:v.channel.name}})),!((null===(u=m._isClickViewCurated)||void 0===u?void 0:u.value)||!m.dateCreated)&&a.createElement("div",{className:"mb-1"},a.createElement(p.x,{phrase:"dateUploaded",options:{date:o.O.format(m.dateCreated,"DD/MM/YYYY")}})))}function k(e){var t,n=e.video,r=e.maxHeight,o=void 0===r?g.x:r,C=h.M.getParentVideo(n),I=!!e.video.description,k=(0,v._)(e.video)||!!C.productionYear||!!C.dateBroadcast||!!C.channel||!(!n.dateCreated||(null===(t=n._isClickViewCurated)||void 0===t?void 0:t.value));if(!I&&!k)return a.createElement(a.Fragment,null);var N=function(){var t,n,a,i;return e.hideTags||h.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(i=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===i?void 0:i.filter((function(e){return e.tagType===f.Q.Normal}))}();return a.createElement(p.D.Provider,{value:b},a.createElement("section",{id:y.K.VideoDetails,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(y.K.VideoDetails,t)},className:"play-page-section"},a.createElement("div",{className:"rounded border p-3 position-relative"},a.createElement(i.$B,{autoHeight:!0,autoHeightMax:o},a.createElement("div",{className:"row g-0"},I&&a.createElement("div",{className:k?"".concat(E.descriptionBorder," pe-3 col-md-7"):"col-12"},a.createElement("div",{className:"d-flex align-items-center"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"description"})),a.createElement(d.m,{text:n.description,title:n.name,className:"ps-2",onLaunch:e.onLaunchImmersiveReader,onExit:e.onExitImmersiveReader,analyticsOptions:{location:c.LZ.PlayPage,entity:c.py.Video,actionType:c.Vw.Click,descriptor:c._S.LaunchImmersiveReader},analyticsData:{id:n.id,type:"description"}})),a.createElement("p",{className:"mb-0",dangerouslySetInnerHTML:{__html:l.O.linkifyText(e.video.description,{nl2br:!0})}})),k&&a.createElement(w,Object.assign({},e))),!!(null==N?void 0:N.length)&&a.createElement("div",{className:"mt-3"},a.createElement("h2",{className:"h6 mb-1"},a.createElement(p.x,{phrase:"normalTags"})),a.createElement(m.P,Object.assign({tags:N},u.G.getTagActionProps(e.getTagAppLink,null,e.suppressInteractivity),{className:"mt-1"}))),h.M.isBroadcast(e.video)&&a.createElement(s.j,{placement:"bottom-start",className:"d-flex justify-content-start mt-2 mb-n1"})))))}},51184:(e,t,n)=>{n.d(t,{NE:()=>d,RH:()=>m,Wp:()=>u});var a=n(32735),i=n(16367),r=n(34468),o=n(73758),l=n(63847);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s=/\[\]\(cv:\/\/poi\?id=\d+\)\n*/g;function d(e,t){var n,r,o,l=(r=(0,a.useState)(""),o=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],c=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(r,o)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(r,o)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=l[0],u=l[1];return(0,a.useEffect)((function(){if(t){var n=(a=e.glance,r=a.content.replace(s,""),i(r));u(n)}var a,r}),[null===(n=e.glance)||void 0===n?void 0:n.content,t]),d}function u(e){var t,n;return(null===(t=e.glance)||void 0===t?void 0:t.content)&&"text/markdown"===(null===(n=e.glance)||void 0===n?void 0:n.format)}function m(e,t){var n=(0,a.useRef)();function i(){e&&o.n.trigger("glance:poi:mouseover",e)}function c(){o.n.trigger("glance:poi:mouseleave")}return(0,r.R)("player:poi:mouseover",(function(t){var a,i,r;(null==t?void 0:t.id)&&(null===(a=null==e?void 0:e.id)||void 0===a?void 0:a.toString())===(null===(i=null==t?void 0:t.id)||void 0===i?void 0:i.toString())&&(null===(r=n.current)||void 0===r||r.classList.add(l.Z.highlightPoi))}),null,t),(0,r.R)("player:poi:mouseleave",(function(){var e;null===(e=n.current)||void 0===e||e.classList.remove(l.Z.highlightPoi)}),null,t),(0,a.useEffect)((function(){var e,a;if(n.current&&t)return null===(e=n.current)||void 0===e||e.addEventListener("mouseover",i),null===(a=n.current)||void 0===a||a.addEventListener("mouseleave",c),function(){var e,t;null===(e=n.current)||void 0===e||e.removeEventListener("mouseover",i),null===(t=n.current)||void 0===t||t.removeEventListener("mouseleave",c)}}),[n.current]),n}},64921:(e,t,n)=>{n.d(t,{j:()=>A});var a=n(32735),i=n(59087),r=n.n(i),o=n(42648),l=n(23481),c=n(49985),s=n(65858),d=n(11607),u=n(83345),m=n(93264),p=n(51184);const v={poiEntry:"vr6R9",poiText:"znHZF",public:"v0BZ9",poiTimeStamp:"AdKwe"};function g(e){var t=m.T.ToDisplayDuration(1e3*e.poi.startTime),n=(0,p.RH)(e.poi,!e.suppressInteractivity);return e.suppressInteractivity?a.createElement("div",{className:"d-flex ".concat(v.poiEntry," mb-2")},a.createElement("span",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp)},t),a.createElement("div",{className:"".concat(v.public," ms-2")},e.poi.description)):a.createElement(d.L,{key:e.poi.startTime,className:"d-flex ".concat(v.poiEntry," mb-2 cursor-pointer"),onClick:function(){return e.onClickPoiItem(e.poi.startTime)},ref:n},a.createElement("div",{className:"d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ".concat(v.poiTimeStamp)},t),a.createElement("div",{className:"ms-2 ".concat(v.poiText)},e.poi.description))}var f="shared.pointsOfInterestList";function y(e){return a.createElement("div",null,a.createElement("h2",{className:"h6 my-2"},a.createElement(u.x,{namespace:f,phrase:"heading"})),a.createElement("div",null,e.pointsOfInterest.map((function(t){return a.createElement(g,{key:t.startTime,poi:t,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:e.onClickPoiItem})}))))}var h=n(83914),E=n(87311),b=n(91743),C=n(76177),I=n(44829),w=n(35223),k=n(31908),N=n(63847);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var x="shared.videoAtAGlanceV2",T=l.T.encloseNamespace(x),S=350;function P(e){return e.hideScrollbar?a.createElement(a.Fragment,null,e.children):a.createElement("div",{className:"rounded border mb-4 bg-white"},a.createElement(o.ZP,{autoHeight:!0,autoHeightMax:S},a.createElement("div",{className:"px-3 px-3 pt-3 pb-2"},e.children)))}function A(e){var t,n,i,o=(0,p.NE)(e.video,e.canViewGlance),l=(n=a.useState(""),i=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],c=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(n,i)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?O(e,t):void 0}}(n,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),d=l[0],m=l[1],v=function(){var t,n,a,i;return k.M.isInteractive(e.video)||!(null===(n=null===(t=e.video.tags)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?null:null===(i=null===(a=e.video.tags)||void 0===a?void 0:a.data)||void 0===i?void 0:i.filter((function(e){return e.tagType===I.Q.Pedagogy||e.tagType===I.Q.Skill}))}(),g=a.useRef(null);return a.useEffect((function(){var e;(null===(e=g.current)||void 0===e?void 0:e.innerText)&&m(g.current.innerText)}),[null===(t=g.current)||void 0===t?void 0:t.innerText]),e.canViewGlance?a.createElement("section",{className:"play-page-section"},a.createElement(P,{hideScrollbar:e.hideScrollbar},a.createElement("h2",{className:"h6 mb-2"},a.createElement(u.x,{namespace:x,phrase:"learningIntention"})),a.createElement("div",{className:"mb-3 ".concat(N.Z.learningIntention)},a.createElement(C.u,{title:T("copy"),spanHack:!0,spanHackClassName:N.Z.icon},a.createElement(r(),{text:d},a.createElement(h.x,{className:"svg-container me-1 cursor-pointer",svgName:w.vn.Copy,size:h.S.Small,onClick:function(){var t={id:e.video.glance.id,videoId:e.video.id,videoName:e.video.name,learningIntention:d},n={actionType:s.Vw.Copy,entity:s.py.Glance,location:s.LZ.PlayPage};c.k.logUserAction(t,n)}}))),a.createElement("div",{dangerouslySetInnerHTML:{__html:o},className:"d-inline",ref:g})),!!(null==v?void 0:v.length)&&a.createElement("div",{className:"mb-1"},a.createElement(b.P,Object.assign({tags:v},E.G.getTagActionProps(e.getTagAppLink,e.onClickTag,e.suppressInteractivity),{className:"mt-2"}))),!!e.pointsOfInterest.length&&a.createElement(y,{pointsOfInterest:e.pointsOfInterest,suppressInteractivity:e.suppressInteractivity,onClickPoiItem:function(t){e.setStartTime(t)}}))):a.createElement(a.Fragment,null)}},17997:(e,t,n)=>{n.d(t,{H:()=>s});var a=n(32735),i=n(36848),r=n(83345),o=n(22843),l=n(84591),c=n(68626),s=a.memo((function(e){var t,n,s=e.data,d=e.thumbnailSize,u=e.preloadImage,m=Object.assign(Object.assign({},e.questionsAppLink),{args:[e.data.id]}),p=null===(n=null===(t=s._timepoints)||void 0===t?void 0:t.value)||void 0===n?void 0:n.length;return a.createElement("div",{className:"flex-shrink-0 px-1 col-6 col-sm-4"},a.createElement(l.u,{type:"static",textPosition:c.z.Independent,video:s,appLink:e.getAppLink(s),imageOptions:{size:d},preload:u,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,setFavourite:e.setFavourite,canFavourite:e.canFavourite,hideDuration:!1,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,showOwner:e.showOwner}),a.createElement("div",{className:"mt-2"},a.createElement(o.h,Object.assign({},e,{video:s,appLink:e.getAppLink(s)}))),a.createElement("div",{className:"mt-1"},a.createElement(i.F,{appLink:m,className:"cursor-pointer"},a.createElement(r.x,{namespace:"shared.interactiveWidgetItemV2",phrase:"previewQuestions",options:{count:p,smartCount:p}}))))}))},95812:(e,t,n)=>{n.d(t,{J:()=>v});var a=n(32735),i=n(23481),r=n(28400),o=n(11518),l=n(58704),c=n(59598),s=n(31908),d=n(14070),u=n(97291),m=n(17997),p="shared.playPageInteractivesV2";function v(e){var t;if(!e.canViewInteractives||!(null===(t=e.interactives)||void 0===t?void 0:t.length))return a.createElement(a.Fragment,null);var n=i.T.getPhrase(p,"interactives",{count:e.interactives.length});return a.createElement("section",{className:"play-page-section",id:c.K.Interactives,ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(c.K.Interactives,t)}},a.createElement(o.kM,{name:n,contents:l.z.InteractivesV2,collection:e.interactives,prefetched:!0,getChildAppLink:function(e){return{application:u.O.INTERACTIVES,action:d.e.Interactives.VIEW_INTERACTIVE,args:[e.id,r.m.slugify(e.name)]}},appLink:s.M.isVideo(e.video)?{action:d.e.Videos.VIDEO_INTERACTIVES,application:u.O.VIDEOS,args:[e.video.id,r.m.slugify(e.video.name)]}:{action:d.e.Clips.CLIP_INTERACTIVES,application:u.O.CLIPS,args:[e.video.id,r.m.slugify(e.video.name)]},childComponent:m.H,extraChildComponentProps:{yearGroups:e.yearGroups,setFavourite:e.setFavourite,canFavourite:e.canFavourite,imageCdnUrl:e.imageCdnUrl,questionsAppLink:{application:u.O.INTERACTIVES,action:d.e.Interactives.PREVIEW_QUESTIONS},isPlugin:e.isPlugin,showOwner:!0},analyticsData:e.analyticsData}))}},53709:(e,t,n)=>{n.d(t,{M:()=>f});var a=n(32735),i=n(23481),r=n(65858),o=n(11518),l=n(16714),c=n(58704),s=n(22902),d=n(59598),u=n(74237),m=n(351);function p(e){return function(e){if(Array.isArray(e))return v(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return v(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?v(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var g="shared.playPageResources";function f(e){var t=(0,s.T)().hasPermissions,n=function(e,t){var n,a,i,r,o=null!==(a=null===(n=e.resources)||void 0===n?void 0:n.data)&&void 0!==a?a:[],l=null!==(r=null===(i=e.links)||void 0===i?void 0:i.data)&&void 0!==r?r:[];if(!t)return[].concat(p(o),p(l));var c=o.filter((function(e){var t;return["additional-materials","student-activity"].includes(null===(t=e.metadata)||void 0===t?void 0:t.resourceType)}));return[].concat(p(c),p(l))}(e.video,t(l.C.StudentExperience)),v=i.T.getPhrase(g,"resources",{count:n.length});return n.length?a.createElement("section",{id:d.K.Resources,className:"play-page-section",ref:function(t){var n;t&&(null===(n=e.headingRef)||void 0===n?void 0:n.current)&&e.headingRef.current.set(d.K.Resources,t)}},a.createElement(o.kM,{name:v,contents:c.z.PlayPageResourcesV2,collection:n,prefetched:!0,childComponent:m.oA,extraChildComponentProps:{imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceThumbnailFallbackUrl,actionBehaviour:e.canViewResources?"normal":"public",location:"play-page",titlePosition:"below",onClickDownload:e.canViewResources?function(t){u.T.downloadResource(t,e.analyticsData,{location:r.LZ.PlayPage,actionType:r.Vw.Download,entity:r.py.Resource})}:null},getChildAppLink:e.getAppLink,analyticsOptions:e.canViewResources?{}:{workflowPhase:r.eu.Start,descriptor:r.Yu.SignUp},analyticsData:e.analyticsData})):a.createElement(a.Fragment,null)}},351:(e,t,n)=>{n.d(t,{$G:()=>w,oA:()=>k,ZS:()=>I});var a=n(32735),i=n(39202),r=n(49985),o=n(65858),l=n(36848),c=n(11607),s=n(75891),d=n(83914),u=n(60995),m=n(76177),p=n(61150),v=n(71063),g=n(4594),f=n(1164),y=n(79967),h=n(45778),E=n(54297),b=n(35223);const C={imageStyle:"bYRn8",item:"CjuxU",dashboard:"IuRN0",playPage:"VdJvp",aspectRatio:"QK8Jh",outerContainer:"eiC_H",innerContainer:"huIRg",actions:"FsIJm",titleBelow:"DpeSr",thumbnailContainer:"ZbalL",titleAbove:"PwOSX",teacherPack:"ZHAEj",text:"k3ei6",hoverState:"BLrWL",atomGuide:"Qz8JE",studentActivity:"qNspk",additionalMaterials:"R0huw",userUploaded:"H_zGf",imageTypeResource:"AgeLb",download:"DKneu"};function I(e,t){var n,a=(0,y.k)();return"public"===t||!a.xs&&!a.sm&&"resource"===e.type&&"metadata"in e&&(e.metadata.type===f.L.Image||(e.metadata.type===f.L.Pdf?!!e.url:!!(null===(n=e.pdf)||void 0===n?void 0:n.url)))}function w(e){var t,n,i,r,o=null;"metadata"in e.data&&(o=e.data.metadata);var l=h.G.isType(e.data,g.E.Resource);return a.createElement(a.Fragment,null,a.createElement("div",{className:C.aspectRatio},a.createElement("div",{className:C.outerContainer},a.createElement("div",{className:function(t){var n,a="\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ".concat(function(e){switch(e){case"atom-guide":return C.atomGuide;case"student-activity":return C.studentActivity;case"teacher-pack":return C.teacherPack;case"additional-materials":return C.additionalMaterials;default:return C.userUploaded}}(t)," ").concat(C.innerContainer);return(null===(n=e.theme)||void 0===n?void 0:n.containerClass)?a+=" ".concat(e.theme.containerClass):a+=" pt-3 px-3",e.applyHoverState&&(a+=" ".concat(C.hoverState)),a}(null==o?void 0:o.resourceType)},"above"===e.titlePosition&&a.createElement(m.u,{title:e.data.name},a.createElement("h3",{className:"text-center text-break h5 mb-3 ".concat(C.text)},a.createElement("span",{className:"clamp-1"},e.data.name))),a.createElement("div",{className:"\n ".concat(null!==(n=null===(t=e.theme)||void 0===t?void 0:t.thumbnailContainerClass)&&void 0!==n?n:""," w-75 overflow-hidden \n ").concat(C.thumbnailContainer," ").concat("above"===e.titlePosition?C.titleAbove:""," \n ").concat(C.imageStyle,"\n ")},a.createElement(s.C,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})),l&&e.onClickDownload&&"normal"===e.actionBehaviour&&a.createElement("div",{className:C.actions},a.createElement(c.L,{onClick:function(t){t.preventDefault(),t.stopPropagation(),h.G.isResource(e.data)&&"function"==typeof e.onClickDownload&&e.onClickDownload(e.data)},className:"".concat(C.download," d-flex align-items-center justify-content-center")},a.createElement(d.x,{svgName:b.vn.Download}))),!e.hideTypeBadge&&l&&a.createElement(p.y,{typeId:g.E.Resource})))),"below"===e.titlePosition&&a.createElement("div",{className:"mt-1 ".concat(C.titleBelow)},h.G.isType(e.data,g.E.Resource)&&!!(null===(r=null===(i=e.data)||void 0===i?void 0:i.metadata)||void 0===r?void 0:r.resourceType)&&a.createElement(u.m,null,E.C.getResourceTypeName(e.data.metadata.resourceType)),a.createElement("h3",{className:"h6 clamp-2"},e.data.name)))}w.defaultProps={preloadImage:!0,actionBehaviour:"normal"};var k=a.memo((function(e){var t=I(e.data,e.actionBehaviour),n=Object.assign(Object.assign({},e.analyticsData),e.data),c=Object.assign(Object.assign({},e.analyticsOptions),{actionType:o.Vw.Click,entity:e.data.typeId===g.E.Resource?o.py.Resource:o.py.Link});function s(){r.k.logUserAction(n,c)}var d,u=Object.assign(Object.assign({},e),{applyHoverState:t||!!e.data.url});return a.createElement("div",{className:"px-1 flex-shrink-0 ".concat(C.item," ").concat("play-page"===e.location?C.playPage:C.dashboard," ").concat(v.M.RESOURCE_ITEM_SELECTOR)},(d="d-block no-decoration","link"===e.data.type?a.createElement("a",{href:e.data.url,target:"_blank",className:d,onClick:s},a.createElement(w,Object.assign({},u))):t?"public"===e.actionBehaviour?a.createElement("div",{className:"".concat(d," cursor-pointer d-inline"),onClick:function(){s(),i.C$.trigger(e.getAppLink(e.data))}},a.createElement(w,Object.assign({},u))):a.createElement(l.F,{appLink:e.getAppLink(e.data),className:d,analyticsData:n,analyticsOptions:c},a.createElement(w,Object.assign({},u))):e.data.url?a.createElement("a",{href:e.data.url,className:d,onClick:s},a.createElement(w,Object.assign({},u))):a.createElement("div",{className:d},a.createElement(w,Object.assign({},u)))))}))},75838:(e,t,n)=>{n.d(t,{w:()=>s});var a=n(32735),i=n(92869),r=n(65858),o=n(36848),l=n(11607);const c={itemsWrapper:"m6mGm",anchorWrapper:"QptZj",default:"_AZa8",selectedItem:"Nuiel",disabled:"WIzWJ",floatIcon:"ARudn",arrowIcon:"tEF5Q",listIcon:"Ql2wi"};function s(e){var t={actionType:r.Vw.Click,entity:r.py.Widget,location:r.LZ.TableOfContents};return a.createElement("div",{className:"".concat(c.itemsWrapper)},e.items.map((function(n,r){return e.localState?a.createElement(l.L,{key:n.id,className:"".concat(c.anchorWrapper," ").concat(e.activeId===n.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(n.id),null===(t=e.onItemClick)||void 0===t||t.call(e,n)}},a.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},n.name)):a.createElement(o.F,{key:n.id,appLink:e.getAppLink(n),appLinkOptions:{replace:!0},className:"".concat(c.anchorWrapper," ").concat(e.activeId===n.id?c.selectedItem:""),onClick:function(){var t;i.t.preventScrollTop(),e.setControlledId(n.id),null===(t=e.onItemClick)||void 0===t||t.call(e,n)},analyticsData:Object.assign(Object.assign({},e.analyticsData),{id:n.id,name:n.name}),analyticsOptions:t},a.createElement("div",{className:"".concat(e.activeId||0!==r?"":c.default," ")},n.name))})))}},65332:(e,t,n)=>{n.d(t,{D:()=>r});var a,i=n(32735),r=function(e){var t=e.setActiveId,n=e.headingElements,r=e.controlledId,o=e.setControlledId,l=i.useRef(0);i.useEffect((function(){var e=new IntersectionObserver((function(e){e.forEach((function(e){if(r)return t(r),void(a=window.setTimeout((function(){o("")}),800));if(e.isIntersecting)t(e.target.id),l.current=window.scrollY;else{var i=l.current-window.scrollY>0,c=n.findIndex((function(t){return t.id===e.target.id})),s=n[c-1];i&&(null==s?void 0:s.id)&&t(null==s?void 0:s.id)}}))}),{rootMargin:"-67px 0px -80% 0px"});return n.forEach((function(t){return e.observe(t)})),function(){a&&window.clearTimeout(a),e.disconnect()}}),[t,n.length,r])}},74237:(e,t,n)=>{n.d(t,{T:()=>l});var a=n(97395),i=n(49985),r=n(65858),o=null,l={getVideoDownloadUrl:function(e,t){return a._.safeUrlConcat(a._.makeHttps(e),"/download?token=".concat(t))},downloadResource:function(e,t,n){var a,l=o;o||(l=o=document.createElement("iframe"),document.body.appendChild(l),l.style.display="none"),l.src=e.url,i.k.logUserAction(Object.assign({id:null==e?void 0:e.id,name:null==e?void 0:e.name,resourceType:null===(a=null==e?void 0:e.metadata)||void 0===a?void 0:a.resourceType},t),Object.assign({actionType:r.Vw.Download,entity:r.py.Resource,workflowPhase:r.eu.Complete},n))}}},9465:(e,t,n)=>{n.d(t,{h:()=>y});var a=n(32735),i=n(50690),r=n(49985),o=n(65858),l=n(10874),c=n(75838),s=n(83345),d=n(75795),u=n(35223),m=n(69566);const p={container:"qA4yj",aside:"j28IY",collapse:"sFoPk",iconContainer:"PYyBV",arrowIcon:"MTodB",listIcon:"W76p8"};var v="shared.playPage";function g(e){function t(){var t;e.setIsExpanded(!e.isExpanded),t={actionType:e.isExpanded?o.Vw.Hide:o.Vw.Open,entity:o.py.TableOfContents,location:o.LZ.PlayPage},r.k.logUserAction(e.analyticsData,t)}return a.createElement("div",{className:"d-flex justify-content-end"},a.createElement("div",{className:p.container},a.createElement("div",{className:"".concat(p.iconContainer)},a.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.listIcon),svgName:u.vn.TableOfContents,onClick:t}),a.createElement(l.h,{className:"btn btn-outline-dark ".concat(p.arrowIcon),svgName:e.isExpanded?u.vn.CollapseRight:u.vn.ExpandLeft,onClick:t}))))}function f(e){return a.createElement("div",{className:e.showInSide?"":"d-inline-flex gap-1"},a.createElement("aside",{className:"".concat(p.aside," position-relative ").concat(e.showInSide?"pe-1 pt-1 ":"px-3 pt-3 pb-2 border border-dark rounded-1 bg-white")},a.createElement("div",{className:p.container},e.showInSide&&a.createElement(l.h,{className:"btn position-absolute ".concat(p.collapse),svgName:u.vn.CollapseRight,onClick:function(){var t;e.setIsExpanded(!1),t={actionType:o.Vw.Hide,entity:o.py.TableOfContents,location:o.LZ.PlayPage},r.k.logUserAction(e.analyticsData,t)}}),a.createElement("h2",{className:"h5"},a.createElement(s.x,{namespace:v,phrase:"tocHeading"})),a.createElement(c.w,{items:e.items,activeId:e.activeId,getAppLink:function(e){var t=d.O.getCurrentRoute().appLink,n=t.params?Object.assign({},t.params):{};return n.tocId=e.id,Object.assign(Object.assign({},t),{params:n})},setControlledId:e.setControlledId,analyticsData:e.analyticsData,onItemClick:function(){e.showInSide||e.setIsExpanded(!1)}}))),!e.showInSide&&a.createElement(g,Object.assign({},e)))}function y(e){return a.createElement(a.Fragment,null,i.b.renderInPortalIfExists(e.isExpanded?a.createElement(f,Object.assign({},e)):a.createElement(g,Object.assign({},e)),document.getElementById(m.M)))}},53256:(e,t,n)=>{n.d(t,{d:()=>o});var a=n(23481),i=n(59598),r=a.T.encloseNamespace("shared.play"),o={getSectionHeading:function(e,t){switch(e){case i.K.Resources:return r("resourcesHeading",{count:t.resources.length});case i.K.Clips:return t.isPlayClipPage?r("otherClipsHeading",{count:t.clips.length-1}):r("clipsHeading",{count:t.clips.length});case i.K.Interactives:return r("interactivesHeading",{count:t.interactives.length});case i.K.Video:return r("videoHeading");case i.K.VideoDetails:return r("videoDetailsHeading");case i.K.RelatedVideos:return r("upNextHeading");case i.K.CurriculumLinks:return r("curriculumLinksHeading");case i.K.ClippedFrom:return r("clippedFromHeading");default:return""}}}},63010:(e,t,n)=>{n.d(t,{Q:()=>s});var a=n(32735),i=n(57900),r=n(81812);function o(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],c=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var c="play-page-toc-expanded";function s(e){var t=(0,r.a)(),n=!1!==i.SG.get(c),l=!!t&&n,s=o(a.useState(e||""),2),d=s[0],u=s[1],m=o(a.useState(""),2),p=m[0],v=m[1],g=o(a.useState(l),2),f=g[0],y=g[1];return a.useEffect((function(){y(!!t&&n)}),[t]),{controlledId:d,setControlledId:u,tableOfContentsExpanded:f,tableOfContentsActiveId:p,setTableOfContentsActiveId:v,onToggleTableOfContents:function(){y(!f),i.SG.set(c,!f)}}}},14476:(e,t,n)=>{n.d(t,{i:()=>l});var a=n(32735),i=n(59598),r=[i.K.Video,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.VideoDetails,i.K.ClippedFrom,i.K.RelatedVideos],o=[i.K.Video,i.K.VideoDetails,i.K.CurriculumLinks,i.K.Resources,i.K.Interactives,i.K.Clips,i.K.ClippedFrom,i.K.RelatedVideos];function l(e){var t=a.useRef(new Map),n=(e?r:o).map((function(e){return t.current.get(e)})).filter(Boolean);return{headingRef:t,headingElements:n}}},81812:(e,t,n)=>{n.d(t,{a:()=>i});var a=n(79967);function i(){var e=(0,a.k)();return e.lg||e.xl||e.xxl}},63847:(e,t,n)=>{n.d(t,{Z:()=>a});const a={learningIntention:"MHM6O",highlightPoi:"U7Q6x",icon:"H1xbT"}}}]);
|
|
2
|
-
//# sourceMappingURL=6587-ba8e36be0b-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6587-ba8e36be0b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/react/utils/PortalHelper.ts","file:///app/packages/libs/shared/src/components/copyright-disclaimer/copyright-disclaimer.scss","file:///app/packages/libs/shared/src/components/copyright-disclaimer/CopyrightDisclaimer.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/ClipWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/clips-widget/PlayPageClips.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/details/video-details.scss","file:///app/packages/libs/shared/src/components/play-page-v2/details/VideoDetailsV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceUtilsV2.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/points-of-interest-list.scss","file:///app/packages/libs/shared/src/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/glance/VideoAtAGlanceV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/InteractiveWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/interactives-widget/PlayPageInteractives.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/PlayPageResources.tsx","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/resource-widget-item.scss","file:///app/packages/libs/shared/src/components/play-page-v2/resources-widget/ResourceWidgetItemV2.tsx","file:///app/packages/libs/shared/src/components/table-of-contents-list/table-of-contents-list.scss","file:///app/packages/libs/shared/src/components/table-of-contents-list/TableOfContentsList.tsx","file:///app/packages/libs/shared/src/hooks/useTableOfContentsActiveHeading.tsx","file:///app/packages/libs/shared/src/utils/DownloadHelper.ts","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/table-of-contents.scss","file:///app/packages/projects/lite/src/shared/components/play-page/components/table-of-contents/TableOfContents.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayPageUtilV2.tsx","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/usePlayPageTableOfContent.ts","file:///app/packages/projects/lite/src/shared/constants/PlayPageSectionsOrder.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useSectionHeadings.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/hooks/useShouldShowTableOfContents.ts","file:///app/packages/libs/shared/src/components/play-page-v2/glance/video-at-a-glance.scss"],"sourcesContent":["import React from 'react';\nimport { createPortal } from 'react-dom';\n\nexport const PortalHelper = {\n renderInPortalIfExists(component: React.ReactElement, portalContainer: Element | null): React.ReactElement {\n if (portalContainer)\n return createPortal(component, portalContainer);\n\n return component;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"copyrightDisclaimer\":\"z8YoI\",\"overlayContainer\":\"eJDbJ\"};","import React from 'react';\nimport { Overlay } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\n\nimport styles from './copyright-disclaimer.scss';\n\nconst namespace = 'shared.copyrightDisclaimer';\n\nconst CONTAINER_HEIGHT = 150; // px\n\ninterface CopyrightDisclaimerProps {\n placement: Placement;\n overflowPlacement?: Placement;\n className?: string;\n}\n\nexport function CopyrightDisclaimer(props: CopyrightDisclaimerProps) {\n const [ ref, isHovering ] = useHoverIntent<HTMLDivElement>({});\n\n function preventOverflow() {\n const spaceBelow = document.documentElement.clientHeight - ref.current?.getBoundingClientRect().bottom;\n\n return spaceBelow < CONTAINER_HEIGHT;\n }\n\n return (\n <div ref={ref} className={props.className}>\n <p className={`${styles.copyrightDisclaimer} mb-1`}><Text namespace={namespace} phrase='copyrightDisclaimer' /></p>\n <Overlay\n target={ref.current}\n show={isHovering}\n placement={props.overflowPlacement && preventOverflow() ? props.overflowPlacement : props.placement}\n >\n <div className={`${styles.overlayContainer} mw-100 bg-white border rounded-3 p-2`}>\n <p><Text namespace={namespace} phrase='warning' /></p>\n <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='sharing' /></p>\n </div>\n </Overlay>\n </div>\n );\n}","import React from 'react';\n\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, YearGroup } from 'libs/shared/interfaces';\n\nexport interface ClipWidgetItemV2Props extends FixedWidgetItemProps<Clip> {\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n audiences: PresentationAudience[];\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const ClipWidgetItemV2 = React.memo(function(props: ClipWidgetItemV2Props): JSX.Element {\n const { data: clip, thumbnailSize, preloadImage, getAppLink } = props;\n const mergedAudience = useMergeAudiences(clip.subjectPresentationAudiences?.data, props.audiences);\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={clip}\n appLink={getAppLink(clip)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n imageCdnUrl={props.imageCdnUrl}\n audience={mergedAudience}\n hideDuration={false}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={clip}\n appLink={props.getAppLink(clip)}\n />\n </div>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClipWidgetItemV2, ClipWidgetItemV2Props } from './ClipWidgetItemV2';\n\nconst namespace = 'shared.playPageClipsV2';\n\ninterface PlayPageClipsProps {\n video: Video | Clip;\n clips: Clip[];\n canViewClips: boolean;\n yearGroups: YearGroup[];\n audiences: PresentationAudience[];\n imageCdnUrl: string;\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n analyticsData: HashObject;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n isPlugin: boolean;\n}\n\nexport function PlayPageClips(props: PlayPageClipsProps): JSX.Element {\n if (!props.canViewClips || !props.clips?.length)\n return <></>;\n\n const parentIsVideo = VideoHelper.isVideo(props.video);\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video)) {\n return {\n action: Actions.Videos.VIDEO_CLIPS,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n return {\n action: Actions.Clips.CLIP_CLIPS,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(\n namespace,\n parentIsVideo ? 'clips' : 'otherClips',\n { count: props.clips.length }\n );\n\n return (\n <section\n className='play-page-section'\n id={PlayPageAnchor.Clips}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Clips, el);\n }}\n >\n <FixedWidget<ClipWidgetItemV2Props>\n name={title}\n contents={WidgetContents.ClipsV2}\n collection={props.clips}\n prefetched\n getChildAppLink={(clip: Clip) => {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ clip.id, TextHelper.slugify(clip.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={ClipWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n audiences: props.audiences,\n imageCdnUrl: props.imageCdnUrl,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"descriptionBorder\":\"YUC62\"};","import * as React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CopyrightDisclaimer } from 'libs/shared/components/copyright-disclaimer/CopyrightDisclaimer';\nimport { ImmersiveReader } from 'libs/shared/components/immersive-reader/ImmersiveReader';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { hasPPDD } from 'libs/shared/components/video-details/VideoDetailsUtils';\nimport { MINIMUM_GLANCE_HEIGHT } from 'libs/shared/constants/MinimumGlanceHeight';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { BaseObject, BasePaginatedCollection, Tag, VideoTypes } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './video-details.scss';\n\nconst namespace = 'shared.videoDetailsV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CommaListProps {\n label: string;\n items: BasePaginatedCollection<BaseObject>;\n className?: string;\n}\n\nfunction CommaList(props: CommaListProps): React.ReactElement {\n const { label, items, className } = props;\n\n const hasItems = items && items.data && items.data.length;\n\n if (!hasItems)\n return <></>;\n\n const commaSeperated = items.data.map(i => i.name).join(', ');\n\n return (\n <div className={className}>{label}: {commaSeperated}</div>\n );\n}\n\nfunction DetailsSection(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video } = props;\n\n if (!VideoHelper.isVideo(video) && !VideoHelper.isClip(video))\n return <></>;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n return (\n <div className={video.description ? 'col-md-5 ps-md-3 pt-3 pt-md-0' : 'col-12'}>\n <h2 className='h6 mb-1'><Text phrase='details' /></h2>\n {!!parentVideo.productionYear && (\n <div className='mb-1'>\n <Text phrase='productionYear' options={{ year: parentVideo.productionYear }} />\n </div>\n )}\n <CommaList\n label={getPhrase('productionCompanies', { smartCount: parentVideo.productionCompanies?.data?.length })}\n items={parentVideo.productionCompanies}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('distributors', { smartCount: parentVideo.distributors?.data?.length })}\n items={parentVideo.distributors}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('producers', { smartCount: parentVideo.producers?.data?.length })}\n items={parentVideo.producers}\n className='mb-1'\n />\n <CommaList\n label={getPhrase('directors', { smartCount: parentVideo.directors?.data?.length })}\n items={parentVideo.directors}\n className='mb-1'\n />\n {!!parentVideo.dateBroadcast && (\n <div className='mb-1'>\n <Text phrase='dateBroadcast' options={{ date: DateHelper.format(parentVideo.dateBroadcast, 'DD/MM/YYYY') }} />\n </div>\n )}\n {!!parentVideo.channel && (\n <div className='mb-1'>\n <Text phrase='channel' options={{ channel: parentVideo.channel.name }} />\n </div>\n )}\n {!!(!video._isClickViewCurated?.value && video.dateCreated) && (\n <div className='mb-1'>\n <Text phrase='dateUploaded' options={{ date: DateHelper.format(video.dateCreated, 'DD/MM/YYYY') }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface VideoDetailsWithScrollbarV2Props {\n video: VideoTypes;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onLaunchImmersiveReader?: () => void;\n onExitImmersiveReader?: () => void;\n maxHeight?: number;\n suppressInteractivity?: boolean;\n hideTags?: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function VideoDetailsWithScrollbarV2(props: VideoDetailsWithScrollbarV2Props): React.ReactElement {\n const { video, maxHeight = MINIMUM_GLANCE_HEIGHT } = props;\n\n const parentVideo = VideoHelper.getParentVideo(video);\n\n const showDescription = !!props.video.description;\n\n const showDetails = (\n hasPPDD(props.video) ||\n !!parentVideo.productionYear ||\n !!parentVideo.dateBroadcast ||\n !!parentVideo.channel ||\n !!(video.dateCreated && !video._isClickViewCurated?.value)\n );\n\n if (!showDescription && !showDetails)\n return <></>;\n\n function getTags(): Tag[] {\n if (props.hideTags || VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Normal);\n }\n const tags = getTags();\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <section\n id={PlayPageAnchor.VideoDetails}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.VideoDetails, el);\n }}\n className='play-page-section'\n >\n <div className='rounded border p-3 position-relative'>\n <Scrollbars autoHeight autoHeightMax={maxHeight}>\n <div className='row g-0'>\n {showDescription && (\n <div className={showDetails ? `${styles.descriptionBorder} pe-3 col-md-7` : 'col-12'}>\n <div className='d-flex align-items-center'>\n <h2 className='h6 mb-1'>\n <Text phrase='description' />\n </h2>\n <ImmersiveReader\n text={video.description}\n title={video.name}\n className='ps-2'\n onLaunch={props.onLaunchImmersiveReader}\n onExit={props.onExitImmersiveReader}\n analyticsOptions={{\n location: LocationContext.PlayPage,\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: ClickDescriptor.LaunchImmersiveReader\n }}\n analyticsData={{ id: video.id, type: 'description' }}\n />\n </div>\n <p className='mb-0' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.video.description, { nl2br: true }) }} />\n </div>\n )}\n\n {showDetails && (\n <DetailsSection {...props} />\n )}\n </div>\n\n {!!tags?.length && (\n <div className='mt-3'>\n <h2 className='h6 mb-1'><Text phrase='normalTags' /></h2>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, null, props.suppressInteractivity)}\n className='mt-1'\n />\n </div>\n )}\n\n {VideoHelper.isBroadcast(props.video) && <CopyrightDisclaimer placement='bottom-start' className='d-flex justify-content-start mt-2 mb-n1' />}\n\n </Scrollbars>\n </div>\n </section>\n </LanguageNamespaceContext.Provider>\n );\n}","import { MutableRefObject, useEffect, useRef, useState } from 'react';\nimport * as marked from 'marked';\n\nimport { useEventsServiceSubscribe } from 'libs/common/react/hooks/UseEventsServiceSubscribe';\nimport { EventsService } from 'libs/common/react/services/EventsService';\n\nimport { Clip, Glance, PointOfInterest, Video } from 'libs/shared/interfaces';\n\nimport styles from './video-at-a-glance.scss';\n\nconst POI_LINK_LINE = /\\[\\]\\(cv:\\/\\/poi\\?id=\\d+\\)\\n*/g;\n\nfunction stripPoisFromGlanceContent(glanceContent: string): string {\n return glanceContent.replace(POI_LINK_LINE, '');\n}\n\nfunction getLearningIntentionHTML(glance: Glance): string {\n const learningIntention = stripPoisFromGlanceContent(glance.content);\n\n return marked(learningIntention);\n}\n\nexport function useLearningIntentionMarkdown(\n video: Video,\n hasGlanceData?: boolean\n): string {\n const [ markdownHTML, setMarkdownHTML ] = useState('');\n\n useEffect(() => {\n if (!hasGlanceData)\n return;\n\n const content = getLearningIntentionHTML(video.glance);\n\n setMarkdownHTML(content);\n }, [ video.glance?.content, hasGlanceData ]);\n\n return markdownHTML;\n}\n\nexport function hasGlanceData(video: Video | Clip): boolean {\n return video.glance?.content && video.glance?.format === 'text/markdown';\n}\n\nexport function useHighlightPointOfInterest(\n pointOfInterest: PointOfInterest,\n shouldHighlight: boolean\n): MutableRefObject<HTMLDivElement> {\n const ref = useRef<HTMLDivElement>();\n\n useEventsServiceSubscribe('player:poi:mouseover', onPlayerPoiMouseOver, null, shouldHighlight);\n useEventsServiceSubscribe('player:poi:mouseleave', onPlayerPoiMouseLeave, null, shouldHighlight);\n\n useEffect(() => {\n if (!ref.current || !shouldHighlight)\n return;\n\n ref.current?.addEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.addEventListener('mouseleave', onGlancePoiMouseLeave);\n\n return () => {\n ref.current?.removeEventListener('mouseover', onGlancePoiMouseOver);\n ref.current?.removeEventListener('mouseleave', onGlancePoiMouseLeave);\n };\n }, [ref.current]);\n\n function onPlayerPoiMouseOver(hoveredPoi: PointOfInterest): void {\n if (!hoveredPoi?.id || pointOfInterest?.id?.toString() !== hoveredPoi?.id?.toString())\n return;\n\n ref.current?.classList.add(styles.highlightPoi);\n }\n\n function onPlayerPoiMouseLeave(): void {\n ref.current?.classList.remove(styles.highlightPoi);\n }\n\n /**\n * `this` will be the element to which the eventListener is bound.\n */\n function onGlancePoiMouseOver(): void {\n if (pointOfInterest)\n EventsService.trigger('glance:poi:mouseover', pointOfInterest);\n }\n\n function onGlancePoiMouseLeave(): void {\n EventsService.trigger('glance:poi:mouseleave');\n }\n\n return ref;\n}","// extracted by mini-css-extract-plugin\nexport default {\"poiEntry\":\"vr6R9\",\"poiText\":\"znHZF\",\"public\":\"v0BZ9\",\"poiTimeStamp\":\"AdKwe\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PointOfInterest } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\n\nimport { useHighlightPointOfInterest } from '../VideoAtAGlanceUtilsV2';\n\nimport styles from './points-of-interest-list.scss';\n\ninterface PointOfInterestProps {\n poi: PointOfInterest;\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void;\n}\n\nfunction PointOfInterest(props: PointOfInterestProps): JSX.Element {\n const timeStamp = DurationHelper.ToDisplayDuration(props.poi.startTime * 1000);\n\n const ref = useHighlightPointOfInterest(props.poi, !props.suppressInteractivity);\n\n if (props.suppressInteractivity) {\n return (\n <div className={`d-flex ${styles.poiEntry} mb-2`}>\n <span className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</span>\n <div className={`${styles.public} ms-2`}>{props.poi.description}</div>\n </div>\n );\n }\n\n return (\n <DivButton\n key={props.poi.startTime}\n className={`d-flex ${styles.poiEntry} mb-2 cursor-pointer`}\n onClick={() => props.onClickPoiItem(props.poi.startTime)}\n ref={ref}\n >\n <div className={`d-flex rounded-pill justify-content-center align-items-center fw-semibold text-info bg-light-blue ${styles.poiTimeStamp}`}>{timeStamp}</div>\n <div className={`ms-2 ${styles.poiText}`}>{props.poi.description}</div>\n </DivButton>\n );\n}\n\ninterface PointOfInterestListProps{\n pointsOfInterest: PointOfInterest[];\n suppressInteractivity?: boolean;\n onClickPoiItem: (time: number) => void\n}\n\nconst namespace = 'shared.pointsOfInterestList';\n\nexport function PointOfInterestList(props: PointOfInterestListProps) {\n return (\n <div>\n <h2 className='h6 my-2'><Text namespace={namespace} phrase='heading' /></h2>\n\n <div>\n {props.pointsOfInterest.map(poi => {\n return (\n <PointOfInterest\n key={poi.startTime}\n poi={poi}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={props.onClickPoiItem}\n />\n );\n })}\n\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PointOfInterestList } from 'libs/shared/components/play-page-v2/glance/points-of-interest-list/PointsOfInterestList';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TagHelper } from 'libs/shared/components/tags/TagHelper';\nimport { TagList } from 'libs/shared/components/tags/TagList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { PointOfInterest, Tag, Video } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useLearningIntentionMarkdown } from './VideoAtAGlanceUtilsV2';\n\nimport styles from './video-at-a-glance.scss';\n\nconst namespace = 'shared.videoAtAGlanceV2';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 350; // in px\n\ninterface ScrollbarWrapperProps {\n hideScrollbar?: boolean;\n}\n\nfunction ScrollbarWrapper(props: React.PropsWithChildren<ScrollbarWrapperProps>): JSX.Element {\n if (props.hideScrollbar)\n return <>{props.children}</>;\n\n return (\n <div className='rounded border mb-4 bg-white'>\n <Scrollbars\n autoHeight\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 px-3 pt-3 pb-2'>\n {props.children}\n </div>\n </Scrollbars>\n </div>\n );\n}\n\ninterface VideoAtAGlanceV2Props {\n video: Video;\n pointsOfInterest?: PointOfInterest[];\n suppressInteractivity?: boolean;\n setStartTime?: (time: number) => void;\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n onClickTag?: () => void;\n hideScrollbar?: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoAtAGlanceV2(props: VideoAtAGlanceV2Props): JSX.Element {\n const learningIntentionMarkdownHTML = useLearningIntentionMarkdown(props.video, props.canViewGlance);\n const [ textToCopy, setTextToCopy ] = React.useState('');\n\n function logUserAction(): void {\n const analyticsData = {\n id: props.video.glance.id,\n videoId: props.video.id,\n videoName: props.video.name,\n learningIntention: textToCopy\n };\n\n const analyticsOptions = {\n actionType: UserAction.Copy,\n entity: EntityType.Glance,\n location: LocationContext.PlayPage\n };\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n function getTags(): Tag[] {\n if (VideoHelper.isInteractive(props.video) || !props.video.tags?.data?.length)\n return null;\n\n return props.video.tags?.data?.filter(tag => tag.tagType === TagType.Pedagogy || tag.tagType === TagType.Skill);\n }\n const tags = getTags();\n\n const ref = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (ref.current?.innerText)\n setTextToCopy(ref.current.innerText);\n }, [ref.current?.innerText]);\n\n if (!props.canViewGlance)\n return <></>;\n\n function onClickPoiItem(time: number) {\n props.setStartTime(time);\n }\n\n return (\n <section className='play-page-section'>\n <ScrollbarWrapper hideScrollbar={props.hideScrollbar}>\n <h2 className='h6 mb-2'><Text namespace={namespace} phrase='learningIntention' /></h2>\n \n <div className={`mb-3 ${styles.learningIntention}`}>\n <Tooltip title={getPhrase('copy')} spanHack spanHackClassName={styles.icon}>\n <CopyToClipboard text={textToCopy}>\n <SvgContainer\n className='svg-container me-1 cursor-pointer'\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Small}\n onClick={logUserAction}\n />\n </CopyToClipboard>\n </Tooltip>\n \n <div\n dangerouslySetInnerHTML={{ __html: learningIntentionMarkdownHTML }}\n className='d-inline'\n ref={ref}\n >\n </div>\n </div>\n\n {!!tags?.length && (\n <div className='mb-1'>\n <TagList\n tags={tags}\n {...TagHelper.getTagActionProps(props.getTagAppLink, props.onClickTag, props.suppressInteractivity)}\n className='mt-2'\n />\n </div>\n )}\n\n {!!props.pointsOfInterest.length && (\n <PointOfInterestList\n pointsOfInterest={props.pointsOfInterest}\n suppressInteractivity={props.suppressInteractivity}\n onClickPoiItem={onClickPoiItem}\n />\n )}\n </ScrollbarWrapper>\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ThumbnailText } from 'libs/shared/components/thumbnails/thumbnail-text/ThumbnailText';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.interactiveWidgetItemV2';\n\nexport interface InteractiveWidgetItemV2Props extends FixedWidgetItemProps<InteractiveMetadata> {\n imageCdnUrl: string;\n questionsAppLink: Core.AppLink;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n yearGroups: YearGroup[];\n isPlugin: boolean;\n showOwner?: boolean;\n}\n\nexport const InteractiveWidgetItemV2 = React.memo(function(props: InteractiveWidgetItemV2Props): JSX.Element {\n const { data: interactive, thumbnailSize, preloadImage } = props;\n\n const questionsAppLink: Core.AppLink = {\n ...props.questionsAppLink,\n args: [props.data.id]\n };\n\n const questionsNumber = interactive._timepoints?.value?.length;\n\n return (\n <div className={`flex-shrink-0 px-1 col-6 col-sm-4`}>\n <VideoThumbnail\n type='static'\n textPosition={ThumbnailTextPosition.Independent}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n imageOptions={{ size: thumbnailSize }}\n preload={preloadImage}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n hideDuration={false}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n showOwner={props.showOwner}\n />\n\n <div className='mt-2'>\n <ThumbnailText\n {...props}\n video={interactive}\n appLink={props.getAppLink(interactive)}\n />\n </div>\n\n <div className='mt-1'>\n <AppLink appLink={questionsAppLink} className='cursor-pointer'>\n <Text namespace={namespace} phrase='previewQuestions' options={{ count: questionsNumber, smartCount: questionsNumber }}/>\n </AppLink>\n </div>\n\n </div>\n );\n});\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { CanFavouriteFunc, Clip, FavouriteFunc, Interactive, InteractiveMetadata, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { InteractiveWidgetItemV2, InteractiveWidgetItemV2Props } from './InteractiveWidgetItemV2';\n\nconst namespace = 'shared.playPageInteractivesV2';\n\ninterface PlayPageInteractivesProps {\n canViewInteractives: boolean;\n video: Video | Clip;\n interactives: InteractiveMetadata[];\n imageCdnUrl: string;\n analyticsData: HashObject;\n yearGroups: YearGroup[];\n setFavourite: FavouriteFunc;\n canFavourite: CanFavouriteFunc;\n isPlugin: boolean;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageInteractives(props: PlayPageInteractivesProps): JSX.Element {\n if (!props.canViewInteractives || !props.interactives?.length)\n return <></>;\n\n function getAppLink() {\n if (VideoHelper.isVideo(props.video))\n return {\n action: Actions.Videos.VIDEO_INTERACTIVES,\n application: AppChannels.VIDEOS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n\n return {\n action: Actions.Clips.CLIP_INTERACTIVES,\n application: AppChannels.CLIPS,\n args: [ props.video.id, TextHelper.slugify(props.video.name) ]\n };\n }\n\n const title = LanguageService.getPhrase(namespace, 'interactives', { count: props.interactives.length });\n \n return (\n <section className='play-page-section'\n id={PlayPageAnchor.Interactives}\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Interactives, el);\n }}\n >\n <FixedWidget<InteractiveWidgetItemV2Props>\n name={title}\n contents={WidgetContents.InteractivesV2}\n collection={props.interactives}\n prefetched\n getChildAppLink={(interactive: Interactive) => {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ interactive.id, TextHelper.slugify(interactive.name) ]\n };\n }}\n appLink={getAppLink()}\n childComponent={InteractiveWidgetItemV2}\n extraChildComponentProps={{\n yearGroups: props.yearGroups,\n setFavourite: props.setFavourite,\n canFavourite: props.canFavourite,\n imageCdnUrl: props.imageCdnUrl,\n questionsAppLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS\n },\n isPlugin: props.isPlugin,\n showOwner: true\n }}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { DownloadHelper } from 'libs/shared/utils/DownloadHelper';\n\nimport { ResourceWidgetItemV2, ResourceWidgetItemV2Props } from './ResourceWidgetItemV2';\n\nconst namespace = 'shared.playPageResources';\n\nfunction getResources(\n video: Video,\n isLearner: boolean\n): Array<Resource | Link> {\n const resources = video.resources?.data ?? [];\n const links = video.links?.data ?? [];\n\n if (!isLearner)\n return [ ...resources, ...links ];\n\n const filteredResources = resources.filter(r => {\n return [ 'additional-materials', 'student-activity' ].includes(r.metadata?.resourceType);\n });\n\n return [ ...filteredResources, ...links ];\n}\n\ninterface PlayPageResourcesProps {\n video: Video | Clip;\n imageCdnUrl: string;\n canViewResources: boolean;\n getAppLink: (resource: Resource) => Core.AppLink;\n analyticsData: HashObject;\n resourceThumbnailFallbackUrl: string;\n headingRef?: React.MutableRefObject<Map<PlayPageAnchor, HTMLElement>>;\n}\n\nexport function PlayPageResources(props: PlayPageResourcesProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n function onClickDownload(resource: Resource): void {\n DownloadHelper.downloadResource(\n resource,\n props.analyticsData,\n { location: LocationContext.PlayPage, actionType: UserAction.Download, entity: EntityType.Resource }\n );\n }\n\n const resources = getResources(props.video, hasPermissions(PermissionName.StudentExperience));\n const title = LanguageService.getPhrase(namespace, 'resources', { count: resources.length });\n\n if (!resources.length)\n return <></>;\n\n return (\n <section\n id={PlayPageAnchor.Resources}\n className='play-page-section'\n ref={el => {\n (el && props.headingRef?.current) && props.headingRef.current.set(PlayPageAnchor.Resources, el);\n }}\n >\n <FixedWidget<ResourceWidgetItemV2Props>\n name={title}\n contents={WidgetContents.PlayPageResourcesV2}\n collection={resources}\n prefetched\n childComponent={ResourceWidgetItemV2}\n extraChildComponentProps={{\n imageCdnUrl: props.imageCdnUrl,\n imageErrorFallbackUrl: props.resourceThumbnailFallbackUrl,\n actionBehaviour: props.canViewResources ? 'normal' : 'public',\n location: 'play-page',\n titlePosition: 'below',\n onClickDownload: props.canViewResources ? onClickDownload : null\n }}\n getChildAppLink={props.getAppLink}\n analyticsOptions={(() => {\n if (props.canViewResources)\n return {};\n \n return {\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n };\n })()}\n analyticsData={props.analyticsData}\n />\n </section>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"imageStyle\":\"bYRn8\",\"item\":\"CjuxU\",\"dashboard\":\"IuRN0\",\"playPage\":\"VdJvp\",\"aspectRatio\":\"QK8Jh\",\"outerContainer\":\"eiC_H\",\"innerContainer\":\"huIRg\",\"actions\":\"FsIJm\",\"titleBelow\":\"DpeSr\",\"thumbnailContainer\":\"ZbalL\",\"titleAbove\":\"PwOSX\",\"teacherPack\":\"ZHAEj\",\"text\":\"k3ei6\",\"hoverState\":\"BLrWL\",\"atomGuide\":\"Qz8JE\",\"studentActivity\":\"qNspk\",\"additionalMaterials\":\"R0huw\",\"userUploaded\":\"H_zGf\",\"imageTypeResource\":\"AgeLb\",\"download\":\"DKneu\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './resource-widget-item.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svgName={cvSvgLibrary.Download} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-1 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, ...props.data };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"itemsWrapper\":\"m6mGm\",\"anchorWrapper\":\"QptZj\",\"default\":\"_AZa8\",\"selectedItem\":\"Nuiel\",\"disabled\":\"WIzWJ\",\"floatIcon\":\"ARudn\",\"arrowIcon\":\"tEF5Q\",\"listIcon\":\"Ql2wi\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\n\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport styles from './table-of-contents-list.scss';\n\nexport interface TableOfContentsItem<T=string> {\n name: string;\n id: T;\n}\n\ninterface TableOfContentsProps<T> {\n items: TableOfContentsItem<T>[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n // set to true if the TOC is controlled by a local state rather than query params\n localState?: boolean;\n getAppLink?: (args: TableOfContentsItem<T>) => Core.AppLink;\n onItemClick?: (args: TableOfContentsItem<T>) => void;\n}\n\nexport function TableOfContentsList<T extends string>(props: TableOfContentsProps<T>): JSX.Element {\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Widget,\n location: LocationContext.TableOfContents\n };\n\n return (\n <div className={`${styles.itemsWrapper}`}>\n {props.items.map((item, idx) => {\n if (props.localState) {\n return (\n <DivButton\n key={item.id}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </DivButton>\n );\n }\n\n return (\n <AppLink\n key={item.id}\n appLink={props.getAppLink(item)}\n appLinkOptions={{ replace: true }}\n className={`${styles.anchorWrapper} ${props.activeId === item.id ? styles.selectedItem : ''}`}\n onClick={() => {\n ScrollHelper.preventScrollTop();\n props.setControlledId(item.id);\n\n props.onItemClick?.(item);\n }}\n analyticsData={{\n ...props.analyticsData,\n id: item.id,\n name: item.name\n }}\n analyticsOptions={analyticsOptions}\n >\n <div className={`${!props.activeId && idx === 0 ? styles.default : ''} `}>\n {item.name}\n </div>\n </AppLink>\n );\n })}\n </div>\n );\n}","import React from 'react';\n\ntype TableOfContentsActiveOption = {\n setActiveId: (id: string) => void;\n headingElements: Element[];\n controlledId?: string;\n setControlledId?: (arg: string) => void;\n}\n\nlet timer: number;\n\nexport const useTableOfContentsActiveHeading = (\n { setActiveId, headingElements, controlledId, setControlledId }: TableOfContentsActiveOption\n) => {\n const scrollPositionRef = React.useRef(0);\n\n React.useEffect(() => {\n const callback = (headings: IntersectionObserverEntry[]) => {\n headings.forEach(heading => {\n if (controlledId) {\n setActiveId(controlledId);\n // can use scrollEnd event when the new event type is supported\n timer = window.setTimeout(() => {\n setControlledId('');\n }, 800);\n return;\n }\n if (heading.isIntersecting) {\n setActiveId(heading.target.id);\n scrollPositionRef.current = window.scrollY;\n } else {\n const scrollDistance = scrollPositionRef.current - window.scrollY;\n const isScrollingUp = scrollDistance > 0;\n const curIndex = headingElements.findIndex(h => h.id === heading.target.id);\n const prevHeading = headingElements[curIndex - 1];\n if (isScrollingUp && prevHeading?.id) {\n setActiveId(prevHeading?.id);\n }\n }\n });\n };\n\n const observer = new IntersectionObserver(callback, {\n // rootMargin top: same as the cv-nav-height\n rootMargin: '-67px 0px -80% 0px'\n });\n\n headingElements.forEach(element => observer.observe(element));\n\n return () => {\n timer && window.clearTimeout(timer);\n observer.disconnect();\n };\n }, [ setActiveId, headingElements.length, controlledId ]);\n};\n\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Resource } from '../interfaces';\n\nlet downloadRef: HTMLIFrameElement = null;\n\nexport const DownloadHelper = {\n getVideoDownloadUrl(downloadProxyUrl: string, token: string): string {\n return UrlHelper.safeUrlConcat(UrlHelper.makeHttps(downloadProxyUrl), `/download?token=${token}`);\n },\n\n downloadResource(\n resource: Resource,\n analyticsData: HashObject,\n analyticsOptions: AnalyticsOptions\n ): void {\n let iframe = downloadRef;\n\n if (!downloadRef) {\n iframe = downloadRef = document.createElement('iframe');\n document.body.appendChild(iframe);\n\n iframe.style.display = 'none';\n }\n\n iframe.src = resource.url;\n\n AnalyticsHelper.logUserAction({\n id: resource?.id,\n name: resource?.name,\n resourceType: resource?.metadata?.resourceType,\n ...analyticsData\n }, {\n actionType: UserAction.Download,\n entity: EntityType.Resource,\n workflowPhase: WorkflowPhase.Complete,\n ...analyticsOptions\n });\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"qA4yj\",\"aside\":\"j28IY\",\"collapse\":\"sFoPk\",\"iconContainer\":\"PYyBV\",\"arrowIcon\":\"MTodB\",\"listIcon\":\"W76p8\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { PLAY_PAGE_TOC_PORTAL_ID } from 'shared/layouts/teacher-layout/TeacherLayoutComponent';\n\nimport styles from './table-of-contents.scss';\n\nconst namespace = 'shared.playPage';\n\nexport interface TableOfContentsItem {\n name: string;\n id: PlayPageAnchor;\n}\n\ninterface TableOfContentsProps {\n items: TableOfContentsItem[];\n activeId: string;\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isExpanded: boolean;\n setIsExpanded: (arg: boolean) => void;\n showInSide: boolean;\n}\n\nfunction TableOfContentsIcon(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: !props.isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n props.setIsExpanded(!props.isExpanded);\n logUserAction();\n }\n\n return (\n <div className='d-flex justify-content-end'>\n <div className={styles.container}>\n <div className={`${styles.iconContainer}`} >\n <IconButton\n className={`btn btn-outline-dark ${styles.listIcon}`}\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n \n <IconButton\n className={`btn btn-outline-dark ${styles.arrowIcon}`}\n svgName={!props.isExpanded ? cvSvgLibrary.ExpandLeft : cvSvgLibrary.CollapseRight}\n onClick={onClickIcon}\n />\n </div>\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps) {\n function logUserAction() {\n const analyticsOptions = {\n actionType: UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.PlayPage\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function getAppLink(item: any): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n\n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = item.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n function onClickTableOfContentsHeading() {\n if (!props.showInSide) {\n // in mobile version, collapse once user hit the TOC item\n props.setIsExpanded(false);\n }\n }\n\n return (\n <div className={!props.showInSide ? 'd-inline-flex gap-1' : ''}>\n <aside className={`${styles.aside} position-relative ${!props.showInSide ? 'px-3 pt-3 pb-2 border border-dark rounded-1 bg-white' : 'pe-1 pt-1 '}`}>\n <div className={styles.container}>\n {props.showInSide && (\n <IconButton\n className={`btn position-absolute ${styles.collapse}`}\n svgName={cvSvgLibrary.CollapseRight}\n onClick={() => {\n props.setIsExpanded(false);\n logUserAction();\n }}\n />\n )}\n <h2 className='h5'><Text namespace={namespace} phrase='tocHeading' /></h2>\n \n <TableOfContentsList\n items={props.items}\n activeId={props.activeId}\n getAppLink={getAppLink}\n setControlledId={props.setControlledId}\n analyticsData={props.analyticsData}\n onItemClick={() => onClickTableOfContentsHeading()}\n />\n </div>\n \n </aside>\n {/* in mobile version, always show icon on the right */}\n {!props.showInSide && <TableOfContentsIcon {...props}/>}\n </div>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsProps): JSX.Element {\n return (\n <>\n {PortalHelper.renderInPortalIfExists(\n props.isExpanded\n ? <TableOfContents {...props} />\n : <TableOfContentsIcon {...props}/>,\n document.getElementById(PLAY_PAGE_TOC_PORTAL_ID)\n )}\n </>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Clip, InteractiveMetadata, Resource } from 'libs/shared/interfaces';\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\ninterface SectionHeadingOptions{\n clips: Clip[];\n interactives: InteractiveMetadata[];\n resources: Resource[];\n isPlayClipPage?: boolean;\n}\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const PlayPageUtils = {\n getSectionHeading(id: PlayPageAnchor, options: SectionHeadingOptions) {\n switch (id) {\n case PlayPageAnchor.Resources:\n return getPhrase('resourcesHeading', { count: options.resources.length });\n\n case PlayPageAnchor.Clips:\n if (options.isPlayClipPage)\n return getPhrase('otherClipsHeading', { count: options.clips.length - 1 });\n return getPhrase('clipsHeading', { count: options.clips.length });\n\n case PlayPageAnchor.Interactives:\n return getPhrase('interactivesHeading', { count: options.interactives.length });\n\n case PlayPageAnchor.Video:\n return getPhrase('videoHeading');\n\n case PlayPageAnchor.VideoDetails:\n return getPhrase('videoDetailsHeading');\n\n case PlayPageAnchor.RelatedVideos:\n return getPhrase('upNextHeading');\n \n case PlayPageAnchor.CurriculumLinks:\n return getPhrase('curriculumLinksHeading');\n \n case PlayPageAnchor.ClippedFrom:\n return getPhrase('clippedFromHeading');\n\n default:\n return '';\n }\n }\n\n};","import React from 'react';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nconst PLAY_PAGE_TOC_EXPANDED = 'play-page-toc-expanded';\n\nexport function usePlayPageTableOfContent(tocId: string) {\n const showInSide = useShouldShowSideTableOfContents();\n\n const localValue = LocalStorageHelper.get(PLAY_PAGE_TOC_EXPANDED) !== false;\n const tocDefaultExpanded = !showInSide ? false : localValue;\n\n const [ controlledId, setControlledId ] = React.useState(tocId || '');\n const [ tableOfContentsActiveId, setTableOfContentsActiveId ] = React.useState<string>('');\n const [ tableOfContentsExpanded, setTableOfContentsExpanded ] = React.useState(tocDefaultExpanded);\n \n React.useEffect(() => {\n if (!showInSide) {\n // automatically collpase on mobile version\n setTableOfContentsExpanded(false);\n } else {\n setTableOfContentsExpanded(localValue);\n }\n }, [showInSide]);\n\n function onToggleTableOfContents() {\n setTableOfContentsExpanded(!tableOfContentsExpanded);\n LocalStorageHelper.set(PLAY_PAGE_TOC_EXPANDED, !tableOfContentsExpanded);\n }\n\n return {\n controlledId,\n setControlledId,\n tableOfContentsExpanded,\n tableOfContentsActiveId,\n setTableOfContentsActiveId,\n onToggleTableOfContents\n };\n}","import { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nexport const PLAY_PAGE_SECTIONS_ORDER = [\n PlayPageAnchor.Video,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];\n\nexport const PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE = [\n PlayPageAnchor.Video,\n PlayPageAnchor.VideoDetails,\n PlayPageAnchor.CurriculumLinks,\n PlayPageAnchor.Resources,\n PlayPageAnchor.Interactives,\n PlayPageAnchor.Clips,\n PlayPageAnchor.ClippedFrom,\n PlayPageAnchor.RelatedVideos\n];","import React from 'react';\n\nimport { PlayPageAnchor } from 'libs/shared/interfaces/PlayPageAnchor';\n\nimport { PLAY_PAGE_SECTIONS_ORDER, PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE } from 'shared/constants/PlayPageSectionsOrder';\n\nexport function useSectionHeadings(hasGlance: boolean) {\n const headingRef = React.useRef<Map<PlayPageAnchor, HTMLElement>>(new Map());\n const headingElements = (hasGlance ? PLAY_PAGE_SECTIONS_ORDER : PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE).map(id => {\n return headingRef.current.get(id);\n }).filter(Boolean);\n\n return { headingRef, headingElements };\n}","import { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\n// returns boolean value for if we should show the TOC on the side\nexport function useShouldShowSideTableOfContents(): boolean {\n const breakpoints = useBreakpoints();\n const shouldShowSideTableOfContents = breakpoints.lg || breakpoints.xl || breakpoints.xxl;\n return shouldShowSideTableOfContents;\n}","// extracted by mini-css-extract-plugin\nexport default {\"learningIntention\":\"MHM6O\",\"highlightPoi\":\"U7Q6x\",\"icon\":\"H1xbT\"};"],"names":["PortalHelper","renderInPortalIfExists","component","portalContainer","createPortal","namespace","CONTAINER_HEIGHT","CopyrightDisclaimer","props","ref","isHovering","className","Text","phrase","Overlay","target","current","show","placement","overflowPlacement","document","documentElement","clientHeight","getBoundingClientRect","bottom","ClipWidgetItemV2","clip","data","thumbnailSize","preloadImage","getAppLink","mergedAudience","subjectPresentationAudiences","audiences","VideoThumbnail","type","textPosition","ThumbnailTextPosition","video","appLink","imageOptions","size","preload","analyticsData","analyticsOptions","setFavourite","canFavourite","imageCdnUrl","audience","hideDuration","isPlugin","showOwner","ThumbnailText","PlayPageClips","canViewClips","clips","length","parentIsVideo","VideoHelper","title","LanguageService","count","id","PlayPageAnchor","el","headingRef","set","name","contents","WidgetContents","collection","prefetched","getChildAppLink","application","action","args","TextHelper","childComponent","extraChildComponentProps","yearGroups","getPhrase","CommaList","label","items","commaSeperated","map","i","join","DetailsSection","parentVideo","description","productionYear","options","year","smartCount","productionCompanies","distributors","producers","directors","dateBroadcast","date","DateHelper","channel","_isClickViewCurated","value","dateCreated","VideoDetailsWithScrollbarV2","maxHeight","showDescription","showDetails","tags","hideTags","filter","tag","tagType","TagType","getTags","autoHeight","autoHeightMax","ImmersiveReader","text","onLaunch","onLaunchImmersiveReader","onExit","onExitImmersiveReader","location","entity","actionType","descriptor","dangerouslySetInnerHTML","__html","LinkifyHelper","nl2br","TagList","TagHelper","getTagAppLink","suppressInteractivity","POI_LINK_LINE","useLearningIntentionMarkdown","hasGlanceData","useState","markdownHTML","setMarkdownHTML","useEffect","content","glance","learningIntention","replace","format","useHighlightPointOfInterest","pointOfInterest","shouldHighlight","useRef","onGlancePoiMouseOver","onGlancePoiMouseLeave","hoveredPoi","toString","classList","add","remove","addEventListener","removeEventListener","PointOfInterest","timeStamp","DurationHelper","poi","startTime","DivButton","key","onClick","onClickPoiItem","PointOfInterestList","pointsOfInterest","SCROLL_HEIGHT_MAX","ScrollbarWrapper","hideScrollbar","children","VideoAtAGlanceV2","learningIntentionMarkdownHTML","canViewGlance","textToCopy","setTextToCopy","innerText","Tooltip","spanHack","spanHackClassName","SvgContainer","svgName","S","videoId","videoName","AnalyticsHelper","onClickTag","time","setStartTime","InteractiveWidgetItemV2","interactive","questionsAppLink","questionsNumber","_timepoints","PlayPageInteractives","canViewInteractives","interactives","PlayPageResources","hasPermissions","resources","isLearner","links","filteredResources","r","includes","metadata","resourceType","getResources","imageErrorFallbackUrl","resourceThumbnailFallbackUrl","actionBehaviour","canViewResources","titlePosition","onClickDownload","resource","workflowPhase","SignUp","useCanPreviewResource","breakpoints","useBreakpoints","xs","sm","ResourceFileType","url","pdf","ResourceTileV2","isResource","MasterTypeHelper","MasterType","baseClass","getColour","theme","containerClass","applyHoverState","getInnerContainerClass","thumbnailContainerClass","ResourceThumbnail","dynamicRatioImageOptions","e","preventDefault","stopPropagation","hideTypeBadge","TypeBadge","typeId","TitleSubText","ResourceHelper","defaultProps","ResourceWidgetItemV2","canPreview","logAction","tileProps","SeoConstants","href","AppLink","TableOfContentsList","item","idx","localState","activeId","ScrollHelper","setControlledId","onItemClick","appLinkOptions","timer","useTableOfContentsActiveHeading","setActiveId","headingElements","controlledId","scrollPositionRef","observer","IntersectionObserver","headings","forEach","heading","window","setTimeout","isIntersecting","scrollY","isScrollingUp","curIndex","findIndex","h","prevHeading","rootMargin","element","observe","clearTimeout","disconnect","downloadRef","DownloadHelper","getVideoDownloadUrl","downloadProxyUrl","token","downloadResource","iframe","createElement","body","appendChild","style","display","src","TableOfContentsIcon","onClickIcon","setIsExpanded","isExpanded","IconButton","TableOfContents","showInSide","currentAppLink","ContextService","params","tocId","TableOfContentsContainer","getElementById","PlayPageUtils","getSectionHeading","isPlayClipPage","PLAY_PAGE_TOC_EXPANDED","usePlayPageTableOfContent","localValue","tocDefaultExpanded","tableOfContentsActiveId","setTableOfContentsActiveId","tableOfContentsExpanded","setTableOfContentsExpanded","onToggleTableOfContents","PLAY_PAGE_SECTIONS_ORDER","PLAY_PAGE_SECTIONS_ORDER_NO_GLANCE","useSectionHeadings","hasGlance","Map","get","Boolean","useShouldShowSideTableOfContents","lg","xl","xxl"],"sourceRoot":""}
|