From 51735c5670ae7173028edbc2b3b91284fb0f9906 Mon Sep 17 00:00:00 2001 From: Frode Petterson Date: Tue, 26 Nov 2024 15:59:08 +0100 Subject: [PATCH] Revert "JI-6152 add drag and drop, and paste" This reverts commits: b3af10f3457d6445d35a3a8b438bb1c63fc2b490 d35e55ba23a99729a13777fb5935ac79d1c9bc57 bd061cd02cbddb33d63164d2a9a3f3b633dcf594 8cc30724692fdf3b3b8276d172f3d763a7ede286 1b6847c5fb05c441abcc27e2a3a08c3e22bb1429 f15db15df6098460bb9886316fe5756dcf23227e 68a8bed8ed2f7f1ef4043627ad24840a7c5e5881 2cd5f779b14c61c2dd4612b96265e05f6d255762 59303a50938c98a062eea626a2d54da2cfc5bddb 59f070842b767ed41f5ee75a19c5b2291fc87a5b a823999bdbba71eb3987e6c729ff1a1e7003a053 7adf662c960608bc4cab141d6213edbbaae42208 be3d5b0f440004f752da7dd4e2f98d75ee7ac95f 4a34e8271a8d597c582bb37fb0a9110b7508008f fe87c2b840fcb4ab27aeea948925e94e9743db66 --- language/ar.js | 7 - language/bs.js | 7 - language/cs.js | 7 - language/de.js | 7 - language/el.js | 7 - language/en.js | 45 +- language/es-cr.js | 7 - language/es-mx.js | 7 - language/es.js | 39 +- language/et.js | 7 - language/eu.js | 7 - language/fi.js | 7 - language/fr.js | 43 +- language/gl.js | 7 - language/it.js | 7 - language/ko.js | 7 - language/nb.js | 7 - language/nl.js | 7 - language/nn.js | 7 - language/pl.js | 7 - language/pt-br.js | 7 - language/pt.js | 7 - language/ru.js | 7 - language/sl.js | 7 - language/sv.js | 7 - language/tr.js | 7 - language/zh-cn.js | 7 - language/zh-hans.js | 7 - language/zh.js | 7 - libs/cropper.css | 10 - package-lock.json | 291 ++++--- scripts/h5peditor-av.js | 960 ++++++---------------- scripts/h5peditor-file-uploader.js | 37 +- scripts/h5peditor-file.js | 11 +- scripts/h5peditor-image.js | 453 ++-------- styles/css/application.css | 2 +- styles/css/fonts/play-icon.svg | 10 - styles/css/fonts/upload-audio.svg | 9 - styles/css/fonts/upload-image.svg | 7 - styles/css/fonts/upload-video.svg | 7 - styles/scss/_form-field.scss | 7 +- styles/scss/_h5peditor-drag-and-drop.scss | 709 ---------------- styles/scss/_h5peditor-image-edit.scss | 14 +- styles/scss/_variables.scss | 17 +- styles/scss/application.scss | 248 +----- 45 files changed, 541 insertions(+), 2560 deletions(-) delete mode 100644 styles/css/fonts/play-icon.svg delete mode 100644 styles/css/fonts/upload-audio.svg delete mode 100644 styles/css/fonts/upload-image.svg delete mode 100644 styles/css/fonts/upload-video.svg delete mode 100644 styles/scss/_h5peditor-drag-and-drop.scss diff --git a/language/ar.js b/language/ar.js index 4f5f4d70..31242e96 100644 --- a/language/ar.js +++ b/language/ar.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'تعديل الصورة', saveLabel: 'حفظ', cancelLabel: 'إلغاء', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'إعادة التعيين إلى النسخة الأصلية', loadingImageEditor: 'تحميل محرر الصور، يرجى الانتظار...', selectFiletoUpload: 'حدد ملفا لتحميله', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'ألصق رابط اليوتيوب أو عنوان مصدر الفيديو الاخر', uploadAudioTitle: 'رفع ملف الصوت', uploadVideoTitle: 'رفع ملف الفيديو', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'ادراج', cancel: 'الغاء', height: 'ارتفاع', diff --git a/language/bs.js b/language/bs.js index 88c7b584..f8b94b97 100644 --- a/language/bs.js +++ b/language/bs.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Uredite sliku', saveLabel: 'Sačuvati', cancelLabel: 'Otkazati', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Resetirati na original', loadingImageEditor: 'Učitava se editor za sliku, molimo sačekajte...', selectFiletoUpload: 'Označite fajl za upload', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Prenesite YouTube link ili izvorni URL audio fajla', uploadAudioTitle: 'Upload audio fajla', uploadVideoTitle: 'Upload video fajla', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Ubaciti', cancel: 'Otkazati', height: 'visina', diff --git a/language/cs.js b/language/cs.js index 250a0f58..706dad9a 100644 --- a/language/cs.js +++ b/language/cs.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: 'Upravit obrázek', saveLabel: 'Uložit', cancelLabel: 'Zrušit', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Obnovit původní', loadingImageEditor: 'Načítání editoru obrázků, počkejte prosím...', selectFiletoUpload: 'Vyberte soubor, který chcete nahrát', @@ -56,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Vložte odkaz na YouTube nebo jinou adresu URL zdroje videa', uploadAudioTitle: 'Nahrajte zvukový soubor', uploadVideoTitle: 'Nahrajte soubor videa', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Vložit', cancel: 'Zrušit', height: 'výška', diff --git a/language/de.js b/language/de.js index 34bec95b..0c0c3521 100644 --- a/language/de.js +++ b/language/de.js @@ -46,8 +46,6 @@ H5PEditor.language.core = { editImage: 'Bild bearbeiten', saveLabel: 'Speichern', cancelLabel: 'Abbrechen', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Auf Original zurücksetzen', loadingImageEditor: 'Lade Bildeditor, bitte warten...', selectFiletoUpload: 'Datei zum Hochladen auswählen', @@ -58,13 +56,8 @@ H5PEditor.language.core = { enterVideoTitle: 'YouTube-Link oder andere Video-URL einfügen', uploadAudioTitle: 'Audio-Datei hochladen', uploadVideoTitle: 'Video-Datei hochladen', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P unterstützt alle externen Videoquellen, die das mp4-, webm- or ogv-Format haben, wie Vimeo Pro, und unterstützt YouTube- und Panopto-Links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Einfügen', cancel: 'Abbrechen', height: 'Höhe', diff --git a/language/el.js b/language/el.js index 03699a4b..6633fd5c 100644 --- a/language/el.js +++ b/language/el.js @@ -46,8 +46,6 @@ H5PEditor.language.core = { editImage: 'Επεξεργασία εικόνας', saveLabel: 'Αποθήκευση', cancelLabel: 'ακύρωση', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Επαναφορά στο πρωτότυπο', loadingImageEditor: 'Φόρτωση επεξεργαστή εικόνας, παρακαλούμε περιμένετε...', selectFiletoUpload: 'Επιλέξτε αρχείο προς μεταφόρτωση', @@ -58,13 +56,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Επικολλήστε σύνδεσμο YouTube ή άλλη διεύθυνση URL βίντεο', uploadAudioTitle: 'Μεταφορτώστε αρχείο ήχου', uploadVideoTitle: 'Μεταφορτώστε αρχείο video', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Εισαγωγή', cancel: 'Ακύρωση', height: 'ύψος', diff --git a/language/en.js b/language/en.js index 52b0a399..7cae6bb4 100644 --- a/language/en.js +++ b/language/en.js @@ -17,40 +17,8 @@ H5PEditor.language.core = { addFile: 'Add file', removeFile: 'Remove file', confirmRemoval: 'Are you sure you wish to remove this :type?', - browseFiles: "Browse files", - removeImage: 'Delete Image?', - confirmImageRemoval: 'Are you sure you want to delete this image?', - dragAndDropAndPasteImage: 'Drag and drop image file to upload or paste by :keyCombination', - dragAndDropAndPasteReplaceImage: 'Drag or paste image file here to replace', - dropImage: 'Drop image file here to upload', - uploadImage: 'Upload Image', - uploadingImage: 'Uploading the image, please wait.', - replaceImage: 'Replace Image?', - confirmReplaceImage: 'Are you sure you want to replace this image?', - onlyPasteImageFiles: 'You may only paste image files.', - replaceAudio: 'Replace Audio?', - replaceVideo: 'Replace Video?', - confirmReplaceAudio: 'Are you sure you want to replace this audio?', - confirmReplaceVideo: 'Are you sure you want to replace this video?', - uploadVideo: 'Upload Video', - uploadAudio: 'Upload Audio', - uploadOr: 'or', - dragAndDropAndPasteVideo: 'Drag and drop video file here to upload or paste by :keyCombination', - dragAndDropAndPasteAudio: 'Drag and drop audio file here to upload or paste by :keyCombination', - pasteVideoLink: 'Paste YouTube link or other video source', - pasteAudioLink: 'Paste link or other audio source URL', - dropVideo: 'Drop video file here to upload', - dropAudio: 'Drop audio file here to upload', - enterVideoLink: 'Enter a video link', - enterAudioLink: 'Enter an audio link', - insertUrl: 'Insert URL', - replaceUrl: 'Replace URL', - ctrlKey: 'ctrl', - commandKey: '⌘', - pasteKey: 'v', - supportedVideoFormats: 'H5P supports the following external video sources: Youtube, Panopto and Vimeo.', - dragAndDropToReplaceVideo: 'Drag and drop video file here to replace', - dragAndDropToReplaceAudio: 'Drag and drop audio file here to replace', + removeImage: 'Remove image', + confirmImageRemoval: 'This will remove your image. Are you sure you wish to proceed?', changeFile: 'Change file', changeLibrary: 'Change content type?', semanticsError: 'Semantics error: :error', @@ -75,11 +43,7 @@ H5PEditor.language.core = { noSemantics: 'Error, could not load the content type form.', editImage: 'Edit image', saveLabel: 'Save', - image: 'Image', cancelLabel: 'Cancel', - deleteLabel: 'Delete', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Reset to original', loadingImageEditor: 'Loading image editor, please wait...', selectFiletoUpload: 'Select file to upload', @@ -90,12 +54,7 @@ H5PEditor.language.core = { enterVideoTitle: 'Paste YouTube link or other video source URL', uploadAudioTitle: 'Upload audio file', uploadVideoTitle: 'Upload video file', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Insert', cancel: 'Cancel', height: 'height', diff --git a/language/es-cr.js b/language/es-cr.js index 4d87bdb8..9a7109f2 100644 --- a/language/es-cr.js +++ b/language/es-cr.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Editar imagen', saveLabel: 'Guardar', cancelLabel: 'Cancelar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Restablecer el original', loadingImageEditor: 'Cargando editor de imagen, por favor espere...', selectFiletoUpload: 'Seleccione el fichero a subir', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Peque el link de Youtube o la URL de la fuente del video', uploadAudioTitle: 'Subir fichero de audio', uploadVideoTitle: 'Subir fichero de video', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Insertar', cancel: 'Cancelar', height: 'altura', diff --git a/language/es-mx.js b/language/es-mx.js index 58d168fe..299521ed 100644 --- a/language/es-mx.js +++ b/language/es-mx.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Editar imagen', saveLabel: 'Guardar', cancelLabel: 'Cancelar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Restablecer el original', loadingImageEditor: 'Cargando editor de imagen, por favor espere...', selectFiletoUpload: 'Seleccione el archivo a subir', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Peque el link de Youtube o la URL de la fuente del video', uploadAudioTitle: 'Subir archivo de audio', uploadVideoTitle: 'Subir archivo de video', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Insertar', cancel: 'Cancelar', height: 'altura', diff --git a/language/es.js b/language/es.js index 8af75e35..59685856 100644 --- a/language/es.js +++ b/language/es.js @@ -17,34 +17,8 @@ H5PEditor.language.core = { addFile: 'Añadir archivo', removeFile: 'Eliminar archivo', confirmRemoval: '¿Estás seguro de que quieres eliminar este :type?', - browseFiles: "Búsqueda de archivos", - removeImage: '¿Eliminar imagen?', - confirmImageRemoval: '¿Estás seguro que deseas eliminar esta imagen?', - dragAndDropAndPasteImage: 'Arrastra y suelta la imagen aquí para subirla o pégala usando :keyCombination', - dragAndDropAndPasteReplaceImage: 'Arrastra o pega la imagen aquí para reemplazar', - dropImage: "Suelta la imagen aquí para subirla", - uploadImage: 'Subir imagen', - uploadingImage: 'Subiendo la imagen, por favor, espera.', - replaceImage: '¿Reemplazar imagen?', - confirmReplaceImage: '¿Estás seguro de que deseas reemplazar esta imagen?', - onlyPasteImageFiles: 'Solo puedes pegar archivos de imagen.', - uploadVideo: 'Subir Video', - uploadAudio: 'Subir Audio', - uploadOr: 'o', - dragAndDropAndPasteVideo: 'Arrastra o pega el video aquí para subirlo o pégalo usando :keyCombination', - dragAndDropAndPasteAudio: 'Arrastra o pega el audio aquí para subirlo o pégalo usando :keyCombination', - pasteVideoLink: 'Pega el enlace de YouTube u otro enlace de video', - pasteAudioLink: 'Pega el enlace u otra fuente del audio', - dropVideo: 'Arrastra el video aquí para subirlo', - dropAudio: 'Arrastra el audio aquí para subirlo', - enterVideoLink: 'Inserta el enlace del video', - enterAudioLink: 'Inserta el enlace del audio', - insertUrl: 'Insertar enlace', - replaceUrl: 'Reemplazar enlace', - ctrlKey: 'ctrl', - commandKey: '⌘', - pasteKey: 'v', - supportedVideoFormats: 'H5P soporta las siguientes fuentes de vídeo: Youtube, Panopto y Vimeo.', + removeImage: 'Eliminar imagen', + confirmImageRemoval: 'Esto eliminará la imagen. ¿Seguro que desea continuar?', changeFile: 'Cambiar archivo', changeLibrary: 'Cambiar el tipo de contenido', semanticsError: 'Error en semántica: :error', @@ -70,11 +44,7 @@ H5PEditor.language.core = { noSemantics: 'Error, no se ha podido cargar el formulario del tipo de contenido.', editImage: 'Editar imagen', saveLabel: 'Guardar', - image: 'Imagen', cancelLabel: 'Cancelar', - deleteLabel: 'Eliminar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Restablecer el original', loadingImageEditor: 'Cargando editor de imagen, por favor espere...', selectFiletoUpload: 'Selecciona el fichero a subir', @@ -85,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Peque el link de Youtube o la URL de la fuente del video', uploadAudioTitle: 'Subir fichero de audio', uploadVideoTitle: 'Subir fichero de video', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Insertar', cancel: 'Cancelar', height: 'altura', diff --git a/language/et.js b/language/et.js index 1fd3ffb3..88698e9a 100644 --- a/language/et.js +++ b/language/et.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Töötle pilti', saveLabel: 'Salvesta', cancelLabel: 'Tühista', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Lähtesta algsele kujule', loadingImageEditor: 'Pildiredigeerija laadimine, palun oota...', selectFiletoUpload: 'Vali fail, mida üles laadida', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Kleebi lähtevideo link', uploadAudioTitle: 'Laadi helifail üles', uploadVideoTitle: 'Laadi videofail üles', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Aseta', cancel: 'Tühista', height: 'kõrgus', diff --git a/language/eu.js b/language/eu.js index 0ef86bbe..fdf3c35a 100644 --- a/language/eu.js +++ b/language/eu.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Editatu irudia', saveLabel: 'Gorde', cancelLabel: 'Utzi', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Berrezarri jatorrizkoa', loadingImageEditor: 'Irudi editorea kargatzen, itxaron...', selectFiletoUpload: 'Hautatu kargatu nahi duzun fitxategia', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Itsatsi YouTubeko esteka edo bestelako bideo iturriaren URLa', uploadAudioTitle: 'Kargatu audio fitxategia', uploadVideoTitle: 'Kargatu bideo fitxategia', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Txertatu', cancel: 'Utzi', height: 'altuera', diff --git a/language/fi.js b/language/fi.js index b1cdffda..64b55720 100644 --- a/language/fi.js +++ b/language/fi.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Muokkaa kuvaa', saveLabel: 'Tallenna', cancelLabel: 'Peruuta', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Palauta alkuperäiseksi', loadingImageEditor: 'Lataa kuvaeditoria, odota...', selectFiletoUpload: 'Valitse ladattava tiedosto', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Liitä YouTube linkki tai muu videon osoite', uploadAudioTitle: 'Lataa äänitiedosto', uploadVideoTitle: 'Lataa videotiedosto', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Lisää', cancel: 'Peruuta', height: 'korkeus', diff --git a/language/fr.js b/language/fr.js index f98b3857..1c3b46c4 100644 --- a/language/fr.js +++ b/language/fr.js @@ -15,36 +15,8 @@ H5PEditor.language.core = { outOfStep: 'La :property ne peut être effectuée que par étape :step.', add: 'Ajouter', addFile: 'Ajouter un fichier', - browseFiles: 'Parcourir les fichiers', - removeImage: 'Supprimer l\'Image', - confirmImageRemoval: 'Voulez-vous vraiment supprimer cette image ?', - dragAndDropAndPasteImage: 'Glisser-déposer ou coller un fichier image ici via :keyCombination pour l’ajouter', - dragAndDropAndPasteReplaceImage: 'Glisser-déposer ou coller un fichier image ici pour remplacer', - dropImage: 'Déposer un fichier image ici pour l\'ajouter', - uploadImage: 'Ajouter une image', - uploadingImage: 'Ajout de l\'image, veuillez patienter.', - replaceImage: 'Remplacer l\'image ?', - confirmReplaceImage: 'Voulez-vous vraiment remplacer cette image ?', - onlyPasteImageFiles: 'Vous ne pouvez coller que des fichiers image.', - uploadVideo: 'Ajouter une vidéo', - uploadAudio: 'Ajouter un fichier audio', - uploadOr: 'ou', - dragAndDropAndPasteVideo: 'Glisser-déposer ou coller un fichier vidéo ici via :keyCombination pour l’ajouter', - dragAndDropAndPasteAudio: 'Glisser-déposer ou coller un fichier audio ici via :keyCombination pour l’ajouter', - pasteVideoLink: 'Coller un lien YouTube ou une autre source vidéo', - pasteAudioLink: 'Coller un lien ou une autre source audio', - dropVideo: 'Déposer un fichier vidéo ici pour l\'ajouter', - dropAudio: 'Déposer un fichier audio ici pour l\'ajouter', - enterVideoLink: 'Entrer un lien vidéo', - enterAudioLink: 'Entrer un lien audio', - insertUrl: 'Insérer une URL', - replaceUrl: 'Remplacer l\'URL', - ctrlKey: 'ctrl', - commandKey: '⌘', - pasteKey: 'v', - supportedVideoFormats: 'H5P supporte les sources vidéo externes suivantes : Youtube, Panopto et Vimeo.', - dragAndDropToReplaceVideo: 'Glisser-déposer un fichier vidéo ici pour remplacer', - dragAndDropToReplaceAudio: 'Glisser-déposer un fichier audio ici pour remplacer', + removeFile: 'Supprimer un fichier', + confirmRemoval: 'Voulez-vous vraiment supprimer :type ?', removeImage: "Supprimer l'image", confirmImageRemoval: 'Votre image va être supprimée. Êtes-vous sûr de vouloir continuer ?', changeFile: 'Changer le fichier', @@ -71,11 +43,7 @@ H5PEditor.language.core = { noSemantics: 'Erreur, impossible de charger ce type de contenu.', editImage: "Editer l'image", saveLabel: 'Enregistrer', - image: 'Image', cancelLabel: 'Annuler', - deleteLabel: 'Supprimer', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Réinitialiser', loadingImageEditor: "Editeur d'image en cours de chargement, patientez...", selectFiletoUpload: 'Choisissez le fichier à charger', @@ -86,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: "Coller le lien YouTube link ou l'URL d'une autre source vidéo", uploadAudioTitle: 'Téléverser le fichier audio', uploadVideoTitle: 'Téléverser le fichier vidéo', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Insérer', cancel: 'Annuler', height: 'hauteur', @@ -101,8 +64,6 @@ H5PEditor.language.core = { numberField: 'numérique', orderItemUp: "Monter l'élément", orderItemDown: "Descendre l'élément", - expandAllContent: 'Expand all content', - collapseAllContent: 'Collapse all content', removeItem: "Supprimer l'élément", hubPanelLabel: "Sélectionner le type d'activité", importantInstructions: 'Instructions importantes', diff --git a/language/gl.js b/language/gl.js index 54497d0a..38d71327 100644 --- a/language/gl.js +++ b/language/gl.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: 'Editar imaxe', saveLabel: 'Gardar', cancelLabel: 'Cancelar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Voltar á orixinal', loadingImageEditor: 'Cargando o editor de imaxes. Agarda, por favor...', selectFiletoUpload: 'Seleccionar ficheiro a cargar', @@ -56,12 +54,7 @@ H5PEditor.language.core = { enterVideoTitle: 'Pegar enlace de Youtube ou outra URL de fonte de vídeo', uploadAudioTitle: 'Cargar ficheiro de audio', uploadVideoTitle: 'Cargar ficheiro de vídeo', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P suporta todas as fontes externas de vídeo formateado como mp4, webm ou ogv, como Vimeo Pro, e soporta enlaces de YouTube e Panopto.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Inserir', cancel: 'Cancelar', height: 'altura', diff --git a/language/it.js b/language/it.js index b252e580..d5d15761 100644 --- a/language/it.js +++ b/language/it.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: 'Modifica immagine', saveLabel: 'Salva', cancelLabel: 'Cancella', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Ripristina all\'originale', loadingImageEditor: 'Caricamento dell\'immagine dell\'editor, attendere per favore...', selectFiletoUpload: 'Selezionare il file da caricare', @@ -56,12 +54,7 @@ H5PEditor.language.core = { enterVideoTitle: 'Incolla il link YouTube link o un altro URL sorgente video', uploadAudioTitle: 'Carica file audio', uploadVideoTitle: 'Carica file video', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supporta tutte le sorgenti video esterne formattate come mp4, webm o ogv, come Vimeo Pro, e supporta i collegamenti YouTube e Panopto.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Inserisci', cancel: 'Cancella', height: 'altezza', diff --git a/language/ko.js b/language/ko.js index f2278a0c..db24b52f 100644 --- a/language/ko.js +++ b/language/ko.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: '이미지 편집', saveLabel: '저장', cancelLabel: '취소', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: '원본으로 돌아가기', loadingImageEditor: '이미지 편집기 로드 중, 잠시 기다리십시오...', selectFiletoUpload: '업로드할 파일 선택', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: '유튜브 게시 링크 또는 기타 비디오 소스 URL 붙여넣기', uploadAudioTitle: '오디오 파일 업로드', uploadVideoTitle: '비디오 파일 업로드', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P는 비메오 프로처럼 mp4, webm 또는 ogv로 포맷된 모든 외부 비디오 소스를 지원하며, 유튜브 링크를 지원함.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: '삽입', cancel: '취소', height: '높이', diff --git a/language/nb.js b/language/nb.js index 0c09ac8a..f986689f 100644 --- a/language/nb.js +++ b/language/nb.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Rediger bilde', saveLabel: 'Lagre', cancelLabel: 'Avbryt', - deleteAudioLabel: 'Fjern Lydfil', - deleteVideoLabel: 'Fjern Videofil', resetToOriginalLabel: 'Tilbakestill bilde', loadingImageEditor: 'Laster inn bilderedigering, vennligst vent...', selectFiletoUpload: 'Velg fil som skal lastes opp', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Lim inn YouTube lenke eller annen videokilde URL', uploadAudioTitle: 'Last opp lydfil', uploadVideoTitle: 'Last opp videofil', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P støtter alle eksterne videokilder på formatene mp4, webm eller ogv, slik som Vimeo Pro, og har støtte for YouTube-lenker og Panopto-lenker.', - unsupportedVideoSource: "Videokilden er ikke støttet", - unsupportedAudioSource: "Lydkilden er ikke støttet", insert: 'Sett inn', cancel: 'Avbryt', height: 'Høyde', diff --git a/language/nl.js b/language/nl.js index f752e13b..43e6c106 100644 --- a/language/nl.js +++ b/language/nl.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Afbeelding bewerken', saveLabel: 'Opslaan', cancelLabel: 'Annuleren', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Terugzetten naar oorspronkelijk', loadingImageEditor: 'Afbeeldingseditor laden, wachten alstublieft ...', selectFiletoUpload: 'Selecteer bestand om te uploaden', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Plak YouTube-link of andere URL van videobron', uploadAudioTitle: 'Upload audiobestand', uploadVideoTitle: 'Upload videobestand', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Invoegen', cancel: 'Annuleren', height: 'hoogte', diff --git a/language/nn.js b/language/nn.js index 931ecf63..e20161ca 100644 --- a/language/nn.js +++ b/language/nn.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Rediger bilete', saveLabel: 'Lagre', cancelLabel: 'Avbryt', - deleteAudioLabel: 'Fjern Lydfil', - deleteVideoLabel: 'Fjern Videofil', resetToOriginalLabel: 'Tilbakestill bilde', loadingImageEditor: 'Laster inn bilderedigering, vennligst vent...', selectFiletoUpload: 'Velg fil som skal lastes opp', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Lim inn YouTube lenke eller annen videokjelde URL', uploadAudioTitle: 'Last opp lydfil', uploadVideoTitle: 'Last opp videofil', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P støtter alle eksterne videokilder på formatene mp4, webm eller ogv, slik som Vimeo Pro, og har støtte for YouTube-lenker og Panopto-lenker.', - unsupportedVideoSource: "Videokjelda er ikkje støtta", - unsupportedAudioSource: "Lydkjelda er ikkje støtta", insert: 'Sett inn', cancel: 'Avbryt', height: 'Høyde', diff --git a/language/pl.js b/language/pl.js index 6ff761e4..6ba567a5 100644 --- a/language/pl.js +++ b/language/pl.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: 'Edytuj obraz', saveLabel: 'Zapisz', cancelLabel: 'Anuluj', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Resetuj do oryginału', loadingImageEditor: 'Wczytywanie edytora obrazów, proszę czekać...', selectFiletoUpload: 'Wybierz plik, który chcesz dodać', @@ -56,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Wklej link YouTube lub dodaj plik wideo', uploadAudioTitle: 'Dodaj plik audio', uploadVideoTitle: 'Dodaj plik wideo', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Wstaw', cancel: 'Anuluj', height: 'długość', diff --git a/language/pt-br.js b/language/pt-br.js index b8d0597c..30f70779 100644 --- a/language/pt-br.js +++ b/language/pt-br.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Editar imagem', saveLabel: 'Salvar', cancelLabel: 'Cancelar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Resetar para original', loadingImageEditor: 'Carregar editor de imagem, aguarde...', selectFiletoUpload: 'Selecionar arquivo para enviar', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Cole aqui a URL do vídeo ou o link do YouTube', uploadAudioTitle: 'Enviar arquivo de áudio', uploadVideoTitle: 'Enviar arquivo de vídeo', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Inserir', cancel: 'Cancelar', height: 'altura', diff --git a/language/pt.js b/language/pt.js index ba19e5d6..e75303ae 100644 --- a/language/pt.js +++ b/language/pt.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Editar imagem', saveLabel: 'Guardar', cancelLabel: 'Cancelar', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Restabelecer o original', loadingImageEditor: 'A carregar o editor de imagem. Por favor, aguarde...', selectFiletoUpload: 'Selecione o ficheiro para enviar', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Cole aqui o URL do vídeo ou a hiperligação do YouTube', uploadAudioTitle: 'Enviar ficheiro de áudio', uploadVideoTitle: 'Enviar ficheiro de vídeo', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Inserir', cancel: 'Cancelar', height: 'altura', diff --git a/language/ru.js b/language/ru.js index 0c01c056..dec2fbe0 100644 --- a/language/ru.js +++ b/language/ru.js @@ -47,8 +47,6 @@ H5PEditor.language.core = { editImage: 'Изменить изображение', saveLabel: 'Сохранить', cancelLabel: 'Отмена', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Сброс к оригиналу', loadingImageEditor: 'Загрузка графического редактора, пожалуйста, подождите ...', selectFiletoUpload: 'Выберите файл для загрузки', @@ -59,13 +57,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Вставить ссылку на YouTube или другой источник видео', uploadAudioTitle: 'Загрузить аудио файл', uploadVideoTitle: 'Загрузить видео файл', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Вставить', cancel: 'Отмена', height: 'высота', diff --git a/language/sl.js b/language/sl.js index baa4581a..58e02347 100644 --- a/language/sl.js +++ b/language/sl.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Uredi sliko', saveLabel: 'Shrani', cancelLabel: 'Prekliči', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Ponastavi na privzeto', loadingImageEditor: 'Nalagam urejevalnik slik, počakajte prosim ...', selectFiletoUpload: 'Izberite datoteko za prenos', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Dodaj spletni naslov (URL) do YouTube ali drugega videoposnetka', uploadAudioTitle: 'Naloži zvočni posnetek', uploadVideoTitle: 'Naloži videoposnetek', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P podpira vse zunanje videoposnetke v formatu mp4, webm ali ogv. Tudi povezave do posnetkov na Vimeo Pro, YouTube in Panopto.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Vstavi', cancel: 'Prekliči', height: 'višina', diff --git a/language/sv.js b/language/sv.js index d1830802..7689dfe6 100644 --- a/language/sv.js +++ b/language/sv.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Redigera bild', saveLabel: 'Spara', cancelLabel: 'Avbryt', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Återställ till original', loadingImageEditor: 'Laddar bildredigerare,vänta ...', selectFiletoUpload: 'Välj fil att ladda upp', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Klistra in YouTube-länk eller annan URL till videokälla', uploadAudioTitle: 'Ladda upp ljudfil', uploadVideoTitle: 'Ladda upp videofil', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Infoga', cancel: 'Avbryt', height: 'höjd', diff --git a/language/tr.js b/language/tr.js index 6e3411d9..e4835cfe 100644 --- a/language/tr.js +++ b/language/tr.js @@ -45,8 +45,6 @@ H5PEditor.language.core = { editImage: 'Resmi düzenle', saveLabel: 'Kaydet', cancelLabel: 'İptal', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: 'Özgün biçimine sıfırla', loadingImageEditor: 'Resim düzenleyici yükleniyor, bekleyin ...', selectFiletoUpload: 'Yüklenecek dosyayı seçin', @@ -57,13 +55,8 @@ H5PEditor.language.core = { enterVideoTitle: 'Youtube linkini ya da diğer video kaynağının URLsini yapıştırın', uploadAudioTitle: 'Ses dosyası yükle', uploadVideoTitle: 'Video dosyası yükle', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P supports all external video sources formatted as mp4, webm or ogv, like Vimeo Pro, and has support for YouTube and Panopto links.', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: 'Ekle', cancel: 'Vazgeç', height: 'yükseklik', diff --git a/language/zh-cn.js b/language/zh-cn.js index 67121ef3..964fc022 100644 --- a/language/zh-cn.js +++ b/language/zh-cn.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: '编辑图片', saveLabel: '保存', cancelLabel: '取消', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: '重置为原始状态', loadingImageEditor: '正在加载图片编辑器,请稍候...', selectFiletoUpload: '请选择要上传的文件', @@ -56,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: '粘贴YouTube链接或其他视频源URL', uploadAudioTitle: '上传音频文件', uploadVideoTitle: '上传视频文件', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P 支持格式为 mp4、webm 或 ogv 的所有外部视频源,如 Vimeo Pro,并支持 YouTube 和 Panopto 链接。', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: '插入', cancel: '取消', height: '高度', diff --git a/language/zh-hans.js b/language/zh-hans.js index 67121ef3..964fc022 100644 --- a/language/zh-hans.js +++ b/language/zh-hans.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: '编辑图片', saveLabel: '保存', cancelLabel: '取消', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: '重置为原始状态', loadingImageEditor: '正在加载图片编辑器,请稍候...', selectFiletoUpload: '请选择要上传的文件', @@ -56,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: '粘贴YouTube链接或其他视频源URL', uploadAudioTitle: '上传音频文件', uploadVideoTitle: '上传视频文件', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P 支持格式为 mp4、webm 或 ogv 的所有外部视频源,如 Vimeo Pro,并支持 YouTube 和 Panopto 链接。', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: '插入', cancel: '取消', height: '高度', diff --git a/language/zh.js b/language/zh.js index 67121ef3..964fc022 100644 --- a/language/zh.js +++ b/language/zh.js @@ -44,8 +44,6 @@ H5PEditor.language.core = { editImage: '编辑图片', saveLabel: '保存', cancelLabel: '取消', - deleteAudioLabel: 'Delete Audio', - deleteVideoLabel: 'Delete Video', resetToOriginalLabel: '重置为原始状态', loadingImageEditor: '正在加载图片编辑器,请稍候...', selectFiletoUpload: '请选择要上传的文件', @@ -56,13 +54,8 @@ H5PEditor.language.core = { enterVideoTitle: '粘贴YouTube链接或其他视频源URL', uploadAudioTitle: '上传音频文件', uploadVideoTitle: '上传视频文件', - fileUploadTitle: 'File Upload', - insertLinkTitle: 'Insert Link', - recordAudioTitle: 'Record Audio', addVideoDescription: 'H5P 支持格式为 mp4、webm 或 ogv 的所有外部视频源,如 Vimeo Pro,并支持 YouTube 和 Panopto 链接。', - unsupportedVideoSource: "Unsupported video source", - unsupportedAudioSource: "Unsupported audio source", insert: '插入', cancel: '取消', height: '高度', diff --git a/libs/cropper.css b/libs/cropper.css index 21a95f9e..dbeed421 100644 --- a/libs/cropper.css +++ b/libs/cropper.css @@ -10,16 +10,6 @@ padding: 35px; user-select: none; } -.cropper-buttons div { - transition: opacity 1s; -} -.hidden { - opacity: 0; -} -.wait div:hover { - cursor: wait; -} - .cropper-button { position: relative; border: 3px solid #2f323a; diff --git a/package-lock.json b/package-lock.json index fc7b696c..80008aae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -135,11 +135,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@types/eslint": { + "version": "8.56.9", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.9.tgz", + "integrity": "sha512-W4W3KcqzjJ0sHg2vAq9vfml6OhsJ53TcUjUqfzzZf/EChUtwspszj/S0pzMxnfRcO55/iGq47dscXw71Fxc4Zg==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -148,9 +169,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.12.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz", - "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==", + "version": "20.12.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz", + "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -359,10 +380,11 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -370,25 +392,16 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/ajv": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz", - "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.3", + "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "uri-js": "^4.2.2" }, "funding": { "type": "github", @@ -450,21 +463,21 @@ } }, "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "dev": true, "dependencies": { - "fill-range": "^7.1.1" + "fill-range": "^7.0.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.23.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", - "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -480,11 +493,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001587", - "electron-to-chromium": "^1.4.668", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -500,9 +514,9 @@ "dev": true }, "node_modules/caniuse-lite": { - "version": "1.0.30001624", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz", - "integrity": "sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA==", + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "dev": true, "funding": [ { @@ -517,7 +531,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chokidar": { "version": "3.6.0", @@ -543,18 +558,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -614,6 +617,18 @@ "webpack": "^5.1.0" } }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -676,16 +691,18 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.783", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.783.tgz", - "integrity": "sha512-bT0jEz/Xz1fahQpbZ1D7LgmPYZ3iHVY39NcWWro1+hA2IvjiPeaXtfSqrQ+nXjApMvQRE2ASt1itSLRrebHMRQ==", - "dev": true + "version": "1.5.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", + "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", + "dev": true, + "license": "ISC" }, "node_modules/enhanced-resolve": { "version": "5.17.1", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -695,9 +712,9 @@ } }, "node_modules/envinfo": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", - "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz", + "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==", "dev": true, "bin": { "envinfo": "dist/cli.js" @@ -707,16 +724,17 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz", + "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==", "dev": true }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -795,18 +813,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -832,9 +838,9 @@ } }, "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -889,15 +895,15 @@ } }, "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "is-glob": "^4.0.3" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">= 6" } }, "node_modules/glob-to-regexp": { @@ -934,7 +940,7 @@ }, "node_modules/h5p-image-cropper": { "version": "1.0.0", - "resolved": "git+ssh://git@github.com/h5p/h5p-image-cropper.git#f0b2e93c92293e06867ef949d838501b8fa3ed70", + "resolved": "git+ssh://git@github.com/h5p/h5p-image-cropper.git#09d0960367fd89e0581539ee8fb8366fd918ab05", "dev": true, "license": "MIT" }, @@ -981,9 +987,9 @@ } }, "node_modules/immutable": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", - "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", "dev": true }, "node_modules/import-local": { @@ -1151,6 +1157,18 @@ "node": ">=8" } }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -1167,12 +1185,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dev": true, "dependencies": { - "braces": "^3.0.3", + "braces": "^3.0.2", "picomatch": "^2.3.1" }, "engines": { @@ -1201,9 +1219,9 @@ } }, "node_modules/mini-css-extract-plugin": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.0.tgz", - "integrity": "sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.8.1.tgz", + "integrity": "sha512-/1HDlyFRxWIZPI1ZpgqlZ8jMw/1Dp/dl3P0L1jtZ+zVcHqwPhGwaJwKL00WVgfnBy6PWCde9W65or7IIETImuA==", "dev": true, "dependencies": { "schema-utils": "^4.0.0", @@ -1245,10 +1263,11 @@ "dev": true }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -1332,10 +1351,11 @@ } }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", @@ -1449,9 +1469,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.16.tgz", + "integrity": "sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -1630,9 +1650,9 @@ ] }, "node_modules/sass": { - "version": "1.77.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz", - "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==", + "version": "1.75.0", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz", + "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==", "dev": true, "dependencies": { "chokidar": ">=3.0.0 <4.0.0", @@ -1647,9 +1667,9 @@ } }, "node_modules/sass-loader": { - "version": "14.2.1", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz", - "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.0.tgz", + "integrity": "sha512-jxmjDXD9OYNDb2bp9JvopdE6QjecQY9beTWik/6sEHrsMxyo90Gyc471A4NUz60NLs4WsAh6yVtIvhLwEZcXeg==", "dev": true, "dependencies": { "neo-async": "^2.6.2" @@ -1706,10 +1726,13 @@ } }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, "bin": { "semver": "bin/semver.js" }, @@ -1852,9 +1875,9 @@ } }, "node_modules/terser": { - "version": "5.31.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz", - "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz", + "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -1983,9 +2006,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -2001,9 +2024,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -2041,18 +2065,19 @@ } }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "^1.0.5", + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", "@webassemblyjs/ast": "^1.12.1", "@webassemblyjs/wasm-edit": "^1.12.1", "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", @@ -2233,6 +2258,12 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/zebra_datepicker": { "version": "1.9.11", "resolved": "https://registry.npmjs.org/zebra_datepicker/-/zebra_datepicker-1.9.11.tgz", diff --git a/scripts/h5peditor-av.js b/scripts/h5peditor-av.js index faf8bd80..97e856d0 100644 --- a/scripts/h5peditor-av.js +++ b/scripts/h5peditor-av.js @@ -17,6 +17,7 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) */ function C(parent, field, params, setValue) { var self = this; + // Initialize inheritance H5PEditor.FileUploader.call(self, field); @@ -25,24 +26,12 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) this.params = params; this.setValue = setValue; this.changes = []; - this.hasRecorded = false; if (params !== undefined && params[0] !== undefined) { this.setCopyright(params[0].copyright); } - const isAudio = this.field.type === 'audio'; - - this.replaceCallback = () => {}; - this.confirmReplaceDialog = new H5P.ConfirmationDialog({ - headerText: H5PEditor.t('core', isAudio ? 'replaceAudio' : 'replaceVideo'), - dialogText: H5PEditor.t('core', isAudio ? 'confirmReplaceAudio' : 'confirmReplaceVideo') - }).appendTo(document.body); - - this.confirmReplaceDialog.on('confirmed', function () { - self.replaceCallback(); - }); - + // When uploading starts self.on('upload', function () { // Insert throbber self.$uploading = $('
' + H5PEditor.t('core', 'uploading') + '
').insertAfter(self.$add.hide()); @@ -50,33 +39,27 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) // Clear old error messages self.$errors.html(''); + // Close dialog self.closeDialog(); }); + // Monitor upload progress self.on('uploadProgress', function (e) { - // New upload, i.e. not update existing box. - if (typeof e.data.updateId === 'undefined') { - self.handleUploadProgress(this.dndAddDialog); - } + self.$uploading.html(H5PEditor.t('core', 'uploading') + ' ' + Math.round(e.data * 100) + ' %'); }); + // Handle upload complete self.on('uploadComplete', function (event) { - const result = event.data; - let index = self.params?.length ?? 0; - const updateId = event.data?.updateId ?? undefined; - this.updateId = updateId; - const boxesEl = Array.from(self.$dndFiles.get(0).querySelectorAll('.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider)')); - const boxEls = self.$dndFiles.get(0).querySelectorAll('.h5p-dnd__box'); - let boxEl = boxEls[boxEls.length - 1]; - + var result = event.data; + + // Clear out add dialog + this.$addDialog.find('.h5p-file-url').val(''); + try { if (result.error) { throw result.error; } - // Clear out add dialog - this.$addDialog.find('.h5p-file-url').val(''); - // Set params if none is set if (self.params === undefined) { self.params = []; @@ -84,47 +67,23 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) } // Add a new file/source - const file = { + var file = { path: result.data.path, mime: result.data.mime, - copyright: self.copyright, - tabIndex: C.TABS.UPLOAD, + copyright: self.copyright }; - - if (updateId) { - let foundUpdateIndex = self.params.findIndex(param => param.id === updateId); - - if (foundUpdateIndex !== -1) { - file.id = updateId; - - self.updateIndex = index = foundUpdateIndex; - self.params[index] = file; - boxEl = boxesEl.find(element => element.id === updateId); - - self.addFile(foundUpdateIndex, updateId); - } - else { - throw new Error(`File not found`); - } - } - else { - file.id = H5P.createUUID(); - - boxEl = self.dndAddDialog; - self.params[index] = file; - self.addFile(index); - } - self.setValue(self.field, self.params); + var index = (self.updateIndex !== undefined ? self.updateIndex : self.params.length); + self.params[index] = file; + self.addFile(index); // Trigger change callbacks (old event system) - for (let i = 0; i < self.changes.length; i++) { + for (var i = 0; i < self.changes.length; i++) { self.changes[i](file); } - const errorEls = Array.from(self.$dndFiles.get(0).querySelectorAll('.has-error')); - errorEls.forEach(errorEl => errorEl.classList.remove('has-error')); } catch (error) { - self.setErrorMessage(error.message || error, boxEl); + // Display errors + self.$errors.append(H5PEditor.createError(error)); } if (self.$uploading !== undefined && self.$uploading.length !== 0) { @@ -132,33 +91,12 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) self.$uploading.remove(); self.$add.show(); } - - self.handleUploadComplete(boxEl); }); } C.prototype = Object.create(ns.FileUploader.prototype); C.prototype.constructor = C; - C.prototype.setErrorMessage = function (message, boxEl) { - const errorEl = boxEl.querySelector('.h5p-errors'); - if (errorEl) { - errorEl.innerText = message; - } - if (boxEl) { - boxEl.classList.add('has-error'); - } - this.setAriaLiveErrorMessage(message) - }; - - C.prototype.setAriaLiveErrorMessage = function (message) { - this.ariaLiveEl.innerText = message; - // Note: Should last long enough for the screen reader to read the text above. - setTimeout(() => { - this.ariaLiveEl.innerText = ""; - }, 5000); - }; - /** * Append widget to given wrapper. * @@ -170,43 +108,44 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) var imageHtml = '' + - C.createTabbedAdd(self.field.type, self.field.widgetExtensions); + (self.field.widgetExtensions ? C.createTabbedAdd(self.field.type, self.field.widgetExtensions, id, self.field.description !== undefined) : C.createAdd(self.field.type, id, self.field.description !== undefined)) if (!this.field.disableCopyright) { imageHtml += '' + H5PEditor.t('core', 'editCopyright') + ''; } imageHtml += '
' + - '' + - '
'; - + '' + + ''; + var html = H5PEditor.createFieldMarkup(this.field, imageHtml, id); var $container = $(html).appendTo($wrapper); - - // Wrappers - this.$dialogAnchor = $container.children('.h5p-dialog-anchor'); - this.$addDialog = this.$dialogAnchor.children('.h5p-add-dialog'); - this.$dialogTable = this.$addDialog.children('.h5p-add-dialog-table'); - this.$tabList = this.$dialogTable.children('.av-tablist'); - + + this.$files = $container.children('.file'); this.$add = $container.children('.h5p-add-file').click(function () { - this.$addDialog.addClass('h5p-open'); + self.$addDialog.addClass('h5p-open'); }); - // Prepare to add the extra tab instances - const tabInstances = [null, null]; // Add nulls for hard-coded tabs - self.tabInstances = tabInstances; + // Tabs that are hard-coded into this widget. Any other tab must be an extension. + const TABS = { + UPLOAD: 0, + INPUT: 1 + }; - let activeTab = C.TABS.UPLOAD; + // The current active tab + let activeTab = TABS.UPLOAD; /** * @param {number} tab * @return {boolean} */ const isExtension = function (tab) { - return tab > C.TABS.INPUT; // Always last tab + return tab > TABS.INPUT; // Always last tab }; + /** + * Toggle the currently active tab. + */ const toggleTab = function () { // Pause the last active tab if (isExtension(activeTab)) { @@ -216,22 +155,35 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) // Update tab this.parentElement.querySelector('.selected').classList.remove('selected'); this.classList.add('selected'); - + // Update tab panel - const inactiveTabPanel = document.getElementById(this.getAttribute('aria-controls')); - const activeTabPanel = inactiveTabPanel.parentElement.querySelector('.av-tabpanel:not([hidden])'); - activeTabPanel.setAttribute('hidden', ''); - inactiveTabPanel.removeAttribute('hidden'); + const el = document.getElementById(this.getAttribute('aria-controls')); + el.parentElement.querySelector('.av-tabpanel:not([hidden])').setAttribute('hidden', ''); + el.removeAttribute('hidden'); // Set active tab index - for (let i = 0; i < inactiveTabPanel.parentElement.children.length; i++) { - if (inactiveTabPanel.parentElement.children[i] === inactiveTabPanel) { + for (let i = 0; i < el.parentElement.children.length; i++) { + if (el.parentElement.children[i] === el) { activeTab = i - 1; // Compensate for .av-tablist in the same wrapper break; } } + + // Toggle insert button disabled + if (activeTab === TABS.UPLOAD) { + self.$insertButton[0].disabled = true; + } + else if (activeTab === TABS.INPUT) { + self.$insertButton[0].disabled = false; + } + else { + self.$insertButton[0].disabled = !tabInstances[activeTab].hasMedia(); + } } + /** + * Switch focus between the buttons in the tablist + */ const moveFocus = function (el) { if (el) { this.setAttribute('tabindex', '-1'); @@ -240,7 +192,30 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) } } + // Register event listeners to tab DOM elements + $container.find('.av-tab').click(toggleTab).keydown(function (e) { + if (e.which === 13 || e.which === 32) { // Enter or Space + toggleTab.call(this, e); + e.preventDefault(); + } + else if (e.which === 37 || e.which === 38) { // Left or Up + moveFocus.call(this, this.previousSibling); + e.preventDefault(); + } + else if (e.which === 39 || e.which === 40) { // Right or Down + moveFocus.call(this, this.nextSibling); + e.preventDefault(); + } + }); + + this.$addDialog = this.$add.next().children().first(); + + // Prepare to add the extra tab instances + const tabInstances = [null, null]; // Add nulls for hard-coded tabs + self.tabInstances = tabInstances; + if (self.field.widgetExtensions) { + /** * @param {string} type Constructor name scoped inside this widget * @param {number} index @@ -248,29 +223,10 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) const createTabInstance = function (type, index) { const tabInstance = new H5PEditor.AV[type](); tabInstance.appendTo(self.$addDialog[0].children[0].children[index + 1]); // Compensate for .av-tablist in the same wrapper - this.hasRecorded = false; - let hasUploaded = false; - let media = null; - let timeout = null; - - tabInstance.on('hasMedia', function () { - this.hasRecorded = true; - media = tabInstance.getMedia(); - if (timeout) { - clearTimeout(timeout); - } - if (this.hasRecorded && !hasUploaded && !!media) { - timeout = setTimeout(() => { - hasUploaded = true; - self.upload(media.data, media.name); - self.$tabList.children('.av-tab').get(0).click(); - const avTabPanel = self.$dialogTable.find('.av-tabpanel:not([hidden])'); - avTabPanel.addClass('has_content'); - hasUploaded = false; - return; - }, 100); + tabInstance.on('hasMedia', function (e) { + if (index === activeTab) { + self.$insertButton[0].disabled = !e.data; } - this.hasRecorded = false; }); tabInstances.push(tabInstance); } @@ -282,140 +238,13 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) } } } - - this.$dndTabPanel = this.$dialogTable.children('.av-tabpanel:not([hidden])'); - this.$dndFiles = this.$dndTabPanel.children('.h5p-dnd__av-container'); - - this.dndAddDialog = this.$dndFiles.children('.h5p-dnd__box__url.h5p-dnd__box--is-dashed').get(0); - this.ariaLiveEl = this.$dndFiles.find('.h5p-sr-only[aria-live]').get(0); - - const blockEl = this.dndAddDialog.querySelector('.h5p-dnd__box__block'); - this.addDragAndDropListeners(this.dndAddDialog, blockEl); - - const urlInsertButton = this.$dialogTable.find('.h5p-dnd__btn__insert-url'); - const inputContainer = urlInsertButton.parent().parent().parent(); - this.$videoUrlErrorContainer = inputContainer.find('#errorContainer'); - - urlInsertButton.on('click', () => { - const url = inputContainer.find('.input-video').val().trim(); - const isAudio = this.field.type === 'audio'; - if (url.length === 0) { - return; - } - - if (!C.findProvider(url)) { - this.$videoUrlErrorContainer.removeClass('hidden'); - this.$videoUrlErrorContainer.addClass("has-error"); - this.$videoUrlErrorContainer.find('.h5p-errors').text(isAudio ? ns.t('core', 'unsupportedAudioSource') : ns.t('core', 'unsupportedVideoSource')); - } - else { - this.$videoUrlErrorContainer.addClass('hidden'); - - // Check if there is an existing media propery in params - let existingMedia = this.params?.some(p => C.findProvider(p.path)); - - if (existingMedia) { - this.replaceUrl(url); - } else { - this.useUrl(url); - } - this.updatePasteBox(true); - } - }); - - const urlInputField = this.$dialogTable.find('.input-video'); - urlInputField.on('keydown', (e) => { - this.$videoUrlErrorContainer.addClass('hidden'); - if (e.code === 'Enter') { - const url = this.$dialogTable.find('.input-video').val().trim(); - const isAudio = this.field.type === 'audio'; - if (url.length === 0) { - return; - } - - if (!C.findProvider(url)) { - this.$videoUrlErrorContainer.removeClass('hidden'); - this.$videoUrlErrorContainer.addClass("has-error"); - this.$videoUrlErrorContainer.find('.h5p-errors').text(isAudio ? ns.t('core', 'unsupportedAudioSource') : ns.t('core', 'unsupportedVideoSource')); - } - else { - - // Check if there is an existing media propery in params - let existingMedia = this.params?.some(p => C.findProvider(p.path)); - - if (existingMedia) { - this.replaceUrl(url); - } else { - this.useUrl(url); - } - this.updatePasteBox(true); - } - } - }); - - // Need to add listener on the specific dnd tab here - document.addEventListener('paste', (e) => { - const activeElement = document.activeElement.closest('.h5p-dnd__box'); - if (this.$dndFiles.get(0).contains(activeElement) && activeElement && e.clipboardData.files.length > 0) { - const children = Array.from(activeElement.parentElement.parentElement.querySelectorAll('.h5p-dnd__box--has-video')); - let index = -1; - let id; - children.forEach((child, i) => { - if (child === activeElement) { - index = i; - id = child.id ?? null; - } - }) - - this.uploadOrReplaceImage(e.clipboardData.files, index, id, activeElement); - } - }); - - const uploadButton = this.$dialogTable.find('.h5p-dnd__btn__upload'); - uploadButton.on('click', (e) => { - e.preventDefault(); - this.openFileSelector(); - }); - - this.$errors = $container.children('.h5p-errors'); - - if (this.params !== undefined) { - this.params = this.params.map((param) => ({ - ...param, - id: H5P.createUUID(), - tabIndex: C.TABS.UPLOAD, - })); - - for (let index = 0; index < this.params.length; index++) { - this.addFile(index); - } - } - else { - $container.find('.h5p-copyright-button').addClass('hidden'); - } - // Register event listeners to tab DOM elements - $container.find('.av-tab').click(toggleTab).keydown(function (e) { - if (e.which === 13 || e.which === 32) { // Enter or Space - toggleTab.call(this, e); - e.preventDefault(); - } - else if (e.which === 37 || e.which === 38) { // Left or Up - moveFocus.call(this, this.previousSibling); - e.preventDefault(); - } - else if (e.which === 39 || e.which === 40) { // Right or Down - moveFocus.call(this, this.nextSibling); - e.preventDefault(); - } + var $url = this.$url = this.$addDialog.find('.h5p-file-url'); + this.$addDialog.find('.h5p-cancel').click(function () { + self.updateIndex = undefined; + self.closeDialog(); }); - self.$addDialog = this.$add.next().children().first(); - - self.$addDialog.addClass('h5p-open'); - - this.$url = this.$addDialog.find('.input-video'); - this.$addDialog.find('.h5p-file-drop-upload') .addClass('has-advanced-upload') .on('drag dragstart dragend dragover dragenter dragleave drop', function (e) { @@ -434,10 +263,36 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) }) .click(function () { self.openFileSelector(); + }); + + this.$insertButton = this.$addDialog.find('.h5p-insert').click(function () { + if (isExtension(activeTab)) { + const media = tabInstances[activeTab].getMedia(); + if (media) { + self.upload(media.data, media.name); + } + } + else { + const url = $url.val().trim(); + if (url) { + self.useUrl(url); + } + } + + self.closeDialog(); }); this.$errors = $container.children('.h5p-errors'); + if (this.params !== undefined) { + for (var i = 0; i < this.params.length; i++) { + this.addFile(i); + } + } + else { + $container.find('.h5p-copyright-button').addClass('hidden'); + } + var $dialog = $container.find('.h5p-editor-dialog'); $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () { $dialog.toggleClass('h5p-open'); @@ -450,264 +305,90 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) }; - /** - * - * @param {number} progress 0-100 the progress of uploading the image - */ - C.prototype.handleUploadProgress = function (boxEl) { - - const elementsToHide = Array.from(boxEl.querySelectorAll(':scope > div:not(.h5p-dnd__loader)')); - const loaderEl = boxEl.querySelector('.h5p-dnd__loader'); - - boxEl.classList.add('h5p-dnd__box--is-uploading'); - loaderEl?.removeAttribute('style'); - elementsToHide.forEach(e => e.style = 'display: none;'); - }; - - C.prototype.handleUploadComplete = function (boxEl) { - const elementsToShow = Array.from(boxEl.querySelectorAll(':scope > div:not(.h5p-dnd__loader)')); - const loaderEl = boxEl.querySelector('.h5p-dnd__loader'); - - boxEl.classList.remove('h5p-dnd__box--is-uploading'); - loaderEl.style = 'display: none;'; - elementsToShow.forEach(e => e.removeAttribute('style')); - } - - /** - * Add drag and drop listeners to the appropriate DOM elements. - */ - C.prototype.addDragAndDropListeners = function (boxEl, blockEl, shouldReplace = false) { - boxEl.addEventListener('dragenter', (e) => this.handleDragAndDrop(e, boxEl, blockEl, shouldReplace)); - blockEl.addEventListener('dragover', (e) => this.handleDragAndDrop(e, boxEl, blockEl, shouldReplace)); - blockEl.addEventListener('dragend', (e) => this.handleDragAndDrop(e, boxEl, blockEl, shouldReplace)); - blockEl.addEventListener('dragleave', (e) => this.handleDragAndDrop(e, boxEl, blockEl, shouldReplace)); - blockEl.addEventListener('drop', (e) => this.handleDragAndDrop(e, boxEl, blockEl, shouldReplace)); - }; - - /** - * Handle drag and drop events. Will apply the correct css classes (styling) - * depending on event type and will handle uploading if the user drops the file. - * - * @param {Event} e - */ - C.prototype.handleDragAndDrop = function (e, boxEl, shouldReplace) { - e.preventDefault(); - e.stopPropagation(); - const boxBlock = boxEl.querySelector('.h5p-dnd__box__block'); - - if (e.type === 'dragenter') { - boxEl.classList.add('h5p-dnd__box--is-dragging') - } - else if (e.type === 'dragend' || (e.type === 'dragleave' && boxBlock === e.target)) { - boxEl.classList.remove('h5p-dnd__box--is-dragging'); - } - else if (e.type === 'drop') { - let index; - let id; - boxEl.classList.remove('h5p-dnd__box--is-dragging'); - const boxElParent = $(boxEl.parentElement); - if (shouldReplace && boxElParent.attr('id') !== this.$dndFiles.attr('id')) { - index = boxElParent.index(); - id = boxElParent.attr('id') ?? undefined; - } - else { - index = -1; - id = undefined; - } - this.uploadOrReplaceImage(e.dataTransfer.files, index, id, boxEl); - } - }; - - - /** - * Will either upload or replace (and upload) an image. - * - * @param {FileList} files - */ - C.prototype.uploadOrReplaceImage = function (files, indexToReplace = -1, idToReplace = undefined, boxEl) { - if (idToReplace) { - // Need to make a copy of the file since Firefox loses the reference to it during the confirm replace dialog. - const filesBackup = [new File([files[0]], files[0].name, { type: files[0].type })]; - this.replaceCallback = () => { - this.handleUploadProgress(boxEl); - this.updateIndex = indexToReplace; - this.updateId = idToReplace; - this.uploadFiles(filesBackup, { updateId: idToReplace }); - }; - this.previousState = C.STATE.HAS_IMAGE; - this.previousParams = this.params; - this.confirmReplaceDialog.show(this.$dndFiles.offset().top); - } else { - this.handleUploadProgress(boxEl); - this.previousState = C.STATE.NO_IMAGE; - this.previousParams = null; - this.uploadFiles(files); - } - }; - /** * Add file icon with actions. * * @param {Number} index */ - C.prototype.addFile = function (index, updateFileId = undefined) { - let that = this; - const file = this.params[index]; - - if (!!this.params) { - const avTabPanel = this.$dialogTable.find('.av-tabpanel:not([hidden])'); - avTabPanel.addClass('has_content'); - } + C.prototype.addFile = function (index) { + var that = this; + var fileHtml; + var file = this.params[index]; + var rowInputId = 'h5p-av-' + C.getNextId(); + var defaultQualityName = H5PEditor.t('core', 'videoQualityDefaultLabel', { ':index': index + 1 }); + var qualityName = (file.metadata && file.metadata.qualityName) ? file.metadata.qualityName : defaultQualityName; // Check if source is provider (Vimeo, YouTube, Panopto) - const isProvider = file?.path && C.findProvider(file.path); - const isAudio = this.field.type === 'audio'; - - let filesContainer; - switch (file.tabIndex) { - case C.TABS.UPLOAD: - filesContainer = this.$dialogTable.find('#dndFiles'); - break; - - case C.TABS.INPUT: - filesContainer = this.$dialogTable.find('#urlFiles'); - break; + const isProvider = file.path && C.findProvider(file.path); + + // Only allow single source if YouTube + if (isProvider) { + // Remove all other files except this one + that.$files.children().each(function (i) { + if (i !== that.updateIndex) { + that.removeFileWithElement($(this)); + } + }); + // Remove old element if updating + that.$files.children().each(function () { + $(this).remove(); + }); + // This is now the first and only file + index = 0; } + this.$add.toggleClass('hidden', isProvider); - const mimeType = file.mime.split('/')[1]; - const videoText = C.providers.map(p => p.name).includes(mimeType) ? mimeType : `.${mimeType.toUpperCase()}`; - let fileHtml; - if (!isProvider) { - fileHtml = ` -
-
-
-
-
-
-
- ${videoText} -
-
-
-
-
-
${isAudio ? H5PEditor.t('core', 'dragAndDropToReplaceAudio') : H5PEditor.t('core', 'dragAndDropToReplaceVideo')}
-
-
- - -
-
- -
-
- `; - } else { - fileHtml = ` -
-
-
-
-
-
-
- ${videoText} -
-
-
-
- -
- -
-
- -
-
- `; + // If updating remove and recreate element + if (that.updateIndex !== undefined) { + var $oldFile = this.$files.children(':eq(' + index + ')'); + $oldFile.remove(); + this.updateIndex = undefined; } - - // Insert file element in appropriate order - const $file = $(fileHtml); - this.$add.toggleClass('hidden', isProvider); + // Create file with customizable quality if enabled and not youtube + if (this.field.enableCustomQualityLabel === true && !isProvider) { + fileHtml = '
  • ' + + '
    ' + + '
    ' + file.mime.split('/')[1] + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + H5PEditor.t('core', 'videoQuality') + '
    ' + + '' + + '' + + '
    ' + + '
  • '; + } + else { + fileHtml = '
  • ' + + '
    ' + + '
    ' + file.mime.split('/')[1] + '
    ' + + '
    ' + + '
    ' + + '
  • '; + } - if (updateFileId) { - this.updateId = undefined; - this.updateIndex = undefined; - const oldFile = filesContainer.find(`#${updateFileId}`); - index = oldFile.index(); - oldFile.remove(); - $file.insertBefore(filesContainer.children().eq(index)); + // Insert file element in appropriate order + var $file = $(fileHtml); + if (index >= that.$files.children().length) { + $file.appendTo(that.$files); } else { - $file.prependTo(filesContainer); + $file.insertBefore(that.$files.children().eq(index)); } this.$add.parent().find('.h5p-copyright-button').removeClass('hidden'); - const boxEl = $file.find('.h5p-dnd__box').get(0); - const blockEl = $file.find('.h5p-dnd__box__block').get(0); - - // Handle drag and drop - this.addDragAndDropListeners(boxEl, blockEl, true); - - // Handle space/enter on frame/box - boxEl.addEventListener('keydown', (e) => { - if (!isProvider && e.target?.nodeName !== 'INPUT') { - if ((e.code === 'Space' || e.code === 'Enter')) { - this.openFileSelector({ - onChangeCallback: () => { - this.updateIndex = index; - this.updateId = boxEl.attr('id'); - this.handleUploadProgress(boxEl); - }, - context: { - updateId: boxEl.attr('id'), - updateIndex: index - } - }); - } - } - }); - - // Handle delete file + // Handle thumbnail click $file - .find('.h5p-delete-image-button') - .on('click', (e) => { - e.preventDefault(); - confirmRemovalDialog.show($file.offset().top); - }); - - // Handle click on thumbnail - $file - .find('.h5p-dnd__video-container') - .click(() => { - if (!isProvider) { - this.openFileSelector({ - onChangeCallback: () => { - this.updateIndex = index; - this.updateId = $file.attr('id'); - let current = filesContainer.find(`#${this.updateId}`).get(0); - this.handleUploadProgress(current); - }, - context: { - updateId: $file.attr('id'), - updateIndex: index - } - }); + .children('.h5p-thumbnail') + .click(function () { + if (!that.$add.is(':visible')) { + return; // Do not allow editing of file while uploading } + that.$addDialog.addClass('h5p-open').find('.h5p-file-url').val(that.params[index].path); + that.updateIndex = index; }); // Handle remove button click @@ -729,7 +410,7 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) }); // Create remove file dialog - const confirmRemovalDialog = new H5P.ConfirmationDialog({ + var confirmRemovalDialog = new H5P.ConfirmationDialog({ headerText: H5PEditor.t('core', 'removeFile'), dialogText: H5PEditor.t('core', 'confirmRemoval', {':type': 'file'}) }).appendTo(document.body); @@ -737,7 +418,7 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) // Remove file on confirmation confirmRemovalDialog.on('confirmed', function () { that.removeFileWithElement($file); - if (filesContainer.children().length === 0) { + if (that.$files.children().length === 0) { that.$add.parent().find('.h5p-copyright-button').addClass('hidden'); } }); @@ -749,61 +430,36 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) * @param {number} $file File element */ C.prototype.removeFileWithElement = function ($file) { - const avTabPanel = this.$dialogTable.find('.av-tabpanel:not([hidden])'); - const filesContainer = avTabPanel.children('.h5p-dnd__av-container'); - const filesContainerId = filesContainer.attr('id') === 'urlFiles' ? true : false; - const urlInputHasValue = filesContainerId ? filesContainer.get(0).querySelector('.input-video').value : ''; + var index = $file.index(); + // Remove from params. if (this.params.length === 1) { - // Remove from params. delete this.params; this.setValue(this.field); - avTabPanel.removeClass('has_content'); } else { - const index = $file.index(); this.params.splice(index, 1); - this.setValue(this.field, this.params); } $file.remove(); this.$add.removeClass('hidden'); - if (filesContainerId && urlInputHasValue !== '') { - this.updatePasteBox(false); - this.$videoUrlErrorContainer.addClass('hidden'); - } // Notify change listeners - for (let i = 0; i < this.changes.length; i++) { + for (var i = 0; i < this.changes.length; i++) { this.changes[i](); } }; - C.prototype.updatePasteBox = function (isReplace) { - const filesContainer = this.$dialogTable.find('.av-tabpanel:not([hidden])').children('.h5p-dnd__av-container'); - const pasteBoxEl = filesContainer.get(0).querySelector('.h5p-dnd__box__video-paste'); - const inputEl = pasteBoxEl.querySelector('.input-video'); - const btnEl = pasteBoxEl.querySelector('.h5p-dnd__btn__insert-url'); - - btnEl.innerText = isReplace ? H5PEditor.t('core', 'replaceUrl') : H5PEditor.t('core', 'insertUrl'); - inputEl.value = isReplace ? inputEl.value : ""; - } - - /** - * Add new url to Url container - * - * @param {string} url new url - */ C.prototype.useUrl = function (url) { if (this.params === undefined) { this.params = []; this.setValue(this.field, this.params); } - let mime; - let aspectRatio; - let i; - const matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i); + var mime; + var aspectRatio; + var i; + var matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i); if (matches !== null) { mime = matches[matches.length - 1]; } @@ -816,18 +472,14 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) } } - const file = { - id: H5P.createUUID(), + var file = { path: url, mime: this.field.type + '/' + (mime ? mime : 'unknown'), copyright: this.copyright, aspectRatio: aspectRatio ? aspectRatio : undefined, - tabIndex: C.TABS.INPUT, }; - - this.params.push(file); - this.setValue(this.field, this.params); - index = this.params.findIndex(param => param.id === file.id); + var index = (this.updateIndex !== undefined ? this.updateIndex : this.params.length); + this.params[index] = file; this.addFile(index); for (i = 0; i < this.changes.length; i++) { @@ -835,67 +487,6 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) } }; - /** - * Replace the file in the Url container - * - * @param {string} url New file url - */ - C.prototype.replaceUrl = function (url) { - let mime; - let aspectRatio; - const matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i); - if (matches !== null) { - mime = matches[matches.length - 1]; - } - else { - // Try to find a provider - const provider = C.findProvider(url); - if (provider) { - mime = provider.name; - aspectRatio = provider.aspectRatio; - } - } - - const index = this.params.findIndex(param => C.findProvider(param.path)); - - const file = { - id: this.params[index].id, - path: url, - mime: this.field.type + '/' + (mime ? mime : 'unknown'), - copyright: this.copyright, - aspectRatio: aspectRatio ? aspectRatio : undefined, - tabIndex: C.TABS.INPUT, - }; - - this.params[index] = file; - this.setValue(this.field, this.params); - - const mimeType = file.mime.split('/')[1]; - const videoText = C.providers.map(p => p.name).includes(mimeType) ? mimeType : `.${mimeType.toUpperCase()}`; - - // Simulating loading to give some feedback to user since this is actually instant. - const urlFilesContainer = this.$dialogTable.find('#urlFiles'); - const boxEl = urlFilesContainer.get(0).querySelector('.h5p-dnd__videobox-wrapper--is-provider .h5p-dnd__box'); - const videoOverlayEl = boxEl.querySelector('.h5p-dnd__video-overlay'); - - videoOverlayEl.innerHTML = ` -
    - ${videoText} - `; - - this.handleUploadProgress(boxEl); - setTimeout(() => { - this.handleUploadComplete(boxEl) - }, 500); - } - - C.prototype.getInputUrlFile = function () { - if (this.params && this.params.length) { - return this.params.filter(param => C.isProvider(param.mimeType) !== 'undefined'); // Should only give one result - } - return null; - } - /** * Validate the field/widget. * @@ -967,9 +558,14 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) * @param {boolean} hasDescription * @returns {string} HTML */ - C.createInsertDialog = function (content) { - return '
    ' + - '
    ' + content + '
    ' + + C.createInsertDialog = function (content, disableInsert, id, hasDescription) { + return '
    ' + + '
    ' + + '
    ' + content + '
    ' + + '
    ' + + '' + + '' + + '
    ' + '
    '; }; @@ -982,83 +578,22 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) */ C.createTabContent = function (tab, type) { const isAudio = (type === 'audio'); - const firstFile = Array.isArray(this.params) ? this.params[0] : undefined; - const isProvider = firstFile?.path && C.findProvider(firstFile.path); - const copyPasteString = `${ns.t('core', 'ctrlKey')}${ns.t('core', 'commandKey')} + ${ns.t('core', 'pasteKey')}`; - const dragCopyPasteString = ns.t('core', isAudio ? 'dragAndDropAndPasteAudio' : 'dragAndDropAndPasteVideo', { ':keyCombination': copyPasteString }); - + switch (tab) { case 'BasicFileUpload': - return ` -
    -
    -
    -
    -
    -
    - -
    -
    - -
    -
    - ${H5PEditor.t('core', 'uploadOr')} -
    -
    -
    - ${dragCopyPasteString} -
    -
    -
    -
    - ${isAudio ? H5PEditor.t('core', 'dropAudio') : H5PEditor.t('core', 'dropVideo')} -
    - -
    - -
    -
    -
    -
    - `; + const id = 'av-upload-' + C.getNextId(); + return '

    ' + H5PEditor.t('core', isAudio ? 'uploadAudioTitle' : 'uploadVideoTitle') + '

    ' + + '
    ' + + '
    ' + + '
    '; case 'InputLinkURL': - return ` -
    -
    -
    -
    -
    - - -
    -
    -
    - -
    - ${!isAudio ? ` -
    -
    - ${H5PEditor.t('core', 'supportedVideoFormats')} -
    -
    - `: ''} -
    -
    -
    - `; + return '

    ' + H5PEditor.t('core', isAudio ? 'enterAudioTitle' : 'enterVideoTitle') + '

    ' + + '
    ' + + '' + + '
    ' + + (isAudio ? '' : '
    ' + H5PEditor.t('core', 'addVideoDescription') + '
    '); + default: return ''; } @@ -1072,53 +607,60 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) * @param {Array} extraTabs * @returns {string} HTML */ - C.createTabbedAdd = function (type, extraTabs) { + C.createTabbedAdd = function (type, extraTabs, id, hasDescription) { let i; const tabs = [ 'BasicFileUpload', 'InputLinkURL' ]; - - // Add when adding record audio - if (extraTabs && extraTabs.length > 0) { - for (i = 0; i < extraTabs.length; i++) { - tabs.push(extraTabs[i]); - } + for (i = 0; i < extraTabs.length; i++) { + tabs.push(extraTabs[i]); } let tabsHTML = ''; let tabpanelsHTML = ''; for (i = 0; i < tabs.length; i++) { - let title = ''; const tab = tabs[i]; const tabId = C.getNextId(); const tabindex = (i === 0 ? 0 : -1) const selected = (i === 0 ? 'true' : 'false'); + const title = (i > 1 ? H5PEditor.t('H5PEditor.' + tab, 'title') : H5PEditor.t('core', 'tabTitle' + tab)); - switch (tab) { - case 'BasicFileUpload': - title = H5PEditor.t('core', 'fileUploadTitle'); - tabsHTML +=''; - break; - case 'InputLinkURL': - title = H5PEditor.t('core', 'insertLinkTitle'); - tabsHTML +=''; - break; - case 'AudioRecorder': - title = H5PEditor.t('core', 'recordAudioTitle'); - tabsHTML +=''; - break; - default: - title = H5PEditor.t('H5PEditor.' + tab, 'title') - break; - } + tabsHTML += ''; tabpanelsHTML += ''; } return C.createInsertDialog( - '
    ' + tabsHTML + '
    ' + tabpanelsHTML + '
    ' + tabsHTML + '
    ' + tabpanelsHTML, + true, id, hasDescription + ); + }; + + /** + * Creates the HTML for the basic 'Upload or URL' dialog. + * + * @param {string} type 'video' or 'audio' + * @param {string} id + * @param {boolean} hasDescription + * @returns {string} HTML + */ + C.createAdd = function (type, id, hasDescription) { + return C.createInsertDialog( + '
    ' + + C.createTabContent('BasicFileUpload', type) + + '
    ' + + '
    ' + + '
    ' + + '
    ' + + '
    ' + H5PEditor.t('core', 'or') + '
    ' + + '
    ' + + '
    ' + + '
    ' + + C.createTabContent('InputLinkURL', type) + + '
    ', + false, id, hasDescription ); }; @@ -1143,9 +685,9 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) aspectRatio: '16:9', }, { - name: 'Echo360', - regexp: /^[^\/]+:\/\/(echo360[^\/]+)\/media\/([^\/]+)\/h5p.*$/i, - aspectRatio: '16:9', + name: 'Echo360', + regexp: /^[^\/]+:\/\/(echo360[^\/]+)\/media\/([^\/]+)\/h5p.*$/i, + aspectRatio: '16:9', }, ]; @@ -1174,17 +716,5 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($) return idCounter++; }; - C.STATE = { - NO_IMAGE: 'NO_IMAGE', - UPLOADING: 'UPLOADING', - HAS_IMAGE: 'HAS_IMAGE' - }; - - // Tabs that are hard-coded into this widget. Any other tab must be an extension. - C.TABS = { - UPLOAD: 0, - INPUT: 1 - }; - return C; })(H5P.jQuery); diff --git a/scripts/h5peditor-file-uploader.js b/scripts/h5peditor-file-uploader.js index fff219a0..3953e4f6 100644 --- a/scripts/h5peditor-file-uploader.js +++ b/scripts/h5peditor-file-uploader.js @@ -19,17 +19,7 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) { * @param {Blob|File} file * @param {string} filename Required due to validation */ - self.upload = function (file, filename, context = {}) { - if (file.size > 2147483648) { // file bigger than 2 GB - var uploadComplete = { - ...context, - error: H5PEditor.t('core', 'fileToLarge'), - data: null - }; - self.trigger('uploadComplete', uploadComplete); - return; - } - + self.upload = function (file, filename) { var formData = new FormData(); formData.append('file', file, filename); formData.append('field', JSON.stringify(field)); @@ -37,26 +27,14 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) { // Submit the form var request = new XMLHttpRequest(); - request.onerror = function () { - var uploadComplete = { - ...context, - error: H5PEditor.t('core', 'unknownFileUploadError'), - data: null - }; - self.trigger('uploadComplete', uploadComplete); - } request.upload.onprogress = function (e) { if (e.lengthComputable) { - self.trigger('uploadProgress', { - ...context, - progress: (e.loaded / e.total) - }); + self.trigger('uploadProgress', (e.loaded / e.total)); } }; request.onload = function () { var result; var uploadComplete = { - ...context, error: null, data: null }; @@ -99,25 +77,22 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) { * * @param {File[]} files */ - self.uploadFiles = function (files, context = {}) { - self.upload(files[0], files[0].name, context); + self.uploadFiles = function (files) { + self.upload(files[0], files[0].name); }; /** * Open the file selector and trigger upload upon selecting file. */ - self.openFileSelector = function ({ onChangeCallback, context } = {}) { + self.openFileSelector = function () { // Create a file selector const input = document.createElement('input'); input.type = 'file'; input.setAttribute('accept', determineAllowedMimeTypes()); input.style='display:none'; input.addEventListener('change', function () { - if (typeof onChangeCallback === 'function') { - onChangeCallback(); - } // When files are selected, upload them - self.uploadFiles(this.files, context); + self.uploadFiles(this.files); document.body.removeChild(input); }); diff --git a/scripts/h5peditor-file.js b/scripts/h5peditor-file.js index 43f8d98a..92288119 100644 --- a/scripts/h5peditor-file.js +++ b/scripts/h5peditor-file.js @@ -59,9 +59,6 @@ ns.File = function (parent, field, params, setValue) { // Monitor upload progress self.on('uploadProgress', function (e) { - if (typeof self.handleUploadProgress === 'function') { - self.handleUploadProgress(Math.round(e.data.progress*100)); - } self.$file.children().html(ns.t('core', 'uploading') + ' ' + Math.round(e.data * 100) + ' %'); }); @@ -81,17 +78,18 @@ ns.File = function (parent, field, params, setValue) { // Make it possible for other widgets to process the result self.trigger('fileUploaded', result.data); - + self.setValue(self.field, self.params); for (var i = 0; i < self.changes.length; i++) { self.changes[i](self.params); } - self.addFile(); } catch (error) { - this.setErrorMessage(error); + self.$errors.append(ns.createError(error)); } + + self.addFile(); }); }; @@ -117,7 +115,6 @@ ns.File.prototype.appendTo = function ($wrapper) { var html = ns.createFieldMarkup(this.field, fileHtml, this.id); var $container = ns.$(html).appendTo($wrapper); - this.$container = $container; this.$copyrightButton = $container.find('.h5p-copyright-button'); this.$file = $container.find('.file'); this.$errors = $container.find('.h5p-errors'); diff --git a/scripts/h5peditor-image.js b/scripts/h5peditor-image.js index c7d71f04..9bc0d980 100644 --- a/scripts/h5peditor-image.js +++ b/scripts/h5peditor-image.js @@ -22,8 +22,6 @@ ns.widgets.image = function (parent, field, params, setValue) { this.setValue = setValue; this.library = parent.library + '/' + field.name; this.id = ns.getNextFieldId(field); - this.previousState = typeof params === 'undefined' ? this.STATE.NO_IMAGE : this.STATE.HAS_IMAGE; - this.previousParams = params; if (params !== undefined) { this.copyright = params.copyright; @@ -43,25 +41,13 @@ ns.widgets.image = function (parent, field, params, setValue) { this.confirmationDialog = new H5P.ConfirmationDialog({ headerText: H5PEditor.t('core', 'removeImage'), - dialogText: H5PEditor.t('core', 'confirmImageRemoval') - }).appendTo(document.body); + bodyText: H5PEditor.t('core', 'confirmImageRemoval') + }); this.confirmationDialog.on('confirmed', function () { - self.boxEl.classList.remove('h5p-dnd__box--has-image', 'h5p-dnd__box--is-inline'); - self.previousState = self.STATE.NO_IMAGE; self.removeImage(); }); - this.replaceCallback = () => {}; - this.confirmReplaceDialog = new H5P.ConfirmationDialog({ - headerText: H5PEditor.t('core', 'replaceImage'), - dialogText: H5PEditor.t('core', 'confirmReplaceImage') - }).appendTo(document.body); - - this.confirmReplaceDialog.on('confirmed', function () { - self.replaceCallback(); - }); - // When uploading starts self.on('upload', function () { // Hide edit image button @@ -70,11 +56,10 @@ ns.widgets.image = function (parent, field, params, setValue) { // When a new file has been uploaded self.on('fileUploaded', function (event) { - self.boxContainerEl.classList.remove('has-error'); // Uploaded new original image if (self.isOriginalImage) { delete self.params.originalImage; - self.editImagePopup.mime = self.params.mime; + self.editImagePopup.mime = self.params.mime } // Store width and height @@ -84,12 +69,6 @@ ns.widgets.image = function (parent, field, params, setValue) { // Show edit image button self.$editImage.removeClass('hidden'); self.isEditing = false; - - window.requestAnimationFrame(() => { - this.$container.get(0) - .querySelector('.h5p-editing-image-button') - .focus({focusVisible: true}); - }); }); }; @@ -104,41 +83,31 @@ ns.widgets.image.prototype.constructor = ns.widgets.image; ns.widgets.image.prototype.appendTo = function ($wrapper) { var self = this; - var htmlString = ` -
    -
    - ${this.getBaseMarkup()} -
    -
    -
    - -
    -
    - ` - - const markup = ns.createLabel(this.field, '', this.id) + ns.createDescription(this.field.description, this.id) + htmlString; - const wrapperClasses = ns.joinNonEmptyStrings(['field', `field-name-${this.field.name}`, this.field.type, ns.createImportance(this.field.importance), this.field.widget]); - const html = `
    ${markup}
    `; + var htmlString = '
    ' + + '
    ' + + ''; - this.$container = ns.$(html).appendTo($wrapper); - this.$imageDropContainer = this.$container.find('.h5p-dnd__container'); - this.boxEl = this.$container.find(".h5p-dnd__box").get(0); - this.boxContainerEl = this.$container.find('.h5p-dnd__container').get(0); - - this.ariaLiveEl = this.$container.find('.h5p-sr-only').get(0); + if (!this.field.disableCopyright) { + htmlString += ''; + } - this.addDragAndDropListeners(); + htmlString += '
    ' + + '
    ' + + '' + + '
    '; - this.$editImage = this.$container.find('.h5p-editing-image-button'); - this.$copyrightButton = this.$container.find('.h5p-copyright-button'); - this.$file = this.$container.find('.file'); + var html = ns.createFieldMarkup(this.field, htmlString, this.id); - this.$errors = this.$container.find('.h5p-errors'); + var $container = ns.$(html).appendTo($wrapper); + this.$item = $container; + this.$editImage = $container.find('.h5p-editing-image-button'); + this.$copyrightButton = $container.find('.h5p-copyright-button'); + this.$file = $container.find('.file'); + this.$errors = $container.find('.h5p-errors'); this.addFile(); - const $dialog = this.$container.find('.h5p-editor-dialog'); - - this.$container.parent().on('click', '.h5p-copyright-button, .h5p-editor-dialog .h5p-close', () => { + var $dialog = $container.find('.h5p-editor-dialog'); + $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () { $dialog.toggleClass('h5p-open'); return false; }); @@ -164,7 +133,6 @@ ns.widgets.image.prototype.appendTo = function ($wrapper) { const filenameparts = self.params.path.match(/([^\/]+)\.([^#]+)/); - self.removeImage(); // Upload new image self.upload(e.data, filenameparts[1] + '-edit.' + filenameparts[2]); }); @@ -182,7 +150,7 @@ ns.widgets.image.prototype.appendTo = function ($wrapper) { self.$editImage.removeClass('loading'); }); - this.$container.on('click', '.edit', function (event) { + $container.find('.h5p-editing-image-button').click(function (event) { if (self.params && self.params.path) { var imageSrc; if (!self.isEditing) { @@ -196,55 +164,6 @@ ns.widgets.image.prototype.appendTo = function ($wrapper) { } }); - this.$container.on('click', '.h5p-dnd__btn__upload', (event) => { - event.preventDefault(); - event.stopPropagation(); - this.isOriginalImage = true; - this.openFileSelector(); - }); - - document.addEventListener('paste', (e) => { - if (document.activeElement.closest('.h5p-dnd__box') === this.boxEl) { - if (e.clipboardData.files.length === 0) { - this.boxContainerEl.classList.add("has-error"); - this.$container.find('.h5p-errors').text(ns.t('core', 'onlyPasteImageFiles')); - this.setAriaLiveErrorMessage(ns.t('core', 'onlyPasteImageFiles')); - } else { - this.uploadOrReplaceImage(e.clipboardData.files); - } - } - }); - - this.boxEl.addEventListener('keydown', (e) => { - if (this.boxEl.classList.contains('h5p-dnd__box--has-image')) { - if ((e.code === 'Space' || e.code === 'Enter')) { - this.isOriginalImage = true; - this.openFileSelector({ - onChangeCallback: () => { - this.removeImage(); - } - }); - } - } - }); - - this.boxEl.addEventListener('click', (e) => { - e.preventDefault(); - const imageContainerEl = this.boxEl.querySelector('.h5p-dnd__img__container'); - - // Only trigger file selector when we have an image and the user is actually clicking on the - // image (not the frame around). - if (this.boxEl.classList.contains('h5p-dnd__box--has-image') - && e.target.closest('.h5p-dnd__img__container') === imageContainerEl) { - this.isOriginalImage = true; - this.openFileSelector({ - onChangeCallback: () => { - this.removeImage(); - } - }); - } - }); - ns.File.addCopyright(self, $dialog, function (field, value) { if (self.params !== undefined) { self.params.copyright = value; @@ -254,207 +173,6 @@ ns.widgets.image.prototype.appendTo = function ($wrapper) { }; -/** - * Displays the error message to the user. - * - * @param {string} message - */ -ns.widgets.image.prototype.setErrorMessage = function (message) { - if (this.previousState === this.STATE.HAS_IMAGE) { - this.params = this.previousParams; - this.addFile(); - } else { - this.removeImage(); - } - - this.setAriaLiveErrorMessage(message); - this.boxContainerEl.classList.add('has-error'); - this.$container.find('.h5p-errors').text(message); -}; - -ns.widgets.image.prototype.setAriaLiveErrorMessage = function (message) { - this.ariaLiveEl.innerText = message; - // Note: Should last long enough for the screen reader to read the text above. - setTimeout(() => { - this.ariaLiveEl.innerText = ""; - }, 5000); -}; - -/** - * Will either upload or replace (and upload) an image. - * - * @param {FileList} files - */ -ns.widgets.image.prototype.uploadOrReplaceImage = function (files) { - if (typeof this.params !== 'undefined') { - // Need to make a copy of the file since Firefox loses the reference to it during the confirm replace dialog. - const filesBackup = [new File([files[0]], files[0].name, { type: files[0].type })]; - this.replaceCallback = () => { - this.removeImage(); - this.uploadFile(filesBackup); - }; - this.previousState = this.STATE.HAS_IMAGE; - this.previousParams = this.params; - this.confirmReplaceDialog.show(this.$imageDropContainer.offset().top); - } else { - this.previousState = this.STATE.NO_IMAGE; - this.previousParams = null; - this.uploadFile(files); - } -}; - -/** - * Add drag and drop listeners to the appropriate DOM elements. - */ -ns.widgets.image.prototype.addDragAndDropListeners = function () { - const boundedHandleDnD = this.handleDragAndDrop.bind(this); - - this.dropBlockEl = this.boxEl.querySelector('.h5p-dnd__box__block'); - this.boxEl.addEventListener('dragenter', boundedHandleDnD); - this.dropBlockEl.addEventListener('dragover', boundedHandleDnD); - this.dropBlockEl.addEventListener('dragend', boundedHandleDnD); - this.dropBlockEl.addEventListener('dragleave', boundedHandleDnD); - this.dropBlockEl.addEventListener('drop', boundedHandleDnD); -}; - -/** - * Upload the first file in the FileList. - * @todo: handle multiple files? - * - * @param {FileList} files - */ -ns.widgets.image.prototype.uploadFile = function (files) { - if (files.length > 0) { - this.upload(files[0], files[0].name); - } -}; - -/** - * Handle drag and drop events. Will apply the correct css classes (styling) - * depending on event type and will handle uploading if the user drops the file. - * - * @param {Event} e - */ -ns.widgets.image.prototype.handleDragAndDrop = function (e) { - e.preventDefault(); - e.stopPropagation(); - - const container = e.target.closest('.h5p-dnd__container'); - const boxBlock = container.querySelector('.h5p-dnd__box__block'); - - if (e.type === 'dragenter') { - this.boxEl.classList.add('h5p-dnd__box--is-dragging') - } - else if (e.type === 'dragend' || (e.type === 'dragleave' && boxBlock === e.target)) { - this.boxEl.classList.remove('h5p-dnd__box--is-dragging'); - } - else if (e.type === 'drop') { - this.boxEl.classList.remove('h5p-dnd__box--is-dragging'); - this.uploadOrReplaceImage(e.dataTransfer.files); - } -}; - -/** - * Generates the HTML for the NO_IMAGE state. - * - * @returns string The HTML for the NO_IMAGE state - */ -ns.widgets.image.prototype.getBaseMarkup = function () { - const copyPasteString = `${ns.t('core', 'ctrlKey')}${ns.t('core', 'commandKey')} + ${ns.t('core', 'pasteKey')}`; - const dragCopyPasteString = ns.t('core', 'dragAndDropAndPasteImage', { ':keyCombination': copyPasteString }); - return ` -
    -
    -
    - -
    - -
    -
    - ${dragCopyPasteString} -
    -
    -
    - -
    -
    - ${ns.t('core', 'dropImage')} -
    -
    - ` -}; - -/** - * Generates the HTML for the UPLOADING state. - * @returns string The HTML for the UPLOADING state - */ -ns.widgets.image.prototype.getUploadingMarkup = function () { - return ` -
    -
    -
    -
    -
    - `; -}; - -/** - * Generates the HTML for the HAS_IMAGE state. - * @returns string The HTML for the HAS_IMAGE state - */ -ns.widgets.image.prototype.getUploadedMarkup = function () { - const source = H5P.getPath(this.params.path, H5PEditor.contentId); - const altText = (this.field.label === undefined ? '' : this.field.label); - - return ` -
    -
    -
    -
    - ${altText} -
    -
    -
    -
    - ${ns.t('core', 'dragAndDropAndPasteReplaceImage')} -
    -
    - `; -}; - -/** - * Generates the HTML for the HAS_IMAGE state. This is an extra function needed - * as this HTML will be placed in a different place than the HTML from getUploadedMarkup(). - * @returns string The HTML for the HAS_IMAGE state - */ -ns.widgets.image.prototype.getImageActionMarkup = function () { - return ` -
    -
    - - - -
    - `; -}; - -/** - * - * @param {number} progress 0-100 the progress of uploading the image - */ -ns.widgets.image.prototype.handleUploadProgress = function (progress) { - // @todo: want to use progress for something? - - // Since this function is called multiple times during upload we only want to trigger - // the render of the uploading markup once. - if (this.boxContainerEl.querySelector('.h5p-loader__wrapper') === null) { - this.setAriaLiveErrorMessage(ns.t('core', 'uploadingImage')); - - this.boxEl.innerHTML = this.getUploadingMarkup(); - this.boxEl.classList.add('h5p-dnd__box--is-uploading'); - this.boxEl.classList.remove('h5p-dnd__box--is-dragging') - } -}; /** * Sync copyright. @@ -463,40 +181,80 @@ ns.widgets.image.prototype.setCopyright = function (value) { this.copyright = this.params.copyright = value; }; + /** * Creates thumbnail HTML and actions. * - * @returns {boolean} True if file was added + * @returns {boolean} True if file was added, false if file was removed */ ns.widgets.image.prototype.addFile = function () { + var that = this; + if (this.params === undefined) { + + // No image look + let html = '' + + '
    ' + ns.t('core', 'add') + '
    ' + + '
    ' + + this.$file + .html(html) + .children('.add') + .click(function () { + that.isOriginalImage = true; + that.openFileSelector(); + return false; + }); + + // Remove edit image button + this.$editImage.addClass('hidden'); + this.$copyrightButton.addClass('hidden'); + this.isEditing = false; + return false; } - this.boxEl.classList.add('h5p-dnd__box--is-inline','h5p-dnd__box--has-image') - this.boxEl.classList.remove('h5p-dnd__box--is-uploading'); - this.boxEl.innerHTML = this.getUploadedMarkup(); - this.boxEl.setAttribute('role', 'button'); - // Only aria-label is supported by NVDA (not aria-describedby which could be an alternative). - const altText = (this.field.label === undefined ? '' : this.field.label); - const ariaLabel = `${altText ?? ns.t('core', 'image')}. ${ns.t('core', 'dragAndDropAndPasteReplaceImage')}`; - this.boxEl.setAttribute('aria-label', ariaLabel); - const actionsContainerEl = document.createElement('div'); - actionsContainerEl.classList.add('h5p-image-action-container'); - actionsContainerEl.innerHTML = this.getImageActionMarkup(); - - this.boxContainerEl.insertBefore(actionsContainerEl, this.boxEl.nextElementSibling); - - this.boxContainerEl.querySelector('.delete').addEventListener('click', (e) => { - e.stopPropagation(); - this.confirmationDialog.show(this.$imageDropContainer.offset().top); + var source = H5P.getPath(this.params.path, H5PEditor.contentId); + var altText = (this.field.label === undefined ? '' : this.field.label); + var fileHtmlString = '' + + ''; + + this.$file.html(fileHtmlString) + .children(':eq(0)') + .click(function () { + that.isOriginalImage = true; + that.openFileSelector(); + return false; + }) + .children('img') + .attr('src', source) + .end() + .next() + .click(function () { + that.confirmRemovalDialog.show(that.$file.offset().top); + return false; + }); + + var $img = this.$file.find('img'); + $img.one('load', function () { + // Make editor resize + $img.addClass('loaded'); }); - this.cleanUp(); - this.addDragAndDropListeners(); + // Uploading original image + that.$editImage.removeClass('hidden'); + that.$copyrightButton.removeClass('hidden'); // Notify listeners that image was changed to params - this.trigger('changedImage', this.params); + that.trigger('changedImage', this.params); return true; }; @@ -505,24 +263,13 @@ ns.widgets.image.prototype.addFile = function () { * Remove image */ ns.widgets.image.prototype.removeImage = function () { - this.boxEl.classList.remove('h5p-dnd__box--is-uploading'); - this.boxContainerEl.classList.remove('has-error'); - this.cleanUp(); + // Notify listeners that we removed image with params this.trigger('removedImage', this.params); - const actionsContainerEl = this.$container.find('.h5p-image-action-container').get(0); - if (actionsContainerEl) { - actionsContainerEl.remove(); - } - delete this.params; this.setValue(this.field); - - this.boxEl.removeAttribute('role'); - this.boxEl.innerHTML = this.getBaseMarkup(); - - this.addDragAndDropListeners(); + this.addFile(); for (var i = 0; i < this.changes.length; i++) { this.changes[i](); @@ -544,16 +291,6 @@ ns.widgets.image.prototype.remove = function () { this.$file.parent().remove(); }; -ns.widgets.image.prototype.cleanUp = function () { - const boundedHandleDnD = this.handleDragAndDrop.bind(this); - - this.boxEl.removeEventListener('dragenter', boundedHandleDnD); - this.dropBlockEl?.removeEventListener('dragover', boundedHandleDnD); - this.dropBlockEl?.removeEventListener('dragend', boundedHandleDnD); - this.dropBlockEl?.removeEventListener('dragleave', boundedHandleDnD); - this.dropBlockEl?.removeEventListener('drop', boundedHandleDnD); -} - /** * Collect functions to execute once the tree is complete. * @@ -567,21 +304,3 @@ ns.widgets.image.prototype.ready = function (ready) { ready(); } }; - -/** - * Lazy load images - */ -ns.widgets.imageObserver = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.src = entry.target.dataset.src; - ns.widgets.imageObserver.unobserve(entry.target); - } - }); -}); - -ns.widgets.image.prototype.STATE = { - NO_IMAGE: 'NO_IMAGE', - UPLOADING: 'UPLOADING', - HAS_IMAGE: 'HAS_IMAGE' -}; diff --git a/styles/css/application.css b/styles/css/application.css index c9af577d..e7dfa6e4 100644 --- a/styles/css/application.css +++ b/styles/css/application.css @@ -1 +1 @@ -ul.list-unstyled{list-style:none;padding-left:0;margin:0}.field{margin:20px 0;font-size:16px;padding:0}.field:first-child{margin-top:0}.field:last-child{margin-bottom:0}.tree>.field.group:last-child{margin-bottom:0}.fields>.field.group{margin:10px 0}.fields>.field.group:first-child{margin-top:0}.fields>.field.group:last-child{margin-bottom:0}.field.boolean .h5peditor-label{display:inline}.field .library{border:0}.field.importance-high>.h5peditor-label-wrapper>.h5peditor-label{font-size:18px;color:#356593}.field .h5p-dialog-anchor{position:relative;width:100%}.common-fields-library-wrapper{margin:20px 0;border:none;margin:0;padding:0}.common-fields-library-wrapper:first-child{margin-top:0}.common-fields-library-wrapper:last-child{margin-bottom:0}.common-fields-library-wrapper .common-field-legend{display:none}.common>.h5peditor-label,.h5p-li>.list-item-title-bar,.group>.title{visibility:inherit;cursor:pointer}.h5p-li>.list-item-title-bar.importance-high,.group.importance-high>.title{background:#2579c6;border:1px solid #1f67a8;height:42px}.h5p-li>.list-item-title-bar.importance-high>.title,.h5p-li>.list-item-title-bar.importance-high>.h5peditor-label,.group.importance-high>.title{font-size:16px;font-weight:600;line-height:42px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5p-li>.list-item-title-bar,.group>.title{background:#747275;border:1px solid #636164;height:38px}.h5p-li>.list-item-title-bar.importance-medium>.h5peditor-label,.h5p-li>.list-item-title-bar>.h5peditor-label,.group>.title{font-size:16px;font-weight:600;color:#fff;line-height:38px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.common>.h5peditor-label,.h5p-li>.list-item-title-bar.importance-low,.group.importance-low>.title{background:#f5f5f5;height:38px;border:1px solid #d0d0d1}.common>.h5peditor-label,.h5p-li>.list-item-title-bar.importance-low>.title,.h5p-li>.list-item-title-bar.importance-low>.h5peditor-label,.group.importance-low>.title{font-size:16px;font-weight:400;color:#212121;line-height:38px}.group{border:none}.group>.title{padding:0 10px;outline:none}.group>.content{position:relative;display:none;margin:0;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff}.group.importance-high>.title{color:#fff}.group.importance-low>.title{color:#212121}.group.importance-low>.title:focus:before{outline:1px dashed}.common .content,.content .content{background-color:#fcfcfc}.common .content .content,.content .content .content{background-color:#fff}.common .content .content .content,.content .content .content .content{background-color:#fcfcfc}.common .content .content .content .content,.content .content .content .content .content{background-color:#fff}.common .content .content .content .content .content,.content .content .content .content .content .content{background-color:#fcfcfc}.common .content .content .content .content .content .content,.content .content .content .content .content .content .content{background-color:#fff}.h5p-li>.list-item-title-bar{color:#fff}.h5p-li>.list-item-title-bar>.h5peditor-label{overflow:hidden;margin:0 54px 0 0;padding:0 10px;white-space:nowrap;line-height:38px;outline:none;text-overflow:ellipsis}.h5p-li>.list-item-title-bar>.list-actions{height:100%;float:right;position:relative}.h5p-li>.list-item-title-bar .remove{cursor:pointer;width:1.25em;height:38px;font-size:1.75em;display:inline-block}.h5p-li>.list-item-title-bar .remove:hover{opacity:1;text-decoration:none}.h5p-li>.list-item-title-bar .remove:after{font-family:"H5P";content:"";opacity:.7;display:inline-block;line-height:38px}.h5p-li>.list-item-title-bar .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar .order-group{text-align:center;float:right;background:#636164;font-size:16px;cursor:pointer}.h5p-li>.list-item-title-bar .order-up,.h5p-li>.list-item-title-bar .order-down{width:19px;height:19px;line-height:19px}.h5p-li>.list-item-title-bar .order-up:hover,.h5p-li>.list-item-title-bar .order-down:hover{background:#636164}.h5p-li>.list-item-title-bar .order-up:after,.h5p-li>.list-item-title-bar .order-down:after{font-family:"H5P";content:"";display:inline-block}.h5p-li>.list-item-title-bar .order-down:after{content:""}.h5p-li>.list-item-title-bar.importance-high>.title{border:none;margin:0 74px 0 0}.h5p-li>.list-item-title-bar.importance-high .remove{height:42px;line-height:42px;font-size:40px}.h5p-li>.list-item-title-bar.importance-high .remove:after{line-height:42px;opacity:.7}.h5p-li>.list-item-title-bar.importance-high .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar.importance-high .order-group{background:#1f67a8;font-size:18px}.h5p-li>.list-item-title-bar.importance-high .order-up,.h5p-li>.list-item-title-bar.importance-high .order-down{width:21px;height:21px;line-height:21px}.h5p-li>.list-item-title-bar.importance-high .order-up:hover,.h5p-li>.list-item-title-bar.importance-high .order-down:hover{background:#1f67a8}.h5p-li>.list-item-title-bar.importance-low>.title{border:none;margin:0 54px 0 0}.h5p-li>.list-item-title-bar.importance-low>.title:before{color:#212121}.h5p-li>.list-item-title-bar.importance-low>.title:focus:before{outline:1px dashed #212121}.h5p-li>.list-item-title-bar.importance-low .remove{height:38px;line-height:38px;font-size:30px}.h5p-li>.list-item-title-bar.importance-low .remove:after{line-height:38px}.h5p-li>.list-item-title-bar.importance-low .remove:after{color:#212121;opacity:.7}.h5p-li>.list-item-title-bar.importance-low .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar.importance-low .order-up,.h5p-li>.list-item-title-bar.importance-low .order-down{width:19px;height:19px;background:#d0d0d1;font-size:16px;line-height:19px}.h5p-li>.list-item-title-bar.importance-low .order-up:hover,.h5p-li>.list-item-title-bar.importance-low .order-down:hover{background:#deddde}.h5p-li>.list-item-title-bar.importance-low .order-up:after,.h5p-li>.list-item-title-bar.importance-low .order-down:after{color:#212121}.group.expanded>.content,.listgroup.expanded>.content{display:block}.listgroup>.list-item-title-bar>.h5peditor-label{cursor:pointer}.list-item-title-bar>.title:before,.group>.title:before{content:"";font-family:"H5P";margin-right:5px}.list-item-title-bar>.title:focus:before,.group>.title:focus:before{outline:1px dashed #fff}.listgroup.expanded>.list-item-title-bar>.h5peditor-label:before,.expanded>.title:before{content:""}.listgroup>.group.field{margin:0;padding:0;min-width:0}.content{display:block;margin:0;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff}.common{margin-top:20px}.common>.h5peditor-label{margin:0;padding:0 10px;cursor:pointer;font-size:1em}.common>.h5peditor-label>.icon:before{content:"";font-family:"H5P";margin-right:5px}.common>.h5peditor-label:hover>.icon{opacity:1}.common>.h5peditor-label:focus{outline:none}.common>.h5peditor-label:focus>.icon:before{outline:1px dashed}.common>.fields{min-height:2em;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff;position:relative}.common>.fields>.desc{margin:0;font-size:.875em;color:#666;float:left}.common>.fields p:first-child{margin-bottom:20px}.common.collapsed>.h5peditor-label>.icon:before{content:""}.common.collapsed>.fields{display:none}.common.hidden{display:none}.h5peditor-button[aria-label]:before{content:attr(aria-label);visibility:hidden;position:absolute;top:115%;right:-10%;z-index:2;padding:.25em .75em;background:#212121;color:#fff;white-space:nowrap;font-size:14px;line-height:1.5;box-shadow:0 0 .5em #858585}.h5peditor-button[aria-label]:hover:before{visibility:visible}.h5peditor-button[aria-label][aria-disabled=true]:before{display:none}.h5peditor .h5p-delete-image-button,.h5peditor .h5p-editing-image-button{background:linear-gradient(to bottom, #fff 0, #f2f2f2 100%);font-size:14px;color:#212121;line-height:28px;padding-right:20px;margin-right:.5em;height:30px;padding-left:0;font-weight:normal}.h5peditor .h5p-delete-image-button:hover:not([disabled]),.h5peditor .h5p-editing-image-button:hover:not([disabled]){background:linear-gradient(to bottom, #fff 0, #d0d0d1 100%);border-color:#999}.h5peditor .h5p-delete-image-button:before,.h5peditor .h5p-editing-image-button:before{font-family:"H5P";color:#666;padding-right:.3em;padding-left:.45em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor .h5p-delete-image-button:before{content:""}.h5peditor .h5p-editing-image-button:before{content:""}.h5peditor .h5p-delete-image-button.loading:before,.h5peditor .h5p-editing-image-button.loading:before{content:""}.h5peditor .h5p-delete-image-button.hidden,.h5peditor .h5p-editing-image-button.hidden,.h5peditor .h5p-copyright-button.hidden{display:none !important}.h5peditor .ui-dialog .h5p-delete-image-button,.h5peditor .ui-dialog .h5p-editing-image-button,.h5peditor .ui-dialog .h5p-copyright-button{padding-left:.5em}body.h5p-editor-image-popup{position:relative}.h5p-editing-image-popup-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);padding:3em 1em;box-sizing:border-box;z-index:102}#darkroom-icons{top:0;left:0}.h5p-editing-image-popup-background.hidden{display:none}.h5p-editing-image-popup{display:inline-block;position:relative;top:0;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.h5p-editing-image-header{padding:1em .75em}.h5p-editing-image{max-height:100%;max-width:100%}.h5p-editing-image.hidden{display:none}.h5p-editing-image-popup .darkroom-toolbar{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:0}.h5p-editing-image-popup .darkroom-toolbar:before{content:initial}.h5p-editing-image-popup .darkroom-image-container{padding:32px 2em}.h5p-editing-image-popup .darkroom-image-container .canvas-container{box-shadow:0 0 8px 3px rgba(0,0,0,.6);margin:auto}.h5p-editing-image-header-title{display:inline-block;font-size:1.25em}.h5p-editing-image-header-buttons{display:inline-block;float:right}.h5p-editing-image-loading{padding:1em}.h5p-editing-image-loading.hidden{display:none}.h5p-editing-image-editing-container{background:#666}.h5p-editing-image-header-buttons button{padding:.5em 1.75em;margin:0 0 0 1em;border:1px solid #ccc;border-radius:.25em;color:#333;cursor:pointer;background:#f2f2f2;background:-webkit-linear-gradient(top, #fff 0, #f2f2f2 100%);background:-ms-linear-gradient(top, #fff 0, #f2f2f2 100%)}.h5p-editing-image-header-buttons button:hover{background:#ededed}.h5p-editing-image-header-buttons .h5p-done{color:#fff;border-color:#20588f;background:#3673b5;background:-webkit-linear-gradient(top, #5A94D3 0, #3673B5 100%);background:-ms-linear-gradient(top, #5A94D3 0, #3673B5 100%)}.h5p-editing-image-header-buttons .h5p-done:hover{background:#3275bc;background:-webkit-linear-gradient(top, #3275bc 0, #285585 100%);background:-ms-linear-gradient(top, #3275bc 0, #285585 100%)}.h5p-editing-image-header-buttons .h5p-remove{background:none;border:none;color:#a00;padding-right:0;padding-left:0;border-radius:0}.h5p-editing-image-header-buttons .h5p-remove:hover{background:none;color:#e40000}.h5p-dnd__container{clear:both;margin-top:.5rem}.h5p-dnd__container.has-error .h5p-errors,.h5p-dnd__box.has-error .h5p-errors,.video-url-error-container.has-error .h5p-errors{margin-top:1em;display:flex;align-items:center}.h5p-dnd__container.has-error .h5p-errors:before,.h5p-dnd__box.has-error .h5p-errors:before,.video-url-error-container.has-error .h5p-errors:before{font-family:"H5P";content:"";font-size:1.5em;vertical-align:middle}.h5p-dnd__container .h5p-errors,.h5p-dnd__box .h5p-errors,.video-url-error-container .h5p-errors{display:none}.h5p-dnd__box{display:flex;flex-flow:row;align-items:stretch;justify-content:center;border:solid 2px #d0cfd4;border-radius:6px;flex:1;min-height:150px;position:relative;background:none;font-size:14px}.h5p-dnd__box--is-dashed{border:dashed 2px #d0cfd4}.h5p-dnd__box--is-inline{display:inline-flex}.h5p-dnd__box--has-image{flex-flow:column;width:min-content;min-height:auto;min-width:140px}.h5p-dnd__box:focus-visible{outline:none}.h5p-dnd__box:not(.h5p-dnd__box--is-uploading):hover{border:dashed 2px #acacac}.h5p-dnd__box--has-image:not(.h5p-dnd__box--is-uploading):hover,.h5p-dnd__box.h5p-dnd__box--is-focused:not(.h5p-dnd__box--is-uploading),.h5p-dnd__box:not(.h5p-dnd__box--is-uploading):focus,.h5p-dnd__box.h5p-dnd__box--is-dragging:not(.h5p-dnd__box--is-uploading){border:solid 2px #1670df}.h5p-dnd__box:focus:not(.h5p-dnd__box--has-image):not(.h5p-dnd__box--is-uploading):not(.h5p-dnd__box--is-inline) .h5p-dnd__column--is-highlighted{background:#fff}.h5p-dnd__box:focus:not(.h5p-dnd__box--has-image):not(.h5p-dnd__box--is-uploading):not(.h5p-dnd__box--is-inline) .h5p-dnd__column:not(.h5p-dnd__column--is-highlighted):not(.h5p-dnd__column--tight){background:#f6faff}.h5p-dnd__box__block{position:absolute;top:0;left:0;right:0;bottom:0;display:none;z-index:2}.h5p-dnd__box--is-dragging .h5p-dnd__box__block{display:block}.h5p-dnd__column{margin:10px;display:flex;flex-flow:column;align-items:center;justify-content:center;border-radius:6px;flex:1}.h5p-dnd__column--is-highlighted{background:#f6faff}.h5p-dnd__column--is-fixed{flex:0 0 150px}.h5p-dnd__column--is-full-width{flex:1}.h5p-dnd__column--show-when-focus{display:none}.h5p-dnd__column--is-padded{padding:0 20px}.h5p-dnd__column--is-padded-small{padding:0 10px}.h5p-dnd__column.h5p-dnd__column--is-padded-small{margin:0}.h5p-dnd__box--is-dragging .h5p-dnd__column--hide-when-focus{display:none}.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--is-dragging .h5p-dnd__column--show-when-focus,.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-image:focus .h5p-dnd__column--show-when-focus{display:flex}.h5p-dnd__column--tight{max-height:130px}.h5p-dnd__column--tight:has(.h5p-dnd__video-container){margin-right:0}.h5p-dnd__column__drag-text{margin-top:-5px}.h5p-dnd__btn{display:flex;align-items:center;justify-content:center;padding:8px 10px;gap:5px;border-radius:4px;border:1px solid #1f67a8;background:#2579c6;font-family:"Open Sans",sans-serif;font-size:1em;font-weight:600;color:#fff;cursor:pointer}.h5p-dnd__btn:focus{outline:solid 2px #1f67a8;outline-offset:2px}.h5p-dnd__btn:before{font-family:"H5P";content:"";vertical-align:middle;font-size:1.5em;line-height:.9;font-weight:400}.h5p-dnd__btn:hover{background:#1f67a8}.h5p-dnd__btn:focus{outline:solid 2px #1f67a8;outline-offset:2px}div:has(>.h5p-dnd__badge),div:has(>.h5p-dnd-nowrap),.h5p-dnd__column--is-padded:has(.h5p-dnd__badge){line-height:1.7}.h5p-dnd__badge{background:#e7e9ee;color:#434446;text-transform:uppercase;font-weight:400;font-size:12px;font-family:"Arial Black";border-radius:6px;padding:3px 8px;display:inline-flex;line-height:1.4}.h5p-dnd__badge .h5p-dnd__badge__separator{border-left:solid 2px rgba(67,68,70,.25);margin:3px 6px;overflow:hidden;display:inline-block;overflow:hidden;top:0;left:0;right:0;bottom:0;position:relative}.h5p-dnd__img{max-width:175px;max-height:120px;min-width:40px;min-height:40px;border-radius:6px;display:block}.h5p-dnd__img__container{position:relative;min-width:100%;display:flex;align-items:center;justify-content:center}.h5p-dnd__img__overlay{position:absolute;top:0;left:0;right:0;bottom:0;border-radius:6px;background:#1670df;opacity:.9;color:#fff;display:none;cursor:pointer}.h5p-dnd__img__overlay:before{font-family:"H5P";content:"";font-size:2.5em}.h5p-dnd__img__container:hover .h5p-dnd__img__overlay,.h5p-dnd__box:focus:not(.h5p-dnd__box--is-uploading) .h5p-dnd__img__overlay,.h5p-dnd__box.h5p-dnd__box--is-dragging:not(.h5p-dnd__box--is-uploading) .h5p-dnd__img__overlay{display:flex;align-items:center;justify-content:center}.h5p-dnd__text{font-family:"Open Sans",sans-serif;font-size:14px;text-align:center;color:#454347}.h5p-dnd__upload-image-svg,.h5p-dnd__upload-audio-svg,.h5p-dnd__upload-video-svg{width:60px;height:43px;margin-bottom:13px}.h5p-dnd__upload-image-svg{background:url(./fonts/upload-image.svg) no-repeat}.h5p-dnd__upload-video-svg{background:url(./fonts/upload-video.svg) no-repeat}.h5p-dnd__upload-audio-svg{background:url(./fonts/upload-audio.svg) no-repeat}.h5p-dnd__play-icon-svg{background:url(./fonts/play-icon.svg) no-repeat;width:28px;height:29px}.h5p-dnd__drop-text{display:flex;flex-flow:column;align-items:center;justify-content:center;font-size:.9em}.h5p-dnd__drop-text:before{font-size:3.9em;font-family:"H5P";content:"";color:#3b435a;line-height:.9;margin-bottom:10px}.input-container{display:flex;align-items:center;border:solid 1px #d0d0d1;padding:3px;width:100%;border-radius:2px;background:#fff;gap:5px}.input-container:has(.input-video:focus){border:solid 1px #1570df}.h5p-dnd__av-container .h5p-dnd__box__url.h5p-dnd__box__video-paste .input-container input[type=text].input-video{border:0;flex:1;outline:0;font-size:1em;box-shadow:none}.h5p-dnd__av-container .h5p-dnd__box__url.h5p-dnd__box__video-paste .input-container input[type=text].input-video:focus{background:none;box-shadow:none}.video-url-error-container{display:flex;flex-direction:row;align-items:center;justify-content:center;margin-bottom:5px;width:100%}.video-url-error-container.hidden{display:none}.text-muted{color:#454347;text-align:center;font-family:"Open Sans",sans-serif;font-size:.85em;font-weight:400;line-height:normal}.text-center{text-align:center}.h5p-dnd__box__title{color:#454347;text-align:center;font-size:16px;font-weight:600;font-family:"Open Sans",sans-serif}.h5p-dnd__box.h5p-dnd__box__url,.h5p-dnd__box__url{display:flex;flex-flow:column;align-items:center;justify-content:center;color:#454347;font-size:14px;border-radius:6px;flex:1;min-height:169px;position:relative;background:none;padding:10px;gap:7px;min-width:271px;box-sizing:border-box}.h5p-dnd__box.h5p-dnd__box__url:focus:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading),.h5p-dnd__box.h5p-dnd__box__url:focus-within:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading),.h5p-dnd__box__url:focus:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading),.h5p-dnd__box__url:focus-within:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading){background:#f6faff;border:solid 2px #1570df}.h5p-dnd__box.h5p-dnd__box__url:focus-visible:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-uploading),.h5p-dnd__box__url:focus-visible:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-uploading){outline:0;border:solid 2px #1570df}.h5p-dnd__box.h5p-dnd__box__url.h5p-dnd__box__video-paste,.h5p-dnd__box__url.h5p-dnd__box__video-paste{border:solid 1px #d0cfd4;padding:20px}.h5p-dnd__box.h5p-dnd__box__action{flex:2}.h5p-dnd__box.h5p-dnd__box__video-paste{flex:1 0 fit-content}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url{height:154px;min-height:110px;min-width:260px}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__upload-audio-svg,.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__upload-video-svg{display:none}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url.h5p-dnd__box.has-error{height:auto}.h5p-dnd__box--is-dashed:not(.h5p-dnd__box--is-uploading):hover{border:dashed 2px #acacac}.h5p-dnd__row{display:flex;flex:1;align-items:center;justify-content:center;width:100%}.h5p-bold{font-weight:700}.divider{border-top:solid 1px #d0cfd4;width:35%;margin:0 10px}.h5p-dnd__box--has-video{flex-flow:column;width:100%}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__box--has-video:focus .h5p-dnd__video-container{background:#1670df}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__box--has-video:focus .h5p-dnd__video-container:before{font-family:"H5P";content:"";font-size:2.5em}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__box--has-video:focus .h5p-dnd__video-container .h5p-dnd__video-overlay{display:none}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__video-container{cursor:pointer}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__video-container:hover{background:#1670df}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__video-container:hover:before{font-family:"H5P";content:"";font-size:2.5em}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) .h5p-dnd__video-container:hover .h5p-dnd__video-overlay{display:none}.h5p-dnd__videobox-wrapper--is-provider .h5p-dnd__box--has-video:focus,.h5p-dnd__videobox-wrapper--is-provider .h5p-dnd__box--has-video:hover{border:solid 2px #d0cfd4}.h5p-dnd__videobox-wrapper--has-label{min-width:400px;flex:1}.h5p-dnd__video-container{width:100%;height:100%;min-height:130px;background:#1b1b1b;border-radius:6px;overflow:hidden;display:flex;align-items:center;justify-content:center;color:#fff}.h5p-dnd__video-overlay{display:flex;flex-flow:column;justify-content:center;align-items:center;gap:10px}.h5p-dnd__box--has-video.h5p-dnd__box--is-dragging .h5p-dnd__video-container{background:#1670df}.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-image:focus .h5p-dnd__column--show-when-focus,.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-video:focus .h5p-dnd__column--show-when-focus{display:flex}.h5p-dnd__av-container{display:flex;align-items:flex-start;gap:11px;flex-flow:row wrap;margin-bottom:20px;container:h5p-dnd__av-container/inline-size}.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider)~.h5p-dnd__box__video-paste,.h5p-dnd__box--is-dragging+.h5p-dnd__box__video-paste{display:none}.h5p-dnd__videobox-wrapper--is-provider+.h5p-dnd__box__url{display:none}.h5p-dnd__box--is-uploading+.h5p-dnd__box__video-paste{display:none}.h5p-dnd__videobox-wrapper{width:195px;text-align:center}.h5p-dnd__video-quality{text-align:left;height:130px;display:flex;flex-flow:column;justify-content:space-between;box-sizing:border-box;border-left:solid 1px #ccc;padding:0 10px}.h5p-dnd__video-quality-title{font-size:14px}.h5p-dnd__video-quality-description{font-size:11px;line-height:normal;display:inline-block;font-family:"Open Sans",sans-serif}.h5p-dnd__box__url.h5p-dnd__box--is-dragging .h5p-dnd__column.h5p-dnd__column--is-highlighted{width:100%;margin:0}.h5p-dnd__btn__insert-url{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;max-width:150px}.h5p-dnd__btn__insert-url:before{content:""}@media(max-width: 525px){.h5p-dnd__box{flex-flow:column}}.h5p-dnd__box__url{container:h5p-dnd__box__url/inline-size}.h5p-dnd__row--when-wide,.h5p-dnd__column--when-wide{display:none}.h5p-dnd__row:has(.input-container),.h5p-dnd__row:has(.video-url-error-container){flex:0}.h5p-dnd__column--no-margin,.h5p-dnd__column--no-margin.h5p-dnd__column{margin:0}@container h5p-dnd__av-container (min-width: 760px){.h5p-dnd__box.h5p-dnd__box__action{flex-flow:row;align-items:stretch;padding:0}.h5p-dnd__row--when-wide,.h5p-dnd__column--when-wide{display:flex}.h5p-dnd__row--when-small,.h5p-dnd__column--when-small{display:none}.h5p-dnd__box.h5p-dnd__box__action,.h5p-dnd__box__action{background:#fff}}@container h5p-dnd__av-container (max-width: 760px){.h5p-dnd__badge,.h5p-dnd__column,.h5p-dnd__row{font-size:.85em}.text-muted{font-size:1em}.h5p-dnd__btn__insert-url{max-width:120px}}@container h5p-dnd__av-container (max-width: 250px){.h5p-dnd__box__url,.h5p-dnd__box.h5p-dnd__box__url,.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url{min-width:0;flex-basis:100%}.h5p-dnd__btn__insert-url{max-width:90px}.h5p-dnd__box__url.h5p-dnd__box__video-paste{padding:10px}}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url.h5p-dnd__box.h5p-dnd__box__action{flex-flow:column;align-items:center;padding:10px}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__row--when-wide,.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__column--when-wide{display:none}.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__row--when-small,.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url .h5p-dnd__column--when-small{display:flex}.h5p-dnd-nowrap{white-space:nowrap}.h5p-vtab-wrapper>.h5p-vtab-forms .h5p-remove:after{color:#d0d0d1}html,body{margin:0;padding:0;color:#212121;font-family:"Open Sans",sans-serif;max-width:960px;position:relative}a{text-decoration:none}.offsite{left:-9999px;opacity:0;position:absolute;top:0}.h5peditor{font-size:16px}.h5peditor .h5p-more-libraries{font-size:.875em;margin-top:.4em}.h5peditor .h5peditor-single>.field.library{border:0;padding:0}.h5peditor .cke_dialog_background_cover{width:100% !important;height:100% !important}.h5peditor .errors p,.h5peditor .h5p-errors{color:#da0001;white-space:normal}.h5peditor textarea{resize:vertical}.h5peditor .h5p-editor-flex-wrapper{display:flex;flex-direction:row}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse{align-items:flex-end;margin-bottom:.5rem;width:100%}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse.has-label{justify-content:space-between;gap:.5rem}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse:not(.has-label){justify-content:flex-end}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse{align-items:center;background-color:#228380;background-image:none;border:3px solid #228380;border-radius:.4rem;box-sizing:border-box;display:grid;font-size:.815rem;font-weight:bold;grid-template-columns:auto 1fr;height:2.6rem;line-height:1.2rem;margin:0;padding:0 .6rem 0 .2rem}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse .label{white-space:nowrap}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.collapsed .icon::before{content:"";font-family:"H5P";font-size:1.2rem;font-weight:normal;padding:0 .2rem 0 .2rem;vertical-align:middle}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse:not(.collapsed) .icon::before{content:"";font-family:"H5P";font-size:1.2rem;font-weight:normal;padding:0 .2rem 0 .2rem;vertical-align:middle}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse:hover:not([disabled]){background-color:#228380;background-image:none;border:3px solid #4dc2bf}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.no-label{grid-template-columns:auto;padding:0 .2rem;width:auto}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.no-label .label{display:none}.h5peditor .h5peditor-label-wrapper{display:flex;flex-direction:row}.h5peditor .has-important-description .h5peditor-field-description{display:none}.h5peditor .has-important-description .h5peditor-label-wrapper{float:left}.h5peditor .important-description-visible .h5peditor-field-important-description{display:block}.h5peditor .important-description-visible .h5peditor-label-wrapper{float:none}.h5peditor .important-description-visible .important-description-show{display:none}.h5peditor textarea,.h5peditor .h5peditor-text,.h5peditor .ckeditor{box-shadow:inset 0px 0px 5px rgba(0,0,0,.12);box-sizing:border-box;margin:0;padding:10px;min-height:40px;border:1px solid #d0d0d1;background:#fff;outline:none;font-size:16px;word-wrap:break-word}.h5peditor textarea a,.h5peditor .h5peditor-text a,.h5peditor .ckeditor a{text-decoration:underline}.h5peditor textarea figure.table,.h5peditor .h5peditor-text figure.table,.h5peditor .ckeditor figure.table{display:table;table-layout:fixed;margin:0 auto;padding:0;float:left}.h5peditor textarea figure.table table,.h5peditor .h5peditor-text figure.table table,.h5peditor .ckeditor figure.table table{border-collapse:collapse;height:100%;width:100%;border-spacing:0;border-width:1px;border-color:#494949}.h5peditor textarea figure.table table td,.h5peditor textarea figure.table table th,.h5peditor .h5peditor-text figure.table table td,.h5peditor .h5peditor-text figure.table table th,.h5peditor .ckeditor figure.table table td,.h5peditor .ckeditor figure.table table th{padding:1px;border-color:#494949;border-bottom-style:solid}.h5peditor textarea figure.table table td,.h5peditor .h5peditor-text figure.table table td,.h5peditor .ckeditor figure.table table td{border-width:.083em}.h5peditor textarea figure.table table th,.h5peditor .h5peditor-text figure.table table th,.h5peditor .ckeditor figure.table table th{border-width:.167em}.h5peditor textarea figure.table table tr:last-child>td,.h5peditor .h5peditor-text figure.table table tr:last-child>td,.h5peditor .ckeditor figure.table table tr:last-child>td{border-bottom-style:none}.h5peditor textarea figure.table figcaption,.h5peditor .h5peditor-text figure.table figcaption,.h5peditor .ckeditor figure.table figcaption{background-color:rgba(0,0,0,0);caption-side:top;color:#333;display:table-caption;font-size:.75em;outline-offset:-1px;padding:.6em;text-align:center;word-break:break-word}.h5peditor textarea .table-overflow-protection,.h5peditor .h5peditor-text .table-overflow-protection,.h5peditor .ckeditor .table-overflow-protection{clear:both}.h5peditor textarea.error,.h5peditor .h5peditor-text.error,.h5peditor .ckeditor.error{border-color:red}.h5peditor .ck-content figure.table{float:left}.h5peditor .ck-content figure.table table{border-width:1px;border-color:#494949;border-style:none}.h5peditor .ck-content figure.table table td,.h5peditor .ck-content figure.table table th{padding:1px;border-style:none;border-color:#494949;border-bottom-style:solid}.h5peditor .ck-content figure.table table td{border-width:.083em}.h5peditor .ck-content figure.table table th{border-width:.167em;background-color:rgba(0,0,0,0)}.h5peditor .ck-content figure.table table tr:last-child>td{border-bottom-style:none}.h5peditor .ck-content figure.table figcaption{background-color:rgba(0,0,0,0)}.h5peditor .h5peditor-text,.h5peditor textarea{width:100%;box-sizing:border-box}.h5peditor .h5peditor-text.error,.h5peditor textarea.error{border-color:red}.h5peditor .ck a{text-decoration:underline}.h5peditor .ck .ck-font-size-dropdown .ck-dropdown__panel,.h5peditor .ck .ck-text-fragment-language-dropdown .ck-dropdown__panel{max-height:20em;overflow-y:scroll}.h5peditor .ck .ck-fontsize-option .ck-button__label{line-height:normal !important}.h5peditor .ck .ck-content pre{background:initial;border:initial;border-radius:initial;padding:0}.h5peditor textarea:focus::-webkit-input-placeholder,.h5peditor input:focus::-webkit-input-placeholder{color:#fff}.h5peditor textarea:focus:-moz-placeholder,.h5peditor input:focus:-moz-placeholder{color:#fff}.h5peditor textarea:focus::-moz-placeholder,.h5peditor input:focus::-moz-placeholder{color:#fff}.h5peditor textarea:focus:-ms-input-placeholder,.h5peditor input:focus:-ms-input-placeholder{color:#fff}.h5peditor textarea:focus.h5peditor-ckeditor-placeholder,.h5peditor input:focus.h5peditor-ckeditor-placeholder{color:#fff}.h5peditor ::-webkit-input-placeholder{color:#858585}.h5peditor :-moz-placeholder{color:#858585}.h5peditor ::-moz-placeholder{color:#858585}.h5peditor :-ms-input-placeholder{color:#858585}.h5peditor .h5peditor-ckeditor-placeholder{color:#858585}.h5peditor>select,.h5peditor .h5peditor-language-switcher select,.h5peditor h5peditor-select,.h5peditor .field>select{padding:10px 30px 10px 8px;font-family:"Open Sans",sans-serif;font-size:16px;border:1px solid #d0d0d1;background:#fff url(a1aff8c82bc779d09357.png) no-repeat;background-position:calc(100% - 10px);box-shadow:inset 0px 0px 5px rgba(0,0,0,.12);-moz-appearance:none;-webkit-appearance:none}.h5peditor>select:disabled,.h5peditor .h5peditor-language-switcher select:disabled,.h5peditor h5peditor-select:disabled,.h5peditor .field>select:disabled{background-color:#efefef}.h5peditor>select{margin-bottom:13px;margin-right:20px}.h5peditor select::-ms-expand{display:none}.h5peditor a:focus{outline:none}.h5peditor textarea:focus,.h5peditor .h5peditor-text:focus{outline:none;background-color:#fff;border-color:#53a0ff}.h5peditor .h5p-ul{padding:0;margin:0;list-style:none}.h5peditor .h5p-ul .h5p-li{margin:10px 0;padding:0;list-style:none}.h5peditor .h5p-ul .h5p-li:first-child{margin-top:0}.h5peditor .h5p-ul .h5p-li:last-child{margin-bottom:0}.h5peditor .h5p-ul .h5p-li.placeholder{box-sizing:border-box;background:#e8f2fa;border:dashed 2px #2782d1}.h5peditor .h5p-ul .h5p-li:hover{text-decoration:none}.h5peditor .h5p-ul .h5p-li:nth-child(2).moving{margin-top:0}.h5peditor .h5p-ul .h5p-li:nth-last-child(2).placeholder{margin-bottom:0}.h5peditor .dimensions input,.h5peditor .coordinates input,.h5peditor .number input{width:75px}.h5peditor .number input[type=range]{width:300px;float:left;margin:7px 8px 0 0}.h5peditor .h5p-errors{clear:both}.h5peditor .h5p-add-file{float:left;position:relative;background:rgba(0,0,0,0);border:2px dashed #ddd;color:#ddd;margin:.5em;width:6em;height:4.5em;cursor:pointer;outline:none;box-sizing:border-box;-moz-box-sizing:border-box}.h5peditor .h5p-add-file:focus,.h5peditor .h5p-add-file:hover{color:#999;border-color:#999}.h5peditor .h5p-add-file.hidden{visibility:hidden}.h5peditor .h5p-add-file:after{position:absolute;content:"+";font-size:2em;line-height:2.2em;width:100%;height:100%;text-align:center}.h5peditor .h5p-add-dialog{position:inherit;z-index:1;visibility:hidden;opacity:0;background:#fff;margin-bottom:1rem;box-sizing:border-box;-moz-box-sizing:border-box;transition:visibility 0s .2s,opacity .2s}.h5peditor .h5p-add-dialog.h5p-open{visibility:visible;opacity:1;transition:visibility 0s 0s,opacity .2s}.h5peditor .h5p-add-dialog .h5p-add-dialog-table{overflow:hidden;position:relative}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tablist{display:inline-flex;border-left:1px solid #d0cfd4}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tablist:has(~.av-tabpanel.has_content) .av-tab:not(.selected){opacity:.5;cursor:not-allowed;pointer-events:none}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab{cursor:pointer;padding:.5em .75em;border-top:1px solid #d0cfd4;border-right:1px solid #d0cfd4;position:relative;font-weight:600;font-size:15px;background:#e7e9ee;z-index:1}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab::before{font-family:"H5P";color:#297bc7;vertical-align:middle;font-size:1.8em;margin-right:4px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab.selected{color:#000;background:#fff}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab.selected::after{content:"";position:absolute;bottom:-1px;left:0;right:0;height:1px;background:#fff}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel{border:1px solid #d0cfd4;border-radius:0 0 5px 5px;margin-top:1px;position:relative;padding:1em;top:-1px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel h3{margin:0 0 1em 0}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel .h5p-file-drop-upload{width:90px;margin:0}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box{float:left;padding:0;width:60%;margin-right:5%;margin-left:4%;text-align:left;margin-top:30px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box:first-child{width:22%;margin-left:3%;margin-right:1%}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box:first-child h3{text-align:center}.h5peditor .h5p-add-dialog .h5p-add-dialog-table h3{color:#666;font-size:1em;margin:1.2em 0;line-height:1.1em}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5peditor-field-description{color:#bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper{background-color:#f5f5f5;border:1px solid #bbb;padding:15px 15px 15px 60px;position:relative}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper:before{font-family:"H5P";position:absolute;left:0;top:.083em;font-size:3.8em;line-height:1}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper.video:before{content:"";color:#dd0505}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper.audio:before{content:"";color:#747275}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper input{border-color:#bbb;text-align:left;padding-left:20px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload{position:relative;width:70%;height:90px;margin:0 15%;float:left;background-color:#f5f5f5;text-align:center;cursor:pointer;border:1px solid #bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner{border:2px dashed #bbb;background-color:#fff;position:absolute;top:3px;bottom:3px;left:3px;right:3px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner:after{font-family:"H5P";line-height:1.4em;font-size:3.5em;color:#bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner.video:after{content:""}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner.audio:after{content:""}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload:hover .h5p-file-drop-upload-inner:after,.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload.over .h5p-file-drop-upload-inner:after{color:#999}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-or-vertical{float:left;position:relative;width:5%;height:250px}.h5peditor .h5p-add-dialog .h5p-dialog-box{text-align:center;padding:1em .5em}.h5peditor .h5p-add-dialog .h5p-buttons{padding:.5em;border-top:1px solid #cdcdcd;background:#ddd;text-align:right}.h5peditor .h5p-or{border-bottom:1px solid #cdcdcd;padding:0;margin:0 1em;text-align:center;height:.5em;line-height:1em}.h5peditor .h5p-or>span{background:#fff;padding:0 .5em}.h5peditor .h5p-or-vertical{float:left;position:relative;width:50px;height:80px}.h5peditor .h5p-or-vertical .h5p-or-vertical-line{position:absolute;margin:10px 0;left:49%;top:0;bottom:0;width:1px;background:#ccc;z-index:1}.h5peditor .h5p-or-vertical .h5p-or-vertical-word-wrapper{text-align:center;height:18px;position:absolute;left:0;right:0;top:22%;margin-top:-12px;z-index:2}.h5peditor .h5p-or-vertical .h5p-or-vertical-word-wrapper .h5p-or-vertical-word{color:#999;font-weight:bold;font-size:18px;padding:3px;background:#fff}.h5peditor .h5p-file-url{text-align:center}.h5peditor .h5p-thumbnail{margin:.5em;width:6em;height:4.5em;display:block;float:left;position:relative;box-shadow:0 0 10px 0 #666;border:1px solid #fff;box-sizing:border-box;-moz-box-sizing:border-box}.h5peditor .h5p-thumbnail .h5p-remove{position:absolute;top:0;right:0;cursor:pointer;outline:none;width:1.6em;height:1.6em;line-height:1.6em;overflow:hidden;text-indent:-0.4em;padding:.065em;opacity:.6}.h5peditor .h5p-thumbnail .h5p-remove:hover,.h5peditor .h5p-thumbnail .h5p-remove:focus{opacity:1}.h5peditor .h5p-thumbnail .h5p-remove:after{font-family:"H5P";font-size:2em;color:#fff;content:"";opacity:.6}.h5peditor .h5p-type{position:absolute;width:100%;height:100%;font-size:1.1em;line-height:4em;display:block;text-align:center;background:#000;color:#fff;cursor:pointer}.h5peditor .file{position:relative;float:left;margin-bottom:0;max-width:100%}.h5peditor .file.authorList{float:none}.h5peditor .file.field{float:none}.h5peditor .file .thumbnail{display:inline-block;margin:10px 10px 10px 0;box-shadow:0 0 10px 0 #666;border:1px solid #fff;cursor:pointer;max-width:100%;min-width:1em;min-height:1em;background:#fff url(ae8568c2320881fd5899.png) repeat}.h5peditor .file .thumbnail:focus{box-shadow:0 0 10px 0 #222}.h5peditor .file .add{display:inline-block;cursor:pointer;padding:.5em 1.5em .5em 3em;background:linear-gradient(to bottom, #fbfbfb 0, #f2f2f2 100%);border:1px solid #d0d0d1;border-radius:.25em;color:#222;font-weight:bold;line-height:normal}.h5peditor .file .add:hover{background:#ededed}.h5peditor .file .add:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor .file .add .h5peditor-field-file-upload-text:before{font-family:"H5P";content:"";line-height:1;color:#39c943;font-size:2em;position:absolute;left:.3em;top:.1em}.h5peditor .file .remove{display:block;position:absolute;top:7px;right:7px;cursor:pointer}.h5peditor .file .remove:focus:before{opacity:1}.h5peditor .file .remove:before{font-family:"H5P";font-size:1.4em;color:#fff;content:"";opacity:.6;text-shadow:rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px}.h5peditor .file .remove:hover{text-decoration:none}.h5peditor .file .remove:hover:before{color:#fff;opacity:1;text-shadow:rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px}.h5peditor .file img{max-width:100%;vertical-align:bottom;max-height:100px}.h5peditor .file .h5p-av-row{overflow:auto;margin-bottom:.5em}.h5peditor .file .h5p-av-row .h5p-thumbnail{display:table-cell}.h5peditor .file .h5p-av-row .h5p-video-quality{display:table-cell;overflow:hidden;width:10000px;padding-left:1em}.h5peditor .file .h5p-av-row .h5p-video-quality input.h5peditor-text{width:100%}.h5peditor .file .h5p-av-cell{overflow:auto;float:left}.h5peditor .video .file,.h5peditor .audio .file{position:static;overflow:visible}.h5peditor .video .file .thumbnail,.h5peditor .video .file .add,.h5peditor .audio .file .thumbnail,.h5peditor .audio .file .add{float:left}.h5peditor .video .file .add,.h5peditor .audio .file .add{margin-top:8px}.h5peditor .video .file .thumbnail,.h5peditor .audio .file .thumbnail{overflow:visible;position:relative;cursor:auto}.h5peditor .video .file .remove,.h5peditor .audio .file .remove{top:-3px;right:-5px}.h5peditor .video .file .type,.h5peditor .audio .file .type{padding:16px 8px 4px;background:#000;color:#fff;font-size:10px}.h5peditor .video .file .h5peditor-uploading,.h5peditor .audio .file .h5peditor-uploading{float:left;margin:.5em}.h5peditor .libwrap{margin-top:20px}.h5peditor .libwrap.no-margin,.h5peditor .libwrap:empty{margin-top:0}.h5peditor input[type=checkbox]{margin:4px 4px 4px 0;vertical-align:bottom}.h5peditor .moving{position:absolute;z-index:1;opacity:.8;-webkit-transform:translateZ(0)}.h5peditor .moving .h5peditor-label{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.h5peditor .h5peditor-uploading,.h5peditor .h5peditor-loading{padding-top:10px;padding-bottom:6px;font-size:14px}.h5peditor .h5peditor-loading{padding:.875em 0 1em 3.25em;font-style:italic}.h5peditor .h5p-copyright-button{border-radius:.25em;height:30px;background:linear-gradient(to bottom, #fff 0, #f2f2f2 100%);border:1px solid #d0d0d1;color:#212121;font-size:14px;line-height:28px;padding-right:20px;padding-left:0;clear:both;font-weight:normal}.h5peditor .h5p-copyright-button:before{font-family:"H5P";content:"";color:#666;padding:0 .25em 0 .25em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor .h5p-copyright-button:hover:not([disabled]){background:linear-gradient(to bottom, #fff 0, #d0d0d1 100%);text-decoration:none;border-color:#999}.h5peditor .h5p-copyright-button:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor .field.file>.h5p-copyright-button,.h5peditor .field.video>.h5p-copyright-button,.h5peditor .field.audio>.h5p-copyright-button{float:left}.h5peditor .h5p-editor-dialog{position:absolute;z-index:2;margin:5.5em 0 1em;visibility:hidden;opacity:0;height:0;overflow:hidden;background:#fff;box-shadow:0 0 8px #666;transition:visibility 0s .2s,height 0s .2s,opacity .2s,margin-top .2s}.h5peditor .h5p-editor-dialog.h5p-open{margin-top:3.5em;visibility:visible;opacity:1;height:auto;transition:visibility 0s 0s,height 0s 0s,opacity .2s,margin-top .2s}.h5peditor .h5p-editor-dialog>.field{margin:0;border:0;box-shadow:none}.h5peditor .h5p-editor-dialog .content{border:none;background:#fff}.h5peditor .h5p-editor-dialog .content .h5peditor-label{font-size:18px;font-weight:600}.h5peditor .h5p-editor-dialog .h5p-close{color:#494949}.h5peditor .h5p-editor-dialog .h5p-close:before{font-size:2em;right:-0.125em;top:0;position:absolute;z-index:1;font-family:"H5P";content:"";line-height:1em;transition:scale .2s}.h5peditor .h5p-editor-dialog .h5p-close:hover:before{scale:1.1,1.1}.h5peditor .h5p-li>.content>.library{border:0;padding:0}.ck-powered-by-balloon{display:none !important}.h5p-editor-dialog.h5p-dialog-wide{width:90%;border-radius:.208em}.h5peditor-button-textual{border-radius:.25em;background:#747275;background-image:linear-gradient(#7b797c 50%, transparent 50%, transparent);display:inline-block;width:auto;margin:10px 0 0 0;padding:0 20px;box-sizing:border-box;height:38px;border:1px solid #d0d0d1;font-size:16px;font-family:"Open Sans",sans-serif;line-height:38px;color:#fff;cursor:pointer;font-weight:600;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5peditor-button-textual:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor-button-textual:before,.h5peditor-button-textual:after{color:#fff}.h5peditor-button-textual .h5p-editing-image-button:before{font-family:"H5P";content:"";color:#666;padding-right:.25em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor-button-textual:hover:not([disabled]){background:#636164;background-image:linear-gradient(#6b696c 50%, transparent 50%, transparent);text-decoration:none}.h5peditor-button-textual.importance-high{background:#2579c6;background-image:linear-gradient(#3080c9 50%, transparent 50%, transparent);border-color:#1f67a8;text-transform:uppercase;height:42px;line-height:42px}.h5peditor-button-textual.importance-high:hover:not([disabled]){background:#1f67a8;background-image:linear-gradient(#2a6fac 50%, transparent 50%, transparent);border-color:#1f67a8}.h5peditor-button-textual.importance-low{background:#f5f5f5;background-image:linear-gradient(#eeeeef 50%, transparent 50%, transparent);border-color:#d0d0d1;color:#212121}.h5peditor-button-textual.importance-low:before,.h5peditor-button-textual.importance-low:after{color:#212121}.h5peditor-button-textual.importance-low:hover:not([disabled]){background:#deddde;background-image:linear-gradient(#deddde 50%, transparent 50%, transparent);border-color:#deddde}.h5peditor-button-textual[disabled],.h5peditor-button-textual[aria-disabled=true]{background:#f5f5f5;color:#707171;border-color:#eee;cursor:not-allowed}.h5peditor-button-textual[disabled]:before,.h5peditor-button-textual[aria-disabled=true]:before{font-family:"H5P";content:"";color:#707171;margin-right:.5em;vertical-align:top}.h5peditor-field-description,.h5p-help-text{font-size:12px;margin-top:.3em;margin-bottom:1em;font-weight:500;color:#434446;line-height:15px;letter-spacing:.5px}.h5peditor-field-important-description{position:relative;padding:1.5em 2.2em 2em 2.2em;font-size:.9em;margin:0 0 20px 0;border:1px solid #ffde78;background-color:#f9f9d8;color:#000;display:none}.h5peditor-field-important-description .important-description-close{position:absolute;font-size:.9em;line-height:2em;right:1.5em;top:1em;user-select:none;cursor:pointer}.h5peditor-field-important-description .important-description-close:before{font-family:"H5P";content:"";vertical-align:top;font-size:1.6em}.h5peditor-field-important-description .h5p-info-icon{font-size:.75em}.h5peditor-field-important-description .h5p-info-icon:before{font-family:"H5P";content:"";font-size:2.3em;line-height:.94em;margin-left:-0.3em;vertical-align:middle}.h5peditor-field-important-description .important-description-title{font-weight:bold;font-size:1.2em;vertical-align:bottom}.h5peditor-field-important-description .important-description-content ul{padding:0;line-height:2em;margin-top:20px}.h5peditor-field-important-description .important-description-content ul li{line-height:1.8em;margin-left:1.5em}.h5peditor-field-important-description .important-description-example{border:1px solid #bbde98;background-color:#d9fac3;display:flex;margin-top:20px}.h5peditor-field-important-description .important-description-example .important-description-example-title{padding:15px;font-weight:bold}.h5peditor-field-important-description .important-description-example .important-description-example-text{padding:15px;width:100%;background-color:#f6fef1}.av-tab__file-upload::before{content:""}.av-tab__insert-url::before{content:""}.av-tab__record-audio:last-child::before{content:""}.h5peditor-form{position:relative;background:#fcfcfc;border:1px solid #d0d0d1}.h5peditor-form.h5peditor-form-manager>.tree,.h5peditor-form.h5peditor-form-manager>.common,.h5peditor-form.h5peditor-form-manager>.field{max-width:918px;margin:20px auto;padding:0 20px}.h5peditor-form.h5peditor-semi-fullscreen{margin:0;position:fixed;overflow-y:scroll;margin-top:40px;padding-bottom:40px;box-sizing:border-box;background:#fff;height:calc(100% - 40px)}.h5peditor-label{display:block;margin-bottom:6px;font-weight:600;font-size:16px;color:#454347}.h5peditor-label-button{background:rgba(0,0,0,0);border:none;color:#454347;cursor:pointer;display:flex;flex-direction:row;font-family:inherit;font-weight:600;font-size:16px;padding:0 0 0 10px;text-align:left}.h5peditor-label-button.collapsed .icon::before{content:"";font-family:"H5P";margin-right:5px}.h5peditor-label-button:not(.collapsed) .icon::before{content:"";font-family:"H5P";margin-right:5px}#h5peditor-uploader{position:absolute;width:1px;height:1px;top:-1px;border:0;overflow:hidden}.h5p-tutorial-url,.h5p-example-url{font-size:1em;display:inline-flex;align-items:center;line-height:1;margin-right:1em;margin-bottom:.5em;margin-left:.25em;height:2rem;border-radius:1rem}.h5p-tutorial-url:focus,.h5p-example-url:focus{box-shadow:0px 0px 5px #1634f7}.h5p-tutorial-url:active,.h5p-example-url:active{border-color:#1c70ba}.h5p-tutorial-url::before,.h5p-example-url::before{font-family:"H5P";font-size:1.25em;border-radius:50%;width:2rem;height:2rem;position:absolute;display:flex;justify-content:center;align-items:center}.h5p-tutorial-url .h5p-tutorial-url-label,.h5p-tutorial-url .h5p-example-url-label,.h5p-example-url .h5p-tutorial-url-label,.h5p-example-url .h5p-example-url-label{font-style:italic;font-weight:bold;text-decoration:underline;margin:.25em .5em;margin-left:2rem;padding-left:.5em;padding-right:1em}.h5p-tutorial-url:active,.h5p-tutorial-url:hover{background-color:#eaffab}.h5p-tutorial-url::before{content:"";color:#eaffab;background-color:#749e00}.h5p-tutorial-url .h5p-tutorial-url-label{color:#415702}.h5p-example-url:active,.h5p-example-url:hover{background-color:#f8d4ff}.h5p-example-url::before{content:"";font-size:1em;color:#f8d4ff;background-color:#8f4f9c}.h5p-example-url .h5p-example-url-label{color:#422447}.h5peditor-widget-select{display:flex;flex-direction:row-reverse;justify-content:end;overflow:hidden;margin:0 0 -1px;padding:0;list-style:none}.h5peditor-widget-option{border:1px solid #ccc;margin-left:.5em;padding:.6em 1em;color:#0e1a25;font-size:.875em;background:#f5f5f5;line-height:1.285714286em;cursor:pointer;outline:none}.h5peditor-widget-option:hover{color:#000}.h5peditor-widget-option:active{color:#8e636a}.h5peditor-widget-active{background:#fff;line-height:1.357142857em;border-bottom:0}.h5peditor-widgets>.h5peditor-widget-wrapper{border:1px solid #ccc;margin:0 0 .25em;padding:.5em}.h5peditor-widgets>.h5peditor-label,.h5peditor-widgets>.h5peditor-label-button{float:left;margin-top:5px}.h5p-editor-iframe{margin-bottom:1em}.h5peditor-required:after{content:"*";color:#da0001;margin-left:.2em;position:relative;top:-0.2em}.h5peditor .cke_bottom,.h5peditor .cke_top{background:#d0d0d1}.h5peditor .cke_chrome{border:1px solid #f5f5f5;background:#d0d0d1}.h5peditor .cke_contents,.h5peditor .cke_toolgroup,.h5peditor .cke_combo_button{border:1px solid #f5f5f5}.important-description-show{background:#f3d55a;padding:.2em .5em .2em 1.7em;margin-bottom:.5em;font-size:.9em;cursor:pointer;float:right;position:relative;line-height:normal;font-style:italic;font-weight:bold}.important-description-show:before{font-family:"H5P";font-style:normal;font-weight:normal;content:"";font-size:1.8em;position:absolute;left:0em;top:0em;line-height:.85em;vertical-align:top}.important-description-clear-right{display:block;clear:right}.h5peditor fieldset.common-fields-library-wrapper{width:100%;padding:0 1em 1em;box-sizing:border-box;height:20px;border:solid 1px #e2e5ee;border-radius:4px;margin-bottom:1em}.h5peditor fieldset.common-fields-library-wrapper>*{display:none}.h5peditor fieldset.common-fields-library-wrapper>legend{display:block;cursor:pointer;outline:none;color:#363b42;background-color:#fff;padding:10px;font-weight:bold;font-size:.875em}.h5peditor fieldset.common-fields-library-wrapper>legend:before{font-family:"H5P";content:"";margin-right:.5em}.h5peditor fieldset.common-fields-library-wrapper>legend:focus:before{outline:1px dotted #666}.h5peditor fieldset.common-fields-library-wrapper.expanded{height:auto}.h5peditor fieldset.common-fields-library-wrapper.expanded>*{display:block}.h5peditor fieldset.common-fields-library-wrapper.expanded>legend:before{content:""}.h5p-metadata-button-wrapper{display:flex;flex-direction:row;align-items:center;margin-top:-7px;margin-left:7px;cursor:pointer}.h5p-metadata-button-wrapper.inline-with-selector{display:inline-flex;margin-left:17px}.h5p-metadata-toggler{margin-left:-11px;height:14.5px;max-height:14.5px;padding:.217rem .3rem .217rem .217rem;font-size:.625em;font-weight:bold;letter-spacing:.025em;border:1px solid #b6cada;border-left:none;border-radius:4px;background:linear-gradient(#fff, #deeaf1);color:#356593;z-index:1;justify-content:center;align-content:center;line-height:1.5em}.h5p-metadata-button-tip{width:16.5px;height:16.5px;content:"";background:linear-gradient(-215deg, #fff, #deeaf1);border:1px solid #b6cada;border-right:none;border-top:none;border-radius:4px;transform:rotate(45deg);z-index:0}.h5p-metadata-button-wrapper:hover .h5p-metadata-toggler,.h5p-metadata-button-wrapper:hover .h5p-metadata-button-tip{border-color:#6d9fce}.h5p-metadata-button-wrapper:hover .h5p-metadata-toggler{background:linear-gradient(#f3f8fb, #cee5f3)}.h5p-metadata-button-wrapper:hover .h5p-metadata-button-tip{background:linear-gradient(-215deg, #f3f8fb, #cee5f3)}.h5p-metadata-button-wrapper:active .h5p-metadata-toggler,.h5p-metadata-button-wrapper:active .h5p-metadata-button-tip{color:#294f73;border-color:#6d9fce}.h5p-metadata-button-wrapper:active .h5p-metadata-toggler{background:linear-gradient(#f3f8fb, #bcd4e2)}.h5p-metadata-button-wrapper:active .h5p-metadata-button-tip{background:linear-gradient(-215deg, #f3f8fb, #bcd4e2)}#metadata-title-main-label{margin-top:0}.h5p-metadata-button{background:#fff;padding:10px;text-align:center;border-radius:5px;border:2px solid #6b6b6b;color:#6b6b6b;font-weight:bold;display:inline;cursor:pointer}.h5p-metadata-button:hover{border-color:#4a4a4a;color:#4a4a4a}.h5p-metadata-button:active{border-color:#000;color:#000}.h5p-metadata-button.inverted{border:2px solid #0a715e;color:#0a715e}.h5p-metadata-button.inverted:hover{border-color:#0d826c;color:#0d826c}.h5p-metadata-button.inverted:active{border-color:#095345;color:#095345}.h5p-metadata-icon-button{border:none;cursor:pointer;color:#6b6b6b;background:rgba(0,0,0,0);padding:0}.h5p-metadata-icon-button:hover{color:#4a4a4a}.h5p-metadata-icon-button:active{color:#000}.h5p-metadata-wrapper{display:inline-block;background-color:#fff;max-width:700px;width:calc(100% - 4em);text-align:left;border-bottom:20px solid rgba(0,0,0,0);background-clip:padding-box;max-height:calc(100% - 40px);overflow:auto;margin-bottom:20px}.h5p-metadata-wrapper .h5p-metadata-header{display:flex;border-bottom:1px solid #ced6e3;padding:1.5em}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container{flex-grow:1;padding-left:3.5em;white-space:nowrap;overflow:hidden;margin-right:1%;position:relative}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container h2{margin:0}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container p{margin:.1em}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container:before{position:absolute;font-family:"h5p-metadata-icons";content:"";left:0;top:0;font-size:2em;height:1.4em;line-height:1.3}.h5p-metadata-wrapper .h5p-save{border:solid 2px #0a715e;border-radius:.3rem;color:#fff;background-color:#0a715e;padding:.75rem;white-space:nowrap}.h5p-metadata-wrapper .h5p-save:hover{border-color:#0d826c;background-color:#0d826c}.h5p-metadata-wrapper .h5p-save:active{border-color:#095345;background-color:#095345}.h5p-metadata-wrapper .h5peditor-label{font-size:.8em;color:#333}.h5p-metadata-wrapper .h5peditor-field-description{color:#697484;margin-top:.35em;letter-spacing:.5px}.h5p-metadata-wrapper .copyright-form{margin-top:20px}.h5p-metadata-wrapper h2{font-size:1em;overflow:hidden;text-overflow:ellipsis}.h5p-metadata-wrapper p{font-size:.8333em;color:#697484;overflow:hidden;text-overflow:ellipsis;margin-bottom:0}.h5p-metadata-wrapper .errors p,.h5p-metadata-wrapper .h5p-errors p{color:#da0001;font-size:1em;white-space:normal;text-overflow:unset}.h5p-metadata-wrapper select.h5peditor-select,.h5p-metadata-wrapper input.h5peditor-text,.h5p-metadata-wrapper textarea{border:1px solid #b8c0cd;font-size:.833em;border-radius:.208em;box-shadow:none;font-family:"Open Sans",sans-serif}.h5p-metadata-wrapper select:focus,.h5p-metadata-wrapper input:focus,.h5p-metadata-wrapper textarea:focus{box-shadow:inset 0px 0px 10px rgba(0,0,0,.15)}.h5p-metadata-wrapper select{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper{display:flex;flex-wrap:wrap;margin:1.5em}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field{margin-bottom:0;width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-license{width:49%;margin-right:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-licenseVersion{width:49%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearFrom{width:24%;margin-right:1%;white-space:nowrap}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearFrom .h5peditor-text{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearTo{width:23%;margin-right:1%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearTo .h5peditor-text{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-source{width:49%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label{justify-content:space-between}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle{background:none;border:none;cursor:pointer}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:before{font-family:"h5p-metadata-icons";content:"";margin-right:.5em;font-size:1.5em;vertical-align:middle}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:focus,.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:active,.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:hover{border:none}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:hover .h5p-a11y-title-text{text-decoration:underline}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle{transition:max-height .2s,margin .2s;overflow:hidden}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle.hide{max-height:0;margin:0}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle.hidden{display:none}.h5p-metadata-wrapper .field.group>.title{font-weight:400;background:#f6f6f6;color:#323232;border:solid 1px #ced6e3;border-radius:.208em}.h5p-metadata-wrapper .field.group.expanded>.title{border-radius:.208em .208em 0 0}.h5p-metadata-wrapper .field.group>.title:focus{border-color:#4d90fe}.h5p-metadata-wrapper .field.group>.content{border:solid 1px #ced6e3;border-radius:0 0 .208em .208em;padding:20px;border-top:0}.h5p-metadata-additional-information{width:100%;margin-top:1em}.h5p-metadata-additional-information .content.h5peditor-single{min-height:2em;border:1px solid #d0d0d1;border-top:none;background:#fff}.h5p-metadata-additional-information .title{font-weight:400;background:#f6f6f6;color:#323232;border:solid 1px #ced6e3;border-radius:.208em}.h5p-metadata-additional-information .title:focus{border-color:#4d90fe}.h5p-metadata-popup-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.85);z-index:101;text-align:center}.h5p-metadata-changelog{width:100%}.h5p-metadata-changelog .field-name-change.expanded .content{display:flex;flex-wrap:wrap}.h5p-metadata-changelog .field-name-change .field-name-date{width:49%;margin-bottom:.5em;margin-right:1%;margin-top:0}.h5p-metadata-changelog .field-name-change .field-name-date span{width:100%}.h5p-metadata-changelog .field-name-change .field-name-author{width:49%;margin-bottom:.5em;margin-left:1%;margin-top:0}.h5p-metadata-changelog .field-name-change .field-name-log{width:100%}.h5p-metadata-changelog .field-name-change .h5p-add-author:before{content:"+";margin-right:.7em}.h5p-metadata-changelog .field-name-change .h5p-cancel{margin-right:10px}.h5p-metadata-changelog .field-name-change .h5p-metadata-changelog-buttons{width:100%}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes{width:100%;margin-top:1em}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes.editing{display:none}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes .h5peditor-field-description{margin-bottom:0}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-wrapper{margin-top:1em;border:solid 1px #ced6e3;border-radius:.208em;max-height:15.917rem;overflow-y:auto;padding:0 .5em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log{display:flex;margin-top:.5em;padding-bottom:.5em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-delete{margin-left:2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-delete:after{font-family:"h5p-metadata-icons";content:"";font-size:1.2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-edit:after{font-family:"h5p-metadata-icons";content:"";font-size:1.2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-buttons{min-width:3em;line-height:2.5}.h5p-metadata-changelog .field-name-change .h5p-metadata-log:not(:last-child){border-bottom:solid 1px #ced6e3}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-date{min-width:25%;font-size:.85em;font-style:italic;line-height:2.5}.h5p-metadata-changelog .field-name-change .h5p-metadata-description-wrapper{flex-grow:1;font-size:.85em;font-style:italic}.h5p-metadata-changelog .field-name-change .h5p-metadata-description-wrapper{font-weight:bolder}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-author{font-weight:normal}.h5p-metadata-changelog .field-name-change .h5p-metadata-new-log-message{width:100%;background:#c5e7e1;padding:.5em;margin-bottom:1em;color:#0a715e}.h5p-metadata-author-widget{display:flex;flex-direction:column;border:solid 1px #ced6e3;border-radius:.208em;width:100%;padding:1em;margin-top:1em}.h5p-metadata-author-widget .h5p-save-author{border:solid 2px #0a715e;color:#fff;background-color:#0a715e}.h5p-metadata-author-widget .h5p-save-author:hover{border-color:#0d826c;color:#fff;background-color:#0d826c}.h5p-metadata-author-widget .h5p-save-author:active{border-color:#095345;color:#fff;background-color:#095345}.h5p-metadata-author-widget .h5p-author-data{display:flex;flex-direction:row;flex-wrap:nowrap}.h5p-metadata-author-widget .h5p-author-data>.field{margin-bottom:0}.h5p-metadata-author-widget .field-name-name{flex-grow:1;margin-right:2%;overflow:hidden;white-space:nowrap;min-width:49%}.h5p-metadata-author-widget .field-name-role{margin-top:0;margin-right:2%;width:25%;flex-grow:1;overflow:hidden;white-space:nowrap}.h5p-metadata-author-widget .authorList{margin-top:1.5em;white-space:nowrap}.h5p-metadata-author-widget .authorList li{display:inline;margin-right:.5em}.h5p-metadata-author-widget .authorList li span{margin-right:1em;font-style:italic}.h5p-metadata-author-widget .h5p-author-list-wrapper{margin-top:.5em}.h5p-metadata-author-widget .h5p-author-list-wrapper ul{margin:0;padding:0}.h5p-metadata-author-widget .h5p-author-list-wrapper li{display:inline-block;margin-right:2em;list-style:none;font-weight:bold;font-size:.8em}.h5p-metadata-author-widget .h5p-author-list-wrapper .h5p-metadata-role{font-style:italic;margin:0 .6em;font-weight:normal;font-size:.85em;color:#757575}.h5p-metadata-author-widget .h5p-author-list-wrapper button:after{font-family:"h5p-metadata-icons";content:"";font-size:1em;position:relative;top:-0.1em}.h5peditor-copypaste-wrap{float:right}.h5peditor>.h5peditor-copypaste-wrap{margin-bottom:14px}.h5peditor-copypaste-wrap.hidden{display:none}.h5peditor-clearfix{clear:both}.h5peditor-paste-button,.h5peditor-copy-button{border:1px solid #deeeec;padding:.5em .75em .75em .5em;margin-left:.5em;border-radius:.25em;cursor:pointer;background:#f2faff;line-height:.5em}.h5peditor-paste-button:hover,.h5peditor-copy-button:hover{border-color:#bbdae8}.h5peditor-paste-button:active,.h5peditor-copy-button:active{background-color:#deeffb}.h5peditor-paste-button.disabled,.h5peditor-copy-button.disabled{color:#707070;background-color:#f5f5f5;border-color:#ededed;cursor:not-allowed}.h5peditor-copy-button:before,.h5peditor-paste-button:before{font-family:"H5P";margin-right:5px;font-size:1.5em;position:relative;top:.2em;color:#2372b3}.h5peditor-copy-button:before{content:""}.h5peditor-paste-button:before{content:""}.h5peditor-copy-button.disabled:before,.h5peditor-paste-button.disabled:before{color:#707070}.h5peditor-copy-button.disabled:before{content:""}.h5peditor-paste-button.disabled:before{content:""}.h5p-hub .h5peditor-paste-button{font-family:"Open Sans",sans-serif;color:#fff;border:solid 1px #9fc8f4;padding:0 .75em .5em .75em;background:rgba(0,0,0,0);line-height:1;height:auto;margin-top:.675em;margin-right:.675em}.h5p-hub .h5peditor-paste-button:hover{background:#4b5460;border-color:#606a78}.h5p-hub .h5peditor-paste-button:active{background:#434b55}.h5p-hub .h5peditor-paste-button.disabled{border-color:#30353d;background:#30353d;color:#c2c2c2}.h5p-hub .h5peditor-paste-button:before{color:#9fc8f4}.h5p-hub .h5peditor-paste-button.disabled:before{color:#c3c3c3}@font-face{font-family:"h5p-fullscreen-bar";src:url(./fonts/h5p-fullscreen-bar.eot);src:url(./fonts/h5p-fullscreen-bar.eot#iefix) format("embedded-opentype"),url(./fonts/h5p-fullscreen-bar.ttf) format("truetype"),url(./fonts/h5p-fullscreen-bar.woff) format("woff"),url(./fonts/h5p-fullscreen-bar.svg#h5p) format("svg");font-weight:normal;font-style:normal}.h5peditor-form-manager-head{background:#f5f5f5;color:#414141;border-bottom:1px solid #dfdfdf;height:41px;line-height:40px;box-sizing:border-box;position:relative;display:flex;z-index:3;justify-content:space-between;align-items:flex-start;box-shadow:0px 2px 2px rgba(128,128,128,.15);padding:0 1em 0 .5em}.h5peditor-form-manager-button{background:rgba(0,0,0,0);padding:0;border:0;cursor:pointer;color:#414141;position:relative;white-space:nowrap;line-height:normal}.h5peditor-form-manager-button-inner{display:block;outline:none}.h5peditor-form-manager-breadcrumb{display:flex;min-width:0;flex-grow:1}.h5peditor-form-manager-proceed{display:none;background:#186df7;color:#fff;font-size:14px;font-weight:bold;font-family:Open Sans,sans-serif;border-radius:2px;margin-right:5px;margin-top:5px;padding:5px 10px}.h5peditor-form-manager-proceed:hover{background:#20588f}.h5peditor-form-manager-fullscreen{width:24px;height:24px;font-size:20px;margin-top:9px;margin-left:.25em}.h5peditor-form-manager-fullscreen .h5peditor-form-manager-button-inner:before{font-family:"h5p-fullscreen-bar";content:""}.h5peditor-form-manager-fullscreen:after{visibility:hidden;position:absolute;top:120%;right:-10%;z-index:3;padding:.25em .75em;background:#212121;color:#fff;white-space:nowrap;font-size:14px;box-shadow:0 0 .5em #858585;text-indent:0;font-weight:normal;pointer-events:none;outline:none;line-height:normal;content:attr(aria-label)}.h5peditor-form-manager-fullscreen:hover:after,.h5peditor-form-manager-fullscreen:focus:after{visibility:visible}.h5peditor-semi-fullscreen .h5peditor-form-manager-fullscreen .h5peditor-form-manager-button-inner:before{content:""}.h5peditor-semi-fullscreen .h5peditor-form-manager-proceed{display:block}.h5peditor-semi-fullscreen .h5peditor-form-manager-head{position:fixed;top:0;left:0;right:0;z-index:2}.form-manager-exit.form-manager-fullscreen .h5peditor-form-manager-button-inner:before{content:""}.h5peditor-form-manager-title{position:relative;min-width:20px;font-weight:bold;font-size:14px}.h5peditor-form-manager-title:before{font-family:"h5p-fullscreen-bar";content:"";font-size:1.2em;position:relative;top:.1em;margin-right:.25em;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5peditor-form-manager-title.dragtext:before{content:""}.h5peditor-form-manager-title.markthewords:before{content:""}.h5peditor-form-manager-title.multichoice:before{content:""}.h5peditor-form-manager-title.interactivevideo:before{content:""}.h5peditor-form-manager-title.audio:before{content:""}.h5peditor-form-manager-title.truefalse:before{content:""}.h5peditor-form-manager-title.dialogcards:before{content:""}.h5peditor-form-manager-title.questionnaire:before{content:""}.h5peditor-form-manager-title.coursepresentation:before{content:""}.h5peditor-form-manager-title.dragquestion:before{content:""}.h5peditor-form-manager-title.summary:before{content:""}.h5peditor-form-manager-title.singlechoiceset:before{content:""}.h5peditor-form-manager-title.blanks:before{content:""}.h5peditor-semi-fullscreen+.h5p-metadata-popup-overlay{position:fixed}.h5peditor-semi-fullscreen+.h5p-metadata-popup-overlay .h5p-metadata-wrapper{margin-top:20px !important}.h5peditor .h5peditor-language-switcher{float:right;white-space:nowrap;margin-bottom:1em}.h5peditor .h5peditor-language-switcher .language-label{padding:0 10px;font-size:15px}.h5peditor .h5peditor-language-switcher select{padding:6px 30px 6px 8px;font-size:15px}.h5peditor-language-notice{display:none;clear:both;font-size:14px;background:#dcf6ff;color:#295b7a;padding:10px 20px 10px 40px;margin:1em 0;line-height:1.5;position:relative}.h5peditor-language-notice:before{font-family:h5p;content:"";position:absolute;left:15px;font-size:1.125em}.h5peditor-language-notice.show{display:block}.h5peditor-language-notice .first{font-weight:bold}.h5peditor-language-notice a{text-decoration:underline}.h5p-loader__wrapper{width:100%;height:100%;flex:1;display:flex;align-items:center;padding:10px;min-width:180px}.h5p-loader__wrapper .h5p-loader__icon{border:8px solid #d0cfd4;border-bottom-color:#554e4a;border-radius:50%;width:40px;height:40px;animation:rotation linear 1s infinite;margin:0 auto}@keyframes rotation{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.h5p-sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);white-space:nowrap;border-width:0} +ul.list-unstyled{list-style:none;padding-left:0;margin:0}.field{margin:20px 0;font-size:16px;padding:0}.field:first-child{margin-top:0}.field:last-child{margin-bottom:0}.tree>.field.group:last-child{margin-bottom:0}.fields>.field.group{margin:10px 0}.fields>.field.group:first-child{margin-top:0}.fields>.field.group:last-child{margin-bottom:0}.field.boolean .h5peditor-label{display:inline}.field .h5p-editor-image-buttons{float:left;clear:both}.field .library{border:0}.field.importance-high>.h5peditor-label-wrapper>.h5peditor-label{font-size:18px;color:#356593}.field .h5p-dialog-anchor{position:relative;margin:-16px}.common-fields-library-wrapper{margin:20px 0;border:none;margin:0;padding:0}.common-fields-library-wrapper:first-child{margin-top:0}.common-fields-library-wrapper:last-child{margin-bottom:0}.common-fields-library-wrapper .common-field-legend{display:none}.common>.h5peditor-label,.h5p-li>.list-item-title-bar,.group>.title{visibility:inherit;cursor:pointer}.h5p-li>.list-item-title-bar.importance-high,.group.importance-high>.title{background:#2579c6;border:1px solid #1f67a8;height:42px}.h5p-li>.list-item-title-bar.importance-high>.title,.h5p-li>.list-item-title-bar.importance-high>.h5peditor-label,.group.importance-high>.title{font-size:16px;font-weight:600;line-height:42px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5p-li>.list-item-title-bar,.group>.title{background:#747275;border:1px solid #636164;height:38px}.h5p-li>.list-item-title-bar.importance-medium>.h5peditor-label,.h5p-li>.list-item-title-bar>.h5peditor-label,.group>.title{font-size:16px;font-weight:600;color:#fff;line-height:38px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.common>.h5peditor-label,.h5p-li>.list-item-title-bar.importance-low,.group.importance-low>.title{background:#f5f5f5;height:38px;border:1px solid #d0d0d1}.common>.h5peditor-label,.h5p-li>.list-item-title-bar.importance-low>.title,.h5p-li>.list-item-title-bar.importance-low>.h5peditor-label,.group.importance-low>.title{font-size:16px;font-weight:400;color:#212121;line-height:38px}.group{border:none}.group>.title{padding:0 10px;outline:none}.group>.content{position:relative;display:none;margin:0;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff}.group.importance-high>.title{color:#fff}.group.importance-low>.title{color:#212121}.group.importance-low>.title:focus:before{outline:1px dashed}.common .content,.content .content{background-color:#fcfcfc}.common .content .content,.content .content .content{background-color:#fff}.common .content .content .content,.content .content .content .content{background-color:#fcfcfc}.common .content .content .content .content,.content .content .content .content .content{background-color:#fff}.common .content .content .content .content .content,.content .content .content .content .content .content{background-color:#fcfcfc}.common .content .content .content .content .content .content,.content .content .content .content .content .content .content{background-color:#fff}.h5p-li>.list-item-title-bar{color:#fff}.h5p-li>.list-item-title-bar>.h5peditor-label{overflow:hidden;margin:0 54px 0 0;padding:0 10px;white-space:nowrap;line-height:38px;outline:none;text-overflow:ellipsis}.h5p-li>.list-item-title-bar>.list-actions{height:100%;float:right;position:relative}.h5p-li>.list-item-title-bar .remove{cursor:pointer;width:1.25em;height:38px;font-size:1.75em;display:inline-block}.h5p-li>.list-item-title-bar .remove:hover{opacity:1;text-decoration:none}.h5p-li>.list-item-title-bar .remove:after{font-family:"H5P";content:"";opacity:.7;display:inline-block;line-height:38px}.h5p-li>.list-item-title-bar .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar .order-group{text-align:center;float:right;background:#636164;font-size:16px;cursor:pointer}.h5p-li>.list-item-title-bar .order-up,.h5p-li>.list-item-title-bar .order-down{width:19px;height:19px;line-height:19px}.h5p-li>.list-item-title-bar .order-up:hover,.h5p-li>.list-item-title-bar .order-down:hover{background:#636164}.h5p-li>.list-item-title-bar .order-up:after,.h5p-li>.list-item-title-bar .order-down:after{font-family:"H5P";content:"";display:inline-block}.h5p-li>.list-item-title-bar .order-down:after{content:""}.h5p-li>.list-item-title-bar.importance-high>.title{border:none;margin:0 74px 0 0}.h5p-li>.list-item-title-bar.importance-high .remove{height:42px;line-height:42px;font-size:40px}.h5p-li>.list-item-title-bar.importance-high .remove:after{line-height:42px;opacity:.7}.h5p-li>.list-item-title-bar.importance-high .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar.importance-high .order-group{background:#1f67a8;font-size:18px}.h5p-li>.list-item-title-bar.importance-high .order-up,.h5p-li>.list-item-title-bar.importance-high .order-down{width:21px;height:21px;line-height:21px}.h5p-li>.list-item-title-bar.importance-high .order-up:hover,.h5p-li>.list-item-title-bar.importance-high .order-down:hover{background:#1f67a8}.h5p-li>.list-item-title-bar.importance-low>.title{border:none;margin:0 54px 0 0}.h5p-li>.list-item-title-bar.importance-low>.title:before{color:#212121}.h5p-li>.list-item-title-bar.importance-low>.title:focus:before{outline:1px dashed #212121}.h5p-li>.list-item-title-bar.importance-low .remove{height:38px;line-height:38px;font-size:30px}.h5p-li>.list-item-title-bar.importance-low .remove:after{line-height:38px}.h5p-li>.list-item-title-bar.importance-low .remove:after{color:#212121;opacity:.7}.h5p-li>.list-item-title-bar.importance-low .remove:hover:after{opacity:1}.h5p-li>.list-item-title-bar.importance-low .order-up,.h5p-li>.list-item-title-bar.importance-low .order-down{width:19px;height:19px;background:#d0d0d1;font-size:16px;line-height:19px}.h5p-li>.list-item-title-bar.importance-low .order-up:hover,.h5p-li>.list-item-title-bar.importance-low .order-down:hover{background:#deddde}.h5p-li>.list-item-title-bar.importance-low .order-up:after,.h5p-li>.list-item-title-bar.importance-low .order-down:after{color:#212121}.group.expanded>.content,.listgroup.expanded>.content{display:block}.listgroup>.list-item-title-bar>.h5peditor-label{cursor:pointer}.list-item-title-bar>.title:before,.group>.title:before{content:"";font-family:"H5P";margin-right:5px}.list-item-title-bar>.title:focus:before,.group>.title:focus:before{outline:1px dashed #fff}.listgroup.expanded>.list-item-title-bar>.h5peditor-label:before,.expanded>.title:before{content:""}.listgroup>.group.field{margin:0;padding:0;min-width:0}.content{display:block;margin:0;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff}.common{margin-top:20px}.common>.h5peditor-label{margin:0;padding:0 10px;cursor:pointer;font-size:1em}.common>.h5peditor-label>.icon:before{content:"";font-family:"H5P";margin-right:5px}.common>.h5peditor-label:hover>.icon{opacity:1}.common>.h5peditor-label:focus{outline:none}.common>.h5peditor-label:focus>.icon:before{outline:1px dashed}.common>.fields{min-height:2em;padding:20px;border:1px solid #d0d0d1;border-top:none;background:#fff;position:relative}.common>.fields>.desc{margin:0;font-size:.875em;color:#666;float:left}.common>.fields p:first-child{margin-bottom:20px}.common.collapsed>.h5peditor-label>.icon:before{content:""}.common.collapsed>.fields{display:none}.common.hidden{display:none}.h5peditor-button[aria-label]:before{content:attr(aria-label);visibility:hidden;position:absolute;top:115%;right:-10%;z-index:2;padding:.25em .75em;background:#212121;color:#fff;white-space:nowrap;font-size:14px;line-height:1.5;box-shadow:0 0 .5em #858585}.h5peditor-button[aria-label]:hover:before{visibility:visible}.h5peditor-button[aria-label][aria-disabled=true]:before{display:none}.h5peditor .h5p-editing-image-button{background:linear-gradient(to bottom, #fff 0, #f2f2f2 100%);font-size:14px;color:#212121;line-height:28px;padding-right:20px;margin-right:.5em;height:30px;padding-left:0;font-weight:normal}.h5peditor .h5p-editing-image-button:hover:not([disabled]){background:linear-gradient(to bottom, #fff 0, #d0d0d1 100%);border-color:#999}.h5peditor .h5p-editing-image-button:before{font-family:"H5P";content:"";color:#666;padding-right:.3em;padding-left:.45em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor .h5p-editing-image-button.loading:before{content:""}.h5peditor .h5p-editing-image-button.hidden,.h5peditor .h5p-copyright-button.hidden{display:none !important}.h5peditor .ui-dialog .h5p-editing-image-button,.h5peditor .ui-dialog .h5p-copyright-button{padding-left:.5em}body.h5p-editor-image-popup{position:relative}.h5p-editing-image-popup-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,.8);padding:3em 1em;box-sizing:border-box;z-index:102}#darkroom-icons{top:0;left:0}.h5p-editing-image-popup-background.hidden{display:none}.h5p-editing-image-popup{display:inline-block;position:relative;top:0;background:#fff;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.h5p-editing-image-header{padding:1em .75em}.h5p-editing-image{max-height:100%;max-width:100%}.h5p-editing-image.hidden{display:none}.h5p-editing-image-popup .darkroom-toolbar{position:relative;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;top:0}.h5p-editing-image-popup .darkroom-toolbar:before{content:initial}.h5p-editing-image-popup .darkroom-image-container{padding:32px 2em}.h5p-editing-image-popup .darkroom-image-container .canvas-container{box-shadow:0 0 8px 3px rgba(0,0,0,.6);margin:auto}.h5p-editing-image-header-title{display:inline-block;font-size:1.25em}.h5p-editing-image-header-buttons{display:inline-block;float:right}.h5p-editing-image-loading{padding:1em}.h5p-editing-image-loading.hidden{display:none}.h5p-editing-image-editing-container{background:#666}.h5p-editing-image-header-buttons button{padding:.5em 1.75em;margin:0 0 0 1em;border:1px solid #ccc;border-radius:.25em;color:#333;cursor:pointer;background:#f2f2f2;background:-webkit-linear-gradient(top, #fff 0, #f2f2f2 100%);background:-ms-linear-gradient(top, #fff 0, #f2f2f2 100%)}.h5p-editing-image-header-buttons button:hover{background:#ededed}.h5p-editing-image-header-buttons .h5p-done{color:#fff;border-color:#20588f;background:#3673b5;background:-webkit-linear-gradient(top, #5A94D3 0, #3673B5 100%);background:-ms-linear-gradient(top, #5A94D3 0, #3673B5 100%)}.h5p-editing-image-header-buttons .h5p-done:hover{background:#3275bc;background:-webkit-linear-gradient(top, #3275bc 0, #285585 100%);background:-ms-linear-gradient(top, #3275bc 0, #285585 100%)}.h5p-editing-image-header-buttons .h5p-remove{background:none;border:none;color:#a00;padding-right:0;padding-left:0;border-radius:0}.h5p-editing-image-header-buttons .h5p-remove:hover{background:none;color:#e40000}.h5p-vtab-wrapper>.h5p-vtab-forms .h5p-remove:after{color:#d0d0d1}html,body{margin:0;padding:0;color:#212121;font-family:"Open Sans",sans-serif;max-width:960px;position:relative}a{text-decoration:none}.offsite{left:-9999px;opacity:0;position:absolute;top:0}.h5peditor{font-size:16px}.h5peditor .h5p-more-libraries{font-size:.875em;margin-top:.4em}.h5peditor .h5peditor-single>.field.library{border:0;padding:0}.h5peditor .cke_dialog_background_cover{width:100% !important;height:100% !important}.h5peditor .errors p,.h5peditor .h5p-errors{color:#da0001;white-space:normal}.h5peditor textarea{resize:vertical}.h5peditor .h5p-editor-flex-wrapper{display:flex;flex-direction:row}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse{align-items:flex-end;margin-bottom:.5rem;width:100%}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse.has-label{justify-content:space-between;gap:.5rem}.h5peditor .h5p-editor-flex-wrapper.has-button-collapse:not(.has-label){justify-content:flex-end}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse{align-items:center;background-color:#228380;background-image:none;border:3px solid #228380;border-radius:.4rem;box-sizing:border-box;display:grid;font-size:.815rem;font-weight:bold;grid-template-columns:auto 1fr;height:2.6rem;line-height:1.2rem;margin:0;padding:0 .6rem 0 .2rem}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse .label{white-space:nowrap}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.collapsed .icon::before{content:"";font-family:"H5P";font-size:1.2rem;font-weight:normal;padding:0 .2rem 0 .2rem;vertical-align:middle}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse:not(.collapsed) .icon::before{content:"";font-family:"H5P";font-size:1.2rem;font-weight:normal;padding:0 .2rem 0 .2rem;vertical-align:middle}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse:hover:not([disabled]){background-color:#228380;background-image:none;border:3px solid #4dc2bf}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.no-label{grid-template-columns:auto;padding:0 .2rem;width:auto}.h5peditor .h5p-editor-flex-wrapper .h5peditor-button-collapse.no-label .label{display:none}.h5peditor .h5peditor-label-wrapper{display:flex;flex-direction:row}.h5peditor .has-important-description .h5peditor-field-description{display:none}.h5peditor .has-important-description .h5peditor-label-wrapper{float:left}.h5peditor .important-description-visible .h5peditor-field-important-description{display:block}.h5peditor .important-description-visible .h5peditor-label-wrapper{float:none}.h5peditor .important-description-visible .important-description-show{display:none}.h5peditor textarea,.h5peditor .h5peditor-text,.h5peditor .ckeditor{box-shadow:inset 0px 0px 5px rgba(0,0,0,.12);box-sizing:border-box;margin:0;padding:10px;min-height:40px;border:1px solid #d0d0d1;background:#fff;outline:none;font-size:16px;word-wrap:break-word}.h5peditor textarea.error,.h5peditor .h5peditor-text.error,.h5peditor .ckeditor.error{border-color:red}.h5peditor .h5peditor-text,.h5peditor textarea{width:100%;box-sizing:border-box}.h5peditor .h5peditor-text.error,.h5peditor textarea.error{border-color:red}.h5peditor textarea:focus::-webkit-input-placeholder,.h5peditor input:focus::-webkit-input-placeholder{color:#fff}.h5peditor textarea:focus:-moz-placeholder,.h5peditor input:focus:-moz-placeholder{color:#fff}.h5peditor textarea:focus::-moz-placeholder,.h5peditor input:focus::-moz-placeholder{color:#fff}.h5peditor textarea:focus:-ms-input-placeholder,.h5peditor input:focus:-ms-input-placeholder{color:#fff}.h5peditor textarea:focus.h5peditor-ckeditor-placeholder,.h5peditor input:focus.h5peditor-ckeditor-placeholder{color:#fff}.h5peditor ::-webkit-input-placeholder{color:#858585}.h5peditor :-moz-placeholder{color:#858585}.h5peditor ::-moz-placeholder{color:#858585}.h5peditor :-ms-input-placeholder{color:#858585}.h5peditor .h5peditor-ckeditor-placeholder{color:#858585}.h5peditor>select,.h5peditor .h5peditor-language-switcher select,.h5peditor h5peditor-select,.h5peditor .field>select{padding:10px 30px 10px 8px;font-family:"Open Sans",sans-serif;font-size:16px;border:1px solid #d0d0d1;background:#fff inline-image("down.png") no-repeat;background-position:calc(100% - 10px);box-shadow:inset 0px 0px 5px rgba(0,0,0,.12);-moz-appearance:none;-webkit-appearance:none}.h5peditor>select:disabled,.h5peditor .h5peditor-language-switcher select:disabled,.h5peditor h5peditor-select:disabled,.h5peditor .field>select:disabled{background-color:#efefef}.h5peditor>select{margin-bottom:13px;margin-right:20px}.h5peditor select::-ms-expand{display:none}.h5peditor a:focus{outline:none}.h5peditor textarea:focus,.h5peditor .h5peditor-text:focus{outline:none;background-color:#fff;border-color:#53a0ff}.h5peditor .h5p-ul{padding:0;margin:0;list-style:none}.h5peditor .h5p-ul .h5p-li{margin:10px 0;padding:0;list-style:none}.h5peditor .h5p-ul .h5p-li:first-child{margin-top:0}.h5peditor .h5p-ul .h5p-li:last-child{margin-bottom:0}.h5peditor .h5p-ul .h5p-li.placeholder{box-sizing:border-box;background:#e8f2fa;border:dashed 2px #2782d1}.h5peditor .h5p-ul .h5p-li:hover{text-decoration:none}.h5peditor .h5p-ul .h5p-li:nth-child(2).moving{margin-top:0}.h5peditor .h5p-ul .h5p-li:nth-last-child(2).placeholder{margin-bottom:0}.h5peditor .dimensions input,.h5peditor .coordinates input,.h5peditor .number input{width:75px}.h5peditor .number input[type=range]{width:300px;float:left;margin:7px 8px 0 0}.h5peditor .h5p-errors{clear:both}.h5peditor .h5p-add-file{float:left;position:relative;background:rgba(0,0,0,0);border:2px dashed #ddd;color:#ddd;margin:.5em;width:6em;height:4.5em;cursor:pointer;outline:none;box-sizing:border-box;-moz-box-sizing:border-box}.h5peditor .h5p-add-file:focus,.h5peditor .h5p-add-file:hover{color:#999;border-color:#999}.h5peditor .h5p-add-file.hidden{visibility:hidden}.h5peditor .h5p-add-file:after{position:absolute;content:"+";font-size:2em;line-height:2.2em;width:100%;height:100%;text-align:center}.h5peditor .h5p-add-dialog{position:absolute;z-index:1;visibility:hidden;opacity:0;background:#fff;left:1em;right:1em;top:1em;border:1px solid #cdcdcd;box-sizing:border-box;-moz-box-sizing:border-box;box-shadow:0 0 8px #666;transition:visibility 0s .2s,opacity .2s}.h5peditor .h5p-add-dialog.h5p-open{visibility:visible;opacity:1;transition:visibility 0s 0s,opacity .2s}.h5peditor .h5p-add-dialog .h5p-add-dialog-table{overflow:hidden}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tablist{overflow:hidden;margin:1em 1em 0 1em}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab{cursor:pointer;float:left;padding:.5em .75em;border-top:1px solid #ccc;border-right:1px solid #ccc;font-weight:bold;font-size:15px;color:#666;background:#f5f5f5}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab:first-child{border-left:1px solid #ccc}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tab.selected{color:#333;background:#fff}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel{border:1px solid #ccc;margin:0 1em 1em 1em;overflow:hidden;padding:1em}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel h3{margin:0 0 1em 0}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .av-tabpanel .h5p-file-drop-upload{width:90px;margin:0}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box{float:left;padding:0;width:60%;margin-right:5%;margin-left:4%;text-align:left;margin-top:30px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box:first-child{width:22%;margin-left:3%;margin-right:1%}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-dialog-box:first-child h3{text-align:center}.h5peditor .h5p-add-dialog .h5p-add-dialog-table h3{color:#666;font-size:1em;margin:1.2em 0;line-height:1.1em}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5peditor-field-description{color:#bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper{background-color:#f5f5f5;border:1px solid #bbb;padding:15px 15px 15px 60px;position:relative}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper:before{font-family:"H5P";position:absolute;left:0;top:.083em;font-size:3.8em;line-height:1}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper.video:before{content:"";color:#dd0505}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper.audio:before{content:"";color:#747275}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-url-wrapper input{border-color:#bbb;text-align:left;padding-left:20px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload{position:relative;width:70%;height:90px;margin:0 15%;float:left;background-color:#f5f5f5;text-align:center;cursor:pointer;border:1px solid #bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner{border:2px dashed #bbb;background-color:#fff;position:absolute;top:3px;bottom:3px;left:3px;right:3px}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner:after{font-family:"H5P";line-height:1.4em;font-size:3.5em;color:#bbb}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner.video:after{content:""}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload .h5p-file-drop-upload-inner.audio:after{content:""}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload:hover .h5p-file-drop-upload-inner:after,.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-file-drop-upload.over .h5p-file-drop-upload-inner:after{color:#999}.h5peditor .h5p-add-dialog .h5p-add-dialog-table .h5p-or-vertical{float:left;position:relative;width:5%;height:250px}.h5peditor .h5p-add-dialog .h5p-dialog-box{text-align:center;padding:1em .5em}.h5peditor .h5p-add-dialog .h5p-buttons{padding:.5em;border-top:1px solid #cdcdcd;background:#ddd;text-align:right}.h5peditor .h5p-or{border-bottom:1px solid #cdcdcd;padding:0;margin:0 1em;text-align:center;height:.5em;line-height:1em}.h5peditor .h5p-or>span{background:#fff;padding:0 .5em}.h5peditor .h5p-or-vertical{float:left;position:relative;width:50px;height:80px}.h5peditor .h5p-or-vertical .h5p-or-vertical-line{position:absolute;margin:10px 0;left:49%;top:0;bottom:0;width:1px;background:#ccc;z-index:1}.h5peditor .h5p-or-vertical .h5p-or-vertical-word-wrapper{text-align:center;height:18px;position:absolute;left:0;right:0;top:22%;margin-top:-12px;z-index:2}.h5peditor .h5p-or-vertical .h5p-or-vertical-word-wrapper .h5p-or-vertical-word{color:#999;font-weight:bold;font-size:18px;padding:3px;background:#fff}.h5peditor .h5p-file-url{text-align:center}.h5peditor .h5p-thumbnail{margin:.5em;width:6em;height:4.5em;display:block;float:left;position:relative;box-shadow:0 0 10px 0 #666;border:1px solid #fff;box-sizing:border-box;-moz-box-sizing:border-box}.h5peditor .h5p-thumbnail .h5p-remove{position:absolute;top:0;right:0;cursor:pointer;outline:none;width:1.6em;height:1.6em;line-height:1.6em;overflow:hidden;text-indent:-0.4em;padding:.065em;opacity:.6}.h5peditor .h5p-thumbnail .h5p-remove:hover,.h5peditor .h5p-thumbnail .h5p-remove:focus{opacity:1}.h5peditor .h5p-thumbnail .h5p-remove:after{font-family:"H5P";font-size:2em;color:#fff;content:"";opacity:.6}.h5peditor .h5p-type{position:absolute;width:100%;height:100%;font-size:1.1em;line-height:4em;display:block;text-align:center;background:#000;color:#fff;cursor:pointer}.h5peditor .file{position:relative;float:left;margin-bottom:0;max-width:100%}.h5peditor .file.authorList{float:none}.h5peditor .file.field{float:none}.h5peditor .file .thumbnail{display:inline-block;margin:10px 10px 10px 0;box-shadow:0 0 10px 0 #666;border:1px solid #fff;cursor:pointer;max-width:100%;min-width:1em;min-height:1em;background:#fff inline-image("transparent-background.png") repeat}.h5peditor .file .thumbnail:focus{box-shadow:0 0 10px 0 #222}.h5peditor .file .add{display:inline-block;cursor:pointer;padding:.5em 1.5em .5em 3em;background:linear-gradient(to bottom, #fbfbfb 0, #f2f2f2 100%);border:1px solid #d0d0d1;border-radius:.25em;color:#222;font-weight:bold;line-height:normal}.h5peditor .file .add:hover{background:#ededed}.h5peditor .file .add:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor .file .add .h5peditor-field-file-upload-text:before{font-family:"H5P";content:"";line-height:1;color:#39c943;font-size:2em;position:absolute;left:.3em;top:.1em}.h5peditor .file .remove{display:block;position:absolute;top:7px;right:7px;cursor:pointer}.h5peditor .file .remove:focus:before{opacity:1}.h5peditor .file .remove:before{font-family:"H5P";font-size:1.4em;color:#fff;content:"";opacity:.6;text-shadow:rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px}.h5peditor .file .remove:hover{text-decoration:none}.h5peditor .file .remove:hover:before{color:#fff;opacity:1;text-shadow:rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px,rgba(0,0,0,.4) 0 0 4px}.h5peditor .file img{max-width:100%;vertical-align:bottom;max-height:100px}.h5peditor .file .h5p-av-row{overflow:auto;margin-bottom:.5em}.h5peditor .file .h5p-av-row .h5p-thumbnail{display:table-cell}.h5peditor .file .h5p-av-row .h5p-video-quality{display:table-cell;overflow:hidden;width:10000px;padding-left:1em}.h5peditor .file .h5p-av-row .h5p-video-quality input.h5peditor-text{width:100%}.h5peditor .file .h5p-av-cell{overflow:auto;float:left}.h5peditor .video .file,.h5peditor .audio .file{position:static;overflow:visible}.h5peditor .video .file .thumbnail,.h5peditor .video .file .add,.h5peditor .audio .file .thumbnail,.h5peditor .audio .file .add{float:left}.h5peditor .video .file .add,.h5peditor .audio .file .add{margin-top:8px}.h5peditor .video .file .thumbnail,.h5peditor .audio .file .thumbnail{overflow:visible;position:relative;cursor:auto}.h5peditor .video .file .remove,.h5peditor .audio .file .remove{top:-3px;right:-5px}.h5peditor .video .file .type,.h5peditor .audio .file .type{padding:16px 8px 4px;background:#000;color:#fff;font-size:10px}.h5peditor .video .file .h5peditor-uploading,.h5peditor .audio .file .h5peditor-uploading{float:left;margin:.5em}.h5peditor .libwrap{margin-top:20px}.h5peditor .libwrap.no-margin,.h5peditor .libwrap:empty{margin-top:0}.h5peditor input[type=checkbox]{margin:4px 4px 4px 0;vertical-align:bottom}.h5peditor .moving{position:absolute;z-index:1;opacity:.8;-webkit-transform:translateZ(0)}.h5peditor .moving .h5peditor-label{cursor:grabbing;cursor:-moz-grabbing;cursor:-webkit-grabbing}.h5peditor .h5peditor-uploading,.h5peditor .h5peditor-loading{padding-top:10px;padding-bottom:6px;font-size:14px}.h5peditor .h5peditor-loading{padding:.875em 0 1em 3.25em;font-style:italic}.h5peditor .h5p-copyright-button{border-radius:.25em;height:30px;background:linear-gradient(to bottom, #fff 0, #f2f2f2 100%);border:1px solid #d0d0d1;color:#212121;font-size:14px;line-height:28px;padding-right:20px;padding-left:0;clear:both;font-weight:normal}.h5peditor .h5p-copyright-button:before{font-family:"H5P";content:"";color:#666;padding:0 .25em 0 .25em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor .h5p-copyright-button:hover:not([disabled]){background:linear-gradient(to bottom, #fff 0, #d0d0d1 100%);text-decoration:none;border-color:#999}.h5peditor .h5p-copyright-button:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor .field.file>.h5p-copyright-button,.h5peditor .field.video>.h5p-copyright-button,.h5peditor .field.audio>.h5p-copyright-button{float:left}.h5peditor .h5p-editor-dialog{position:absolute;z-index:2;margin:5.5em 0 1em;visibility:hidden;opacity:0;height:0;overflow:hidden;background:#fff;box-shadow:0 0 8px #666;transition:visibility 0s .2s,height 0s .2s,opacity .2s,margin-top .2s}.h5peditor .h5p-editor-dialog.h5p-open{margin-top:3.5em;visibility:visible;opacity:1;height:auto;transition:visibility 0s 0s,height 0s 0s,opacity .2s,margin-top .2s}.h5peditor .h5p-editor-dialog>.field{margin:0;border:0;box-shadow:none}.h5peditor .h5p-editor-dialog .content{border:none;background:#fff}.h5peditor .h5p-editor-dialog .content .h5peditor-label{font-size:18px;font-weight:600}.h5peditor .h5p-editor-dialog .h5p-close{color:#494949}.h5peditor .h5p-editor-dialog .h5p-close:before{font-size:2em;right:-0.125em;top:0;position:absolute;z-index:1;font-family:"H5P";content:"";line-height:1em;transition:scale .2s}.h5peditor .h5p-editor-dialog .h5p-close:hover:before{scale:1.1,1.1}.h5peditor .h5p-li>.content>.library{border:0;padding:0}.h5p-editor-dialog.h5p-dialog-wide{width:90%;border-radius:.208em}.h5peditor-button-textual{border-radius:.25em;background:#747275;background-image:linear-gradient(#7b797c 50%, transparent 50%, transparent);display:inline-block;width:auto;margin:10px 0 0 0;padding:0 20px;box-sizing:border-box;height:38px;border:1px solid #d0d0d1;font-size:16px;font-family:"Open Sans",sans-serif;line-height:38px;color:#fff;cursor:pointer;font-weight:600;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5peditor-button-textual:focus{box-shadow:0 0 16px 0 rgba(133,188,255,.84)}.h5peditor-button-textual:before,.h5peditor-button-textual:after{color:#fff}.h5peditor-button-textual .h5p-editing-image-button:before{font-family:"H5P";content:"";color:#666;padding-right:.25em;vertical-align:middle;font-size:1.5em;line-height:.9}.h5peditor-button-textual:hover:not([disabled]){background:#636164;background-image:linear-gradient(#6b696c 50%, transparent 50%, transparent);text-decoration:none}.h5peditor-button-textual.importance-high{background:#2579c6;background-image:linear-gradient(#3080c9 50%, transparent 50%, transparent);border-color:#1f67a8;text-transform:uppercase;height:42px;line-height:42px}.h5peditor-button-textual.importance-high:hover:not([disabled]){background:#1f67a8;background-image:linear-gradient(#2a6fac 50%, transparent 50%, transparent);border-color:#1f67a8}.h5peditor-button-textual.importance-low{background:#f5f5f5;background-image:linear-gradient(#eeeeef 50%, transparent 50%, transparent);border-color:#d0d0d1;color:#212121}.h5peditor-button-textual.importance-low:before,.h5peditor-button-textual.importance-low:after{color:#212121}.h5peditor-button-textual.importance-low:hover:not([disabled]){background:#deddde;background-image:linear-gradient(#deddde 50%, transparent 50%, transparent);border-color:#deddde}.h5peditor-button-textual[disabled],.h5peditor-button-textual[aria-disabled=true]{background:#f5f5f5;color:#707171;border-color:#eee;cursor:not-allowed}.h5peditor-button-textual[disabled]:before,.h5peditor-button-textual[aria-disabled=true]:before{font-family:"H5P";content:"";color:#707171;margin-right:.5em;vertical-align:top}.h5peditor-field-description,.h5p-help-text{font-size:12px;margin-top:.3em;margin-bottom:1em;font-weight:500;color:#434446;line-height:15px;letter-spacing:.5px}.h5peditor-field-important-description{position:relative;padding:1.5em 2.2em 2em 2.2em;font-size:.9em;margin:0 0 20px 0;border:1px solid #ffde78;background-color:#f9f9d8;color:#000;display:none}.h5peditor-field-important-description .important-description-close{position:absolute;font-size:.9em;line-height:2em;right:1.5em;top:1em;user-select:none;cursor:pointer}.h5peditor-field-important-description .important-description-close:before{font-family:"H5P";content:"";vertical-align:top;font-size:1.6em}.h5peditor-field-important-description .h5p-info-icon{font-size:.75em}.h5peditor-field-important-description .h5p-info-icon:before{font-family:"H5P";content:"";font-size:2.3em;line-height:.94em;margin-left:-0.3em;vertical-align:middle}.h5peditor-field-important-description .important-description-title{font-weight:bold;font-size:1.2em;vertical-align:bottom}.h5peditor-field-important-description .important-description-content ul{padding:0;line-height:2em;margin-top:20px}.h5peditor-field-important-description .important-description-content ul li{line-height:1.8em;margin-left:1.5em}.h5peditor-field-important-description .important-description-example{border:1px solid #bbde98;background-color:#d9fac3;display:flex;margin-top:20px}.h5peditor-field-important-description .important-description-example .important-description-example-title{padding:15px;font-weight:bold}.h5peditor-field-important-description .important-description-example .important-description-example-text{padding:15px;width:100%;background-color:#f6fef1}.h5peditor-form{position:relative;background:#fcfcfc;border:1px solid #d0d0d1}.h5peditor-form.h5peditor-form-manager>.tree,.h5peditor-form.h5peditor-form-manager>.common,.h5peditor-form.h5peditor-form-manager>.field{max-width:918px;margin:20px auto;padding:0 20px}.h5peditor-form.h5peditor-semi-fullscreen{margin:0;position:fixed;overflow-y:scroll;margin-top:40px;padding-bottom:40px;box-sizing:border-box;background:#fff;height:calc(100% - 40px)}.h5peditor-label{display:block;margin-bottom:6px;font-weight:600;font-size:16px;color:#454347}.h5peditor-label-button{background:rgba(0,0,0,0);border:none;color:#454347;cursor:pointer;display:flex;flex-direction:row;font-family:inherit;font-weight:600;font-size:16px;padding:0 0 0 10px;text-align:left}.h5peditor-label-button.collapsed .icon::before{content:"";font-family:"H5P";margin-right:5px}.h5peditor-label-button:not(.collapsed) .icon::before{content:"";font-family:"H5P";margin-right:5px}#h5peditor-uploader{position:absolute;width:1px;height:1px;top:-1px;border:0;overflow:hidden}.h5p-tutorial-url,.h5p-example-url{font-size:1em;display:inline-flex;align-items:center;line-height:1;margin-right:1em;margin-bottom:.5em;margin-left:.25em;height:2rem;border-radius:1rem}.h5p-tutorial-url:focus,.h5p-example-url:focus{box-shadow:0px 0px 5px #1634f7}.h5p-tutorial-url:active,.h5p-example-url:active{border-color:#1c70ba}.h5p-tutorial-url::before,.h5p-example-url::before{font-family:"H5P";font-size:1.25em;border-radius:50%;width:2rem;height:2rem;position:absolute;display:flex;justify-content:center;align-items:center}.h5p-tutorial-url .h5p-tutorial-url-label,.h5p-tutorial-url .h5p-example-url-label,.h5p-example-url .h5p-tutorial-url-label,.h5p-example-url .h5p-example-url-label{font-style:italic;font-weight:bold;text-decoration:underline;margin:.25em .5em;margin-left:2rem;padding-left:.5em;padding-right:1em}.h5p-tutorial-url:active,.h5p-tutorial-url:hover{background-color:#eaffab}.h5p-tutorial-url::before{content:"";color:#eaffab;background-color:#749e00}.h5p-tutorial-url .h5p-tutorial-url-label{color:#415702}.h5p-example-url:active,.h5p-example-url:hover{background-color:#f8d4ff}.h5p-example-url::before{content:"";font-size:1em;color:#f8d4ff;background-color:#8f4f9c}.h5p-example-url .h5p-example-url-label{color:#422447}.h5peditor-widget-select{display:flex;flex-direction:row-reverse;justify-content:end;overflow:hidden;margin:0 0 -1px;padding:0;list-style:none}.h5peditor-widget-option{border:1px solid #ccc;border-bottom:0;margin-left:.5em;padding:.6em 1em;color:#0e1a25;font-size:.875em;background:#f5f5f5;line-height:1.285714286em;cursor:pointer;outline:none}.h5peditor-widget-option:hover{color:#000}.h5peditor-widget-option:active{color:#8e636a}.h5peditor-widget-active{background:#fff;line-height:1.357142857em}.h5peditor-widgets>.h5peditor-widget-wrapper{border:1px solid #ccc;margin:0 0 .25em;padding:.5em}.h5peditor-widgets>.h5peditor-label,.h5peditor-widgets>.h5peditor-label-button{float:left;margin-top:5px}.h5p-editor-iframe{margin-bottom:1em}.h5peditor-required:after{content:"*";color:#da0001;margin-left:.2em;position:relative;top:-0.2em}.h5peditor .cke_bottom,.h5peditor .cke_top{background:#d0d0d1}.h5peditor .cke_chrome{border:1px solid #f5f5f5;background:#d0d0d1}.h5peditor .cke_contents,.h5peditor .cke_toolgroup,.h5peditor .cke_combo_button{border:1px solid #f5f5f5}.important-description-show{background:#f3d55a;padding:.2em .5em .2em 1.7em;margin-bottom:.5em;font-size:.9em;cursor:pointer;float:right;position:relative;line-height:normal;font-style:italic;font-weight:bold}.important-description-show:before{font-family:"H5P";font-style:normal;font-weight:normal;content:"";font-size:1.8em;position:absolute;left:0em;top:0em;line-height:.85em;vertical-align:top}.important-description-clear-right{display:block;clear:right}.h5peditor fieldset.common-fields-library-wrapper{width:100%;padding:0 1em 1em;box-sizing:border-box;height:20px;border:solid 1px #e2e5ee;border-radius:4px;margin-bottom:1em}.h5peditor fieldset.common-fields-library-wrapper>*{display:none}.h5peditor fieldset.common-fields-library-wrapper>legend{display:block;cursor:pointer;outline:none;color:#363b42;background-color:#fff;padding:10px;font-weight:bold;font-size:.875em}.h5peditor fieldset.common-fields-library-wrapper>legend:before{font-family:"H5P";content:"";margin-right:.5em}.h5peditor fieldset.common-fields-library-wrapper>legend:focus:before{outline:1px dotted #666}.h5peditor fieldset.common-fields-library-wrapper.expanded{height:auto}.h5peditor fieldset.common-fields-library-wrapper.expanded>*{display:block}.h5peditor fieldset.common-fields-library-wrapper.expanded>legend:before{content:""}.h5p-metadata-button-wrapper{display:flex;flex-direction:row;align-items:center;margin-top:-7px;margin-left:7px;cursor:pointer}.h5p-metadata-button-wrapper.inline-with-selector{display:inline-flex;margin-left:17px}.h5p-metadata-toggler{margin-left:-11px;height:14.5px;max-height:14.5px;padding:.217rem .3rem .217rem .217rem;font-size:.625em;font-weight:bold;letter-spacing:.025em;border:1px solid #b6cada;border-left:none;border-radius:4px;background:linear-gradient(#fff, #deeaf1);color:#356593;z-index:1;justify-content:center;align-content:center;line-height:1.5em}.h5p-metadata-button-tip{width:16.5px;height:16.5px;content:"";background:linear-gradient(-215deg, #fff, #deeaf1);border:1px solid #b6cada;border-right:none;border-top:none;border-radius:4px;transform:rotate(45deg);z-index:0}.h5p-metadata-button-wrapper:hover .h5p-metadata-toggler,.h5p-metadata-button-wrapper:hover .h5p-metadata-button-tip{border-color:#6d9fce}.h5p-metadata-button-wrapper:hover .h5p-metadata-toggler{background:linear-gradient(#f3f8fb, #cee5f3)}.h5p-metadata-button-wrapper:hover .h5p-metadata-button-tip{background:linear-gradient(-215deg, #f3f8fb, #cee5f3)}.h5p-metadata-button-wrapper:active .h5p-metadata-toggler,.h5p-metadata-button-wrapper:active .h5p-metadata-button-tip{color:#294f73;border-color:#6d9fce}.h5p-metadata-button-wrapper:active .h5p-metadata-toggler{background:linear-gradient(#f3f8fb, #bcd4e2)}.h5p-metadata-button-wrapper:active .h5p-metadata-button-tip{background:linear-gradient(-215deg, #f3f8fb, #bcd4e2)}#metadata-title-main-label{margin-top:0}.h5p-metadata-button{background:#fff;padding:10px;text-align:center;border-radius:5px;border:2px solid #6b6b6b;color:#6b6b6b;font-weight:bold;display:inline;cursor:pointer}.h5p-metadata-button:hover{border-color:#4a4a4a;color:#4a4a4a}.h5p-metadata-button:active{border-color:#000;color:#000}.h5p-metadata-button.inverted{border:2px solid #0a715e;color:#0a715e}.h5p-metadata-button.inverted:hover{border-color:#0d826c;color:#0d826c}.h5p-metadata-button.inverted:active{border-color:#095345;color:#095345}.h5p-metadata-icon-button{border:none;cursor:pointer;color:#6b6b6b;background:rgba(0,0,0,0);padding:0}.h5p-metadata-icon-button:hover{color:#4a4a4a}.h5p-metadata-icon-button:active{color:#000}.h5p-metadata-wrapper{display:inline-block;background-color:#fff;max-width:700px;width:calc(100% - 4em);text-align:left;border-bottom:20px solid rgba(0,0,0,0);background-clip:padding-box;max-height:calc(100% - 40px);overflow:auto;margin-bottom:20px}.h5p-metadata-wrapper .h5p-metadata-header{display:flex;border-bottom:1px solid #ced6e3;padding:1.5em}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container{flex-grow:1;padding-left:3.5em;white-space:nowrap;overflow:hidden;margin-right:1%;position:relative}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container h2{margin:0}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container p{margin:.1em}.h5p-metadata-wrapper .h5p-metadata-header .h5p-title-container:before{position:absolute;font-family:"h5p-metadata-icons";content:"";left:0;top:0;font-size:2em;height:1.4em;line-height:1.3}.h5p-metadata-wrapper .h5p-save{border:solid 2px #0a715e;border-radius:.3rem;color:#fff;background-color:#0a715e;padding:.75rem;white-space:nowrap}.h5p-metadata-wrapper .h5p-save:hover{border-color:#0d826c;background-color:#0d826c}.h5p-metadata-wrapper .h5p-save:active{border-color:#095345;background-color:#095345}.h5p-metadata-wrapper .h5peditor-label{font-size:.8em;color:#333}.h5p-metadata-wrapper .h5peditor-field-description{color:#697484;margin-top:.35em;letter-spacing:.5px}.h5p-metadata-wrapper .copyright-form{margin-top:20px}.h5p-metadata-wrapper h2{font-size:1em;overflow:hidden;text-overflow:ellipsis}.h5p-metadata-wrapper p{font-size:.8333em;color:#697484;overflow:hidden;text-overflow:ellipsis;margin-bottom:0}.h5p-metadata-wrapper .errors p,.h5p-metadata-wrapper .h5p-errors p{color:#da0001;font-size:1em;white-space:normal;text-overflow:unset}.h5p-metadata-wrapper select.h5peditor-select,.h5p-metadata-wrapper input.h5peditor-text,.h5p-metadata-wrapper textarea{border:1px solid #b8c0cd;font-size:.833em;border-radius:.208em;box-shadow:none;font-family:"Open Sans",sans-serif}.h5p-metadata-wrapper select:focus,.h5p-metadata-wrapper input:focus,.h5p-metadata-wrapper textarea:focus{box-shadow:inset 0px 0px 10px rgba(0,0,0,.15)}.h5p-metadata-wrapper select{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper{display:flex;flex-wrap:wrap;margin:1.5em}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field{margin-bottom:0;width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-license{width:49%;margin-right:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-licenseVersion{width:49%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearFrom{width:24%;margin-right:1%;white-space:nowrap}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearFrom .h5peditor-text{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearTo{width:23%;margin-right:1%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-yearTo .h5peditor-text{width:100%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper>.field-name-source{width:49%;margin-left:1%}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label{justify-content:space-between}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle{background:none;border:none;cursor:pointer}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:before{font-family:"h5p-metadata-icons";content:"";margin-right:.5em;font-size:1.5em;vertical-align:middle}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:focus,.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:active,.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:hover{border:none}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-title label .a11y-title-toggle:hover .h5p-a11y-title-text{text-decoration:underline}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle{transition:max-height .2s,margin .2s;overflow:hidden}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle.hide{max-height:0;margin:0}.h5p-metadata-wrapper .h5p-metadata-fields-wrapper .field-name-a11yTitle.hidden{display:none}.h5p-metadata-wrapper .field.group>.title{font-weight:400;background:#f6f6f6;color:#323232;border:solid 1px #ced6e3;border-radius:.208em}.h5p-metadata-wrapper .field.group.expanded>.title{border-radius:.208em .208em 0 0}.h5p-metadata-wrapper .field.group>.title:focus{border-color:#4d90fe}.h5p-metadata-wrapper .field.group>.content{border:solid 1px #ced6e3;border-radius:0 0 .208em .208em;padding:20px;border-top:0}.h5p-metadata-additional-information{width:100%;margin-top:1em}.h5p-metadata-additional-information .content.h5peditor-single{min-height:2em;border:1px solid #d0d0d1;border-top:none;background:#fff}.h5p-metadata-additional-information .title{font-weight:400;background:#f6f6f6;color:#323232;border:solid 1px #ced6e3;border-radius:.208em}.h5p-metadata-additional-information .title:focus{border-color:#4d90fe}.h5p-metadata-popup-overlay{position:absolute;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,.85);z-index:101;text-align:center}.h5p-metadata-changelog{width:100%}.h5p-metadata-changelog .field-name-change.expanded .content{display:flex;flex-wrap:wrap}.h5p-metadata-changelog .field-name-change .field-name-date{width:49%;margin-bottom:.5em;margin-right:1%;margin-top:0}.h5p-metadata-changelog .field-name-change .field-name-date span{width:100%}.h5p-metadata-changelog .field-name-change .field-name-author{width:49%;margin-bottom:.5em;margin-left:1%;margin-top:0}.h5p-metadata-changelog .field-name-change .field-name-log{width:100%}.h5p-metadata-changelog .field-name-change .h5p-add-author:before{content:"+";margin-right:.7em}.h5p-metadata-changelog .field-name-change .h5p-cancel{margin-right:10px}.h5p-metadata-changelog .field-name-change .h5p-metadata-changelog-buttons{width:100%}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes{width:100%;margin-top:1em}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes.editing{display:none}.h5p-metadata-changelog .field-name-change .h5p-metadata-logged-changes .h5peditor-field-description{margin-bottom:0}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-wrapper{margin-top:1em;border:solid 1px #ced6e3;border-radius:.208em;max-height:15.917rem;overflow-y:auto;padding:0 .5em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log{display:flex;margin-top:.5em;padding-bottom:.5em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-delete{margin-left:2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-delete:after{font-family:"h5p-metadata-icons";content:"";font-size:1.2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log .h5p-metadata-edit:after{font-family:"h5p-metadata-icons";content:"";font-size:1.2em}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-buttons{min-width:3em;line-height:2.5}.h5p-metadata-changelog .field-name-change .h5p-metadata-log:not(:last-child){border-bottom:solid 1px #ced6e3}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-date{min-width:25%;font-size:.85em;font-style:italic;line-height:2.5}.h5p-metadata-changelog .field-name-change .h5p-metadata-description-wrapper{flex-grow:1;font-size:.85em;font-style:italic}.h5p-metadata-changelog .field-name-change .h5p-metadata-description-wrapper{font-weight:bolder}.h5p-metadata-changelog .field-name-change .h5p-metadata-log-author{font-weight:normal}.h5p-metadata-changelog .field-name-change .h5p-metadata-new-log-message{width:100%;background:#c5e7e1;padding:.5em;margin-bottom:1em;color:#0a715e}.h5p-metadata-author-widget{display:flex;flex-direction:column;border:solid 1px #ced6e3;border-radius:.208em;width:100%;padding:1em;margin-top:1em}.h5p-metadata-author-widget .h5p-save-author{border:solid 2px #0a715e;color:#fff;background-color:#0a715e}.h5p-metadata-author-widget .h5p-save-author:hover{border-color:#0d826c;color:#fff;background-color:#0d826c}.h5p-metadata-author-widget .h5p-save-author:active{border-color:#095345;color:#fff;background-color:#095345}.h5p-metadata-author-widget .h5p-author-data{display:flex;flex-direction:row;flex-wrap:nowrap}.h5p-metadata-author-widget .h5p-author-data>.field{margin-bottom:0}.h5p-metadata-author-widget .field-name-name{flex-grow:1;margin-right:2%;overflow:hidden;white-space:nowrap;min-width:49%}.h5p-metadata-author-widget .field-name-role{margin-top:0;margin-right:2%;width:25%;flex-grow:1;overflow:hidden;white-space:nowrap}.h5p-metadata-author-widget .authorList{margin-top:1.5em;white-space:nowrap}.h5p-metadata-author-widget .authorList li{display:inline;margin-right:.5em}.h5p-metadata-author-widget .authorList li span{margin-right:1em;font-style:italic}.h5p-metadata-author-widget .h5p-author-list-wrapper{margin-top:.5em}.h5p-metadata-author-widget .h5p-author-list-wrapper ul{margin:0;padding:0}.h5p-metadata-author-widget .h5p-author-list-wrapper li{display:inline-block;margin-right:2em;list-style:none;font-weight:bold;font-size:.8em}.h5p-metadata-author-widget .h5p-author-list-wrapper .h5p-metadata-role{font-style:italic;margin:0 .6em;font-weight:normal;font-size:.85em;color:#757575}.h5p-metadata-author-widget .h5p-author-list-wrapper button:after{font-family:"h5p-metadata-icons";content:"";font-size:1em;position:relative;top:-0.1em}.h5peditor-copypaste-wrap{float:right}.h5peditor>.h5peditor-copypaste-wrap{margin-bottom:14px}.h5peditor-copypaste-wrap.hidden{display:none}.h5peditor-clearfix{clear:both}.h5peditor-paste-button,.h5peditor-copy-button{border:1px solid #deeeec;padding:.5em .75em .75em .5em;margin-left:.5em;border-radius:.25em;cursor:pointer;background:#f2faff;line-height:.5em}.h5peditor-paste-button:hover,.h5peditor-copy-button:hover{border-color:#bbdae8}.h5peditor-paste-button:active,.h5peditor-copy-button:active{background-color:#deeffb}.h5peditor-paste-button.disabled,.h5peditor-copy-button.disabled{color:#707070;background-color:#f5f5f5;border-color:#ededed;cursor:not-allowed}.h5peditor-copy-button:before,.h5peditor-paste-button:before{font-family:"H5P";margin-right:5px;font-size:1.5em;position:relative;top:.2em;color:#2372b3}.h5peditor-copy-button:before{content:""}.h5peditor-paste-button:before{content:""}.h5peditor-copy-button.disabled:before,.h5peditor-paste-button.disabled:before{color:#707070}.h5peditor-copy-button.disabled:before{content:""}.h5peditor-paste-button.disabled:before{content:""}.h5p-hub .h5peditor-paste-button{font-family:"Open Sans",sans-serif;color:#fff;border:solid 1px #9fc8f4;padding:0 .75em .5em .75em;background:rgba(0,0,0,0);line-height:1;height:auto;margin-top:.675em;margin-right:.675em}.h5p-hub .h5peditor-paste-button:hover{background:#4b5460;border-color:#606a78}.h5p-hub .h5peditor-paste-button:active{background:#434b55}.h5p-hub .h5peditor-paste-button.disabled{border-color:#30353d;background:#30353d;color:#c2c2c2}.h5p-hub .h5peditor-paste-button:before{color:#9fc8f4}.h5p-hub .h5peditor-paste-button.disabled:before{color:#c3c3c3}@font-face{font-family:"h5p-fullscreen-bar";src:url(./fonts/h5p-fullscreen-bar.eot);src:url(./fonts/h5p-fullscreen-bar.eot#iefix) format("embedded-opentype"),url(./fonts/h5p-fullscreen-bar.ttf) format("truetype"),url(./fonts/h5p-fullscreen-bar.woff) format("woff"),url(./fonts/h5p-fullscreen-bar.svg#h5p) format("svg");font-weight:normal;font-style:normal}.h5peditor-form-manager-head{background:#f5f5f5;color:#414141;border-bottom:1px solid #dfdfdf;height:41px;line-height:40px;box-sizing:border-box;position:relative;display:flex;z-index:3;justify-content:space-between;align-items:flex-start;box-shadow:0px 2px 2px rgba(128,128,128,.15);padding:0 1em 0 .5em}.h5peditor-form-manager-button{background:rgba(0,0,0,0);padding:0;border:0;cursor:pointer;color:#414141;position:relative;white-space:nowrap;line-height:normal}.h5peditor-form-manager-button-inner{display:block;outline:none}.h5peditor-form-manager-breadcrumb{display:flex;min-width:0;flex-grow:1}.h5peditor-form-manager-proceed{display:none;background:#186df7;color:#fff;font-size:14px;font-weight:bold;font-family:Open Sans,sans-serif;border-radius:2px;margin-right:5px;margin-top:5px;padding:5px 10px}.h5peditor-form-manager-proceed:hover{background:#20588f}.h5peditor-form-manager-fullscreen{width:24px;height:24px;font-size:20px;margin-top:9px;margin-left:.25em}.h5peditor-form-manager-fullscreen .h5peditor-form-manager-button-inner:before{font-family:"h5p-fullscreen-bar";content:""}.h5peditor-form-manager-fullscreen:after{visibility:hidden;position:absolute;top:120%;right:-10%;z-index:3;padding:.25em .75em;background:#212121;color:#fff;white-space:nowrap;font-size:14px;box-shadow:0 0 .5em #858585;text-indent:0;font-weight:normal;pointer-events:none;outline:none;line-height:normal;content:attr(aria-label)}.h5peditor-form-manager-fullscreen:hover:after,.h5peditor-form-manager-fullscreen:focus:after{visibility:visible}.h5peditor-semi-fullscreen .h5peditor-form-manager-fullscreen .h5peditor-form-manager-button-inner:before{content:""}.h5peditor-semi-fullscreen .h5peditor-form-manager-proceed{display:block}.h5peditor-semi-fullscreen .h5peditor-form-manager-head{position:fixed;top:0;left:0;right:0;z-index:2}.form-manager-exit.form-manager-fullscreen .h5peditor-form-manager-button-inner:before{content:""}.h5peditor-form-manager-title{position:relative;min-width:20px;font-weight:bold;font-size:14px}.h5peditor-form-manager-title:before{font-family:"h5p-fullscreen-bar";content:"";font-size:1.2em;position:relative;top:.1em;margin-right:.25em;speak:none;font-style:normal;font-weight:normal;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.h5peditor-form-manager-title.dragtext:before{content:""}.h5peditor-form-manager-title.markthewords:before{content:""}.h5peditor-form-manager-title.multichoice:before{content:""}.h5peditor-form-manager-title.interactivevideo:before{content:""}.h5peditor-form-manager-title.audio:before{content:""}.h5peditor-form-manager-title.truefalse:before{content:""}.h5peditor-form-manager-title.dialogcards:before{content:""}.h5peditor-form-manager-title.questionnaire:before{content:""}.h5peditor-form-manager-title.coursepresentation:before{content:""}.h5peditor-form-manager-title.dragquestion:before{content:""}.h5peditor-form-manager-title.summary:before{content:""}.h5peditor-form-manager-title.singlechoiceset:before{content:""}.h5peditor-form-manager-title.blanks:before{content:""}.h5peditor-semi-fullscreen+.h5p-metadata-popup-overlay{position:fixed}.h5peditor-semi-fullscreen+.h5p-metadata-popup-overlay .h5p-metadata-wrapper{margin-top:20px !important}.h5peditor .h5peditor-language-switcher{float:right;white-space:nowrap;margin-bottom:1em}.h5peditor .h5peditor-language-switcher .language-label{padding:0 10px;font-size:15px}.h5peditor .h5peditor-language-switcher select{padding:6px 30px 6px 8px;font-size:15px}.h5peditor-language-notice{display:none;clear:both;font-size:14px;background:#dcf6ff;color:#295b7a;padding:10px 20px 10px 40px;margin:1em 0;line-height:1.5;position:relative}.h5peditor-language-notice:before{font-family:h5p;content:"";position:absolute;left:15px;font-size:1.125em}.h5peditor-language-notice.show{display:block}.h5peditor-language-notice .first{font-weight:bold}.h5peditor-language-notice a{text-decoration:underline} diff --git a/styles/css/fonts/play-icon.svg b/styles/css/fonts/play-icon.svg deleted file mode 100644 index 4fae56b2..00000000 --- a/styles/css/fonts/play-icon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/styles/css/fonts/upload-audio.svg b/styles/css/fonts/upload-audio.svg deleted file mode 100644 index ed298d0e..00000000 --- a/styles/css/fonts/upload-audio.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/styles/css/fonts/upload-image.svg b/styles/css/fonts/upload-image.svg deleted file mode 100644 index 5da31db0..00000000 --- a/styles/css/fonts/upload-image.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/styles/css/fonts/upload-video.svg b/styles/css/fonts/upload-video.svg deleted file mode 100644 index e69a2b0c..00000000 --- a/styles/css/fonts/upload-video.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/styles/scss/_form-field.scss b/styles/scss/_form-field.scss index 7eac8cbb..4439013a 100644 --- a/styles/scss/_form-field.scss +++ b/styles/scss/_form-field.scss @@ -20,6 +20,11 @@ display: inline; } + .h5p-editor-image-buttons { + float: left; + clear: both; + } + .library { border: 0; } @@ -31,7 +36,7 @@ .h5p-dialog-anchor { position: relative; - width: 100%; + margin: -16px; } } diff --git a/styles/scss/_h5peditor-drag-and-drop.scss b/styles/scss/_h5peditor-drag-and-drop.scss deleted file mode 100644 index 891ee4fb..00000000 --- a/styles/scss/_h5peditor-drag-and-drop.scss +++ /dev/null @@ -1,709 +0,0 @@ -.h5p-dnd__container { - clear: both; - margin-top: 0.5rem; -} - -.h5p-dnd__container, -.h5p-dnd__box, -.video-url-error-container { - &.has-error .h5p-errors { - margin-top: 1em; - display: flex; - align-items: center; - &:before { - font-family: $icon-font-family; - content: "\e859"; - font-size: 1.5em; - vertical-align: middle; - } - } - .h5p-errors { - display: none; - } -} - -.h5p-dnd__box { - display: flex; - flex-flow: row; - align-items: stretch; - justify-content: center; - border: solid 2px $dnd-gray-light; - border-radius: 6px; - flex: 1; - min-height: 150px; - position: relative; - background: none; - font-size: 14px; -} - -.h5p-dnd__box--is-dashed { - border: dashed 2px $dnd-gray-light; -} - -.h5p-dnd__box--is-inline { - display: inline-flex; -} - -.h5p-dnd__box--has-image { - flex-flow: column; - width: min-content; - min-height: auto; - min-width: 140px; -} - -.h5p-dnd__box:focus-visible { - outline: none; -} - -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading):hover { - border: dashed 2px $dnd-gray-dark; -} - -.h5p-dnd__box--has-image:not(.h5p-dnd__box--is-uploading):hover, -.h5p-dnd__box.h5p-dnd__box--is-focused:not(.h5p-dnd__box--is-uploading), -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading):focus, -.h5p-dnd__box.h5p-dnd__box--is-dragging:not(.h5p-dnd__box--is-uploading) { - border: solid 2px $dnd-blue; -} - - -.h5p-dnd__box:focus:not(.h5p-dnd__box--has-image):not(.h5p-dnd__box--is-uploading):not(.h5p-dnd__box--is-inline) { - .h5p-dnd__column--is-highlighted { - background: #fff; - } - .h5p-dnd__column:not(.h5p-dnd__column--is-highlighted):not(.h5p-dnd__column--tight) { - background: $dnd-blue-faded; - } -} - -.h5p-dnd__box__block { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - display: none; - z-index: 2; -} - -.h5p-dnd__box--is-dragging .h5p-dnd__box__block { - display: block; -} - -.h5p-dnd__column { - margin: 10px; - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - border-radius: 6px; - flex: 1; -} - -.h5p-dnd__column--is-highlighted { - background: $dnd-blue-faded; -} - -.h5p-dnd__column--is-fixed { - flex: 0 0 150px; -} - -.h5p-dnd__column--is-full-width { - flex: 1; -} -.h5p-dnd__column--show-when-focus { - display: none; -} - -.h5p-dnd__column--is-padded { - padding: 0 20px; -} - -.h5p-dnd__column--is-padded-small { - padding: 0 10px; -} - -.h5p-dnd__column.h5p-dnd__column--is-padded-small { - margin: 0; -} - -.h5p-dnd__box--is-dragging .h5p-dnd__column--hide-when-focus { - display: none; -} - -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--is-dragging .h5p-dnd__column--show-when-focus, -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-image:focus .h5p-dnd__column--show-when-focus { - display: flex; -} - -.h5p-dnd__column--tight { - max-height: 130px; - &:has(.h5p-dnd__video-container) { - margin-right: 0; - } -} - -.h5p-dnd__column__drag-text { - margin-top: -5px; -} - -.h5p-dnd__btn { - display: flex; - align-items: center; - justify-content: center; - padding: 8px 10px; - gap: 5px; - border-radius: 4px; - border: 1px solid #1F67A8; - background: #2579C6; - font-family: 'Open Sans', sans-serif; - font-size: 1em; - font-weight: 600; - color: #fff; - cursor: pointer; - - &:focus { - outline: solid 2px #1F67A8; - outline-offset: 2px; - } - - &:before { - font-family: $icon-font-family; - content: "\e85d"; - vertical-align: middle; - font-size: 1.5em; - line-height: 0.9; - font-weight: 400; - } -} - -.h5p-dnd__btn:hover { - background: #1F67A8; -} - -.h5p-dnd__btn:focus { - outline: solid 2px #1F67A8; - outline-offset: 2px; -} - -div:has(> .h5p-dnd__badge), -div:has(> .h5p-dnd-nowrap), -.h5p-dnd__column--is-padded:has(.h5p-dnd__badge) { - line-height: 1.7; -} - - -.h5p-dnd__badge { - background: #E7E9EE; - color: #434446; - text-transform: uppercase; - font-weight: 400; - font-size: 12px; - font-family: 'Arial Black'; - border-radius: 6px; - padding: 3px 8px; - display: inline-flex; - line-height: 1.4; - - .h5p-dnd__badge__separator { - border-left: solid 2px rgba(67, 68, 70, 0.25); - margin: 3px 6px; - overflow: hidden; - display: inline-block; - overflow: hidden; - top: 0; - left: 0; - right: 0; - bottom: 0; - position: relative; - } -} - -.h5p-dnd__img { - max-width: 175px; - max-height: 120px; - min-width: 40px; - min-height: 40px; - border-radius: 6px; - display: block; -} - -.h5p-dnd__img__container { - position: relative; - min-width: 100%; - display: flex; - align-items: center; - justify-content: center; -} - -.h5p-dnd__img__overlay { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - border-radius: 6px; - background: $dnd-blue; - opacity: 0.9; - color: #fff; - display: none; - cursor: pointer; - &:before { - font-family: $icon-font-family; - content: "\e85d"; - font-size: 2.5em; - } -} - -.h5p-dnd__img__container:hover .h5p-dnd__img__overlay, -.h5p-dnd__box:focus:not(.h5p-dnd__box--is-uploading) .h5p-dnd__img__overlay, -.h5p-dnd__box.h5p-dnd__box--is-dragging:not(.h5p-dnd__box--is-uploading) .h5p-dnd__img__overlay { - display: flex; - align-items: center; - justify-content: center; -} - -.h5p-dnd__text { - font-family: 'Open Sans', sans-serif; - font-size: 14px; - text-align: center; - color: $dnd-text-color; -} - -.h5p-dnd__upload-image-svg, -.h5p-dnd__upload-audio-svg, -.h5p-dnd__upload-video-svg { - width: 60px; - height: 43px; - margin-bottom: 13px; -} - - -.h5p-dnd__upload-image-svg { - background: url("../css/fonts/upload-image.svg") no-repeat; -} - -.h5p-dnd__upload-video-svg { - background: url("../css/fonts/upload-video.svg") no-repeat; -} - -.h5p-dnd__upload-audio-svg { - background: url("../css/fonts/upload-audio.svg") no-repeat; -} -.h5p-dnd__play-icon-svg { - background: url("../css/fonts/play-icon.svg") no-repeat; - width: 28px; - height: 29px; -} - -.h5p-dnd__drop-text { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - font-size: 0.9em; - - &:before { - font-size: 3.9em; - font-family: $icon-font-family; - content: "\e85d"; - color: #3B435A; - line-height: 0.9; - margin-bottom: 10px; - } -} - -.input-container { - display: flex; - align-items: center; - border: solid 1px #D0D0D1; - padding: 3px; - width: 100%; - border-radius: 2px; - background: #fff; - gap: 5px; - - &:has(.input-video:focus) { - border: solid 1px #1570df; - } -} - -/* Need high specificity to counteract interactive video styling for inputs */ -.h5p-dnd__av-container .h5p-dnd__box__url.h5p-dnd__box__video-paste .input-container input[type="text"].input-video { - border: 0; - flex: 1; - outline: 0; - font-size: 1em; - box-shadow: none; - - &:focus { - background: none; - box-shadow: none; - } -} - -.video-url-error-container { - display: flex; - flex-direction: row; - align-items: center; - justify-content: center; - margin-bottom: 5px; - width: 100%; - - &.hidden { - display: none; - } -} - -.text-muted { - color: #454347; - text-align: center; - font-family: "Open Sans", sans-serif; - font-size: 0.85em; - font-weight: 400; - line-height: normal; -} -.text-center { - text-align: center; -} - -.h5p-dnd__box__title { - color: #454347; - text-align: center; - font-size: 16px; - font-weight: 600; - font-family: "Open Sans", sans-serif; -} - -.h5p-dnd__box.h5p-dnd__box__url, -.h5p-dnd__box__url { - display: flex; - flex-flow: column; - align-items: center; - justify-content: center; - color: #454347; - font-size: 14px; - border-radius: 6px; - flex: 1; - min-height: 169px; - position: relative; - background: none; - padding: 10px; - gap: 7px; - min-width: 271px; - box-sizing: border-box; - - &:focus:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading), - &:focus-within:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-dragging):not(.h5p-dnd__box--is-uploading) { - background: $dnd-blue-faded; - border: solid 2px #1570df; - } - &:focus-visible:not(.h5p-dnd__box__video-paste):not(.h5p-dnd__box--is-uploading) { - outline: 0; - border: solid 2px #1570df; - } - - &.h5p-dnd__box__video-paste { - border: solid 1px #D0CFD4; - padding: 20px; - } -} - -.h5p-dnd__box.h5p-dnd__box__action { - flex: 2; -} - -.h5p-dnd__box.h5p-dnd__box__video-paste { - flex: 1 0 fit-content; -} - -.h5p-dnd__videobox-wrapper ~ .h5p-dnd__box__url { - height: 154px; - min-height: 110px; - min-width: 260px; - - .h5p-dnd__upload-audio-svg, - .h5p-dnd__upload-video-svg { - display: none; - } -} - -.h5p-dnd__videobox-wrapper~.h5p-dnd__box__url.h5p-dnd__box.has-error { - height: auto; -} - -.h5p-dnd__box--is-dashed:not(.h5p-dnd__box--is-uploading):hover { - border: dashed 2px #ACACAC; -} - -.h5p-dnd__row { - display: flex; - flex: 1; - align-items: center; - justify-content: center; - width: 100%; -} - -.h5p-bold { - font-weight: 700; -} - -.divider { - border-top: solid 1px #D0CFD4; - width: 35%; - margin: 0 10px; -} - -.h5p-dnd__box--has-video { - flex-flow: column; - width: 100%; -} - -.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) { - .h5p-dnd__box--has-video:focus { - .h5p-dnd__video-container { - background: #1670DF; - &:before { - font-family: $icon-font-family; - content: "\e85d"; - font-size: 2.5em; - } - - .h5p-dnd__video-overlay { - display: none; - } - } - } - .h5p-dnd__video-container { - cursor: pointer; - - &:hover { - background: #1670DF; - - &:before { - font-family: $icon-font-family; - content: "\e85d"; - font-size: 2.5em; - } - .h5p-dnd__video-overlay { - display: none; - } - } - } -} - -.h5p-dnd__videobox-wrapper--is-provider { - .h5p-dnd__box--has-video { - &:focus, - &:hover { - border: solid 2px #D0CFD4; - } - } -} - -.h5p-dnd__videobox-wrapper--has-label { - min-width: 400px; - flex: 1; -} - -.h5p-dnd__video-container { - width: 100%; - height: 100%; - min-height: 130px; - background: #1B1B1B; - border-radius: 6px; - overflow: hidden; - display: flex; - align-items: center; - justify-content: center; - color: #fff; -} - -.h5p-dnd__video-overlay { - display: flex; - flex-flow: column; - justify-content: center; - align-items: center; - gap: 10px; -} - -.h5p-dnd__box--has-video.h5p-dnd__box--is-dragging { - .h5p-dnd__video-container { - background: #1670DF; - } -} - -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-image:focus .h5p-dnd__column--show-when-focus, -.h5p-dnd__box:not(.h5p-dnd__box--is-uploading).h5p-dnd__box--has-video:focus .h5p-dnd__column--show-when-focus -{ - display: flex; -} - -.h5p-dnd__av-container { - display: flex; - align-items: flex-start; - gap: 11px; - flex-flow: row wrap; - margin-bottom: 20px; - container: h5p-dnd__av-container / inline-size; -} - -.h5p-dnd__videobox-wrapper:not(.h5p-dnd__videobox-wrapper--is-provider) ~ .h5p-dnd__box__video-paste, -.h5p-dnd__box--is-dragging + .h5p-dnd__box__video-paste { - display: none; -} - -.h5p-dnd__videobox-wrapper--is-provider + .h5p-dnd__box__url { - display: none; -} - -.h5p-dnd__box--is-uploading + .h5p-dnd__box__video-paste { - display: none; -} - -.h5p-dnd__videobox-wrapper { - width: 195px; - text-align: center; -} - -.h5p-dnd__video-quality { - text-align: left; - height: 130px; - display: flex; - flex-flow: column; - justify-content: space-between; - box-sizing: border-box; - border-left: solid 1px #ccc; - padding: 0 10px; -} - -.h5p-dnd__video-quality-title { - font-size: 14px; -} - -.h5p-dnd__video-quality-description { - font-size: 11px; - line-height: normal; - display: inline-block; - font-family: 'Open Sans', sans-serif; -} - -.h5p-dnd__box__url.h5p-dnd__box--is-dragging .h5p-dnd__column.h5p-dnd__column--is-highlighted { - width: 100%; - margin: 0; -} - -.h5p-dnd__btn__insert-url { - white-space: nowrap; - overflow: hidden; - text-overflow: ellipsis; - display: block; - max-width: 150px; - &:before { - content: '\e85c'; - } -} - -@media (max-width: 525px) { - .h5p-dnd__box { - flex-flow: column; - } -} - -.h5p-dnd__box__url { - container: h5p-dnd__box__url / inline-size; -} - -.h5p-dnd__row--when-wide, -.h5p-dnd__column--when-wide { - display: none; -} - -.h5p-dnd__row:has(.input-container), -.h5p-dnd__row:has(.video-url-error-container) { - flex: 0; -} - -.h5p-dnd__column--no-margin, -.h5p-dnd__column--no-margin.h5p-dnd__column { - margin: 0; -} - -@container h5p-dnd__av-container (min-width: 760px) { - .h5p-dnd__box.h5p-dnd__box__action { - flex-flow: row; - align-items: stretch; - padding: 0; - } - - .h5p-dnd__row--when-wide, - .h5p-dnd__column--when-wide { - display: flex; - } - - .h5p-dnd__row--when-small, - .h5p-dnd__column--when-small { - display: none; - } - - .h5p-dnd__box.h5p-dnd__box__action, - .h5p-dnd__box__action { - background: #fff; - } -} - - -@container h5p-dnd__av-container (max-width: 760px) { - .h5p-dnd__badge, - .h5p-dnd__column, - .h5p-dnd__row { - font-size: 0.85em; - } - - .text-muted { - font-size: 1em; - } - - .h5p-dnd__btn__insert-url { - max-width: 120px; - } -} - -@container h5p-dnd__av-container (max-width: 250px) { - .h5p-dnd__box__url, - .h5p-dnd__box.h5p-dnd__box__url, - .h5p-dnd__videobox-wrapper~.h5p-dnd__box__url { - min-width: 0; - flex-basis: 100%; - } - - .h5p-dnd__btn__insert-url { - max-width: 90px; - } - - .h5p-dnd__box__url.h5p-dnd__box__video-paste { - padding: 10px; - } -} - -.h5p-dnd__videobox-wrapper ~ .h5p-dnd__box__url { - &.h5p-dnd__box.h5p-dnd__box__action { - flex-flow: column; - align-items: center; - padding: 10px; - } - - .h5p-dnd__row--when-wide, - .h5p-dnd__column--when-wide { - display: none; - } - - .h5p-dnd__row--when-small, - .h5p-dnd__column--when-small { - display: flex; - } -} - -.h5p-dnd-nowrap { - white-space: nowrap; -} \ No newline at end of file diff --git a/styles/scss/_h5peditor-image-edit.scss b/styles/scss/_h5peditor-image-edit.scss index 8741f170..ebeb318b 100644 --- a/styles/scss/_h5peditor-image-edit.scss +++ b/styles/scss/_h5peditor-image-edit.scss @@ -1,7 +1,6 @@ @import 'variables'; .h5peditor { - .h5p-delete-image-button, .h5p-editing-image-button { background: linear-gradient(to bottom, #fff 0, #f2f2f2 100%); font-size: $font-size-small; @@ -19,9 +18,9 @@ } } - .h5p-delete-image-button:before, .h5p-editing-image-button:before { font-family: $icon-font-family; + content: "\e900"; color: #666; padding-right: 0.3em; padding-left: 0.45em; @@ -29,27 +28,16 @@ font-size: 1.5em; line-height: 0.9; } - - .h5p-delete-image-button:before { - content: "\e85f"; - } - .h5p-editing-image-button:before { - content : "\e85e"; - } - - .h5p-delete-image-button.loading:before, .h5p-editing-image-button.loading:before { content: "\e901"; } - .h5p-delete-image-button.hidden, .h5p-editing-image-button.hidden, .h5p-copyright-button.hidden { display: none !important; } - .ui-dialog .h5p-delete-image-button, .ui-dialog .h5p-editing-image-button, .ui-dialog .h5p-copyright-button { padding-left: 0.5em; diff --git a/styles/scss/_variables.scss b/styles/scss/_variables.scss index 0b9f5070..1fd1b12c 100644 --- a/styles/scss/_variables.scss +++ b/styles/scss/_variables.scss @@ -56,21 +56,6 @@ $form-item-buttons-width-small: 54px; $form-label: #454347; $form-label-importance-high: #356593; -// Audio and Video (av) tab widget -$av-tab-container-border-color: #D0CFD4; -$av-tab-container-background-color: #FFFFFF; -$av-tab-button-color: #E7E9EE; -$av-tab-button-selected-color: #FFFFFF; -$av-tab-button-title-color: #000000; -$av-tab-button-font-color: #297BC7; - -// Drag and drop -$dnd-blue: #1670DF; -$dnd-blue-faded: #f6faff; -$dnd-text-color: #454347; -$dnd-gray-light: #D0CFD4; -$dnd-gray-dark: #ACACAC; - // Group collapse button $group-collapse-button-color: #228380; -$group-collapse-button-color-light: #4dc2bf; +$group-collapse-button-color-light: #4dc2bf; \ No newline at end of file diff --git a/styles/scss/application.scss b/styles/scss/application.scss index 605cc65b..9ad7ea2e 100644 --- a/styles/scss/application.scss +++ b/styles/scss/application.scss @@ -5,7 +5,6 @@ @import "form-groups"; @import "h5peditor-image-edit"; @import "h5peditor-image-edit-popup"; -@import "h5peditor-drag-and-drop"; @import "deprecated"; html, body { @@ -16,7 +15,6 @@ html, body { max-width: 960px; position: relative; } - a { text-decoration: none; } @@ -167,103 +165,10 @@ a { font-size: 16px; word-wrap: break-word; - a { - text-decoration: underline; - } - - /* The figure around the table */ - figure.table { - display: table; - table-layout: fixed; - margin: 0 auto; - padding: 0; - float: left; - - /* The actual table */ - table { - border-collapse: collapse; - height: 100%; - width: 100%; - border-spacing: 0; - border-width: 1px; - border-color: #494949; - - td, th { - padding: 1px; - border-color: #494949; - border-bottom-style: solid; - } - - td { - border-width: 0.083em; - } - - th { - border-width: .167em; - } - - tr:last-child > td { - border-bottom-style: none; - } - } - - figcaption { - background-color: transparent; - caption-side: top; - color: #333; - display: table-caption; - font-size: .75em; - outline-offset: -1px; - padding: .6em; - text-align: center; - word-break: break-word; - } - } - - .table-overflow-protection { - clear: both; - } - &.error { border-color: red; } } - - // Inside ckeditor, needed for changes to default - .ck-content figure.table { - float: left; - - table { - border-width: 1px; - border-color: #494949; - border-style: none; - - td, th { - padding: 1px; - border-style: none; - border-color: #494949; - border-bottom-style: solid; - } - - td { - border-width: 0.083em; - } - - th { - border-width: .167em; - background-color: transparent; - } - - tr:last-child > td { - border-bottom-style: none; - } - } - - figcaption { - background-color: transparent; - } - } - .h5peditor-text, textarea { width: 100%; box-sizing: border-box; @@ -272,31 +177,6 @@ a { border-color: red; } } - - // The actual ck editor - .ck { - a { - text-decoration: underline; - } - - .ck-font-size-dropdown .ck-dropdown__panel, - .ck-text-fragment-language-dropdown .ck-dropdown__panel { - max-height: 20em; - overflow-y: scroll; - } - - .ck-fontsize-option .ck-button__label { - line-height: normal !important; - } - - .ck-content pre { - background: initial; - border: initial; - border-radius: initial; - padding: 0; - } - } - /* Placeholders - need to be on separate lines. If not, the browsers will invalidate them */ textarea:focus::-webkit-input-placeholder, @@ -343,7 +223,7 @@ a { font-family: $font-family; font-size: 16px; border: 1px solid $form-border-color; - background: $form-input-color url('../../images/down.png') no-repeat; + background: $form-input-color inline-image('down.png') no-repeat; background-position: calc(100% - 10px); box-shadow: $form-input-box-shadow; -moz-appearance: none; @@ -444,14 +324,18 @@ a { text-align: center; } .h5p-add-dialog { - position: inherit; + position: absolute; z-index: 1; visibility: hidden; opacity: 0; background: #fff; - margin-bottom: 1rem; + left: 1em; + right: 1em; + top: 1em; + border: 1px solid #cdcdcd; box-sizing: border-box; -moz-box-sizing: border-box; + box-shadow: 0 0 8px #666; transition: visibility 0s 0.2s, opacity 0.2s; &.h5p-open { @@ -462,63 +346,37 @@ a { .h5p-add-dialog-table { overflow: hidden; - position: relative; .av-tablist { - display: inline-flex; - border-left: 1px solid $av-tab-container-border-color; - - &:has(~ .av-tabpanel.has_content) { - .av-tab:not(.selected) { - opacity: 0.5; - cursor: not-allowed; - pointer-events: none; - } - } + overflow: hidden; + margin: 1em 1em 0 1em; } .av-tab { cursor: pointer; + float: left; padding: 0.5em 0.75em; - border-top: 1px solid $av-tab-container-border-color; - border-right: 1px solid $av-tab-container-border-color; - position: relative; - font-weight: 600; + border-top: 1px solid #ccc; + border-right: 1px solid #ccc; + font-weight: bold; font-size: 15px; - background: $av-tab-button-color; - z-index: 1; + color: #666; + background: #f5f5f5; - &::before { - font-family: $icon-font-family; - color: $av-tab-button-font-color; - vertical-align: middle; - font-size: 1.8em; - margin-right: 4px; + &:first-child { + border-left: 1px solid #ccc; } - &.selected { - color: $av-tab-button-title-color; - background: $av-tab-button-selected-color; - - &::after { - content: ""; - position: absolute; - bottom: -1px; - left: 0; - right: 0; - height: 1px; - background: $av-tab-button-selected-color; - } + color: #333; + background: #fff; } } .av-tabpanel { - border: 1px solid $av-tab-container-border-color; - border-radius: 0 0 5px 5px; - margin-top: 1px; - position: relative; + border: 1px solid #ccc; + margin: 0 1em 1em 1em; + overflow: hidden; padding: 1em; - top: -1px; h3 { margin: 0 0 1em 0; @@ -781,7 +639,7 @@ a { max-width: 100%; min-width: 1em; min-height: 1em; - background: $form-input-color url('../../images/transparent-background.png') repeat; + background: $form-input-color inline-image('transparent-background.png') repeat; } .thumbnail:focus { box-shadow: 0 0 10px 0 #222; @@ -1042,10 +900,6 @@ a { } } -.ck-powered-by-balloon { - display: none !important; -} - .h5p-editor-dialog.h5p-dialog-wide { width: 90%; border-radius: 0.208em; @@ -1242,19 +1096,6 @@ a { } } -.av-tab__file-upload::before { - content: "\e85d"; -} - -.av-tab__insert-url::before { - content: "\e85c"; -} - -.av-tab__record-audio:last-child::before { - content: "\e85d"; // TODO: Change to microphone icon -} - - .h5peditor-form { position: relative; background: $form-background; @@ -1338,6 +1179,7 @@ a { } .h5peditor-widget-option { border: 1px solid #ccc; + border-bottom: 0; margin-left: 0.5em; padding: 0.6em 1em; color: #0E1A25; @@ -1356,7 +1198,6 @@ a { .h5peditor-widget-active { background: #fff; line-height: 1.357142857em; - border-bottom: 0; } .h5peditor-widgets > .h5peditor-widget-wrapper { border: 1px solid #ccc; @@ -1520,44 +1361,3 @@ a { text-decoration: underline; } } - -.h5p-loader__wrapper { - width: 100%; - height: 100%; - flex: 1; - display: flex; - align-items: center; - padding: 10px; - min-width: 180px; - - .h5p-loader__icon { - border: 8px solid #d0cfd4; - border-bottom-color: #554e4a; - border-radius: 50%; - width: 40px; - height: 40px; - animation: rotation linear 1s infinite; - margin: 0 auto; - } -} - -@keyframes rotation { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -.h5p-sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; -}