« MediaWiki:Common.js » : différence entre les versions
Jump to navigation
Jump to search
(Nouvelle page : →Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. : // remove original createCollapseButtons functions from onload hook for demo var c...) |
Aucun résumé des modifications |
||
| (20 versions intermédiaires par 4 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */ |
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */ |
||
// remove original createCollapseButtons functions from onload hook for demo |
|||
// ============================================================ |
|||
var createCollapseButtonsOrig = createCollapseButtons; |
|||
//////////// FONCTION : .indexOf (Patch IE) ////////////// |
|||
for (var i = 0; i < onloadFuncts.length; i ++) { |
|||
if (onloadFuncts[i] == createCollapseButtonsOrig) { |
|||
if (!Array.indexOf) { |
|||
onloadFuncts.splice(i, 1); |
|||
Array.prototype.indexOf = function(obj,idx) { |
|||
var len = this.length; |
|||
if (len == 0) return -1; |
|||
if (!idx) idx = 0; |
|||
while (idx < 0) idx = len + idx; |
|||
for (var i = 0; i < len; i++) |
|||
if (this[i] == obj) |
|||
return i; |
|||
return -1; |
|||
} |
} |
||
} |
} |
||
// ============================================================ |
|||
addOnloadHook( |
|||
function() { |
|||
// ============================================================ |
|||
for (var i = 0; i < onloadFuncts.length; i ++) { |
|||
//////////// FONCTION : .HTMLize (évite des attaques XSS) ////////////// |
|||
if (onloadFuncts[i] == createCollapseButtonsOrig) { |
|||
if(!String.HTMLize){ |
|||
onloadFuncts.splice(i, 1); |
|||
String.prototype.HTMLize = function() { |
|||
} |
|||
var chars = new Array('&','<','>','"'); |
|||
} |
|||
var entities = new Array('amp','lt','gt','quot'); |
|||
var string = this; |
|||
for (var i=0; i<chars.length; i++) { |
|||
var regex = new RegExp(chars[i], "g"); |
|||
string = string.replace(regex, '&' + entities[i] + ';'); |
|||
} |
} |
||
return string; |
|||
); |
|||
/** Collapsible tables ********************************************************* |
|||
* |
|||
* Description: Allows tables to be collapsed, showing only the header. See |
|||
* [[Wikipedia:NavFrame]]. |
|||
* Maintainers: [[User:R. Koot]] |
|||
* Changed for better usability by [[User:Cacycle]] |
|||
*/ |
|||
var autoCollapseTest = 2; |
|||
var expandCaptionTest = '<a class="collapseButtonContent"><span class="collapseButtonShow"> </span>afficher</a>'; |
|||
var collapseCaptionTest = '<a class="collapseButtonContent"><span class="collapseButtonHide"> </span>masquer</a>'; |
|||
var expandTitle = 'Afficher le contenu masqué'; |
|||
var collapseTitle = 'Masquer le contenu'; |
|||
// detect MS-IE < 7 |
|||
if (window.showModalDialog && window.clipboardData && window.createPopup) { |
|||
// ignore MS-IE >= 7 in compatibility mode |
|||
var agent = navigator.userAgent.match(/(MSIE)\W+(\d+\.\d+)/i); |
|||
if ( (agent == null) || (parseFloat(agent[2]) < 7) ) { |
|||
expandCaptionTest = '<a class="collapseButtonContent"><span class="collapseButtonShowIE6"> </span>afficher</a>'; |
|||
collapseCaptionTest = '<a class="collapseButtonContent"><span class="collapseButtonHideIE6"> </span>masquer</a>'; |
|||
} |
} |
||
} |
} |
||
// ============================================================ |
|||
// ================================================================================================== |
|||
collapseTableTest = function( tableIndex ) |
|||
//////////// FONCTIONS RELATIVES AUX COOKIES ////////////// |
|||
{ |
|||
function setCookie (cookieName, cookieValue, expires, path) { |
|||
var Button = document.getElementById( "collapseButton" + tableIndex ); |
|||
document.cookie = escape(cookieName) + '=' + escape(cookieValue) + (expires ? '; EXPIRES=' + expires.toGMTString() : '') + "; PATH=/" ; |
|||
var Table = document.getElementById( "collapsibleTable" + tableIndex ); |
|||
} |
|||
if ( !Table || !Button ) { |
|||
function getCookie(cookieName) { |
|||
var cookieValue = null; |
|||
var posName = document.cookie.indexOf(escape(cookieName) + '=' ); |
|||
if (posName != -1) { |
|||
var posValue = posName + (escape(cookieName) + '=' ).length; |
|||
var endPos = document.cookie.indexOf(';', posValue) ; |
|||
if (endPos != -1) { |
|||
cookieValue = unescape(document.cookie.substring(posValue, endPos)); |
|||
} else { |
|||
cookieValue = unescape(document.cookie.substring(posValue)); |
|||
} |
|||
} |
|||
return decodeURIComponent(cookieValue); |
|||
} |
|||
// ============================================================ |
|||
// ============================================================ |
|||
//////////// FONCTIONS : MANIPULATION DE CLASSES ////////////// |
|||
function hasClass(node, className) { |
|||
if (node.className == className) { |
|||
return true; |
|||
} |
|||
var reg = new RegExp('(^| )'+ className +'($| )') |
|||
if (reg.test(node.className)) { |
|||
return true; |
|||
} |
|||
return false; |
|||
} |
|||
function addClass(node, className) { |
|||
if (hasClass(node, className)) { |
|||
return false; |
return false; |
||
} |
} |
||
node.className += ' '+ className; |
|||
return true; |
|||
} |
|||
function removeClass(node, className) { |
|||
var Rows = Table.rows; |
|||
if (!hasClass(node, className)) { |
|||
return false; |
|||
} |
|||
node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className); |
|||
return true; |
|||
} |
|||
function eregReplace(search, replace, subject) { |
|||
if ( Button.title == collapseTitle ) { |
|||
return subject.replace(new RegExp(search,'g'), replace); |
|||
for ( var i = 1; i < Rows.length; i++ ) { |
|||
} |
|||
Rows[i].style.display = "none"; |
|||
} |
|||
// ============================================================ |
|||
Button.innerHTML = expandCaptionTest; |
|||
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D'UN ELEMENT ////////////// |
|||
Button.title = expandTitle; |
|||
function getTextContent(oNode) { |
|||
} else { |
|||
if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;} |
|||
for ( var i = 1; i < Rows.length; i++ ) { |
|||
switch (oNode.nodeType) { |
|||
Rows[i].style.display = Rows[0].style.display; |
|||
case 3: // TEXT_NODE |
|||
case 4: // CDATA_SECTION_NODE |
|||
Button.innerHTML = collapseCaptionTest; |
|||
return oNode.nodeValue; |
|||
break; |
|||
case 7: // PROCESSING_INSTRUCTION_NODE |
|||
case 8: // COMMENT_NODE |
|||
if (getTextContent.caller!=getTextContent) { |
|||
return oNode.nodeValue; |
|||
} |
|||
break; |
|||
case 9: // DOCUMENT_NODE |
|||
case 10: // DOCUMENT_TYPE_NODE |
|||
case 12: // NOTATION_NODE |
|||
return null; |
|||
break; |
|||
} |
|||
var _textContent = ""; |
|||
oNode = oNode.firstChild; |
|||
while (oNode) { |
|||
_textContent += getTextContent(oNode); |
|||
oNode = oNode.nextSibling; |
|||
} |
|||
return _textContent; |
|||
} |
|||
// =============================================== |
|||
// =============================================== |
|||
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE ////////////// |
|||
function insertAfter(element, reference) { |
|||
if(reference.nextSibling!=null){ |
|||
reference.parentNode.insertBefore(element, reference.nextSibling); |
|||
}else{ |
|||
reference.parentNode.appendChild(element); |
|||
} |
} |
||
window.getSelection().removeAllRanges(); |
|||
} |
} |
||
// =============================================== |
|||
// =============================================== |
|||
//////////// FONCTION : DECODE LE HTML ISSU D'UNE REQUETE API ////////////// |
|||
function API_HTMLDecode(text){ |
|||
var EncodedCharacter = new Array(); |
|||
var DecodedCharacter = new Array(); |
|||
var CharacterCount = 0; |
|||
EncodedCharacter[CharacterCount] = "&"; |
|||
function createCollapseButtonsTest() |
|||
DecodedCharacter[CharacterCount] = "&"; |
|||
{ |
|||
CharacterCount++; |
|||
var tableIndex = 0; |
|||
EncodedCharacter[CharacterCount] = "'"; |
|||
var NavigationBoxes = new Object(); |
|||
DecodedCharacter[CharacterCount] = "'"; |
|||
var Tables = document.getElementsByTagName( "table" ); |
|||
CharacterCount++; |
|||
EncodedCharacter[CharacterCount] = """; |
|||
DecodedCharacter[CharacterCount] = '"'; |
|||
CharacterCount++; |
|||
for |
for(var a=0;a<EncodedCharacter.length;a++){ |
||
while(text.indexOf(EncodedCharacter[a])!=-1){ |
|||
text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]); |
|||
if(text.indexOf(EncodedCharacter[a])==-1) break; |
|||
// only add button and increment count if there is a header row to work with |
|||
var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0]; |
|||
if (!HeaderRow) continue; |
|||
var Header = HeaderRow.getElementsByTagName( "th" )[0]; |
|||
if (!Header) continue; |
|||
// insert space-balancing empty span left of the title |
|||
var span = document.createElement('span'); |
|||
span.className = 'collapseButtonBalance'; |
|||
Header.insertBefore(span, Header.lastChild); |
|||
NavigationBoxes[ tableIndex ] = Tables[i]; |
|||
Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex ); |
|||
// Styles are declared in Common.css |
|||
Header.innerHTML += '<span id="collapseButton' + tableIndex + '" class="collapseButtonTest" onclick="javascript:collapseTableTest(' + tableIndex + ')" title="' + collapseTitle + '">' + collapseCaptionTest + '</span>'; |
|||
tableIndex++; |
|||
} |
|||
} |
|||
for ( var i = 0; i < tableIndex; i++ ) { |
|||
if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapseTest && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) { |
|||
collapseTableTest( i ); |
|||
} |
|||
else if ( hasClass( NavigationBoxes[i], "innercollapse" ) ) { |
|||
var element = NavigationBoxes[i]; |
|||
while (element = element.parentNode) { |
|||
if ( hasClass( element, "outercollapse" ) ) { |
|||
collapseTableTest ( i ); |
|||
break; |
|||
} |
|||
} |
} |
||
} |
|||
return text; |
|||
} |
} |
||
// =============================================== |
|||
addOnloadHook(createCollapseButtonsTest); |
|||
Dernière version du 2 décembre 2023 à 14:36
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */
// ============================================================
//////////// FONCTION : .indexOf (Patch IE) //////////////
if (!Array.indexOf) {
Array.prototype.indexOf = function(obj,idx) {
var len = this.length;
if (len == 0) return -1;
if (!idx) idx = 0;
while (idx < 0) idx = len + idx;
for (var i = 0; i < len; i++)
if (this[i] == obj)
return i;
return -1;
}
}
// ============================================================
// ============================================================
//////////// FONCTION : .HTMLize (évite des attaques XSS) //////////////
if(!String.HTMLize){
String.prototype.HTMLize = function() {
var chars = new Array('&','<','>','"');
var entities = new Array('amp','lt','gt','quot');
var string = this;
for (var i=0; i<chars.length; i++) {
var regex = new RegExp(chars[i], "g");
string = string.replace(regex, '&' + entities[i] + ';');
}
return string;
}
}
// ============================================================
// ==================================================================================================
//////////// FONCTIONS RELATIVES AUX COOKIES //////////////
function setCookie (cookieName, cookieValue, expires, path) {
document.cookie = escape(cookieName) + '=' + escape(cookieValue) + (expires ? '; EXPIRES=' + expires.toGMTString() : '') + "; PATH=/" ;
}
function getCookie(cookieName) {
var cookieValue = null;
var posName = document.cookie.indexOf(escape(cookieName) + '=' );
if (posName != -1) {
var posValue = posName + (escape(cookieName) + '=' ).length;
var endPos = document.cookie.indexOf(';', posValue) ;
if (endPos != -1) {
cookieValue = unescape(document.cookie.substring(posValue, endPos));
} else {
cookieValue = unescape(document.cookie.substring(posValue));
}
}
return decodeURIComponent(cookieValue);
}
// ============================================================
// ============================================================
//////////// FONCTIONS : MANIPULATION DE CLASSES //////////////
function hasClass(node, className) {
if (node.className == className) {
return true;
}
var reg = new RegExp('(^| )'+ className +'($| )')
if (reg.test(node.className)) {
return true;
}
return false;
}
function addClass(node, className) {
if (hasClass(node, className)) {
return false;
}
node.className += ' '+ className;
return true;
}
function removeClass(node, className) {
if (!hasClass(node, className)) {
return false;
}
node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
return true;
}
function eregReplace(search, replace, subject) {
return subject.replace(new RegExp(search,'g'), replace);
}
// ============================================================
//////////// FONCTION : RECUPERE LE CONTENU TEXTUEL D'UN ELEMENT //////////////
function getTextContent(oNode) {
if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
switch (oNode.nodeType) {
case 3: // TEXT_NODE
case 4: // CDATA_SECTION_NODE
return oNode.nodeValue;
break;
case 7: // PROCESSING_INSTRUCTION_NODE
case 8: // COMMENT_NODE
if (getTextContent.caller!=getTextContent) {
return oNode.nodeValue;
}
break;
case 9: // DOCUMENT_NODE
case 10: // DOCUMENT_TYPE_NODE
case 12: // NOTATION_NODE
return null;
break;
}
var _textContent = "";
oNode = oNode.firstChild;
while (oNode) {
_textContent += getTextContent(oNode);
oNode = oNode.nextSibling;
}
return _textContent;
}
// ===============================================
// ===============================================
//////////// FONCTION : INSERE UN ELEMENT APRES UN ELEMENT DE REFERENCE //////////////
function insertAfter(element, reference) {
if(reference.nextSibling!=null){
reference.parentNode.insertBefore(element, reference.nextSibling);
}else{
reference.parentNode.appendChild(element);
}
}
// ===============================================
// ===============================================
//////////// FONCTION : DECODE LE HTML ISSU D'UNE REQUETE API //////////////
function API_HTMLDecode(text){
var EncodedCharacter = new Array();
var DecodedCharacter = new Array();
var CharacterCount = 0;
EncodedCharacter[CharacterCount] = "&";
DecodedCharacter[CharacterCount] = "&";
CharacterCount++;
EncodedCharacter[CharacterCount] = "'";
DecodedCharacter[CharacterCount] = "'";
CharacterCount++;
EncodedCharacter[CharacterCount] = """;
DecodedCharacter[CharacterCount] = '"';
CharacterCount++;
for(var a=0;a<EncodedCharacter.length;a++){
while(text.indexOf(EncodedCharacter[a])!=-1){
text = text.split(EncodedCharacter[a]).join(DecodedCharacter[a]);
if(text.indexOf(EncodedCharacter[a])==-1) break;
}
}
return text;
}
// ===============================================
Ce que tu peux faire
Outils

Outils personnels