redmine_apijs 6.6.0 → 6.8.2

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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README +8 -9
  3. data/app/controllers/apijs_controller.rb +7 -7
  4. data/app/views/application/_browser.html.erb +1 -1
  5. data/app/views/attachments/_links.html.erb +1 -1
  6. data/app/views/settings/_apijs.html.erb +1 -1
  7. data/assets/javascripts/{app.js → apijs-redmine.js} +9 -6
  8. data/assets/javascripts/apijs-redmine.min.js +3 -3
  9. data/assets/javascripts/apijs-redmine.min.js.map +1 -0
  10. data/assets/javascripts/apijs.min.js +3 -3
  11. data/assets/javascripts/apijs.min.js.map +1 -1
  12. data/assets/stylesheets/apijs-print.min.css +2 -2
  13. data/assets/stylesheets/apijs-print.min.css.map +1 -1
  14. data/assets/stylesheets/apijs-redmine-rtl.min.css +2 -2
  15. data/assets/stylesheets/apijs-redmine-rtl.min.css.map +1 -0
  16. data/assets/stylesheets/{styles.css → apijs-redmine.css} +1 -1
  17. data/assets/stylesheets/apijs-redmine.min.css +2 -2
  18. data/assets/stylesheets/apijs-redmine.min.css.map +1 -0
  19. data/assets/stylesheets/apijs-screen-rtl.min.css +3 -3
  20. data/assets/stylesheets/apijs-screen-rtl.min.css.map +1 -1
  21. data/assets/stylesheets/apijs-screen.min.css +3 -3
  22. data/assets/stylesheets/apijs-screen.min.css.map +1 -1
  23. data/config/locales/el.yml +34 -0
  24. data/config/locales/hu.yml +34 -0
  25. data/config/locales/ro.yml +34 -0
  26. data/config/routes.rb +1 -1
  27. data/init.rb +4 -4
  28. data/lib/apijs_attachment.rb +1 -1
  29. data/lib/apijs_const.rb +1 -1
  30. data/lib/apijs_files.rb +1 -1
  31. data/lib/image.py +19 -13
  32. data/lib/redmine_apijs.rb +1 -1
  33. data/lib/useragentparser.rb +4 -4
  34. data/lib/video.py +1 -1
  35. data/redmine_apijs.gemspec +10 -7
  36. metadata +13 -9
  37. data/assets/javascripts/app.min.js.map +0 -1
  38. data/assets/stylesheets/styles-rtl.min.css.map +0 -1
  39. data/assets/stylesheets/styles.min.css.map +0 -1
