Subversion Repositories eFlore/Applications.cel

Compare Revisions

Ignore whitespace Rev 3213 → Rev 3217

/trunk/widget/modules/saisie2/squelettes/js/champs-supp.js
6,7 → 6,7
*************************************/
 
// Logique d'affichage pour le input type=file
function inputFile( countFiles ) {
function inputFile() {
// Initialisation des variables
var $fileInput = $( '.input-file' ),
$button = $( '.label-file' );
104,10 → 104,10
 
// Style et affichage des input type="range"
function inputRangeDisplayNumber() {
$( '#zone-supp' ).on( 'input' , '.range input[type="range"]' , function () {
$( '#zone-appli' ).on( 'input' , '.range input[type="range"]' , function () {
$( this ).next( 'input[type="number"]' ).val ( $( this ).val() );
});
$( '#zone-supp' ).on( 'input' , '.range input[type="number"]' , function () {
$( '#zone-appli' ).on( 'input' , '.range input[type="number"]' , function () {
$( this ).prev( 'input[type="range"]' ).val ( $( this ).val() );
});
}
115,23 → 115,25
// Activation/Desactivation et contenu de la modale Bootstrap
// https://getbootstrap.com/docs/3.3/javascript/#modals
function previewFieldHelpModal() {
$( '#zone-supp' ).on( 'click' , '.help-button' , function ( event ) {
var index = $( this ).closest( '.preview-fields' ).attr( 'data-id' ),
thisFieldset = $( '.new-field[data-id="' + index + '"]' ),
file = $( '.field-help' , thisFieldset )[0].files[0],
tmppath = URL.createObjectURL( file );
$( '#zone-appli' ).on( 'click' , '.help-button' , function ( event ) {
var thisFieldKey = $( this ).data( 'key' ),
// filePath ci dessous est un test, obtenir une vraie url une fois les fichiers d'aide accessibles
filePath = 'https://beta.tela-botanica.org/tmp/eflore_v5_cache/pdf/Fabaceae-3497041375.pdf',
fileMimeType = $( this ).data( 'mime-type' );
 
// Titre
$( '#help-modal-label' ).text( 'Aide pour : ' + $( '.field-name' , thisFieldset ).val() );
// Contenu
if( file.type.match( 'image' ) ) {
$( '#print_content' ).append( '<img src="' + tmppath + '" style="max-width:100%">' );
} else if( file.type.match( 'pdf' ) ) {
$( '#print_content' ).append( '<iframe src="' + tmppath + '" width="100%" height="650" align="middle" scrolling="no" frameborder="0"></iframe>' );
$( '#help-modal-label' ).text( 'Aide pour : ' + $( this ).data( 'name' ) );
 
if( fileMimeType.match( 'image' ) ) {
$( '#print_content' ).append( '<img src="' + filePath + '" style="max-width:100%">' );
} else if( fileMimeType.match( 'pdf' ) ) {
$( '#print_content' ).append( '<iframe src="' + filePath + '" width="100%" height="650" align="middle" scrolling="no" frameborder="0"></iframe>' );
}
 
// Sortie avec la touche escape
$( '#help-modal' ).modal( { keyboard : true } );
// Affichage
$( '#help-modal' ).modal( 'show' );
$( '#help-modal' ).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,
252,18 → 254,17
* Lancement des scripts *
***************************/
jQuery( document ).ready( function() {
// var countFiles = 2;
// // Affichage des images ou nom des documents importés
// inputFile( countFiles );
// // Affichage des List-checkbox
// Affichage des images ou nom des documents importés
inputFile();
// Affichage des List-checkbox
inputListCheckbox();
 
// // Affichage des Range
// inputRangeDisplayNumber()
// // Modale "aide"
// previewFieldHelpModal();
// // Ajout/suppression d'un champ texte "Autre"
// if( $( '.option-other-value' , thisFieldset ).is( ':checked' ) ) {
 
// Modale "aide"
previewFieldHelpModal();
// Ajout/suppression d'un champ texte "Autre"
onOtherOption();
collectOtherOption();
// }
});
/trunk/widget/modules/saisie2/squelettes/js/WidgetSaisie.js
41,7 → 41,8
WidgetSaisie.prototype.init = function() {
this.initForm();
this.initEvts();
if ( '' === $( '#nom-complet').val() && '' !== $( '#courriel' ).val() ) {
// Auth.js s'en occuppe
if ( '' === $( '#nom-complet').text() && '' !== $( '#courriel' ).val() ) {
this.requeterIdentite();
}
};
125,7 → 126,7
});
 
// identité
if ( '' === $( '#nom-complet').val() ) {
if ( '' === $( '#nom-complet').text() ) {
$( '#courriel' ).on( 'blur', this.requeterIdentite.bind( this ) );
$( '#courriel' ).on( 'keypress', this.testerLancementRequeteIdentite.bind( this ) );
}
267,7 → 268,8
 
WidgetSaisie.prototype.surSuccesCompletionCourriel = function( infos, courriel ) {
$( '#zone-courriel' ).before( '<p class="warning"><i class="fas fa-exclamation-triangle"></i> Un compte existe pour ce courriel, connectez-vous pour saisir votre observation</p>' );
$( '#creation-compte, #zone-prenom-nom, #zone-courriel-confirmation' ).addClass( 'hidden' );
$( '#bouton-inscription, #zone-prenom-nom, #zone-courriel-confirmation' ).addClass( 'hidden' );
$( '#prenom, #nom, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
$( '#bouton-connexion a' ).css( 'box-shadow', '0 0 1.5px 1px red' );
// // Traité par auth.js :
// $( '#id_utilisateur' ).val(infos.id);
275,7 → 277,6
// $( '#prenom' ).val(infos.prenom);
// $( '#nom' ).val(infos.nom);
// $( '#courriel_confirmation' ).val(courriel);
// $( '#prenom, #nom, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
// this.focusChampFormulaire();
// // todo function masquerPanneau
// this.masquerPanneau( '#dialogue-courriel-introuvable' );
830,6 → 831,32
$( '#taxon' ).bind( 'autocompleteselect', this.surAutocompletionTaxon );
};
 
// /* auto completion nom sci */
// WidgetSaisie.prototype.ajouterAutocompletionNoms = function() {
// var lthis = this;
// $( '#taxon' ).autocomplete({
// source: function( requete, add ) {
// // la variable de requête doit être vidée car sinon le parametre 'term' est ajouté
// requete = '';
// if( 'autre' !== $( '#referentiel' ).val() ) {
// var url = lthis.getUrlAutocompletionNomsSci();
// // console.log( url );
// $.getJSON( url, requete, function( data ) {
// var suggestions = lthis.traiterRetourNomsSci( data );
// add( suggestions );
// });
// }
// },
// html: true,
// position : {
// my : 'top',
// at : 'top'
// }
// });
 
// $( '#taxon' ).bind( 'autocompleteselect', this.surAutocompletionTaxon );
// };
 
// WidgetSaisie.prototype.focusChampFormulaire = function() {
// $( '#date_releve' ).focus();
// };
998,32 → 1025,6
$( selector + ' + img.ui-datepicker-trigger' ).appendTo( selector + '-icone.add-on' );
};
 
/* auto completion nom sci */
WidgetSaisie.prototype.ajouterAutocompletionNoms = function() {
var lthis = this;
$( '#taxon' ).autocomplete({
source: function( requete, add ) {
// la variable de requête doit être vidée car sinon le parametre 'term' est ajouté
requete = '';
if( 'autre' !== $( '#referentiel' ).val() ) {
var url = lthis.getUrlAutocompletionNomsSci();
// console.log( url );
$.getJSON( url, requete, function( data ) {
var suggestions = lthis.traiterRetourNomsSci( data );
add( suggestions );
});
}
},
html: true,
position : {
my : 'top',
at : 'top'
}
});
 
$( '#taxon' ).bind( 'autocompleteselect', this.surAutocompletionTaxon );
};
 
WidgetSaisie.prototype.surAutocompletionTaxon = function( event, ui ) {
$( '#taxon' ).data( ui.item );
if ( ui.item.retenu ) {
/trunk/widget/modules/saisie2/squelettes/js/auth.js
1,33 → 1,30
// configuration
// prod :
/*var urlRacine =
'https://www.tela-botanica.org',
config = {
prod: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
}
}
/*var urlRacine = 'https://www.tela-botanica.org',
config = {
prod: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://www.tela-botanica.org/service:annuaire:auth'
}
};
*/
// beta (test) :
var urlRacine =
'https://beta.tela-botanica.org',
config = {
test: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://beta.tela-botanica.org/service:annuaire:auth'
}
}
var urlRacine = 'https://beta.tela-botanica.org',
config = {
test: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://beta.tela-botanica.org/service:annuaire:auth'
}
};
 
// dev (localhost):
/*var urlRacine =
'http://localhost',
config = {
local: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://api.tela-botanica.test/service:annuaire:auth'
}
}
/*var urlRacine = 'http://localhost',
config = {
local: {
urlWidgetNavigation : urlRacine + '/widget:cel:saisie2',
urlBaseAuth : 'https://api.tela-botanica.test/service:annuaire:auth'
}
};
*/
/**
* Charge la barre de navigation depuis le widget:reseau:navigation dans un <div id="tb-navigation"> , s'il existe
54,13 → 51,11
contenu = $div.html();
 
// chargement de la barre
var urlBaseAuth = config[mode]['urlBaseAuth'];
var urlBarreNavigation = config[mode]['urlWidgetNavigation'];
urlBarreNavigation += ( squelette ) ? '?squelette=' + squelette : '';
 
if ( squelette ) {
urlBarreNavigation += '?squelette=' + squelette;
}
 
htmlBarre = $.ajax({
$.ajax({
url: urlBarreNavigation,
type: 'get',
success: function( data ) {
69,8 → 64,7
if ( $zoneSource ) {
$zoneSource.replaceWith( contenu );
// Chargement des informations de connexion SSO
var urlBaseAuth = config[mode]['urlBaseAuth'];
chargerStatutSSO( config[mode]['urlBaseAuth'] );
chargerStatutSSO( urlBaseAuth );
}
},
error: function() {
77,6 → 71,11
$div.html( 'Erreur: impossible de charger la barre de navigation' );
}
});
 
$( '#deconnexion a' ).click( function() {
deconnecterUtilisateur( urlBaseAuth );
});
 
}
});
 
87,6 → 86,7
*/
function definirPageOrigineDansLiens() {
var page = window.location.href;
 
$( '#bouton-connexion a' ).attr( 'href', $( '#bouton-connexion a' ).attr( 'href' ) + page );
$( '#deconnexion a' ).attr( 'href', $( '#deconnexion a' ).attr( 'href' ) + page );
}
97,6 → 97,36
*/
function chargerStatutSSO( urlBaseAuth ) {
var urlAuth = urlBaseAuth + '/identite';
 
if( 'local' !== $( '#tb-navigation' ).data( 'mode' ) ) {
 
connexion( urlAuth, true );
 
} else {
urlAuth ='http://localhost/widget:cel:modules/saisie2/test-token.json';
$( '#connexion' ).click( function() {
connexion( urlAuth, true );
return false;
});
}
}
 
/**
* Déconnecte l'utilisateur du SSO
*/
function deconnecterUtilisateur( urlBaseAuth ) {
if( 'local' === $( '#tb-navigation' ).data( 'mode' ) ) {
definirUtilisateur( undefined );
window.location.reload();
return;
}
 
var urlAuth = urlBaseAuth + '/deconnexion';
 
connexion( urlAuth, false );
}
 
function connexion( urlAuth, connexionOnOff ) {
$.ajax({
url: urlAuth,
type: "GET",
104,42 → 134,87
xhrFields: {
withCredentials: true
}
}).done( function( data ) {
})
.done( function( data ) {
// connecté
if ( undefined !== data.token ) {
definirUtilisateur( data.token );
definirUtilisateur( data.token );
if( !connexionOnOff ) {
window.location.reload();
}
})
.fail( function( error ) {
// @TODO gérer l'affichage de l'erreur, mais pas facile à placer
// dans l'interface actuelle sans que ce soit moche
//afficherErreurServeur();
console.log( error );
});
}
 
 
function definirUtilisateur( jeton ) {
// décodage jeton
var jetonDecode = decoderJeton( jeton );
// console.log(jetonDecode);
var idUtilisateur = '',
nomComplet = '',
courriel = '',
prenom = '',
nom = '';
 
// affichage
if ( undefined !== jeton ) {
// décodage jeton
var jetonDecode = decoderJeton( jeton );
// console.log(jetonDecode);
 
idUtilisateur = jetonDecode.id;
nomComplet = jetonDecode.intitule;
courriel = jetonDecode.sub;
prenom = jetonDecode.prenom;
nom = jetonDecode.nom;
 
$( '#courriel, #courriel_confirmation' ).attr( 'disabled', 'disabled' );
$( '#prenom' ).attr( 'disabled', 'disabled' );
$( '#nom' ).attr( 'disabled', 'disabled' );
$( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
$( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
$( '#date-releve' ).focus();
}
 
$( '.warning' ).remove();
$( '#bouton-connexion, #creation-compte' ).addClass( 'hidden' );
$( '#utilisateur-connecte, #anonyme, #zone-courriel-confirmation, #zone-prenom-nom' ).removeClass( 'hidden' );
$( '#nom-complet' ).html( jetonDecode.intitule );
$( '#courriel, #courriel_confirmation' ).val( jetonDecode.sub ).attr( 'disabled', 'disabled' );
$( '#id_utilisateur' ).val( jetonDecode.id );
$( '#prenom' ).val( jetonDecode.prenom ).attr( 'disabled', 'disabled' );
$( '#nom' ).val( jetonDecode.nom ).attr( 'disabled', 'disabled' );
$( '#date-releve' ).focus();
$( '#nom-complet' ).html( nomComplet );
$( '#courriel, #courriel_confirmation' ).val( courriel );
$( '#id_utilisateur' ).val( idUtilisateur );
$( '#prenom' ).val( prenom );
$( '#nom' ).val( nom );
}
 
/**
* Décodage à l'arrache d'un jeton JWT, ATTENTION CONSIDERE QUE LE
* JETON EST VALIDE, ne pas décoder n'importe quoi - pas trouvé de lib simple
* Si pb de cross-browser, tenter ceci : https://code.google.com/p/javascriptbase64/
* ou ceci : https://code.google.com/p/crypto-js
*/
function decoderJeton( jeton ) {
parts = jeton.split( '.' );
parts = jeton.split( '.' );
payload = parts[1];
payload = payload.replace('-', '+').replace('_', '/');
payload = atob( payload );
payload = b64d( payload );
payload = JSON.parse( payload, true );
 
return payload;
}
 
/**
* Décodage "url-safe" des chaînes base64 retournées par le SSO (lib jwt)
*/
function b64d( input ) {
var remainder = input.length % 4;
 
if ( 0 !== remainder ) {
var padlen = 4 - remainder;
 
for ( var i = 0; i < padlen; i++ ) {
input += '=';
}
}
 
input = input.replace( '-', '+' );
input = input.replace( '_', '/' );
 
return atob( input );
}
/trunk/widget/modules/saisie2/squelettes/saisie.tpl.html
32,15 → 32,10
 
<!-- CSS -->
<link href="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css" rel="stylesheet" type="text/css" media="screen" />
<!-- <link href="https://www.tela-botanica.org/commun/jquery/jquery-ui/1.8.18/css/smoothness/jquery-ui-1.8.18.custom.css" rel="stylesheet" type="text/css" media="screen" /> -->
<!-- Bootstrap CSS -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous" />
<!-- <link href="https://www.tela-botanica.org/commun/bootstrap/2.0.2/css/bootstrap.min.css" rel="stylesheet" type="text/css" media="screen"> -->
<link rel="stylesheet" type="text/css" href="<?= $url_base; ?>modules/saisie2/squelettes/css/bootstrap-4/css/bootstrap.min.css" />
<!-- <link rel="stylesheet" type="text/css" href="https://resources.tela-botanica.org/bootstrap/3.1.0/css/bootstrap.min.css"> -->
<!-- <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> -->
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.1.1/css/all.css" integrity="sha384-O8whS3fhG2OnA5Kas0Y9l3cfpmYjapjI0E4theH4iuMD+pLhbf6JI0jIMfYcK3yZ" crossorigin="anonymous" />
<!-- <link id="telabotanica-style-css" rel="stylesheet" href="https://beta.tela-botanica.org/preprod/wp-content/themes/telabotanica/dist/bundle.css?ver=4.9.7" type="text/css" media="all"> -->
<link href="<?= $url_base; ?>modules/saisie2/squelettes/css/saisie.css" rel="stylesheet" type="text/css" media="screen" />
 
<!-- Google Analytics -->
113,12 → 108,12
<!-- <div id="tb-navigation" data-courant="widget-cel-saisie2" data-squelette="navigation" data-mode="local"> -->
<div class="navbar-default mb-3" id="tb-navbar">
<div class="nav navbar-nav navbar-right row">
<div id="bouton-connexion" class="dropdown col-md-6 col-sm-12">
<div id="bouton-connexion" class="dropdown col-md-6 col-sm-8">
<label for="bouton-connexion">Je me connecte à mon compte : </label>
<a id="connexion" href="<?= $authTpl; ?>" class="btn btn-success mr-1 mb-1" taget="_blank">Connexion</a>
<a id="bouton-inscription" href="https://beta.tela-botanica.org/test/inscription" class="btn btn-primary mr-1 mb-1" taget="_blank">Inscription</a>
</div>
<div id="creation-compte" class="dropdown col-md-6 col-sm-12">
<div id="creation-compte" class="dropdown col-md-6 col-sm-8">
<label for="creation-compte">Je ne souhaite pas m'inscrire : </label>
<a id="bouton-anonyme" href="#" class="btn btn-info mr-1 mb-1">Observation sans inscription</a>
</div>
129,7 → 124,7
</a>
<div class="dropdown-menu">
<div id="profil-utilisateur"><a href="https://beta.tela-botanica.org/test/inscription" taget="_blank">Mon profil</a></div>
<div id="deconnexion"><a href="https://beta.tela-botanica.org/widget:reseau:auth?action=deconnexion&origine=" taget="_blank">Déconnexion</a></div>
<div id="deconnexion"><a href="#">Déconnexion</a></div>
</div>
</div>
</div>
141,7 → 136,7
<div id="zone-courriel" class="row">
<div class="control-group col-md-6">
 
<label for="courriel" class="col-sm-12 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<label for="courriel" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-envelope" aria-hidden="true"></i>
<?= $observateur['courriel']; ?>
</label>
153,7 → 148,7
</div>
<div id="zone-courriel-confirmation" class="control-group col-md-6 hidden">
 
<label for="courriel_confirmation" class="col-sm-12 obligatoire" title="Veuillez confirmer le courriel.">
<label for="courriel_confirmation" class="col-sm-8 obligatoire" title="Veuillez confirmer le courriel.">
<i class="fa fa-envelope" aria-hidden="true"></i>
Courriel (confirmation)
</label>
166,7 → 161,7
<div id="zone-prenom-nom" class="row hidden">
<div class="control-group col-md-6">
 
<label for="prenom" class="col-sm-12">
<label for="prenom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['prenom']; ?>
</label>
177,7 → 172,7
</div>
<div class="control-group col-md-6">
 
<label for="nom" class="col-sm-12">
<label for="nom" class="col-sm-8">
<i class="fa fa-user" aria-hidden="true"></i>
<?= $observateur['nom']; ?>
</label>
223,11 → 218,11
<div id="zone-observation" class="row">
<div class="col-md-6">
<div class="control-group">
<label for="geolocalisation" class="col-sm-12 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<label for="geolocalisation" class="col-sm-8 obligatoire" title="<?= $observateur['courriel-title']; ?>">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['geolocalisation']; ?>
</label>
<div class="col-sm-12 mb-3">
<div class="col-sm-8 mb-3">
<input id="geolocalisation" name="geolocalisation" type="hidden">
<!-- code à décommenter pour avoir un aperçu de la carte qui fonctionne sous chrome,
à remplacer quand Stéphane aura fait une release sur https://github.com/steph-del/tb-geoloc-lib/releases -->
240,7 → 235,7
</div>
</div>
<div class="control-group">
<label for="milieu" class="col-sm-12">
<label for="milieu" class="col-sm-8">
<i class="fa fa-street-view" aria-hidden="true"></i>
<?= $observation['milieu']; ?>
</label>
260,7 → 255,7
<div class="col-md-6">
 
<div class="control-group">
<label for="date_releve" class="col-sm-12 obligatoire" title="">
<label for="date_releve" class="col-sm-8 obligatoire" title="">
<i class="fa fa-calendar" aria-hidden="true"></i>
<?= $observation['date']; ?>
</label>
271,7 → 266,7
 
<?php if( 'referentiel' === $widget['type_especes'] && '' === $widget['referentiel'] ) : ?>
<div class="control-group">
<label for="referentiel" class="col-sm-12 obligatoire" title="">
<label for="referentiel" class="col-sm-8 obligatoire" title="">
<i class="fa fa-book" aria-hidden="true"></i>
<?= $observation['referentiel']; ?>
</label>
295,7 → 290,7
<?php endif; ?>
 
<div class="control-group">
<label for="taxon" class="col-sm-12 obligatoire" title="">
<label for="taxon" class="col-sm-8 obligatoire" title="">
<i class="fa fa-leaf" aria-hidden="true"></i>
<?= $observation['espece']; ?>
</label>
305,7 → 300,7
</div>
 
<div class="control-group">
<label for="certitude" class="col-sm-12 obligatoire" title="">
<label for="certitude" class="col-sm-8 obligatoire" title="">
<i class="fa fa-question" aria-hidden="true"></i>
<?= $observation['certitude']; ?>
</label>
356,13 → 351,22
$default = ( $champ['fieldValues']['default'] )? ' value="' . $champ['fieldValues']['default'] . '"':'';
$description = ( $champ['description'] )? ' title="' . $champ['description'] . '"':'';
$placeholder = ( $champ['fieldValues']['placeholder'] )? ' placeholder="' . $champ['fieldValues']['placeholder'] . '"':'';
$help = ( $champ['help'] )? ' and-help':'';
$required = '';
$mandatory = '';
$datepicker = '';
$pattern = '';
$obs_radio = '';
$help = '';
$help_button = '';
 
if( /*true*/$champ['help'] ) {
$help = ' and-help';
// TODO récupérer un $champ['help_mime_type']
// $champ['help_mime_type'] = 'application/pdf';
$champ['help_mime_type'] = 'image.*';
$help_button = ' <div class="help-button help-' . $champ['key'] . ' btn btn-outline-info btn-sm border-0" data-key="' . $champ['key'] . '" data-name="' . $champ['name'] . '" data-mime-type="' . $champ['help_mime_type'] . '"><i class="fas fa-info-circle"></i></div>';
}
 
if( $champ['mandatory'] ) {
// Attr required
$required = ' required';
379,8 → 383,8
case 'radio':
case 'checkbox': ?>
<div class="control-group <?= $champ['element']; ?> mb-3"<?php echo $description . $required; ?>>
<div class="col-sm-12 list-label<?php echo $help . $mandatory; ?>">
<?= $champ['name']; ?>
<div class="col-sm-8 list-label<?php echo $help . $mandatory; ?>">
<?= $champ['name'] . $help_button; ?>
</div>
<div class="col-sm-8">
 
401,7 → 405,7
</label>
<?php else : ?>
<label for="other-<?= $champ['key']; ?>">
<input type="<?= $champ['element']; ?>" id="other-<?= $champ['key']; ?>"'name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
<input type="<?= $champ['element']; ?>" id="other-<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" value="other" class="other" data-label="<?= $champ['name']; ?>" data-element="<?= $champ['element']; ?>">
Autre
</label>
<?php endif; ?>
414,7 → 418,7
 
case 'list-checkbox': ?>
<div class="multiselect <?php echo $champ['element'] . $help; ?>">
<label class="col-sm-12<?= $mandatory; ?>"><?= $champ['name']; ?></label>
<label class="col-sm-8<?= $mandatory; ?>"><?= $champ['name'] . $help_button; ?></label>
<div class="control-group col-sm-8 mb-3">
<div class="selectBox">
<select class="form-control" id="list-checkbox-<?= $champ['key']; ?>"<?php echo $description . $required; ?> class="form-control">
453,7 → 457,7
<?php break;
 
case 'select': ?>
<label for="<?= $champ['key']; ?>" class="col-sm-12<?= $mandatory; ?>"<?= $description; ?>><?= $champ['name']; ?></label>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>"<?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="champ col-sm-8 mb-3">
<div class="select-wrapper add-field-select <?php echo $champ['element'] . $help; ?>">
<select name="<?= $champ['key']; ?>" id="<?= $champ['key']; ?>" class="<?= $champ['key']; ?> form-control"<?= $required; ?> data-label="<?= $champ['name']; ?>">
484,7 → 488,7
<?php break;
 
case 'file' : ?>
<div class="control-group col-sm-12 mb-3">
<div class="control-group col-sm-8 mb-3">
<div class="input-file-container<?= $help; ?>">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?php echo $champ['key'] . ' input-file'; ?> form-control" <?php echo $description . $placeholder . $required; ?> accept="application/pdf, image/*, video/*" data-label="<?= $champ['name']; ?>">
<label for="<?= $champ['key']; ?>" class="label-file<?= $mandatory; ?>" <?= $description; ?>><i class="fas fa-download" aria-hidden="true"></i> <?= $champ['name']; ?></label>
499,7 → 503,7
 
case 'textarea': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-12<?php echo $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name']; ?></label>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<textarea type="<?= $champ['element']; ?>" id="<?= $champ['key']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>"></textarea>
</div>
508,7 → 512,7
 
case 'range': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-12<?= $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name']; ?></label>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $help . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
518,7 → 522,7
case 'number':
case 'date': ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-12<?php echo $datepicker . $mandatory; ?>" <?= $description; ?>><?= $champ['name']; ?></label>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?php echo $datepicker . $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help . $datepicker; ?> form-control"<?php echo $pattern . $description . $placeholder . $step . $default . $min . $max . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
529,7 → 533,7
case 'email':
default: ?>
<div class="control-group">
<label for="<?= $champ['key']; ?>" class="col-sm-12<?= $mandatory; ?>" <?= $description; ?>><?= $champ['name']; ?></label>
<label for="<?= $champ['key']; ?>" class="col-sm-8<?= $mandatory; ?>" <?= $description; ?>><?= $champ['name'] . $help_button; ?></label>
<div class="col-sm-8 mb-3">
<input type="<?= $champ['element']; ?>" name="<?= $champ['key']; ?>" class="<?= $champ['key'] . $help; ?> form-control" <?php echo $description . $placeholder . $required; ?> data-label="<?= $champ['name']; ?>">
</div>
687,8 → 691,24
</footer>
</div>
</div>
<div id="help-modal" class="modal fade" tabindex="-1" role="dialog" aria-labelledby="help-modal-label" style="display: none;" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="help-modal-label"></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body" id="print_content"></div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fermer</button>
</div>
</div>
</div>
</div>
<!-- Jquery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.1.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/1.11.1/jquery-1.11.1.min.js"></script>
 
<!-- Jquery UI : nécessaire pour le minicalendrier et l'auto-complétion -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/jquery-ui/1.11.0/js/jquery-ui.min.js"></script>
696,15 → 716,12
<!-- Jquery Plugins -->
<!-- Jquery Validate : nécessaire pour la validation des formulaires -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/jquery.validate.min.js"></script>
<!-- <script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/jquery.validate-patched.min.js"></script> -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/additional-methods.min.js"></script>
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/validate/1.11.1/messages_fr.js"></script>
<!-- Jquery Form :nécessaire pour l'upload des images -->
<script type="text/javascript" src="https://resources.tela-botanica.org/jquery/form/3.51/jquery.form.min.js"></script>
<!-- Bootstrap -->
<!-- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script> -->
<!-- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script> -->
<script type="text/javascript" src="https://resources.tela-botanica.org/bootstrap/2.3.2/js/bootstrap.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<!-- Authentification -->
<script type="text/javascript" src="<?= $url_base; ?>modules/saisie2/squelettes/js/auth.js"></script>
<!-- Connexion, bloc de prévisualisation, date -->
/trunk/widget/modules/saisie2/squelettes/css/saisie.css
673,6 → 673,10
display: inline-block;
}
 
.help-button {
float: right;
}
 
/*************************************/
 
@media screen and ( max-width: 765px ) {