redmine_apijs 6.9.6 → 6.9.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README +8 -7
- data/app/controllers/apijs_controller.rb +1 -1
- data/app/views/application/_browser.html.erb +1 -1
- data/app/views/attachments/_links.html.erb +1 -1
- data/app/views/settings/_apijs.html.erb +1 -1
- data/assets/javascripts/apijs-redmine.js +1 -1
- data/assets/javascripts/apijs-redmine.min.js +2 -2
- data/assets/javascripts/apijs-redmine.min.js.map +1 -1
- data/assets/javascripts/apijs.min.js +3 -3
- data/assets/javascripts/apijs.min.js.map +1 -1
- data/assets/stylesheets/apijs-print.min.css +2 -2
- data/assets/stylesheets/apijs-print.min.css.map +1 -1
- data/assets/stylesheets/apijs-redmine-rtl.min.css +1 -1
- data/assets/stylesheets/apijs-redmine-rtl.min.css.map +1 -1
- data/assets/stylesheets/apijs-redmine.css +1 -1
- data/assets/stylesheets/apijs-redmine.min.css +1 -1
- data/assets/stylesheets/apijs-redmine.min.css.map +1 -1
- data/assets/stylesheets/apijs-screen-rtl.min.css +2 -2
- data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -1
- data/assets/stylesheets/apijs-screen.min.css +2 -2
- data/assets/stylesheets/apijs-screen.min.css.map +1 -1
- data/config/routes.rb +1 -1
- data/init.rb +3 -3
- data/lib/apijs_attachment.rb +5 -3
- data/lib/apijs_files.rb +1 -1
- data/lib/image.py +1 -1
- data/lib/redmine_apijs.rb +1 -1
- data/lib/useragentparser.rb +15 -9
- data/redmine_apijs.gemspec +1 -1
- metadata +3 -6
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["../code/apijs/src/javascripts/main.js","../code/apijs/src/javascripts/i18n.js","../code/apijs/src/javascripts/select.js","../code/apijs/src/javascripts/player.js","../code/apijs/src/javascripts/dialog.js","../code/apijs/src/javascripts/slideshow.js","../code/apijs/src/javascripts/upload.js"],"sourcesContent":["/**\n * Created J/03/12/2009\n * Updated S/23/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\nif (!Array.prototype.has) {\n\tArray.prototype.has = function (needle, key) {\n\t\tif (needle instanceof Array) {\n\t\t\tfor (key in needle) if (needle.hasOwnProperty(key)) {\n\t\t\t\tif (this.has(needle[key]))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (key in this) if (this.hasOwnProperty(key)) {\n\t\t\t\tif (this[key] === needle)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n}\n\nif (window.NodeList && !NodeList.prototype.forEach) {\n\tNodeList.prototype.forEach = function (callback, that, i) {\n\t\tthat = that || window;\n\t\tfor (i = 0; i < this.length; i++)\n\t\t\tcallback.call(that, this[i], i, this);\n\t};\n}\n\nvar apijs = new (function () {\n\n\t\"use strict\";\n\tthis.core = {};\n\tthis.version = 696;\n\n\tthis.config = {\n\t\tlang: 'auto',\n\t\tdebug: false,\n\t\t//select: { },\n\t\tdialog: {\n\t\t\tcloseOnClick: false,\n\t\t\trestrictNavigation: true,\n\t\t\tplayer: true\n\t\t},\n\t\tslideshow: {\n\t\t\tids: 'slideshow',\n\t\t\tanchor: true\n\t\t},\n\t\tupload: {\n\t\t\ttokenName: 'X-CSRF-Token',\n\t\t\ttokenValue: null\n\t\t}\n\t};\n\n\tthis.start = function () {\n\n\t\tvar elem;\n\n\t\t// bonjour\n\t\tconsole.info('APIJS ' + this.version.toString().split('').join('.') + ' - hello - 1 MB/Mo = 1024 kB/ko');\n\t\tif (document.getElementById('oldBrowser'))\n\t\t\tthrow new Error('APIJS canceled, #oldBrowser detected!');\n\n\t\tif (elem = document.querySelector('link[href*=\"apijs/fontello.woff2\"]')) {\n\t\t\tif (elem.getAttribute('href').indexOf('?a3ab5acff3') < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for link:fontello.woff2?x, it must be ?a3ab5acff3');\n\t\t}\n\t\tif (elem = document.querySelector('script[src*=\"apijs.min.js?v=\"]')) {\n\t\t\tif (elem.getAttribute('src').indexOf('?v=' + this.version) < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for script:apijs.min.js?x, it must be ?v=' + this.version);\n\t\t}\n\n\t\t// instancie\n\t\tthis.i18n = new this.core.i18n();\n\t\t//this.select = new this.core.select();\n\t\tthis.dialog = new this.core.dialog();\n\t\tthis.upload = new this.core.upload();\n\t\tthis.slideshow = new this.core.slideshow();\n\t\tself.dispatchEvent(new CustomEvent('apijsbeforeload'));\n\n\t\t// démarre\n\t\tthis.i18n.init();\n\t\tthis.slideshow.init();\n\t\t//this.select.init();\n\t\tdocument.querySelectorAll('video.apijsplayer[data-src]').forEach(function (elem) {\n\t\t\tapijs.startPlayer(elem, elem.getAttribute('data-src'));\n\t\t});\n\n\t\tself.addEventListener('popstate', this.slideshow.onPopState);\n\t\tself.addEventListener('hashchange', this.slideshow.onPopState);\n\n\t\tif (this.config.debug) {\n\t\t\tconsole.info('APIJS available languages: ' + Object.keys(this.i18n.data).join(' '));\n\t\t\tconsole.info('APIJS language loaded: ' + this.config.lang);\n\t\t\tconsole.info('APIJS successfully started');\n\t\t}\n\n\t\t// événement\n\t\tself.dispatchEvent(new CustomEvent('apijsload'));\n\t};\n\n\tthis.formatNumber = function (nb, dec) {\n\n\t\t// par défaut 2 chiffres\n\t\tvar dgt = (typeof dec == 'number') ? dec : ((dec === false) ? 0 : 2), str;\n\n\t\t// Firefox 29+ pas 27+, (iOS) Safari 10+ pas 9+\n\t\ttry {\n\t\t\tstr = new Intl.NumberFormat(this.config.lang, { minimumFractionDigits: dgt, maximumFractionDigits: dgt }).format(nb);\n\t\t}\n\t\tcatch (e) {\n\t\t\tstr = nb.toFixed(dgt);\n\t\t}\n\n\t\t// conserve 00 si on veut vraiment 2 chiffres\n\t\treturn (typeof dec == 'number') ? str : str.replace(/[.,]00$/, '');\n\t};\n\n\tthis.startPlayer = function (elem, url) {\n\n\t\tif (this.config.dialog.player === true) {\n\t\t\telem.videoPlayer = new this.core.player(elem, url);\n\t\t\telem.parentNode.classList.add('apijsvideoplayer');\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof this.config.dialog.player == 'function') {\n\t\t\tthis.config.dialog.player(elem, url);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tthis.toArray = function (data, max) {\n\t\treturn Array.prototype.slice.call(data, 0, max);\n\t};\n\n\tthis.openTab = function (ev) {\n\t\tev.preventDefault();\n\t\tif (this.href.length > 0)\n\t\t\tself.open(this.href);\n\t};\n\n\tthis.log = function (txt) {\n\t\tif (this.config.debug)\n\t\t\tconsole.info('APIJS ' + txt);\n\t};\n\n\tthis.html = function (selector, id) {\n\t\tif ((id === true) || (selector.indexOf('#') === 0))\n\t\t\treturn document.getElementById(selector.replace('#', 'apijs'));\n\t\telse if (this.dialog.t1)\n\t\t\treturn this.dialog.t1.querySelector(selector);\n\t\telse\n\t\t\treturn null;\n\t};\n\n\tthis.requestFullscreen = function (elem) {\n\t\tif (document.webkitFullscreenElement)\n\t\t\tdocument.webkitCancelFullScreen();\n\t\telse if (document.mozFullScreenElement)\n\t\t\tdocument.mozCancelFullScreen();\n\t\telse if (document.fullscreenElement)\n\t\t\tdocument.cancelFullScreen();\n\t\telse if (elem.webkitRequestFullscreen)\n\t\t\telem.webkitRequestFullscreen();\n\t\telse if (elem.requestFullscreen)\n\t\t\telem.requestFullscreen();\n\t\telse if (elem.mozRequestFullScreen)\n\t\t\telem.mozRequestFullScreen();\n\t};\n\n\tthis.serialize = function (form, filter) {\n\n\t\tvar data = [];\n\t\tfilter = (typeof filter == 'string') ? filter : '';\n\n\t\t// @see https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/\n\t\tArray.prototype.forEach.call(form.elements, function (elem, idx) {\n\n\t\t\tif (!elem.name || elem.disabled || ['file', 'reset', 'submit', 'button'].has(elem.type) || (elem.name.indexOf(filter) !== 0))\n\t\t\t\treturn;\n\n\t\t\tif (elem.type === 'select-multiple') {\n\t\t\t\tfor (idx = 0; idx < elem.options.length; idx++) {\n\t\t\t\t\tif (elem.options[idx].selected)\n\t\t\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.options[idx].value));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!['checkbox', 'radio'].has(elem.type) || elem.checked) {\n\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.value));\n\t\t\t}\n\t\t});\n\n\t\treturn data.join('&');\n\t};\n\n})();\n\nif (typeof self.addEventListener == 'function')\n\tself.addEventListener('load', apijs.start.bind(apijs));","/**\n * Created S/05/06/2010\n * Updated D/03/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.i18n = function () {\n\n\t\"use strict\";\n\tthis.data = {\n\t\t// @see https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing\n\t\t// auto start\n\t\tcs: {\n\t\t\t103: \"Zrušit\",\n\t\t\t104: \"Potvrzení\",\n\t\t\t105: \"Zavřít\",\n\t\t\t106: \"Předchozí\",\n\t\t\t107: \"Následující\",\n\t\t\t108: \"Vybrat soubor\",\n\t\t\t132: \"video stopa\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuto\",\n\t\t\t142: \"předchozí/následující\",\n\t\t\t143: \"přehrát/pozastavit\",\n\t\t\t144: \"zpět/vpřed\",\n\t\t\t145: \"snížit/zvýšit hlasitost\",\n\t\t\t146: \"ztlumit\",\n\t\t\t148: \"ukončit\",\n\t\t\t149: \"Konec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tde: {\n\t\t\t103: \"Abbrechen\",\n\t\t\t104: \"Bestätigen\",\n\t\t\t105: \"Schließen\",\n\t\t\t106: \"Vorheriges\",\n\t\t\t107: \"Nächstes\",\n\t\t\t108: \"Datei wählen\",\n\t\t\t109: \"Dateien wählen\",\n\t\t\t124: \"Verarbeitung läuft...\",\n\t\t\t132: \"videospur\",\n\t\t\t133: \"audiospur\",\n\t\t\t134: \"untertitel\",\n\t\t\t135: \"aus\",\n\t\t\t142: \"vorheriges/nächstes\",\n\t\t\t143: \"wiedergabe/pause\",\n\t\t\t144: \"rückwärts/vorwärts\",\n\t\t\t145: \"leiser/lauter\",\n\t\t\t146: \"ton aus\",\n\t\t\t147: \"vollbild\",\n\t\t\t148: \"beenden\",\n\t\t\t149: \"Ende\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Alle Dateien wurden akzeptiert.\",\n\t\t\t162: \"Akzeptiertes Dateiformat: §.\",\n\t\t\t163: \"Akzeptiertes Dateiformate: § und §.\",\n\t\t\t164: \"Maximale Größe: § MB.\",\n\t\t\t167: \"Unerlaubtes Format\",\n\t\t\t168: \"Format zu gross\",\n\t\t\t169: \"Leere Datei\",\n\t\t\t181: \"§% - § kB/s - Noch § Minuten\",\n\t\t\t182: \"§% - § kB/s - Noch § Minute\",\n\t\t\t183: \"§% - § kB/s - Noch § Sekunden\",\n\t\t\t185: \"§% - bis § kB/s in § Minuten\",\n\t\t\t186: \"§% - bis § kB/s in § Minute\",\n\t\t\t187: \"§% - bis § kB/s in § Sekunden\",\n\t\t\t188: \"§% - bis § kB/s\",\n\t\t\t191: \"Abbrechen\",\n\t\t\t192: \"Sind Sie sicher? [span]Ja[/span] - Nein\",\n\t\t\t193: \"Es ist ein unerwarteter Fehler aufgetreten... Bitte versuchen Sie es noch einmal.\",\n\t\t\t194: \"Es ist ein Fehler beim Senden.\",\n\t\t\t195: \"Es ist ein Fehler bei der Verarbeitung.\",\n\t\t\t196: \"Wir laden Sie ein es erneut zu [a §]versuchen[/a].\"\n\t\t},\n\t\tel: {\n\t\t\t102: \"Εντάξει\",\n\t\t\t103: \"Ακύρωση\",\n\t\t\t105: \"Κλείσιμο\",\n\t\t\t106: \"Προηγούμενο\",\n\t\t\t107: \"Επόμενο\",\n\t\t\t108: \"Επιλέξτε ένα αρχείο\",\n\t\t\t131: \"βίντεο\",\n\t\t\t132: \"κομμάτι βίντεο\",\n\t\t\t133: \"κομμάτι ήχου\",\n\t\t\t134: \"υπότιτλοι\",\n\t\t\t135: \"απενεργοποίηση\",\n\t\t\t142: \"προηγούμενο/επόμενο\",\n\t\t\t143: \"αναπαραγωγή/παύση\",\n\t\t\t144: \"προς τα πίσω/εμπρός\",\n\t\t\t145: \"μείωση/αύξηση έντασης ήχου\",\n\t\t\t146: \"σίγαση\",\n\t\t\t147: \"πλήρης οθόνη\",\n\t\t\t148: \"έξοδος\",\n\t\t\t149: \"Τέλος\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ten: {\n\t\t\t102: \"Ok\",\n\t\t\t103: \"Cancel\",\n\t\t\t104: \"Confirm\",\n\t\t\t105: \"Close\",\n\t\t\t106: \"Previous\",\n\t\t\t107: \"Next\",\n\t\t\t108: \"Choose a file\",\n\t\t\t109: \"Choose one or multiple files\",\n\t\t\t124: \"Operation in progress...\",\n\t\t\t125: \"Upload in progress...\",\n\t\t\t126: \"Processing file in progress...\",\n\t\t\t127: \"Drag and drop your files here\",\n\t\t\t131: \"video\",\n\t\t\t132: \"video track\",\n\t\t\t133: \"audio track\",\n\t\t\t134: \"subtitles\",\n\t\t\t135: \"off\",\n\t\t\t141: \"first/last\",\n\t\t\t142: \"previous/next\",\n\t\t\t143: \"play/pause\",\n\t\t\t144: \"backward/forward\",\n\t\t\t145: \"decrease/increase the volume\",\n\t\t\t146: \"mute\",\n\t\t\t147: \"full screen\",\n\t\t\t148: \"quit\",\n\t\t\t149: \"End\",\n\t\t\t150: \"Escape\",\n\t\t\t161: \"All files are accepted.\",\n\t\t\t162: \"Accepted file format: §.\",\n\t\t\t163: \"Accepted file formats: § and §.\",\n\t\t\t164: \"Maximum size: § MB.\",\n\t\t\t165: \"Maximum size by file: § MB.|Total maximum size: § MB.\",\n\t\t\t166: \"§ MB\",\n\t\t\t167: \"Format not allowed\",\n\t\t\t168: \"Size too large\",\n\t\t\t169: \"File empty\",\n\t\t\t181: \"§% - § kB/s - § minutes left\",\n\t\t\t182: \"§% - § kB/s - § minute left\",\n\t\t\t183: \"§% - § kB/s - § seconds left\",\n\t\t\t184: \"§% - § kB/s\",\n\t\t\t185: \"§% - at § kB/s in § minutes\",\n\t\t\t186: \"§% - at § kB/s in § minute\",\n\t\t\t187: \"§% - at § kB/s in § seconds\",\n\t\t\t188: \"§% - at § kB/s\",\n\t\t\t191: \"Interrupt\",\n\t\t\t192: \"Are you sure? [span]Yes[/span] - No\",\n\t\t\t193: \"It seems that an unlikely mistake just happened... Please try again.\",\n\t\t\t194: \"An error occurred while sending.\",\n\t\t\t195: \"An error occurred while processing.\",\n\t\t\t196: \"We invite you to [a §]try again[/a].\"\n\t\t},\n\t\tes: {\n\t\t\t102: \"Aceptar\",\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Cerrar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Siguiente\",\n\t\t\t108: \"Elegir un fichero\",\n\t\t\t109: \"Elegir uno o varios ficheros\",\n\t\t\t124: \"Operación en curso...\",\n\t\t\t125: \"Envío en progreso...\",\n\t\t\t126: \"Tratamiento en curso...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"pista de vídeo\",\n\t\t\t133: \"pista de audio\",\n\t\t\t134: \"subtítulos\",\n\t\t\t135: \"desactivar\",\n\t\t\t142: \"anterior/siguiente\",\n\t\t\t143: \"reproducir/pausa\",\n\t\t\t144: \"retroceder/avanzar\",\n\t\t\t145: \"bajar/subir volumen\",\n\t\t\t146: \"silenciar\",\n\t\t\t147: \"pantalla completa\",\n\t\t\t148: \"salir\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Se aceptan todos los archivos.\",\n\t\t\t162: \"Formato de archivo aceptado: §.\",\n\t\t\t163: \"Formatos de archivos aceptados: § y §.\",\n\t\t\t164: \"Tamaño máximo: § MB.\",\n\t\t\t165: \"Tamaño máximo por fichero: § Mo.|Tamaño máximo total: § Mo.\",\n\t\t\t167: \"Formato no autorizado\",\n\t\t\t168: \"Tamaño demasiado importante\",\n\t\t\t169: \"Fichero vacío\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - a § kB/s en § minutos\",\n\t\t\t186: \"§% - a § kB/s en § minuto\",\n\t\t\t187: \"§% - a § kB/s en § segundos\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrumpir\",\n\t\t\t192: \"¿Está seguro(a)? [span]Sí[/span] - No\",\n\t\t\t193: \"Parece que un error improbable acabo de ocurrir... Por favor, inténtelo de nuevo.\",\n\t\t\t194: \"Se produjo un error durante el envío.\",\n\t\t\t195: \"Se produjo un error durante el procesamiento.\",\n\t\t\t196: \"Le invitamos a [a §]intentar de nuevo[/a].\"\n\t\t},\n\t\tfr: {\n\t\t\t103: \"Annuler\",\n\t\t\t104: \"Valider\",\n\t\t\t105: \"Fermer\",\n\t\t\t106: \"Précédent\",\n\t\t\t107: \"Suivant\",\n\t\t\t108: \"Choisir un fichier\",\n\t\t\t109: \"Choisir un ou plusieurs fichiers\",\n\t\t\t124: \"Opération en cours...\",\n\t\t\t125: \"Envoi en cours...\",\n\t\t\t126: \"Traitement en cours...\",\n\t\t\t127: \"Faites glisser et déposez vos fichiers ici\",\n\t\t\t131: \"vidéo\",\n\t\t\t132: \"piste vidéo\",\n\t\t\t133: \"piste audio\",\n\t\t\t134: \"sous-titres\",\n\t\t\t141: \"premier/dernier\",\n\t\t\t142: \"précédent/suivant\",\n\t\t\t143: \"lecture/pause\",\n\t\t\t144: \"reculer/avancer\",\n\t\t\t145: \"réduire/augmenter le volume\",\n\t\t\t146: \"couper le son\",\n\t\t\t147: \"plein écran\",\n\t\t\t148: \"quitter\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Échap\",\n\t\t\t161: \"Tous les fichiers sont acceptés.\",\n\t\t\t162: \"Format de fichier accepté : §.\",\n\t\t\t163: \"Formats de fichier acceptés : § et §.\",\n\t\t\t164: \"Taille maximale : § Mo.\",\n\t\t\t165: \"Taille maximale par fichier : § Mo.|Taille maximale total : § Mo.\",\n\t\t\t166: \"§ Mo\",\n\t\t\t167: \"Format non autorisé\",\n\t\t\t168: \"Taille trop importante\",\n\t\t\t169: \"Fichier vide\",\n\t\t\t181: \"§% - § ko/s - § minutes restantes\",\n\t\t\t182: \"§% - § ko/s - § minute restante\",\n\t\t\t183: \"§% - § ko/s - § secondes restantes\",\n\t\t\t184: \"§% - § ko/s\",\n\t\t\t185: \"§% - à § ko/s en § minutes\",\n\t\t\t186: \"§% - à § ko/s en § minute\",\n\t\t\t187: \"§% - à § ko/s en § secondes\",\n\t\t\t188: \"§% - à § ko/s\",\n\t\t\t191: \"Interrompre\",\n\t\t\t192: \"Êtes-vous sûr(e) ? [span]Oui[/span] - Non\",\n\t\t\t193: \"Il semblerait qu'une erreur improbable vient de se produire... Veuillez réessayer.\",\n\t\t\t194: \"Une erreur est survenue lors de l'envoi.\",\n\t\t\t195: \"Une erreur est survenue lors du traitement.\",\n\t\t\t196: \"Nous vous invitons à [a §]réessayer[/a].\"\n\t\t},\n\t\thu: {\n\t\t\t103: \"Mégsem\",\n\t\t\t104: \"Megerősít\",\n\t\t\t105: \"Bezár\",\n\t\t\t106: \"Előző\",\n\t\t\t107: \"Következő\",\n\t\t\t108: \"Válasszon fájlt\",\n\t\t\t131: \"videó\",\n\t\t\t132: \"videosáv\",\n\t\t\t133: \"hangsáv\",\n\t\t\t134: \"feliratok\",\n\t\t\t135: \"ki\",\n\t\t\t142: \"előző/következő\",\n\t\t\t143: \"lejátszás/szünet\",\n\t\t\t144: \"vissza/előre\",\n\t\t\t145: \"hangerő csökkentés/növelése\",\n\t\t\t146: \"némítás\",\n\t\t\t147: \"teljes képernyő\",\n\t\t\t148: \"kilépés\",\n\t\t\t149: \"Befejezés\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tit: {\n\t\t\t103: \"Annulla\",\n\t\t\t104: \"Conferma\",\n\t\t\t105: \"Chiudi\",\n\t\t\t106: \"Precedente\",\n\t\t\t107: \"Successivo\",\n\t\t\t108: \"Scegli un file\",\n\t\t\t109: \"Scegli uno o più file\",\n\t\t\t124: \"Operazione in corso...\",\n\t\t\t125: \"Invio in corso...\",\n\t\t\t126: \"Trattamento in corso...\",\n\t\t\t132: \"traccia video\",\n\t\t\t133: \"traccia audio\",\n\t\t\t134: \"sottotitoli\",\n\t\t\t135: \"inattivo\",\n\t\t\t142: \"precedente/successivo\",\n\t\t\t143: \"riproduci/pausa\",\n\t\t\t144: \"indietro/avanti\",\n\t\t\t145: \"riduci/aumenta volume\",\n\t\t\t146: \"silenzio\",\n\t\t\t147: \"schermo intero\",\n\t\t\t148: \"esci\",\n\t\t\t149: \"Fine\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Tutti i file sono accettati.\",\n\t\t\t162: \"Formato del file accettato: §.\",\n\t\t\t163: \"Formati accettati: § et §.\",\n\t\t\t164: \"Dimensione massima: § MB.\",\n\t\t\t167: \"Formato non autorizzato\",\n\t\t\t168: \"Dimensione troppo importante\",\n\t\t\t169: \"File vuoto\",\n\t\t\t181: \"§% - § kB/s - § minuti rimanenti\",\n\t\t\t182: \"§% - § kB/s - § minuto rimanente\",\n\t\t\t183: \"§% - § kB/s - § secondi rimanenti\",\n\t\t\t185: \"§% - a § kB/s in § minuti\",\n\t\t\t186: \"§% - a § kB/s in § minuto\",\n\t\t\t187: \"§% - a § kB/s in § secondi\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrompere\",\n\t\t\t192: \"Sei sicuro? [span]Si[/span] - No\",\n\t\t\t193: \"Sembra che un errore inaspettato si sia verificato... Riprova.\",\n\t\t\t194: \"Un errore si è verificato durante l'invio.\",\n\t\t\t195: \"Un errore si è verificato durante il trattamento.\",\n\t\t\t196: \"Vi invitiamo a [a §]riprovare[/a].\"\n\t\t},\n\t\tja: {\n\t\t\t103: \"キャンセル\",\n\t\t\t104: \"承認\",\n\t\t\t105: \"閉じる\",\n\t\t\t106: \"前へ\",\n\t\t\t107: \"次へ\",\n\t\t\t108: \"ファイルを選択する\",\n\t\t\t131: \"ビデオ\",\n\t\t\t132: \"ビデオトラック\",\n\t\t\t133: \"オーディオトラック\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"オフ\",\n\t\t\t142: \"前へ/次へ\",\n\t\t\t143: \"再生/一時停止\",\n\t\t\t144: \"戻る/進む\",\n\t\t\t146: \"ミュート\",\n\t\t\t147: \"全画面表示\",\n\t\t\t148: \"終了\",\n\t\t\t149: \"終了\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ Mo\",\n\t\t\t184: \"§% - § Ko/s\",\n\t\t\t192: \"よろしいですか?[span]はい[/span] - いいえ\"\n\t\t},\n\t\tnl: {\n\t\t\t103: \"Annuleren\",\n\t\t\t104: \"Bevestigen\",\n\t\t\t105: \"Sluiten\",\n\t\t\t106: \"Vorige\",\n\t\t\t107: \"Volgende\",\n\t\t\t108: \"Kies een bestand\",\n\t\t\t132: \"videospoor\",\n\t\t\t133: \"audiospoor\",\n\t\t\t134: \"ondertitels\",\n\t\t\t135: \"uit\",\n\t\t\t142: \"vorige/volgende\",\n\t\t\t143: \"afspelen/pauzeren\",\n\t\t\t144: \"achteruit/vooruit\",\n\t\t\t145: \"volume omlaag/omhoog\",\n\t\t\t146: \"dempen\",\n\t\t\t147: \"schermvullend\",\n\t\t\t148: \"afsluiten\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpl: {\n\t\t\t103: \"Anuluj\",\n\t\t\t104: \"Potwierdź\",\n\t\t\t105: \"Zamknij\",\n\t\t\t106: \"Poprzedni\",\n\t\t\t107: \"Następny\",\n\t\t\t108: \"Wybierz plik\",\n\t\t\t131: \"obraz\",\n\t\t\t132: \"ścieżka obrazu\",\n\t\t\t133: \"ścieżka dźwiękowa\",\n\t\t\t134: \"napisy\",\n\t\t\t135: \"wyłączone\",\n\t\t\t142: \"poprzedni/następny\",\n\t\t\t143: \"odtwarzaj/wstrzymaj\",\n\t\t\t144: \"wstecz/przodu\",\n\t\t\t145: \"ciszej/głośniej\",\n\t\t\t146: \"wycisz\",\n\t\t\t147: \"pełny ekran\",\n\t\t\t148: \"zakończ\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpt: {\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Fechar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Seguinte\",\n\t\t\t108: \"Escolha um ficheiro\",\n\t\t\t124: \"Operação em processo...\",\n\t\t\t125: \"Envio em processo...\",\n\t\t\t126: \"Tratamento em processo...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"faixa de vídeo\",\n\t\t\t133: \"faixa de áudio\",\n\t\t\t134: \"legendas\",\n\t\t\t135: \"não\",\n\t\t\t142: \"anterior/seguinte\",\n\t\t\t143: \"reprodução/pausa\",\n\t\t\t144: \"recuar/avançar\",\n\t\t\t145: \"diminuir/aumentar volume\",\n\t\t\t146: \"sem som\",\n\t\t\t147: \"ecrã completo\",\n\t\t\t148: \"sair\",\n\t\t\t149: \"Fim\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Todos os ficheiros foram aceites.\",\n\t\t\t162: \"Formato do ficheiro aceite: §.\",\n\t\t\t163: \"Formatos de ficheiro aceites: § e §.\",\n\t\t\t164: \"Tamanho máximo: § MB.\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - § kB/s em § minutos\",\n\t\t\t186: \"§% - § kB/s em § minuto\",\n\t\t\t187: \"§% - § kB/s em § segundos\",\n\t\t\t188: \"§% - § kB/s\",\n\t\t\t192: \"Tem a certeza? [span]Sim[/span] - Não\",\n\t\t\t193: \"Parece ter acontecido um erro imprevisto. Por favor, tente novamente.\",\n\t\t\t194: \"Ocorreu um erro ao enviar.\",\n\t\t\t195: \"Ocorreu um erro ao processar.\",\n\t\t\t196: \"Convidamo-lo a [a §]tentar novamente[/a].\"\n\t\t},\n\t\tptbr: {\n\t\t\t107: \"Próximo\",\n\t\t\t108: \"Escolher um arquivo\",\n\t\t\t124: \"Operação em andamento...\",\n\t\t\t125: \"Envio em andamento...\",\n\t\t\t126: \"Tratamento em andamento...\",\n\t\t\t132: \"trilha de vídeo\",\n\t\t\t133: \"trilha de áudio\",\n\t\t\t135: \"desligado\",\n\t\t\t142: \"anterior/próximo\",\n\t\t\t143: \"reproduzir/pausar\",\n\t\t\t144: \"retroceder/avançar\",\n\t\t\t146: \"sem áudio\",\n\t\t\t147: \"tela inteira\",\n\t\t\t148: \"fechar\",\n\t\t\t149: \"Final\"\n\t\t},\n\t\tro: {\n\t\t\t103: \"Anuleaza\",\n\t\t\t104: \"Confirmare\",\n\t\t\t105: \"Inchide\",\n\t\t\t106: \"Anteriorul\",\n\t\t\t107: \"Urmatorul\",\n\t\t\t108: \"Alege un fișier\",\n\t\t\t132: \"pistă video\",\n\t\t\t133: \"pistă audio\",\n\t\t\t134: \"subtitluri\",\n\t\t\t135: \"oprit\",\n\t\t\t142: \"anteriorul/urmatorul\",\n\t\t\t143: \"redare/pauză\",\n\t\t\t144: \"înapoi/înaintează\",\n\t\t\t145: \"scade/crește volumul\",\n\t\t\t146: \"mut\",\n\t\t\t147: \"pe tot ecranul\",\n\t\t\t148: \"ieșire\",\n\t\t\t149: \"Sfârșit\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tru: {\n\t\t\t102: \"Ок\",\n\t\t\t103: \"Отмена\",\n\t\t\t104: \"Подтвердить\",\n\t\t\t105: \"Закрыть\",\n\t\t\t106: \"Предыдущий\",\n\t\t\t107: \"Следующий\",\n\t\t\t108: \"Выберите файл\",\n\t\t\t124: \"Операция в процессе...\",\n\t\t\t131: \"видео\",\n\t\t\t132: \"видеодорожка\",\n\t\t\t133: \"аудиодорожка\",\n\t\t\t134: \"субтитры\",\n\t\t\t135: \"выключено\",\n\t\t\t142: \"предыдущий/следующий\",\n\t\t\t143: \"воспроизведение/пауза\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"понизить/повысить громкость\",\n\t\t\t146: \"выключить звук\",\n\t\t\t147: \"полноэкранный режим\",\n\t\t\t148: \"выйти\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Все файлы приняты.\",\n\t\t\t162: \"Формат файла: §.\",\n\t\t\t163: \"Форматы файлов: § и §.\",\n\t\t\t164: \"Максимальный размер: § Мб.\",\n\t\t\t166: \"§ Мб\",\n\t\t\t181: \"§% - § Кб/s - осталось § минут\",\n\t\t\t182: \"§% - § Кб/s - осталось § минут\",\n\t\t\t183: \"§% - § Кб/s - осталось § секунд\",\n\t\t\t184: \"§% - § Кб/s\",\n\t\t\t185: \"§% - § Кб/s за § минут\",\n\t\t\t186: \"§% - § Кб/s за § минут\",\n\t\t\t187: \"§% - § Кб/s за § секунд\",\n\t\t\t188: \"§% - § Кб/s\",\n\t\t\t192: \"Вы уверены? [span]Да[/span] - нет\",\n\t\t\t193: \"Кажется произошла не предусмотренная ошибка... Попробуйте еще раз.\",\n\t\t\t194: \"Возникла ошибка при отправке файла.\",\n\t\t\t195: \"Возникла ошибка при обработке файла.\"\n\t\t},\n\t\tsk: {\n\t\t\t103: \"Zrušiť\",\n\t\t\t104: \"Potvrdiť\",\n\t\t\t105: \"Zavrieť\",\n\t\t\t106: \"Dozadu\",\n\t\t\t107: \"Ďalej\",\n\t\t\t108: \"Zvoľte si súbor\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuté\",\n\t\t\t142: \"dozadu/ďalej\",\n\t\t\t143: \"prehrať/pozastaviť\",\n\t\t\t144: \"dozadu/dopredu\",\n\t\t\t145: \"znizit/zvysit hlasitost\",\n\t\t\t146: \"stlmiť\",\n\t\t\t148: \"koniec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ttr: {\n\t\t\t102: \"Tamam\",\n\t\t\t103: \"İptal\",\n\t\t\t104: \"Onayla\",\n\t\t\t105: \"Kapat\",\n\t\t\t106: \"Önceki\",\n\t\t\t107: \"Sonraki\",\n\t\t\t108: \"Bir dosya seçin\",\n\t\t\t131: \"görüntü\",\n\t\t\t132: \"görüntü kaydı\",\n\t\t\t133: \"ses kaydı\",\n\t\t\t134: \"altyazılar\",\n\t\t\t135: \"kapalı\",\n\t\t\t142: \"önceki/sonraki\",\n\t\t\t143: \"duraklatma/oynatma\",\n\t\t\t144: \"geri/i̇leri\",\n\t\t\t145: \"ses kısar/açar\",\n\t\t\t146: \"sesi kapatma\",\n\t\t\t147: \"tam ekran\",\n\t\t\t148: \"çıkış\",\n\t\t\t149: \"Son\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"Emin misiniz ? [span]Evet[/span] - Hayır\"\n\t\t},\n\t\tuk: {\n\t\t\t102: \"Гаразд\",\n\t\t\t103: \"Відмінити\",\n\t\t\t104: \"Підтвердити\",\n\t\t\t105: \"Закрити\",\n\t\t\t106: \"Попередній\",\n\t\t\t107: \"Наступний\",\n\t\t\t108: \"Вибрати файл\",\n\t\t\t131: \"відео\",\n\t\t\t132: \"відеодоріжка\",\n\t\t\t133: \"звукова доріжка\",\n\t\t\t134: \"субтитри\",\n\t\t\t135: \"вимкнено\",\n\t\t\t142: \"попередній/наступний\",\n\t\t\t143: \"відтворити/призупинити\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"зменшити/збільшити гучність\",\n\t\t\t146: \"вимкнути звук\",\n\t\t\t148: \"вийти\",\n\t\t\t149: \"Кінець\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ МБ\",\n\t\t\t184: \"§% - § кБ/s\"\n\t\t},\n\t\tzh: {\n\t\t\t102: \"确定\",\n\t\t\t103: \"取消\",\n\t\t\t104: \"确认\",\n\t\t\t105: \"关闭\",\n\t\t\t106: \"上一个\",\n\t\t\t107: \"下一个\",\n\t\t\t108: \"选择文件\",\n\t\t\t131: \"视频\",\n\t\t\t132: \"视频轨道\",\n\t\t\t133: \"音频轨道\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"关\",\n\t\t\t142: \"上一个/下一个\",\n\t\t\t143: \"播放/暂停\",\n\t\t\t144: \"快退/快进\",\n\t\t\t145: \"音量减/增\",\n\t\t\t146: \"静音\",\n\t\t\t147: \"全屏\",\n\t\t\t148: \"退出\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"您确定吗?[span]是[/span] - 否\"\n\t\t}\n\t\t// auto end\n\t};\n\n\tthis.init = function () {\n\n\t\tvar value = apijs.config.lang, html = document.querySelector('html');\n\n\t\tif (value.indexOf('auto') > -1) {\n\t\t\tvalue = html.getAttribute('xml:lang') || html.getAttribute('lang'); // pt-BR fr-FR\n\t\t\tif (typeof value == 'string') {\n\t\t\t\tvalue = value.replace(/[-_]/g, '').toLowerCase();\n\t\t\t\tvalue = value.slice(0, 4); // ptbr frfr\n\t\t\t\tif (!this.data.hasOwnProperty(value))\n\t\t\t\t\tvalue = value.slice(0, 2); // pt fr\n\t\t\t\tif (this.data.hasOwnProperty(value))\n\t\t\t\t\tapijs.config.lang = value;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.data.hasOwnProperty(value))\n\t\t\tapijs.config.lang = 'en';\n\t};\n\n\n\t// TRADUIT (public return string|domelement|boolean)\n\n\tthis.translate = function (word) {\n\n\t\tvar lang = apijs.config.lang, idx = 1, translation = '';\n\n\t\t// mot clef inexistant dans la langue configurée\n\t\t// test avec la langue par défaut pour éventuellement continuer\n\t\tif (typeof this.data[lang][word] != 'string') {\n\t\t\tif ((lang.length > 3) && (typeof this.data[lang.slice(0, 2)][word] == 'string'))\n\t\t\t\tlang = lang.slice(0, 2);\n\t\t\telse if ((lang !== 'en') && (typeof this.data.en[word] == 'string'))\n\t\t\t\tlang = 'en';\n\t\t\telse\n\t\t\t\treturn word;\n\t\t}\n\n\t\t// chaîne de caractères configurable\n\t\tif (arguments.length > 1) {\n\t\t\tthis.data[lang][word].split('§').forEach(function (data) {\n\t\t\t\ttranslation += (idx < this.length) ? data + this[idx++] : data;\n\t\t\t}, arguments); // pour que ci-dessus this = arguments\n\t\t\treturn translation;\n\t\t}\n\n\t\t// chaîne de caractères simple\n\t\treturn this.data[lang][word];\n\t};\n\n\tthis.translateNode = function () {\n\n\t\t// apply fait une copie des arguments\n\t\t// c'est comme si on avait appelé this.translate directement\n\t\treturn document.createTextNode(this.translate.apply(this, arguments));\n\t};\n\n\tthis.changeLang = function (lang) {\n\n\t\tif (typeof lang == 'string') {\n\n\t\t\tif (lang.indexOf('auto') > -1) {\n\t\t\t\tapijs.config.lang = 'auto';\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlang = lang.replace(/[-_]/g, '');\n\n\t\t\tif (this.data.hasOwnProperty(lang)) {\n\t\t\t\tapijs.config.lang = lang;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/02/03/2020\n * Updated L/02/03/2020\n *\n * Copyright 2008-2020 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.select = function () {\n\n\t\"use strict\";\n\n\tthis.init = function () {\n\n\t};\n};","/**\n * Created D/11/01/2015\n * Updated D/03/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.player = function (video, url) {\n\n\t\"use strict\";\n\tthis.video = video;\n\tthis.stalled = false;\n\tthis.subload = false;\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this|void|domelement)\n\n\tthis.autoRun = function (video, url) { // todo\n\n\t\tvideo.removeAttribute('src');\n\t\tvideo.removeAttribute('data-src');\n\t\tvideo.removeAttribute('controls');\n\t\tvideo.classList.add('apijsplayer');\n\n\t\t// @see https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Events/evenement_medias\n\t\tvideo.onloadedmetadata = function (ev) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onTimeupdate(ev);\n\t\t\tthis.onProgress(ev);\n\t\t\tthis.onVideotrack();\n\t\t\tthis.onAudiotrack();\n\t\t}.bind(this);\n\t\tvideo.onstalled = function (ev) {\n\t\t\tthis.stalled = true;\n\t\t\tthis.onWaiting(ev);\n\t\t}.bind(this);\n\t\tvideo.onplaying = this.onPlay.bind(this);\n\t\tvideo.onpause = this.onPlay.bind(this);\n\t\tvideo.onended = this.onPlay.bind(this);\n\t\tvideo.onprogress = this.onProgress.bind(this);\n\t\tvideo.ontimeupdate = this.onTimeupdate.bind(this);\n\t\tvideo.onseeking = this.onTimeupdate.bind(this);\n\t\tvideo.onseeked = this.onWaiting.bind(this);\n\t\tvideo.onwaiting = this.onWaiting.bind(this);\n\t\tvideo.onloadstart = this.onWaiting.bind(this);\n\t\tvideo.oncanplay = this.onWaiting.bind(this);\n\t\tvideo.onclick = this.actionPlay.bind(this);\n\t\tvideo.onvolumechange = this.actionVolume.bind(this);\n\t\tvideo.ondurationchange = apijs.dialog.onMediaLoad;\n\t\tvideo.onerror = apijs.dialog.onMediaLoad;\n\n\t\t// ajoute les contrôles\n\t\tvideo.parentNode.appendChild(this.htmlSvgPlayer());\n\n\t\t// charge les sources\n\t\tif (url.indexOf('m3u') < 0) {\n\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\treturn this;\n\t\t}\n\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijsplayer.init', xhr: xhr } }));\n\t\t\t\tif (!video || (video.childNodes.length > 0)) {\n\t\t\t\t\txhr.abort();\n\t\t\t\t}\n\t\t\t\telse if ([0, 200].has(xhr.status)) {\n\n\t\t\t\t\tvar url, txt = 0, nbv = 0, nbt = 0, data = xhr.responseText.trim().split(\"\\n\");\n\t\t\t\t\twhile (typeof (url = data.shift()) == 'string') {\n\n\t\t\t\t\t\t// #APIJS#attr|name|value\n\t\t\t\t\t\tif (url.indexOf('#APIJS#attr') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tvideo.setAttribute(txt[1], txt[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #APIJS#track|kind|label|srclang|src\n\t\t\t\t\t\telse if (url.indexOf('#APIJS#track|subtitles') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tthis.html('.tracks.texttrack select').appendChild(this.htmlOption(nbt++, txt[3] + ' - ' + txt[2]));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlTrack(txt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #EXTINF: Text\n\t\t\t\t\t\telse if (url.indexOf('#EXTINF') === 0) {\n\t\t\t\t\t\t\ttxt = url.replace(/#EXTINF:\\d+,/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// http\n\t\t\t\t\t\telse if ((url.length > 5) && (url[0] !== '#')) {\n\t\t\t\t\t\t\tthis.html('.tracks.video select').appendChild(this.htmlOption(nbv++, (typeof txt == 'string') ? txt : nbv));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateSelect('video', nbv);\n\t\t\t\t\tif (typeof video.textTracks == 'object')\n\t\t\t\t\t\tthis.updateSelect('texttrack', video.textTracks.length || nbt);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tapijs.dialog.onMediaLoad({ type: 'error' });\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(this);\n\t\txhr.send();\n\n\t\treturn this;\n\t};\n\n\tthis.updateSelect = function (css, total) {\n\n\t\t// s'il y une seule option on affiche pas, sauf pour les sous titres\n\t\tvar adjust = (css === 'texttrack') ? 1 : 0;\n\t\tif (total > adjust) {\n\t\t\tthis.html('.tracks.' + css).removeAttribute('style');\n\t\t\tthis.html('.tracks.' + css + ' em').textContent = '(' + total + ')';\n\t\t\tthis.html('.tracks.' + css + ' select').setAttribute('size', (total < 10) ? total + adjust : 10);\n\t\t}\n\t\telse {\n\t\t\tthis.html('.tracks.' + css).setAttribute('style', 'display:none;');\n\t\t\tthis.html('.tracks.' + css + ' select').innerHTML = '';\n\t\t}\n\t};\n\n\tthis.html = function (selector) {\n\t\treturn this.video.parentNode.querySelector(selector);\n\t};\n\n\n\t// GESTION DES ÉVÉNEMENTS (private return void)\n\n\tthis.onVideotrack = function () {\n\n\t\tvar tracks = this.video.videoTracks, select = this.html('.tracks.videotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes vidéo\n\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('videotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionVideotrack(auto);\n\t\t}\n\t};\n\n\tthis.onAudiotrack = function () {\n\n\t\tvar tracks = this.video.audioTracks, select = this.html('.tracks.audiotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes audio\n\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('audiotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionAudiotrack(auto);\n\t\t}\n\t};\n\n\tthis.onTimeupdate = function (ev) {\n\n\t\tvar time = this.video.currentTime, duration = this.video.duration, text = '--:--', hh, mm, ss;\n\n\t\tif (!isNaN(time) && (duration !== Infinity) && !isNaN(duration)) {\n\n\t\t\thh = Math.floor(time / 3600);\n\t\t\tmm = Math.floor((time % 3600) / 60);\n\t\t\tss = Math.floor(time % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext = hh + mm + ':' + ss;\n\n\t\t\thh = Math.floor(duration / 3600);\n\t\t\tmm = Math.floor((duration % 3600) / 60);\n\t\t\tss = Math.floor(duration % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext += ' / ' + hh + mm + ':' + ss;\n\n\t\t\tthis.html('svg.bar rect').style.width = (time / duration * 100) + '%';\n\t\t}\n\n\t\tthis.html('span.time').textContent = text;\n\n\t\t// loader stalled sauf par les tracks\n\t\tif (this.stalled && !this.subload) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onWaiting(ev);\n\t\t}\n\t};\n\n\tthis.onProgress = function () {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), idx = video.buffered.length, width, buffer;\n\n\t\tif ((idx > 0) && (video.duration !== Infinity) && !isNaN(video.duration)) {\n\n\t\t\telem.querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\t\twhile (idx-- > 0) {\n\n\t\t\t\tbuffer = document.createElement('rect');\n\t\t\t\tbuffer.setAttribute('class', 'buffer');\n\n\t\t\t\twidth = (video.buffered.end(idx) - video.buffered.start(idx)) / video.duration * 100;\n\t\t\t\tif (width > 99.8)\n\t\t\t\t\tbuffer.setAttribute('style', 'left:0%; width:100%;');\n\t\t\t\telse\n\t\t\t\t\tbuffer.setAttribute('style', 'left:' + (video.buffered.start(idx) / video.duration * 100) + '%; width:' + width + '%;');\n\n\t\t\t\telem.appendChild(buffer);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onPlay = function () { // todo\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tif (this.video.paused) {\n\t\t\t\tthis.html('span.play').textContent = '\\uE810';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.remove('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.remove('playing');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.html('span.play').textContent = '\\uE811';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.add('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.add('playing');\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onWaiting = function (ev) { // todo\n\t\tapijs.log('player:video:onWaiting:' + ev.type + ' stalled:' + this.stalled + '/subload:' + this.subload);\n\t\tapijs.dialog[['loadstart', 'waiting', 'seeking', 'stalled'].has(ev.type) ? 'add' : 'remove']('loading');\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionPlay = function () {\n\n\t\tvar video = this.video;\n\n\t\t// ignore le clic du swipe en mode slideshow\n\t\tif (apijs.dialog.swipe)\n\t\t\treturn false;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\t\t\tif (video.ended || video.paused)\n\t\t\t\tvideo.play();\n\t\t\telse\n\t\t\t\tvideo.pause();\n\t\t}\n\t};\n\n\tthis.actionVolume = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.vol'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\n\t\t\tif ((typeof ev == 'object') && !isNaN(ev.clientX)) {\n\n\t\t\t\tdo { value += elem.offsetLeft; }\n\t\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\t\tvalue = ((ev.clientX - value) * 100 / width) / 100;\n\t\t\t\tvalue = (value < 0.2) ? 0 : ((value > 0.92) ? 1 : value);\n\n\t\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t\t//\tvalue = 1 - value;\n\n\t\t\t\tvideo.volume = value;\n\t\t\t\tvideo.muted = false;\n\t\t\t}\n\n\t\t\tthis.html('svg.vol rect').style.width = video.muted ? 0 : (video.volume * 100) + '%';\n\t\t}\n\t};\n\n\tthis.actionPosition = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif (([1,2].has(video.networkState)) && (video.duration !== Infinity) && !isNaN(video.duration) && (typeof ev == 'object')) {\n\n\t\t\tdo { value += elem.offsetLeft; }\n\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\tvalue = (video.duration * (ev.clientX - value) * 100 / width) / 100;\n\t\t\tvalue = (value <= 1) ? 0 : value;\n\n\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t//\tvalue = video.duration - value;\n\n\t\t\tvideo.currentTime = value;\n\t\t}\n\t};\n\n\tthis.actionVideotrack = function (ev) {\n\n\t\tvar tracks = this.video.videoTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionAudiotrack = function (ev) {\n\n\t\tvar tracks = this.video.audioTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionTexttrack = function (ev) {\n\n\t\tvar tracks = this.video.textTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].mode = (idx == value) ? 'showing' : 'hidden';\n\n\t\t\tthis.subload = true;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionVideo = function (ev) {\n\n\t\tthis.html('svg.bar rect').style.width = '0';\n\t\tthis.html('svg.bar').querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\tthis.html('span.play').textContent = '\\uE810';\n\n\t\tthis.updateSelect('videotrack', 0);\n\t\tthis.updateSelect('audiotrack', 0);\n\n\t\tthis.video.src = this.video.querySelectorAll('source')[(typeof ev == 'object') ? ev.target.value : ev].src;\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionFullscreen = function () {\n\n\t\t// en direct\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tthis.video.parentNode.classList[res ? 'add' : 'remove']('fullscreen');\n\t},\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return domelement)\n\n\tthis.htmlSvgPlayer = function () {\n\n\t\tvar d, c, b, a = document.createElement('div');\n\t\ta.setAttribute('class', 'apijsplayer noplaying');\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn play fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE810'));\n\t\t\tb.onclick = this.actionPlay.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg bar');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'bar');\n\t\t\t\tc.onclick = this.actionPosition.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'time');\n\t\t\tb.appendChild(document.createTextNode('--:--'));\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg vol');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'vol');\n\t\t\t\tc.onclick = this.actionVolume.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks audiotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(133));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionAudiotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks videotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(132));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks video');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(131));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideo.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks texttrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(134));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionTexttrack.bind(this);\n\n\t\t\t\t\td = document.createElement('option');\n\t\t\t\t\td.appendChild(apijs.i18n.translateNode(135)); // off\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn full fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE80F'));\n\t\t\tb.onclick = function () {\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1) {\n\t\t\t\t\tapijs.requestFullscreen(apijs.dialog.t1);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('fullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\tapijs.requestFullscreen(this.video.parentNode);\n\t\t\t\t}\n\n\t\t\t}.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlTrack = function (data) { // todo\n\n\t\tvar a = document.createElement('track');\n\t\ta.setAttribute('kind', data[1]);\n\t\ta.setAttribute('label', data[2]);\n\t\ta.setAttribute('srclang', data[3]);\n\t\ta.setAttribute('src', data[4]);\n\n\t\ta.onload = function (ev) {\n\t\t\tapijs.log('player:track:onload ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\ta.onerror = function (ev) {\n\t\t\tapijs.log('player:track:onerror ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlSource = function (url) {\n\n\t\tvar a = document.createElement('source');\n\t\ta.setAttribute('src', url);\n\t\ta.onerror = apijs.dialog.onMediaLoad;\n\n\t\treturn a;\n\t};\n\n\tthis.htmlOption = function (idx, txt) {\n\n\t\tif (typeof txt == 'object')\n\t\t\ttxt = (txt.label === '') ? txt.language.toLowerCase() : txt.language.toLowerCase() + ' - ' + txt.label;\n\n\t\tvar a = document.createElement('option');\n\t\ta.setAttribute('value', idx);\n\t\ta.appendChild(document.createTextNode(txt));\n\n\t\treturn a;\n\t};\n\n\n\tthis.autoRun(video, url);\n};","/**\n * Created D/12/04/2009\n * Updated D/03/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.dialog = function () {\n\n\t\"use strict\";\n\tthis.klass = [];\n\tthis.height = 0;\n\tthis.scroll = 0; // time\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.xhr = null;\n\n\tthis.ft = /information|confirmation|options|upload|progress|waiting|photo|video|iframe|ajax|start|ready|end|reduce|mobile|tiny|fullscreen/g;\n\tthis.ti = 'a,area,button,input,textarea,select,object,iframe';\n\tthis.ns = 'http://www.w3.org/2000/svg';\n\n\tthis.swipe = false;\n\tthis.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.t3 = null; // input file\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\n\n\t// GÉNÉRATION DES BOÎTES DE DIALOGUE (public return boolean)\n\n\tthis.dialogInformation = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('information', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnOk()\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogInformation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogConfirmation = function (title, text, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('confirmation', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('button', 'apijs.dialog.actionConfirm();')\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogConfirmation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormOptions = function (title, text, action, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('options', icon)\n\t\t\t\t.htmlParent(action, 'apijs.dialog.actionConfirm();')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show(true);\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormOptions invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormUpload = function (title, text, action, input, multiple, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof input == 'string')) {\n\t\t\treturn this.init('upload', icon)\n\t\t\t\t.htmlParent(action, 'apijs.upload.actionConfirm();', 'apijs.upload.actionDrag(event);')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlUpload(input, (typeof multiple == 'boolean') ? multiple : false, 'apijs.upload.actionChoose(this);')\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show('button.browse');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormUpload invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogProgress = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('progress', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgProgress()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogProgress invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogWaiting = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('waiting', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogWaiting invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogPhoto = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('photo', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, false)\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogPhoto invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogVideo = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('video', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, url.indexOf('iframe') < 0) // true si pas iframe\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogVideo invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogIframe = function (url, close, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean')) {\n\t\t\treturn this.init('iframe', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlIframe(url)\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogIframe invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogAjax = function (url, close, callback, args, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean') && (typeof callback == 'function')) {\n\t\t\t// dialogue\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.init('ajax', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t\t// ajax\n\t\t\tthis.xhr = new XMLHttpRequest();\n\t\t\tthis.xhr.open('GET', url, true);\n\t\t\tthis.xhr.onreadystatechange = function () {\n\t\t\t\tif ((this.xhr.readyState === 4) && (typeof this.callback == 'function')) {\n\t\t\t\t\tthis.callback(this.xhr, this.args);\n\t\t\t\t\tthis.remove('loading');\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.xhr.send();\n\t\t\treturn this;\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogAjax invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES CLASSES CSS (public sauf update private, return this sauf has return true)\n\n\tthis.update = function () {\n\n\t\t// il n'est pas question de mettre à jour les attributs class sans l'une des 3 classes de base\n\t\tif (this.has('start', 'ready', 'end')) {\n\t\t\tif (this.t1)\n\t\t\t\tthis.t1.setAttribute('class', this.klass.join(' '));\n\t\t\tif (this.t2)\n\t\t\t\tthis.t2.setAttribute('class', this.klass.join(' '));\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.add = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.add argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) < 0)\n\t\t\t\tthis.klass.push(css);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.remove = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.remove argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) > -1)\n\t\t\t\tthis.klass.splice(this.klass.indexOf(css), 1);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.toggle = function (search, replace) {\n\n\t\tif ((typeof search != 'string') || (typeof replace != 'string'))\n\t\t\tconsole.error('apijs.dialog.toggle argument is not a string', search, replace);\n\n\t\tif (this.has(search))\n\t\t\tthis.remove(search);\n\t\tif (!this.has(replace))\n\t\t\tthis.add(replace);\n\n\t\treturn this.update();\n\t};\n\n\tthis.has = function () {\n\t\treturn this.klass.has(apijs.toArray(arguments)); // true if one found\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private sauf actionClose)\n\n\tthis.actionClose = function (ev) {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function')) {\n\t\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href))\n\t\t\t\thistory.pushState({}, '', self.location.href.slice(0, self.location.href.indexOf('#')));\n\t\t}\n\n\t\tif (typeof ev == 'object') {\n\t\t\tif ((ev.target.getAttribute('id') === 'apijsDialog') && !apijs.dialog.has('photo', 'video', 'progress', 'waiting', 'lock'))\n\t\t\t\tapijs.dialog.clear(true);\n\t\t}\n\t\telse if (this.t1) {\n\t\t\tthis.clear(true);\n\t\t}\n\t};\n\n\tthis.onCloseBrowser = function (ev) {\n\n\t\tif (apijs.dialog.has('progress', 'waiting', 'lock')) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t\tev.m = apijs.i18n.translate(124);\n\t\t\tev.returnValue = ev.m; // Gecko, Trident, Chrome 34+\n\t\t\treturn ev.m; // Gecko, WebKit, Chrome\n\t\t}\n\t};\n\n\tthis.onResizeBrowser = function () {\n\n\t\tvar width = document.querySelector('body').clientWidth;\n\n\t\tapijs.dialog[(width <= (apijs.dialog.has('photo', 'video') ? 900 : 460)) ? 'add' : 'remove']('mobile');\n\t\tapijs.dialog[(width <= 300) ? 'add' : 'remove']('tiny');\n\t};\n\n\tthis.onScrollBrowser = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = ev.target, brk = false;\n\n\t\t// dialogues du diaporama (suivant/précédent)\n\t\t// @see https://github.com/hammerjs/hammer.js\n\t\t// @see https://github.com/john-doherty/swiped-events\n\t\tif (\n\t\t\tthat.has('slideshow') && !that.has('playing') &&\n\t\t\t!['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll', 'mousewheel', 'swipeleft', 'swiperight', 'swipeup', 'swipedown', 'swiped-left', 'swiped-right', 'swiped-up', 'swiped-down'].has(ev.type)\n\t\t) {\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (that.scroll + 1))) {\n\t\t\t\tthat.scroll = elem;\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tapijs.slideshow[(['swipeleft', 'swipeup', 'swiped-left', 'swiped-up'].has(ev.type) || brk) ? 'actionNext' : 'actionPrev']();\n\t\t\t}\n\t\t}\n\t\t// autorise éventuellement le défilement\n\t\t// recherche l'éventuel élément scrollable\n\t\telse {\n\t\t\tif (elem.nodeName === 'OPTION') {\n\t\t\t\telem = elem.parentNode;\n\t\t\t}\n\t\t\telse if (!['TEXTAREA', 'SELECT'].has(elem.nodeName)) {\n\t\t\t\twhile ((brk !== true) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t\tif (elem.classList.contains('scrollable'))\n\t\t\t\t\t\tbrk = true;\n\t\t\t\t\telse\n\t\t\t\t\t\telem = elem.parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// elem = select | textarea | scrollable\n\t\t\tif ((elem.scrollHeight > elem.offsetHeight) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tif ((brk && (elem.scrollTop < (elem.scrollHeight - elem.offsetHeight - 1))) || (!brk && (elem.scrollTop > 0)))\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// empèche le défilement\n\t\tev.preventDefault();\n\t\tev.stopPropagation();\n\t};\n\n\tthis.onScrollIframe = function (ev) {\n\n\t\tvar elem = ev.target, brk;\n\t\twhile (elem.parentNode)\n\t\t\telem = elem.parentNode;\n\n\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\n\t\t// empèche le défilement (elem = iframe document)\n\t\tif (\n\t\t\t(brk && ((elem.defaultView.innerHeight + elem.defaultView.scrollY) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.scrollY <= 0))\n\t\t) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t}\n\t};\n\n\tthis.onKey = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = that.media, time;\n\n\t\t// dialogues d'attente et de progresssion ou tout autre dialogue verrouillé\n\t\t// ctrl + q | ctrl + w | ctrl + r | ctrl + f4 | ctrl + f5 // alt + f4 // échap | f5\n\t\tif (that.has('progress', 'waiting', 'lock')) {\n\n\t\t\tif ((ev.ctrlKey && [81, 87, 82, 115, 116].has(ev.keyCode)) || (ev.altKey && (ev.keyCode === 115)) || [27, 116].has(ev.keyCode))\n\t\t\t\tev.preventDefault();\n\t\t}\n\t\t// dialogues photo et vidéo\n\t\t// f11 (ne fonctionne plus sur Opera 74 Windows)\n\t\telse if (that.has('photo', 'video') && (ev.keyCode === 122)) {\n\t\t\tev.preventDefault();\n\t\t\tapijs.requestFullscreen(that.t1);\n\t\t}\n\t\t// dialogues photo et vidéo du diaporama\n\t\t// échap // fin // début // gauche // droite\n\t\telse if (that.has('slideshow')) {\n\n\t\t\tif (ev.keyCode === 27) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthat.actionClose();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 35) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionLast();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 36) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionFirst();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 37) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionPrev();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 39) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionNext();\n\t\t\t}\n\t\t}\n\t\t// pour tous les autres\n\t\t// échap\n\t\telse if (ev.keyCode === 27) {\n\t\t\tev.preventDefault();\n\t\t\tthat.actionClose();\n\t\t}\n\n\t\t// dialogue vidéo\n\t\t// espace | p // haut | page haut // bas | page bas // + // - // m\n\t\tif (that.has('video') && !that.has('videoiframe')) {\n\n\t\t\t// espace | p\n\t\t\tif ([32, 80].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.ended || elem.paused)\n\t\t\t\t\t\telem.play();\n\t\t\t\t\telse\n\t\t\t\t\t\telem.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// haut | page haut\n\t\t\telse if ([38, 33].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\ttime = (ev.keyCode === 38) ? 10 : 60;\n\t\t\t\tif (([1, 2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime > time)\n\t\t\t\t\t\telem.currentTime -= time;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.currentTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ([40, 34].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1, 2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\ttime = (ev.keyCode === 40) ? 10 : 60;\n\t\t\t\t\tif (elem.currentTime < (elem.duration - time))\n\t\t\t\t\t\telem.currentTime += time;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// +\n\t\t\telse if (ev.keyCode === 107) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume < 0.8)\n\t\t\t\t\t\telem.volume += 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// -\n\t\t\telse if (ev.keyCode === 109) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume > 0.21)\n\t\t\t\t\t\telem.volume -= 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// m\n\t\t\telse if (ev.keyCode === 77) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\telem.muted = !elem.muted; // inverse\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// défilement de la page pour tous (renvoi sur actionScrollBrowser)\n\t\t// espace | page haut | page bas | fin | début | haut | bas\n\t\tif ([32, 33, 34, 35, 36, 38, 40].has(ev.keyCode)) {\n\n\t\t\t// empèche le défilement\n\t\t\tif (!ev.target || (!['INPUT','TEXTAREA','OPTION','SELECT'].has(ev.target.nodeName) && !ev.target.classList.contains('scrollable'))) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onFullscreen = function (ev) {\n\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tif (ev) apijs.log('dialog:onFullscreen:' + (res ? 'in' : 'out'));\n\n\t\tapijs.dialog[res ? 'add' : 'remove']('fullscreen');\n\t};\n\n\tthis.onIframeLoad = function (elem) { // todo\n\n\t\telem.removeAttribute('class');\n\t\tapijs.dialog.remove('loading');\n\n\t\telem.contentWindow.document.addEventListener('keydown', window.parent.apijs.dialog.onKey);\n\t\telem.contentWindow.addEventListener('DOMMouseScroll', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('mousewheel', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('touchmove', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t};\n\n\tthis.onMediaLoad = function (ev) { // todo\n\n\t\tvar that = apijs.dialog, media = that.media, src, elem, elems;\n\t\tif (ev && ev.target) {\n\t\t\tsrc = ev.target.currentSrc || ev.target.src;\n\t\t\tapijs.log('dialog:onMediaLoad:' + ev.type + ' ' + (src ? src.slice(src.lastIndexOf('/') + 1) : ''));\n\t\t}\n\n\t\tif (media && ['load', 'durationchange'].has(ev.type)) {\n\t\t\tthat.remove('loading', 'error');\n\t\t\tmedia.style.visibility = 'visible';\n\t\t\tif (!media.hasAttribute('src') && (media.nodeName === 'IMG'))\n\t\t\t\tmedia.setAttribute('src', media.imageLoader.src);\n\t\t}\n\t\telse if (media && (ev.type === 'error')) {\n\t\t\tthat.toggle('loading', 'error');\n\t\t\tmedia.removeAttribute('style');\n\t\t\t// player vidéo (désactive l'option et active la suivante)\n\t\t\telem = apijs.html('.tracks.video select');\n\t\t\tif (elem && ev && ev.target) {\n\t\t\t\telems = elem.querySelectorAll('option');\n\t\t\t\tif ((elems.length > 0) && (elem.value.length > 0)) {\n\t\t\t\t\telems[elem.value].setAttribute('disabled', 'disabled');\n\t\t\t\t\telem.selectedIndex += 1;\n\t\t\t\t\t// charge la vidéo suivante (si erreur au clic sur le select)\n\t\t\t\t\tif ((ev.target.nodeName === 'VIDEO') && (elem.value !== ''))\n\t\t\t\t\t\tmedia.videoPlayer.actionVideo(elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onSlideshowSwipe = function (ev) {\n\n\t\tapijs.dialog.swipe = true;\n\t\tself.setTimeout(function () { apijs.dialog.swipe = false; }, 150);\n\n\t\tif (['swiperight', 'swipedown', 'swiped-right', 'swiped-down'].has(ev.type))\n\t\t\tapijs.slideshow.actionPrev();\n\t\telse // swipeleft swipeup swiped-left swiped-up\n\t\t\tapijs.slideshow.actionNext();\n\t};\n\n\tthis.actionConfirm = function () { // todo\n\n\t\t// vérifie le dialogue d'options\n\t\t// arrêt du traitement si c'est pas bon\n\t\tif (this.has('options')) {\n\t\t\tif (this.callback(false, this.args) !== true)\n\t\t\t\treturn false;\n\t\t}\n\n\t\t// verrouille le dialogue et affiche le loader\n\t\tthis.add('lock', 'loading');\n\t\tthis.htmlSvgLoader(false);\n\n\t\t// masque les boutons et le texte du dialogue\n\t\tapijs.html('div.btns').style.visibility = 'hidden';\n\t\tapijs.html('div.bbcode').style.visibility = 'hidden';\n\n\t\t// appelle la fonction de rappel\n\t\t// ne déverrouille pas le dialogue\n\t\tself.setTimeout(function () {\n\t\t\tif ((this.t2) && (this.t2.nodeName === 'FORM'))\n\t\t\t\tthis.callback(this.t2.getAttribute('action'), this.args);\n\t\t\telse if (this.t2)\n\t\t\t\tthis.callback(this.args);\n\t\t}.bind(this), 12); // pour que ci-dessus this = this\n\n\t\treturn false; // très important\n\t};\n\n\n\t// GESTION DES CONTENEURS (private return this|boolean)\n\n\tthis.init = function (type, icon, isLocked) { // todo\n\n\t\tisLocked = (isLocked === true);\n\t\tif (typeof icon == 'string') {\n\t\t\ticon = icon.replace(this.ft, '').trim();\n\t\t\ticon = (icon.length > 0) ? (isLocked ? icon + ' lock' : icon) : (isLocked ? 'lock' : null);\n\t\t}\n\t\telse if (isLocked) {\n\t\t\ticon = 'lock';\n\t\t}\n\n\t\t// préparation\n\t\tif (this.t0)\n\t\t\tthis.clear(false);\n\n\t\t// css\n\t\tthis.klass.push('start');\n\t\tthis.klass.push(type);\n\n\t\tif (self.matchMedia('prefers-reduced-motion:reduce').matches)\n\t\t\tthis.klass.push('reduce');\n\n\t\tif (typeof icon == 'string')\n\t\t\tthis.klass = this.klass.concat(icon.split(' '));\n\n\t\t// création du fragment\n\t\tthis.t0 = document.createDocumentFragment();\n\n\t\t// surveillance des touches et du navigateur\n\t\tdocument.addEventListener('keydown', this.onKey);\n\t\tself.addEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.addEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.setAttribute('tabindex', '-1'); });\n\n\t\treturn this;\n\t};\n\n\tthis.show = function (focus) { // todo\n\n\t\t// design\n\t\tthis.onResizeBrowser();\n\t\tthis.onFullscreen();\n\n\t\tif ((this.height > 0) && !this.has('photo', 'video'))\n\t\t\tthis.t2.style.minHeight = this.height + 'px';\n\n\t\t// affichage du dialogue sans/sans/avec transitions CSS\n\t\tvar old = apijs.html('#Dialog');\n\t\tif (old) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tthis.t1 = old;\n\t\t\t// this.t1.appendChild(this.t0.firstChild.firstChild);\n\t\t\t// @see https://stackoverflow.com/a/24775765/2980105\n\t\t\tapijs.toArray(this.t0.firstChild.childNodes).forEach(function (node) {\n\t\t\t\tthis.t1.appendChild(node);\n\t\t\t}, this); // pour que ci-dessus this = this\n\t\t\tthis.t1.setAttribute('class', this.t2.getAttribute('class'));\n\t\t}\n\t\telse if (this.has('notransition')) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t}\n\t\telse {\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t\tself.setTimeout(function () { apijs.dialog.toggle('start', 'ready'); }, 12);\n\t\t}\n\n\t\t// fermeture des popups au clic\n\t\tif (apijs.config.dialog.closeOnClick && !this.has('progress', 'waiting', 'lock'))\n\t\t\tdocument.addEventListener('click', this.actionClose);\n\n\t\t// passage en plein écran\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.addEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\t// copier coller\n\t\telse if (this.has('upload')) {\n\t\t\twindow.addEventListener('paste', apijs.upload.actionDrag);\n\t\t}\n\n\t\t// auto-focus\n\t\tif (focus === true)\n\t\t\tself.setTimeout(function () { apijs.html('input:not([readonly]),textarea:not([readonly]),select:not([disabled])').focus(); }, 12);\n\t\telse if (typeof focus == 'string')\n\t\t\tapijs.html(focus).focus();\n\n\t\treturn true;\n\t};\n\n\tthis.clear = function (isAll) { // todo\n\n\t\tif (isAll && this.xhr) {\n\t\t\tthis.callback = null; // très important\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif (this.hammer) { // (depuis htmlBtnNavigation)\n\t\t\tthis.hammer.off('swiperight swipedown swipeleft swipeup', apijs.dialog.onSlideshowSwipe).destroy();\n\t\t\tdelete this.hammer;\n\t\t}\n\n\t\t// surveillance des touches et du navigateur (depuis initDialog)\n\t\tdocument.removeEventListener('keydown', this.onKey);\n\t\tself.removeEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.removeEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation (depuis initDialog)\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.removeAttribute('tabindex'); });\n\n\t\t// fermeture des popups au clic (depuis showDialog)\n\t\tif (apijs.config.dialog.closeOnClick)\n\t\t\tdocument.removeEventListener('click', this.actionClose);\n\n\t\t// spécial\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\t// pour ne pas déclencher les fonctions\n\t\t\t// supprime tous les ontruc et les src\n\t\t\tif (this.has('video') && !this.has('videoiframe')) {\n\t\t\t\tthis.t2.querySelectorAll('video, source, track').forEach(function (elem) {\n\t\t\t\t\tfor (var name in elem) {\n\t\t\t\t\t\tif (name.indexOf('on') === 0)\n\t\t\t\t\t\t\telem[name] = null;\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute('src');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.media.videoPlayer = null;\n\t\t\tthis.media.imageLoader = null;\n\n\t\t\t// passage en plein écran (depuis showDialog)\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\telse {\n\t\t\t// copier coller\n\t\t\tif (this.has('upload'))\n\t\t\t\twindow.removeEventListener('paste', apijs.upload.actionDrag);\n\n\t\t\t// mémorise la hauteur du dialogue\n\t\t\tthis.height = parseFloat(self.getComputedStyle(this.t2).height);\n\t\t}\n\n\t\t// supprime le dialogue\n\t\tif (isAll) {\n\t\t\tthis.toggle('ready', 'end');\n\t\t\tthis.t1.remove();\n\t\t}\n\t\telse {\n\t\t\twhile (this.t1.firstChild)\n\t\t\t\tthis.t1.firstChild.remove();\n\t\t}\n\n\t\t// réinitialise toutes les variables (sauf ft/ti/ns et swipe)\n\t\tthis.klass = [];\n\t\tif (isAll) {\n\t\t\tthis.height = 0;\n\t\t\tthis.scroll = 0; // time\n\t\t\tthis.callback = null;\n\t\t\tthis.args = null;\n\t\t\tthis.xhr = null;\n\t\t}\n\t\tthis.media = null;\n\t\tthis.t0 = null; // fragment\n\t\tthis.t1 = null; // div id=apijsDialog\n\t\tthis.t2 = null; // div/form id=apijsBox\n\t\tthis.t3 = null; // input file\n\t\tthis.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\n\t\treturn true;\n\t};\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this)\n\n\tthis.htmlParent = function (action, submit, drag) {\n\n\t\tthis.t1 = document.createElement('div');\n\t\tthis.t1.setAttribute('id', 'apijsDialog');\n\n\t\tif (typeof drag == 'string') {\n\n\t\t\tthis.t1.setAttribute('ondragenter', drag);\n\t\t\tthis.t1.setAttribute('ondragleave', drag);\n\t\t\tthis.t1.setAttribute('ondragover', drag);\n\t\t\tthis.t1.setAttribute('ondrop', drag);\n\t\t\tthis.t1.setAttribute('onpaste', drag); // Firefox\n\n\t\t\tthis.a = document.createElement('p');\n\t\t\tthis.a.setAttribute('class', 'drag');\n\t\t\tthis.a.appendChild(apijs.i18n.translateNode(127));\n\t\t\tthis.t1.appendChild(this.a);\n\t\t}\n\t\telse {\n\t\t\tthis.t1.setAttribute('ondragstart', 'return false;');\n\t\t}\n\n\t\tif (typeof action == 'string') {\n\t\t\tthis.t2 = document.createElement('form');\n\t\t\tthis.t2.setAttribute('action', action);\n\t\t\tthis.t2.setAttribute('method', 'post');\n\t\t\tthis.t2.setAttribute('enctype', 'multipart/form-data');\n\t\t\tthis.t2.setAttribute('onsubmit', 'return ' + submit);\n\t\t}\n\t\telse {\n\t\t\tthis.t2 = document.createElement('div');\n\t\t}\n\n\t\tthis.t2.setAttribute('id', 'apijsBox');\n\t\tthis.t1.appendChild(this.t2);\n\t\tthis.t0.appendChild(this.t1);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlContent = function (title, text) {\n\n\t\tif (title.length > 0) {\n\t\t\tthis.a = document.createElement('h1');\n\t\t\tthis.a.innerHTML = title.replace(/</g, '<').replace(/>/g, '>').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\tif (text.length > 0) {\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'bbcode');\n\t\t\tif (text[0] !== '[') text = '[p]' + text + '[/p]';\n\t\t\tthis.a.innerHTML = text.replace(/</g, '<').replace(/>/g, '>').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.a.querySelectorAll('a.popup').forEach(function (elem) { elem.addEventListener('click', apijs.openTab); });\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnOk = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(102));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnConfirm = function (type, click) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', type);\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tif (type !== 'submit') this.b.setAttribute('onclick', click);\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(104));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'cancel');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(103));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnNavigation = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'navigation noplaying');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'prev');\n\t\t\tthis.b.setAttribute('id', 'apijsPrev');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionPrev();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(106));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'next');\n\t\t\tthis.b.setAttribute('id', 'apijsNext');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionNext();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(107));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\tif (typeof Hammer == 'function') {\n\t\t\tthis.hammer = new Hammer(this.t2);\n\t\t\tthis.hammer.get('swipe').set({ direction: Hammer.DIRECTION_ALL });\n\t\t\tthis.hammer.on('swiperight swipedown swipeleft swipeup', apijs.dialog.onSlideshowSwipe);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnClose = function (close) {\n\n\t\tif (close !== false) {\n\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'close nofullplaying');\n\n\t\t\t\tthis.b = document.createElement('button');\n\t\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\t\tthis.b.setAttribute('class', 'close');\n\t\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(105));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\n\t\t\tthis.a.appendChild(this.b);\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlUpload = function (input, isMultiple, change) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.t3 = document.createElement('input');\n\t\t\tthis.t3.setAttribute('type', 'file');\n\t\t\tthis.t3.setAttribute('name', isMultiple ? input + '[]' : input);\n\t\t\tthis.t3.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.t3.setAttribute('multiple', 'multiple');\n\t\t\tthis.t3.setAttribute('onchange', change);\n\n\t\tthis.a.appendChild(this.t3);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'browse');\n\t\t\tthis.b.setAttribute('onclick', 'this.previousSibling.click();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(isMultiple ? 109 : 108));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('div');\n\t\t\tthis.b.setAttribute('class', 'filenames scrollable');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgProgress = function () {\n\n\t\tthis.a = document.createElement('span');\n\t\tthis.a.setAttribute('class', 'info');\n\t\tthis.t2.appendChild(this.a);\n\n\t\tthis.a = document.createElement('svg');\n\t\tthis.a.setAttribute('id', 'apijsProgress');\n\n\t\t\tthis.b = document.createElement('rect');\n\t\t\tthis.b.setAttribute('class', 'auto');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgLoader = function (isDelayed) {\n\n\t\tthis.a = document.createElementNS(this.ns, 'svg');\n\t\tthis.a.setAttribute('class', 'loader');\n\n\t\t\tthis.b = document.createElementNS(this.ns, 'path');\n\t\t\tif (isDelayed !== false) this.b.setAttribute('style', 'opacity:0;');\n\t\t\tthis.b.setAttribute('d', 'M75.4 126.63a11.43 11.43 0 0 1-2.1-22.65 40.9 40.9 0 0 0 30.5-30.6 11.4 11.4 0 1 1 22.27 4.87h.02a63.77 63.77 0 0 1-47.8 48.05v-.02a11.38 11.38 0 0 1-2.93.37z');\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animateTransform');\n\t\t\t\tthis.c.setAttribute('attributeName', 'transform');\n\t\t\t\tthis.c.setAttribute('type', 'rotate');\n\t\t\t\tthis.c.setAttribute('from', '0 64 64');\n\t\t\t\tthis.c.setAttribute('to', '360 64 64');\n\t\t\t\tthis.c.setAttribute('dur', '5s');\n\t\t\t\tthis.c.setAttribute('repeatCount', 'indefinite');\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animate');\n\t\t\t\tthis.c.setAttribute('attributeName', 'opacity');\n\t\t\t\tthis.c.setAttribute('to', '1');\n\t\t\t\tthis.c.setAttribute('dur', '0.01s');\n\t\t\t\tthis.c.setAttribute('begin', '1s');\n\t\t\t\tthis.c.setAttribute('fill', 'freeze');\n\n\t\t\tif (isDelayed !== false) this.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlMedia = function (url, name, date, legend) {\n\n\t\tthis.a = document.createElement('dl');\n\t\tthis.a.setAttribute('class', 'media');\n\n\t\t\tthis.b = document.createElement('dt');\n\n\t\t\tif (this.has('photo')) {\n\t\t\t\tthis.media = document.createElement('img');\n\t\t\t\tthis.media.setAttribute('alt', legend.replace('\"', ''));\n\t\t\t}\n\t\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\t\tthis.media = document.createElement('iframe');\n\t\t\t\tthis.media.setAttribute('type', 'text/html');\n\t\t\t\tthis.media.setAttribute('scrolling', 'no');\n\t\t\t\tthis.media.setAttribute('src', url);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.media = document.createElement('video');\n\t\t\t\tthis.media.setAttribute('controls', 'controls');\n\t\t\t\tthis.media.setAttribute('preload', 'metadata');\n\t\t\t}\n\n\t\t\tthis.media.setAttribute('id', 'apijsMedia');\n\t\t\tthis.b.appendChild(this.media);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('dd');\n\t\t\tthis.b.setAttribute('class', 'nofullplaying');\n\n\t\t\tif ((name !== 'false') || (date !== 'false')) {\n\n\t\t\t\tvar fileid = url.slice(url.lastIndexOf('/') + 1);\n\t\t\t\tthis.c = document.createElement('span');\n\n\t\t\t\t// name + date\n\t\t\t\tif ((name !== 'false') && (name !== 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' (' + date + ') '));\n\t\t\t\t// name\n\t\t\t\telse if ((name !== 'false') && (name !== 'auto'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' '));\n\t\t\t\t// auto name + date\n\t\t\t\telse if ((name === 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' (' + date + ') '));\n\t\t\t\t// auto name\n\t\t\t\telse if (name === 'auto')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' '));\n\t\t\t\t// date\n\t\t\t\telse if (date !== 'false')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode('(' + date + ') '));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t}\n\n\t\t\tthis.b.appendChild(document.createTextNode(legend));\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\t// au choix : photo / vidéo avec iframe / vidéo avec lecteur / vidéo simple\n\t\t// lecteur créé v5.2 / supprimé v5.3 / refait v6.0 / extrait v6.6\n\t\tif (this.has('photo')) {\n\t\t\tthis.media.imageLoader = new Image();\n\t\t\tthis.media.imageLoader.src = url;\n\t\t\tthis.media.imageLoader.onload = this.onMediaLoad;\n\t\t\tthis.media.imageLoader.onerror = this.onMediaLoad;\n\t\t}\n\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\tthis.media.onload = function (ev) {\n\t\t\t\tthis.onIframeLoad(this.media);\n\t\t\t\tthis.onMediaLoad(ev);\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.add('videoiframe');\n\t\t}\n\t\telse if (apijs.startPlayer(this.media, url)) {\n\t\t\tthis.add('apijsvideoplayer');\n\t\t}\n\t\telse {\n\t\t\tthis.c = document.createElement('source');\n\t\t\tthis.c.setAttribute('src', url);\n\t\t\tthis.c.onerror = this.onMediaLoad;\n\t\t\tthis.media.appendChild(this.c);\n\t\t\tthis.media.ondurationchange = this.onMediaLoad;\n\t\t\tthis.media.onerror = this.onMediaLoad;\n\t\t\tthis.add('videosource');\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlHelp = function (isSlideshow, isVideo) {\n\n\t\t// pas d'aide en mobile car pas de clavier\n\t\tif (('ontouchstart' in window) && navigator.userAgent.match(/mobi/i))\n\t\t\treturn this;\n\n\t\tvar items, item, keys = [\n\t\t\tisSlideshow ? ['start', 149, 141] : [], // début/fin\n\t\t\tisSlideshow ? ['left', 'right', 142] : [],\n\t\t\tisVideo ? ['topk', 'bottom', 144] : [],\n\t\t\tisVideo ? ['minus', 'plus', 145] : [],\n\t\t\tisVideo ? ['M', 146] : [],\n\t\t\tisVideo ? ['P', 143] : [],\n\t\t\t['F11', 147],\n\t\t\t[150, 148] // échap\n\t\t];\n\n\t\tthis.a = document.createElement('ul');\n\t\tthis.a.setAttribute('class', 'kbd nofullscreen');\n\n\t\twhile (items = keys.shift()) {\n\n\t\t\tif (items.length > 0) {\n\n\t\t\t\tthis.b = document.createElement('li');\n\n\t\t\t\twhile (item = items.shift()) {\n\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\tthis.c = document.createElement('kbd');\n\t\t\t\t\t\tif (['M', 'P', 'F11'].has(item))\n\t\t\t\t\t\t\tthis.c.appendChild(document.createTextNode(item));\n\t\t\t\t\t\telse if (typeof item == 'string')\n\t\t\t\t\t\t\tthis.c.setAttribute('class', item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.b.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.a.appendChild(this.b);\n\t\t\t}\n\t\t}\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlIframe = function (url) {\n\n\t\tthis.a = document.createElement('iframe');\n\t\tthis.a.setAttribute('src', url);\n\t\tthis.a.setAttribute('class', 'loading');\n\t\tthis.a.setAttribute('onload', 'apijs.dialog.onIframeLoad(this);');\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n};","/**\n * Created J/13/05/2010\n * Updated S/04/11/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.slideshow = function () {\n\n\t\"use strict\";\n\tthis.current = null;\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return void|boolean)\n\n\tthis.init = function () {\n\n\t\tvar i, j, elem, ids = apijs.config.slideshow.ids, hoverload = false;\n\n\t\tfor (i = 0; elem = apijs.html(ids + '.' + i, true); i++) {\n\n\t\t\thoverload = elem.classList.contains('hoverload');\n\n\t\t\tfor (j = 0; elem = apijs.html(ids + '.' + i + '.' + j, true); j++) {\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t\t\tif (hoverload)\n\t\t\t\t\telem.addEventListener('mouseover', this.show);\n\t\t\t}\n\n\t\t\tif (elem = apijs.html(ids + '.' + i + '.99999', true))\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t}\n\n\t\tthis.onPopState();\n\t};\n\n\tthis.onPopState = function () {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href)) {\n\t\t\tvar id = RegExp.$1.replace(/-/g, '.');\n\t\t\tif (apijs.html(id, true) && !apijs.dialog.has('slideshow')) // Chrome 31 et Opera 19 passent 2 fois sans le !has\n\t\t\t\tapijs.slideshow.show(id, false);\n\t\t}\n\t\telse if (apijs.slideshow.current) {\n\t\t\tapijs.dialog.actionClose();\n\t\t}\n\t};\n\n\tthis.show = function (ev, push) { // todo\n\n\t\tvar source, show = false, media = {}, src, srcset, total, hash;\n\n\t\t// recherche de la source (élément a)\n\t\t// recherche des informations du média (1/4, id)\n\t\t// la source est soit une miniature (ev=click/mouseover/stringId) soit l'image principale (ev=click)\n\t\tif (typeof ev == 'string') {\n\t\t\tshow = true;\n\t\t\tsource = apijs.html(ev, true);\n\t\t\tmedia.id = ev;\n\t\t}\n\t\telse {\n\t\t\tev.preventDefault();\n\t\t\tsource = ev.target;\n\t\t\twhile (source.nodeName !== 'A')\n\t\t\t\tsource = source.parentNode;\n\n\t\t\t// stop sur miniature déjà à jour en mode gallery\n\t\t\tif ((ev.type === 'mouseover') && source.classList.contains('current'))\n\t\t\t\treturn false;\n\n\t\t\tmedia.id = source.getAttribute('id');\n\t\t}\n\n\t\t// recherche des informations du média (2/4, prefix|number|gallery)\n\t\tmedia.prefix = apijs.config.slideshow.ids + '.' + media.id.split('.')[1];\n\t\tmedia.number = parseInt(media.id.split('.')[2], 10);\n\t\tmedia.gallery = apijs.html(media.prefix + '.99999', true);\n\n\t\t// SI SOURCE N'EST PAS L'IMAGE PRINCIPALE DU MODE GALLERY\n\t\t// marque la source avec la class current\n\t\t// prend soin de supprimer les anciennes class current\n\t\t// v5.1 soit sur le lien (avant sur l'image elle même), soit sur le dl\n\t\tif (media.number !== 99999) {\n\n\t\t\tvar links = apijs.html(media.prefix, true).querySelectorAll('a[id][type]'),\n\t\t\t conts = apijs.html(media.prefix, true).querySelectorAll('dl');\n\n\t\t\tif (media.gallery || (links.length !== conts.length)) {\n\t\t\t\tlinks.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.setAttribute('class', 'current');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconts.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.parentNode.parentNode.setAttribute('class', 'current');\n\t\t\t}\n\t\t}\n\n\t\t// UNIQUEMENT EN MODE GALLERY\n\t\t// recherche des informations du média (3/4, [number]|config)\n\t\t// réaffecte la source sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// réaffecte le numéro du média sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// supprime l'adresse de l'image principale de la configuration du média (media.config = url|name|date|legend)\n\t\t// met à jour l'image principale SAUF SI SOURCE = IMAGE PRINCIPALE (puisque tout est déjà correct)\n\t\tif (media.gallery) {\n\n\t\t\tif (media.number === 99999) {\n\t\t\t\tshow = true;\n\t\t\t\tsource = (media.gallery.hasAttribute('class')) ? media.gallery.getAttribute('class') : media.prefix + '.0';\n\t\t\t\tsource = apijs.html(source, true);\n\t\t\t\tmedia.number = parseInt(source.getAttribute('id').split('.')[2], 10);\n\t\t\t\tmedia.id = media.id.replace('99999', media.number);\n\t\t\t}\n\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\n\t\t\tsrc = media.config.shift();\n\t\t\tif (src.indexOf(';') > 0) {\n\t\t\t\tsrc = src.split(';');\n\t\t\t\tsrcset = src[1].trim();\n\t\t\t\tsrc = src[0].trim();\n\t\t\t}\n\n\t\t\tmedia.gallery.setAttribute('href', source.getAttribute('href'));\n\t\t\tmedia.gallery.querySelector('img').setAttribute('src', src);\n\t\t\tmedia.gallery.querySelector('img').setAttribute('srcset', srcset ? srcset : '');\n\t\t\tmedia.gallery.querySelector('img').setAttribute('alt', source.querySelector('img').getAttribute('alt'));\n\t\t\tmedia.gallery.setAttribute('class', media.id);\n\t\t}\n\t\t// UNIQUEMENT EN MODE ALBUM\n\t\t// recherche des informations du média (3/4, config)\n\t\telse {\n\t\t\tshow = true;\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\t\t}\n\n\t\t// recherche des informations du média (4/4, url|type|styles)\n\t\t// défini le type de dialogue à partir du mimetype du lien de la source si cela est possible\n\t\tmedia.url = source.getAttribute('href');\n\t\tmedia.type = source.getAttribute('type').substring(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo').replace('audio', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true);\n\t\tmedia.styles = media.styles.hasAttribute('class') ? media.styles.getAttribute('class').replace(/gallery|album/g, '').trim() : '';\n\n\t\t// demande l'affichage du dialogue\n\t\t// lors d'un clic sur l'image principale du mode gallery\n\t\t// ou lors d'un clic sur les miniatures en mode album\n\t\t// ou lors d'un appel direct\n\t\tif (show) {\n\n\t\t\tapijs.dialog[media.type](media.url, media.config[0], media.config[1], media.config[2], media.styles);\n\n\t\t\ttotal = apijs.html(media.prefix, true).querySelectorAll('a[id][type]').length - (media.gallery ? 2 : 1);\n\t\t\tapijs.slideshow.current = {\n\t\t\t\tnumber: media.number,\n\t\t\t\tfirst: media.prefix + '.0',\n\t\t\t\tprev: (media.number > 0) ? media.prefix + '.' + (media.number - 1) : null,\n\t\t\t\tnext: (media.number < total) ? media.prefix + '.' + (media.number + 1) : null,\n\t\t\t\tlast: media.prefix + '.' + total,\n\t\t\t\ttotal: total\n\t\t\t};\n\n\t\t\t// boutons précédent et suivant\n\t\t\tif (apijs.slideshow.current.prev)\n\t\t\t\tapijs.html('#Prev').removeAttribute('disabled');\n\t\t\tif (apijs.slideshow.current.next)\n\t\t\t\tapijs.html('#Next').removeAttribute('disabled');\n\n\t\t\t// gestion de l'historique\n\t\t\t// met à jour l'ancre uniquement si l'utilisateur ne joue pas avec son historique\n\t\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function') && ((typeof push == 'boolean') ? push : true)) {\n\t\t\t\thash = self.location.href;\n\t\t\t\thash = (hash.indexOf('#') > 0) ? hash.slice(0, hash.indexOf('#')) : hash;\n\t\t\t\thash += '#' + (media.prefix + '.' + ((media.number === 99999) ? 0 : media.number)).replace(/\\./g,'-');\n\t\t\t\thistory.pushState({}, '', hash);\n\t\t\t}\n\t\t}\n\n\t\treturn show;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (public return boolean)\n\n\tthis.actionFirst = function () {\n\n\t\tif (this.current && (this.current.number > 0) && (this.current.number <= this.current.total))\n\t\t\treturn this.show(this.current.first);\n\n\t\treturn false;\n\t};\n\n\tthis.actionPrev = function () {\n\n\t\tif (this.current && this.current.prev && (this.current.number > 0))\n\t\t\treturn this.show(this.current.prev);\n\n\t\treturn false;\n\t};\n\n\tthis.actionNext = function () {\n\n\t\tif (this.current && this.current.next && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.next);\n\n\t\treturn false;\n\t};\n\n\tthis.actionLast = function () {\n\n\t\tif (this.current && (this.current.number >= 0) && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.last);\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/13/04/2009\n * Updated D/03/12/2023\n *\n * Copyright 2008-2024 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.upload = function () {\n\n\t\"use strict\";\n\tthis.title = null;\n\tthis.action = null;\n\tthis.input = null;\n\tthis.onemax = 0; // taille d'un seul fichier\n\tthis.allmax = 0; // taille de tous les fichiers\n\tthis.exts = null;\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.icon = null;\n\n\tthis.start = 0; // time\n\tthis.end = 0; // time\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return boolean)\n\n\tthis.sendFile = function (title, action, input, onemax, exts, callback, args, icon) {\n\n\t\tvar res = this.sendFiles(title, action, input, onemax, 0, exts, callback, args, icon);\n\t\tif (!res) console.error('apijs.upload.sendFile invalid arguments', arguments);\n\n\t\treturn res;\n\t};\n\n\tthis.sendFiles = function (title, action, input, onemax, allmax, exts, callback, args, icon) {\n\n\t\tif (title !== true) {\n\t\t\tthis.title = title;\n\t\t\tthis.action = action;\n\t\t\tthis.input = input;\n\t\t\tthis.onemax = onemax;\n\t\t\tthis.allmax = allmax;\n\t\t\tthis.exts = (typeof exts == 'string') ? exts.split(',') : ['*'];\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.icon = icon;\n\t\t}\n\n\t\tif ((typeof this.title == 'string') && (typeof this.action == 'string') && (typeof this.input == 'string') &&\n\t\t (typeof this.onemax == 'number') && (typeof this.allmax == 'number') && (typeof this.callback == 'function')) {\n\n\t\t\tvar text, multiple = this.allmax > 0;\n\n\t\t\tif (this.exts.join() === '*')\n\t\t\t\ttext = apijs.i18n.translate(161);\n\t\t\telse if (this.exts.length === 1)\n\t\t\t\ttext = apijs.i18n.translate(162, this.exts.join());\n\t\t\telse\n\t\t\t\ttext = apijs.i18n.translate(163, this.exts.slice(0, -1).join(', '), this.exts.slice(-1));\n\n\t\t\ttext += '[br]' + apijs.i18n.translate(\n\t\t\t\tmultiple ? 165 : 164, // clef de traduction\n\t\t\t\tapijs.formatNumber(this.onemax), // taille d'un fichier\n\t\t\t\tmultiple ? apijs.formatNumber(this.allmax) : '' // taille de tous les fichiers\n\t\t\t).replace('|', '[br]');\n\n\t\t\treturn apijs.dialog.dialogFormUpload(this.title, text, this.action, this.input, multiple, this.icon);\n\t\t}\n\n\t\tif ((typeof this.allmax != 'number') || (this.allmax > 0))\n\t\t\tconsole.error('apijs.upload.sendFiles invalid arguments', arguments);\n\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionDrag = function (ev) {\n\n\t\tvar elem = apijs.dialog.t3, stop = true;\n\n\t\tif (ev.type === 'dragenter') {\n\t\t\tapijs.dialog.add('drag');\n\t\t}\n\t\telse if (ev.type === 'dragleave') {\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\t// drag and drop\n\t\telse if (ev.dataTransfer && ev.dataTransfer.files && (ev.dataTransfer.files.length > 0)) {\n\n\t\t\ttry {\n\t\t\t\telem.files = ev.dataTransfer.files; // Firefox 57+\n\t\t\t\tapijs.upload.actionChoose(elem);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tapijs.html('.drag').remove();\n\t\t\t}\n\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\t// copy and paste\n\t\telse if (ev.clipboardData && ev.clipboardData.files && (ev.clipboardData.files.length > 0)) {\n\n\t\t\t// Firefox 22+, Chrome 58+, Opera 45+, Safari 10.1+\n\t\t\ttry {\n\t\t\t\telem.files = ev.clipboardData.files; // Firefox 57+\n\t\t\t\tapijs.upload.actionChoose(elem, true);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tapijs.html('.drag').remove();\n\t\t\t}\n\t\t}\n\t\telse if (ev.clipboardData) {\n\t\t\tstop = false;\n\t\t}\n\n\t\tif (stop) {\n\t\t\tev.stopPropagation();\n\t\t\tev.preventDefault();\n\t\t}\n\t};\n\n\tthis.actionChoose = function (elem, paste) {\n\n\t\tvar html = [], size = 0, btn = apijs.html('button.confirm');\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\t// @see https://stackoverflow.com/a/24775765/2980105\n\t\t\tapijs.toArray(elem.files, (this.allmax > 0) ? 999 : 1).forEach(function (file, idx) {\n\n\t\t\t\tvar txt = file.size / 1048576;\n\t\t\t\ttxt = apijs.formatNumber((txt < 0.01) ? 0.01 : txt);\n\t\t\t\ttxt = ((paste || (this.allmax > 0)) ?\n\t\t\t\t\t'<td class=\"nb\">' + (paste ? (new Date()).toTimeString().substring(0, 8) : idx + 1) + '</td>' : '') +\n\t\t\t\t\t'<td class=\"name\">' + file.name + '</td>' +\n\t\t\t\t\t'<td class=\"size\">' + apijs.i18n.translate(166, txt) + '</td>';\n\n\t\t\t\tif ((this.exts.join() !== '*') && !this.exts.has(file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase())) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(167) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size > (this.onemax * 1048576)) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(168) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size <= 0) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(169) + '</td>';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttxt += '<td></td>';\n\t\t\t\t}\n\n\t\t\t\thtml.push('<tr>' + txt + '</tr>');\n\t\t\t\tsize += file.size / 1048576;\n\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// multiple\n\t\t\tif ((this.allmax > 0) && (size >= this.allmax)) {\n\t\t\t\thtml.push('<tr class=\"tt\"><td></td><td></td><td class=\"size\">' + apijs.i18n.translate(166, apijs.formatNumber(size)) + '</td><td class=\"err\">' + apijs.i18n.translate(168) + '</td></tr>');\n\t\t\t}\n\n\t\t\t// ok ou ko\n\t\t\tapijs.html('div.filenames').innerHTML = '<table>' + html.join('') + '</table>';\n\t\t\tif (apijs.html('div.filenames .err')) {\n\t\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtn.removeAttribute('disabled');\n\t\t\t\tbtn.focus();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (apijs.dialog.t3.files.length > 0) {\n\n\t\t\tvar form = new FormData(apijs.dialog.t2), xhr = new XMLHttpRequest();\n\t\t\txhr.open('POST', this.action + ((this.action.indexOf('?') > 0) ? '&isAjax=true' : '?isAjax=true'), true);\n\n\t\t\t// token\n\t\t\tif (typeof apijs.config.upload.tokenValue == 'string') {\n\t\t\t\txhr.setRequestHeader(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t\tform.append(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t}\n\n\t\t\t// @see https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// @see https://stackoverflow.com/a/15491086\n\t\t\t// loadstart - When the request starts\n\t\t\t// progress - While sending and loading data\n\t\t\t// load - When the request has successfully completed even if the server hasn't responded that it finished\n\t\t\t// loadend - When the request has completed even if the server hasn't responded that it finished processing the request\n\t\t\t// error - When the request has failed\n\t\t\t// abort - When the request has been aborted (by invoking the abort method)\n\t\t\t// timeout - When the author specified timeout has passed before the request could complete\n\t\t\txhr.onreadystatechange = function (text) {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\ttext = xhr.responseText.trim();\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijs.upload.send', xhr: xhr } }));\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:200 message:' + text);\n\t\t\t\t\t\tif (text.indexOf('success-') === 0) {\n\t\t\t\t\t\t\tthis.updateTitle();\n\t\t\t\t\t\t\tthis.callback(text.slice(8), this.args);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.onError(195, text);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:' + xhr.status + ' message: ' + text);\n\t\t\t\t\t\tthis.onError(194, xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\n\t\t\txhr.upload.onloadstart = this.onStart.bind(this);\n\t\t\txhr.upload.onprogress = this.onProgress.bind(this);\n\t\t\txhr.upload.onload = this.onProgress.bind(this);\n\t\t\txhr.upload.onerror = this.onError.bind(this);\n\t\t\txhr.send(form);\n\t\t}\n\t\telse {\n\t\t\tapijs.html('button.browse').focus();\n\t\t}\n\n\t\treturn false; // très important\n\t};\n\n\tthis.onStart = function () {\n\n\t\tthis.start = this.end = Math.round(new Date().getTime() / 1000);\n\t\tapijs.dialog.dialogProgress(this.title, apijs.i18n.translate(125), this.icon);\n\t};\n\n\tthis.onError = function (key, txt) {\n\n\t\tthis.updateTitle();\n\n\t\tif (typeof key == 'number')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(key) + '[/p] ' + txt;\n\t\telse if (typeof txt != 'string')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(193) + '[/p]';\n\n\t\ttxt += '[p]' + apijs.i18n.translate(196, 'href=\"apijs://restart\" onclick=\"apijs.upload.sendFile(true); return false;\"') + '[/p]';\n\t\tapijs.dialog.dialogInformation(this.title, txt, (typeof this.icon == 'string') ? 'upload error ' + this.icon : 'upload error');\n\t};\n\n\tthis.onProgress = function (ev) {\n\n\t\tvar percent, key, rate, time, elapsedTime, totalTime, currentTime = Math.round(new Date().getTime() / 1000), mins;\n\n\t\t// Cherche à actualiser la barre de progression toutes les 2 secondes (uniquement de 1 à 99%)\n\t\t// affiche le pourcentage, la vitesse à partir de 25 secondes, le temps restant à partir de 40 secondes ET 90 secondes de temps total\n\t\tif (ev.lengthComputable && (ev.type === 'progress') && (currentTime >= (this.end + 2))) {\n\n\t\t\tthis.end = currentTime;\n\n\t\t\t// Math.floor = entier inférieur, Math.ceil = entier supérieur, Math.round = au mieux\n\t\t\t// ev.loaded = nombre d'octet envoyé sur le serveur\n\t\t\t// ev.total = nombre d'octet à envoyer sur le serveur\n\t\t\t// pourcentage = nombre d'octet envoyé * 100 / nombre d'octet à envoyer\n\t\t\tpercent = Math.floor((ev.loaded * 100) / ev.total);\n\n\t\t\tif ((percent > 0) && (percent < 100)) {\n\n\t\t\t\tthis.updateTitle(percent);\n\n\t\t\t\t// temps écoulé = maintenant - départ\n\t\t\t\t// temps total = temps écoulé * 100 / pourcentage + 10 secondes\n\t\t\t\telapsedTime = currentTime - this.start;\n\t\t\t\ttotalTime = elapsedTime * 100 / percent + 10;\n\n\t\t\t\tif (elapsedTime > 24) {\n\n\t\t\t\t\t// temps restant = temps total - temps écoulé\n\t\t\t\t\ttime = Math.round(totalTime - elapsedTime);\n\t\t\t\t\ttime = Math.ceil(time / 10) * 10;\n\t\t\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t\t\t// vitesse = taille téléchargé / temps écoulé / 1024\n\t\t\t\t\trate = Math.round(ev.loaded / elapsedTime / 1024);\n\n\t\t\t\t\tif ((elapsedTime < 40) || (totalTime < 90)) { key = 184; time = null; } // \"§% - § ko/s\"\n\t\t\t\t\telse if (mins > 1) { key = 181; time = mins; } // \"§% - § ko/s - § minutes restantes\"\n\t\t\t\t\telse if (time > 50) { key = 182; time = 1; } // \"§% - § ko/s - § minute restante\"\n\t\t\t\t\telse { key = 183; } // \"§% - § ko/s - § secondes restantes\"\n\t\t\t\t}\n\n\t\t\t\tthis.updateProgress(percent, key, rate, time);\n\t\t\t}\n\t\t}\n\t\t// Cherche à actualiser la barre de progression lorsque l'envoi du fichier est terminé (donc à 100%)\n\t\t// affiche le pourcentage, le temps total à partir de 20 secondes, la vitesse si possible\n\t\telse if (ev.type === 'load') {\n\n\t\t\t// temps total = temps actuel - temps du départ\n\t\t\ttime = Math.round(new Date().getTime() / 1000) - this.start;\n\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t// vitesse = taille total / temps total / 1024\n\t\t\trate = Math.round(ev.loaded / time / 1024);\n\n\t\t\tif ((rate > 0) && (rate !== Infinity)) {\n\t\t\t\tif (mins > 1) { key = 185; time = mins; } // \"§% - à § ko/s en § minutes\"\n\t\t\t\telse if (time > 50) { key = 186; time = 1; } // \"§% - à § ko/s en § minute\"\n\t\t\t\telse if (time > 20) { key = 187; } // \"§% - à § ko/s en § secondes\"\n\t\t\t\telse { key = 188; time = null; } // \"§% - à § ko/s\"\n\t\t\t}\n\t\t\telse {\n\t\t\t\trate = null; time = null; // 100%\n\t\t\t}\n\n\t\t\tthis.updateTitle(100);\n\t\t\tthis.updateProgress(100, key, rate, time);\n\t\t}\n\t};\n\n\tthis.updateProgress = function (percent, key, rate, time) {\n\n\t\tvar rect = apijs.html('rect'), text = apijs.html('span.info'), data;\n\n\t\tif (percent > 99) {\n\t\t\tdata = '100%';\n\t\t\trect.setAttribute('class', 'end');\n\t\t\trect.style.width = '';\n\t\t\tvar elem = apijs.html('p');\n\t\t\telem.setAttribute('data-old', elem.textContent);\n\t\t\telem.setAttribute('data-new', apijs.i18n.translate(126));\n\t\t\telem.setAttribute('class', 'anim');\n\t\t\telem.textContent = '';\n\t\t}\n\t\telse {\n\t\t\trect.style.width = data = percent + '%';\n\t\t\tif (rect.hasAttribute('class'))\n\t\t\t\trect.removeAttribute('class');\n\t\t}\n\n\t\tif ((typeof key == 'number') && (typeof rate == 'number') && (typeof time == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false), time);\n\t\telse if ((typeof key == 'number') && (typeof rate == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false));\n\n\t\ttext.textContent = data;\n\t};\n\n\tthis.updateTitle = function (percent) {\n\n\t\tif (typeof percent == 'number') {\n\t\t\tdocument.title = (/^\\d{1,3}% - /.test(document.title)) ?\n\t\t\t\tpercent + '% - ' + document.title.slice(document.title.indexOf(' - ') + 3) : percent + '% - ' + document.title;\n\t\t}\n\t\telse if (/^\\d{1,3}% - /.test(document.title)) {\n\t\t\tdocument.title = document.title.slice(document.title.indexOf(' - ') + 3);\n\t\t}\n\t};\n};"],"names":["Array","prototype","has","needle","key","hasOwnProperty","this","window","NodeList","forEach","callback","that","i","length","call","apijs","core","version","config","lang","debug","dialog","closeOnClick","restrictNavigation","player","slideshow","ids","anchor","upload","tokenName","tokenValue","start","elem","console","info","toString","split","join","document","getElementById","Error","querySelector","getAttribute","indexOf","error","i18n","self","dispatchEvent","CustomEvent","init","querySelectorAll","startPlayer","addEventListener","onPopState","Object","keys","data","formatNumber","nb","dec","str","dgt","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","e","toFixed","replace","url","videoPlayer","parentNode","classList","add","toArray","max","slice","openTab","ev","preventDefault","href","open","log","txt","html","selector","id","t1","requestFullscreen","webkitFullscreenElement","webkitCancelFullScreen","mozFullScreenElement","mozCancelFullScreen","fullscreenElement","cancelFullScreen","webkitRequestFullscreen","mozRequestFullScreen","serialize","form","filter","elements","idx","name","disabled","type","options","selected","push","encodeURIComponent","value","checked","bind","cs","103","104","105","106","107","108","132","133","134","135","142","143","144","145","146","148","149","150","de","109","124","147","161","162","163","164","167","168","169","181","182","183","185","186","187","188","191","192","193","194","195","196","el","102","131","en","125","126","127","141","165","166","184","es","fr","hu","it","ja","nl","pl","pt","ptbr","ro","ru","sk","tr","uk","zh","toLowerCase","translate","word","translation","arguments","translateNode","createTextNode","apply","changeLang","select","video","stalled","subload","autoRun","xhr","removeAttribute","onloadedmetadata","onTimeupdate","onProgress","onVideotrack","onAudiotrack","onstalled","onWaiting","onplaying","onPlay","onpause","onended","onprogress","ontimeupdate","onseeking","onseeked","onwaiting","onloadstart","oncanplay","onclick","actionPlay","onvolumechange","actionVolume","ondurationchange","onMediaLoad","onerror","appendChild","htmlSvgPlayer","htmlSource","XMLHttpRequest","onreadystatechange","readyState","detail","from","childNodes","abort","status","nbv","nbt","responseText","trim","shift","setAttribute","htmlOption","htmlTrack","updateSelect","textTracks","send","css","total","adjust","textContent","innerHTML","tracks","videoTracks","auto","language","selectedIndex","Math","actionVideotrack","audioTracks","actionAudiotrack","hh","mm","ss","time","currentTime","duration","text","isNaN","Infinity","floor","style","width","buffer","buffered","node","remove","createElement","end","networkState","paused","swipe","ended","play","pause","offsetWidth","clientX","offsetLeft","offsetParent","volume","muted","actionPosition","target","enabled","blur","actionTexttrack","mode","actionVideo","src","actionFullscreen","res","d","c","b","a","onchange","webkitFullscreenEnabled","fullscreenEnabled","mozFullScreenEnabled","onload","lastIndexOf","track","label","klass","height","scroll","args","ft","ti","ns","media","t0","t2","t3","dialogInformation","title","icon","htmlParent","htmlContent","htmlBtnOk","show","dialogConfirmation","htmlBtnConfirm","dialogFormOptions","action","dialogFormUpload","input","multiple","htmlUpload","dialogProgress","htmlSvgProgress","dialogWaiting","htmlSvgLoader","dialogPhoto","date","legend","htmlMedia","htmlHelp","htmlBtnClose","htmlBtnNavigation","dialogVideo","dialogIframe","close","htmlIframe","dialogAjax","update","splice","toggle","search","actionClose","history","pushState","RegExp","test","location","clear","onCloseBrowser","stopPropagation","m","returnValue","onResizeBrowser","clientWidth","onScrollBrowser","brk","nodeName","Date","getTime","wheelDelta","contains","scrollHeight","offsetHeight","scrollTop","onScrollIframe","defaultView","innerHeight","scrollY","body","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","onIframeLoad","contentWindow","parent","passive","currentSrc","visibility","hasAttribute","imageLoader","elems","onSlideshowSwipe","setTimeout","actionConfirm","isLocked","matchMedia","matches","concat","createDocumentFragment","focus","minHeight","old","firstChild","actionDrag","isAll","hammer","off","destroy","removeEventListener","parseFloat","getComputedStyle","submit","drag","click","Hammer","get","set","direction","DIRECTION_ALL","on","isMultiple","change","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","navigator","userAgent","match","items","item","current","j","hoverload","$1","source","srcset","conts","prefix","number","parseInt","gallery","links","substring","styles","first","prev","next","last","hash","onemax","allmax","exts","sendFile","sendFiles","stop","dataTransfer","files","actionChoose","clipboardData","paste","size","btn","file","toTimeString","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","totalTime","mins","lengthComputable","loaded","elapsedTime","ceil","updateProgress","rect"],"mappings":"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"}
|
1
|
+
{"version":3,"sources":["../code/apijs/src/javascripts/main.js","../code/apijs/src/javascripts/i18n.js","../code/apijs/src/javascripts/select.js","../code/apijs/src/javascripts/player.js","../code/apijs/src/javascripts/dialog.js","../code/apijs/src/javascripts/slideshow.js","../code/apijs/src/javascripts/upload.js"],"sourcesContent":["/**\n * Created J/03/12/2009\n * Updated D/09/03/2025\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\nif (!Array.prototype.has) {\n\tArray.prototype.has = function (needle, key) {\n\t\tif (needle instanceof Array) {\n\t\t\tfor (key in needle) if (needle.hasOwnProperty(key)) {\n\t\t\t\tif (this.has(needle[key]))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor (key in this) if (this.hasOwnProperty(key)) {\n\t\t\t\tif (this[key] === needle)\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t};\n}\n\nif (window.NodeList && !NodeList.prototype.forEach) {\n\tNodeList.prototype.forEach = function (callback, that, i) {\n\t\tthat = that || window;\n\t\tfor (i = 0; i < this.length; i++)\n\t\t\tcallback.call(that, this[i], i, this);\n\t};\n}\n\nvar apijs = new (function () {\n\n\t\"use strict\";\n\tthis.core = {};\n\tthis.version = 697;\n\n\tthis.config = {\n\t\tlang: 'auto',\n\t\tdebug: false,\n\t\t//select: { },\n\t\tdialog: {\n\t\t\tcloseOnClick: false,\n\t\t\trestrictNavigation: true,\n\t\t\tplayer: true\n\t\t},\n\t\tslideshow: {\n\t\t\tids: 'slideshow',\n\t\t\tanchor: true\n\t\t},\n\t\tupload: {\n\t\t\ttokenName: 'X-CSRF-Token',\n\t\t\ttokenValue: null\n\t\t}\n\t};\n\n\tthis.start = function () {\n\n\t\tvar elem;\n\n\t\t// bonjour\n\t\tconsole.info('APIJS ' + this.version.toString().split('').join('.') + ' - hello - 1 MB/Mo = 1024 kB/ko');\n\t\tif (document.getElementById('oldBrowser'))\n\t\t\tthrow new Error('APIJS canceled, #oldBrowser detected!');\n\n\t\tif (elem = document.querySelector('link[href*=\"apijs/fontello.woff2\"]')) {\n\t\t\tif (elem.getAttribute('href').indexOf('?a3ab5acff3') < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for link:fontello.woff2?x, it must be ?a3ab5acff3');\n\t\t}\n\t\tif (elem = document.querySelector('script[src*=\"apijs.min.js?v=\"]')) {\n\t\t\tif (elem.getAttribute('src').indexOf('?v=' + this.version) < 0)\n\t\t\t\tconsole.error('APIJS warning invalid cachekey for script:apijs.min.js?x, it must be ?v=' + this.version);\n\t\t}\n\n\t\t// instancie\n\t\tthis.i18n = new this.core.i18n();\n\t\t//this.select = new this.core.select();\n\t\tthis.dialog = new this.core.dialog();\n\t\tthis.upload = new this.core.upload();\n\t\tthis.slideshow = new this.core.slideshow();\n\t\tself.dispatchEvent(new CustomEvent('apijsbeforeload'));\n\n\t\t// démarre\n\t\tthis.i18n.init();\n\t\tthis.slideshow.init();\n\t\t//this.select.init();\n\t\tdocument.querySelectorAll('video.apijsplayer[data-src]').forEach(function (elem) {\n\t\t\tapijs.startPlayer(elem, elem.getAttribute('data-src'));\n\t\t});\n\n\t\tself.addEventListener('popstate', this.slideshow.onPopState);\n\t\tself.addEventListener('hashchange', this.slideshow.onPopState);\n\n\t\tif (this.config.debug) {\n\t\t\tconsole.info('APIJS available languages: ' + Object.keys(this.i18n.data).join(' '));\n\t\t\tconsole.info('APIJS language loaded: ' + this.config.lang);\n\t\t\tconsole.info('APIJS successfully started');\n\t\t}\n\n\t\t// événement\n\t\tself.dispatchEvent(new CustomEvent('apijsload'));\n\t};\n\n\tthis.formatNumber = function (nb, dec) {\n\n\t\t// par défaut 2 chiffres\n\t\tvar dgt = (typeof dec == 'number') ? dec : ((dec === false) ? 0 : 2), str;\n\n\t\t// Firefox 29+ pas 27+, (iOS) Safari 10+ pas 9+\n\t\ttry {\n\t\t\tstr = new Intl.NumberFormat(this.config.lang, { minimumFractionDigits: dgt, maximumFractionDigits: dgt }).format(nb);\n\t\t}\n\t\tcatch (e) {\n\t\t\tstr = nb.toFixed(dgt);\n\t\t}\n\n\t\t// conserve 00 si on veut vraiment 2 chiffres\n\t\treturn (typeof dec == 'number') ? str : str.replace(/[.,]00$/, '');\n\t};\n\n\tthis.startPlayer = function (elem, url) {\n\n\t\tif (this.config.dialog.player === true) {\n\t\t\telem.videoPlayer = new this.core.player(elem, url);\n\t\t\telem.parentNode.classList.add('apijsvideoplayer');\n\t\t\treturn true;\n\t\t}\n\n\t\tif (typeof this.config.dialog.player == 'function') {\n\t\t\tthis.config.dialog.player(elem, url);\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t};\n\n\tthis.toArray = function (data, max) {\n\t\treturn Array.prototype.slice.call(data, 0, max);\n\t};\n\n\tthis.openTab = function (ev) {\n\t\tev.preventDefault();\n\t\tif (this.href.length > 0)\n\t\t\tself.open(this.href);\n\t};\n\n\tthis.log = function (txt) {\n\t\tif (this.config.debug)\n\t\t\tconsole.info('APIJS ' + txt);\n\t};\n\n\tthis.html = function (selector, id) {\n\t\tif ((id === true) || (selector.indexOf('#') === 0))\n\t\t\treturn document.getElementById(selector.replace('#', 'apijs'));\n\t\telse if (this.dialog.t1)\n\t\t\treturn this.dialog.t1.querySelector(selector);\n\t\telse\n\t\t\treturn null;\n\t};\n\n\tthis.requestFullscreen = function (elem) {\n\t\tif (document.webkitFullscreenElement)\n\t\t\tdocument.webkitCancelFullScreen();\n\t\telse if (document.mozFullScreenElement)\n\t\t\tdocument.mozCancelFullScreen();\n\t\telse if (document.fullscreenElement)\n\t\t\tdocument.cancelFullScreen();\n\t\telse if (elem.webkitRequestFullscreen)\n\t\t\telem.webkitRequestFullscreen();\n\t\telse if (elem.requestFullscreen)\n\t\t\telem.requestFullscreen();\n\t\telse if (elem.mozRequestFullScreen)\n\t\t\telem.mozRequestFullScreen();\n\t};\n\n\tthis.serialize = function (form, filter) {\n\n\t\tvar data = [];\n\t\tfilter = (typeof filter == 'string') ? filter : '';\n\n\t\t// @see https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/\n\t\tArray.prototype.forEach.call(form.elements, function (elem, idx) {\n\n\t\t\tif (!elem.name || elem.disabled || ['file', 'reset', 'submit', 'button'].has(elem.type) || (elem.name.indexOf(filter) !== 0))\n\t\t\t\treturn;\n\n\t\t\tif (elem.type === 'select-multiple') {\n\t\t\t\tfor (idx = 0; idx < elem.options.length; idx++) {\n\t\t\t\t\tif (elem.options[idx].selected)\n\t\t\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.options[idx].value));\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (!['checkbox', 'radio'].has(elem.type) || elem.checked) {\n\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.value));\n\t\t\t}\n\t\t});\n\n\t\treturn data.join('&');\n\t};\n\n})();\n\nif (typeof self.addEventListener == 'function')\n\tself.addEventListener('load', apijs.start.bind(apijs));","/**\n * Created S/05/06/2010\n * Updated D/03/12/2023\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.i18n = function () {\n\n\t\"use strict\";\n\tthis.data = {\n\t\t// @see https://docs.google.com/spreadsheets/d/1UUpKZ-YAAlcfvGHYwt6aUM9io390j0-fIL0vMRh1pW0/edit?usp=sharing\n\t\t// auto start\n\t\tcs: {\n\t\t\t103: \"Zrušit\",\n\t\t\t104: \"Potvrzení\",\n\t\t\t105: \"Zavřít\",\n\t\t\t106: \"Předchozí\",\n\t\t\t107: \"Následující\",\n\t\t\t108: \"Vybrat soubor\",\n\t\t\t132: \"video stopa\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuto\",\n\t\t\t142: \"předchozí/následující\",\n\t\t\t143: \"přehrát/pozastavit\",\n\t\t\t144: \"zpět/vpřed\",\n\t\t\t145: \"snížit/zvýšit hlasitost\",\n\t\t\t146: \"ztlumit\",\n\t\t\t148: \"ukončit\",\n\t\t\t149: \"Konec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tde: {\n\t\t\t103: \"Abbrechen\",\n\t\t\t104: \"Bestätigen\",\n\t\t\t105: \"Schließen\",\n\t\t\t106: \"Vorheriges\",\n\t\t\t107: \"Nächstes\",\n\t\t\t108: \"Datei wählen\",\n\t\t\t109: \"Dateien wählen\",\n\t\t\t124: \"Verarbeitung läuft...\",\n\t\t\t132: \"videospur\",\n\t\t\t133: \"audiospur\",\n\t\t\t134: \"untertitel\",\n\t\t\t135: \"aus\",\n\t\t\t142: \"vorheriges/nächstes\",\n\t\t\t143: \"wiedergabe/pause\",\n\t\t\t144: \"rückwärts/vorwärts\",\n\t\t\t145: \"leiser/lauter\",\n\t\t\t146: \"ton aus\",\n\t\t\t147: \"vollbild\",\n\t\t\t148: \"beenden\",\n\t\t\t149: \"Ende\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Alle Dateien wurden akzeptiert.\",\n\t\t\t162: \"Akzeptiertes Dateiformat: §.\",\n\t\t\t163: \"Akzeptiertes Dateiformate: § und §.\",\n\t\t\t164: \"Maximale Größe: § MB.\",\n\t\t\t167: \"Unerlaubtes Format\",\n\t\t\t168: \"Format zu gross\",\n\t\t\t169: \"Leere Datei\",\n\t\t\t181: \"§% - § kB/s - Noch § Minuten\",\n\t\t\t182: \"§% - § kB/s - Noch § Minute\",\n\t\t\t183: \"§% - § kB/s - Noch § Sekunden\",\n\t\t\t185: \"§% - bis § kB/s in § Minuten\",\n\t\t\t186: \"§% - bis § kB/s in § Minute\",\n\t\t\t187: \"§% - bis § kB/s in § Sekunden\",\n\t\t\t188: \"§% - bis § kB/s\",\n\t\t\t191: \"Abbrechen\",\n\t\t\t192: \"Sind Sie sicher? [span]Ja[/span] - Nein\",\n\t\t\t193: \"Es ist ein unerwarteter Fehler aufgetreten... Bitte versuchen Sie es noch einmal.\",\n\t\t\t194: \"Es ist ein Fehler beim Senden.\",\n\t\t\t195: \"Es ist ein Fehler bei der Verarbeitung.\",\n\t\t\t196: \"Wir laden Sie ein es erneut zu [a §]versuchen[/a].\"\n\t\t},\n\t\tel: {\n\t\t\t102: \"Εντάξει\",\n\t\t\t103: \"Ακύρωση\",\n\t\t\t105: \"Κλείσιμο\",\n\t\t\t106: \"Προηγούμενο\",\n\t\t\t107: \"Επόμενο\",\n\t\t\t108: \"Επιλέξτε ένα αρχείο\",\n\t\t\t131: \"βίντεο\",\n\t\t\t132: \"κομμάτι βίντεο\",\n\t\t\t133: \"κομμάτι ήχου\",\n\t\t\t134: \"υπότιτλοι\",\n\t\t\t135: \"απενεργοποίηση\",\n\t\t\t142: \"προηγούμενο/επόμενο\",\n\t\t\t143: \"αναπαραγωγή/παύση\",\n\t\t\t144: \"προς τα πίσω/εμπρός\",\n\t\t\t145: \"μείωση/αύξηση έντασης ήχου\",\n\t\t\t146: \"σίγαση\",\n\t\t\t147: \"πλήρης οθόνη\",\n\t\t\t148: \"έξοδος\",\n\t\t\t149: \"Τέλος\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ten: {\n\t\t\t102: \"Ok\",\n\t\t\t103: \"Cancel\",\n\t\t\t104: \"Confirm\",\n\t\t\t105: \"Close\",\n\t\t\t106: \"Previous\",\n\t\t\t107: \"Next\",\n\t\t\t108: \"Choose a file\",\n\t\t\t109: \"Choose one or multiple files\",\n\t\t\t124: \"Operation in progress...\",\n\t\t\t125: \"Upload in progress...\",\n\t\t\t126: \"Processing file in progress...\",\n\t\t\t127: \"Drag and drop your files here\",\n\t\t\t131: \"video\",\n\t\t\t132: \"video track\",\n\t\t\t133: \"audio track\",\n\t\t\t134: \"subtitles\",\n\t\t\t135: \"off\",\n\t\t\t141: \"first/last\",\n\t\t\t142: \"previous/next\",\n\t\t\t143: \"play/pause\",\n\t\t\t144: \"backward/forward\",\n\t\t\t145: \"decrease/increase the volume\",\n\t\t\t146: \"mute\",\n\t\t\t147: \"full screen\",\n\t\t\t148: \"quit\",\n\t\t\t149: \"End\",\n\t\t\t150: \"Escape\",\n\t\t\t161: \"All files are accepted.\",\n\t\t\t162: \"Accepted file format: §.\",\n\t\t\t163: \"Accepted file formats: § and §.\",\n\t\t\t164: \"Maximum size: § MB.\",\n\t\t\t165: \"Maximum size by file: § MB.|Total maximum size: § MB.\",\n\t\t\t166: \"§ MB\",\n\t\t\t167: \"Format not allowed\",\n\t\t\t168: \"Size too large\",\n\t\t\t169: \"File empty\",\n\t\t\t181: \"§% - § kB/s - § minutes left\",\n\t\t\t182: \"§% - § kB/s - § minute left\",\n\t\t\t183: \"§% - § kB/s - § seconds left\",\n\t\t\t184: \"§% - § kB/s\",\n\t\t\t185: \"§% - at § kB/s in § minutes\",\n\t\t\t186: \"§% - at § kB/s in § minute\",\n\t\t\t187: \"§% - at § kB/s in § seconds\",\n\t\t\t188: \"§% - at § kB/s\",\n\t\t\t191: \"Interrupt\",\n\t\t\t192: \"Are you sure? [span]Yes[/span] - No\",\n\t\t\t193: \"It seems that an unlikely mistake just happened... Please try again.\",\n\t\t\t194: \"An error occurred while sending.\",\n\t\t\t195: \"An error occurred while processing.\",\n\t\t\t196: \"We invite you to [a §]try again[/a].\"\n\t\t},\n\t\tes: {\n\t\t\t102: \"Aceptar\",\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Cerrar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Siguiente\",\n\t\t\t108: \"Elegir un fichero\",\n\t\t\t109: \"Elegir uno o varios ficheros\",\n\t\t\t124: \"Operación en curso...\",\n\t\t\t125: \"Envío en progreso...\",\n\t\t\t126: \"Tratamiento en curso...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"pista de vídeo\",\n\t\t\t133: \"pista de audio\",\n\t\t\t134: \"subtítulos\",\n\t\t\t135: \"desactivar\",\n\t\t\t142: \"anterior/siguiente\",\n\t\t\t143: \"reproducir/pausa\",\n\t\t\t144: \"retroceder/avanzar\",\n\t\t\t145: \"bajar/subir volumen\",\n\t\t\t146: \"silenciar\",\n\t\t\t147: \"pantalla completa\",\n\t\t\t148: \"salir\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Se aceptan todos los archivos.\",\n\t\t\t162: \"Formato de archivo aceptado: §.\",\n\t\t\t163: \"Formatos de archivos aceptados: § y §.\",\n\t\t\t164: \"Tamaño máximo: § MB.\",\n\t\t\t165: \"Tamaño máximo por fichero: § Mo.|Tamaño máximo total: § Mo.\",\n\t\t\t167: \"Formato no autorizado\",\n\t\t\t168: \"Tamaño demasiado importante\",\n\t\t\t169: \"Fichero vacío\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - a § kB/s en § minutos\",\n\t\t\t186: \"§% - a § kB/s en § minuto\",\n\t\t\t187: \"§% - a § kB/s en § segundos\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrumpir\",\n\t\t\t192: \"¿Está seguro(a)? [span]Sí[/span] - No\",\n\t\t\t193: \"Parece que un error improbable acabo de ocurrir... Por favor, inténtelo de nuevo.\",\n\t\t\t194: \"Se produjo un error durante el envío.\",\n\t\t\t195: \"Se produjo un error durante el procesamiento.\",\n\t\t\t196: \"Le invitamos a [a §]intentar de nuevo[/a].\"\n\t\t},\n\t\tfr: {\n\t\t\t103: \"Annuler\",\n\t\t\t104: \"Valider\",\n\t\t\t105: \"Fermer\",\n\t\t\t106: \"Précédent\",\n\t\t\t107: \"Suivant\",\n\t\t\t108: \"Choisir un fichier\",\n\t\t\t109: \"Choisir un ou plusieurs fichiers\",\n\t\t\t124: \"Opération en cours...\",\n\t\t\t125: \"Envoi en cours...\",\n\t\t\t126: \"Traitement en cours...\",\n\t\t\t127: \"Faites glisser et déposez vos fichiers ici\",\n\t\t\t131: \"vidéo\",\n\t\t\t132: \"piste vidéo\",\n\t\t\t133: \"piste audio\",\n\t\t\t134: \"sous-titres\",\n\t\t\t141: \"premier/dernier\",\n\t\t\t142: \"précédent/suivant\",\n\t\t\t143: \"lecture/pause\",\n\t\t\t144: \"reculer/avancer\",\n\t\t\t145: \"réduire/augmenter le volume\",\n\t\t\t146: \"couper le son\",\n\t\t\t147: \"plein écran\",\n\t\t\t148: \"quitter\",\n\t\t\t149: \"Fin\",\n\t\t\t150: \"Échap\",\n\t\t\t161: \"Tous les fichiers sont acceptés.\",\n\t\t\t162: \"Format de fichier accepté : §.\",\n\t\t\t163: \"Formats de fichier acceptés : § et §.\",\n\t\t\t164: \"Taille maximale : § Mo.\",\n\t\t\t165: \"Taille maximale par fichier : § Mo.|Taille maximale total : § Mo.\",\n\t\t\t166: \"§ Mo\",\n\t\t\t167: \"Format non autorisé\",\n\t\t\t168: \"Taille trop importante\",\n\t\t\t169: \"Fichier vide\",\n\t\t\t181: \"§% - § ko/s - § minutes restantes\",\n\t\t\t182: \"§% - § ko/s - § minute restante\",\n\t\t\t183: \"§% - § ko/s - § secondes restantes\",\n\t\t\t184: \"§% - § ko/s\",\n\t\t\t185: \"§% - à § ko/s en § minutes\",\n\t\t\t186: \"§% - à § ko/s en § minute\",\n\t\t\t187: \"§% - à § ko/s en § secondes\",\n\t\t\t188: \"§% - à § ko/s\",\n\t\t\t191: \"Interrompre\",\n\t\t\t192: \"Êtes-vous sûr(e) ? [span]Oui[/span] - Non\",\n\t\t\t193: \"Il semblerait qu'une erreur improbable vient de se produire... Veuillez réessayer.\",\n\t\t\t194: \"Une erreur est survenue lors de l'envoi.\",\n\t\t\t195: \"Une erreur est survenue lors du traitement.\",\n\t\t\t196: \"Nous vous invitons à [a §]réessayer[/a].\"\n\t\t},\n\t\thu: {\n\t\t\t103: \"Mégsem\",\n\t\t\t104: \"Megerősít\",\n\t\t\t105: \"Bezár\",\n\t\t\t106: \"Előző\",\n\t\t\t107: \"Következő\",\n\t\t\t108: \"Válasszon fájlt\",\n\t\t\t131: \"videó\",\n\t\t\t132: \"videosáv\",\n\t\t\t133: \"hangsáv\",\n\t\t\t134: \"feliratok\",\n\t\t\t135: \"ki\",\n\t\t\t142: \"előző/következő\",\n\t\t\t143: \"lejátszás/szünet\",\n\t\t\t144: \"vissza/előre\",\n\t\t\t145: \"hangerő csökkentés/növelése\",\n\t\t\t146: \"némítás\",\n\t\t\t147: \"teljes képernyő\",\n\t\t\t148: \"kilépés\",\n\t\t\t149: \"Befejezés\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tit: {\n\t\t\t103: \"Annulla\",\n\t\t\t104: \"Conferma\",\n\t\t\t105: \"Chiudi\",\n\t\t\t106: \"Precedente\",\n\t\t\t107: \"Successivo\",\n\t\t\t108: \"Scegli un file\",\n\t\t\t109: \"Scegli uno o più file\",\n\t\t\t124: \"Operazione in corso...\",\n\t\t\t125: \"Invio in corso...\",\n\t\t\t126: \"Trattamento in corso...\",\n\t\t\t132: \"traccia video\",\n\t\t\t133: \"traccia audio\",\n\t\t\t134: \"sottotitoli\",\n\t\t\t135: \"inattivo\",\n\t\t\t142: \"precedente/successivo\",\n\t\t\t143: \"riproduci/pausa\",\n\t\t\t144: \"indietro/avanti\",\n\t\t\t145: \"riduci/aumenta volume\",\n\t\t\t146: \"silenzio\",\n\t\t\t147: \"schermo intero\",\n\t\t\t148: \"esci\",\n\t\t\t149: \"Fine\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Tutti i file sono accettati.\",\n\t\t\t162: \"Formato del file accettato: §.\",\n\t\t\t163: \"Formati accettati: § et §.\",\n\t\t\t164: \"Dimensione massima: § MB.\",\n\t\t\t167: \"Formato non autorizzato\",\n\t\t\t168: \"Dimensione troppo importante\",\n\t\t\t169: \"File vuoto\",\n\t\t\t181: \"§% - § kB/s - § minuti rimanenti\",\n\t\t\t182: \"§% - § kB/s - § minuto rimanente\",\n\t\t\t183: \"§% - § kB/s - § secondi rimanenti\",\n\t\t\t185: \"§% - a § kB/s in § minuti\",\n\t\t\t186: \"§% - a § kB/s in § minuto\",\n\t\t\t187: \"§% - a § kB/s in § secondi\",\n\t\t\t188: \"§% - a § kB/s\",\n\t\t\t191: \"Interrompere\",\n\t\t\t192: \"Sei sicuro? [span]Si[/span] - No\",\n\t\t\t193: \"Sembra che un errore inaspettato si sia verificato... Riprova.\",\n\t\t\t194: \"Un errore si è verificato durante l'invio.\",\n\t\t\t195: \"Un errore si è verificato durante il trattamento.\",\n\t\t\t196: \"Vi invitiamo a [a §]riprovare[/a].\"\n\t\t},\n\t\tja: {\n\t\t\t103: \"キャンセル\",\n\t\t\t104: \"承認\",\n\t\t\t105: \"閉じる\",\n\t\t\t106: \"前へ\",\n\t\t\t107: \"次へ\",\n\t\t\t108: \"ファイルを選択する\",\n\t\t\t131: \"ビデオ\",\n\t\t\t132: \"ビデオトラック\",\n\t\t\t133: \"オーディオトラック\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"オフ\",\n\t\t\t142: \"前へ/次へ\",\n\t\t\t143: \"再生/一時停止\",\n\t\t\t144: \"戻る/進む\",\n\t\t\t146: \"ミュート\",\n\t\t\t147: \"全画面表示\",\n\t\t\t148: \"終了\",\n\t\t\t149: \"終了\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ Mo\",\n\t\t\t184: \"§% - § Ko/s\",\n\t\t\t192: \"よろしいですか?[span]はい[/span] - いいえ\"\n\t\t},\n\t\tnl: {\n\t\t\t103: \"Annuleren\",\n\t\t\t104: \"Bevestigen\",\n\t\t\t105: \"Sluiten\",\n\t\t\t106: \"Vorige\",\n\t\t\t107: \"Volgende\",\n\t\t\t108: \"Kies een bestand\",\n\t\t\t132: \"videospoor\",\n\t\t\t133: \"audiospoor\",\n\t\t\t134: \"ondertitels\",\n\t\t\t135: \"uit\",\n\t\t\t142: \"vorige/volgende\",\n\t\t\t143: \"afspelen/pauzeren\",\n\t\t\t144: \"achteruit/vooruit\",\n\t\t\t145: \"volume omlaag/omhoog\",\n\t\t\t146: \"dempen\",\n\t\t\t147: \"schermvullend\",\n\t\t\t148: \"afsluiten\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpl: {\n\t\t\t103: \"Anuluj\",\n\t\t\t104: \"Potwierdź\",\n\t\t\t105: \"Zamknij\",\n\t\t\t106: \"Poprzedni\",\n\t\t\t107: \"Następny\",\n\t\t\t108: \"Wybierz plik\",\n\t\t\t131: \"obraz\",\n\t\t\t132: \"ścieżka obrazu\",\n\t\t\t133: \"ścieżka dźwiękowa\",\n\t\t\t134: \"napisy\",\n\t\t\t135: \"wyłączone\",\n\t\t\t142: \"poprzedni/następny\",\n\t\t\t143: \"odtwarzaj/wstrzymaj\",\n\t\t\t144: \"wstecz/przodu\",\n\t\t\t145: \"ciszej/głośniej\",\n\t\t\t146: \"wycisz\",\n\t\t\t147: \"pełny ekran\",\n\t\t\t148: \"zakończ\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tpt: {\n\t\t\t103: \"Cancelar\",\n\t\t\t104: \"Confirmar\",\n\t\t\t105: \"Fechar\",\n\t\t\t106: \"Anterior\",\n\t\t\t107: \"Seguinte\",\n\t\t\t108: \"Escolha um ficheiro\",\n\t\t\t124: \"Operação em processo...\",\n\t\t\t125: \"Envio em processo...\",\n\t\t\t126: \"Tratamento em processo...\",\n\t\t\t131: \"vídeo\",\n\t\t\t132: \"faixa de vídeo\",\n\t\t\t133: \"faixa de áudio\",\n\t\t\t134: \"legendas\",\n\t\t\t135: \"não\",\n\t\t\t142: \"anterior/seguinte\",\n\t\t\t143: \"reprodução/pausa\",\n\t\t\t144: \"recuar/avançar\",\n\t\t\t145: \"diminuir/aumentar volume\",\n\t\t\t146: \"sem som\",\n\t\t\t147: \"ecrã completo\",\n\t\t\t148: \"sair\",\n\t\t\t149: \"Fim\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Todos os ficheiros foram aceites.\",\n\t\t\t162: \"Formato do ficheiro aceite: §.\",\n\t\t\t163: \"Formatos de ficheiro aceites: § e §.\",\n\t\t\t164: \"Tamanho máximo: § MB.\",\n\t\t\t181: \"§% - § kB/s - § minutos restantes\",\n\t\t\t182: \"§% - § kB/s - § minuto restantes\",\n\t\t\t183: \"§% - § kB/s - § segundos restantes\",\n\t\t\t185: \"§% - § kB/s em § minutos\",\n\t\t\t186: \"§% - § kB/s em § minuto\",\n\t\t\t187: \"§% - § kB/s em § segundos\",\n\t\t\t188: \"§% - § kB/s\",\n\t\t\t192: \"Tem a certeza? [span]Sim[/span] - Não\",\n\t\t\t193: \"Parece ter acontecido um erro imprevisto. Por favor, tente novamente.\",\n\t\t\t194: \"Ocorreu um erro ao enviar.\",\n\t\t\t195: \"Ocorreu um erro ao processar.\",\n\t\t\t196: \"Convidamo-lo a [a §]tentar novamente[/a].\"\n\t\t},\n\t\tptbr: {\n\t\t\t107: \"Próximo\",\n\t\t\t108: \"Escolher um arquivo\",\n\t\t\t124: \"Operação em andamento...\",\n\t\t\t125: \"Envio em andamento...\",\n\t\t\t126: \"Tratamento em andamento...\",\n\t\t\t132: \"trilha de vídeo\",\n\t\t\t133: \"trilha de áudio\",\n\t\t\t135: \"desligado\",\n\t\t\t142: \"anterior/próximo\",\n\t\t\t143: \"reproduzir/pausar\",\n\t\t\t144: \"retroceder/avançar\",\n\t\t\t146: \"sem áudio\",\n\t\t\t147: \"tela inteira\",\n\t\t\t148: \"fechar\",\n\t\t\t149: \"Final\"\n\t\t},\n\t\tro: {\n\t\t\t103: \"Anuleaza\",\n\t\t\t104: \"Confirmare\",\n\t\t\t105: \"Inchide\",\n\t\t\t106: \"Anteriorul\",\n\t\t\t107: \"Urmatorul\",\n\t\t\t108: \"Alege un fișier\",\n\t\t\t132: \"pistă video\",\n\t\t\t133: \"pistă audio\",\n\t\t\t134: \"subtitluri\",\n\t\t\t135: \"oprit\",\n\t\t\t142: \"anteriorul/urmatorul\",\n\t\t\t143: \"redare/pauză\",\n\t\t\t144: \"înapoi/înaintează\",\n\t\t\t145: \"scade/crește volumul\",\n\t\t\t146: \"mut\",\n\t\t\t147: \"pe tot ecranul\",\n\t\t\t148: \"ieșire\",\n\t\t\t149: \"Sfârșit\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tru: {\n\t\t\t102: \"Ок\",\n\t\t\t103: \"Отмена\",\n\t\t\t104: \"Подтвердить\",\n\t\t\t105: \"Закрыть\",\n\t\t\t106: \"Предыдущий\",\n\t\t\t107: \"Следующий\",\n\t\t\t108: \"Выберите файл\",\n\t\t\t124: \"Операция в процессе...\",\n\t\t\t131: \"видео\",\n\t\t\t132: \"видеодорожка\",\n\t\t\t133: \"аудиодорожка\",\n\t\t\t134: \"субтитры\",\n\t\t\t135: \"выключено\",\n\t\t\t142: \"предыдущий/следующий\",\n\t\t\t143: \"воспроизведение/пауза\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"понизить/повысить громкость\",\n\t\t\t146: \"выключить звук\",\n\t\t\t147: \"полноэкранный режим\",\n\t\t\t148: \"выйти\",\n\t\t\t150: \"Esc\",\n\t\t\t161: \"Все файлы приняты.\",\n\t\t\t162: \"Формат файла: §.\",\n\t\t\t163: \"Форматы файлов: § и §.\",\n\t\t\t164: \"Максимальный размер: § Мб.\",\n\t\t\t166: \"§ Мб\",\n\t\t\t181: \"§% - § Кб/s - осталось § минут\",\n\t\t\t182: \"§% - § Кб/s - осталось § минут\",\n\t\t\t183: \"§% - § Кб/s - осталось § секунд\",\n\t\t\t184: \"§% - § Кб/s\",\n\t\t\t185: \"§% - § Кб/s за § минут\",\n\t\t\t186: \"§% - § Кб/s за § минут\",\n\t\t\t187: \"§% - § Кб/s за § секунд\",\n\t\t\t188: \"§% - § Кб/s\",\n\t\t\t192: \"Вы уверены? [span]Да[/span] - нет\",\n\t\t\t193: \"Кажется произошла не предусмотренная ошибка... Попробуйте еще раз.\",\n\t\t\t194: \"Возникла ошибка при отправке файла.\",\n\t\t\t195: \"Возникла ошибка при обработке файла.\"\n\t\t},\n\t\tsk: {\n\t\t\t103: \"Zrušiť\",\n\t\t\t104: \"Potvrdiť\",\n\t\t\t105: \"Zavrieť\",\n\t\t\t106: \"Dozadu\",\n\t\t\t107: \"Ďalej\",\n\t\t\t108: \"Zvoľte si súbor\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t135: \"vypnuté\",\n\t\t\t142: \"dozadu/ďalej\",\n\t\t\t143: \"prehrať/pozastaviť\",\n\t\t\t144: \"dozadu/dopredu\",\n\t\t\t145: \"znizit/zvysit hlasitost\",\n\t\t\t146: \"stlmiť\",\n\t\t\t148: \"koniec\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ttr: {\n\t\t\t102: \"Tamam\",\n\t\t\t103: \"İptal\",\n\t\t\t104: \"Onayla\",\n\t\t\t105: \"Kapat\",\n\t\t\t106: \"Önceki\",\n\t\t\t107: \"Sonraki\",\n\t\t\t108: \"Bir dosya seçin\",\n\t\t\t131: \"görüntü\",\n\t\t\t132: \"görüntü kaydı\",\n\t\t\t133: \"ses kaydı\",\n\t\t\t134: \"altyazılar\",\n\t\t\t135: \"kapalı\",\n\t\t\t142: \"önceki/sonraki\",\n\t\t\t143: \"duraklatma/oynatma\",\n\t\t\t144: \"geri/i̇leri\",\n\t\t\t145: \"ses kısar/açar\",\n\t\t\t146: \"sesi kapatma\",\n\t\t\t147: \"tam ekran\",\n\t\t\t148: \"çıkış\",\n\t\t\t149: \"Son\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"Emin misiniz ? [span]Evet[/span] - Hayır\"\n\t\t},\n\t\tuk: {\n\t\t\t102: \"Гаразд\",\n\t\t\t103: \"Відмінити\",\n\t\t\t104: \"Підтвердити\",\n\t\t\t105: \"Закрити\",\n\t\t\t106: \"Попередній\",\n\t\t\t107: \"Наступний\",\n\t\t\t108: \"Вибрати файл\",\n\t\t\t131: \"відео\",\n\t\t\t132: \"відеодоріжка\",\n\t\t\t133: \"звукова доріжка\",\n\t\t\t134: \"субтитри\",\n\t\t\t135: \"вимкнено\",\n\t\t\t142: \"попередній/наступний\",\n\t\t\t143: \"відтворити/призупинити\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"зменшити/збільшити гучність\",\n\t\t\t146: \"вимкнути звук\",\n\t\t\t148: \"вийти\",\n\t\t\t149: \"Кінець\",\n\t\t\t150: \"Esc\",\n\t\t\t166: \"§ МБ\",\n\t\t\t184: \"§% - § кБ/s\"\n\t\t},\n\t\tzh: {\n\t\t\t102: \"确定\",\n\t\t\t103: \"取消\",\n\t\t\t104: \"确认\",\n\t\t\t105: \"关闭\",\n\t\t\t106: \"上一个\",\n\t\t\t107: \"下一个\",\n\t\t\t108: \"选择文件\",\n\t\t\t131: \"视频\",\n\t\t\t132: \"视频轨道\",\n\t\t\t133: \"音频轨道\",\n\t\t\t134: \"字幕\",\n\t\t\t135: \"关\",\n\t\t\t142: \"上一个/下一个\",\n\t\t\t143: \"播放/暂停\",\n\t\t\t144: \"快退/快进\",\n\t\t\t145: \"音量减/增\",\n\t\t\t146: \"静音\",\n\t\t\t147: \"全屏\",\n\t\t\t148: \"退出\",\n\t\t\t150: \"Esc\",\n\t\t\t192: \"您确定吗?[span]是[/span] - 否\"\n\t\t}\n\t\t// auto end\n\t};\n\n\tthis.init = function () {\n\n\t\tvar value = apijs.config.lang, html = document.querySelector('html');\n\n\t\tif (value.indexOf('auto') > -1) {\n\t\t\tvalue = html.getAttribute('xml:lang') || html.getAttribute('lang'); // pt-BR fr-FR\n\t\t\tif (typeof value == 'string') {\n\t\t\t\tvalue = value.replace(/[-_]/g, '').toLowerCase();\n\t\t\t\tvalue = value.slice(0, 4); // ptbr frfr\n\t\t\t\tif (!this.data.hasOwnProperty(value))\n\t\t\t\t\tvalue = value.slice(0, 2); // pt fr\n\t\t\t\tif (this.data.hasOwnProperty(value))\n\t\t\t\t\tapijs.config.lang = value;\n\t\t\t}\n\t\t}\n\n\t\tif (!this.data.hasOwnProperty(value))\n\t\t\tapijs.config.lang = 'en';\n\t};\n\n\n\t// TRADUIT (public return string|domelement|boolean)\n\n\tthis.translate = function (word) {\n\n\t\tvar lang = apijs.config.lang, idx = 1, translation = '';\n\n\t\t// mot clef inexistant dans la langue configurée\n\t\t// test avec la langue par défaut pour éventuellement continuer\n\t\tif (typeof this.data[lang][word] != 'string') {\n\t\t\tif ((lang.length > 3) && (typeof this.data[lang.slice(0, 2)][word] == 'string'))\n\t\t\t\tlang = lang.slice(0, 2);\n\t\t\telse if ((lang !== 'en') && (typeof this.data.en[word] == 'string'))\n\t\t\t\tlang = 'en';\n\t\t\telse\n\t\t\t\treturn word;\n\t\t}\n\n\t\t// chaîne de caractères configurable\n\t\tif (arguments.length > 1) {\n\t\t\tthis.data[lang][word].split('§').forEach(function (data) {\n\t\t\t\ttranslation += (idx < this.length) ? data + this[idx++] : data;\n\t\t\t}, arguments); // pour que ci-dessus this = arguments\n\t\t\treturn translation;\n\t\t}\n\n\t\t// chaîne de caractères simple\n\t\treturn this.data[lang][word];\n\t};\n\n\tthis.translateNode = function () {\n\n\t\t// apply fait une copie des arguments\n\t\t// c'est comme si on avait appelé this.translate directement\n\t\treturn document.createTextNode(this.translate.apply(this, arguments));\n\t};\n\n\tthis.changeLang = function (lang) {\n\n\t\tif (typeof lang == 'string') {\n\n\t\t\tif (lang.indexOf('auto') > -1) {\n\t\t\t\tapijs.config.lang = 'auto';\n\t\t\t\tthis.init();\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tlang = lang.replace(/[-_]/g, '');\n\n\t\t\tif (this.data.hasOwnProperty(lang)) {\n\t\t\t\tapijs.config.lang = lang;\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/02/03/2020\n * Updated L/02/03/2020\n *\n * Copyright 2008-2020 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.select = function () {\n\n\t\"use strict\";\n\n\tthis.init = function () {\n\n\t};\n};","/**\n * Created D/11/01/2015\n * Updated D/03/12/2023\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.player = function (video, url) {\n\n\t\"use strict\";\n\tthis.video = video;\n\tthis.stalled = false;\n\tthis.subload = false;\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this|void|domelement)\n\n\tthis.autoRun = function (video, url) { // todo\n\n\t\tvideo.removeAttribute('src');\n\t\tvideo.removeAttribute('data-src');\n\t\tvideo.removeAttribute('controls');\n\t\tvideo.classList.add('apijsplayer');\n\n\t\t// @see https://developer.mozilla.org/fr/docs/Web/Guide/DOM/Events/evenement_medias\n\t\tvideo.onloadedmetadata = function (ev) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onTimeupdate(ev);\n\t\t\tthis.onProgress(ev);\n\t\t\tthis.onVideotrack();\n\t\t\tthis.onAudiotrack();\n\t\t}.bind(this);\n\t\tvideo.onstalled = function (ev) {\n\t\t\tthis.stalled = true;\n\t\t\tthis.onWaiting(ev);\n\t\t}.bind(this);\n\t\tvideo.onplaying = this.onPlay.bind(this);\n\t\tvideo.onpause = this.onPlay.bind(this);\n\t\tvideo.onended = this.onPlay.bind(this);\n\t\tvideo.onprogress = this.onProgress.bind(this);\n\t\tvideo.ontimeupdate = this.onTimeupdate.bind(this);\n\t\tvideo.onseeking = this.onTimeupdate.bind(this);\n\t\tvideo.onseeked = this.onWaiting.bind(this);\n\t\tvideo.onwaiting = this.onWaiting.bind(this);\n\t\tvideo.onloadstart = this.onWaiting.bind(this);\n\t\tvideo.oncanplay = this.onWaiting.bind(this);\n\t\tvideo.onclick = this.actionPlay.bind(this);\n\t\tvideo.onvolumechange = this.actionVolume.bind(this);\n\t\tvideo.ondurationchange = apijs.dialog.onMediaLoad;\n\t\tvideo.onerror = apijs.dialog.onMediaLoad;\n\n\t\t// ajoute les contrôles\n\t\tvideo.parentNode.appendChild(this.htmlSvgPlayer());\n\n\t\t// charge les sources\n\t\tif (url.indexOf('m3u') < 0) {\n\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\treturn this;\n\t\t}\n\n\t\tvar xhr = new XMLHttpRequest();\n\t\txhr.open('GET', url, true);\n\t\txhr.onreadystatechange = function () {\n\t\t\tif (xhr.readyState === 4) {\n\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijsplayer.init', xhr: xhr } }));\n\t\t\t\tif (!video || (video.childNodes.length > 0)) {\n\t\t\t\t\txhr.abort();\n\t\t\t\t}\n\t\t\t\telse if ([0, 200].has(xhr.status)) {\n\n\t\t\t\t\tvar url, txt = 0, nbv = 0, nbt = 0, data = xhr.responseText.trim().split(\"\\n\");\n\t\t\t\t\twhile (typeof (url = data.shift()) == 'string') {\n\n\t\t\t\t\t\t// #APIJS#attr|name|value\n\t\t\t\t\t\tif (url.indexOf('#APIJS#attr') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tvideo.setAttribute(txt[1], txt[2]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #APIJS#track|kind|label|srclang|src\n\t\t\t\t\t\telse if (url.indexOf('#APIJS#track|subtitles') === 0) {\n\t\t\t\t\t\t\ttxt = url.split('|');\n\t\t\t\t\t\t\tthis.html('.tracks.texttrack select').appendChild(this.htmlOption(nbt++, txt[3] + ' - ' + txt[2]));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlTrack(txt));\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// #EXTINF: Text\n\t\t\t\t\t\telse if (url.indexOf('#EXTINF') === 0) {\n\t\t\t\t\t\t\ttxt = url.replace(/#EXTINF:\\d+,/, '');\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// http\n\t\t\t\t\t\telse if ((url.length > 5) && (url[0] !== '#')) {\n\t\t\t\t\t\t\tthis.html('.tracks.video select').appendChild(this.htmlOption(nbv++, (typeof txt == 'string') ? txt : nbv));\n\t\t\t\t\t\t\tvideo.appendChild(this.htmlSource(url));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.updateSelect('video', nbv);\n\t\t\t\t\tif (typeof video.textTracks == 'object')\n\t\t\t\t\t\tthis.updateSelect('texttrack', video.textTracks.length || nbt);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tapijs.dialog.onMediaLoad({ type: 'error' });\n\t\t\t\t}\n\t\t\t}\n\t\t}.bind(this);\n\t\txhr.send();\n\n\t\treturn this;\n\t};\n\n\tthis.updateSelect = function (css, total) {\n\n\t\t// s'il y une seule option on affiche pas, sauf pour les sous titres\n\t\tvar adjust = (css === 'texttrack') ? 1 : 0;\n\t\tif (total > adjust) {\n\t\t\tthis.html('.tracks.' + css).removeAttribute('style');\n\t\t\tthis.html('.tracks.' + css + ' em').textContent = '(' + total + ')';\n\t\t\tthis.html('.tracks.' + css + ' select').setAttribute('size', (total < 10) ? total + adjust : 10);\n\t\t}\n\t\telse {\n\t\t\tthis.html('.tracks.' + css).setAttribute('style', 'display:none;');\n\t\t\tthis.html('.tracks.' + css + ' select').innerHTML = '';\n\t\t}\n\t};\n\n\tthis.html = function (selector) {\n\t\treturn this.video.parentNode.querySelector(selector);\n\t};\n\n\n\t// GESTION DES ÉVÉNEMENTS (private return void)\n\n\tthis.onVideotrack = function () {\n\n\t\tvar tracks = this.video.videoTracks, select = this.html('.tracks.videotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes vidéo\n\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/VideoTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('videotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionVideotrack(auto);\n\t\t}\n\t};\n\n\tthis.onAudiotrack = function () {\n\n\t\tvar tracks = this.video.audioTracks, select = this.html('.tracks.audiotrack select'), lang = apijs.config.lang, auto = -1, idx;\n\n\t\tif (typeof tracks == 'object') {\n\n\t\t\t// si la vidéo contient plusieurs pistes audio\n\t\t\t// @see https://developer.mozilla.org/en-US/docs/Web/API/AudioTrack\n\t\t\tif (tracks.length > 1) {\n\t\t\t\tfor (idx = 0; idx < tracks.length; idx++) {\n\t\t\t\t\tif (tracks[idx].language && (tracks[idx].language.toLowerCase().replace(/[-_]/g, '').indexOf(lang) == 0))\n\t\t\t\t\t\tauto = (auto < 0) ? idx : auto;\n\t\t\t\t\tselect.appendChild(this.htmlOption(idx, tracks[idx]));\n\t\t\t\t}\n\t\t\t\tthis.updateSelect('audiotrack', tracks.length);\n\t\t\t}\n\n\t\t\t// sélectionne éventuellement la piste dans la bonne langue\n\t\t\tselect.selectedIndex = Math.max(0, auto);\n\t\t\tif (auto >= 0)\n\t\t\t\tthis.actionAudiotrack(auto);\n\t\t}\n\t};\n\n\tthis.onTimeupdate = function (ev) {\n\n\t\tvar time = this.video.currentTime, duration = this.video.duration, text = '--:--', hh, mm, ss;\n\n\t\tif (!isNaN(time) && (duration !== Infinity) && !isNaN(duration)) {\n\n\t\t\thh = Math.floor(time / 3600);\n\t\t\tmm = Math.floor((time % 3600) / 60);\n\t\t\tss = Math.floor(time % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext = hh + mm + ':' + ss;\n\n\t\t\thh = Math.floor(duration / 3600);\n\t\t\tmm = Math.floor((duration % 3600) / 60);\n\t\t\tss = Math.floor(duration % 60);\n\t\t\tif (ss < 10) ss = '0' + ss;\n\t\t\tif (mm < 10) mm = '0' + mm;\n\n\t\t\thh = (hh > 0) ? hh + ':' : '';\n\t\t\ttext += ' / ' + hh + mm + ':' + ss;\n\n\t\t\tthis.html('svg.bar rect').style.width = (time / duration * 100) + '%';\n\t\t}\n\n\t\tthis.html('span.time').textContent = text;\n\n\t\t// loader stalled sauf par les tracks\n\t\tif (this.stalled && !this.subload) {\n\t\t\tthis.stalled = false;\n\t\t\tthis.onWaiting(ev);\n\t\t}\n\t};\n\n\tthis.onProgress = function () {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), idx = video.buffered.length, width, buffer;\n\n\t\tif ((idx > 0) && (video.duration !== Infinity) && !isNaN(video.duration)) {\n\n\t\t\telem.querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\t\twhile (idx-- > 0) {\n\n\t\t\t\tbuffer = document.createElement('rect');\n\t\t\t\tbuffer.setAttribute('class', 'buffer');\n\n\t\t\t\twidth = (video.buffered.end(idx) - video.buffered.start(idx)) / video.duration * 100;\n\t\t\t\tif (width > 99.8)\n\t\t\t\t\tbuffer.setAttribute('style', 'left:0%; width:100%;');\n\t\t\t\telse\n\t\t\t\t\tbuffer.setAttribute('style', 'left:' + (video.buffered.start(idx) / video.duration * 100) + '%; width:' + width + '%;');\n\n\t\t\t\telem.appendChild(buffer);\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onPlay = function () { // todo\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tif (this.video.paused) {\n\t\t\t\tthis.html('span.play').textContent = '\\uE810';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.remove('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.remove('playing');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.html('span.play').textContent = '\\uE811';\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1)\n\t\t\t\t\tapijs.dialog.add('playing');\n\t\t\t\telse\n\t\t\t\t\tthis.video.parentNode.classList.add('playing');\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onWaiting = function (ev) { // todo\n\t\tapijs.log('player:video:onWaiting:' + ev.type + ' stalled:' + this.stalled + '/subload:' + this.subload);\n\t\tapijs.dialog[['loadstart', 'waiting', 'seeking', 'stalled'].has(ev.type) ? 'add' : 'remove']('loading');\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionPlay = function () {\n\n\t\tvar video = this.video;\n\n\t\t// ignore le clic du swipe en mode slideshow\n\t\tif (apijs.dialog.swipe)\n\t\t\treturn false;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\t\t\tif (video.ended || video.paused)\n\t\t\t\tvideo.play();\n\t\t\telse\n\t\t\t\tvideo.pause();\n\t\t}\n\t};\n\n\tthis.actionVolume = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.vol'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(video.networkState)) {\n\n\t\t\tif ((typeof ev == 'object') && !isNaN(ev.clientX)) {\n\n\t\t\t\tdo { value += elem.offsetLeft; }\n\t\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\t\tvalue = ((ev.clientX - value) * 100 / width) / 100;\n\t\t\t\tvalue = (value < 0.2) ? 0 : ((value > 0.92) ? 1 : value);\n\n\t\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t\t//\tvalue = 1 - value;\n\n\t\t\t\tvideo.volume = value;\n\t\t\t\tvideo.muted = false;\n\t\t\t}\n\n\t\t\tthis.html('svg.vol rect').style.width = video.muted ? 0 : (video.volume * 100) + '%';\n\t\t}\n\t};\n\n\tthis.actionPosition = function (ev) {\n\n\t\tvar video = this.video, elem = this.html('svg.bar'), width = elem.offsetWidth, value = 0;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif (([1,2].has(video.networkState)) && (video.duration !== Infinity) && !isNaN(video.duration) && (typeof ev == 'object')) {\n\n\t\t\tdo { value += elem.offsetLeft; }\n\t\t\twhile (elem = elem.offsetParent);\n\n\t\t\tvalue = (video.duration * (ev.clientX - value) * 100 / width) / 100;\n\t\t\tvalue = (value <= 1) ? 0 : value;\n\n\t\t\t//if (self.getComputedStyle(this.html('svg.vol')).direction === 'rtl')\n\t\t\t//\tvalue = video.duration - value;\n\n\t\t\tvideo.currentTime = value;\n\t\t}\n\t};\n\n\tthis.actionVideotrack = function (ev) {\n\n\t\tvar tracks = this.video.videoTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionAudiotrack = function (ev) {\n\n\t\tvar tracks = this.video.audioTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].enabled = (idx == value);\n\n\t\t\tvideo.currentTime -= 1;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionTexttrack = function (ev) {\n\n\t\tvar tracks = this.video.textTracks, value = (typeof ev == 'object') ? ev.target.value : ev, idx;\n\n\t\t// NETWORK_IDLE, NETWORK_LOADING\n\t\tif ([1,2].has(this.video.networkState)) {\n\n\t\t\tfor (idx = 0; idx < tracks.length; idx++)\n\t\t\t\ttracks[idx].mode = (idx == value) ? 'showing' : 'hidden';\n\n\t\t\tthis.subload = true;\n\t\t}\n\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionVideo = function (ev) {\n\n\t\tthis.html('svg.bar rect').style.width = '0';\n\t\tthis.html('svg.bar').querySelectorAll('.buffer').forEach(function (node) { node.remove(); });\n\t\tthis.html('span.play').textContent = '\\uE810';\n\n\t\tthis.updateSelect('videotrack', 0);\n\t\tthis.updateSelect('audiotrack', 0);\n\n\t\tthis.video.src = this.video.querySelectorAll('source')[(typeof ev == 'object') ? ev.target.value : ev].src;\n\t\tif (typeof ev == 'object')\n\t\t\tev.target.blur();\n\t};\n\n\tthis.actionFullscreen = function () {\n\n\t\t// en direct\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tthis.video.parentNode.classList[res ? 'add' : 'remove']('fullscreen');\n\t},\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return domelement)\n\n\tthis.htmlSvgPlayer = function () {\n\n\t\tvar d, c, b, a = document.createElement('div');\n\t\ta.setAttribute('class', 'apijsplayer noplaying');\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn play fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE810'));\n\t\t\tb.onclick = this.actionPlay.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg bar');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'bar');\n\t\t\t\tc.onclick = this.actionPosition.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'time');\n\t\t\tb.appendChild(document.createTextNode('--:--'));\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'svg vol');\n\n\t\t\t\tc = document.createElement('svg');\n\t\t\t\tc.setAttribute('class', 'vol');\n\t\t\t\tc.onclick = this.actionVolume.bind(this);\n\n\t\t\t\t\td = document.createElement('rect');\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks audiotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(133));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionAudiotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks videotrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(132));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideotrack.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks video');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(131));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionVideo.bind(this);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('label');\n\t\t\tb.setAttribute('class', 'tracks texttrack');\n\t\t\tb.setAttribute('style', 'display:none;');\n\t\t\tb.appendChild(apijs.i18n.translateNode(134));\n\n\t\t\t\tc = document.createElement('em');\n\n\t\t\tb.appendChild(c);\n\n\t\t\t\tc = document.createElement('select');\n\t\t\t\tc.setAttribute('lang', 'mul');\n\t\t\t\tc.onchange = this.actionTexttrack.bind(this);\n\n\t\t\t\t\td = document.createElement('option');\n\t\t\t\t\td.appendChild(apijs.i18n.translateNode(135)); // off\n\n\t\t\t\tc.appendChild(d);\n\n\t\t\tb.appendChild(c);\n\n\t\ta.appendChild(b);\n\n\t\t\tb = document.createElement('span');\n\t\t\tb.setAttribute('class', 'btn full fnt');\n\t\t\tb.appendChild(document.createTextNode('\\uE80F'));\n\t\t\tb.onclick = function () {\n\t\t\t\t// via un dialogue ou en direct\n\t\t\t\tif (apijs.dialog.t1) {\n\t\t\t\t\tapijs.requestFullscreen(apijs.dialog.t1);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('fullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.actionFullscreen.bind(this));\n\t\t\t\t\tapijs.requestFullscreen(this.video.parentNode);\n\t\t\t\t}\n\n\t\t\t}.bind(this);\n\n\t\ta.appendChild(b);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlTrack = function (data) { // todo\n\n\t\tvar a = document.createElement('track');\n\t\ta.setAttribute('kind', data[1]);\n\t\ta.setAttribute('label', data[2]);\n\t\ta.setAttribute('srclang', data[3]);\n\t\ta.setAttribute('src', data[4]);\n\n\t\ta.onload = function (ev) {\n\t\t\tapijs.log('player:track:onload ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\ta.onerror = function (ev) {\n\t\t\tapijs.log('player:track:onerror ' + ev.target.src.slice(ev.target.src.lastIndexOf('/') + 1));\n\t\t\tif (ev.target.track.mode === 'showing') {\n\t\t\t\tthis.onWaiting(ev);\n\t\t\t\tthis.subload = false;\n\t\t\t}\n\t\t}.bind(this);\n\n\t\treturn a;\n\t};\n\n\tthis.htmlSource = function (url) {\n\n\t\tvar a = document.createElement('source');\n\t\ta.setAttribute('src', url);\n\t\ta.onerror = apijs.dialog.onMediaLoad;\n\n\t\treturn a;\n\t};\n\n\tthis.htmlOption = function (idx, txt) {\n\n\t\tif (typeof txt == 'object')\n\t\t\ttxt = (txt.label === '') ? txt.language.toLowerCase() : txt.language.toLowerCase() + ' - ' + txt.label;\n\n\t\tvar a = document.createElement('option');\n\t\ta.setAttribute('value', idx);\n\t\ta.appendChild(document.createTextNode(txt));\n\n\t\treturn a;\n\t};\n\n\n\tthis.autoRun(video, url);\n};","/**\n * Created D/12/04/2009\n * Updated D/03/12/2023\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.dialog = function () {\n\n\t\"use strict\";\n\tthis.klass = [];\n\tthis.height = 0;\n\tthis.scroll = 0; // time\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.xhr = null;\n\n\tthis.ft = /information|confirmation|options|upload|progress|waiting|photo|video|iframe|ajax|start|ready|end|reduce|mobile|tiny|fullscreen/g;\n\tthis.ti = 'a,area,button,input,textarea,select,object,iframe';\n\tthis.ns = 'http://www.w3.org/2000/svg';\n\n\tthis.swipe = false;\n\tthis.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.t3 = null; // input file\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\n\n\t// GÉNÉRATION DES BOÎTES DE DIALOGUE (public return boolean)\n\n\tthis.dialogInformation = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('information', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnOk()\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogInformation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogConfirmation = function (title, text, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('confirmation', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('button', 'apijs.dialog.actionConfirm();')\n\t\t\t\t.show('button.confirm');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogConfirmation invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormOptions = function (title, text, action, callback, args, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof callback == 'function')) {\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\treturn this.init('options', icon)\n\t\t\t\t.htmlParent(action, 'apijs.dialog.actionConfirm();')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show(true);\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormOptions invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogFormUpload = function (title, text, action, input, multiple, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string') && (typeof action == 'string') && (typeof input == 'string')) {\n\t\t\treturn this.init('upload', icon)\n\t\t\t\t.htmlParent(action, 'apijs.upload.actionConfirm();', 'apijs.upload.actionDrag(event);')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlUpload(input, (typeof multiple == 'boolean') ? multiple : false, 'apijs.upload.actionChoose(this);')\n\t\t\t\t.htmlBtnConfirm('submit')\n\t\t\t\t.show('button.browse');\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogFormUpload invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogProgress = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('progress', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgProgress()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogProgress invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogWaiting = function (title, text, icon) {\n\n\t\tif ((typeof title == 'string') && (typeof text == 'string')) {\n\t\t\treturn this.init('waiting', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogWaiting invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogPhoto = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('photo', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, false)\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogPhoto invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogVideo = function (url, name, date, legend, icon) {\n\n\t\tvar slideshow = (typeof icon == 'string');\n\t\ticon = slideshow ? 'notransition slideshow loading ' + icon : 'notransition loading';\n\n\t\tif ((typeof url == 'string') && (typeof name == 'string') && (typeof date == 'string') && (typeof legend == 'string')) {\n\t\t\treturn this.init('video', icon)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlMedia(url, name, date, legend)\n\t\t\t\t.htmlHelp(slideshow, url.indexOf('iframe') < 0) // true si pas iframe\n\t\t\t\t.htmlBtnClose()\n\t\t\t\t.htmlBtnNavigation()\n\t\t\t\t.htmlSvgLoader()\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogVideo invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogIframe = function (url, close, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean')) {\n\t\t\treturn this.init('iframe', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlIframe(url)\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogIframe invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\tthis.dialogAjax = function (url, close, callback, args, icon) {\n\n\t\tif ((typeof url == 'string') && (typeof close == 'boolean') && (typeof callback == 'function')) {\n\t\t\t// dialogue\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.init('ajax', (typeof icon == 'string') ? icon + ' loading' : 'loading', !close)\n\t\t\t\t.htmlParent()\n\t\t\t\t.htmlBtnClose(close)\n\t\t\t\t.htmlSvgLoader(false)\n\t\t\t\t.show();\n\t\t\t// ajax\n\t\t\tthis.xhr = new XMLHttpRequest();\n\t\t\tthis.xhr.open('GET', url, true);\n\t\t\tthis.xhr.onreadystatechange = function () {\n\t\t\t\tif ((this.xhr.readyState === 4) && (typeof this.callback == 'function')) {\n\t\t\t\t\tthis.callback(this.xhr, this.args);\n\t\t\t\t\tthis.remove('loading');\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.xhr.send();\n\t\t\treturn this;\n\t\t}\n\n\t\tconsole.error('apijs.dialog.dialogAjax invalid arguments', arguments);\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES CLASSES CSS (public sauf update private, return this sauf has return true)\n\n\tthis.update = function () {\n\n\t\t// il n'est pas question de mettre à jour les attributs class sans l'une des 3 classes de base\n\t\tif (this.has('start', 'ready', 'end')) {\n\t\t\tif (this.t1)\n\t\t\t\tthis.t1.setAttribute('class', this.klass.join(' '));\n\t\t\tif (this.t2)\n\t\t\t\tthis.t2.setAttribute('class', this.klass.join(' '));\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.add = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.add argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) < 0)\n\t\t\t\tthis.klass.push(css);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.remove = function () {\n\n\t\tArray.prototype.forEach.call(arguments, function (css) {\n\t\t\tif (typeof css != 'string')\n\t\t\t\tconsole.error('apijs.dialog.remove argument is not a string', css);\n\t\t\tif (this.klass.indexOf(css) > -1)\n\t\t\t\tthis.klass.splice(this.klass.indexOf(css), 1);\n\t\t}, this); // pour que ci-dessus this = this\n\n\t\treturn this.update();\n\t};\n\n\tthis.toggle = function (search, replace) {\n\n\t\tif ((typeof search != 'string') || (typeof replace != 'string'))\n\t\t\tconsole.error('apijs.dialog.toggle argument is not a string', search, replace);\n\n\t\tif (this.has(search))\n\t\t\tthis.remove(search);\n\t\tif (!this.has(replace))\n\t\t\tthis.add(replace);\n\n\t\treturn this.update();\n\t};\n\n\tthis.has = function () {\n\t\treturn this.klass.has(apijs.toArray(arguments)); // true if one found\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private sauf actionClose)\n\n\tthis.actionClose = function (ev) {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function')) {\n\t\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href))\n\t\t\t\thistory.pushState({}, '', self.location.href.slice(0, self.location.href.indexOf('#')));\n\t\t}\n\n\t\tif (typeof ev == 'object') {\n\t\t\tif ((ev.target.getAttribute('id') === 'apijsDialog') && !apijs.dialog.has('photo', 'video', 'progress', 'waiting', 'lock'))\n\t\t\t\tapijs.dialog.clear(true);\n\t\t}\n\t\telse if (this.t1) {\n\t\t\tthis.clear(true);\n\t\t}\n\t};\n\n\tthis.onCloseBrowser = function (ev) {\n\n\t\tif (apijs.dialog.has('progress', 'waiting', 'lock')) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t\tev.m = apijs.i18n.translate(124);\n\t\t\tev.returnValue = ev.m; // Gecko, Trident, Chrome 34+\n\t\t\treturn ev.m; // Gecko, WebKit, Chrome\n\t\t}\n\t};\n\n\tthis.onResizeBrowser = function () {\n\n\t\tvar width = document.querySelector('body').clientWidth;\n\n\t\tapijs.dialog[(width <= (apijs.dialog.has('photo', 'video') ? 900 : 460)) ? 'add' : 'remove']('mobile');\n\t\tapijs.dialog[(width <= 300) ? 'add' : 'remove']('tiny');\n\t};\n\n\tthis.onScrollBrowser = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = ev.target, brk = false;\n\n\t\t// dialogues du diaporama (suivant/précédent)\n\t\t// @see https://github.com/hammerjs/hammer.js\n\t\t// @see https://github.com/john-doherty/swiped-events\n\t\tif (\n\t\t\tthat.has('slideshow') && !that.has('playing') &&\n\t\t\t!['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll', 'mousewheel', 'swipeleft', 'swiperight', 'swipeup', 'swipedown', 'swiped-left', 'swiped-right', 'swiped-up', 'swiped-down'].has(ev.type)\n\t\t) {\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (that.scroll + 1))) {\n\t\t\t\tthat.scroll = elem;\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tapijs.slideshow[(['swipeleft', 'swipeup', 'swiped-left', 'swiped-up'].has(ev.type) || brk) ? 'actionNext' : 'actionPrev']();\n\t\t\t}\n\t\t}\n\t\t// autorise éventuellement le défilement\n\t\t// recherche l'éventuel élément scrollable\n\t\telse {\n\t\t\tif (elem.nodeName === 'OPTION') {\n\t\t\t\telem = elem.parentNode;\n\t\t\t}\n\t\t\telse if (!['TEXTAREA', 'SELECT'].has(elem.nodeName)) {\n\t\t\t\twhile ((brk !== true) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t\tif (elem.classList.contains('scrollable'))\n\t\t\t\t\t\tbrk = true;\n\t\t\t\t\telse\n\t\t\t\t\t\telem = elem.parentNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// elem = select | textarea | scrollable\n\t\t\tif ((elem.scrollHeight > elem.offsetHeight) && (elem.nodeName !== 'HTML')) {\n\t\t\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\t\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\t\t\t\tif ((brk && (elem.scrollTop < (elem.scrollHeight - elem.offsetHeight - 1))) || (!brk && (elem.scrollTop > 0)))\n\t\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\n\t\t// empèche le défilement\n\t\tev.preventDefault();\n\t\tev.stopPropagation();\n\t};\n\n\tthis.onScrollIframe = function (ev) {\n\n\t\tvar elem = ev.target, brk;\n\t\twhile (elem.parentNode)\n\t\t\telem = elem.parentNode;\n\n\t\t// ev.detail > 0 si vers le bas avec Firefox\n\t\t// ev.wheelDelta < 0 si vers le bas avec Chromium/Opera/Edge...\n\t\tbrk = (ev.detail > 0) || (ev.wheelDelta < 0); // true si vers le bas\n\n\t\t// empèche le défilement (elem = iframe document)\n\t\tif (\n\t\t\t(brk && ((elem.defaultView.innerHeight + elem.defaultView.scrollY) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.scrollY <= 0))\n\t\t) {\n\t\t\tev.preventDefault();\n\t\t\tev.stopPropagation();\n\t\t}\n\t};\n\n\tthis.onKey = function (ev) {\n\n\t\tvar that = apijs.dialog, elem = that.media, time;\n\n\t\t// dialogues d'attente et de progresssion ou tout autre dialogue verrouillé\n\t\t// ctrl + q | ctrl + w | ctrl + r | ctrl + f4 | ctrl + f5 // alt + f4 // échap | f5\n\t\tif (that.has('progress', 'waiting', 'lock')) {\n\n\t\t\tif ((ev.ctrlKey && [81, 87, 82, 115, 116].has(ev.keyCode)) || (ev.altKey && (ev.keyCode === 115)) || [27, 116].has(ev.keyCode))\n\t\t\t\tev.preventDefault();\n\t\t}\n\t\t// dialogues photo et vidéo\n\t\t// f11 (ne fonctionne plus sur Opera 74 Windows)\n\t\telse if (that.has('photo', 'video') && (ev.keyCode === 122)) {\n\t\t\tev.preventDefault();\n\t\t\tapijs.requestFullscreen(that.t1);\n\t\t}\n\t\t// dialogues photo et vidéo du diaporama\n\t\t// échap // fin // début // gauche // droite\n\t\telse if (that.has('slideshow')) {\n\n\t\t\tif (ev.keyCode === 27) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tthat.actionClose();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 35) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionLast();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 36) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionFirst();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 37) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionPrev();\n\t\t\t}\n\t\t\telse if (ev.keyCode === 39) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tapijs.slideshow.actionNext();\n\t\t\t}\n\t\t}\n\t\t// pour tous les autres\n\t\t// échap\n\t\telse if (ev.keyCode === 27) {\n\t\t\tev.preventDefault();\n\t\t\tthat.actionClose();\n\t\t}\n\n\t\t// dialogue vidéo\n\t\t// espace | p // haut | page haut // bas | page bas // + // - // m\n\t\tif (that.has('video') && !that.has('videoiframe')) {\n\n\t\t\t// espace | p\n\t\t\tif ([32, 80].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.ended || elem.paused)\n\t\t\t\t\t\telem.play();\n\t\t\t\t\telse\n\t\t\t\t\t\telem.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t\t// haut | page haut\n\t\t\telse if ([38, 33].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\ttime = (ev.keyCode === 38) ? 10 : 60;\n\t\t\t\tif (([1, 2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\tif (elem.currentTime > time)\n\t\t\t\t\t\telem.currentTime -= time;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.currentTime = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ([40, 34].has(ev.keyCode)) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif (([1, 2].has(elem.networkState)) && (elem.duration !== Infinity) && !isNaN(elem.duration)) {\n\t\t\t\t\ttime = (ev.keyCode === 40) ? 10 : 60;\n\t\t\t\t\tif (elem.currentTime < (elem.duration - time))\n\t\t\t\t\t\telem.currentTime += time;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// +\n\t\t\telse if (ev.keyCode === 107) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume < 0.8)\n\t\t\t\t\t\telem.volume += 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// -\n\t\t\telse if (ev.keyCode === 109) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\tif (elem.muted)\n\t\t\t\t\t\telem.muted = false;\n\t\t\t\t\tif (elem.volume > 0.21)\n\t\t\t\t\t\telem.volume -= 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\telem.volume = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// m\n\t\t\telse if (ev.keyCode === 77) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tif ([1, 2].has(elem.networkState)) {\n\t\t\t\t\telem.muted = !elem.muted; // inverse\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// défilement de la page pour tous (renvoi sur actionScrollBrowser)\n\t\t// espace | page haut | page bas | fin | début | haut | bas\n\t\tif ([32, 33, 34, 35, 36, 38, 40].has(ev.keyCode)) {\n\n\t\t\t// empèche le défilement\n\t\t\tif (!ev.target || (!['INPUT','TEXTAREA','OPTION','SELECT'].has(ev.target.nodeName) && !ev.target.classList.contains('scrollable'))) {\n\t\t\t\tev.preventDefault();\n\t\t\t\tev.stopPropagation();\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onFullscreen = function (ev) {\n\n\t\tvar res = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;\n\t\tif (ev) apijs.log('dialog:onFullscreen:' + (res ? 'in' : 'out'));\n\n\t\tapijs.dialog[res ? 'add' : 'remove']('fullscreen');\n\t};\n\n\tthis.onIframeLoad = function (elem) { // todo\n\n\t\telem.removeAttribute('class');\n\t\tapijs.dialog.remove('loading');\n\n\t\telem.contentWindow.document.addEventListener('keydown', window.parent.apijs.dialog.onKey);\n\t\telem.contentWindow.addEventListener('DOMMouseScroll', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('mousewheel', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t\telem.contentWindow.addEventListener('touchmove', window.parent.apijs.dialog.onScrollIframe, { passive: false });\n\t};\n\n\tthis.onMediaLoad = function (ev) { // todo\n\n\t\tvar that = apijs.dialog, media = that.media, src, elem, elems;\n\t\tif (ev && ev.target) {\n\t\t\tsrc = ev.target.currentSrc || ev.target.src;\n\t\t\tapijs.log('dialog:onMediaLoad:' + ev.type + ' ' + (src ? src.slice(src.lastIndexOf('/') + 1) : ''));\n\t\t}\n\n\t\tif (media && ['load', 'durationchange'].has(ev.type)) {\n\t\t\tthat.remove('loading', 'error');\n\t\t\tmedia.style.visibility = 'visible';\n\t\t\tif (!media.hasAttribute('src') && (media.nodeName === 'IMG'))\n\t\t\t\tmedia.setAttribute('src', media.imageLoader.src);\n\t\t}\n\t\telse if (media && (ev.type === 'error')) {\n\t\t\tthat.toggle('loading', 'error');\n\t\t\tmedia.removeAttribute('style');\n\t\t\t// player vidéo (désactive l'option et active la suivante)\n\t\t\telem = apijs.html('.tracks.video select');\n\t\t\tif (elem && ev && ev.target) {\n\t\t\t\telems = elem.querySelectorAll('option');\n\t\t\t\tif ((elems.length > 0) && (elem.value.length > 0)) {\n\t\t\t\t\telems[elem.value].setAttribute('disabled', 'disabled');\n\t\t\t\t\telem.selectedIndex += 1;\n\t\t\t\t\t// charge la vidéo suivante (si erreur au clic sur le select)\n\t\t\t\t\tif ((ev.target.nodeName === 'VIDEO') && (elem.value !== ''))\n\t\t\t\t\t\tmedia.videoPlayer.actionVideo(elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tthis.onSlideshowSwipe = function (ev) {\n\n\t\tapijs.dialog.swipe = true;\n\t\tself.setTimeout(function () { apijs.dialog.swipe = false; }, 150);\n\n\t\tif (['swiperight', 'swipedown', 'swiped-right', 'swiped-down'].has(ev.type))\n\t\t\tapijs.slideshow.actionPrev();\n\t\telse // swipeleft swipeup swiped-left swiped-up\n\t\t\tapijs.slideshow.actionNext();\n\t};\n\n\tthis.actionConfirm = function () { // todo\n\n\t\t// vérifie le dialogue d'options\n\t\t// arrêt du traitement si c'est pas bon\n\t\tif (this.has('options')) {\n\t\t\tif (this.callback(false, this.args) !== true)\n\t\t\t\treturn false;\n\t\t}\n\n\t\t// verrouille le dialogue et affiche le loader\n\t\tthis.add('lock', 'loading');\n\t\tthis.htmlSvgLoader(false);\n\n\t\t// masque les boutons et le texte du dialogue\n\t\tapijs.html('div.btns').style.visibility = 'hidden';\n\t\tapijs.html('div.bbcode').style.visibility = 'hidden';\n\n\t\t// appelle la fonction de rappel\n\t\t// ne déverrouille pas le dialogue\n\t\tself.setTimeout(function () {\n\t\t\tif ((this.t2) && (this.t2.nodeName === 'FORM'))\n\t\t\t\tthis.callback(this.t2.getAttribute('action'), this.args);\n\t\t\telse if (this.t2)\n\t\t\t\tthis.callback(this.args);\n\t\t}.bind(this), 12); // pour que ci-dessus this = this\n\n\t\treturn false; // très important\n\t};\n\n\n\t// GESTION DES CONTENEURS (private return this|boolean)\n\n\tthis.init = function (type, icon, isLocked) { // todo\n\n\t\tisLocked = (isLocked === true);\n\t\tif (typeof icon == 'string') {\n\t\t\ticon = icon.replace(this.ft, '').trim();\n\t\t\ticon = (icon.length > 0) ? (isLocked ? icon + ' lock' : icon) : (isLocked ? 'lock' : null);\n\t\t}\n\t\telse if (isLocked) {\n\t\t\ticon = 'lock';\n\t\t}\n\n\t\t// préparation\n\t\tif (this.t0)\n\t\t\tthis.clear(false);\n\n\t\t// css\n\t\tthis.klass.push('start');\n\t\tthis.klass.push(type);\n\n\t\tif (self.matchMedia('prefers-reduced-motion:reduce').matches)\n\t\t\tthis.klass.push('reduce');\n\n\t\tif (typeof icon == 'string')\n\t\t\tthis.klass = this.klass.concat(icon.split(' '));\n\n\t\t// création du fragment\n\t\tthis.t0 = document.createDocumentFragment();\n\n\t\t// surveillance des touches et du navigateur\n\t\tdocument.addEventListener('keydown', this.onKey);\n\t\tself.addEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.addEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.addEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.setAttribute('tabindex', '-1'); });\n\n\t\treturn this;\n\t};\n\n\tthis.show = function (focus) { // todo\n\n\t\t// design\n\t\tthis.onResizeBrowser();\n\t\tthis.onFullscreen();\n\n\t\tif ((this.height > 0) && !this.has('photo', 'video'))\n\t\t\tthis.t2.style.minHeight = this.height + 'px';\n\n\t\t// affichage du dialogue sans/sans/avec transitions CSS\n\t\tvar old = apijs.html('#Dialog');\n\t\tif (old) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tthis.t1 = old;\n\t\t\t// this.t1.appendChild(this.t0.firstChild.firstChild);\n\t\t\t// @see https://stackoverflow.com/a/24775765/2980105\n\t\t\tapijs.toArray(this.t0.firstChild.childNodes).forEach(function (node) {\n\t\t\t\tthis.t1.appendChild(node);\n\t\t\t}, this); // pour que ci-dessus this = this\n\t\t\tthis.t1.setAttribute('class', this.t2.getAttribute('class'));\n\t\t}\n\t\telse if (this.has('notransition')) {\n\t\t\tthis.toggle('start', 'ready');\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t}\n\t\telse {\n\t\t\tdocument.querySelector('body').appendChild(this.t0);\n\t\t\tself.setTimeout(function () { apijs.dialog.toggle('start', 'ready'); }, 12);\n\t\t}\n\n\t\t// fermeture des popups au clic\n\t\tif (apijs.config.dialog.closeOnClick && !this.has('progress', 'waiting', 'lock'))\n\t\t\tdocument.addEventListener('click', this.actionClose);\n\n\t\t// passage en plein écran\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.addEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.addEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.addEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\t// copier coller\n\t\telse if (this.has('upload')) {\n\t\t\twindow.addEventListener('paste', apijs.upload.actionDrag);\n\t\t}\n\n\t\t// auto-focus\n\t\tif (focus === true)\n\t\t\tself.setTimeout(function () { apijs.html('input:not([readonly]),textarea:not([readonly]),select:not([disabled])').focus(); }, 12);\n\t\telse if (typeof focus == 'string')\n\t\t\tapijs.html(focus).focus();\n\n\t\treturn true;\n\t};\n\n\tthis.clear = function (isAll) { // todo\n\n\t\tif (isAll && this.xhr) {\n\t\t\tthis.callback = null; // très important\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif (this.hammer) { // (depuis htmlBtnNavigation)\n\t\t\tthis.hammer.off('swiperight swipedown swipeleft swipeup', apijs.dialog.onSlideshowSwipe).destroy();\n\t\t\tdelete this.hammer;\n\t\t}\n\n\t\t// surveillance des touches et du navigateur (depuis initDialog)\n\t\tdocument.removeEventListener('keydown', this.onKey);\n\t\tself.removeEventListener('beforeunload', this.onCloseBrowser);\n\t\tself.removeEventListener('DOMMouseScroll', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('mousewheel', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('touchmove', this.onScrollBrowser, { passive: false });\n\t\tself.removeEventListener('resize', this.onResizeBrowser);\n\n\t\t// restriction de la navigation (depuis initDialog)\n\t\tif (apijs.config.dialog.restrictNavigation)\n\t\t\tdocument.querySelectorAll(this.ti).forEach(function (elem) { elem.removeAttribute('tabindex'); });\n\n\t\t// fermeture des popups au clic (depuis showDialog)\n\t\tif (apijs.config.dialog.closeOnClick)\n\t\t\tdocument.removeEventListener('click', this.actionClose);\n\n\t\t// spécial\n\t\tif (this.has('photo', 'video')) {\n\n\t\t\t// pour ne pas déclencher les fonctions\n\t\t\t// supprime tous les ontruc et les src\n\t\t\tif (this.has('video') && !this.has('videoiframe')) {\n\t\t\t\tthis.t2.querySelectorAll('video, source, track').forEach(function (elem) {\n\t\t\t\t\tfor (var name in elem) {\n\t\t\t\t\t\tif (name.indexOf('on') === 0)\n\t\t\t\t\t\t\telem[name] = null;\n\t\t\t\t\t}\n\t\t\t\t\telem.removeAttribute('src');\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.media.videoPlayer = null;\n\t\t\tthis.media.imageLoader = null;\n\n\t\t\t// passage en plein écran (depuis showDialog)\n\t\t\tif (document.webkitFullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('webkitfullscreenchange', this.onFullscreen);\n\t\t\telse if (document.fullscreenEnabled)\n\t\t\t\tdocument.removeEventListener('fullscreenchange', this.onFullscreen);\n\t\t\telse if (document.mozFullScreenEnabled)\n\t\t\t\tdocument.removeEventListener('mozfullscreenchange', this.onFullscreen);\n\t\t}\n\t\telse {\n\t\t\t// copier coller\n\t\t\tif (this.has('upload'))\n\t\t\t\twindow.removeEventListener('paste', apijs.upload.actionDrag);\n\n\t\t\t// mémorise la hauteur du dialogue\n\t\t\tthis.height = parseFloat(self.getComputedStyle(this.t2).height);\n\t\t}\n\n\t\t// supprime le dialogue\n\t\tif (isAll) {\n\t\t\tthis.toggle('ready', 'end');\n\t\t\tthis.t1.remove();\n\t\t}\n\t\telse {\n\t\t\twhile (this.t1.firstChild)\n\t\t\t\tthis.t1.firstChild.remove();\n\t\t}\n\n\t\t// réinitialise toutes les variables (sauf ft/ti/ns et swipe)\n\t\tthis.klass = [];\n\t\tif (isAll) {\n\t\t\tthis.height = 0;\n\t\t\tthis.scroll = 0; // time\n\t\t\tthis.callback = null;\n\t\t\tthis.args = null;\n\t\t\tthis.xhr = null;\n\t\t}\n\t\tthis.media = null;\n\t\tthis.t0 = null; // fragment\n\t\tthis.t1 = null; // div id=apijsDialog\n\t\tthis.t2 = null; // div/form id=apijsBox\n\t\tthis.t3 = null; // input file\n\t\tthis.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\n\t\treturn true;\n\t};\n\n\n\t// GÉNÉRATION DES ÉLÉMENTS (private return this)\n\n\tthis.htmlParent = function (action, submit, drag) {\n\n\t\tthis.t1 = document.createElement('div');\n\t\tthis.t1.setAttribute('id', 'apijsDialog');\n\n\t\tif (typeof drag == 'string') {\n\n\t\t\tthis.t1.setAttribute('ondragenter', drag);\n\t\t\tthis.t1.setAttribute('ondragleave', drag);\n\t\t\tthis.t1.setAttribute('ondragover', drag);\n\t\t\tthis.t1.setAttribute('ondrop', drag);\n\t\t\tthis.t1.setAttribute('onpaste', drag); // Firefox\n\n\t\t\tthis.a = document.createElement('p');\n\t\t\tthis.a.setAttribute('class', 'drag');\n\t\t\tthis.a.appendChild(apijs.i18n.translateNode(127));\n\t\t\tthis.t1.appendChild(this.a);\n\t\t}\n\t\telse {\n\t\t\tthis.t1.setAttribute('ondragstart', 'return false;');\n\t\t}\n\n\t\tif (typeof action == 'string') {\n\t\t\tthis.t2 = document.createElement('form');\n\t\t\tthis.t2.setAttribute('action', action);\n\t\t\tthis.t2.setAttribute('method', 'post');\n\t\t\tthis.t2.setAttribute('enctype', 'multipart/form-data');\n\t\t\tthis.t2.setAttribute('onsubmit', 'return ' + submit);\n\t\t}\n\t\telse {\n\t\t\tthis.t2 = document.createElement('div');\n\t\t}\n\n\t\tthis.t2.setAttribute('id', 'apijsBox');\n\t\tthis.t1.appendChild(this.t2);\n\t\tthis.t0.appendChild(this.t1);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlContent = function (title, text) {\n\n\t\tif (title.length > 0) {\n\t\t\tthis.a = document.createElement('h1');\n\t\t\tthis.a.innerHTML = title.replace(/</g, '<').replace(/>/g, '>').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\tif (text.length > 0) {\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'bbcode');\n\t\t\tif (text[0] !== '[') text = '[p]' + text + '[/p]';\n\t\t\tthis.a.innerHTML = text.replace(/</g, '<').replace(/>/g, '>').replace(/\\[/g, '<').replace(/]/g, '>');\n\t\t\tthis.a.querySelectorAll('a.popup').forEach(function (elem) { elem.addEventListener('click', apijs.openTab); });\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnOk = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(102));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnConfirm = function (type, click) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', type);\n\t\t\tthis.b.setAttribute('class', 'confirm');\n\t\t\tif (type !== 'submit') this.b.setAttribute('onclick', click);\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(104));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'cancel');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(103));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnNavigation = function () {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'navigation noplaying');\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'prev');\n\t\t\tthis.b.setAttribute('id', 'apijsPrev');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionPrev();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(106));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('disabled', 'disabled');\n\t\t\tthis.b.setAttribute('class', 'next');\n\t\t\tthis.b.setAttribute('id', 'apijsNext');\n\t\t\tthis.b.setAttribute('onclick', 'apijs.slideshow.actionNext();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t//this.c.appendChild(apijs.i18n.translateNode(107));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\tif (typeof Hammer == 'function') {\n\t\t\tthis.hammer = new Hammer(this.t2);\n\t\t\tthis.hammer.get('swipe').set({ direction: Hammer.DIRECTION_ALL });\n\t\t\tthis.hammer.on('swiperight swipedown swipeleft swipeup', apijs.dialog.onSlideshowSwipe);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlBtnClose = function (close) {\n\n\t\tif (close !== false) {\n\n\t\t\tthis.a = document.createElement('div');\n\t\t\tthis.a.setAttribute('class', 'close nofullplaying');\n\n\t\t\t\tthis.b = document.createElement('button');\n\t\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\t\tthis.b.setAttribute('class', 'close');\n\t\t\t\tthis.b.setAttribute('onclick', 'apijs.dialog.actionClose();');\n\n\t\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(105));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\n\t\t\tthis.a.appendChild(this.b);\n\t\t\tthis.t2.appendChild(this.a);\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlUpload = function (input, isMultiple, change) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.t3 = document.createElement('input');\n\t\t\tthis.t3.setAttribute('type', 'file');\n\t\t\tthis.t3.setAttribute('name', isMultiple ? input + '[]' : input);\n\t\t\tthis.t3.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.t3.setAttribute('multiple', 'multiple');\n\t\t\tthis.t3.setAttribute('onchange', change);\n\n\t\tthis.a.appendChild(this.t3);\n\n\t\t\tthis.b = document.createElement('button');\n\t\t\tthis.b.setAttribute('type', 'button');\n\t\t\tthis.b.setAttribute('class', 'browse');\n\t\t\tthis.b.setAttribute('onclick', 'this.previousSibling.click();');\n\n\t\t\t\tthis.c = document.createElement('span');\n\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(isMultiple ? 109 : 108));\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('div');\n\t\t\tthis.b.setAttribute('class', 'filenames scrollable');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgProgress = function () {\n\n\t\tthis.a = document.createElement('span');\n\t\tthis.a.setAttribute('class', 'info');\n\t\tthis.t2.appendChild(this.a);\n\n\t\tthis.a = document.createElement('svg');\n\t\tthis.a.setAttribute('id', 'apijsProgress');\n\n\t\t\tthis.b = document.createElement('rect');\n\t\t\tthis.b.setAttribute('class', 'auto');\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlSvgLoader = function (isDelayed) {\n\n\t\tthis.a = document.createElementNS(this.ns, 'svg');\n\t\tthis.a.setAttribute('class', 'loader');\n\n\t\t\tthis.b = document.createElementNS(this.ns, 'path');\n\t\t\tif (isDelayed !== false) this.b.setAttribute('style', 'opacity:0;');\n\t\t\tthis.b.setAttribute('d', 'M75.4 126.63a11.43 11.43 0 0 1-2.1-22.65 40.9 40.9 0 0 0 30.5-30.6 11.4 11.4 0 1 1 22.27 4.87h.02a63.77 63.77 0 0 1-47.8 48.05v-.02a11.38 11.38 0 0 1-2.93.37z');\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animateTransform');\n\t\t\t\tthis.c.setAttribute('attributeName', 'transform');\n\t\t\t\tthis.c.setAttribute('type', 'rotate');\n\t\t\t\tthis.c.setAttribute('from', '0 64 64');\n\t\t\t\tthis.c.setAttribute('to', '360 64 64');\n\t\t\t\tthis.c.setAttribute('dur', '5s');\n\t\t\t\tthis.c.setAttribute('repeatCount', 'indefinite');\n\n\t\t\tthis.b.appendChild(this.c);\n\n\t\t\t\tthis.c = document.createElementNS(this.ns, 'animate');\n\t\t\t\tthis.c.setAttribute('attributeName', 'opacity');\n\t\t\t\tthis.c.setAttribute('to', '1');\n\t\t\t\tthis.c.setAttribute('dur', '0.01s');\n\t\t\t\tthis.c.setAttribute('begin', '1s');\n\t\t\t\tthis.c.setAttribute('fill', 'freeze');\n\n\t\t\tif (isDelayed !== false) this.b.appendChild(this.c);\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlMedia = function (url, name, date, legend) {\n\n\t\tthis.a = document.createElement('dl');\n\t\tthis.a.setAttribute('class', 'media');\n\n\t\t\tthis.b = document.createElement('dt');\n\n\t\t\tif (this.has('photo')) {\n\t\t\t\tthis.media = document.createElement('img');\n\t\t\t\tthis.media.setAttribute('alt', legend.replace('\"', ''));\n\t\t\t}\n\t\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\t\tthis.media = document.createElement('iframe');\n\t\t\t\tthis.media.setAttribute('type', 'text/html');\n\t\t\t\tthis.media.setAttribute('scrolling', 'no');\n\t\t\t\tthis.media.setAttribute('src', url);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.media = document.createElement('video');\n\t\t\t\tthis.media.setAttribute('controls', 'controls');\n\t\t\t\tthis.media.setAttribute('preload', 'metadata');\n\t\t\t}\n\n\t\t\tthis.media.setAttribute('id', 'apijsMedia');\n\t\t\tthis.b.appendChild(this.media);\n\n\t\tthis.a.appendChild(this.b);\n\n\t\t\tthis.b = document.createElement('dd');\n\t\t\tthis.b.setAttribute('class', 'nofullplaying');\n\n\t\t\tif ((name !== 'false') || (date !== 'false')) {\n\n\t\t\t\tvar fileid = url.slice(url.lastIndexOf('/') + 1);\n\t\t\t\tthis.c = document.createElement('span');\n\n\t\t\t\t// name + date\n\t\t\t\tif ((name !== 'false') && (name !== 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' (' + date + ') '));\n\t\t\t\t// name\n\t\t\t\telse if ((name !== 'false') && (name !== 'auto'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(name + ' '));\n\t\t\t\t// auto name + date\n\t\t\t\telse if ((name === 'auto') && (date !== 'false'))\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' (' + date + ') '));\n\t\t\t\t// auto name\n\t\t\t\telse if (name === 'auto')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode(fileid + ' '));\n\t\t\t\t// date\n\t\t\t\telse if (date !== 'false')\n\t\t\t\t\tthis.c.appendChild(document.createTextNode('(' + date + ') '));\n\n\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t}\n\n\t\t\tthis.b.appendChild(document.createTextNode(legend));\n\n\t\tthis.a.appendChild(this.b);\n\t\tthis.t2.appendChild(this.a);\n\n\t\t// au choix : photo / vidéo avec iframe / vidéo avec lecteur / vidéo simple\n\t\t// lecteur créé v5.2 / supprimé v5.3 / refait v6.0 / extrait v6.6\n\t\tif (this.has('photo')) {\n\t\t\tthis.media.imageLoader = new Image();\n\t\t\tthis.media.imageLoader.src = url;\n\t\t\tthis.media.imageLoader.onload = this.onMediaLoad;\n\t\t\tthis.media.imageLoader.onerror = this.onMediaLoad;\n\t\t}\n\t\telse if (url.indexOf('iframe') > 0) {\n\t\t\tthis.media.onload = function (ev) {\n\t\t\t\tthis.onIframeLoad(this.media);\n\t\t\t\tthis.onMediaLoad(ev);\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\t\t\tthis.add('videoiframe');\n\t\t}\n\t\telse if (apijs.startPlayer(this.media, url)) {\n\t\t\tthis.add('apijsvideoplayer');\n\t\t}\n\t\telse {\n\t\t\tthis.c = document.createElement('source');\n\t\t\tthis.c.setAttribute('src', url);\n\t\t\tthis.c.onerror = this.onMediaLoad;\n\t\t\tthis.media.appendChild(this.c);\n\t\t\tthis.media.ondurationchange = this.onMediaLoad;\n\t\t\tthis.media.onerror = this.onMediaLoad;\n\t\t\tthis.add('videosource');\n\t\t}\n\n\t\treturn this;\n\t};\n\n\tthis.htmlHelp = function (isSlideshow, isVideo) {\n\n\t\t// pas d'aide en mobile car pas de clavier\n\t\tif (('ontouchstart' in window) && navigator.userAgent.match(/mobi/i))\n\t\t\treturn this;\n\n\t\tvar items, item, keys = [\n\t\t\tisSlideshow ? ['start', 149, 141] : [], // début/fin\n\t\t\tisSlideshow ? ['left', 'right', 142] : [],\n\t\t\tisVideo ? ['topk', 'bottom', 144] : [],\n\t\t\tisVideo ? ['minus', 'plus', 145] : [],\n\t\t\tisVideo ? ['M', 146] : [],\n\t\t\tisVideo ? ['P', 143] : [],\n\t\t\t['F11', 147],\n\t\t\t[150, 148] // échap\n\t\t];\n\n\t\tthis.a = document.createElement('ul');\n\t\tthis.a.setAttribute('class', 'kbd nofullscreen');\n\n\t\twhile (items = keys.shift()) {\n\n\t\t\tif (items.length > 0) {\n\n\t\t\t\tthis.b = document.createElement('li');\n\n\t\t\t\twhile (item = items.shift()) {\n\t\t\t\t\tif (items.length > 0) {\n\t\t\t\t\t\tthis.c = document.createElement('kbd');\n\t\t\t\t\t\tif (['M', 'P', 'F11'].has(item))\n\t\t\t\t\t\t\tthis.c.appendChild(document.createTextNode(item));\n\t\t\t\t\t\telse if (typeof item == 'string')\n\t\t\t\t\t\t\tthis.c.setAttribute('class', item);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthis.c.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t\tthis.b.appendChild(this.c);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.b.appendChild(apijs.i18n.translateNode(item));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tthis.a.appendChild(this.b);\n\t\t\t}\n\t\t}\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n\n\tthis.htmlIframe = function (url) {\n\n\t\tthis.a = document.createElement('iframe');\n\t\tthis.a.setAttribute('src', url);\n\t\tthis.a.setAttribute('class', 'loading');\n\t\tthis.a.setAttribute('onload', 'apijs.dialog.onIframeLoad(this);');\n\n\t\tthis.t2.appendChild(this.a);\n\n\t\treturn this;\n\t};\n};","/**\n * Created J/13/05/2010\n * Updated S/04/11/2023\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.slideshow = function () {\n\n\t\"use strict\";\n\tthis.current = null;\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return void|boolean)\n\n\tthis.init = function () {\n\n\t\tvar i, j, elem, ids = apijs.config.slideshow.ids, hoverload = false;\n\n\t\tfor (i = 0; elem = apijs.html(ids + '.' + i, true); i++) {\n\n\t\t\thoverload = elem.classList.contains('hoverload');\n\n\t\t\tfor (j = 0; elem = apijs.html(ids + '.' + i + '.' + j, true); j++) {\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t\t\tif (hoverload)\n\t\t\t\t\telem.addEventListener('mouseover', this.show);\n\t\t\t}\n\n\t\t\tif (elem = apijs.html(ids + '.' + i + '.99999', true))\n\t\t\t\telem.addEventListener('click', this.show);\n\t\t}\n\n\t\tthis.onPopState();\n\t};\n\n\tthis.onPopState = function () {\n\n\t\t// \\\\ au lieu de \\ sinon Bad or unnecessary escaping\n\t\tif (new RegExp('#(' + apijs.config.slideshow.ids + '[\\-\\\\.]\\\\d+[\\-\\\\.]\\\\d+)').test(self.location.href)) {\n\t\t\tvar id = RegExp.$1.replace(/-/g, '.');\n\t\t\tif (apijs.html(id, true) && !apijs.dialog.has('slideshow')) // Chrome 31 et Opera 19 passent 2 fois sans le !has\n\t\t\t\tapijs.slideshow.show(id, false);\n\t\t}\n\t\telse if (apijs.slideshow.current) {\n\t\t\tapijs.dialog.actionClose();\n\t\t}\n\t};\n\n\tthis.show = function (ev, push) { // todo\n\n\t\tvar source, show = false, media = {}, src, srcset, total, hash;\n\n\t\t// recherche de la source (élément a)\n\t\t// recherche des informations du média (1/4, id)\n\t\t// la source est soit une miniature (ev=click/mouseover/stringId) soit l'image principale (ev=click)\n\t\tif (typeof ev == 'string') {\n\t\t\tshow = true;\n\t\t\tsource = apijs.html(ev, true);\n\t\t\tmedia.id = ev;\n\t\t}\n\t\telse {\n\t\t\tev.preventDefault();\n\t\t\tsource = ev.target;\n\t\t\twhile (source.nodeName !== 'A')\n\t\t\t\tsource = source.parentNode;\n\n\t\t\t// stop sur miniature déjà à jour en mode gallery\n\t\t\tif ((ev.type === 'mouseover') && source.classList.contains('current'))\n\t\t\t\treturn false;\n\n\t\t\tmedia.id = source.getAttribute('id');\n\t\t}\n\n\t\t// recherche des informations du média (2/4, prefix|number|gallery)\n\t\tmedia.prefix = apijs.config.slideshow.ids + '.' + media.id.split('.')[1];\n\t\tmedia.number = parseInt(media.id.split('.')[2], 10);\n\t\tmedia.gallery = apijs.html(media.prefix + '.99999', true);\n\n\t\t// SI SOURCE N'EST PAS L'IMAGE PRINCIPALE DU MODE GALLERY\n\t\t// marque la source avec la class current\n\t\t// prend soin de supprimer les anciennes class current\n\t\t// v5.1 soit sur le lien (avant sur l'image elle même), soit sur le dl\n\t\tif (media.number !== 99999) {\n\n\t\t\tvar links = apijs.html(media.prefix, true).querySelectorAll('a[id][type]'),\n\t\t\t conts = apijs.html(media.prefix, true).querySelectorAll('dl');\n\n\t\t\tif (media.gallery || (links.length !== conts.length)) {\n\t\t\t\tlinks.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.setAttribute('class', 'current');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconts.forEach(function (elem) { elem.classList.remove('current'); });\n\t\t\t\tsource.parentNode.parentNode.setAttribute('class', 'current');\n\t\t\t}\n\t\t}\n\n\t\t// UNIQUEMENT EN MODE GALLERY\n\t\t// recherche des informations du média (3/4, [number]|config)\n\t\t// réaffecte la source sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// réaffecte le numéro du média sur la miniature et non sur l'image principale SI SOURCE = IMAGE PRINCIPALE\n\t\t// supprime l'adresse de l'image principale de la configuration du média (media.config = url|name|date|legend)\n\t\t// met à jour l'image principale SAUF SI SOURCE = IMAGE PRINCIPALE (puisque tout est déjà correct)\n\t\tif (media.gallery) {\n\n\t\t\tif (media.number === 99999) {\n\t\t\t\tshow = true;\n\t\t\t\tsource = (media.gallery.hasAttribute('class')) ? media.gallery.getAttribute('class') : media.prefix + '.0';\n\t\t\t\tsource = apijs.html(source, true);\n\t\t\t\tmedia.number = parseInt(source.getAttribute('id').split('.')[2], 10);\n\t\t\t\tmedia.id = media.id.replace('99999', media.number);\n\t\t\t}\n\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\n\t\t\tsrc = media.config.shift();\n\t\t\tif (src.indexOf(';') > 0) {\n\t\t\t\tsrc = src.split(';');\n\t\t\t\tsrcset = src[1].trim();\n\t\t\t\tsrc = src[0].trim();\n\t\t\t}\n\n\t\t\tmedia.gallery.setAttribute('href', source.getAttribute('href'));\n\t\t\tmedia.gallery.querySelector('img').setAttribute('src', src);\n\t\t\tmedia.gallery.querySelector('img').setAttribute('srcset', srcset ? srcset : '');\n\t\t\tmedia.gallery.querySelector('img').setAttribute('alt', source.querySelector('img').getAttribute('alt'));\n\t\t\tmedia.gallery.setAttribute('class', media.id);\n\t\t}\n\t\t// UNIQUEMENT EN MODE ALBUM\n\t\t// recherche des informations du média (3/4, config)\n\t\telse {\n\t\t\tshow = true;\n\t\t\tmedia.config = source.querySelector('input').getAttribute('value').split('|');\n\t\t}\n\n\t\t// recherche des informations du média (4/4, url|type|styles)\n\t\t// défini le type de dialogue à partir du mimetype du lien de la source si cela est possible\n\t\tmedia.url = source.getAttribute('href');\n\t\tmedia.type = source.getAttribute('type').substring(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo').replace('audio', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true);\n\t\tmedia.styles = media.styles.hasAttribute('class') ? media.styles.getAttribute('class').replace(/gallery|album/g, '').trim() : '';\n\n\t\t// demande l'affichage du dialogue\n\t\t// lors d'un clic sur l'image principale du mode gallery\n\t\t// ou lors d'un clic sur les miniatures en mode album\n\t\t// ou lors d'un appel direct\n\t\tif (show) {\n\n\t\t\tapijs.dialog[media.type](media.url, media.config[0], media.config[1], media.config[2], media.styles);\n\n\t\t\ttotal = apijs.html(media.prefix, true).querySelectorAll('a[id][type]').length - (media.gallery ? 2 : 1);\n\t\t\tapijs.slideshow.current = {\n\t\t\t\tnumber: media.number,\n\t\t\t\tfirst: media.prefix + '.0',\n\t\t\t\tprev: (media.number > 0) ? media.prefix + '.' + (media.number - 1) : null,\n\t\t\t\tnext: (media.number < total) ? media.prefix + '.' + (media.number + 1) : null,\n\t\t\t\tlast: media.prefix + '.' + total,\n\t\t\t\ttotal: total\n\t\t\t};\n\n\t\t\t// boutons précédent et suivant\n\t\t\tif (apijs.slideshow.current.prev)\n\t\t\t\tapijs.html('#Prev').removeAttribute('disabled');\n\t\t\tif (apijs.slideshow.current.next)\n\t\t\t\tapijs.html('#Next').removeAttribute('disabled');\n\n\t\t\t// gestion de l'historique\n\t\t\t// met à jour l'ancre uniquement si l'utilisateur ne joue pas avec son historique\n\t\t\tif (apijs.config.slideshow.anchor && (typeof history.pushState == 'function') && ((typeof push == 'boolean') ? push : true)) {\n\t\t\t\thash = self.location.href;\n\t\t\t\thash = (hash.indexOf('#') > 0) ? hash.slice(0, hash.indexOf('#')) : hash;\n\t\t\t\thash += '#' + (media.prefix + '.' + ((media.number === 99999) ? 0 : media.number)).replace(/\\./g,'-');\n\t\t\t\thistory.pushState({}, '', hash);\n\t\t\t}\n\t\t}\n\n\t\treturn show;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (public return boolean)\n\n\tthis.actionFirst = function () {\n\n\t\tif (this.current && (this.current.number > 0) && (this.current.number <= this.current.total))\n\t\t\treturn this.show(this.current.first);\n\n\t\treturn false;\n\t};\n\n\tthis.actionPrev = function () {\n\n\t\tif (this.current && this.current.prev && (this.current.number > 0))\n\t\t\treturn this.show(this.current.prev);\n\n\t\treturn false;\n\t};\n\n\tthis.actionNext = function () {\n\n\t\tif (this.current && this.current.next && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.next);\n\n\t\treturn false;\n\t};\n\n\tthis.actionLast = function () {\n\n\t\tif (this.current && (this.current.number >= 0) && (this.current.number < this.current.total))\n\t\t\treturn this.show(this.current.last);\n\n\t\treturn false;\n\t};\n};","/**\n * Created L/13/04/2009\n * Updated D/03/12/2023\n *\n * Copyright 2008-2025 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://github.com/luigifab/apijs\n *\n * This program is free software, you can redistribute it or modify\n * it under the terms of the GNU General Public License (GPL) as published\n * by the free software foundation, either version 2 of the license, or\n * (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but without any warranty, without even the implied warranty of\n * merchantability or fitness for a particular purpose. See the\n * GNU General Public License (GPL) for more details.\n */\n\napijs.core.upload = function () {\n\n\t\"use strict\";\n\tthis.title = null;\n\tthis.action = null;\n\tthis.input = null;\n\tthis.onemax = 0; // taille d'un seul fichier\n\tthis.allmax = 0; // taille de tous les fichiers\n\tthis.exts = null;\n\tthis.callback = null;\n\tthis.args = null;\n\tthis.icon = null;\n\n\tthis.start = 0; // time\n\tthis.end = 0; // time\n\n\n\t// AFFICHAGE DE LA BOÎTE DE DIALOGUE (public return boolean)\n\n\tthis.sendFile = function (title, action, input, onemax, exts, callback, args, icon) {\n\n\t\tvar res = this.sendFiles(title, action, input, onemax, 0, exts, callback, args, icon);\n\t\tif (!res) console.error('apijs.upload.sendFile invalid arguments', arguments);\n\n\t\treturn res;\n\t};\n\n\tthis.sendFiles = function (title, action, input, onemax, allmax, exts, callback, args, icon) {\n\n\t\tif (title !== true) {\n\t\t\tthis.title = title;\n\t\t\tthis.action = action;\n\t\t\tthis.input = input;\n\t\t\tthis.onemax = onemax;\n\t\t\tthis.allmax = allmax;\n\t\t\tthis.exts = (typeof exts == 'string') ? exts.split(',') : ['*'];\n\t\t\tthis.callback = callback;\n\t\t\tthis.args = args;\n\t\t\tthis.icon = icon;\n\t\t}\n\n\t\tif ((typeof this.title == 'string') && (typeof this.action == 'string') && (typeof this.input == 'string') &&\n\t\t (typeof this.onemax == 'number') && (typeof this.allmax == 'number') && (typeof this.callback == 'function')) {\n\n\t\t\tvar text, multiple = this.allmax > 0;\n\n\t\t\tif (this.exts.join() === '*')\n\t\t\t\ttext = apijs.i18n.translate(161);\n\t\t\telse if (this.exts.length === 1)\n\t\t\t\ttext = apijs.i18n.translate(162, this.exts.join());\n\t\t\telse\n\t\t\t\ttext = apijs.i18n.translate(163, this.exts.slice(0, -1).join(', '), this.exts.slice(-1));\n\n\t\t\ttext += '[br]' + apijs.i18n.translate(\n\t\t\t\tmultiple ? 165 : 164, // clef de traduction\n\t\t\t\tapijs.formatNumber(this.onemax), // taille d'un fichier\n\t\t\t\tmultiple ? apijs.formatNumber(this.allmax) : '' // taille de tous les fichiers\n\t\t\t).replace('|', '[br]');\n\n\t\t\treturn apijs.dialog.dialogFormUpload(this.title, text, this.action, this.input, multiple, this.icon);\n\t\t}\n\n\t\tif ((typeof this.allmax != 'number') || (this.allmax > 0))\n\t\t\tconsole.error('apijs.upload.sendFiles invalid arguments', arguments);\n\n\t\treturn false;\n\t};\n\n\n\t// GESTION DES INTERACTIONS (private return void)\n\n\tthis.actionDrag = function (ev) {\n\n\t\tvar elem = apijs.dialog.t3, stop = true;\n\n\t\tif (ev.type === 'dragenter') {\n\t\t\tapijs.dialog.add('drag');\n\t\t}\n\t\telse if (ev.type === 'dragleave') {\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\t// drag and drop\n\t\telse if (ev.dataTransfer && ev.dataTransfer.files && (ev.dataTransfer.files.length > 0)) {\n\n\t\t\ttry {\n\t\t\t\telem.files = ev.dataTransfer.files; // Firefox 57+\n\t\t\t\tapijs.upload.actionChoose(elem);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tapijs.html('.drag').remove();\n\t\t\t}\n\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\t\t// copy and paste\n\t\telse if (ev.clipboardData && ev.clipboardData.files && (ev.clipboardData.files.length > 0)) {\n\n\t\t\t// Firefox 22+, Chrome 58+, Opera 45+, Safari 10.1+\n\t\t\ttry {\n\t\t\t\telem.files = ev.clipboardData.files; // Firefox 57+\n\t\t\t\tapijs.upload.actionChoose(elem, true);\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\tconsole.error(e);\n\t\t\t\tapijs.html('.drag').remove();\n\t\t\t}\n\t\t}\n\t\telse if (ev.clipboardData) {\n\t\t\tstop = false;\n\t\t}\n\n\t\tif (stop) {\n\t\t\tev.stopPropagation();\n\t\t\tev.preventDefault();\n\t\t}\n\t};\n\n\tthis.actionChoose = function (elem, paste) {\n\n\t\tvar html = [], size = 0, btn = apijs.html('button.confirm');\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\t// @see https://stackoverflow.com/a/24775765/2980105\n\t\t\tapijs.toArray(elem.files, (this.allmax > 0) ? 999 : 1).forEach(function (file, idx) {\n\n\t\t\t\tvar txt = file.size / 1048576;\n\t\t\t\ttxt = apijs.formatNumber((txt < 0.01) ? 0.01 : txt);\n\t\t\t\ttxt = ((paste || (this.allmax > 0)) ?\n\t\t\t\t\t'<td class=\"nb\">' + (paste ? (new Date()).toTimeString().substring(0, 8) : idx + 1) + '</td>' : '') +\n\t\t\t\t\t'<td class=\"name\">' + file.name + '</td>' +\n\t\t\t\t\t'<td class=\"size\">' + apijs.i18n.translate(166, txt) + '</td>';\n\n\t\t\t\tif ((this.exts.join() !== '*') && !this.exts.has(file.name.slice(file.name.lastIndexOf('.') + 1).toLowerCase())) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(167) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size > (this.onemax * 1048576)) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(168) + '</td>';\n\t\t\t\t}\n\t\t\t\telse if (file.size <= 0) {\n\t\t\t\t\ttxt += '<td class=\"err\">' + apijs.i18n.translate(169) + '</td>';\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttxt += '<td></td>';\n\t\t\t\t}\n\n\t\t\t\thtml.push('<tr>' + txt + '</tr>');\n\t\t\t\tsize += file.size / 1048576;\n\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// multiple\n\t\t\tif ((this.allmax > 0) && (size >= this.allmax)) {\n\t\t\t\thtml.push('<tr class=\"tt\"><td></td><td></td><td class=\"size\">' + apijs.i18n.translate(166, apijs.formatNumber(size)) + '</td><td class=\"err\">' + apijs.i18n.translate(168) + '</td></tr>');\n\t\t\t}\n\n\t\t\t// ok ou ko\n\t\t\tapijs.html('div.filenames').innerHTML = '<table>' + html.join('') + '</table>';\n\t\t\tif (apijs.html('div.filenames .err')) {\n\t\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tbtn.removeAttribute('disabled');\n\t\t\t\tbtn.focus();\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tbtn.setAttribute('disabled', 'disabled');\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (apijs.dialog.t3.files.length > 0) {\n\n\t\t\tvar form = new FormData(apijs.dialog.t2), xhr = new XMLHttpRequest();\n\t\t\txhr.open('POST', this.action + ((this.action.indexOf('?') > 0) ? '&isAjax=true' : '?isAjax=true'), true);\n\n\t\t\t// token\n\t\t\tif (typeof apijs.config.upload.tokenValue == 'string') {\n\t\t\t\txhr.setRequestHeader(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t\tform.append(apijs.config.upload.tokenName, apijs.config.upload.tokenValue);\n\t\t\t}\n\n\t\t\t// @see https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// @see https://stackoverflow.com/a/15491086\n\t\t\t// loadstart - When the request starts\n\t\t\t// progress - While sending and loading data\n\t\t\t// load - When the request has successfully completed even if the server hasn't responded that it finished\n\t\t\t// loadend - When the request has completed even if the server hasn't responded that it finished processing the request\n\t\t\t// error - When the request has failed\n\t\t\t// abort - When the request has been aborted (by invoking the abort method)\n\t\t\t// timeout - When the author specified timeout has passed before the request could complete\n\t\t\txhr.onreadystatechange = function (text) {\n\t\t\t\tif (xhr.readyState === 4) {\n\t\t\t\t\ttext = xhr.responseText.trim();\n\t\t\t\t\tif ([0, 200].has(xhr.status)) {\n\t\t\t\t\t\tself.dispatchEvent(new CustomEvent('apijsajaxresponse', { detail: { from: 'apijs.upload.send', xhr: xhr } }));\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:200 message:' + text);\n\t\t\t\t\t\tif (text.indexOf('success-') === 0) {\n\t\t\t\t\t\t\tthis.updateTitle();\n\t\t\t\t\t\t\tthis.callback(text.slice(8), this.args);\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tthis.onError(195, text);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tapijs.log('upload:onreadystatechange status:' + xhr.status + ' message: ' + text);\n\t\t\t\t\t\tthis.onError(194, xhr.status);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}.bind(this); // pour que ci-dessus this = this\n\n\t\t\txhr.upload.onloadstart = this.onStart.bind(this);\n\t\t\txhr.upload.onprogress = this.onProgress.bind(this);\n\t\t\txhr.upload.onload = this.onProgress.bind(this);\n\t\t\txhr.upload.onerror = this.onError.bind(this);\n\t\t\txhr.send(form);\n\t\t}\n\t\telse {\n\t\t\tapijs.html('button.browse').focus();\n\t\t}\n\n\t\treturn false; // très important\n\t};\n\n\tthis.onStart = function () {\n\n\t\tthis.start = this.end = Math.round(new Date().getTime() / 1000);\n\t\tapijs.dialog.dialogProgress(this.title, apijs.i18n.translate(125), this.icon);\n\t};\n\n\tthis.onError = function (key, txt) {\n\n\t\tthis.updateTitle();\n\n\t\tif (typeof key == 'number')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(key) + '[/p] ' + txt;\n\t\telse if (typeof txt != 'string')\n\t\t\ttxt = '[p]' + apijs.i18n.translate(193) + '[/p]';\n\n\t\ttxt += '[p]' + apijs.i18n.translate(196, 'href=\"apijs://restart\" onclick=\"apijs.upload.sendFile(true); return false;\"') + '[/p]';\n\t\tapijs.dialog.dialogInformation(this.title, txt, (typeof this.icon == 'string') ? 'upload error ' + this.icon : 'upload error');\n\t};\n\n\tthis.onProgress = function (ev) {\n\n\t\tvar percent, key, rate, time, elapsedTime, totalTime, currentTime = Math.round(new Date().getTime() / 1000), mins;\n\n\t\t// Cherche à actualiser la barre de progression toutes les 2 secondes (uniquement de 1 à 99%)\n\t\t// affiche le pourcentage, la vitesse à partir de 25 secondes, le temps restant à partir de 40 secondes ET 90 secondes de temps total\n\t\tif (ev.lengthComputable && (ev.type === 'progress') && (currentTime >= (this.end + 2))) {\n\n\t\t\tthis.end = currentTime;\n\n\t\t\t// Math.floor = entier inférieur, Math.ceil = entier supérieur, Math.round = au mieux\n\t\t\t// ev.loaded = nombre d'octet envoyé sur le serveur\n\t\t\t// ev.total = nombre d'octet à envoyer sur le serveur\n\t\t\t// pourcentage = nombre d'octet envoyé * 100 / nombre d'octet à envoyer\n\t\t\tpercent = Math.floor((ev.loaded * 100) / ev.total);\n\n\t\t\tif ((percent > 0) && (percent < 100)) {\n\n\t\t\t\tthis.updateTitle(percent);\n\n\t\t\t\t// temps écoulé = maintenant - départ\n\t\t\t\t// temps total = temps écoulé * 100 / pourcentage + 10 secondes\n\t\t\t\telapsedTime = currentTime - this.start;\n\t\t\t\ttotalTime = elapsedTime * 100 / percent + 10;\n\n\t\t\t\tif (elapsedTime > 24) {\n\n\t\t\t\t\t// temps restant = temps total - temps écoulé\n\t\t\t\t\ttime = Math.round(totalTime - elapsedTime);\n\t\t\t\t\ttime = Math.ceil(time / 10) * 10;\n\t\t\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t\t\t// vitesse = taille téléchargé / temps écoulé / 1024\n\t\t\t\t\trate = Math.round(ev.loaded / elapsedTime / 1024);\n\n\t\t\t\t\tif ((elapsedTime < 40) || (totalTime < 90)) { key = 184; time = null; } // \"§% - § ko/s\"\n\t\t\t\t\telse if (mins > 1) { key = 181; time = mins; } // \"§% - § ko/s - § minutes restantes\"\n\t\t\t\t\telse if (time > 50) { key = 182; time = 1; } // \"§% - § ko/s - § minute restante\"\n\t\t\t\t\telse { key = 183; } // \"§% - § ko/s - § secondes restantes\"\n\t\t\t\t}\n\n\t\t\t\tthis.updateProgress(percent, key, rate, time);\n\t\t\t}\n\t\t}\n\t\t// Cherche à actualiser la barre de progression lorsque l'envoi du fichier est terminé (donc à 100%)\n\t\t// affiche le pourcentage, le temps total à partir de 20 secondes, la vitesse si possible\n\t\telse if (ev.type === 'load') {\n\n\t\t\t// temps total = temps actuel - temps du départ\n\t\t\ttime = Math.round(new Date().getTime() / 1000) - this.start;\n\t\t\tmins = Math.ceil(time / 60);\n\n\t\t\t// vitesse = taille total / temps total / 1024\n\t\t\trate = Math.round(ev.loaded / time / 1024);\n\n\t\t\tif ((rate > 0) && (rate !== Infinity)) {\n\t\t\t\tif (mins > 1) { key = 185; time = mins; } // \"§% - à § ko/s en § minutes\"\n\t\t\t\telse if (time > 50) { key = 186; time = 1; } // \"§% - à § ko/s en § minute\"\n\t\t\t\telse if (time > 20) { key = 187; } // \"§% - à § ko/s en § secondes\"\n\t\t\t\telse { key = 188; time = null; } // \"§% - à § ko/s\"\n\t\t\t}\n\t\t\telse {\n\t\t\t\trate = null; time = null; // 100%\n\t\t\t}\n\n\t\t\tthis.updateTitle(100);\n\t\t\tthis.updateProgress(100, key, rate, time);\n\t\t}\n\t};\n\n\tthis.updateProgress = function (percent, key, rate, time) {\n\n\t\tvar rect = apijs.html('rect'), text = apijs.html('span.info'), data;\n\n\t\tif (percent > 99) {\n\t\t\tdata = '100%';\n\t\t\trect.setAttribute('class', 'end');\n\t\t\trect.style.width = '';\n\t\t\tvar elem = apijs.html('p');\n\t\t\telem.setAttribute('data-old', elem.textContent);\n\t\t\telem.setAttribute('data-new', apijs.i18n.translate(126));\n\t\t\telem.setAttribute('class', 'anim');\n\t\t\telem.textContent = '';\n\t\t}\n\t\telse {\n\t\t\trect.style.width = data = percent + '%';\n\t\t\tif (rect.hasAttribute('class'))\n\t\t\t\trect.removeAttribute('class');\n\t\t}\n\n\t\tif ((typeof key == 'number') && (typeof rate == 'number') && (typeof time == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false), time);\n\t\telse if ((typeof key == 'number') && (typeof rate == 'number'))\n\t\t\tdata = apijs.i18n.translate(key, percent, apijs.formatNumber(rate, false));\n\n\t\ttext.textContent = data;\n\t};\n\n\tthis.updateTitle = function (percent) {\n\n\t\tif (typeof percent == 'number') {\n\t\t\tdocument.title = (/^\\d{1,3}% - /.test(document.title)) ?\n\t\t\t\tpercent + '% - ' + document.title.slice(document.title.indexOf(' - ') + 3) : percent + '% - ' + document.title;\n\t\t}\n\t\telse if (/^\\d{1,3}% - /.test(document.title)) {\n\t\t\tdocument.title = document.title.slice(document.title.indexOf(' - ') + 3);\n\t\t}\n\t};\n};"],"names":["Array","prototype","has","needle","key","hasOwnProperty","this","window","NodeList","forEach","callback","that","i","length","call","apijs","core","version","config","lang","debug","dialog","closeOnClick","restrictNavigation","player","slideshow","ids","anchor","upload","tokenName","tokenValue","start","elem","console","info","toString","split","join","document","getElementById","Error","querySelector","getAttribute","indexOf","error","i18n","self","dispatchEvent","CustomEvent","init","querySelectorAll","startPlayer","addEventListener","onPopState","Object","keys","data","formatNumber","nb","dec","str","dgt","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","format","e","toFixed","replace","url","videoPlayer","parentNode","classList","add","toArray","max","slice","openTab","ev","preventDefault","href","open","log","txt","html","selector","id","t1","requestFullscreen","webkitFullscreenElement","webkitCancelFullScreen","mozFullScreenElement","mozCancelFullScreen","fullscreenElement","cancelFullScreen","webkitRequestFullscreen","mozRequestFullScreen","serialize","form","filter","elements","idx","name","disabled","type","options","selected","push","encodeURIComponent","value","checked","bind","cs","103","104","105","106","107","108","132","133","134","135","142","143","144","145","146","148","149","150","de","109","124","147","161","162","163","164","167","168","169","181","182","183","185","186","187","188","191","192","193","194","195","196","el","102","131","en","125","126","127","141","165","166","184","es","fr","hu","it","ja","nl","pl","pt","ptbr","ro","ru","sk","tr","uk","zh","toLowerCase","translate","word","translation","arguments","translateNode","createTextNode","apply","changeLang","select","video","stalled","subload","autoRun","xhr","removeAttribute","onloadedmetadata","onTimeupdate","onProgress","onVideotrack","onAudiotrack","onstalled","onWaiting","onplaying","onPlay","onpause","onended","onprogress","ontimeupdate","onseeking","onseeked","onwaiting","onloadstart","oncanplay","onclick","actionPlay","onvolumechange","actionVolume","ondurationchange","onMediaLoad","onerror","appendChild","htmlSvgPlayer","htmlSource","XMLHttpRequest","onreadystatechange","readyState","detail","from","childNodes","abort","status","nbv","nbt","responseText","trim","shift","setAttribute","htmlOption","htmlTrack","updateSelect","textTracks","send","css","total","adjust","textContent","innerHTML","tracks","videoTracks","auto","language","selectedIndex","Math","actionVideotrack","audioTracks","actionAudiotrack","hh","mm","ss","time","currentTime","duration","text","isNaN","Infinity","floor","style","width","buffer","buffered","node","remove","createElement","end","networkState","paused","swipe","ended","play","pause","offsetWidth","clientX","offsetLeft","offsetParent","volume","muted","actionPosition","target","enabled","blur","actionTexttrack","mode","actionVideo","src","actionFullscreen","res","d","c","b","a","onchange","webkitFullscreenEnabled","fullscreenEnabled","mozFullScreenEnabled","onload","lastIndexOf","track","label","klass","height","scroll","args","ft","ti","ns","media","t0","t2","t3","dialogInformation","title","icon","htmlParent","htmlContent","htmlBtnOk","show","dialogConfirmation","htmlBtnConfirm","dialogFormOptions","action","dialogFormUpload","input","multiple","htmlUpload","dialogProgress","htmlSvgProgress","dialogWaiting","htmlSvgLoader","dialogPhoto","date","legend","htmlMedia","htmlHelp","htmlBtnClose","htmlBtnNavigation","dialogVideo","dialogIframe","close","htmlIframe","dialogAjax","update","splice","toggle","search","actionClose","history","pushState","RegExp","test","location","clear","onCloseBrowser","stopPropagation","m","returnValue","onResizeBrowser","clientWidth","onScrollBrowser","brk","nodeName","Date","getTime","wheelDelta","contains","scrollHeight","offsetHeight","scrollTop","onScrollIframe","defaultView","innerHeight","scrollY","body","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","onIframeLoad","contentWindow","parent","passive","currentSrc","visibility","hasAttribute","imageLoader","elems","onSlideshowSwipe","setTimeout","actionConfirm","isLocked","matchMedia","matches","concat","createDocumentFragment","focus","minHeight","old","firstChild","actionDrag","isAll","hammer","off","destroy","removeEventListener","parseFloat","getComputedStyle","submit","drag","click","Hammer","get","set","direction","DIRECTION_ALL","on","isMultiple","change","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","navigator","userAgent","match","items","item","current","j","hoverload","$1","source","srcset","conts","prefix","number","parseInt","gallery","links","substring","styles","first","prev","next","last","hash","onemax","allmax","exts","sendFile","sendFiles","stop","dataTransfer","files","actionChoose","clipboardData","paste","size","btn","file","toTimeString","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","totalTime","mins","lengthComputable","loaded","elapsedTime","ceil","updateProgress","rect"],"mappings":"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"}
|