@@ -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 V/08/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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 = 660;\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\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) {\n\t\treturn Array.prototype.slice.call(data, 0);\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// https://gomakethings.com/how-to-serialize-form-data-with-vanilla-js/\n\t\tArray.prototype.forEach.call(form.elements, function (elem) {\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 (var n = 0; n < elem.options.length; n++) {\n\t\t\t\t\tif (elem.options[n].selected)\n\t\t\t\t\t\tdata.push(encodeURIComponent(elem.name) + '=' + encodeURIComponent(elem.options[n].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","/**\n * Created S/05/06/2010\n * Updated V/01/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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// 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\t132: \"video stopa\",\n\t\t\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t142: \"předchozí/následující\",\n\t\t\t144: \"zpět/vpřed\",\n\t\t\t146: \"ztlumit\",\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\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\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\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\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\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\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\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\t131: \"ビデオ\",\n\t\t\t132: \"ビデオトラック\",\n\t\t\t133: \"オーディオトラック\",\n\t\t\t134: \"字幕\",\n\t\t\t142: \"前へ/次へ\",\n\t\t\t144: \"戻る/進む\",\n\t\t\t146: \"ミュート\",\n\t\t\t147: \"全画面表示\",\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\t132: \"videospoor\",\n\t\t\t133: \"audiospoor\",\n\t\t\t134: \"ondertitels\",\n\t\t\t142: \"vorige/volgende\",\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\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\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\t142: \"poprzedni/następny\",\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\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: \"Escolher um ficheiro\",\n\t\t\t109: \"Escolher um ou vários ficheiros\",\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\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\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\t142: \"anterior/próximo\",\n\t\t\t144: \"retroceder/avançar\",\n\t\t\t146: \"sem áudio\",\n\t\t\t147: \"tela inteira\",\n\t\t\t149: \"Final\"\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\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: \"Максимальный размер: § MB.\",\n\t\t\t181: \"§% - § kB/s - осталось § минут\",\n\t\t\t182: \"§% - § kB/s - осталось § минут\",\n\t\t\t183: \"§% - § kB/s - осталось § секунд\",\n\t\t\t185: \"§% - § kB/s за § минут\",\n\t\t\t186: \"§% - § kB/s за § минут\",\n\t\t\t187: \"§% - § kB/s за § секунд\",\n\t\t\t188: \"§% - § kB/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\t133: \"zvuková stopa\",\n\t\t\t134: \"titulky\",\n\t\t\t142: \"dozadu/ďalej\",\n\t\t\t144: \"dozadu/dopredu\",\n\t\t\t145: \"znizit/zvysit hlasitost\",\n\t\t\t146: \"stlmiť\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\ttr: {\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\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\t142: \"önceki/sonraki\",\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\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\t103: \"Відмінити\",\n\t\t\t104: \"Підтвердити\",\n\t\t\t105: \"Закрити\",\n\t\t\t106: \"Попередній\",\n\t\t\t107: \"Наступний\",\n\t\t\t131: \"відео\",\n\t\t\t132: \"відеодоріжка\",\n\t\t\t133: \"звукова доріжка\",\n\t\t\t134: \"субтитри\",\n\t\t\t142: \"попередній/наступний\",\n\t\t\t144: \"назад/вперед\",\n\t\t\t145: \"зменшити/збільшити гучність\",\n\t\t\t146: \"вимкнути звук\",\n\t\t\t149: \"Кінець\",\n\t\t\t150: \"Esc\"\n\t\t},\n\t\tzh: {\n\t\t\t103: \"取消\",\n\t\t\t104: \"确认\",\n\t\t\t105: \"关闭\",\n\t\t\t106: \"上一个\",\n\t\t\t107: \"下一个\",\n\t\t\t131: \"视频\",\n\t\t\t132: \"视频轨道\",\n\t\t\t133: \"音频轨道\",\n\t\t\t134: \"字幕\",\n\t\t\t142: \"上一个/下一个\",\n\t\t\t144: \"快退/快进\",\n\t\t\t145: \"音量减/增\",\n\t\t\t146: \"静音\",\n\t\t\t147: \"全屏\",\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 J/19/11/2020\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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\tdocument.querySelectorAll('select').forEach(function (elem) {\n\t\t\telem.addEventListener('focus', apijs.select.open);\n\t\t});\n\t};\n\n\tthis.open = function (ev) {\n\n\t\tvar root = ev.target, t, a, b, c, d;\n\n\t\tt = document.createDocumentFragment();\n\n\t\t\ta = document.createElement('div');\n\n\t\t\t\tb = document.createElement('ul');\n\t\t\t\troot.querySelectorAll('option').forEach(function (elem) {\n\t\t\t\t\tc = document.createElement('li');\n\t\t\t\t\tc.appendChild(document.createTextNode(elem.textContent));\n\t\t\t\t\tArray.prototype.forEach.call(elem.attributes, function (attribute) {\n\t\t\t\t\t\tc.setAttribute(attribute.name, attribute.value);\n\t\t\t\t\t});\n\t\t\t\t\tthis.appendChild(c);\n\t\t\t\t}, b); // pour que ci-dessus this = b\n\n\t\t\ta.appendChild(b);\n\n\t\tt.appendChild(a);\n\n\t\tconsole.log(t.firstChild.innerHTML);\n\t\troot.parentNode.replaceChild(t.firstChild, root);\n\t};\n};","/**\n * Created D/11/01/2015\n * Updated W/03/03/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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// 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, 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:[0-9]+,/, '');\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// 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// 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.parentNode.removeChild(node); });\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\tapijs.dialog.remove('playing');\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.html('span.play').textContent = '\\uE811';\n\t\t\t\tapijs.dialog.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// 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.1) ? 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.parentNode.removeChild(node); });\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\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 nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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 nomobile');\n\t\t\tb.appendChild(document.createTextNode('\\uE80F'));\n\t\t\tb.onclick = function () {\n\t\t\t\tapijs.requestFullscreen(apijs.dialog.t1 ? apijs.dialog.t1 : this.video.parentNode);\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 W/03/03/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\tthis.d = 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();')\n\t\t\t\t.htmlContent(title, text)\n\t\t\t\t.htmlUpload(input, (typeof multiple == 'boolean') ? multiple : false)\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 add = document.querySelector('body').clientWidth <= (apijs.dialog.has('photo', 'video') ? 900 : 460);\n\t\tapijs.dialog[add ? 'add' : 'remove']('mobile');\n\n\t\tadd = document.querySelector('body').clientWidth <= 300;\n\t\tapijs.dialog[add ? '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\tif (that.has('slideshow') && !that.has('playing') &&\n\t\t !['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll','mousewheel','panleft','panright'].has(ev.type)) {\n\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (1 + that.scroll))) {\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[((ev.type === 'panleft') || 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.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))) || (!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.pageYOffset) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.pageYOffset <= 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;\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 ((ev.keyCode === 32) || (ev.keyCode === 80)) {\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 ((ev.keyCode === 38) || (ev.keyCode === 33)) {\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\tif (elem.currentTime < (elem.duration - 10))\n\t\t\t\t\t\telem.currentTime += 10;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ((ev.keyCode === 40) || (ev.keyCode === 34)) {\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\tif (elem.currentTime > 10)\n\t\t\t\t\t\telem.currentTime -= 10;\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// +\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)) {\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.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\tthis.t1.appendChild(this.t0.firstChild.firstChild);\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\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\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\t// mémorise la hauteur du dialogue\n\t\telse {\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\tdocument.querySelector('body').removeChild(this.t1);\n\t\t}\n\t\telse {\n\t\t\tthis.t1.removeChild(this.t2);\n\t\t}\n\n\t\t// réinitialise toutes les variables (sauf ft/ti/ns)\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.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\t\tthis.d = 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) {\n\n\t\tthis.t1 = document.createElement('div');\n\t\tthis.t1.setAttribute('id', 'apijsDialog');\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, '&lt;').replace(/>/g, '&gt;').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, '&lt;').replace(/>/g, '&gt;').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\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 noplaying');\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) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.b = document.createElement('input');\n\t\t\tthis.b.setAttribute('type', 'file');\n\t\t\tthis.b.setAttribute('name', input);\n\t\t\tthis.b.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.b.setAttribute('multiple', 'multiple');\n\t\t\tthis.b.setAttribute('onchange', 'apijs.upload.actionChoose(this);');\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', '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');\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', 'nomobile noplaying');\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('videoplayer');\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\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 ? ['bottom', 'topk', 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 nomobile 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 V/01/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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').substr(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true).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/01/2021\n *\n * Copyright 2008-2021 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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.files = [];\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\tthis.files = [];\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.actionChoose = function (elem) {\n\n\t\tvar html = [], size = 0, text;\n\t\tthis.files = [];\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\tArray.prototype.forEach.call(elem.files, function (file) {\n\n\t\t\t\ttext = file.name + ' <span class=\"sz\">' + apijs.i18n.translate(166, apijs.formatNumber(file.size / 1048576)) + '</span>';\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\ttext += ' <span class=\"ee\">' + apijs.i18n.translate(167) + '</span>';\n\t\t\t\telse if (file.size > (this.onemax * 1048576))\n\t\t\t\t\ttext += ' <span class=\"ee\">' + apijs.i18n.translate(168) + '</span>';\n\t\t\t\telse if (file.size <= 0)\n\t\t\t\t\ttext += ' <span class=\"ee\">' + apijs.i18n.translate(169) + '</span>';\n\t\t\t\telse\n\t\t\t\t\tthis.files.push(file);\n\n\t\t\t\thtml.push('<div>' + text + '</div>');\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('<div class=\"tt\"> = <span class=\"sz\">' + apijs.i18n.translate(166, apijs.formatNumber(size)) + '</span> <span class=\"ee\">' + apijs.i18n.translate(168) + '</span></div>');\n\t\t\t}\n\n\t\t\t// ok ou ko\n\t\t\tif (this.files.length === elem.files.length) {\n\t\t\t\tapijs.html('button.confirm').removeAttribute('disabled');\n\t\t\t\tapijs.html('button.confirm').focus();\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapijs.html('button.confirm').setAttribute('disabled', 'disabled');\n\t\t\t}\n\n\t\t\tapijs.html('div.filenames').innerHTML = html.join(' ');\n\t\t}\n\t};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (this.files.length > 0) {\n\n\t\t\tvar form = new FormData(), xhr = new XMLHttpRequest(), tmp;\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// champs supplémentaires\n\t\t\ttmp = apijs.serialize(apijs.dialog.t2);\n\t\t\tif (tmp.length > 3) {\n\t\t\t\ttmp.split('&').forEach(function (data) {\n\t\t\t\t\tdata = data.split('=');\n\t\t\t\t\tform.append(data[0], data[1]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// fichier(s)\n\t\t\tthis.files.forEach(function (file, idx, files) {\n\t\t\t\tform.append(((files.length > 1) && (this.input.indexOf('[') < 0)) ? this.input + '_' + idx : this.input, file);\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// 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\tapijs.html('p').textContent = apijs.i18n.translate(126);\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","toArray","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","name","disabled","type","n","options","selected","push","encodeURIComponent","value","checked","bind","cs","103","104","105","106","107","132","133","134","142","144","146","149","150","de","108","109","124","143","145","147","148","161","162","163","164","167","168","169","181","182","183","185","186","187","188","191","192","193","194","195","196","en","102","125","126","131","135","141","165","166","184","es","fr","it","ja","nl","pl","pt","ptbr","ru","sk","tr","uk","zh","toLowerCase","translate","word","idx","translation","arguments","translateNode","createTextNode","apply","changeLang","select","c","root","target","t","createDocumentFragment","a","createElement","b","appendChild","textContent","attributes","attribute","setAttribute","firstChild","innerHTML","parentNode","replaceChild","video","stalled","subload","autoRun","removeAttribute","classList","add","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","htmlSvgPlayer","htmlSource","xhr","XMLHttpRequest","onreadystatechange","readyState","detail","from","childNodes","abort","status","nbv","nbt","responseText","trim","shift","htmlOption","htmlTrack","updateSelect","textTracks","send","css","total","adjust","tracks","videoTracks","auto","language","selectedIndex","Math","max","actionVideotrack","audioTracks","actionAudiotrack","hh","mm","ss","time","currentTime","duration","text","isNaN","Infinity","floor","style","width","buffer","buffered","node","removeChild","end","networkState","paused","remove","ended","play","pause","offsetWidth","clientX","offsetLeft","offsetParent","volume","muted","actionPosition","enabled","blur","actionTexttrack","mode","actionVideo","src","d","onchange","onload","lastIndexOf","track","label","klass","height","scroll","args","ft","ti","ns","media","t0","t2","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","scrollTop","scrollHeight","offsetHeight","onScrollIframe","defaultView","innerHeight","pageYOffset","body","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","res","onIframeLoad","contentWindow","parent","passive","elems","currentSrc","visibility","hasAttribute","imageLoader","actionConfirm","setTimeout","isLocked","matchMedia","matches","concat","focus","minHeight","old","webkitFullscreenEnabled","fullscreenEnabled","mozFullScreenEnabled","isAll","removeEventListener","parseFloat","getComputedStyle","submit","click","isMultiple","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","items","item","current","j","hoverload","$1","source","conts","prefix","number","parseInt","gallery","links","srcset","substr","styles","first","prev","next","last","hash","onemax","allmax","exts","files","sendFile","sendFiles","actionChoose","size","file","tmp","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","elapsedTime","mins","lengthComputable","loaded","totalTime","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 V/22/10/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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 = 682;\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 (ignore) {\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// 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 S/03/07/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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// 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://www.luigifab.fr/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 V/23/07/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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// 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:[0-9]+,/, '');\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// 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// 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// 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 nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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\t\t\t\tc.setAttribute('class', 'nomobile');\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 nomobile');\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 M/28/09/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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.media = null;\n\tthis.t0 = null; // fragment\n\tthis.t1 = null; // div id=apijsDialog\n\tthis.t2 = null; // div/form id=apijsBox\n\tthis.a = null;\n\tthis.b = null;\n\tthis.c = null;\n\tthis.d = 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)\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 add, body = document.querySelector('body');\n\n\t\tadd = body.clientWidth <= (apijs.dialog.has('photo', 'video') ? 900 : 460);\n\t\tapijs.dialog[add ? 'add' : 'remove']('mobile');\n\n\t\tadd = body.clientWidth <= 300;\n\t\tapijs.dialog[add ? '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\tif (that.has('slideshow') && !that.has('playing') &&\n\t\t !['OPTION', 'SELECT'].has(elem.nodeName) && ['DOMMouseScroll','mousewheel','panleft','panright'].has(ev.type)) {\n\n\t\t\telem = new Date().getTime() / 1000;\n\t\t\tif ((that.scroll < 1) || (elem > (1 + that.scroll))) {\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[((ev.type === 'panleft') || 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.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))) || (!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.pageYOffset) >= (elem.body.offsetHeight - 1))) ||\n\t\t\t(!brk && (elem.defaultView.pageYOffset <= 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;\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 ((ev.keyCode === 32) || (ev.keyCode === 80)) {\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 ((ev.keyCode === 38) || (ev.keyCode === 33)) {\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\tif (elem.currentTime < (elem.duration - 10))\n\t\t\t\t\t\telem.currentTime += 10;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// bas | page bas\n\t\t\telse if ((ev.keyCode === 40) || (ev.keyCode === 34)) {\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\tif (elem.currentTime > 10)\n\t\t\t\t\t\telem.currentTime -= 10;\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// +\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.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// 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\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\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\t// mémorise la hauteur du dialogue\n\t\telse {\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)\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.a = null;\n\t\tthis.b = null;\n\t\tthis.c = null;\n\t\tthis.d = 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\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\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, '&lt;').replace(/>/g, '&gt;').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, '&lt;').replace(/>/g, '&gt;').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\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 noplaying');\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) {\n\n\t\tthis.a = document.createElement('div');\n\t\tthis.a.setAttribute('class', 'btns upload');\n\n\t\t\tthis.b = document.createElement('input');\n\t\t\tthis.b.setAttribute('type', 'file');\n\t\t\tthis.b.setAttribute('name', input);\n\t\t\tthis.b.setAttribute('id', 'apijsFile');\n\t\t\tif (isMultiple) this.b.setAttribute('multiple', 'multiple');\n\t\t\tthis.b.setAttribute('onchange', 'apijs.upload.actionChoose(this);');\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', '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', 'nomobile noplaying');\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\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 ? ['bottom', 'topk', 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 nomobile 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 V/01/01/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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').substr(0, 5).replace('image', 'dialogPhoto').replace('video', 'dialogVideo');\n\t\tmedia.type = (media.type.indexOf('dialog') === 0) ? media.type : 'dialogPhoto';\n\t\tmedia.styles = apijs.html(media.prefix, true).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 M/28/09/2021\n *\n * Copyright 2008-2022 | Fabrice Creuzot (luigifab) <code~luigifab~fr>\n * https://www.luigifab.fr/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.files = [];\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\tthis.files = [];\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\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\telse if (ev.dataTransfer && ev.dataTransfer.files && (ev.dataTransfer.files.length > 0)) {\n\t\t\tthis.actionChoose(ev.dataTransfer);\n\t\t\tapijs.dialog.remove('drag');\n\t\t}\n\n\t\tev.stopPropagation();\n\t\tev.preventDefault();\n\t};\n\n\tthis.actionChoose = function (elem) {\n\n\t\tvar html = [], size = 0, btn = apijs.html('button.confirm');\n\t\tthis.files = [];\n\n\t\tif (this.exts) {\n\n\t\t\t// 1048576 octet = 1 Mo\n\t\t\t// 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 = ((this.allmax > 0) ? '<td class=\"nb\">' + (idx + 1) + '</td>' : '') +\n\t\t\t\t\t'<td class=\"name\">' + file.name + '</td><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\tthis.files.push(file);\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};\n\n\tthis.actionConfirm = function () {\n\n\t\tif (this.files.length > 0) {\n\n\t\t\tvar form = new FormData(), xhr = new XMLHttpRequest(), tmp;\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// champs supplémentaires\n\t\t\ttmp = apijs.serialize(apijs.dialog.t2);\n\t\t\tif (tmp.length > 3) {\n\t\t\t\ttmp.split('&').forEach(function (data) {\n\t\t\t\t\tdata = data.split('=');\n\t\t\t\t\tform.append(data[0], data[1]);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// fichier(s)\n\t\t\tthis.files.forEach(function (file, idx, files) {\n\t\t\t\tform.append(((files.length > 1) && (this.input.indexOf('[') < 0)) ? this.input + '_' + idx : this.input, file);\n\t\t\t}, this); // pour que ci-dessus this = this\n\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=637002\n\t\t\t// 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","ignore","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","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","xhr","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","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","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","body","clientWidth","onScrollBrowser","brk","nodeName","Date","getTime","wheelDelta","contains","scrollTop","scrollHeight","offsetHeight","onScrollIframe","defaultView","innerHeight","pageYOffset","onKey","ctrlKey","keyCode","altKey","actionLast","actionFirst","actionPrev","actionNext","onFullscreen","onIframeLoad","contentWindow","parent","passive","elems","currentSrc","visibility","hasAttribute","imageLoader","actionConfirm","setTimeout","isLocked","matchMedia","matches","concat","createDocumentFragment","focus","minHeight","old","firstChild","isAll","removeEventListener","parseFloat","getComputedStyle","submit","drag","click","isMultiple","isDelayed","createElementNS","fileid","Image","isSlideshow","isVideo","items","item","current","j","hoverload","$1","source","conts","prefix","number","parseInt","gallery","links","srcset","substr","styles","first","prev","next","last","hash","onemax","allmax","exts","files","sendFile","sendFiles","actionDrag","dataTransfer","actionChoose","size","btn","file","tmp","FormData","setRequestHeader","append","updateTitle","onError","onStart","round","percent","rate","elapsedTime","mins","lengthComputable","loaded","totalTime","ceil","updateProgress","rect"],"mappings":"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"}