@saooti/octopus-sdk 42.3.0 → 42.3.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/{AdvancedSearch-DEh3iiuK.mjs → AdvancedSearch-BTbYmlMm.mjs} +8 -8
- package/dist/AdvancedSearch-C6BJzvGT.mjs.map +1 -0
- package/dist/AdvancedSearch-ChnJq71j.mjs.map +1 -0
- package/dist/AdvancedSearch-ChtUj3vS.mjs.map +1 -0
- package/dist/AdvancedSearch-D-9o5KzI.mjs.map +1 -0
- package/dist/AdvancedSearch-DH5YTENK.mjs.map +1 -0
- package/dist/AdvancedSearch-DN3WFduh.mjs.map +1 -0
- package/dist/AdvancedSearch-EpYd6K3d.mjs.map +1 -0
- package/dist/AdvancedSearch-PRJyRSID.mjs.map +1 -0
- package/dist/AdvancedSearch-_E2nwQ-A.mjs.map +1 -0
- package/dist/AdvancedSearch-cLjakm-6.mjs.map +1 -0
- package/dist/AdvancedSearch-k-fQfSBk.mjs.map +1 -0
- package/dist/AdvancedSearch-zFJq-WlO.mjs.map +1 -0
- package/dist/CategoryChooser-CSUjIA0D.mjs.map +1 -0
- package/dist/{CategoryChooser-CeF4n-nw.mjs → CategoryChooser-fAUMJNHu.mjs} +1 -1
- package/dist/CategoryFilter-B0S_nCvS.mjs.map +1 -0
- package/dist/CategoryFilter-BVrLO_pV.mjs.map +1 -0
- package/dist/{CategoryFilter-Djmal5bY.mjs → CategoryFilter-CsYCvEnz.mjs} +3 -3
- package/dist/CategoryFilter-DVwCpHLx.mjs.map +1 -0
- package/dist/CategoryList-B_9GG6Z9.mjs.map +1 -0
- package/dist/{CategoryList-Dksp79Lm.mjs → CategoryList-CDoIfrDw.mjs} +2 -2
- package/dist/CategoryList-CUae_phb.mjs.map +1 -0
- package/dist/CategoryList-DxR0fpKd.mjs.map +1 -0
- package/dist/CategoryPage-C7aKDtgs.mjs.map +1 -0
- package/dist/{CategoryPage-DC8fMny_.mjs → CategoryPage-Cl5Yuxnu.mjs} +2 -2
- package/dist/CategoryPage-DlnAp05t.mjs.map +1 -0
- package/dist/CategoryPage-Dlq5XQBS.mjs.map +1 -0
- package/dist/{CategorySearchFilter-KVYBscdd.mjs → CategorySearchFilter-Cce5zxZB.mjs} +1 -1
- package/dist/CategorySearchFilter-EULpSE2e.mjs.map +1 -0
- package/dist/ChapteringModal-BplEGZj2.mjs.map +1 -0
- package/dist/ChapteringModal-C9yuW_IU.mjs.map +1 -0
- package/dist/{ChapteringModal-Be9FF1yz.mjs → ChapteringModal-DiiVSG7s.mjs} +1 -1
- package/dist/{CheckIdentityModal-nMszYOsW.mjs → CheckIdentityModal-BrnYeGdk.mjs} +3 -3
- package/dist/CheckIdentityModal-BtGdsv2v.mjs.map +1 -0
- package/dist/CheckIdentityModal-CpRO7ehH.mjs.map +1 -0
- package/dist/CheckIdentityModal-Cry9ra4J.mjs.map +1 -0
- package/dist/ClassicDatePicker--q1yYb-S.mjs.map +1 -0
- package/dist/ClassicDatePicker-4ouU5ov9.mjs.map +1 -0
- package/dist/ClassicDatePicker-B8bI9QfF.mjs.map +1 -0
- package/dist/ClassicDatePicker-BTJWityQ.mjs +186 -0
- package/dist/ClassicDatePicker-CChR9LBd.mjs.map +1 -0
- package/dist/ClassicDatePicker-CopJVkF0.mjs.map +1 -0
- package/dist/ClassicDatePicker-DgcJCevR.mjs.map +1 -0
- package/dist/ClassicDatePicker-NxGNQxHE.mjs.map +1 -0
- package/dist/ClassicDatePicker-dgdGXcRk.mjs.map +1 -0
- package/dist/{ClassicEmojiPicker-B4TAlZvo.mjs → ClassicEmojiPicker-C0gm-DA2.mjs} +1 -1
- package/dist/ClassicEmojiPicker-CJZD8H7L.mjs.map +1 -0
- package/dist/{ClassicHelpButton-DT7T8tMe.mjs → ClassicHelpButton-BnRLmYuh.mjs} +1 -1
- package/dist/ClassicHelpButton-Qb4AwvWI.mjs.map +1 -0
- package/dist/{ClassicInputText-DJ5kURGM.mjs → ClassicInputText-YsntJkHk.mjs} +1 -1
- package/dist/ClassicInputText-npkVSUoH.mjs.map +1 -0
- package/dist/ClassicMultiselect-2I2K-o4R.mjs.map +1 -0
- package/dist/{ClassicMultiselect-CDHdJjjV.mjs → ClassicMultiselect-C0yzVQ8Y.mjs} +1 -1
- package/dist/{ClassicNotifications-DEpVRRHg.mjs → ClassicNotifications-8CVfGSqL.mjs} +1 -1
- package/dist/ClassicNotifications-BFQ-R6kO.mjs.map +1 -0
- package/dist/ClassicNotifications-DR0PM1Xp.mjs.map +1 -0
- package/dist/{ClassicPopover-DWR50Nxi.mjs → ClassicPopover-BUb-1WMB.mjs} +1 -1
- package/dist/ClassicPopover-BhMY2SMo.mjs.map +1 -0
- package/dist/ClipboardModal-B_SZ6jDk.mjs.map +1 -0
- package/dist/{ClipboardModal-BUKwZYOf.mjs → ClipboardModal-ByVXPcKD.mjs} +1 -1
- package/dist/ClipboardModal-DjrZQRtY.mjs.map +1 -0
- package/dist/{CommentInput-US8ZtNj1.mjs → CommentInput-CrRstzua.mjs} +4 -4
- package/dist/CommentInput-DPMj47uE.mjs.map +1 -0
- package/dist/CommentInput-DbhOyi7c.mjs.map +1 -0
- package/dist/CommentInput-I97yysBW.mjs.map +1 -0
- package/dist/CommentItem-AItzrTBi.mjs.map +1 -0
- package/dist/CommentItem-B7vvJwZI.mjs.map +1 -0
- package/dist/{CommentItem-CqWZPmbj.mjs → CommentItem-BYU67TIu.mjs} +4 -4
- package/dist/CommentItem-CvNbH7Hf.mjs.map +1 -0
- package/dist/CommentList-BTyyCcX4.mjs.map +1 -0
- package/dist/CommentList-CWrf45Di.mjs.map +1 -0
- package/dist/CommentList-DP6wk4PD.mjs.map +1 -0
- package/dist/{CommentList-CSYpqgNM.mjs → CommentList-snIIudVC.mjs} +2 -2
- package/dist/CommentMoreActions-BNajG7wk.mjs.map +1 -0
- package/dist/CommentMoreActions-C1l4Y_HY.mjs.map +1 -0
- package/dist/CommentMoreActions-DPbJnEEV.mjs.map +1 -0
- package/dist/{CommentMoreActions-T5RN6BGq.mjs → CommentMoreActions-y202UxL5.mjs} +3 -3
- package/dist/{CommentName-DslRo9jg.mjs → CommentName-CHBlEM7I.mjs} +3 -3
- package/dist/CommentName-D5HN8bGE.mjs.map +1 -0
- package/dist/CommentName-DMom_kwo.mjs.map +1 -0
- package/dist/CommentName-OJrxjSxu.mjs.map +1 -0
- package/dist/CommentParentInfo-DWVF5Ewh.mjs.map +1 -0
- package/dist/CommentParentInfo-Do3IlO95.mjs.map +1 -0
- package/dist/{CommentParentInfo-DMX3nkCb.mjs → CommentParentInfo-DoEeaQGU.mjs} +2 -2
- package/dist/CommentParentInfo-DqHfDpKs.mjs.map +1 -0
- package/dist/{CommentPlayer-D3JEVPKX.mjs → CommentPlayer-B4MXG-gG.mjs} +2 -2
- package/dist/CommentPlayer-B67saxPf.mjs.map +1 -0
- package/dist/CommentPlayer-BUtEvkoV.mjs.map +1 -0
- package/dist/CommentSection-BIZMRePu.mjs.map +1 -0
- package/dist/CommentSection-CSehg6MD.mjs.map +1 -0
- package/dist/{CommentSection-Brn0VQcc.mjs → CommentSection-DZf04NxT.mjs} +3 -3
- package/dist/CommentSection-MDKioQWf.mjs.map +1 -0
- package/dist/CommentStore-BBm8MjxW.mjs.map +1 -0
- package/dist/{CommentStore-hPTYaDGr.mjs → CommentStore-CysGkBHp.mjs} +8 -8
- package/dist/CommentStore-F5MVSrDw.mjs.map +1 -0
- package/dist/ContractPreviewModal-CFSkXgB4.mjs.map +1 -0
- package/dist/ContractPreviewModal-CKL6Rb_V.mjs.map +1 -0
- package/dist/{ContractPreviewModal-48Je4Wuy.mjs → ContractPreviewModal-Dd-1KasR.mjs} +2 -2
- package/dist/DateFilter-BwYSwGc-.mjs.map +1 -0
- package/dist/DateFilter-CGTz76bp.mjs.map +1 -0
- package/dist/DateFilter-CfeYepTO.mjs.map +1 -0
- package/dist/{DateFilter-DztHuPm8.mjs → DateFilter-Cnb_S8Up.mjs} +1 -1
- package/dist/DateFilter-DFw66D2V.mjs.map +1 -0
- package/dist/DateFilter-DMOUMeCh.mjs.map +1 -0
- package/dist/DateFilter-DdbvVu9Q.mjs.map +1 -0
- package/dist/DateFilter-Dr1nRuvZ.mjs.map +1 -0
- package/dist/DateFilter-QGaXHkcu.mjs.map +1 -0
- package/dist/{DownloadPodcastButton-BYWuLoNg.mjs → DownloadPodcastButton-6HtR84aE.mjs} +2 -2
- package/dist/DownloadPodcastButton-D2qeKDPT.mjs.map +1 -0
- package/dist/DownloadPodcastButton-Tr_Y4qMu.mjs.map +1 -0
- package/dist/{EditCommentModal-DacFxzLx.mjs → EditCommentModal-BQ03B6LC.mjs} +2 -2
- package/dist/EditCommentModal-BZitN0Ir.mjs.map +1 -0
- package/dist/EditCommentModal-CcmCx_My.mjs.map +1 -0
- package/dist/EditCommentModal-sj0yXd7-.mjs.map +1 -0
- package/dist/EmissionGroupChooser--428fdeK.mjs.map +1 -0
- package/dist/EmissionGroupChooser-BJCKekKM.mjs.map +1 -0
- package/dist/EmissionGroupChooser-ByqGmsGw.mjs.map +1 -0
- package/dist/EmissionGroupChooser-Cb3CF0uc.mjs.map +1 -0
- package/dist/EmissionGroupChooser-D4vMQH8g.mjs.map +1 -0
- package/dist/{EmissionGroupChooser-KmzQjp7d.mjs → EmissionGroupChooser-De_IpEhW.mjs} +2 -2
- package/dist/EmissionInlineList-CdHQBjfR.mjs.map +1 -0
- package/dist/EmissionInlineList-CnA0d_k2.mjs.map +1 -0
- package/dist/EmissionInlineList-DLUvPBNl.mjs.map +1 -0
- package/dist/{EmissionInlineList-BoEIAbLu.mjs → EmissionInlineList-dlb4gUOP.mjs} +5 -5
- package/dist/EmissionItem-B39oFnXF.mjs.map +1 -0
- package/dist/EmissionItem-BkPLFhAo.mjs.map +1 -0
- package/dist/EmissionItem-CjAUdLb7.mjs.map +1 -0
- package/dist/{EmissionItem-BeQWw-UT.mjs → EmissionItem-Dm_IGNkw.mjs} +4 -4
- package/dist/EmissionList-B0UntYdC.mjs.map +1 -0
- package/dist/EmissionList-BQSI4xbi.mjs.map +1 -0
- package/dist/{EmissionList-DB7O1nj5.mjs → EmissionList-C4JEYLyK.mjs} +4 -4
- package/dist/EmissionList-C7lQBdlW.mjs.map +1 -0
- package/dist/EmissionPage-BF6s2ySo.mjs.map +1 -0
- package/dist/EmissionPage-B_-nDP5x.mjs.map +1 -0
- package/dist/EmissionPage-C-ESprrZ.mjs.map +1 -0
- package/dist/{EmissionPage-CNYJ1Puo.mjs → EmissionPage-C4XUdzzm.mjs} +10 -10
- package/dist/EmissionPage-CPXcNHGS.mjs.map +1 -0
- package/dist/EmissionPage-EMgXCVhK.mjs.map +1 -0
- package/dist/EmissionPage-mXbUqOh9.mjs.map +1 -0
- package/dist/{EmissionPlayerItem-S_yqupad.mjs → EmissionPlayerItem-BLIdolRe.mjs} +3 -3
- package/dist/EmissionPlayerItem-C27zJBhY.mjs.map +1 -0
- package/dist/EmissionPlayerItem-C3fkgEaL.mjs.map +1 -0
- package/dist/EmissionPlayerItem-DxXG20G1.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BNnDSWGQ.mjs.map +1 -0
- package/dist/EmissionPresentationItem-BeETY65I.mjs.map +1 -0
- package/dist/{EmissionPresentationItem-kJgKN7Ju.mjs → EmissionPresentationItem-DYDwfqwp.mjs} +1 -1
- package/dist/EmissionPresentationList-BD7rIUok.mjs.map +1 -0
- package/dist/EmissionPresentationList-CGMyY_iu.mjs.map +1 -0
- package/dist/{EmissionPresentationList-Bg9X3CJP.mjs → EmissionPresentationList-Cxi7QnIs.mjs} +3 -3
- package/dist/EmissionsPage-4To0aRBA.mjs.map +1 -0
- package/dist/{EmissionsPage-BLpGH_PR.mjs → EmissionsPage-B0bXLncg.mjs} +5 -5
- package/dist/EmissionsPage-BIspB5uq.mjs.map +1 -0
- package/dist/EmissionsPage-BhUjdpEu.mjs.map +1 -0
- package/dist/EmissionsPage-Bn1R_ipo.mjs.map +1 -0
- package/dist/EmissionsPage-CNXwdJuV.mjs.map +1 -0
- package/dist/EmissionsPage-CPmhIbFf.mjs.map +1 -0
- package/dist/EmissionsPage-Cgzvn2h8.mjs.map +1 -0
- package/dist/EmissionsPage-D09zTpGb.mjs.map +1 -0
- package/dist/EmissionsPage-Dl7qaQT1.mjs.map +1 -0
- package/dist/EmissionsPage-DyleZtu_.mjs.map +1 -0
- package/dist/EmissionsPage-OVpc7k1Z.mjs.map +1 -0
- package/dist/EmissionsPage-wjKBLFM6.mjs.map +1 -0
- package/dist/Error403Page-B6Q7ijY3.mjs.map +1 -0
- package/dist/Error403Page-DF08mgCL.mjs.map +1 -0
- package/dist/{Error403Page-BB69doEn.mjs → Error403Page-DVmC5AOd.mjs} +2 -2
- package/dist/FooterGarSection-BWahCyz0.mjs.map +1 -0
- package/dist/{FooterGarSection-B9nsnpfF.mjs → FooterGarSection-BqPggI3o.mjs} +3 -3
- package/dist/FooterGarSection-CN8ZfO7e.mjs.map +1 -0
- package/dist/FooterSection-BOjr1LRb.mjs.map +1 -0
- package/dist/{FooterSection-DdGtlbk-.mjs → FooterSection-C5FEIJlU.mjs} +11 -11
- package/dist/FooterSection-nVRzKSYN.mjs.map +1 -0
- package/dist/HomeDropdown-3fl_xltN.mjs.map +1 -0
- package/dist/HomeDropdown-DGNkJhG2.mjs.map +1 -0
- package/dist/{HomeDropdown-BqwwLStt.mjs → HomeDropdown-Fx6kQAuH.mjs} +3 -3
- package/dist/HomeDropdown-PvmOUzYb.mjs.map +1 -0
- package/dist/{HomePage-JOUAKKfP.mjs → HomePage-7PT7HmHs.mjs} +3 -3
- package/dist/HomePage-D0Pbu_h1.mjs.map +1 -0
- package/dist/HomePage-D6_D1f33.mjs.map +1 -0
- package/dist/HomePage-ry0NfX1M.mjs.map +1 -0
- package/dist/InlineRubriqueList-BdpS1pVc.mjs.map +1 -0
- package/dist/InlineRubriqueList-BlcjQ4wR.mjs.map +1 -0
- package/dist/{InlineRubriqueList-BzcHKvM4.mjs → InlineRubriqueList-ezgexR-O.mjs} +1 -1
- package/dist/{LikeSection-MmbHMunb.mjs → LikeSection-CGu4yOCr.mjs} +3 -3
- package/dist/LikeSection-Cqj4y7qZ.mjs.map +1 -0
- package/dist/LikeSection-D95IMsZE.mjs.map +1 -0
- package/dist/LikeSection-HJla-zgI.mjs.map +1 -0
- package/dist/{ListPaginate-5uRK_QKJ.mjs → ListPaginate-BPdnBcpe.mjs} +2 -2
- package/dist/ListPaginate-DYzRnp-2.mjs.map +1 -0
- package/dist/ListPaginate-DyR7HLIc.mjs.map +1 -0
- package/dist/LiveHorizontalList-Bqe351Ut.mjs.map +1 -0
- package/dist/{LiveHorizontalList-CpoIRd4C.mjs → LiveHorizontalList-Bs-Rz5Ws.mjs} +3 -3
- package/dist/LiveHorizontalList-CaujYMT3.mjs.map +1 -0
- package/dist/LiveHorizontalList-DhsOZPT3.mjs.map +1 -0
- package/dist/{LiveList-DYFBrNgg.mjs → LiveList-BVOEnAEc.mjs} +5 -5
- package/dist/LiveList-DMB3FxUM.mjs.map +1 -0
- package/dist/LiveList-DOi4GV1x.mjs.map +1 -0
- package/dist/LiveList-Dh1mJVs7.mjs.map +1 -0
- package/dist/LivesPage-BvDLscOE.mjs.map +1 -0
- package/dist/{LivesPage-FSkmBdVw.mjs → LivesPage-DG5VY4HF.mjs} +2 -2
- package/dist/LivesPage-DmSlg7iH.mjs.map +1 -0
- package/dist/LivesPage-yy_5pI8R.mjs.map +1 -0
- package/dist/MapPage-3n-rigBK.mjs.map +1 -0
- package/dist/MapPage-5GwE8Z4E.mjs.map +1 -0
- package/dist/{MapPage-DpBt2gWF.mjs → MapPage-bIe2a9O1.mjs} +2 -2
- package/dist/MobileMenu-BSos17v3.mjs.map +1 -0
- package/dist/{MobileMenu-CjNMfHUP.mjs → MobileMenu-BZ5nOrYw.mjs} +5 -5
- package/dist/MobileMenu-C6W37oJg.mjs.map +1 -0
- package/dist/MobileMenu-K0rNwrW1.mjs.map +1 -0
- package/dist/NewsletterModal-CFGXBtID.mjs.map +1 -0
- package/dist/NewsletterModal-CZNwpCK5.mjs.map +1 -0
- package/dist/{NewsletterModal-BurqHTFc.mjs → NewsletterModal-DZk0mSVC.mjs} +1 -1
- package/dist/OctopusMultiselect-CFUGyzeM.mjs.map +1 -0
- package/dist/OctopusMultiselect-Cn1lqbQo.mjs.map +1 -0
- package/dist/OctopusMultiselect-esu8BY0J.mjs.map +1 -0
- package/dist/{OctopusMultiselect-C8qljiaH.mjs → OctopusMultiselect-noQPQMZQ.mjs} +7 -5
- package/dist/OrganisationChooser-BKfXLT4G.mjs.map +1 -0
- package/dist/{OrganisationChooser-Dx-OT7MW.mjs → OrganisationChooser-C48cWqbY.mjs} +3 -3
- package/dist/OrganisationChooser-PpO7MD7f.mjs.map +1 -0
- package/dist/OrganisationChooser-Y_jO6oXv.mjs.map +1 -0
- package/dist/{OrganisationChooserLight-BF5fT5pV.mjs → OrganisationChooserLight-Bcltbv-v.mjs} +1 -1
- package/dist/OrganisationChooserLight-Dh7wMH40.mjs.map +1 -0
- package/dist/OrganisationChooserLight-Dx_rkvpP.mjs.map +1 -0
- package/dist/PageNotFound-DeW-K_hL.mjs.map +1 -0
- package/dist/{PageNotFound-Cj-3Gv8T.mjs → PageNotFound-DogaoIFX.mjs} +2 -2
- package/dist/PageNotFound-gRuMWYCp.mjs.map +1 -0
- package/dist/ParticipantInlineList-CY_s6aJm.mjs.map +1 -0
- package/dist/{ParticipantInlineList-DEWqM1Io.mjs → ParticipantInlineList-D9pkOlvP.mjs} +4 -4
- package/dist/ParticipantInlineList-DSatB75C.mjs.map +1 -0
- package/dist/ParticipantItem-BG7yqRvD.mjs.map +1 -0
- package/dist/ParticipantItem-BTK25HID.mjs.map +1 -0
- package/dist/{ParticipantItem-BZAUIeSR.mjs → ParticipantItem-CbHOfVon.mjs} +3 -3
- package/dist/ParticipantPage-B4VnV8Yc.mjs.map +1 -0
- package/dist/ParticipantPage-B6Gzg6ul.mjs.map +1 -0
- package/dist/ParticipantPage-CNRNKTtC.mjs.map +1 -0
- package/dist/ParticipantPage-CpkhQjN2.mjs.map +1 -0
- package/dist/ParticipantPage-D61CCIqy.mjs.map +1 -0
- package/dist/ParticipantPage-Dh4JJCmJ.mjs.map +1 -0
- package/dist/{ParticipantPage-CzaHoWij.mjs → ParticipantPage-nTp2MbgB.mjs} +6 -6
- package/dist/{ParticipantsPage-goxJZQZZ.mjs → ParticipantsPage-Bbz9lQ_0.mjs} +6 -6
- package/dist/ParticipantsPage-COaQrVID.mjs.map +1 -0
- package/dist/ParticipantsPage-DRVVU7qp.mjs.map +1 -0
- package/dist/ParticipantsPage-DhKCWwKE.mjs.map +1 -0
- package/dist/{PlayerAnonymousModal-By96BtpA.mjs → PlayerAnonymousModal-B1iZ34O8.mjs} +2 -2
- package/dist/PlayerAnonymousModal-CBZStK-L.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-Cq6-Dn49.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-Cu2GGoAh.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-DiXWtNmM.mjs.map +1 -0
- package/dist/PlayerAnonymousModal-DrQvDDym.mjs.map +1 -0
- package/dist/PlayerCompact-B9oeGx_g.mjs.map +1 -0
- package/dist/PlayerCompact-DtMginEc.mjs.map +1 -0
- package/dist/PlayerCompact-E8ydrdJ4.mjs.map +1 -0
- package/dist/{PlayerCompact-CjU8xxVH.mjs → PlayerCompact-_39FpkWo.mjs} +4 -4
- package/dist/PlayerComponent-4Wj5XlrS.mjs.map +1 -0
- package/dist/{PlayerComponent-B58O6U6i.mjs → PlayerComponent-B1RsmSf0.mjs} +47 -47
- package/dist/PlayerComponent-BGVzhVz9.mjs.map +1 -0
- package/dist/PlayerComponent-BIshvul2.mjs.map +1 -0
- package/dist/PlayerComponent-BO7wUL2M.mjs.map +1 -0
- package/dist/PlayerComponent-C222I0kT.mjs.map +1 -0
- package/dist/PlayerComponent-CjNZNKKz.mjs.map +1 -0
- package/dist/PlayerComponent-UG_c6_yr.mjs.map +1 -0
- package/dist/{PlayerLarge-CWL5SDzD.mjs → PlayerLarge-BxdyYLOt.mjs} +5 -5
- package/dist/PlayerLarge-CPUAoR9q.mjs.map +1 -0
- package/dist/PlayerLarge-DP7RsA83.mjs.map +1 -0
- package/dist/PlayerLarge-DpiFO7gk.mjs.map +1 -0
- package/dist/PlayerLarge-Dwtmu4gz.mjs.map +1 -0
- package/dist/PlayerLarge-HvRHSw4j.mjs.map +1 -0
- package/dist/PlayerLarge-X5uYCbyS.mjs.map +1 -0
- package/dist/PlayerLarge-qwr3iWSX.mjs.map +1 -0
- package/dist/{PlayerPlayButton-DmvV2YDi.mjs → PlayerPlayButton-BIsfgj0d.mjs} +4 -4
- package/dist/PlayerPlayButton-BQ4zJOrE.mjs.map +1 -0
- package/dist/PlayerPlayButton-kh4ZCdWh.mjs.map +1 -0
- package/dist/PlayerProgressBar-C-I3dk3l.mjs.map +1 -0
- package/dist/PlayerProgressBar-Dr-aFk7O.mjs.map +1 -0
- package/dist/{PlayerProgressBar-Cl_mF4nD.mjs → PlayerProgressBar-dSschgez.mjs} +2 -2
- package/dist/PlayerProgressBar-xc1ZFPJY.mjs.map +1 -0
- package/dist/PlayerStore-Aq_ukXXS.mjs.map +1 -0
- package/dist/PlayerStore-C_QCHbT3.mjs.map +1 -0
- package/dist/{PlayerStore-CKprkxa0.mjs → PlayerStore-DggKki80.mjs} +1 -1
- package/dist/PlayerVideo-BNfhaNUn.mjs.map +1 -0
- package/dist/{PlayerVideo-CVUU7nHT.mjs → PlayerVideo-BWyvKlJT.mjs} +3 -3
- package/dist/PlayerVideo-Bhok6qYS.mjs.map +1 -0
- package/dist/PlayerVideo-CN609whx.mjs.map +1 -0
- package/dist/PlayerVideo-DXG_PsWA.mjs.map +1 -0
- package/dist/PlayerVideo-DzUapxuZ.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-B1rRVLzy.mjs.map +1 -0
- package/dist/PlayerVideoDigiteka-B6qODy7b.mjs.map +1 -0
- package/dist/{PlayerVideoDigiteka-DZIqqN8a.mjs → PlayerVideoDigiteka-Dxx63XHI.mjs} +2 -2
- package/dist/PlayerVideoHls-BoAbvi2b.mjs.map +1 -0
- package/dist/PlayerVideoHls-BsHaaJB-.mjs.map +1 -0
- package/dist/PlayerVideoHls-C0ddorEn.mjs.map +1 -0
- package/dist/PlayerVideoHls-DBODDRmV.mjs.map +1 -0
- package/dist/PlayerVideoHls-DVNHm_O2.mjs.map +1 -0
- package/dist/{PlayerVideoHls-BirHOkZD.mjs → PlayerVideoHls-DzbyXZsQ.mjs} +9 -7
- package/dist/{PlaylistPage-DljbABur.mjs → PlaylistPage-BdbqXFwR.mjs} +35 -35
- package/dist/PlaylistPage-BgUaPJet.mjs.map +1 -0
- package/dist/PlaylistPage-BwF2VdGb.mjs.map +1 -0
- package/dist/PlaylistPage-CINwx3zE.mjs.map +1 -0
- package/dist/PlaylistPage-CPB647jC.mjs.map +1 -0
- package/dist/PlaylistPage-DDzE5GQs.mjs.map +1 -0
- package/dist/PlaylistPage-bm1nWKMg.mjs.map +1 -0
- package/dist/PlaylistsPage-BwkVSYIp.mjs.map +1 -0
- package/dist/PlaylistsPage-C62NUvz4.mjs.map +1 -0
- package/dist/{PlaylistsPage-BSW-uPWF.mjs → PlaylistsPage-D08i24b2.mjs} +13 -13
- package/dist/PlaylistsPage-Dvh77ql6.mjs.map +1 -0
- package/dist/PodcastFilterList-BBhzOM64.mjs.map +1 -0
- package/dist/PodcastFilterList-BKBjd36i.mjs.map +1 -0
- package/dist/{PodcastFilterList-YM90eN60.mjs → PodcastFilterList-CL5ebQ69.mjs} +3 -3
- package/dist/PodcastFilterList-D9NTYS1v.mjs.map +1 -0
- package/dist/{PodcastImage-BtiQlrb3.mjs → PodcastImage-BFA22TgZ.mjs} +6 -6
- package/dist/PodcastImage-BhQKB5te.mjs.map +1 -0
- package/dist/PodcastImage-CHx3bUzt.mjs.map +1 -0
- package/dist/PodcastInlineList-CcNd_Hbs.mjs.map +1 -0
- package/dist/{PodcastInlineList-B32BSFqN.mjs → PodcastInlineList-H6BxXx0A.mjs} +1 -1
- package/dist/PodcastInlineList-akLivgog.mjs.map +1 -0
- package/dist/PodcastInlineList-jI2EvXSo.mjs.map +1 -0
- package/dist/{PodcastInlineListTemplate-DTrS1UiG.mjs → PodcastInlineListTemplate-Chbi8aME.mjs} +3 -3
- package/dist/PodcastInlineListTemplate-DT9ZRs61.mjs.map +1 -0
- package/dist/PodcastInlineListTemplate-Dh1xF6xT.mjs.map +1 -0
- package/dist/PodcastIsPlaying-C0jcpBQd.mjs.map +1 -0
- package/dist/PodcastIsPlaying-H6P1CHAI.mjs.map +1 -0
- package/dist/{PodcastIsPlaying-BtmHnQi9.mjs → PodcastIsPlaying-ugHcefCy.mjs} +1 -1
- package/dist/{PodcastItem-TdtzApJ6.mjs → PodcastItem-Baki7W0q.mjs} +6 -6
- package/dist/PodcastItem-BfvK4ion.mjs.map +1 -0
- package/dist/PodcastItem-DEhA78z9.mjs.map +1 -0
- package/dist/PodcastItem-DwK_Yu1G.mjs.map +1 -0
- package/dist/PodcastList-B4ic6Cij.mjs.map +1 -0
- package/dist/PodcastList-C2R92m6S.mjs.map +1 -0
- package/dist/PodcastList-DWl6zz_z.mjs.map +1 -0
- package/dist/PodcastList-Dbt4nmKg.mjs.map +1 -0
- package/dist/PodcastList-KaQBRbR9.mjs.map +1 -0
- package/dist/{PodcastList-BAOJhQ7G.mjs → PodcastList-N_XOE-hI.mjs} +5 -5
- package/dist/PodcastList-d3SGLPvF.mjs.map +1 -0
- package/dist/{PodcastList-Bbe3yWiu.mjs → PodcastList-yjd_exFg.mjs} +4 -4
- package/dist/PodcastPage-B0pbZ5o_.mjs.map +1 -0
- package/dist/PodcastPage-BOA44Us4.mjs.map +1 -0
- package/dist/PodcastPage-Bs1wz-0E.mjs.map +1 -0
- package/dist/PodcastPage-C37Wa-qH.mjs.map +1 -0
- package/dist/PodcastPage-D0HYJxaK.mjs.map +1 -0
- package/dist/PodcastPage-D0U6-etV.mjs.map +1 -0
- package/dist/PodcastPage-DwMPY4po.mjs.map +1 -0
- package/dist/{PodcastPage-CAxub2do.mjs → PodcastPage-SUEm-Enm.mjs} +26 -26
- package/dist/PodcastPlayBar-Bo-W_dSK.mjs.map +1 -0
- package/dist/PodcastPlayBar-CBtMWlVc.mjs.map +1 -0
- package/dist/{PodcastPlayBar-gAEttclo.mjs → PodcastPlayBar-COU17bnm.mjs} +3 -3
- package/dist/PodcastPlayBar-Cpr3Ff7J.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-BvJPrxpI.mjs.map +1 -0
- package/dist/PodcastPlayBasicButton-CS5TNlmX.mjs.map +1 -0
- package/dist/{PodcastPlayBasicButton-7w91y2ow.mjs → PodcastPlayBasicButton-CVXhEUHB.mjs} +1 -1
- package/dist/{PodcastPlayButton-CQY0d6f-.mjs → PodcastPlayButton--gjzxW0o.mjs} +3 -3
- package/dist/PodcastPlayButton-BqvE4ZUl.mjs.map +1 -0
- package/dist/PodcastPlayButton-DW5Feest.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-BV31HaB2.mjs.map +1 -0
- package/dist/PodcastPlaylistInlineList-C-WYs6aE.mjs.map +1 -0
- package/dist/{PodcastPlaylistInlineList-BE5L8pSP.mjs → PodcastPlaylistInlineList-DsEHaYGZ.mjs} +7 -7
- package/dist/PodcastPlaylistInlineList-HEdFAq1l.mjs.map +1 -0
- package/dist/{PodcastPresentationList-DH6Rq0Z4.mjs → PodcastPresentationList-B9vORr36.mjs} +4 -4
- package/dist/PodcastPresentationList-ChqvdXY0.mjs.map +1 -0
- package/dist/PodcastPresentationList-Dit6HvJr.mjs.map +1 -0
- package/dist/{PodcastProgressBar-DoeG7lDj.mjs → PodcastProgressBar-B0FwZOTT.mjs} +3 -3
- package/dist/PodcastProgressBar-B8ONWq-Z.mjs.map +1 -0
- package/dist/PodcastProgressBar-BoGtJPAa.mjs.map +1 -0
- package/dist/PodcastProgressBar-DTRhKzW-.mjs.map +1 -0
- package/dist/{PodcastRawTranscript-Cktqtbcg.mjs → PodcastRawTranscript-BiuftXu-.mjs} +2 -2
- package/dist/PodcastRawTranscript-C8SJcaQE.mjs.map +1 -0
- package/dist/PodcastRawTranscript-nfzHM0k_.mjs.map +1 -0
- package/dist/PodcastRawTranscript-r5pRtZDg.mjs.map +1 -0
- package/dist/{PodcastSwiperList-DZ26-8xy.mjs → PodcastSwiperList-BKOYhrsH.mjs} +4 -4
- package/dist/PodcastSwiperList-Bsg0q89o.mjs.map +1 -0
- package/dist/PodcastSwiperList-BxsEv7_8.mjs.map +1 -0
- package/dist/PodcastSwiperList-Cju5VHcH.mjs.map +1 -0
- package/dist/PodcastmakerHeader-6fIwE70J.mjs.map +1 -0
- package/dist/PodcastmakerHeader-BBPEy__r.mjs.map +1 -0
- package/dist/{PodcastmakerHeader-MhdOrssb.mjs → PodcastmakerHeader-CIoJwm1L.mjs} +1 -1
- package/dist/PodcastsPage-967SI8kL.mjs.map +1 -0
- package/dist/{PodcastsPage-BXjTDNhn.mjs → PodcastsPage-B5NwPMyn.mjs} +5 -5
- package/dist/PodcastsPage-B7j2XxPZ.mjs.map +1 -0
- package/dist/PodcastsPage-BOzszXpc.mjs.map +1 -0
- package/dist/PodcastsPage-Bw0tzWoX.mjs.map +1 -0
- package/dist/PodcastsPage-D3TAYJV8.mjs.map +1 -0
- package/dist/PodcastsPage-DJsgHs7V.mjs.map +1 -0
- package/dist/PodcastsPage-DKWHzNNA.mjs.map +1 -0
- package/dist/PodcastsPage-DONqoMkB.mjs.map +1 -0
- package/dist/PodcastsPage-DUcfPeLD.mjs.map +1 -0
- package/dist/PodcastsPage-DWBgwD6o.mjs.map +1 -0
- package/dist/PodcastsPage-DZO4H1Ff.mjs.map +1 -0
- package/dist/PodcastsPage-DhEMPqCT.mjs.map +1 -0
- package/dist/ProductorSearch-BgmV_RCq.mjs.map +1 -0
- package/dist/{ProductorSearch-Z36zTZK4.mjs → ProductorSearch-BiUEs7mG.mjs} +3 -3
- package/dist/ProductorSearch-C4Nv2HzS.mjs.map +1 -0
- package/dist/ProductorSearch-DtVe_rU9.mjs.map +1 -0
- package/dist/ProgressBar-BMeSiueh.mjs.map +1 -0
- package/dist/ProgressBar-C15ih0uL.mjs.map +1 -0
- package/dist/{ProgressBar-CTOa-MDz.mjs → ProgressBar-CXB5q3-H.mjs} +2 -2
- package/dist/ProgressBar-DAUOWol1.mjs.map +1 -0
- package/dist/QrCode-BYLxjhwi.mjs.map +1 -0
- package/dist/QrCode-CCigeTaZ.mjs +109 -0
- package/dist/QrCode-CaXoOjo-.mjs.map +1 -0
- package/dist/QrCode-CcQR60hB.mjs.map +1 -0
- package/dist/QrCode-S_eLVZoz.mjs.map +1 -0
- package/dist/QrCode-XZMMiaX5.mjs.map +1 -0
- package/dist/QrCodeModal-BJOu1pAV.mjs.map +1 -0
- package/dist/QrCodeModal-BjT-0P0w.mjs.map +1 -0
- package/dist/QrCodeModal-BrabSTzq.mjs.map +1 -0
- package/dist/QrCodeModal-CjvbRYLW.mjs.map +1 -0
- package/dist/{QrCodeModal-DE3juCsN.mjs → QrCodeModal-Dpw_tCQ6.mjs} +1 -1
- package/dist/QrCodeModal-N2fjbP4S.mjs.map +1 -0
- package/dist/RadioCurrently-B_b8DV2w.mjs.map +1 -0
- package/dist/RadioCurrently-DufvDqm1.mjs.map +1 -0
- package/dist/{RadioCurrently-BlAhcc9E.mjs → RadioCurrently-ysRKhxKU.mjs} +3 -3
- package/dist/RadioHistory-B03bYMxm.mjs.map +1 -0
- package/dist/{RadioHistory-C7S79sZD.mjs → RadioHistory-DjsqvRgH.mjs} +2 -2
- package/dist/RadioHistory-Dv4gt9TM.mjs.map +1 -0
- package/dist/RadioImage-BFdiGgi_.mjs.map +1 -0
- package/dist/{RadioImage-BTn2Lquc.mjs → RadioImage-CSseYIVb.mjs} +4 -4
- package/dist/RadioImage-CrtD33dM.mjs.map +1 -0
- package/dist/RadioList--f7RDhHJ.mjs.map +1 -0
- package/dist/{RadioList-BD3zNwmk.mjs → RadioList-BZFFAobk.mjs} +4 -4
- package/dist/RadioList-De9NQ23Q.mjs.map +1 -0
- package/dist/RadioPage-BK1N--Kr.mjs.map +1 -0
- package/dist/RadioPage-BTtNFJI2.mjs.map +1 -0
- package/dist/RadioPage-CcK0y_5s.mjs.map +1 -0
- package/dist/RadioPage-Cqas0JX6.mjs.map +1 -0
- package/dist/{RadioPage-Bv3oupa1.mjs → RadioPage-Cwooj0wF.mjs} +4 -4
- package/dist/RadioPage-DhSB0sX5.mjs.map +1 -0
- package/dist/RadioPage-DlahFXYC.mjs.map +1 -0
- package/dist/RadioPlanning-BU1E8i4t.mjs.map +1 -0
- package/dist/{RadioPlanning-nkv_Mb_t.mjs → RadioPlanning-BmIxuUBI.mjs} +2 -2
- package/dist/RadioPlanning-Bx-N-xqX.mjs.map +1 -0
- package/dist/RadioProgressBar-0XM3ZTGU.mjs.map +1 -0
- package/dist/{RadioProgressBar-B2EgCOrK.mjs → RadioProgressBar-CQRGuPpC.mjs} +1 -1
- package/dist/RadioProgressBar-oyeS56mV.mjs.map +1 -0
- package/dist/{RecaptchaModal-w-9MlZ45.mjs → RecaptchaModal-BdW4xNlX.mjs} +1 -1
- package/dist/RecaptchaModal-DFlFQcHs.mjs.map +1 -0
- package/dist/RecaptchaModal-iLQ4UYOL.mjs.map +1 -0
- package/dist/ReportAbuseModal-BaPt2DLK.mjs.map +1 -0
- package/dist/ReportAbuseModal-BdZRe29L.mjs.map +1 -0
- package/dist/ReportAbuseModal-CH7Y153n.mjs.map +1 -0
- package/dist/{ReportAbuseModal-O1K7j7NV.mjs → ReportAbuseModal-jjGeXbB9.mjs} +4 -4
- package/dist/RightsIndicator-4pUsBq5j.mjs.map +1 -0
- package/dist/RightsIndicator-BH3jm_1O.mjs.map +1 -0
- package/dist/{RightsIndicator-D0cSu8j2.mjs → RightsIndicator-CPzWpH5Z.mjs} +1 -1
- package/dist/RightsIndicator-d8ffUFIj.mjs.map +1 -0
- package/dist/{RightsWrapper-BUj_1bwR.mjs → RightsWrapper-BTQ8GGUi.mjs} +5 -5
- package/dist/RightsWrapper-C3BRHqqo.mjs.map +1 -0
- package/dist/RightsWrapper-DJG9Ds6c.mjs.map +1 -0
- package/dist/RightsWrapper-nBURBTJX.mjs.map +1 -0
- package/dist/{RubriqueChoice-DaTWiDbl.mjs → RubriqueChoice-C-S-veJJ.mjs} +1 -1
- package/dist/RubriqueChoice-DsmnrUNs.mjs.map +1 -0
- package/dist/{RubriqueChooser-C33LorHa.mjs → RubriqueChooser-CNGn8LcP.mjs} +1 -1
- package/dist/RubriqueChooser-WmzcajTt.mjs.map +1 -0
- package/dist/RubriqueFilter-C9C_OiF5.mjs.map +1 -0
- package/dist/RubriqueFilter-DDI7DjMR.mjs.map +1 -0
- package/dist/RubriqueFilter-_8V1n9-x.mjs.map +1 -0
- package/dist/{RubriqueFilter-RgardNnQ.mjs → RubriqueFilter-rxiG8Wci.mjs} +3 -3
- package/dist/RubriqueList-99-nWSvq.mjs.map +1 -0
- package/dist/RubriqueList-BiRimk17.mjs.map +1 -0
- package/dist/RubriqueList-H_NHILuj.mjs.map +1 -0
- package/dist/{RubriqueList-DA9OYqUl.mjs → RubriqueList-rJj2IycY.mjs} +4 -4
- package/dist/RubriquePage-6KFPBPz8.mjs.map +1 -0
- package/dist/{RubriquePage-xgTOce7c.mjs → RubriquePage-BNEWnk3-.mjs} +4 -4
- package/dist/RubriquePage-Bpt-x7IK.mjs.map +1 -0
- package/dist/RubriquePage-Cwz9OqLO.mjs.map +1 -0
- package/dist/SearchPage-BtZnj3sA.mjs.map +1 -0
- package/dist/SearchPage-CbbbcXxs.mjs.map +1 -0
- package/dist/SearchPage-DMIV2AgJ.mjs.map +1 -0
- package/dist/{SearchPage-C3o5RPP0.mjs → SearchPage-DsZzPoEw.mjs} +2 -2
- package/dist/ShareAnonymous-BeSQozvM.mjs.map +1 -0
- package/dist/ShareAnonymous-BgsR6Ahp.mjs.map +1 -0
- package/dist/ShareAnonymous-CNWR1v6X.mjs.map +1 -0
- package/dist/{ShareAnonymous-bOwwEjPv.mjs → ShareAnonymous-DK2rnLl1.mjs} +3 -3
- package/dist/ShareAnonymous-DVpKBKbi.mjs.map +1 -0
- package/dist/ShareAnonymous-DWArDFT0.mjs.map +1 -0
- package/dist/ShareAnonymous-IaVbb-rp.mjs.map +1 -0
- package/dist/ShareModalPlayer-BHmsvxXF.mjs.map +1 -0
- package/dist/{ShareModalPlayer-D2oBrSly.mjs → ShareModalPlayer-Cfnk68-U.mjs} +1 -1
- package/dist/ShareModalPlayer-DLBU3lsU.mjs.map +1 -0
- package/dist/ShareModalPlayer-O-CmDObW.mjs.map +1 -0
- package/dist/ShareModalPlayer-QYu8Q9ks.mjs.map +1 -0
- package/dist/ShareModalPlayer-Vga-96DM.mjs.map +1 -0
- package/dist/{ShareNewsletter-CNw1LziN.mjs → ShareNewsletter-BWIAt47D.mjs} +1 -1
- package/dist/ShareNewsletter-BhFk6ARk.mjs.map +1 -0
- package/dist/ShareNewsletter-JCO4h7rk.mjs.map +1 -0
- package/dist/SharePlayer-C-RgIOh1.mjs.map +1 -0
- package/dist/{SharePlayer-CRri0YED.mjs → SharePlayer-C0aveOwy.mjs} +2 -2
- package/dist/SharePlayer-CNXrUj8M.mjs.map +1 -0
- package/dist/SharePlayer-D0-qY2dS.mjs.map +1 -0
- package/dist/SharePlayer-DQoFa7iv.mjs.map +1 -0
- package/dist/SharePlayer-DwNl3E7o.mjs.map +1 -0
- package/dist/{SharePlayerRadio-DVsegQMu.mjs → SharePlayerRadio-BqaeyEls.mjs} +2 -2
- package/dist/SharePlayerRadio-CHvCtKdZ.mjs.map +1 -0
- package/dist/SharePlayerRadio-CIsy-rCC.mjs.map +1 -0
- package/dist/SharePlayerRadio-ChfNulnf.mjs.map +1 -0
- package/dist/SharePlayerRadio-DA-W-306.mjs.map +1 -0
- package/dist/SharePlayerRadio-DwPeLUsk.mjs.map +1 -0
- package/dist/SharePlayerTypes-CeMV4n10.mjs.map +1 -0
- package/dist/SharePlayerTypes-DdyoQZDi.mjs.map +1 -0
- package/dist/{SharePlayerTypes-BxkEoBSL.mjs → SharePlayerTypes-DyrqFDVJ.mjs} +1 -1
- package/dist/ShareSocialsButtons-BHWzJVne.mjs.map +1 -0
- package/dist/ShareSocialsButtons-Bjx2ONvj.mjs.map +1 -0
- package/dist/{ShareSocialsButtons-BJ3DqvIO.mjs → ShareSocialsButtons-PqMXhFEk.mjs} +1 -1
- package/dist/{SimpleLayout-BJlcQjx9.mjs → SimpleLayout-9O9FZ69Q.mjs} +2 -2
- package/dist/SimpleLayout-B-QSfHeQ.mjs.map +1 -0
- package/dist/SimpleLayout-BauUacaf.mjs.map +1 -0
- package/dist/SimpleLayout-C29bPtbd.mjs.map +1 -0
- package/dist/SimpleLayout-Cjc3Q9Mb.mjs.map +1 -0
- package/dist/SimpleLayout-D4sVjQGu.mjs.map +1 -0
- package/dist/SimpleLayout-DaoXS--3.mjs.map +1 -0
- package/dist/SimpleLayout-vkWEZHLi.mjs.map +1 -0
- package/dist/{SmartLinkPage-DpD90wc7.mjs → SmartLinkPage-6HgX8LDv.mjs} +16 -16
- package/dist/SmartLinkPage-BcQmox7e.mjs.map +1 -0
- package/dist/SmartLinkPage-M_zB_Xp1.mjs.map +1 -0
- package/dist/SubscribeButtons-CyGYD1B1.mjs.map +1 -0
- package/dist/SubscribeButtons-DjjZQfOU.mjs.map +1 -0
- package/dist/{SubscribeButtons-zlRDGEzS.mjs → SubscribeButtons-IpzqDGIn.mjs} +3 -3
- package/dist/SubscribeButtons-yA2wowFc.mjs.map +1 -0
- package/dist/SwiperList-BNODHhLF.mjs.map +1 -0
- package/dist/SwiperList-Cqklwlg9.mjs.map +1 -0
- package/dist/{SwiperList-BlF3rPq5.mjs → SwiperList-O8nUg87R.mjs} +1 -1
- package/dist/TagList-4RDriU1J.mjs.map +1 -0
- package/dist/TagList-B5JPfT6j.mjs.map +1 -0
- package/dist/TagList-DVjqXiaA.mjs.map +1 -0
- package/dist/{TagList-BBHyaKp-.mjs → TagList-V9fAFATL.mjs} +2 -2
- package/dist/TagPage-BOsz6Bot.mjs.map +1 -0
- package/dist/TagPage-CALmJwxW.mjs.map +1 -0
- package/dist/{TagPage-DLpNBBjP.mjs → TagPage-CsFwN4sE.mjs} +3 -3
- package/dist/TagPage-DMuxYu6y.mjs.map +1 -0
- package/dist/{TopBar-CLWWRgr7.mjs → TopBar-0oG6YPlW.mjs} +37 -37
- package/dist/TopBar-CUCBss7X.mjs.map +1 -0
- package/dist/TopBar-CeQQ1hgH.mjs.map +1 -0
- package/dist/TopBar-DdxThCLR.mjs.map +1 -0
- package/dist/{UserButtonContent-BR3Rlqwp.mjs → UserButtonContent--VK68UsY.mjs} +6 -6
- package/dist/UserButtonContent-067qGenf.mjs.map +1 -0
- package/dist/UserButtonContent-Dqgyrgzv.mjs.map +1 -0
- package/dist/VideoModuleBox-9QgBI-Q-.mjs.map +1 -0
- package/dist/{VideoModuleBox-DxYJVwy3.mjs → VideoModuleBox-Bcqman6a.mjs} +1 -1
- package/dist/VideoModuleBox-BrVK2bDZ.mjs.map +1 -0
- package/dist/VideoModuleBox-DWO47_bZ.mjs.map +1 -0
- package/dist/VideoPage-4MB4zmnA.mjs.map +1 -0
- package/dist/VideoPage-BDGvtr1o.mjs.map +1 -0
- package/dist/{VideoPage-BaeTduNB.mjs → VideoPage-BjlaP2DU.mjs} +6 -6
- package/dist/VideoPage-C-yjvvhl.mjs.map +1 -0
- package/dist/VideoPage-C0_t7XMC.mjs.map +1 -0
- package/dist/VideoPage-CIDpzbkb.mjs.map +1 -0
- package/dist/VideoPage-D2V1oXGC.mjs.map +1 -0
- package/dist/VideoPage-DEJSfeFy.mjs.map +1 -0
- package/dist/{classicApi-pmODlqv5.mjs → classicApi-CGipMqf7.mjs} +267 -256
- package/dist/classicApi-CW1Z-HoF.mjs.map +1 -0
- package/dist/classicApi-OzToKuW1.mjs.map +1 -0
- package/dist/{downloadHelper-BAI-eqgA.mjs → downloadHelper-C3QooCxr.mjs} +1 -1
- package/dist/downloadHelper-D7dUpp5l.mjs.map +1 -0
- package/dist/downloadHelper-DwV3Mmd3.mjs.map +1 -0
- package/dist/index.css +1 -1
- package/dist/index.mjs +183 -183
- package/dist/src/components/form/ClassicDatePicker.vue.d.ts +24 -14
- package/dist/src/components/form/OctopusMultiselect.vue.d.ts +2 -0
- package/dist/src/i18n.d.ts +2 -0
- package/dist/tests.mjs +2 -2
- package/dist/useAdvancedParamInit-BKw9VZ53.mjs.map +1 -0
- package/dist/useAdvancedParamInit-CyRmbqqe.mjs.map +1 -0
- package/dist/{useAdvancedParamInit-Bgvt8758.mjs → useAdvancedParamInit-D5roUdHI.mjs} +10 -10
- package/dist/useDayjs-BKBB00TF.mjs.map +1 -0
- package/dist/useDayjs-UQLGUbw5.mjs.map +1 -0
- package/dist/{useDayjs-DGb3L4kJ.mjs → useDayjs-VUs19G9T.mjs} +1 -1
- package/dist/useErrorHandler-BKN3lhJ5.mjs.map +1 -0
- package/dist/useErrorHandler-C3XnRTmp.mjs.map +1 -0
- package/dist/{useErrorHandler-D9W2BURn.mjs → useErrorHandler-x9sjDYSz.mjs} +1 -1
- package/dist/useImageProxy-AEcmDpvW.mjs.map +1 -0
- package/dist/useImageProxy-BzTG_GCn.mjs.map +1 -0
- package/dist/{useImageProxy-8ndy_oTo.mjs → useImageProxy-CCpDzPmQ.mjs} +1 -1
- package/dist/useOrgaComputed-4PduqYTq.mjs.map +1 -0
- package/dist/useOrgaComputed-C2n0FBbv.mjs.map +1 -0
- package/dist/{useOrgaComputed-CBJ5sDOm.mjs → useOrgaComputed-D81Jihm-.mjs} +2 -2
- package/dist/{usePlayerLogicProgress-C2L7cMdd.mjs → usePlayerLogicProgress-BybmSAcs.mjs} +2 -2
- package/dist/usePlayerLogicProgress-CKoCod6g.mjs.map +1 -0
- package/dist/usePlayerLogicProgress-DZaPRo6p.mjs.map +1 -0
- package/dist/usePodcastView-B-2HPFAo.mjs.map +1 -0
- package/dist/{usePodcastView-CoDJJr6Y.mjs → usePodcastView-CkM-n6iO.mjs} +3 -3
- package/dist/usePodcastView-jdYTK1cW.mjs.map +1 -0
- package/dist/{usePresentationItem-DZZVm3hh.mjs → usePresentationItem-CLEGZwI3.mjs} +3 -3
- package/dist/usePresentationItem-Com4i40U.mjs.map +1 -0
- package/dist/usePresentationItem-OpMean0v.mjs.map +1 -0
- package/dist/{useRights-DOXtpjv5.mjs → useRights-BI2tXXjR.mjs} +1 -1
- package/dist/useRights-Bsv9hr7w.mjs.map +1 -0
- package/dist/useRights-DfudFDI6.mjs.map +1 -0
- package/dist/{useRubriquesFilterComputed-DoUOqOrJ.mjs → useRubriquesFilterComputed-D1yqLnK4.mjs} +1 -1
- package/dist/useRubriquesFilterComputed-DGDJp2gc.mjs.map +1 -0
- package/dist/useRubriquesFilterComputed-NNE-FElk.mjs.map +1 -0
- package/dist/{useRubriquesFilterParam-BE8BbmAQ.mjs → useRubriquesFilterParam-2eMd5ND7.mjs} +1 -1
- package/dist/useRubriquesFilterParam-DE5dYl6c.mjs.map +1 -0
- package/dist/useRubriquesFilterParam-DXYD4G0D.mjs.map +1 -0
- package/dist/useSharePlatforms-CrQ8r5vT.mjs.map +1 -0
- package/dist/useSharePlatforms-D124fJ_v.mjs.map +1 -0
- package/dist/{useSharePlatforms-ZWYDJZBy.mjs → useSharePlatforms-sXgVxsL5.mjs} +5 -5
- package/dist/{useSimplePageParam-DFKSEyiE.mjs → useSimplePageParam-BrtYXOUt.mjs} +1 -1
- package/dist/useSimplePageParam-CruL7rLG.mjs.map +1 -0
- package/dist/useSimplePageParam-SaBaPhb8.mjs.map +1 -0
- package/dist/{useTranslation-Dr7KU7Y4.mjs → useTranslation-BVQwv02Q.mjs} +9 -9
- package/dist/useTranslation-Bf2zP_6C.mjs.map +1 -0
- package/dist/useTranslation-BuhzZoI8.mjs.map +1 -0
- package/dist/useTranslation-OWqckMEl.mjs.map +1 -0
- package/dist/usefetchRadioData-D01ws733.mjs.map +1 -0
- package/dist/usefetchRadioData-DDRPoD4s.mjs.map +1 -0
- package/dist/{usefetchRadioData-SLWfXkYt.mjs → usefetchRadioData-zyQNqiV3.mjs} +1 -1
- package/package.json +1 -1
- package/src/components/composable/useTranslation.ts +2 -2
- package/src/components/display/sharing/QrCode.vue +63 -64
- package/src/components/form/ClassicDatePicker.vue +32 -20
- package/src/components/form/OctopusMultiselect.vue +3 -4
- package/src/components/misc/ClassicPopover.vue +1 -1
- package/src/components/misc/player/video/PlayerVideoHls.vue +160 -159
- package/src/i18n.ts +38 -29
- package/tests/components/form/ClassicDatePicker.spec.ts +32 -0
- package/tests/components/form/OctopusMultiselect.spec.ts +5 -4
- package/dist/ClassicDatePicker-B7UA9CqR.mjs +0 -187
- package/dist/QrCode-DuScZ7PD.mjs +0 -105
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideo-DXG_PsWA.mjs","names":["youtubeVideoHelper","_openBlock","_createBlock","_Teleport","_createElementBlock","_Fragment","_createElementVNode","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideo.vue","../src/components/misc/player/video/PlayerVideo.vue"],"sourcesContent":["<template>\n <teleport to=\".octopus-app\">\n <template v-if=\"playerStore.playerVideo\">\n <button class=\"btn btn-transparent video-close\" @click=\"closePlayer\">\n <WindowCloseIcon />\n </button>\n <div class=\"video-wrapper\">\n <PlayerYoutubeEmbed v-if=\"youtubeId\" :youtube-id=\"youtubeId\" />\n <PlayerVideoDigiteka\n v-else-if=\"!playerStore.playerLive\"\n :video-id=\"playerStore.playerPodcast?.video?.videoId\"\n :podcast-id=\"playerStore.playerPodcast.podcastId\"\n />\n <PlayerVideoHls v-else :hls-url=\"hlsVideoUrl\" :is-secured=\"isSecured\"/>\n </div>\n </template>\n </teleport>\n</template>\n<script setup lang=\"ts\">\nimport youtubeVideoHelper from \"../../../../helper/youtubeVideoHelper\";\nimport WindowCloseIcon from \"vue-material-design-icons/WindowClose.vue\";\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport { useApiStore } from \"../../../../stores/ApiStore\";\nimport { defineAsyncComponent, ref, Ref, computed, onMounted } from \"vue\";\nconst PlayerVideoDigiteka = defineAsyncComponent(\n () => import(\"../video/PlayerVideoDigiteka.vue\"),\n);\nconst PlayerVideoHls = defineAsyncComponent(\n () => import(\"../video/PlayerVideoHls.vue\"),\n);\nconst PlayerYoutubeEmbed = defineAsyncComponent(\n () => import(\"../video/PlayerYoutubeEmbed.vue\"),\n);\n\n//Data \nconst youtubeId: Ref<string|undefined> = ref(undefined);\n\n//Composables\nconst apiStore = useApiStore();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isSecured = computed(() => \"SECURED\" === playerStore.playerLive?.organisation?.privacy);\nconst hlsVideoUrl = computed(() => {\n if (!playerStore.playerHlsIdentifier) {\n return \"\";\n }\n return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;\n});\n\nonMounted(()=>{\n youtubeId.value = youtubeVideoHelper.getYoutubeId((playerStore.playerPodcast ?? playerStore.playerLive )?.tags ?? []);\n})\n\n//Methods\nfunction closePlayer() {\n playerStore.playerPlay();\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .video-wrapper {\n border-radius: 1rem;\n overflow: hidden;\n position: fixed;\n bottom: 2.5rem;\n right: 0;\n z-index: 10;\n }\n\n .video-close {\n position: fixed;\n bottom: 16.5rem;\n right: 1rem;\n }\n\n @media (width <= 500px) {\n .video-close {\n bottom: 10.5rem;\n }\n\n .video-wrapper iframe {\n width: 100%;\n max-height: 150px;\n }\n }\n}\n</style>\n","<template>\n <teleport to=\".octopus-app\">\n <template v-if=\"playerStore.playerVideo\">\n <button class=\"btn btn-transparent video-close\" @click=\"closePlayer\">\n <WindowCloseIcon />\n </button>\n <div class=\"video-wrapper\">\n <PlayerYoutubeEmbed v-if=\"youtubeId\" :youtube-id=\"youtubeId\" />\n <PlayerVideoDigiteka\n v-else-if=\"!playerStore.playerLive\"\n :video-id=\"playerStore.playerPodcast?.video?.videoId\"\n :podcast-id=\"playerStore.playerPodcast.podcastId\"\n />\n <PlayerVideoHls v-else :hls-url=\"hlsVideoUrl\" :is-secured=\"isSecured\"/>\n </div>\n </template>\n </teleport>\n</template>\n<script setup lang=\"ts\">\nimport youtubeVideoHelper from \"../../../../helper/youtubeVideoHelper\";\nimport WindowCloseIcon from \"vue-material-design-icons/WindowClose.vue\";\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport { useApiStore } from \"../../../../stores/ApiStore\";\nimport { defineAsyncComponent, ref, Ref, computed, onMounted } from \"vue\";\nconst PlayerVideoDigiteka = defineAsyncComponent(\n () => import(\"../video/PlayerVideoDigiteka.vue\"),\n);\nconst PlayerVideoHls = defineAsyncComponent(\n () => import(\"../video/PlayerVideoHls.vue\"),\n);\nconst PlayerYoutubeEmbed = defineAsyncComponent(\n () => import(\"../video/PlayerYoutubeEmbed.vue\"),\n);\n\n//Data \nconst youtubeId: Ref<string|undefined> = ref(undefined);\n\n//Composables\nconst apiStore = useApiStore();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isSecured = computed(() => \"SECURED\" === playerStore.playerLive?.organisation?.privacy);\nconst hlsVideoUrl = computed(() => {\n if (!playerStore.playerHlsIdentifier) {\n return \"\";\n }\n return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;\n});\n\nonMounted(()=>{\n youtubeId.value = youtubeVideoHelper.getYoutubeId((playerStore.playerPodcast ?? playerStore.playerLive )?.tags ?? []);\n})\n\n//Methods\nfunction closePlayer() {\n playerStore.playerPlay();\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .video-wrapper {\n border-radius: 1rem;\n overflow: hidden;\n position: fixed;\n bottom: 2.5rem;\n right: 0;\n z-index: 10;\n }\n\n .video-close {\n position: fixed;\n bottom: 16.5rem;\n right: 1rem;\n }\n\n @media (width <= 500px) {\n .video-close {\n bottom: 10.5rem;\n }\n\n .video-wrapper iframe {\n width: 100%;\n max-height: 150px;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;EAwBA,MAAM,sBAAsB,2BACpB,OAAO,qCACf;EACA,MAAM,iBAAiB,2BACf,OAAO,gCACf;EACA,MAAM,qBAAqB,2BACnB,OAAO,oCACf;EAGA,MAAM,YAAmC,IAAI,KAAA,CAAS;EAGtD,MAAM,WAAW,YAAY;EAC7B,MAAM,cAAc,eAAe;EAInC,MAAM,YAAY,eAAe,cAAc,YAAY,YAAY,cAAc,OAAO;EAC5F,MAAM,cAAc,eAAe;GACjC,IAAI,CAAC,YAAY,qBACf,OAAO;GAET,OAAO,GAAG,SAAS,OAAO,aAAa,YAAY,oBAAoB;EACzE,CAAC;EAED,gBAAc;GACZ,UAAU,QAAQA,2BAAmB,cAAc,YAAY,iBAAiB,YAAY,WAAA,EAAc,QAAQ,CAAC,CAAC;EACtH,CAAC;EAGD,SAAS,cAAc;GACrB,YAAY,WAAW;EACzB;;;;;;;;;;;;;;;;;;;;;;ACpDW,IAAA,aAAA,EAAA,OAAM,gBAAe;;CAL9B,OAAAC,UAAA,GAAAC,YAeWC,UAAA,EAfD,IAAG,eAAc,GAAA,CACT,OAAA,YAAY,eAA5BF,UAAA,GAAAG,mBAaWC,UAAA,EAAA,KAAA,EAAA,GAAA,CAZTC,mBAES,UAAA;EAFD,OAAM;EAAmC,SAAO,OAAA;CACtD,GAAA,CAAAC,YAAmB,OAAA,kBAAA,CAAA,CAAA,GAErBD,mBAQM,OARN,YAQM,CAPsB,OAAA,aAA1BL,UAAA,GAAAC,YAA+D,OAAA,uBAAA;;EAAzB,cAAY,OAAA;CAEpC,GAAA,MAAA,GAAA,CAAA,YAAA,CAAA,KAAA,CAAA,OAAA,YAAY,cAD1BD,UAAA,GAAAC,YAIE,OAAA,wBAAA;;EAFC,YAAU,OAAA,YAAY,eAAe,OAAO;EAC5C,cAAY,OAAA,YAAY,cAAc;CAEzC,GAAA,MAAA,GAAA,CAAA,YAAA,YAAA,CAAA,MAAAD,UAAA,GAAAC,YAAuE,OAAA,mBAAA;;EAA/C,WAAS,OAAA;EAAc,cAAY,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideo-DzUapxuZ.mjs","names":["youtubeVideoHelper","_openBlock","_createBlock","_Teleport","_createElementBlock","_Fragment","_createElementVNode","_createVNode","_createCommentVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideo.vue","../src/components/misc/player/video/PlayerVideo.vue"],"sourcesContent":["<template>\n <teleport to=\".octopus-app\">\n <template v-if=\"playerStore.playerVideo\">\n <button class=\"btn btn-transparent video-close\" @click=\"closePlayer\">\n <WindowCloseIcon />\n </button>\n <div class=\"video-wrapper\">\n <PlayerYoutubeEmbed v-if=\"youtubeId\" :youtube-id=\"youtubeId\" />\n <PlayerVideoDigiteka\n v-else-if=\"!playerStore.playerLive\"\n :video-id=\"playerStore.playerPodcast?.video?.videoId\"\n :podcast-id=\"playerStore.playerPodcast.podcastId\"\n />\n <PlayerVideoHls v-else :hls-url=\"hlsVideoUrl\" :is-secured=\"isSecured\"/>\n </div>\n </template>\n </teleport>\n</template>\n<script setup lang=\"ts\">\nimport youtubeVideoHelper from \"../../../../helper/youtubeVideoHelper\";\nimport WindowCloseIcon from \"vue-material-design-icons/WindowClose.vue\";\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport { useApiStore } from \"../../../../stores/ApiStore\";\nimport { defineAsyncComponent, ref, Ref, computed, onMounted } from \"vue\";\nconst PlayerVideoDigiteka = defineAsyncComponent(\n () => import(\"../video/PlayerVideoDigiteka.vue\"),\n);\nconst PlayerVideoHls = defineAsyncComponent(\n () => import(\"../video/PlayerVideoHls.vue\"),\n);\nconst PlayerYoutubeEmbed = defineAsyncComponent(\n () => import(\"../video/PlayerYoutubeEmbed.vue\"),\n);\n\n//Data \nconst youtubeId: Ref<string|undefined> = ref(undefined);\n\n//Composables\nconst apiStore = useApiStore();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isSecured = computed(() => \"SECURED\" === playerStore.playerLive?.organisation?.privacy);\nconst hlsVideoUrl = computed(() => {\n if (!playerStore.playerHlsIdentifier) {\n return \"\";\n }\n return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;\n});\n\nonMounted(()=>{\n youtubeId.value = youtubeVideoHelper.getYoutubeId((playerStore.playerPodcast ?? playerStore.playerLive )?.tags ?? []);\n})\n\n//Methods\nfunction closePlayer() {\n playerStore.playerPlay();\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .video-wrapper {\n border-radius: 1rem;\n overflow: hidden;\n position: fixed;\n bottom: 2.5rem;\n right: 0;\n z-index: 10;\n }\n\n .video-close {\n position: fixed;\n bottom: 16.5rem;\n right: 1rem;\n }\n\n @media (width <= 500px) {\n .video-close {\n bottom: 10.5rem;\n }\n\n .video-wrapper iframe {\n width: 100%;\n max-height: 150px;\n }\n }\n}\n</style>\n","<template>\n <teleport to=\".octopus-app\">\n <template v-if=\"playerStore.playerVideo\">\n <button class=\"btn btn-transparent video-close\" @click=\"closePlayer\">\n <WindowCloseIcon />\n </button>\n <div class=\"video-wrapper\">\n <PlayerYoutubeEmbed v-if=\"youtubeId\" :youtube-id=\"youtubeId\" />\n <PlayerVideoDigiteka\n v-else-if=\"!playerStore.playerLive\"\n :video-id=\"playerStore.playerPodcast?.video?.videoId\"\n :podcast-id=\"playerStore.playerPodcast.podcastId\"\n />\n <PlayerVideoHls v-else :hls-url=\"hlsVideoUrl\" :is-secured=\"isSecured\"/>\n </div>\n </template>\n </teleport>\n</template>\n<script setup lang=\"ts\">\nimport youtubeVideoHelper from \"../../../../helper/youtubeVideoHelper\";\nimport WindowCloseIcon from \"vue-material-design-icons/WindowClose.vue\";\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport { useApiStore } from \"../../../../stores/ApiStore\";\nimport { defineAsyncComponent, ref, Ref, computed, onMounted } from \"vue\";\nconst PlayerVideoDigiteka = defineAsyncComponent(\n () => import(\"../video/PlayerVideoDigiteka.vue\"),\n);\nconst PlayerVideoHls = defineAsyncComponent(\n () => import(\"../video/PlayerVideoHls.vue\"),\n);\nconst PlayerYoutubeEmbed = defineAsyncComponent(\n () => import(\"../video/PlayerYoutubeEmbed.vue\"),\n);\n\n//Data \nconst youtubeId: Ref<string|undefined> = ref(undefined);\n\n//Composables\nconst apiStore = useApiStore();\nconst playerStore = usePlayerStore();\n\n\n//Computed\nconst isSecured = computed(() => \"SECURED\" === playerStore.playerLive?.organisation?.privacy);\nconst hlsVideoUrl = computed(() => {\n if (!playerStore.playerHlsIdentifier) {\n return \"\";\n }\n return `${apiStore.hlsUrl}live/video_${playerStore.playerHlsIdentifier}/index.m3u8`;\n});\n\nonMounted(()=>{\n youtubeId.value = youtubeVideoHelper.getYoutubeId((playerStore.playerPodcast ?? playerStore.playerLive )?.tags ?? []);\n})\n\n//Methods\nfunction closePlayer() {\n playerStore.playerPlay();\n}\n</script>\n\n<style lang=\"scss\">\n.octopus-app {\n .video-wrapper {\n border-radius: 1rem;\n overflow: hidden;\n position: fixed;\n bottom: 2.5rem;\n right: 0;\n z-index: 10;\n }\n\n .video-close {\n position: fixed;\n bottom: 16.5rem;\n right: 1rem;\n }\n\n @media (width <= 500px) {\n .video-close {\n bottom: 10.5rem;\n }\n\n .video-wrapper iframe {\n width: 100%;\n max-height: 150px;\n }\n }\n}\n</style>\n"],"mappings":";;;;;;;;;;;EAwBA,MAAM,sBAAsB,2BACpB,OAAO,qCACf;EACA,MAAM,iBAAiB,2BACf,OAAO,gCACf;EACA,MAAM,qBAAqB,2BACnB,OAAO,oCACf;EAGA,MAAM,YAAmC,IAAI,KAAA,CAAS;EAGtD,MAAM,WAAW,YAAY;EAC7B,MAAM,cAAc,eAAe;EAInC,MAAM,YAAY,eAAe,cAAc,YAAY,YAAY,cAAc,OAAO;EAC5F,MAAM,cAAc,eAAe;GACjC,IAAI,CAAC,YAAY,qBACf,OAAO;GAET,OAAO,GAAG,SAAS,OAAO,aAAa,YAAY,oBAAoB;EACzE,CAAC;EAED,gBAAc;GACZ,UAAU,QAAQA,2BAAmB,cAAc,YAAY,iBAAiB,YAAY,WAAA,EAAc,QAAQ,CAAC,CAAC;EACtH,CAAC;EAGD,SAAS,cAAc;GACrB,YAAY,WAAW;EACzB;;;;;;;;;;;;;;;;;;;;;;ACpDW,IAAA,aAAA,EAAA,OAAM,gBAAe;;CAL9B,OAAAC,UAAA,GAAAC,YAeWC,UAAA,EAfD,IAAG,eAAc,GAAA,CACT,OAAA,YAAY,eAA5BF,UAAA,GAAAG,mBAaWC,UAAA,EAAA,KAAA,EAAA,GAAA,CAZTC,mBAES,UAAA;EAFD,OAAM;EAAmC,SAAO,OAAA;CACtD,GAAA,CAAAC,YAAmB,OAAA,kBAAA,CAAA,CAAA,GAErBD,mBAQM,OARN,YAQM,CAPsB,OAAA,aAA1BL,UAAA,GAAAC,YAA+D,OAAA,uBAAA;;EAAzB,cAAY,OAAA;CAEpC,GAAA,MAAA,GAAA,CAAA,YAAA,CAAA,KAAA,CAAA,OAAA,YAAY,cAD1BD,UAAA,GAAAC,YAIE,OAAA,wBAAA;;EAFC,YAAU,OAAA,YAAY,eAAe,OAAO;EAC5C,cAAY,OAAA,YAAY,cAAc;CAEzC,GAAA,MAAA,GAAA,CAAA,YAAA,YAAA,CAAA,MAAAD,UAAA,GAAAC,YAAuE,OAAA,mBAAA;;EAA/C,WAAS,OAAA;EAAc,cAAY,OAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoDigiteka-B1rRVLzy.mjs","names":["classicApi","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","_createVNode","_sfc_main"],"sources":["../src/api/videoApi.ts","../src/components/misc/player/video/PlayerVideoDigiteka.vue","../src/components/misc/player/video/PlayerVideoDigiteka.vue"],"sourcesContent":["import { ModuleApi } from \"./apiConnection\";\nimport classicApi from \"./classicApi\";\n\n/**\n * Request the download ID from a video\n * @param podcastId The id of the podcast to be watched\n */\nasync function watchPodcast(podcastId: number): Promise<string> {\n return classicApi.fetchData<string>({\n api: ModuleApi.DEFAULT,\n path: 'video/watch/' + podcastId\n });\n}\n\nexport const videoApi = {\n watchPodcast\n}\n","<template>\n <div :class=\"responsive ? 'video-responsive-wrapper' : ''\">\n <iframe\n v-if=\"videoId\"\n ref=\"iframeVideo\"\n :src=\"srcVideo\"\n :title=\"t('Video')\"\n width=\"500\"\n height=\"281\"\n style=\"z-index: 1\"\n ebkitallowfullscreen=\"true\"\n mozallowfullscreen=\"true\"\n allowfullscreen=\"true\"\n allow=\"fullscreen; autoplay\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n ></iframe>\n <SnackBar ref=\"snackbar\" position=\"bottom-left\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from \"vue-i18n\";\nimport SnackBar from \"../../SnackBar.vue\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\n\nimport { usePlayerLogicProgress } from \"../../../composable/player/usePlayerLogicProgress\";\nimport { videoApi } from \"../../../../api/videoApi\";\n\n//Props \nconst props = defineProps({\n videoId: { type: String, required: true },\n podcastId: { type: Number, required: false, default: null },\n responsive: { default: false, type: Boolean },\n})\n\n//Data\nconst snackBarRef = useTemplateRef('snackbar');\n\n//Composables\nconst { t } = useI18n();\nconst { onTimeUpdateProgress, setDownloadId } = usePlayerLogicProgress();\n\n//Computed\nconst srcVideo = computed(() => {\n return (\n \"//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/\" +\n props.videoId +\n \"/sound/yes/autoplay/1\"\n );\n});\n\nonMounted(async()=>{\n if (undefined === props.videoId) {\n (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t(\"Podcast play error\"));\n }\n\n // #14118 cf https://support.digiteka.com/fr/API/Iframe#h-3-r%C3%A9ception-des-%C3%A9v%C3%A9nements-du-player\n window.addEventListener('message', event => {\n if (typeof event.data !== 'string') {\n return;\n }\n\n const data = Object.fromEntries(event.data.split('&').map(d => d.split('=')));\n if (data.event === 'timeupdate') {\n onTimeUpdateProgress(parseFloat(data.time));\n }\n });\n\n if (props.podcastId !== undefined) {\n const downloadId = await videoApi.watchPodcast(props.podcastId);\n setDownloadId(downloadId);\n }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use \"../../../../style/videoPlayer\";\n</style>\n","<template>\n <div :class=\"responsive ? 'video-responsive-wrapper' : ''\">\n <iframe\n v-if=\"videoId\"\n ref=\"iframeVideo\"\n :src=\"srcVideo\"\n :title=\"t('Video')\"\n width=\"500\"\n height=\"281\"\n style=\"z-index: 1\"\n ebkitallowfullscreen=\"true\"\n mozallowfullscreen=\"true\"\n allowfullscreen=\"true\"\n allow=\"fullscreen; autoplay\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n ></iframe>\n <SnackBar ref=\"snackbar\" position=\"bottom-left\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from \"vue-i18n\";\nimport SnackBar from \"../../SnackBar.vue\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\n\nimport { usePlayerLogicProgress } from \"../../../composable/player/usePlayerLogicProgress\";\nimport { videoApi } from \"../../../../api/videoApi\";\n\n//Props \nconst props = defineProps({\n videoId: { type: String, required: true },\n podcastId: { type: Number, required: false, default: null },\n responsive: { default: false, type: Boolean },\n})\n\n//Data\nconst snackBarRef = useTemplateRef('snackbar');\n\n//Composables\nconst { t } = useI18n();\nconst { onTimeUpdateProgress, setDownloadId } = usePlayerLogicProgress();\n\n//Computed\nconst srcVideo = computed(() => {\n return (\n \"//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/\" +\n props.videoId +\n \"/sound/yes/autoplay/1\"\n );\n});\n\nonMounted(async()=>{\n if (undefined === props.videoId) {\n (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t(\"Podcast play error\"));\n }\n\n // #14118 cf https://support.digiteka.com/fr/API/Iframe#h-3-r%C3%A9ception-des-%C3%A9v%C3%A9nements-du-player\n window.addEventListener('message', event => {\n if (typeof event.data !== 'string') {\n return;\n }\n\n const data = Object.fromEntries(event.data.split('&').map(d => d.split('=')));\n if (data.event === 'timeupdate') {\n onTimeUpdateProgress(parseFloat(data.time));\n }\n });\n\n if (props.podcastId !== undefined) {\n const downloadId = await videoApi.watchPodcast(props.podcastId);\n setDownloadId(downloadId);\n }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use \"../../../../style/videoPlayer\";\n</style>\n"],"mappings":";;;;;;;;;;;AAOA,eAAe,aAAa,WAAoC;CAC5D,OAAOA,mBAAW,UAAkB;EAChC,KAAK,UAAU;EACf,MAAM,iBAAiB;CAC3B,CAAC;AACL;AAEA,IAAa,WAAW,EACpB,aACJ;;;;;;;;;;;;;;;;;;;;;;ECaA,MAAM,QAAQ;EAOd,MAAM,cAAc,eAAe,UAAU;EAG7C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,EAAE,sBAAsB,kBAAkB,uBAAuB;EAGvE,MAAM,WAAW,eAAe;GAC9B,OACE,qFACA,MAAM,UACN;EAEJ,CAAC;EAED,UAAU,YAAS;GACjB,IAAI,KAAA,MAAc,MAAM,SACtB,CAAC,aAAa,MAAA,CAAwC,KAAK,EAAE,oBAAoB,CAAC;GAIpF,OAAO,iBAAiB,YAAW,UAAS;IAC1C,IAAI,OAAO,MAAM,SAAS,UACxB;IAGF,MAAM,OAAO,OAAO,YAAY,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,KAAI,MAAK,EAAE,MAAM,GAAG,CAAC,CAAC;IAC5E,IAAI,KAAK,UAAU,cACjB,qBAAqB,WAAW,KAAK,IAAI,CAAC;GAE9C,CAAC;GAED,IAAI,MAAM,cAAc,KAAA,GAAW;IACjC,MAAM,aAAa,MAAM,SAAS,aAAa,MAAM,SAAS;IAC9D,cAAc,UAAU;GAC1B;EACF,CAAC;;;;;;;;;;;;;;;;;;;;;CCvEC,OAAAC,UAAA,GAAAC,mBAgBM,OAAA,EAhBA,OAAKC,eAAE,OAAA,aAAU,6BAAA,EAAA,EAAA,GAEb,CAAA,OAAA,WADRF,UAAA,GAAAC,mBAaU,UAAA;;EAXR,KAAI;EACH,KAAK,OAAA;EACL,OAAO,OAAA,EAAC,OAAA;EACT,OAAM;EACN,QAAO;EACP,OAAA,EAAA,WAAA,IAAA;EACA,sBAAqB;EACrB,oBAAmB;EACnB,iBAAgB;EAChB,OAAM;EACN,gBAAe;CAEjB,GAAA,MAAA,GAAA,UAAA,KAAAE,mBAAA,QAAA,IAAA,GAAAC,YAAkD,OAAA,aAAA;EAAxC,KAAI;EAAW,UAAS"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoDigiteka-B6qODy7b.mjs","names":["classicApi","_openBlock","_createElementBlock","_normalizeClass","_createCommentVNode","_createVNode","_sfc_main"],"sources":["../src/api/videoApi.ts","../src/components/misc/player/video/PlayerVideoDigiteka.vue","../src/components/misc/player/video/PlayerVideoDigiteka.vue"],"sourcesContent":["import { ModuleApi } from \"./apiConnection\";\nimport classicApi from \"./classicApi\";\n\n/**\n * Request the download ID from a video\n * @param podcastId The id of the podcast to be watched\n */\nasync function watchPodcast(podcastId: number): Promise<string> {\n return classicApi.fetchData<string>({\n api: ModuleApi.DEFAULT,\n path: 'video/watch/' + podcastId\n });\n}\n\nexport const videoApi = {\n watchPodcast\n}\n","<template>\n <div :class=\"responsive ? 'video-responsive-wrapper' : ''\">\n <iframe\n v-if=\"videoId\"\n ref=\"iframeVideo\"\n :src=\"srcVideo\"\n :title=\"t('Video')\"\n width=\"500\"\n height=\"281\"\n style=\"z-index: 1\"\n ebkitallowfullscreen=\"true\"\n mozallowfullscreen=\"true\"\n allowfullscreen=\"true\"\n allow=\"fullscreen; autoplay\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n ></iframe>\n <SnackBar ref=\"snackbar\" position=\"bottom-left\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from \"vue-i18n\";\nimport SnackBar from \"../../SnackBar.vue\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\n\nimport { usePlayerLogicProgress } from \"../../../composable/player/usePlayerLogicProgress\";\nimport { videoApi } from \"../../../../api/videoApi\";\n\n//Props \nconst props = defineProps({\n videoId: { type: String, required: true },\n podcastId: { type: Number, required: false, default: null },\n responsive: { default: false, type: Boolean },\n})\n\n//Data\nconst snackBarRef = useTemplateRef('snackbar');\n\n//Composables\nconst { t } = useI18n();\nconst { onTimeUpdateProgress, setDownloadId } = usePlayerLogicProgress();\n\n//Computed\nconst srcVideo = computed(() => {\n return (\n \"//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/\" +\n props.videoId +\n \"/sound/yes/autoplay/1\"\n );\n});\n\nonMounted(async()=>{\n if (undefined === props.videoId) {\n (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t(\"Podcast play error\"));\n }\n\n // #14118 cf https://support.digiteka.com/fr/API/Iframe#h-3-r%C3%A9ception-des-%C3%A9v%C3%A9nements-du-player\n window.addEventListener('message', event => {\n if (typeof event.data !== 'string') {\n return;\n }\n\n const data = Object.fromEntries(event.data.split('&').map(d => d.split('=')));\n if (data.event === 'timeupdate') {\n onTimeUpdateProgress(parseFloat(data.time));\n }\n });\n\n if (props.podcastId !== undefined) {\n const downloadId = await videoApi.watchPodcast(props.podcastId);\n setDownloadId(downloadId);\n }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use \"../../../../style/videoPlayer\";\n</style>\n","<template>\n <div :class=\"responsive ? 'video-responsive-wrapper' : ''\">\n <iframe\n v-if=\"videoId\"\n ref=\"iframeVideo\"\n :src=\"srcVideo\"\n :title=\"t('Video')\"\n width=\"500\"\n height=\"281\"\n style=\"z-index: 1\"\n ebkitallowfullscreen=\"true\"\n mozallowfullscreen=\"true\"\n allowfullscreen=\"true\"\n allow=\"fullscreen; autoplay\"\n referrerpolicy=\"no-referrer-when-downgrade\"\n ></iframe>\n <SnackBar ref=\"snackbar\" position=\"bottom-left\" />\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { useI18n } from \"vue-i18n\";\nimport SnackBar from \"../../SnackBar.vue\";\nimport { computed, onMounted, useTemplateRef } from \"vue\";\n\nimport { usePlayerLogicProgress } from \"../../../composable/player/usePlayerLogicProgress\";\nimport { videoApi } from \"../../../../api/videoApi\";\n\n//Props \nconst props = defineProps({\n videoId: { type: String, required: true },\n podcastId: { type: Number, required: false, default: null },\n responsive: { default: false, type: Boolean },\n})\n\n//Data\nconst snackBarRef = useTemplateRef('snackbar');\n\n//Composables\nconst { t } = useI18n();\nconst { onTimeUpdateProgress, setDownloadId } = usePlayerLogicProgress();\n\n//Computed\nconst srcVideo = computed(() => {\n return (\n \"//www.ultimedia.com/deliver/generic/iframe/mdtk/01009833/zone/1/showtitle/1/src/\" +\n props.videoId +\n \"/sound/yes/autoplay/1\"\n );\n});\n\nonMounted(async()=>{\n if (undefined === props.videoId) {\n (snackBarRef?.value as InstanceType<typeof SnackBar>).open(t(\"Podcast play error\"));\n }\n\n // #14118 cf https://support.digiteka.com/fr/API/Iframe#h-3-r%C3%A9ception-des-%C3%A9v%C3%A9nements-du-player\n window.addEventListener('message', event => {\n if (typeof event.data !== 'string') {\n return;\n }\n\n const data = Object.fromEntries(event.data.split('&').map(d => d.split('=')));\n if (data.event === 'timeupdate') {\n onTimeUpdateProgress(parseFloat(data.time));\n }\n });\n\n if (props.podcastId !== undefined) {\n const downloadId = await videoApi.watchPodcast(props.podcastId);\n setDownloadId(downloadId);\n }\n})\n</script>\n\n<style scoped lang=\"scss\">\n@use \"../../../../style/videoPlayer\";\n</style>\n"],"mappings":";;;;;;;;;;;AAOA,eAAe,aAAa,WAAoC;CAC5D,OAAOA,mBAAW,UAAkB;EAChC,KAAK,UAAU;EACf,MAAM,iBAAiB;CAC3B,CAAC;AACL;AAEA,IAAa,WAAW,EACpB,aACJ;;;;;;;;;;;;;;;;;;;;;;ECaA,MAAM,QAAQ;EAOd,MAAM,cAAc,eAAe,UAAU;EAG7C,MAAM,EAAE,MAAM,QAAQ;EACtB,MAAM,EAAE,sBAAsB,kBAAkB,uBAAuB;EAGvE,MAAM,WAAW,eAAe;GAC9B,OACE,qFACA,MAAM,UACN;EAEJ,CAAC;EAED,UAAU,YAAS;GACjB,IAAI,KAAA,MAAc,MAAM,SACtB,CAAC,aAAa,MAAA,CAAwC,KAAK,EAAE,oBAAoB,CAAC;GAIpF,OAAO,iBAAiB,YAAW,UAAS;IAC1C,IAAI,OAAO,MAAM,SAAS,UACxB;IAGF,MAAM,OAAO,OAAO,YAAY,MAAM,KAAK,MAAM,GAAG,CAAC,CAAC,KAAI,MAAK,EAAE,MAAM,GAAG,CAAC,CAAC;IAC5E,IAAI,KAAK,UAAU,cACjB,qBAAqB,WAAW,KAAK,IAAI,CAAC;GAE9C,CAAC;GAED,IAAI,MAAM,cAAc,KAAA,GAAW;IACjC,MAAM,aAAa,MAAM,SAAS,aAAa,MAAM,SAAS;IAC9D,cAAc,UAAU;GAC1B;EACF,CAAC;;;;;;;;;;;;;;;;;;;;;CCvEC,OAAAC,UAAA,GAAAC,mBAgBM,OAAA,EAhBA,OAAKC,eAAE,OAAA,aAAU,6BAAA,EAAA,EAAA,GAEb,CAAA,OAAA,WADRF,UAAA,GAAAC,mBAaU,UAAA;;EAXR,KAAI;EACH,KAAK,OAAA;EACL,OAAO,OAAA,EAAC,OAAA;EACT,OAAM;EACN,QAAO;EACP,OAAA,EAAA,WAAA,IAAA;EACA,sBAAqB;EACrB,oBAAmB;EACnB,iBAAgB;EAChB,OAAM;EACN,gBAAe;CAEjB,GAAA,MAAA,GAAA,UAAA,KAAAE,mBAAA,QAAA,IAAA,GAAAC,YAAkD,OAAA,aAAA;EAAxC,KAAI;EAAW,UAAS"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { D as e, t } from "./classicApi-CGipMqf7.mjs";
|
|
2
2
|
import { t as n } from "./_plugin-vue_export-helper-B3ysoDQm.mjs";
|
|
3
3
|
import { t as r } from "./SnackBar-BL-mLRun.mjs";
|
|
4
|
-
import { t as i } from "./usePlayerLogicProgress-
|
|
4
|
+
import { t as i } from "./usePlayerLogicProgress-BybmSAcs.mjs";
|
|
5
5
|
import { computed as a, createCommentVNode as o, createElementBlock as s, createVNode as c, defineComponent as l, normalizeClass as u, onMounted as d, openBlock as f, unref as p, useTemplateRef as m } from "vue";
|
|
6
6
|
import { useI18n as h } from "vue-i18n";
|
|
7
7
|
//#region src/api/videoApi.ts
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoHls-BoAbvi2b.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideoHls.vue","../src/components/misc/player/video/PlayerVideoHls.vue"],"sourcesContent":["<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n ></video>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n player.value.on(\"error\", (error: any) => {\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n","<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n ></video>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n player.value.on(\"error\", (error: any) => {\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoHls-BsHaaJB-.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideoHls.vue","../src/components/misc/player/video/PlayerVideoHls.vue"],"sourcesContent":["<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async error => {\n console.error(error);\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n","<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async error => {\n console.error(error);\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoHls-C0ddorEn.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideoHls.vue","../src/components/misc/player/video/PlayerVideoHls.vue"],"sourcesContent":["<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">\n {{ errorPlay }}\n </div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value = videojs.browser.IS_SAFARI || videojs.browser.IS_IOS;\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: { beforeSend?: (xhr: XMLHttpRequest) => void }) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n console.error(videoElement.value.error);\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n const separator = props.hlsUrl.includes(\"?\") ? \"&\" : \"?\";\n videoElement.value.src = props.isSecured && authStore.authParam.accessToken\n ? `${props.hlsUrl}${separator}access_token=${authStore.authParam.accessToken}`\n : props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n","<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">\n {{ errorPlay }}\n </div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value = videojs.browser.IS_SAFARI || videojs.browser.IS_IOS;\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: { beforeSend?: (xhr: XMLHttpRequest) => void }) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n console.error(videoElement.value.error);\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n const separator = props.hlsUrl.includes(\"?\") ? \"&\" : \"?\";\n videoElement.value.src = props.isSecured && authStore.authParam.accessToken\n ? `${props.hlsUrl}${separator}access_token=${authStore.authParam.accessToken}`\n : props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoHls-DBODDRmV.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideoHls.vue","../src/components/misc/player/video/PlayerVideoHls.vue"],"sourcesContent":["<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n ></video>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n player.value.on(\"error\", (error: any) => {\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n","<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n ></video>\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n player.value.on(\"error\", (error: any) => {\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlayerVideoHls-DVNHm_O2.mjs","names":["_openBlock","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_createElementVNode","_sfc_main"],"sources":["../src/components/misc/player/video/PlayerVideoHls.vue","../src/components/misc/player/video/PlayerVideoHls.vue"],"sourcesContent":["<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n","<template>\n <div\n id=\"player-video-hls\"\n class=\"video-player\"\n :class=\"responsive ? 'video-responsive-wrapper' : ''\"\n >\n <div v-if=\"errorPlay.length\" class=\"video-live-error\">{{ errorPlay }}</div>\n <video\n id=\"video-element-hls\"\n ref=\"videoelement\"\n class=\"video-js\"\n playsinline\n />\n </div>\n</template>\n<script setup lang=\"ts\">\nimport { usePlayerStore } from \"../../../../stores/PlayerStore\";\nimport {usePlayerLogicProgress} from \"../../../composable/player/usePlayerLogicProgress\";\nimport videojs, { VideoJsPlayer } from \"video.js\";\nimport qualitySelectorHls from \"videojs-quality-selector-hls\";\nif (undefined === videojs.getPlugin(\"qualitySelectorHls\")) {\n videojs.registerPlugin(\"qualitySelectorHls\", qualitySelectorHls);\n}\nimport { computed, onMounted, onUnmounted, Ref, ref, useTemplateRef } from \"vue\";\nimport { useAuthStore } from \"../../../../stores/AuthStore\";\nimport { useI18n } from \"vue-i18n\";\n\n//Props \nconst props = defineProps({\n hlsUrl: { default: \"\", type: String },\n responsive: { default: false, type: Boolean },\n isSecured: { default: true, type: Boolean },\n})\n\n//Data\nconst errorPlay = ref(\"\");\nconst useVideoSrc = ref(false);\nconst player: Ref<VideoJsPlayer | undefined> = ref(false);\nconst playing = ref(false);\nconst isPaused = ref(false);\nconst stalledTimout: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined);\nconst videoElementRef = useTemplateRef('videoelement');\n\n\n//Composables\nconst { t } = useI18n();\nconst { downloadId, initLiveDownloadId, onTimeUpdateProgress, endListeningProgress} = usePlayerLogicProgress();\nconst authStore = useAuthStore();\nconst playerStore = usePlayerStore();\n\n\n\n//Computed\nconst videoElement = computed(() => {\n return videoElementRef?.value as HTMLVideoElement;\n});\nconst videoOptions = computed(() => {\n return {\n autoplay: true,\n controls: true,\n liveui: true,\n sources: [\n {\n src: props.hlsUrl,\n type: \"application/x-mpegURL\",\n },\n ],\n html5: {\n vhs: {\n overrideNative: !videojs.browser.IS_SAFARI,\n },\n nativeAudioTracks: false,\n nativeVideoTracks: false,\n },\n };\n});\n\n\nonMounted(()=>{\n playerStore.playerUpdatePlayerHlsUrl(props.hlsUrl);\n useVideoSrc.value =\n \"\" !== videoElement.value.canPlayType(\"application/vnd.apple.mpegurl\") &&\n !navigator.userAgent.includes(\"Android\");\n playLive();\n})\n\nonUnmounted(()=>{\n if (playing.value) {\n stopLive();\n }\n})\n\n\n//Methods\nfunction definedStalledTimeout() {\n isPaused.value = false;\n stalledTimout.value = setTimeout(() => {\n if (isPaused.value) {\n return;\n }\n videoClean();\n playLive();\n }, 15000);\n}\nasync function playLive(): Promise<void> {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n await initLiveDownloadId();\n if (useVideoSrc.value) {\n playLiveIos();\n return;\n }\n if (props.isSecured && authStore.authParam.accessToken) {\n const globalXhrRequestHook = (options: any) => {\n options.beforeSend = (xhr: XMLHttpRequest) => {\n xhr.setRequestHeader(\"Authorization\", \"Bearer \"+authStore.authParam.accessToken);\n };\n return options;\n };\n videojs.Vhs.xhr.onRequest(globalXhrRequestHook);\n }\n player.value = videojs(\n document.getElementById(\"video-element-hls\") as Element,\n videoOptions.value,\n () => {\n player.value.qualitySelectorHls({ displayCurrentQuality: true });\n errorPlay.value = \"\";\n playing.value = true;\n },\n );\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n player.value.on(\"error\", (error: any) => {\n console.error(error);\n stopLive();\n if (error.description?.includes(\"403\")) {\n errorPlay.value = t(\"Video is unavailable\");\n } else {\n errorPlay.value = t(\"Podcast play error\");\n }\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n player.value.on(\"pause\", () => {\n isPaused.value = true;\n });\n player.value.on(\"timeupdate\", () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n });\n player.value.on(\"seeking\", () => {\n playerStore.playerUpdateSeekTime(player.value?.currentTime() ?? 0);\n });\n}\n\nasync function playLiveIos(): Promise<void> {\n videoElement.value.onloadedmetadata = () => {\n const playPromise = videoElement.value.play();\n if (playPromise !== undefined) {\n playPromise\n .then(() => {\n errorPlay.value = \"\";\n playing.value = true;\n })\n .catch(() => {\n playing.value = false;\n });\n }\n };\n videoElement.value.onerror = async () => {\n stopLive();\n errorPlay.value = t(\"Podcast play error\");\n };\n videoElement.value.ontimeupdate = async () => {\n clearTimeout(stalledTimout.value);\n definedStalledTimeout();\n onTimeUpdateVideo();\n };\n videoElement.value.onpause = async () => {\n isPaused.value = true;\n };\n videoElement.value.onseeking = async () => {\n playerStore.playerUpdateSeekTime(videoElement.value.currentTime);\n };\n if (props.isSecured && authStore.authParam.accessToken) {\n videoElement.value.src = props.hlsUrl + \"access_token=\"+authStore.authParam.accessToken;\n }else{\n videoElement.value.src = props.hlsUrl;\n }\n videoElement.value.src = props.hlsUrl;\n}\n\nfunction videoClean(): void {\n if (useVideoSrc.value) {\n videoElement.value.pause();\n videoElement.value.removeAttribute(\"src\");\n videoElement.value.load();\n return;\n }\n if (player.value) {\n player.value.dispose();\n //Redraw\n const video_parent = document.getElementById(\"player-video-hls\");\n if (video_parent) {\n const video = document.createElement(\"video\");\n video.id = \"video-element-hls\";\n video.className = \"video-js\";\n video.preload = \"auto\";\n video.setAttribute(\"playsinline\", \"true\");\n video_parent.appendChild(video);\n }\n }\n}\nfunction stopLive(): void {\n clearTimeout(stalledTimout.value);\n errorPlay.value = \"\";\n videoClean();\n playing.value = false;\n endListeningProgress();\n}\nfunction onTimeUpdateVideo(): void {\n if (!downloadId.value) {\n return;\n }\n const currentTime =player.value?.currentTime() ?? videoElement.value.currentTime;\n onTimeUpdateProgress(currentTime);\n}\n</script>\n\n<style lang=\"scss\">\n@use \"video.js\";\n@use \"../../../../style/videoPlayer\";\n\n.octopus-app {\n .video-live-error {\n text-align: center;\n width: 100%;\n font-size: 1rem;\n font-weight: bold;\n padding: 0.2rem 0;\n color: white;\n position: absolute;\n top: 0;\n background: var(--octopus-danger);\n z-index: 1;\n }\n\n .video-js {\n width: 500px;\n height: 281px;\n }\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { i as e } from "./classicApi-
|
|
2
|
-
import { n as t } from "./PlayerStore-
|
|
3
|
-
import { t as n } from "./usePlayerLogicProgress-
|
|
1
|
+
import { i as e } from "./classicApi-CGipMqf7.mjs";
|
|
2
|
+
import { n as t } from "./PlayerStore-DggKki80.mjs";
|
|
3
|
+
import { t as n } from "./usePlayerLogicProgress-BybmSAcs.mjs";
|
|
4
4
|
import { computed as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, defineComponent as s, normalizeClass as c, onMounted as l, onUnmounted as u, openBlock as d, ref as f, toDisplayString as p, useTemplateRef as m } from "vue";
|
|
5
5
|
import { useI18n as h } from "vue-i18n";
|
|
6
6
|
import g from "video.js";
|
|
@@ -47,7 +47,7 @@ var v = {
|
|
|
47
47
|
}
|
|
48
48
|
}));
|
|
49
49
|
l(() => {
|
|
50
|
-
P.playerUpdatePlayerHlsUrl(b.hlsUrl), S.value =
|
|
50
|
+
P.playerUpdatePlayerHlsUrl(b.hlsUrl), S.value = g.browser.IS_SAFARI || g.browser.IS_IOS, R();
|
|
51
51
|
}), u(() => {
|
|
52
52
|
w.value && V();
|
|
53
53
|
});
|
|
@@ -66,7 +66,7 @@ var v = {
|
|
|
66
66
|
}, e)), C.value = g(document.getElementById("video-element-hls"), I.value, () => {
|
|
67
67
|
C.value.qualitySelectorHls({ displayCurrentQuality: !0 }), x.value = "", w.value = !0;
|
|
68
68
|
}), C.value.on("error", (e) => {
|
|
69
|
-
V(), e.description?.includes("403") ? x.value = O("Video is unavailable") : x.value = O("Podcast play error");
|
|
69
|
+
console.error(e), V(), e.description?.includes("403") ? x.value = O("Video is unavailable") : x.value = O("Podcast play error");
|
|
70
70
|
}), C.value.on("seeking", () => {
|
|
71
71
|
P.playerUpdateSeekTime(C.value?.currentTime() ?? 0);
|
|
72
72
|
}), C.value.on("pause", () => {
|
|
@@ -86,14 +86,16 @@ var v = {
|
|
|
86
86
|
w.value = !1;
|
|
87
87
|
});
|
|
88
88
|
}, F.value.onerror = async () => {
|
|
89
|
-
V(), x.value = O("Podcast play error");
|
|
89
|
+
console.error(F.value.error), V(), x.value = O("Podcast play error");
|
|
90
90
|
}, F.value.ontimeupdate = async () => {
|
|
91
91
|
clearTimeout(E.value), L(), H();
|
|
92
92
|
}, F.value.onpause = async () => {
|
|
93
93
|
T.value = !0;
|
|
94
94
|
}, F.value.onseeking = async () => {
|
|
95
95
|
P.playerUpdateSeekTime(F.value.currentTime);
|
|
96
|
-
}
|
|
96
|
+
};
|
|
97
|
+
let e = b.hlsUrl.includes("?") ? "&" : "?";
|
|
98
|
+
F.value.src = b.isSecured && N.authParam.accessToken ? `${b.hlsUrl}${e}access_token=${N.authParam.accessToken}` : b.hlsUrl;
|
|
97
99
|
}
|
|
98
100
|
function B() {
|
|
99
101
|
if (S.value) {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as e } from "./ClassicLoading-CXfMjpyl.mjs";
|
|
2
|
-
import {
|
|
3
|
-
import { t as
|
|
4
|
-
import { t as
|
|
5
|
-
import { t as
|
|
6
|
-
import { t as
|
|
7
|
-
import { t as
|
|
8
|
-
import { t as
|
|
9
|
-
import { t as
|
|
10
|
-
import { t as
|
|
11
|
-
import { t as
|
|
12
|
-
import { Fragment as
|
|
2
|
+
import { i as t, j as n, r, v as i } from "./classicApi-CGipMqf7.mjs";
|
|
3
|
+
import { t as ee } from "./displayHelper-DQtoqc_6.mjs";
|
|
4
|
+
import { t as te } from "./useImageProxy-CCpDzPmQ.mjs";
|
|
5
|
+
import { t as a } from "./GeneralStore-Darfv4af.mjs";
|
|
6
|
+
import { t as ne } from "./useErrorHandler-x9sjDYSz.mjs";
|
|
7
|
+
import { t as re } from "./useSimplePageParam-BrtYXOUt.mjs";
|
|
8
|
+
import { t as ie } from "./useSeoTitleUrl-UfPXDCPa.mjs";
|
|
9
|
+
import { t as o } from "./useOrgaComputed-D81Jihm-.mjs";
|
|
10
|
+
import { t as s } from "./PodcastList-N_XOE-hI.mjs";
|
|
11
|
+
import { t as ae } from "./SubscribeButtons-IpzqDGIn.mjs";
|
|
12
|
+
import { Fragment as c, computed as l, createBlock as u, createCommentVNode as d, createElementBlock as f, createElementVNode as p, createVNode as m, defineAsyncComponent as h, defineComponent as g, guardReactiveProps as _, isRef as v, normalizeClass as oe, normalizeProps as se, onBeforeUnmount as ce, openBlock as y, ref as b, renderSlot as x, resolveDirective as S, toDisplayString as C, unref as w, watch as T, withDirectives as E } from "vue";
|
|
13
13
|
import { useI18n as D } from "vue-i18n";
|
|
14
14
|
import { useRoute as O } from "vue-router";
|
|
15
15
|
//#region src/components/pages/PlaylistPage.vue?vue&type=script&setup=true&lang.ts
|
|
@@ -34,21 +34,21 @@ var k = { class: "page-box" }, A = { class: "module-box" }, j = { class: "mb-5 m
|
|
|
34
34
|
}
|
|
35
35
|
},
|
|
36
36
|
setup(g) {
|
|
37
|
-
let I = h(() => import("./ShareSocialsButtons-
|
|
37
|
+
let I = h(() => import("./ShareSocialsButtons-PqMXhFEk.mjs")), L = h(() => import("./SharePlayer-C0aveOwy.mjs").then((e) => e.n)), R = h(() => import("./PodcastmakerHeader-CIoJwm1L.mjs")), z = h(() => import("./ShareAnonymous-DK2rnLl1.mjs")), B = g, V = b(!1), H = b(!1), U = b(void 0), W = O(), { t: G } = D(), { useProxyImageUrl: le } = te(), { isPodcastmaker: K, isEditRights: ue, authOrgaId: de } = o(), { updatePathParams: fe } = ie(), { handle403: pe } = ne(), me = t(), q = r(), J = a(), { searchPattern: Y, paginateFirst: he, isInit: ge } = re(B, !0), X = l(() => U.value?.ambianceType === "AMBIANCE" || U.value?.ambianceType === "AMBIANCE_PROGRAMMED"), _e = l(() => X.value ? G("Mix of episodes") : G("Playlist")), Z = l(() => U.value?.title ?? ""), ve = l(() => U.value?.description ?? ""), Q = l(() => ue(U.value?.organisation?.id, me.isRolePlaylists));
|
|
38
38
|
T(() => B.playlistId, () => {
|
|
39
39
|
be();
|
|
40
40
|
}, { immediate: !0 }), ce(() => {
|
|
41
41
|
J.contentToDisplayUpdate(null);
|
|
42
42
|
});
|
|
43
43
|
function ye(e) {
|
|
44
|
-
return
|
|
44
|
+
return ee.urlify(e);
|
|
45
45
|
}
|
|
46
46
|
function $() {
|
|
47
47
|
H.value = !0, V.value = !0;
|
|
48
48
|
}
|
|
49
49
|
async function be() {
|
|
50
50
|
try {
|
|
51
|
-
if (V.value = !1, H.value = !1, U.value = await
|
|
51
|
+
if (V.value = !1, H.value = !1, U.value = await i.get(B.playlistId), q.updateOrgaIfNecessary(U.value.organisation?.id), !Q.value && X.value || U.value.organisation?.privacy !== "PUBLIC" && q.filterOrgaId !== U.value.organisation?.id && W.query.productor !== U.value.organisation?.id) {
|
|
52
52
|
$();
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
@@ -58,19 +58,19 @@ var k = { class: "page-box" }, A = { class: "module-box" }, j = { class: "mb-5 m
|
|
|
58
58
|
}
|
|
59
59
|
V.value = !0;
|
|
60
60
|
}
|
|
61
|
-
return (
|
|
61
|
+
return (t, r) => {
|
|
62
62
|
let i = S("lazy");
|
|
63
|
-
return y(),
|
|
64
|
-
w(K) ? (y(),
|
|
63
|
+
return y(), f("section", k, [V.value && !H.value && U.value ? (y(), f(c, { key: 0 }, [
|
|
64
|
+
w(K) ? (y(), u(w(R), {
|
|
65
65
|
key: 0,
|
|
66
66
|
"page-title": _e.value,
|
|
67
67
|
"img-url": U.value.imageUrl
|
|
68
|
-
}, null, 8, ["page-title", "img-url"])) :
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
Q.value && !w(K) ? x(
|
|
72
|
-
|
|
73
|
-
E(
|
|
68
|
+
}, null, 8, ["page-title", "img-url"])) : d("", !0),
|
|
69
|
+
p("div", { class: oe(["d-flex flex-column page-element", w(K) ? "page-element-podcastmaker" : ""]) }, [
|
|
70
|
+
p("section", A, [
|
|
71
|
+
Q.value && !w(K) ? x(t.$slots, "edit-box", { playlist: U.value }, void 0, void 0, 0) : d("", !0),
|
|
72
|
+
p("div", j, [
|
|
73
|
+
E(p("img", {
|
|
74
74
|
width: "250",
|
|
75
75
|
height: "250",
|
|
76
76
|
"aria-hidden": "true",
|
|
@@ -78,35 +78,35 @@ var k = { class: "page-box" }, A = { class: "module-box" }, j = { class: "mb-5 m
|
|
|
78
78
|
title: w(G)("Playlist name image", { name: Z.value }),
|
|
79
79
|
class: "img-box float-start me-3 mb-3"
|
|
80
80
|
}, null, 8, M), [[i, w(le)(U.value.imageUrl, "250")]]),
|
|
81
|
-
|
|
81
|
+
p("div", N, [p("h2", null, C(Z.value), 1), Q.value ? d("", !0) : (y(), u(w(z), {
|
|
82
82
|
key: 0,
|
|
83
83
|
class: "d-flex justify-content-end flex-grow-1",
|
|
84
84
|
playlist: U.value,
|
|
85
85
|
"organisation-id": U.value.organisation?.id
|
|
86
86
|
}, null, 8, ["playlist", "organisation-id"]))]),
|
|
87
|
-
|
|
87
|
+
p("p", {
|
|
88
88
|
class: "html-wysiwyg-content",
|
|
89
89
|
innerHTML: ye(ve.value)
|
|
90
90
|
}, null, 8, P)
|
|
91
91
|
]),
|
|
92
|
-
w(K) ? (y(),
|
|
92
|
+
w(K) ? (y(), u(ae, {
|
|
93
93
|
key: 1,
|
|
94
94
|
class: "mt-4",
|
|
95
95
|
content: U.value,
|
|
96
96
|
"window-width": 1e3,
|
|
97
97
|
"justify-center": !1
|
|
98
|
-
}, null, 8, ["content"])) :
|
|
98
|
+
}, null, 8, ["content"])) : d("", !0)
|
|
99
99
|
]),
|
|
100
|
-
!w(K) && Q.value ? (y(),
|
|
100
|
+
!w(K) && Q.value ? (y(), u(w(L), {
|
|
101
101
|
key: 0,
|
|
102
102
|
playlist: U.value,
|
|
103
103
|
"organisation-id": w(de)
|
|
104
|
-
}, null, 8, ["playlist", "organisation-id"])) :
|
|
105
|
-
w(
|
|
104
|
+
}, null, 8, ["playlist", "organisation-id"])) : d("", !0),
|
|
105
|
+
w(n).podcastPage.ShareButtons ? (y(), u(w(I), {
|
|
106
106
|
key: 1,
|
|
107
107
|
"organisation-id": U.value.organisation.id
|
|
108
|
-
}, null, 8, ["organisation-id"])) :
|
|
109
|
-
|
|
108
|
+
}, null, 8, ["organisation-id"])) : d("", !0),
|
|
109
|
+
p("section", F, [w(ge) ? (y(), u(s, {
|
|
110
110
|
key: 0,
|
|
111
111
|
query: w(Y),
|
|
112
112
|
"onUpdate:query": r[0] ||= (e) => v(Y) ? Y.value = e : null,
|
|
@@ -118,10 +118,10 @@ var k = { class: "page-box" }, A = { class: "module-box" }, j = { class: "mb-5 m
|
|
|
118
118
|
"first",
|
|
119
119
|
"size",
|
|
120
120
|
"playlist"
|
|
121
|
-
])) :
|
|
121
|
+
])) : d("", !0)])
|
|
122
122
|
], 2),
|
|
123
|
-
x(
|
|
124
|
-
], 64)) :
|
|
123
|
+
x(t.$slots, "bottom", se(_({ playlist: U.value })))
|
|
124
|
+
], 64)) : d("", !0), m(e, {
|
|
125
125
|
"loading-text": V.value ? void 0 : w(G)("Loading content ..."),
|
|
126
126
|
"error-text": H.value ? w(G)("Playlist doesn't exist") : void 0
|
|
127
127
|
}, null, 8, ["loading-text", "error-text"])]);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaylistPage-BgUaPJet.mjs","names":["displayHelper","_resolveDirective","_openBlock","_createElementBlock","_Fragment","_createBlock","_createCommentVNode","_createElementVNode","_normalizeClass","_renderSlot","_withDirectives","_toDisplayString","_normalizeProps","_guardReactiveProps","_createVNode","_sfc_main"],"sources":["../src/components/pages/PlaylistPage.vue","../src/components/pages/PlaylistPage.vue"],"sourcesContent":["<template>\n <section class=\"page-box\">\n <template v-if=\"loaded && !error && playlist\">\n <PodcastmakerHeader\n v-if=\"isPodcastmaker\"\n :page-title=\"pageTitle\"\n :img-url=\"playlist.imageUrl\"\n />\n <div\n class=\"d-flex flex-column page-element\"\n :class=\"isPodcastmaker ? 'page-element-podcastmaker' : ''\"\n >\n <section class=\"module-box\">\n <slot\n v-if=\"editRight && !isPodcastmaker\"\n name=\"edit-box\"\n :playlist=\"playlist\"\n />\n\n <div class=\"mb-5 mt-3 description-text\">\n <img\n v-lazy=\"useProxyImageUrl(playlist.imageUrl, '250')\"\n width=\"250\"\n height=\"250\"\n aria-hidden=\"true\"\n alt=\"\"\n :title=\"t('Playlist name image', { name: name })\"\n class=\"img-box float-start me-3 mb-3\"\n />\n <div class=\"d-flex align-items-center justify-content-between\">\n <h2>{{ name }}</h2>\n <ShareAnonymous v-if=\"!editRight\" class=\"d-flex justify-content-end flex-grow-1\" :playlist=\"playlist\" :organisation-id=\"playlist.organisation?.id\"/>\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <p class=\"html-wysiwyg-content\" v-html=\"urlify(description)\" />\n <!-- eslint-enable -->\n </div>\n <SubscribeButtons\n v-if=\"isPodcastmaker\"\n class=\"mt-4\"\n :content=\"playlist\"\n :window-width=\"1000\"\n :justify-center=\"false\"\n />\n </section>\n <SharePlayer\n v-if=\"!isPodcastmaker && editRight\"\n :playlist=\"playlist\"\n :organisation-id=\"authOrgaId\"\n />\n <ShareSocialsButtons\n v-if=\"state.podcastPage.ShareButtons\"\n :organisation-id=\"playlist.organisation.id\"\n />\n <section class=\"module-box\">\n <PodcastList \n v-if=\"isInit\"\n v-model:query=\"searchPattern\"\n :first=\"paginateFirst\"\n :size=\"ps\"\n :playlist=\"playlist\"\n />\n </section>\n </div>\n\n <slot name=\"bottom\" v-bind=\"{ playlist }\" />\n </template>\n <ClassicLoading\n :loading-text=\"!loaded ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Playlist doesn't exist`) : undefined\"\n />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport {useOrgaComputed} from \"../composable/useOrgaComputed\";\nimport {useSeoTitleUrl} from \"../composable/route/useSeoTitleUrl\";\nimport ClassicLoading from \"../form/ClassicLoading.vue\";\nimport PodcastList from \"../display/playlist/PodcastList.vue\";\nimport { useFilterStore } from \"../../stores/FilterStore\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport displayHelper from \"../../helper/displayHelper\";\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport {useErrorHandler} from \"../composable/useErrorHandler\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport {defineAsyncComponent, ref, Ref, computed, watch, onBeforeUnmount } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRoute } from \"vue-router\";\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport { playlistApi } from \"../../api/playlistApi\";\n\nimport SubscribeButtons from \"../display/sharing/SubscribeButtons.vue\"; \nconst ShareSocialsButtons = defineAsyncComponent(\n () => import(\"../display/sharing/ShareSocialsButtons.vue\"),\n);\nconst SharePlayer = defineAsyncComponent(\n () => import(\"../display/sharing/SharePlayer.vue\"),\n);\nconst PodcastmakerHeader = defineAsyncComponent(\n () => import(\"../display/podcastmaker/PodcastmakerHeader.vue\"),\n);\nconst ShareAnonymous = defineAsyncComponent(() => import(\"../display/sharing/ShareAnonymous.vue\"));\n\n\n//Props\nconst props = defineProps({\n playlistId: { default: undefined, type: Number },\n pr: { default: 0, type: Number },\n ps: { default: 30, type: Number },\n routeQuery: { default: \"\", type: String },\n});\n\n\n//Data \nconst loaded = ref(false);\nconst error = ref(false);\nconst playlist : Ref<Playlist | undefined> = ref(undefined);\n\n\n//Composables\nconst route = useRoute();\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\nconst { isPodcastmaker, isEditRights, authOrgaId } = useOrgaComputed();\nconst { updatePathParams } = useSeoTitleUrl();\nconst {handle403} = useErrorHandler();\nconst authStore = useAuthStore();\nconst filterStore = useFilterStore();\nconst generalStore = useGeneralStore();\nconst {\n searchPattern,\n paginateFirst,\n isInit\n} = useSimplePageParam(props, true);\n\n\n//Computed\nconst playlistRadio = computed(() =>{\n return (\n \"AMBIANCE\" === playlist.value?.ambianceType ||\n \"AMBIANCE_PROGRAMMED\" === playlist.value?.ambianceType\n );\n});\nconst pageTitle = computed(() =>playlistRadio.value? t(\"Mix of episodes\"): t(\"Playlist\"));\nconst name = computed(() =>playlist.value?.title ?? \"\");\nconst description = computed(() =>playlist.value?.description ?? \"\");\nconst editRight = computed(() =>{\n return isEditRights(\n playlist.value?.organisation?.id,\n authStore.isRolePlaylists,\n );\n});\n\n\n//Watch\nwatch(()=>props.playlistId, () => {getPlaylistDetails()}, {immediate: true});\n\n\nonBeforeUnmount(() => {\n generalStore.contentToDisplayUpdate(null);\n});\n\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction initError(): void {\n error.value = true;\n loaded.value = true;\n}\nasync function getPlaylistDetails(): Promise<void> {\n try {\n loaded.value = false;\n error.value = false;\n playlist.value = await playlistApi.get(props.playlistId);\n filterStore.updateOrgaIfNecessary(playlist.value.organisation?.id);\n if (\n (!editRight.value && playlistRadio.value) ||\n (\"PUBLIC\" !== playlist.value.organisation?.privacy &&\n filterStore.filterOrgaId !== playlist.value.organisation?.id &&\n route.query.productor !== playlist.value.organisation?.id)\n ) {\n initError();\n return;\n }\n generalStore.contentToDisplayUpdate(playlist.value);\n updatePathParams(playlist.value.title);\n } catch (error) {\n handle403(error as AxiosError);\n initError();\n }\n loaded.value = true;\n}\n\n</script>\n","<template>\n <section class=\"page-box\">\n <template v-if=\"loaded && !error && playlist\">\n <PodcastmakerHeader\n v-if=\"isPodcastmaker\"\n :page-title=\"pageTitle\"\n :img-url=\"playlist.imageUrl\"\n />\n <div\n class=\"d-flex flex-column page-element\"\n :class=\"isPodcastmaker ? 'page-element-podcastmaker' : ''\"\n >\n <section class=\"module-box\">\n <slot\n v-if=\"editRight && !isPodcastmaker\"\n name=\"edit-box\"\n :playlist=\"playlist\"\n />\n\n <div class=\"mb-5 mt-3 description-text\">\n <img\n v-lazy=\"useProxyImageUrl(playlist.imageUrl, '250')\"\n width=\"250\"\n height=\"250\"\n aria-hidden=\"true\"\n alt=\"\"\n :title=\"t('Playlist name image', { name: name })\"\n class=\"img-box float-start me-3 mb-3\"\n />\n <div class=\"d-flex align-items-center justify-content-between\">\n <h2>{{ name }}</h2>\n <ShareAnonymous v-if=\"!editRight\" class=\"d-flex justify-content-end flex-grow-1\" :playlist=\"playlist\" :organisation-id=\"playlist.organisation?.id\"/>\n </div>\n <!-- eslint-disable vue/no-v-html -->\n <p class=\"html-wysiwyg-content\" v-html=\"urlify(description)\" />\n <!-- eslint-enable -->\n </div>\n <SubscribeButtons\n v-if=\"isPodcastmaker\"\n class=\"mt-4\"\n :content=\"playlist\"\n :window-width=\"1000\"\n :justify-center=\"false\"\n />\n </section>\n <SharePlayer\n v-if=\"!isPodcastmaker && editRight\"\n :playlist=\"playlist\"\n :organisation-id=\"authOrgaId\"\n />\n <ShareSocialsButtons\n v-if=\"state.podcastPage.ShareButtons\"\n :organisation-id=\"playlist.organisation.id\"\n />\n <section class=\"module-box\">\n <PodcastList \n v-if=\"isInit\"\n v-model:query=\"searchPattern\"\n :first=\"paginateFirst\"\n :size=\"ps\"\n :playlist=\"playlist\"\n />\n </section>\n </div>\n\n <slot name=\"bottom\" v-bind=\"{ playlist }\" />\n </template>\n <ClassicLoading\n :loading-text=\"!loaded ? t('Loading content ...') : undefined\"\n :error-text=\"error ? t(`Playlist doesn't exist`) : undefined\"\n />\n </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { useGeneralStore } from \"../../stores/GeneralStore\";\nimport { useAuthStore } from \"../../stores/AuthStore\";\nimport {useOrgaComputed} from \"../composable/useOrgaComputed\";\nimport {useSeoTitleUrl} from \"../composable/route/useSeoTitleUrl\";\nimport ClassicLoading from \"../form/ClassicLoading.vue\";\nimport PodcastList from \"../display/playlist/PodcastList.vue\";\nimport { useFilterStore } from \"../../stores/FilterStore\";\nimport { state } from \"../../stores/ParamSdkStore\";\nimport displayHelper from \"../../helper/displayHelper\";\nimport {useImageProxy} from \"../composable/useImageProxy\";\nimport {useErrorHandler} from \"../composable/useErrorHandler\";\nimport { Playlist } from \"@/stores/class/general/playlist\";\nimport {defineAsyncComponent, ref, Ref, computed, watch, onBeforeUnmount } from \"vue\";\nimport { AxiosError } from \"axios\";\nimport { useI18n } from \"vue-i18n\";\nimport { useRoute } from \"vue-router\";\nimport { useSimplePageParam } from \"../composable/route/useSimplePageParam\";\nimport { playlistApi } from \"../../api/playlistApi\";\n\nimport SubscribeButtons from \"../display/sharing/SubscribeButtons.vue\"; \nconst ShareSocialsButtons = defineAsyncComponent(\n () => import(\"../display/sharing/ShareSocialsButtons.vue\"),\n);\nconst SharePlayer = defineAsyncComponent(\n () => import(\"../display/sharing/SharePlayer.vue\"),\n);\nconst PodcastmakerHeader = defineAsyncComponent(\n () => import(\"../display/podcastmaker/PodcastmakerHeader.vue\"),\n);\nconst ShareAnonymous = defineAsyncComponent(() => import(\"../display/sharing/ShareAnonymous.vue\"));\n\n\n//Props\nconst props = defineProps({\n playlistId: { default: undefined, type: Number },\n pr: { default: 0, type: Number },\n ps: { default: 30, type: Number },\n routeQuery: { default: \"\", type: String },\n});\n\n\n//Data \nconst loaded = ref(false);\nconst error = ref(false);\nconst playlist : Ref<Playlist | undefined> = ref(undefined);\n\n\n//Composables\nconst route = useRoute();\nconst { t } = useI18n();\nconst { useProxyImageUrl } = useImageProxy();\nconst { isPodcastmaker, isEditRights, authOrgaId } = useOrgaComputed();\nconst { updatePathParams } = useSeoTitleUrl();\nconst {handle403} = useErrorHandler();\nconst authStore = useAuthStore();\nconst filterStore = useFilterStore();\nconst generalStore = useGeneralStore();\nconst {\n searchPattern,\n paginateFirst,\n isInit\n} = useSimplePageParam(props, true);\n\n\n//Computed\nconst playlistRadio = computed(() =>{\n return (\n \"AMBIANCE\" === playlist.value?.ambianceType ||\n \"AMBIANCE_PROGRAMMED\" === playlist.value?.ambianceType\n );\n});\nconst pageTitle = computed(() =>playlistRadio.value? t(\"Mix of episodes\"): t(\"Playlist\"));\nconst name = computed(() =>playlist.value?.title ?? \"\");\nconst description = computed(() =>playlist.value?.description ?? \"\");\nconst editRight = computed(() =>{\n return isEditRights(\n playlist.value?.organisation?.id,\n authStore.isRolePlaylists,\n );\n});\n\n\n//Watch\nwatch(()=>props.playlistId, () => {getPlaylistDetails()}, {immediate: true});\n\n\nonBeforeUnmount(() => {\n generalStore.contentToDisplayUpdate(null);\n});\n\n\n//Methods\nfunction urlify(text:string|undefined){\n return displayHelper.urlify(text);\n}\nfunction initError(): void {\n error.value = true;\n loaded.value = true;\n}\nasync function getPlaylistDetails(): Promise<void> {\n try {\n loaded.value = false;\n error.value = false;\n playlist.value = await playlistApi.get(props.playlistId);\n filterStore.updateOrgaIfNecessary(playlist.value.organisation?.id);\n if (\n (!editRight.value && playlistRadio.value) ||\n (\"PUBLIC\" !== playlist.value.organisation?.privacy &&\n filterStore.filterOrgaId !== playlist.value.organisation?.id &&\n route.query.productor !== playlist.value.organisation?.id)\n ) {\n initError();\n return;\n }\n generalStore.contentToDisplayUpdate(playlist.value);\n updatePathParams(playlist.value.title);\n } catch (error) {\n handle403(error as AxiosError);\n initError();\n }\n loaded.value = true;\n}\n\n</script>\n"],"mappings":"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"}
|