diff --git a/ckeditor/translations/ti.js b/ckeditor/translations/ti.js
deleted file mode 100644
index ec0a54ea..00000000
--- a/ckeditor/translations/ti.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){const t=e.ti=e.ti||{};t.dictionary=Object.assign(t.dictionary||{},{"(may require Fn )":"","%0 of %1":"",Accept:"",Accessibility:"","Accessibility help":"","Align center":"ናብ ማእኸል ኣመዓራርይ","Align left":"ንጸጋም ኣመዓራርይ","Align right":"ንየማን ኣመዓራርይ",Aquamarine:"","Below, you can find a list of keyboard shortcuts that can be used in the editor.":"",Black:"",Blue:"",Bold:"ቦልድ","Bold text":"ጽሑፍ ኣጉልህ","Break text":"","Bulleted List":"ብምልክት ዝተመልከቱ ዝርዝራት","Bulleted list styles toolbar":"",Cancel:"ንጸግ","Caption for image: %0":"","Caption for the image":"","Centered image":"","Change image text alternative":"","Choose heading":"ርእሲ ምረጽ",Circle:"",Clear:"ደምስስ","Click to edit block":"",Close:"","Close contextual balloons, dropdowns, and dialogs":"",Code:"ኮድ","Content editing keystrokes":"","Create link":"መራኽቦ ፍጠር",Custom:"","Custom image size":"",Decimal:"","Decimal with leading zero":"","Decrease list item indent":"","Dim grey":"",Disc:"",Downloadable:"ዝረግፍ","Drag to move":"","Dropdown toolbar":"","Edit block":"","Edit link":"መራኽቦ ኣርም","Editor block content toolbar":"","Editor contextual toolbar":"","Editor dialog":"","Editor editing area: %0":"","Editor menu bar":"","Editor toolbar":"","Enter image caption":"","Entering a to-do list":"","Error during image upload":"","Execute the currently focused button. Executing buttons that interact with the editor content moves the focus back to the content.":"","From computer":"","Full size image":"",Green:"",Grey:"",Heading:"ርእሲ","Heading 1":"ርእሲ 1","Heading 2":"ርእሲ 2","Heading 3":"ርእሲ 3","Heading 4":"ርእሲ 4","Heading 5":"ርእሲ 5","Heading 6":"ርእሲ 6","Help Contents. To close this dialog press ESC.":"",HEX:"",Image:"","Image from computer":"ስእሊ ካብ ኮምፕዩተር","Image resize list":"","Image toolbar":"መኸወኒ ስእሊ","Image upload complete":"","Image via URL":"","image widget":"","In line":"","Increase list item indent":"","Insert image":"ስእሊ ኣእትው","Insert image via URL":"","Insert via URL":"","Invalid start index value.":"",Italic:"ኢታሊክ","Italic text":"ኢታሊክ ጽሑፍ",Justify:"ብማዕረ መጠን ናብ ኩሉ ኣንፈት ኣመዓራርይ","Keystrokes that can be used in a list":"","Leaving a to-do list":"","Left aligned image":"","Light blue":"","Light green":"","Light grey":"",Link:"መራኽቦ","Link image":"","Link URL":"","Link URL must not be empty.":"","List properties":"","Lower-latin":"","Lower–roman":"",MENU_BAR_MENU_EDIT:"ኣርም",MENU_BAR_MENU_FILE:"ፋይል",MENU_BAR_MENU_FONT:"ፎንት",MENU_BAR_MENU_FORMAT:"ፎርማት",MENU_BAR_MENU_HELP:"ሓገዝ",MENU_BAR_MENU_INSERT:"የእትው",MENU_BAR_MENU_TEXT:"ቴክስት",MENU_BAR_MENU_TOOLS:"መኸወንቲ",MENU_BAR_MENU_VIEW:"ተመልከት","Move focus between form fields (inputs, buttons, etc.)":"","Move focus in and out of an active dialog window":"","Move focus to the menu bar, navigate between menu bars":"","Move focus to the toolbar, navigate between toolbars":"","Move out of a link":"","Move out of an inline code style":"","Navigate through the toolbar or menu bar":"",Next:"ቀጻሊ","No results found":"","No searchable items":"","Numbered List":"ብቁጽሪ ዝተመልከቱ ዝርዝራት","Numbered list styles toolbar":"","Open in a new tab":"","Open link in new tab":"ንመራኽቦ ኣብ ሓዱሽ ታብ ክፈት","Open the accessibility help dialog":"",Orange:"",Original:"",Paragraph:"ዓንቀጽ",'Please enter a valid color (e.g. "ff0000").':"","Press %0 for help.":"",Previous:"ሕሉፍ",Purple:"",Red:"",Redo:"ደጊምካ ከውን","Remove color":"ሕብሪ ኣወግድ","Replace from computer":"ካብ ኮምፕዩተር ተክእ","Replace image":"ስእሊ ተክእ","Replace image from computer":"ንስእሊ ካብ ኮምፕዩተር ተክእ ","Resize image":"መጠን ስእሊ ቀይር","Resize image (in %0)":"","Resize image to %0":"","Resize image to the original size":"","Restore default":"","Reversed order":"","Rich Text Editor":"","Right aligned image":"",Save:"ጠቁብ","Show more items":"","Side image":"",Square:"","Start at":"","Start index must be greater than 0.":"",Strikethrough:"ሰርዝ","Strikethrough text":"ጽሑፍ ሰርዝ",Subscript:"ሳብስክሪፕት",Superscript:"ሱፐርስክሪፕት","Text alignment":"ምዕረያ ጽሑፍ","Text alignment toolbar":"መካወኒ ምዕረያ ጽሑፍ","Text alternative":"","The value must not be empty.":"","The value should be a plain number.":"","These keyboard shortcuts allow for quick access to content editing features.":"","This link has no URL":"","To-do List":"","Toggle caption off":"","Toggle caption on":"","Toggle the circle list style":"","Toggle the decimal list style":"","Toggle the decimal with leading zero list style":"","Toggle the disc list style":"","Toggle the lower–latin list style":"","Toggle the lower–roman list style":"","Toggle the square list style":"","Toggle the upper–latin list style":"","Toggle the upper–roman list style":"",Turquoise:"","Type or paste your content here.":"ኣብዚ ቦታ ጽሑፍካ ጸሓፍ ወይ ጠቅዕ","Type your title":"ርእሲ ጽሑፍካ ጸሓፍ",Underline:"ኣስምር","Underline text":"ጽሑፍ ኣስምር",Undo:"ዝተኸወነ ምለስ",Unlink:"መራኽቦ ኣወግድ","Update image URL":"","Upload failed":"ምድያብ ፈሺሉ","Upload from computer":"ካብ ኮምፕዩተር ኣደይብ","Upload image from computer":"ንስእሊ ካብ ኮምፕዩተር ኣደይብ ","Uploading image":"","Upper-latin":"","Upper-roman":"","Use the following keystrokes for more efficient navigation in the CKEditor 5 user interface.":"","User interface and content navigation keystrokes":"","Via URL":"",White:"","Wrap text":"",Yellow:"","You have no image upload permissions.":""}),t.getPluralForm=function(e){return e>1}}(window.CKEDITOR_TRANSLATIONS||(window.CKEDITOR_TRANSLATIONS={}));
\ No newline at end of file
diff --git a/language/ar.js b/language/ar.js
index 31242e96..4f5f4d70 100644
--- a/language/ar.js
+++ b/language/ar.js
@@ -45,6 +45,8 @@ H5PEditor.language.core = {
editImage: 'تعديل الصورة',
saveLabel: 'حفظ',
cancelLabel: 'إلغاء',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: 'إعادة التعيين إلى النسخة الأصلية',
loadingImageEditor: 'تحميل محرر الصور، يرجى الانتظار...',
selectFiletoUpload: 'حدد ملفا لتحميله',
@@ -55,8 +57,13 @@ 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 f8b94b97..88c7b584 100644
--- a/language/bs.js
+++ b/language/bs.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 706dad9a..250a0f58 100644
--- a/language/cs.js
+++ b/language/cs.js
@@ -44,6 +44,8 @@ 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',
@@ -54,8 +56,13 @@ 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 0c0c3521..34bec95b 100644
--- a/language/de.js
+++ b/language/de.js
@@ -46,6 +46,8 @@ 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',
@@ -56,8 +58,13 @@ 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 6633fd5c..03699a4b 100644
--- a/language/el.js
+++ b/language/el.js
@@ -46,6 +46,8 @@ H5PEditor.language.core = {
editImage: 'Επεξεργασία εικόνας',
saveLabel: 'Αποθήκευση',
cancelLabel: 'ακύρωση',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: 'Επαναφορά στο πρωτότυπο',
loadingImageEditor: 'Φόρτωση επεξεργαστή εικόνας, παρακαλούμε περιμένετε...',
selectFiletoUpload: 'Επιλέξτε αρχείο προς μεταφόρτωση',
@@ -56,8 +58,13 @@ 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 7cae6bb4..52b0a399 100644
--- a/language/en.js
+++ b/language/en.js
@@ -17,8 +17,40 @@ H5PEditor.language.core = {
addFile: 'Add file',
removeFile: 'Remove file',
confirmRemoval: 'Are you sure you wish to remove this :type?',
- removeImage: 'Remove image',
- confirmImageRemoval: 'This will remove your image. Are you sure you wish to proceed?',
+ 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',
changeFile: 'Change file',
changeLibrary: 'Change content type?',
semanticsError: 'Semantics error: :error',
@@ -43,7 +75,11 @@ 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',
@@ -54,7 +90,12 @@ 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 9a7109f2..4d87bdb8 100644
--- a/language/es-cr.js
+++ b/language/es-cr.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 299521ed..58d168fe 100644
--- a/language/es-mx.js
+++ b/language/es-mx.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 59685856..8af75e35 100644
--- a/language/es.js
+++ b/language/es.js
@@ -17,8 +17,34 @@ H5PEditor.language.core = {
addFile: 'Añadir archivo',
removeFile: 'Eliminar archivo',
confirmRemoval: '¿Estás seguro de que quieres eliminar este :type?',
- removeImage: 'Eliminar imagen',
- confirmImageRemoval: 'Esto eliminará la imagen. ¿Seguro que desea continuar?',
+ 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 .',
changeFile: 'Cambiar archivo',
changeLibrary: 'Cambiar el tipo de contenido',
semanticsError: 'Error en semántica: :error',
@@ -44,7 +70,11 @@ 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',
@@ -55,8 +85,13 @@ 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 88698e9a..1fd3ffb3 100644
--- a/language/et.js
+++ b/language/et.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 fdf3c35a..0ef86bbe 100644
--- a/language/eu.js
+++ b/language/eu.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 64b55720..b1cdffda 100644
--- a/language/fi.js
+++ b/language/fi.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 a24abca7..f98b3857 100644
--- a/language/fr.js
+++ b/language/fr.js
@@ -15,8 +15,36 @@ H5PEditor.language.core = {
outOfStep: 'La :property ne peut être effectuée que par étape :step.',
add: 'Ajouter',
addFile: 'Ajouter un fichier',
- removeFile: 'Supprimer un fichier',
- confirmRemoval: 'Voulez-vous vraiment supprimer :type ?',
+ 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',
removeImage: "Supprimer l'image",
confirmImageRemoval: 'Votre image va être supprimée. Êtes-vous sûr de vouloir continuer ?',
changeFile: 'Changer le fichier',
@@ -43,7 +71,11 @@ 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',
@@ -54,8 +86,13 @@ 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',
diff --git a/language/gl.js b/language/gl.js
index 38d71327..54497d0a 100644
--- a/language/gl.js
+++ b/language/gl.js
@@ -44,6 +44,8 @@ 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',
@@ -54,7 +56,12 @@ 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 d5d15761..b252e580 100644
--- a/language/it.js
+++ b/language/it.js
@@ -44,6 +44,8 @@ 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',
@@ -54,7 +56,12 @@ 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 db24b52f..f2278a0c 100644
--- a/language/ko.js
+++ b/language/ko.js
@@ -45,6 +45,8 @@ H5PEditor.language.core = {
editImage: '이미지 편집',
saveLabel: '저장',
cancelLabel: '취소',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: '원본으로 돌아가기',
loadingImageEditor: '이미지 편집기 로드 중, 잠시 기다리십시오...',
selectFiletoUpload: '업로드할 파일 선택',
@@ -55,8 +57,13 @@ 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 f986689f..0c09ac8a 100644
--- a/language/nb.js
+++ b/language/nb.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 43e6c106..f752e13b 100644
--- a/language/nl.js
+++ b/language/nl.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 e20161ca..931ecf63 100644
--- a/language/nn.js
+++ b/language/nn.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 6ba567a5..6ff761e4 100644
--- a/language/pl.js
+++ b/language/pl.js
@@ -44,6 +44,8 @@ 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ć',
@@ -54,8 +56,13 @@ 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 30f70779..b8d0597c 100644
--- a/language/pt-br.js
+++ b/language/pt-br.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 e75303ae..ba19e5d6 100644
--- a/language/pt.js
+++ b/language/pt.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 dec2fbe0..0c01c056 100644
--- a/language/ru.js
+++ b/language/ru.js
@@ -47,6 +47,8 @@ H5PEditor.language.core = {
editImage: 'Изменить изображение',
saveLabel: 'Сохранить',
cancelLabel: 'Отмена',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: 'Сброс к оригиналу',
loadingImageEditor: 'Загрузка графического редактора, пожалуйста, подождите ...',
selectFiletoUpload: 'Выберите файл для загрузки',
@@ -57,8 +59,13 @@ 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 d3bf1582..ab77fe16 100644
--- a/language/sl.js
+++ b/language/sl.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 7689dfe6..d1830802 100644
--- a/language/sv.js
+++ b/language/sv.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 e4835cfe..6e3411d9 100644
--- a/language/tr.js
+++ b/language/tr.js
@@ -45,6 +45,8 @@ 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',
@@ -55,8 +57,13 @@ 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 964fc022..67121ef3 100644
--- a/language/zh-cn.js
+++ b/language/zh-cn.js
@@ -44,6 +44,8 @@ H5PEditor.language.core = {
editImage: '编辑图片',
saveLabel: '保存',
cancelLabel: '取消',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: '重置为原始状态',
loadingImageEditor: '正在加载图片编辑器,请稍候...',
selectFiletoUpload: '请选择要上传的文件',
@@ -54,8 +56,13 @@ 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 964fc022..67121ef3 100644
--- a/language/zh-hans.js
+++ b/language/zh-hans.js
@@ -44,6 +44,8 @@ H5PEditor.language.core = {
editImage: '编辑图片',
saveLabel: '保存',
cancelLabel: '取消',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: '重置为原始状态',
loadingImageEditor: '正在加载图片编辑器,请稍候...',
selectFiletoUpload: '请选择要上传的文件',
@@ -54,8 +56,13 @@ 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 964fc022..67121ef3 100644
--- a/language/zh.js
+++ b/language/zh.js
@@ -44,6 +44,8 @@ H5PEditor.language.core = {
editImage: '编辑图片',
saveLabel: '保存',
cancelLabel: '取消',
+ deleteAudioLabel: 'Delete Audio',
+ deleteVideoLabel: 'Delete Video',
resetToOriginalLabel: '重置为原始状态',
loadingImageEditor: '正在加载图片编辑器,请稍候...',
selectFiletoUpload: '请选择要上传的文件',
@@ -54,8 +56,13 @@ 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 dbeed421..21a95f9e 100644
--- a/libs/cropper.css
+++ b/libs/cropper.css
@@ -10,6 +10,16 @@
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 f8f68cab..dcf8f228 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -136,9 +136,9 @@
}
},
"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==",
+ "version": "8.56.10",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz",
+ "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==",
"dev": true,
"dependencies": {
"@types/estree": "*",
@@ -168,9 +168,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "20.12.7",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.7.tgz",
- "integrity": "sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==",
+ "version": "20.12.12",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.12.tgz",
+ "integrity": "sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
@@ -400,15 +400,15 @@
}
},
"node_modules/ajv": {
- "version": "8.12.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
- "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.14.0.tgz",
+ "integrity": "sha512-oYs1UUtO97ZO2lJ4bwnWeQW8/zvOIQLGKcvPTsWmvc2SYgBb+upuNS5NxoLaMU4h8Ju3Nbj6Cq8mD2LQoqVKFA==",
"dev": true,
"dependencies": {
- "fast-deep-equal": "^3.1.1",
+ "fast-deep-equal": "^3.1.3",
"json-schema-traverse": "^1.0.0",
"require-from-string": "^2.0.2",
- "uri-js": "^4.2.2"
+ "uri-js": "^4.4.1"
},
"funding": {
"type": "github",
@@ -470,12 +470,12 @@
}
},
"node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -520,9 +520,9 @@
"dev": true
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001609",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001609.tgz",
- "integrity": "sha512-JFPQs34lHKx1B5t1EpQpWH4c+29zIyn/haGsbpfq3suuV9v56enjFt23zqijxGTMwy1p/4H2tjnQMY+p1WoAyA==",
+ "version": "1.0.30001624",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001624.tgz",
+ "integrity": "sha512-0dWnQG87UevOCPYaOR49CBcLBwoZLpws+k6W37nLjWUhumP1Isusj0p2u+3KhjNloRWK9OKMgjBBzPujQHw4nA==",
"dev": true,
"funding": [
{
@@ -563,6 +563,18 @@
"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",
@@ -622,18 +634,6 @@
"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",
@@ -696,15 +696,15 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.735",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.735.tgz",
- "integrity": "sha512-pkYpvwg8VyOTQAeBqZ7jsmpCjko1Qc6We1ZtZCjRyYbT5v4AIUKDy5cQTRotQlSSZmMr8jqpEt6JtOj5k7lR7A==",
+ "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
},
"node_modules/enhanced-resolve": {
- "version": "5.16.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.0.tgz",
- "integrity": "sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==",
+ "version": "5.16.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.16.1.tgz",
+ "integrity": "sha512-4U5pNsuDl0EhuZpq46M5xPslstkviJuhrdobaRDBk2Jy2KO37FDAJl4lb2KlNabxT0m4MTK2UHNrsAcphE8nyw==",
"dev": true,
"dependencies": {
"graceful-fs": "^4.2.4",
@@ -715,9 +715,9 @@
}
},
"node_modules/envinfo": {
- "version": "7.12.0",
- "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.12.0.tgz",
- "integrity": "sha512-Iw9rQJBGpJRd3rwXm9ft/JiGoAZmLxxJZELYDQoPRZ4USVhkKtIcNBPw6U+/K2mBpaqM25JSV6Yl4Az9vO2wJg==",
+ "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==",
"dev": true,
"bin": {
"envinfo": "dist/cli.js"
@@ -727,9 +727,9 @@
}
},
"node_modules/es-module-lexer": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.0.tgz",
- "integrity": "sha512-pqrTKmwEIgafsYZAGw9kszYzmagcE/n4dbgwGWLEXg7J4QFJVQRBld8j3Q3GNez79jzxZshq0bcT962QHOghjw==",
+ "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==",
"dev": true
},
"node_modules/escalade": {
@@ -815,6 +815,18 @@
"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",
@@ -840,9 +852,9 @@
}
},
"node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@@ -897,15 +909,15 @@
}
},
"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==",
+ "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.1"
+ "is-glob": "^4.0.3"
},
"engines": {
- "node": ">= 6"
+ "node": ">=10.13.0"
}
},
"node_modules/glob-to-regexp": {
@@ -942,7 +954,7 @@
},
"node_modules/h5p-image-cropper": {
"version": "1.0.0",
- "resolved": "git+ssh://git@github.com/h5p/h5p-image-cropper.git#09d0960367fd89e0581539ee8fb8366fd918ab05",
+ "resolved": "git+ssh://git@github.com/h5p/h5p-image-cropper.git#f0b2e93c92293e06867ef949d838501b8fa3ed70",
"dev": true,
"license": "MIT"
},
@@ -989,9 +1001,9 @@
}
},
"node_modules/immutable": {
- "version": "4.3.5",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
- "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
"dev": true
},
"node_modules/import-local": {
@@ -1159,18 +1171,6 @@
"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",
@@ -1187,12 +1187,12 @@
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -1221,9 +1221,9 @@
}
},
"node_modules/mini-css-extract-plugin": {
- "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==",
+ "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==",
"dev": true,
"dependencies": {
"schema-utils": "^4.0.0",
@@ -1352,9 +1352,9 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
"dev": true
},
"node_modules/picomatch": {
@@ -1469,9 +1469,9 @@
}
},
"node_modules/postcss-selector-parser": {
- "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==",
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
"dev": true,
"dependencies": {
"cssesc": "^3.0.0",
@@ -1650,9 +1650,9 @@
]
},
"node_modules/sass": {
- "version": "1.75.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz",
- "integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==",
+ "version": "1.77.2",
+ "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.2.tgz",
+ "integrity": "sha512-eb4GZt1C3avsX3heBNlrc7I09nyT00IUuo4eFhAbeXWU2fvA7oXI53SxODVAA+zgZCk9aunAZgO+losjR3fAwA==",
"dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
@@ -1667,9 +1667,9 @@
}
},
"node_modules/sass-loader": {
- "version": "14.2.0",
- "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.0.tgz",
- "integrity": "sha512-jxmjDXD9OYNDb2bp9JvopdE6QjecQY9beTWik/6sEHrsMxyo90Gyc471A4NUz60NLs4WsAh6yVtIvhLwEZcXeg==",
+ "version": "14.2.1",
+ "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-14.2.1.tgz",
+ "integrity": "sha512-G0VcnMYU18a4N7VoNDegg2OuMjYtxnqzQWARVWCIVSZwJeiL9kg8QMsuIZOplsJgTzZLF6jGxI3AClj8I9nRdQ==",
"dev": true,
"dependencies": {
"neo-async": "^2.6.2"
@@ -1726,13 +1726,10 @@
}
},
"node_modules/semver": {
- "version": "7.6.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
- "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+ "version": "7.6.2",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
"dev": true,
- "dependencies": {
- "lru-cache": "^6.0.0"
- },
"bin": {
"semver": "bin/semver.js"
},
@@ -1875,9 +1872,9 @@
}
},
"node_modules/terser": {
- "version": "5.30.3",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.30.3.tgz",
- "integrity": "sha512-STdUgOUx8rLbMGO9IOwHLpCqolkDITFFQSMYYwKE1N2lY6MVSaeoi10z/EhWxRc6ybqoVmKSkhKYH/XUpl7vSA==",
+ "version": "5.31.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.0.tgz",
+ "integrity": "sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==",
"dev": true,
"dependencies": {
"@jridgewell/source-map": "^0.3.3",
@@ -2006,9 +2003,9 @@
}
},
"node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
+ "version": "1.0.16",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz",
+ "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==",
"dev": true,
"funding": [
{
@@ -2025,8 +2022,8 @@
}
],
"dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
+ "escalade": "^3.1.2",
+ "picocolors": "^1.0.1"
},
"bin": {
"update-browserslist-db": "cli.js"
@@ -2257,12 +2254,6 @@
"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 97e856d0..dcbd2031 100644
--- a/scripts/h5peditor-av.js
+++ b/scripts/h5peditor-av.js
@@ -17,7 +17,6 @@ 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);
@@ -26,12 +25,25 @@ 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);
}
- // When uploading starts
+ 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();
+ });
+
+
self.on('upload', function () {
// Insert throbber
self.$uploading = $('
' + H5PEditor.t('core', 'uploading') + '
').insertAfter(self.$add.hide());
@@ -39,27 +51,32 @@ 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) {
- self.$uploading.html(H5PEditor.t('core', 'uploading') + ' ' + Math.round(e.data * 100) + ' %');
+ // New upload, i.e. not update existing box.
+ if (typeof e.data.updateId === 'undefined') {
+ self.handleUploadProgress(this.dndAddDialog);
+ }
});
- // Handle upload complete
self.on('uploadComplete', function (event) {
- var result = event.data;
-
- // Clear out add dialog
- this.$addDialog.find('.h5p-file-url').val('');
-
+ 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)'));
+ let boxEl;
+
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 = [];
@@ -67,23 +84,47 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
}
// Add a new file/source
- var file = {
+ const file = {
path: result.data.path,
mime: result.data.mime,
- copyright: self.copyright
+ copyright: self.copyright,
+ tabIndex: C.TABS.UPLOAD,
};
- var index = (self.updateIndex !== undefined ? self.updateIndex : self.params.length);
- self.params[index] = file;
- self.addFile(index);
+
+ 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);
// Trigger change callbacks (old event system)
- for (var i = 0; i < self.changes.length; i++) {
+ for (let 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) {
- // Display errors
- self.$errors.append(H5PEditor.createError(error));
+ self.setErrorMessage(result.error, boxEl);
}
if (self.$uploading !== undefined && self.$uploading.length !== 0) {
@@ -91,12 +132,33 @@ 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.
*
@@ -108,44 +170,43 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
var imageHtml =
'' +
- (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))
+ C.createTabbedAdd(self.field.type, self.field.widgetExtensions);
if (!this.field.disableCopyright) {
imageHtml += '' + H5PEditor.t('core', 'editCopyright') + ' ';
}
imageHtml += '';
-
+ ' ' +
+ '';
+
var html = H5PEditor.createFieldMarkup(this.field, imageHtml, id);
var $container = $(html).appendTo($wrapper);
-
- this.$files = $container.children('.file');
+
+ // 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.$add = $container.children('.h5p-add-file').click(function () {
- self.$addDialog.addClass('h5p-open');
+ this.$addDialog.addClass('h5p-open');
});
- // Tabs that are hard-coded into this widget. Any other tab must be an extension.
- const TABS = {
- UPLOAD: 0,
- INPUT: 1
- };
+ // Prepare to add the extra tab instances
+ const tabInstances = [null, null]; // Add nulls for hard-coded tabs
+ self.tabInstances = tabInstances;
- // The current active tab
- let activeTab = TABS.UPLOAD;
+ let activeTab = C.TABS.UPLOAD;
/**
* @param {number} tab
* @return {boolean}
*/
const isExtension = function (tab) {
- return tab > TABS.INPUT; // Always last tab
+ return tab > C.TABS.INPUT; // Always last tab
};
- /**
- * Toggle the currently active tab.
- */
const toggleTab = function () {
// Pause the last active tab
if (isExtension(activeTab)) {
@@ -155,35 +216,22 @@ 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 el = document.getElementById(this.getAttribute('aria-controls'));
- el.parentElement.querySelector('.av-tabpanel:not([hidden])').setAttribute('hidden', '');
- el.removeAttribute('hidden');
+ const inactiveTabPanel = document.getElementById(this.getAttribute('aria-controls'));
+ const activeTabPanel = inactiveTabPanel.parentElement.querySelector('.av-tabpanel:not([hidden])');
+ activeTabPanel.setAttribute('hidden', '');
+ inactiveTabPanel.removeAttribute('hidden');
// Set active tab index
- for (let i = 0; i < el.parentElement.children.length; i++) {
- if (el.parentElement.children[i] === el) {
+ for (let i = 0; i < inactiveTabPanel.parentElement.children.length; i++) {
+ if (inactiveTabPanel.parentElement.children[i] === inactiveTabPanel) {
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');
@@ -192,30 +240,7 @@ 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
@@ -223,10 +248,29 @@ 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
- tabInstance.on('hasMedia', function (e) {
- if (index === activeTab) {
- self.$insertButton[0].disabled = !e.data;
+ 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);
}
+ this.hasRecorded = false;
});
tabInstances.push(tabInstance);
}
@@ -238,13 +282,140 @@ 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;
+ }
- var $url = this.$url = this.$addDialog.find('.h5p-file-url');
- this.$addDialog.find('.h5p-cancel').click(function () {
- self.updateIndex = undefined;
- self.closeDialog();
+ 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();
+ }
});
+ 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) {
@@ -263,36 +434,10 @@ 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');
@@ -305,90 +450,264 @@ 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) {
- 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;
+ C.prototype.addFile = function (index, updateFileId = undefined) {
+ let that = this;
+ const file = this.params[index];
- // Check if source is provider (Vimeo, YouTube, Panopto)
- 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;
+ if (!!this.params) {
+ const avTabPanel = this.$dialogTable.find('.av-tabpanel:not([hidden])');
+ avTabPanel.addClass('has_content');
}
- this.$add.toggleClass('hidden', isProvider);
- // If updating remove and recreate element
- if (that.updateIndex !== undefined) {
- var $oldFile = this.$files.children(':eq(' + index + ')');
- $oldFile.remove();
- this.updateIndex = undefined;
+ // 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;
}
- // 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') + '
' +
- '
' + H5PEditor.t('core', 'videoQualityDescription') + ' ' +
- '
' +
- '
' +
- ' ';
+ const mimeType = file.mime.split('/')[1];
+ const videoText = C.providers.map(p => p.name).includes(mimeType) ? mimeType : `.${mimeType.toUpperCase()}`;
+ let fileHtml;
+ if (!isProvider) {
+ fileHtml = `
+
+
+
+
+
+
${isAudio ? H5PEditor.t('core', 'dragAndDropToReplaceAudio') : H5PEditor.t('core', 'dragAndDropToReplaceVideo')}
+
+
+
+
+
+
+ ${isAudio ? ns.t('core', 'deleteAudioLabel') : ns.t('core', 'deleteVideoLabel')}
+
+
+ `;
+ } else {
+ fileHtml = `
+
+
+
+
+
+ ${isAudio ? ns.t('core', 'deleteAudioLabel') : ns.t('core', 'deleteVideoLabel')}
+
+
+ `;
}
- else {
- fileHtml = '' +
- '' +
- '
' + file.mime.split('/')[1] + '
' +
- '
' +
- '
' +
- '';
- }
-
+
// Insert file element in appropriate order
- var $file = $(fileHtml);
- if (index >= that.$files.children().length) {
- $file.appendTo(that.$files);
+ const $file = $(fileHtml);
+
+ this.$add.toggleClass('hidden', isProvider);
+
+ if (updateFileId) {
+ this.updateId = undefined;
+ this.updateIndex = undefined;
+ const oldFile = filesContainer.find(`#${updateFileId}`);
+ index = oldFile.index();
+ oldFile.remove();
+ $file.insertBefore(filesContainer.children().eq(index));
}
else {
- $file.insertBefore(that.$files.children().eq(index));
+ $file.prependTo(filesContainer);
}
this.$add.parent().find('.h5p-copyright-button').removeClass('hidden');
- // Handle thumbnail click
+ 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
$file
- .children('.h5p-thumbnail')
- .click(function () {
- if (!that.$add.is(':visible')) {
- return; // Do not allow editing of file while uploading
+ .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
+ }
+ });
}
- that.$addDialog.addClass('h5p-open').find('.h5p-file-url').val(that.params[index].path);
- that.updateIndex = index;
});
// Handle remove button click
@@ -410,7 +729,7 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
});
// Create remove file dialog
- var confirmRemovalDialog = new H5P.ConfirmationDialog({
+ const confirmRemovalDialog = new H5P.ConfirmationDialog({
headerText: H5PEditor.t('core', 'removeFile'),
dialogText: H5PEditor.t('core', 'confirmRemoval', {':type': 'file'})
}).appendTo(document.body);
@@ -418,7 +737,7 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
// Remove file on confirmation
confirmRemovalDialog.on('confirmed', function () {
that.removeFileWithElement($file);
- if (that.$files.children().length === 0) {
+ if (filesContainer.children().length === 0) {
that.$add.parent().find('.h5p-copyright-button').addClass('hidden');
}
});
@@ -430,36 +749,61 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
* @param {number} $file File element
*/
C.prototype.removeFileWithElement = function ($file) {
- var index = $file.index();
+ 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 : '';
- // 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 (var i = 0; i < this.changes.length; i++) {
+ for (let 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);
}
- var mime;
- var aspectRatio;
- var i;
- var matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i);
+ let mime;
+ let aspectRatio;
+ let i;
+ const matches = url.match(/\.(webm|mp4|ogv|m4a|mp3|ogg|oga|wav)/i);
if (matches !== null) {
mime = matches[matches.length - 1];
}
@@ -472,14 +816,18 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
}
}
- var file = {
+ const file = {
+ id: H5P.createUUID(),
path: url,
mime: this.field.type + '/' + (mime ? mime : 'unknown'),
copyright: this.copyright,
aspectRatio: aspectRatio ? aspectRatio : undefined,
+ tabIndex: C.TABS.INPUT,
};
- var index = (this.updateIndex !== undefined ? this.updateIndex : this.params.length);
- this.params[index] = file;
+
+ this.params.push(file);
+ this.setValue(this.field, this.params);
+ index = this.params.findIndex(param => param.id === file.id);
this.addFile(index);
for (i = 0; i < this.changes.length; i++) {
@@ -487,6 +835,67 @@ 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.
*
@@ -558,14 +967,9 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
* @param {boolean} hasDescription
* @returns {string} HTML
*/
- C.createInsertDialog = function (content, disableInsert, id, hasDescription) {
- return '
' +
- '
' +
- '
' + content + '
' +
- '
' +
- '' + H5PEditor.t('core', 'insert') + ' ' +
- '' + H5PEditor.t('core', 'cancel') + ' ' +
- '
' +
+ C.createInsertDialog = function (content) {
+ return '
' +
+ '
' + content + '
' +
'
';
};
@@ -578,22 +982,76 @@ 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':
- const id = 'av-upload-' + C.getNextId();
- return '
' + H5PEditor.t('core', isAudio ? 'uploadAudioTitle' : 'uploadVideoTitle') + ' ' +
- '
';
+ return `
+
+
+
+
+
+
+
+ ${isAudio ? H5PEditor.t('core', 'uploadAudio') : H5PEditor.t('core', 'uploadVideo')}
+
+
+
+
+ ${isAudio ? H5PEditor.t('core', 'uploadAudio') : H5PEditor.t('core', 'uploadVideo')}
+
+
+
+ ${H5PEditor.t('core', 'uploadOr')}
+
+
+
+ ${dragCopyPasteString}
+
+
+
+
+ ${isAudio ? H5PEditor.t('core', 'dropAudio') : H5PEditor.t('core', 'dropVideo')}
+
+
+
+
+ `;
case 'InputLinkURL':
- return '
' + H5PEditor.t('core', isAudio ? 'enterAudioTitle' : 'enterVideoTitle') + ' ' +
- '
' +
- ' ' +
- '
' +
- (isAudio ? '' : '
' + H5PEditor.t('core', 'addVideoDescription') + '
');
-
+ return `
+
+
+
+
+
+
+ ${firstFile ? H5PEditor.t('core', 'replaceUrl') : H5PEditor.t('core', 'insertUrl')}
+
+
+
+ ${!isAudio ? `
+
+
+ ${H5PEditor.t('core', 'supportedVideoFormats')}
+
+
+ `: ''}
+
+
+ `;
default:
return '';
}
@@ -607,60 +1065,53 @@ H5PEditor.widgets.video = H5PEditor.widgets.audio = H5PEditor.AV = (function ($)
* @param {Array} extraTabs
* @returns {string} HTML
*/
- C.createTabbedAdd = function (type, extraTabs, id, hasDescription) {
+ C.createTabbedAdd = function (type, extraTabs) {
let i;
const tabs = [
'BasicFileUpload',
'InputLinkURL'
];
- for (i = 0; i < extraTabs.length; i++) {
- tabs.push(extraTabs[i]);
+
+ // Add when adding record audio
+ if (extraTabs && extraTabs.length > 0) {
+ 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));
- tabsHTML += '
' + title + '
';
+ switch (tab) {
+ case 'BasicFileUpload':
+ title = H5PEditor.t('core', 'fileUploadTitle');
+ tabsHTML +='
' + title + '
';
+ break;
+ case 'InputLinkURL':
+ title = H5PEditor.t('core', 'insertLinkTitle');
+ tabsHTML +='
' + title + '
';
+ break;
+ case 'AudioRecorder':
+ title = H5PEditor.t('core', 'recordAudioTitle');
+ tabsHTML +='
' + title + '
';
+ break;
+ default:
+ title = H5PEditor.t('H5PEditor.' + tab, 'title')
+ break;
+ }
tabpanelsHTML += '
' + C.createTabContent(tab, type) + '
';
}
return C.createInsertDialog(
- '
' + 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
+ '
' + tabsHTML + '
' + tabpanelsHTML
);
};
@@ -685,9 +1136,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',
},
];
@@ -716,5 +1167,17 @@ 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 3953e4f6..846058dc 100644
--- a/scripts/h5peditor-file-uploader.js
+++ b/scripts/h5peditor-file-uploader.js
@@ -19,7 +19,7 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) {
* @param {Blob|File} file
* @param {string} filename Required due to validation
*/
- self.upload = function (file, filename) {
+ self.upload = function (file, filename, context = {}) {
var formData = new FormData();
formData.append('file', file, filename);
formData.append('field', JSON.stringify(field));
@@ -29,12 +29,16 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) {
var request = new XMLHttpRequest();
request.upload.onprogress = function (e) {
if (e.lengthComputable) {
- self.trigger('uploadProgress', (e.loaded / e.total));
+ self.trigger('uploadProgress', {
+ ...context,
+ progress: (e.loaded / e.total)
+ });
}
};
request.onload = function () {
var result;
var uploadComplete = {
+ ...context,
error: null,
data: null
};
@@ -77,22 +81,25 @@ H5PEditor.FileUploader = (function ($, EventDispatcher) {
*
* @param {File[]} files
*/
- self.uploadFiles = function (files) {
- self.upload(files[0], files[0].name);
+ self.uploadFiles = function (files, context = {}) {
+ self.upload(files[0], files[0].name, context);
};
/**
* Open the file selector and trigger upload upon selecting file.
*/
- self.openFileSelector = function () {
+ self.openFileSelector = function ({ onChangeCallback, context } = {}) {
// 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);
+ self.uploadFiles(this.files, context);
document.body.removeChild(input);
});
diff --git a/scripts/h5peditor-file.js b/scripts/h5peditor-file.js
index 92288119..43f8d98a 100644
--- a/scripts/h5peditor-file.js
+++ b/scripts/h5peditor-file.js
@@ -59,6 +59,9 @@ 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) + ' %');
});
@@ -78,18 +81,17 @@ 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) {
- self.$errors.append(ns.createError(error));
+ this.setErrorMessage(error);
}
-
- self.addFile();
});
};
@@ -115,6 +117,7 @@ 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 9bc0d980..c7d71f04 100644
--- a/scripts/h5peditor-image.js
+++ b/scripts/h5peditor-image.js
@@ -22,6 +22,8 @@ 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;
@@ -41,13 +43,25 @@ ns.widgets.image = function (parent, field, params, setValue) {
this.confirmationDialog = new H5P.ConfirmationDialog({
headerText: H5PEditor.t('core', 'removeImage'),
- bodyText: H5PEditor.t('core', 'confirmImageRemoval')
- });
+ dialogText: H5PEditor.t('core', 'confirmImageRemoval')
+ }).appendTo(document.body);
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
@@ -56,10 +70,11 @@ 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
@@ -69,6 +84,12 @@ 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});
+ });
});
};
@@ -83,31 +104,41 @@ ns.widgets.image.prototype.constructor = ns.widgets.image;
ns.widgets.image.prototype.appendTo = function ($wrapper) {
var self = this;
- 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);
- var html = ns.createFieldMarkup(this.field, htmlString, this.id);
+ this.ariaLiveEl = this.$container.find('.h5p-sr-only').get(0);
- 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.addDragAndDropListeners();
+
+ this.$editImage = this.$container.find('.h5p-editing-image-button');
+ this.$copyrightButton = this.$container.find('.h5p-copyright-button');
+ this.$file = this.$container.find('.file');
+
+ this.$errors = this.$container.find('.h5p-errors');
this.addFile();
- var $dialog = $container.find('.h5p-editor-dialog');
- $container.find('.h5p-copyright-button').add($dialog.find('.h5p-close')).click(function () {
+ const $dialog = this.$container.find('.h5p-editor-dialog');
+
+ this.$container.parent().on('click', '.h5p-copyright-button, .h5p-editor-dialog .h5p-close', () => {
$dialog.toggleClass('h5p-open');
return false;
});
@@ -133,6 +164,7 @@ 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]);
});
@@ -150,7 +182,7 @@ ns.widgets.image.prototype.appendTo = function ($wrapper) {
self.$editImage.removeClass('loading');
});
- $container.find('.h5p-editing-image-button').click(function (event) {
+ this.$container.on('click', '.edit', function (event) {
if (self.params && self.params.path) {
var imageSrc;
if (!self.isEditing) {
@@ -164,6 +196,55 @@ 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;
@@ -173,88 +254,249 @@ 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);
+};
/**
- * Sync copyright.
+ * Will either upload or replace (and upload) an image.
+ *
+ * @param {FileList} files
*/
-ns.widgets.image.prototype.setCopyright = function (value) {
- this.copyright = this.params.copyright = value;
+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);
+};
/**
- * Creates thumbnail HTML and actions.
+ * Upload the first file in the FileList.
+ * @todo: handle multiple files?
*
- * @returns {boolean} True if file was added, false if file was removed
+ * @param {FileList} files
*/
-ns.widgets.image.prototype.addFile = function () {
- var that = this;
+ns.widgets.image.prototype.uploadFile = function (files) {
+ if (files.length > 0) {
+ this.upload(files[0], files[0].name);
+ }
+};
- if (this.params === undefined) {
+/**
+ * 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();
- // No image look
- let html = '
' +
- '' + ns.t('core', 'add') + '
' +
- ' '
-
- this.$file
- .html(html)
- .children('.add')
- .click(function () {
- that.isOriginalImage = true;
- that.openFileSelector();
- return false;
- });
+ const container = e.target.closest('.h5p-dnd__container');
+ const boxBlock = container.querySelector('.h5p-dnd__box__block');
- // Remove edit image button
- this.$editImage.addClass('hidden');
- this.$copyrightButton.addClass('hidden');
- this.isEditing = false;
+ 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);
+ }
+};
- return false;
+/**
+ * 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 `
+
+
+
+
${ns.t('core', 'uploadImage')}
+
+
+
+
+ ${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 `
+
+
+
+
+
+
+
+
+
+ ${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 `
+
+
+ ${ns.t('core', 'editImage')}
+ ${ns.t('core', 'deleteLabel')}
+ ${ns.t('core', 'editCopyright')}
+
+ `;
+};
+
+/**
+ *
+ * @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.
+ */
+ns.widgets.image.prototype.setCopyright = function (value) {
+ this.copyright = this.params.copyright = value;
+};
- 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.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);
});
- // Uploading original image
- that.$editImage.removeClass('hidden');
- that.$copyrightButton.removeClass('hidden');
+ this.cleanUp();
+ this.addDragAndDropListeners();
// Notify listeners that image was changed to params
- that.trigger('changedImage', this.params);
+ this.trigger('changedImage', this.params);
return true;
};
@@ -263,13 +505,24 @@ 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.addFile();
+
+ this.boxEl.removeAttribute('role');
+ this.boxEl.innerHTML = this.getBaseMarkup();
+
+ this.addDragAndDropListeners();
for (var i = 0; i < this.changes.length; i++) {
this.changes[i]();
@@ -291,6 +544,16 @@ 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.
*
@@ -304,3 +567,21 @@ 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/scripts/h5peditor-metadata.js b/scripts/h5peditor-metadata.js
index 2e69b800..2be54e51 100644
--- a/scripts/h5peditor-metadata.js
+++ b/scripts/h5peditor-metadata.js
@@ -263,7 +263,7 @@ H5PEditor.MetadataForm = (function (EventDispatcher, $, metadataSemantics) {
* @param {$} $element
*/
self.appendButtonTo = function ($item) {
- $button.appendTo($item.children('.h5peditor-label-wrapper').wrap('
').parent());
+ $button.appendTo($item.parent().find('.h5peditor-label-wrapper').first());
};
/**
diff --git a/styles/css/application.css b/styles/css/application.css
index f44107b1..c9af577d 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 .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 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: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 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}.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 .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}
diff --git a/styles/css/fonts/play-icon.svg b/styles/css/fonts/play-icon.svg
new file mode 100644
index 00000000..4fae56b2
--- /dev/null
+++ b/styles/css/fonts/play-icon.svg
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/styles/css/fonts/upload-audio.svg b/styles/css/fonts/upload-audio.svg
new file mode 100644
index 00000000..ed298d0e
--- /dev/null
+++ b/styles/css/fonts/upload-audio.svg
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/styles/css/fonts/upload-image.svg b/styles/css/fonts/upload-image.svg
new file mode 100644
index 00000000..5da31db0
--- /dev/null
+++ b/styles/css/fonts/upload-image.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/styles/css/fonts/upload-video.svg b/styles/css/fonts/upload-video.svg
new file mode 100644
index 00000000..e69a2b0c
--- /dev/null
+++ b/styles/css/fonts/upload-video.svg
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/styles/scss/_form-field.scss b/styles/scss/_form-field.scss
index 4439013a..7eac8cbb 100644
--- a/styles/scss/_form-field.scss
+++ b/styles/scss/_form-field.scss
@@ -20,11 +20,6 @@
display: inline;
}
- .h5p-editor-image-buttons {
- float: left;
- clear: both;
- }
-
.library {
border: 0;
}
@@ -36,7 +31,7 @@
.h5p-dialog-anchor {
position: relative;
- margin: -16px;
+ width: 100%;
}
}
diff --git a/styles/scss/_h5peditor-drag-and-drop.scss b/styles/scss/_h5peditor-drag-and-drop.scss
new file mode 100644
index 00000000..891ee4fb
--- /dev/null
+++ b/styles/scss/_h5peditor-drag-and-drop.scss
@@ -0,0 +1,709 @@
+.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 ebeb318b..8741f170 100644
--- a/styles/scss/_h5peditor-image-edit.scss
+++ b/styles/scss/_h5peditor-image-edit.scss
@@ -1,6 +1,7 @@
@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;
@@ -18,9 +19,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;
@@ -28,16 +29,27 @@
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 3b08cf69..0b9f5070 100644
--- a/styles/scss/_variables.scss
+++ b/styles/scss/_variables.scss
@@ -56,6 +56,21 @@ $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;
diff --git a/styles/scss/application.scss b/styles/scss/application.scss
index 9d433d84..605cc65b 100644
--- a/styles/scss/application.scss
+++ b/styles/scss/application.scss
@@ -5,6 +5,7 @@
@import "form-groups";
@import "h5peditor-image-edit";
@import "h5peditor-image-edit-popup";
+@import "h5peditor-drag-and-drop";
@import "deprecated";
html, body {
@@ -443,18 +444,14 @@ a {
text-align: center;
}
.h5p-add-dialog {
- position: absolute;
+ position: inherit;
z-index: 1;
visibility: hidden;
opacity: 0;
background: #fff;
- left: 1em;
- right: 1em;
- top: 1em;
- border: 1px solid #cdcdcd;
+ margin-bottom: 1rem;
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 {
@@ -465,37 +462,63 @@ a {
.h5p-add-dialog-table {
overflow: hidden;
+ position: relative;
.av-tablist {
- overflow: hidden;
- margin: 1em 1em 0 1em;
+ 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;
+ }
+ }
}
.av-tab {
cursor: pointer;
- float: left;
padding: 0.5em 0.75em;
- border-top: 1px solid #ccc;
- border-right: 1px solid #ccc;
- font-weight: bold;
+ border-top: 1px solid $av-tab-container-border-color;
+ border-right: 1px solid $av-tab-container-border-color;
+ position: relative;
+ font-weight: 600;
font-size: 15px;
- color: #666;
- background: #f5f5f5;
+ background: $av-tab-button-color;
+ z-index: 1;
- &:first-child {
- border-left: 1px solid #ccc;
+ &::before {
+ font-family: $icon-font-family;
+ color: $av-tab-button-font-color;
+ vertical-align: middle;
+ font-size: 1.8em;
+ margin-right: 4px;
}
+
&.selected {
- color: #333;
- background: #fff;
+ 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;
+ }
}
}
.av-tabpanel {
- border: 1px solid #ccc;
- margin: 0 1em 1em 1em;
- overflow: hidden;
+ border: 1px solid $av-tab-container-border-color;
+ border-radius: 0 0 5px 5px;
+ margin-top: 1px;
+ position: relative;
padding: 1em;
+ top: -1px;
h3 {
margin: 0 0 1em 0;
@@ -1219,6 +1242,19 @@ 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;