NxTIC/js/lib/reset.js

157 lines
4.3 KiB
JavaScript
Executable File

/* SELECTOR ALIASES */
function $(selector){ return document.querySelector(selector); }
function $$(selector){ return document.querySelectorAll(selector); }
/* Retourne un data-* attribute d'un element (surcharge de l'ELEMENT natif)
*
* @attribute<String> L'attribut qui nous interesse
*
* @return value<String> Retourne la valeur si l'attribut existe
* @return false Retourne FALSE si rien n'a ete trouve
*
*
*/
Element.prototype.getData = function(attribute){
// On verifie qu'un data-* attribute existe
if( typeof this.dataset == 'undefined' )
return false;
return ( this.dataset.hasOwnProperty(attribute) ) ? this.dataset[attribute] : false;
};
/* Ajout de classe pour un element (surcharge de l'ELEMENT natif)
*
* @className<String> Classe a ajouter a l'element
*
*/
Element.prototype.addClass = function(className){
/* [1] On transforme la classe actuelle en tableau
====================================================*/
var classArray = this.className.split(' ');
/* [2] On ajoute la classe si elle n'y est pas deja
====================================================*/
if( classArray.indexOf(className) > -1 ) return; // La classe y est deja
classArray.push(className);
/* [3] On reformatte tout
====================================================*/
this.className = classArray.join(' ').trim();
};
/* Suppression de classe pour un element (surcharge de l'ELEMENT natif)
*
* @className<String> Classe a supprimer a l'element
*
*/
Element.prototype.remClass = function(className){
/* [1] On transforme la classe actuelle en tableau
====================================================*/
var classArray = this.className.split(' ');
/* [2] On retire la classe si elle y est
====================================================*/
var index = classArray.indexOf(className);
if( index == -1 ) return; // La classe n'y est pas
classArray = classArray.slice(0,index).concat( classArray.slice(index+1) );
/* [3] On reformatte tout
====================================================*/
this.className = classArray.join(' ').trim();
};
// on définit le "indexOf" pour <HTMLCollection> et <NodeList>
NodeList.prototype.indexOf = HTMLCollection.prototype.indexOf = function(searchedElement){
for( var i = 0 ; i < this.length ; i++ ) // on parcours la collection
// si on trouve l'élement, on retourne son rang
if( this[i] == searchedElement ) return i;
// si on a rien trouvé, on retourne -1
return -1;
};
// GESTION DES ANIMATIONS (CLASSE PENDANT TEMPS IMPARTI)
Element.prototype.anim = function(className, timeout){
var pointer = this; // on cree un pointeur
pointer.addClass(className); // on met la classe
// on la retire apres le @timeout imparti
setTimeout(function(){ pointer.remClass(className); }, timeout);
};
// INCLUSION D'UN SCRIPT JAVASCRIPT
var includes = [];
var includeTags = [];
function include(jsResource, callback, action){ // action=true -> EXCLUSION, SINON -> INCLUSION
/* (0) On formatte les arguments */
jsResource = typeof jsResource === 'string' ? jsResource : null;
callback = typeof callback === 'function' ? callback : function(){ console.log('[x] '+jsResource+' loaded'); };
action = typeof action === 'boolean' ? action : false;
// Si la ressource n'est pas donnée
if( jsResource == null ) return false;
/* (1) Gestion de l'inclusion */
if( !action ){
// Si le fichier est déja inclus, on lance le callback
if( includes.indexOf(jsResource) > -1 ){
callback();
return true;
}
// On crée l'élément dans le tag <head>
var tag = document.createElement('script');
tag.type = 'text/javascript';
tag.src = jsResource;
document.head.appendChild( tag );
// On ajoute la ressource et le tag à la liste
includes.push(jsResource);
includeTags.push(tag);
// On définit le callback
tag.onload = callback;
return true;
/* (2) Gestion de l'exclusion */
}else{
var index = includes.indexOf(jsResource);
// On vérifie que le fichier est déja inclus
if( index == -1 ) return false;
// On supprime l'élément
document.head.removeChild( includeTags[index] );
// On dé-indexe l'élément
includes.splice(index, 1);
includeTags.splice(index, 1);
return true;
}
}
/* DEFINITION DES FORMATS UTILES POUR INPUT-CHECKER
*
*/
// Numéro de téléphone
var format_number = new formatChecker(null, '0i ii ii ii ii' );