/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', |
/*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', |
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', |
/*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 ); |
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 ) { |
var idUtilisateur = '', |
nomComplet = '', |
courriel = '', |
prenom = '', |
nom = ''; |
// affichage |
if ( undefined !== jeton ) { |
// décodage jeton |
var jetonDecode = decoderJeton( jeton ); |
// console.log(jetonDecode); |
// affichage |
$( '.warning' ).remove(); |
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' ); |
$( '#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(); |
} |
$( '.warning' ).remove(); |
$( '#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( '.' ); |
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 ); |
} |