Rev 3897 | Blame | Compare with Previous | Last modification | View Log | RSS feed
import {findFieldset} from './utils.js';/************************************** Fonctions de Style et Affichage ** des éléments "spéciaux" **************************************/export const displayFields = () => {inputFile();inputListCheckbox();inputRangeDisplayNumber();previewFieldHelpModal();};// Logique d'affichage pour le input type=fileexport const inputFile = () => {const fileInputSelector = '.input-file',$button = $('.label-file'),focusOnIntputFile = selector => $('#'+selector+fileInputSelector).focus();// focus lorsque la "barre d'espace" ou "Entrée" est pressée$button.on('keydown', function(event) {if (event.keyCode == 13 || event.keyCode == 32) {focusOnIntputFile($(this).attr('for'));}});// focus lorsque le label est cliqué$button.on('click', function () {focusOnIntputFile($(this).attr('for'));return false;});// Affiche un retour visuel dès que input:file change$(fileInputSelector).on('change', function(event) {// Il est possible de supprimer un fichier// donc on vérifie que le 'change' est un ajout ou modificationis-defaut-valueif (!$.isEmptyObject(event.target.files[0])) {const file = event.target.files[0],fileSelector = $(this).attr('id'),$theReturn = $('.'+fileSelector);// Affichage du nom du fichier$theReturn.text(file.name).removeClass('hidden');if (5242880 < file.size) {$theReturn.append(`<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>La taille du fichier ne doit pas dépasser 5Mo</p>`).addClass('invalid');// lib : https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js$(this).clearInputs();console.log(file);} else if (file.type.match('image/*') && 'especes' !== fileSelector) {// Si le fichier est une image (et qu'on est pas sur "especes") on l'affiche// Chemin temporaire de l'image et affichageconst tmppath = URL.createObjectURL(file);$theReturn.append(`<img src="${tmppath}" width="50%">`).removeClass('invalid');} else if (!('especes' === fileSelector && file.type.match('text/(:?csv|tab-separated-values)'))) {// on a pas un type image, ou on est sur une liste d'espèces mais on a pas un csvconsole.log(file.type);if ('especes' === fileSelector) {// cas où on demandait un csv$theReturn.append(`<p class="message"><i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>Le fichier doit être au format csv ou tsv</p>`).addClass('invalid');} else { // cas où on demandait un format image$theReturn.append(`<p class="message">'+<i class="fa fa-exclamation-triangle" aria-hidden="true" style="color:#ff5d55"></i>Le fichier doit être au format image (jpg, png, etc.)</p>`).addClass('invalid');}// lib : https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js$(this).clearInputs();console.log(file);} else {// file "especes" csv ok$theReturn.append(' <i class="fa fa-check-circle" aria-hidden="true" style="color:#B3C954;font-size:1.3rem"></i>').removeClass('invalid');}}});// Annuler le téléchargement$('.remove-file').click(function () {const $thisFileInput = $(this).prev('.input-file-container').find('.input-file');// lib : https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js$thisFileInput.clearInputs();$thisFileInput.triggerHandler('change');// $thisFileInput.unwrap();$(this).next('.file-return').addClass('hidden').empty();});};// Style et affichage des list-checkboxesexport const inputListCheckbox = () => {// On écoute le click sur une list-checkbox ('.selectBox')// à tout moment de son insertion dans le dom$('#zone-appli').on('click', '.selectBox', function () {$(`.checkboxes[data-id="${$(this).data('id')}"]`).toggleClass('hidden');});};// Style et affichage des input type="range"export const inputRangeDisplayNumber = () => {$('#zone-appli').on('input', 'input[type="range"]', function () {$(this).siblings('.range-live-value').text($(this).val());});};// Activation/Desactivation et contenu de la modale Bootstrap// https://getbootstrap.com/docs/3.3/javascript/#modalsexport const previewFieldHelpModal = () => {$('#zone-supp').on('click', '.help-button', function () {const index = $(this).closest('.preview-fields').data('id'),$thisFieldset = findFieldset(index),file = $('.field-help', $thisFieldset)[0].files[0],tmppath = URL.createObjectURL(file),$helpModal = $('#help-modal'),$helpModalLabel = $('#help-modal-label'),$printContent = $('#print_content');// Titre$helpModalLabel.text('Aide pour : '+$('.field-name', $thisFieldset).val());// Contenuif (file.type.match('image/*')) {$printContent.append(`<img src="${tmppath}" style="max-width:100%">`);} else {$printContent.append('<p>Erreur : le fichier n’est pas une image</p>');}// Sortie avec la touche escape$helpModal.modal({keyboard: true});// Affichage$helpModal.modal({show: true});// Remplacer l'autofocus qui ne fonctionne plus en HTML5// Message dans la doc de bootstrap :// Due to how HTML5 defines its semantics,// the autofocus HTML attribute has no effect in Bootstrap modals.// To achieve the same effect, use some custom JavaScript$helpModal.on('shown.bs.modal', function () {$('#myInput').trigger('focus');})// Réinitialisation$helpModal.on('hidden.bs.modal', function () {$helpModalLabel.text();$printContent.empty();})});};