Usuário:Elfix/vector.js: diferenças entre revisões

Conteúdo apagado Conteúdo adicionado
Elfix (discussão | contribs)
nova página: //une extension de Date pour qu'il comprenne le format ISO8601 utilisé par l'API (ya une fonction native mais seulement sur firefox 3.5+) // http://dansnetwork.c...
 
Elfix (discussão | contribs)
downgrade
Linha 1:
/*
//une extension de Date pour qu'il comprenne le format ISO8601 utilisé par l'API (ya une fonction native mais seulement sur firefox 3.5+)
Auteur : user:Darkoneko
// http://dansnetwork.com/2008/11/01/javascript-iso8601rfc3339-date-parser/
tous les id css et fonctions js non génériques sont préfixées de nekotb_fc (pour "NEKO ToolBox - Fusionneur de Contribs")
Date.prototype.setISO8601 = function(dString){
afin d'éviter toute possibilité de conflit de noms avec d'autres scripts.
var regexp = /(\d\d\d\d)(-)?(\d\d)(-)?(\d\d)(T)?(\d\d)(:)?(\d\d)(:)?(\d\d)?(Z)/;
*/
if (dString.toString().match(new RegExp(regexp))) {
var d = dString.match(new RegExp(regexp));
var offset = 0;
function nekotb_fc_addLinkToLeftBar() {
this.setUTCDate(1);
var ul = document.getElementById("p-navigation").getElementsByTagName("ul")[0]
this.setUTCFullYear(parseInt(d[1],10));
var li = document.createElement("li")
this.setUTCMonth(parseInt(d[3],10) - 1);
li.appendChild( createAdressNode( '#', '@Fusion contribs', 'return nekotb_fc_init()' ) )
this.setUTCDate(parseInt(d[5],10));
ul.appendChild( li )
this.setUTCHours(parseInt(d[7],10));
this.setUTCMinutes(parseInt(d[9],10));
this.setUTCSeconds(parseInt(d[11],10));
}
else {
this.setTime(Date.parse(dString));
}
return this;
};
Date.prototype.getYYYYMMDD = function(){
var month = this.getMonth()+1
if(month < 10) month = "0"+month
var day = this.getDate()
if(day < 10) day = "0"+day
return ( this.getFullYear() +"-"+ month +"-"+ day );
};
//essai d'extension du DOM Element. ça rend de facto le script incompatible avec IE7- et Safari 2
Element.prototype.createAndAppendTextNode = function(p_txt) {
return this.appendChild( document.createTextNode( p_txt ) )
}
addOnloadHook(nekotb_fc_addLinkToLeftBar)
//creation d'un element + attributs + éventuels node texte dedans ; et ajout au node parent
Element.prototype.createAndAppendElement = function(p_el, p_attributs, p_textnode) {
var xx = this.appendChild( document.createElement( p_el ) )
for(key in p_attributs) {
xx.setAttribute( key , p_attributs[key] )
}
if(p_textnode) {
xx.createAndAppendTextNode( p_textnode )
}
return xx
}
//utilisés pour la coloration des lignes de chaque user
//supprime tous les sous nodes d'un node (pas besoin d'être récursif).
var nekotb_fc_bgcolor_list = new Array(
Element.prototype.removeChildNodes = function() {
while (this.hasChildNodes() ) {
this.removeChild(this.firstChild);
}
}
/*
Auteur : user:Darkoneko
tous les id css sont préfixées de nekotb_fc (pour "NEKO ToolBox - Fusionneur de Contribs") pour eviter les conflits avec d'autres scripts
*/
var nekotb_fc = new Object()
nekotb_fc.bgcolor_list = new Array( //utilisés pour la coloration des lignes de chaque user
"lightblue",
"yellow",
"orange",
"lightgreen",
"white",
"#FCC",
"#BBBCCC",
"lightyellow"
) //note : pas de virgule après le dernier terme ou ça plante !
var nekotb_fc_user_count = 0;
function nekotb_fc_init() {
//titre de l'outil
document.getElementById("firstHeading").firstChild.nodeValue = "Neko toolbox : fusionneur de contribs, v1.0.2 du 03/12/2010"
var content = document.getElementById("bodyContent")
removeChildNodes(content) //supprimer le contenu initial de la zone 'article".
var root = content.appendChild( document.createElement("div") )
nekotb_fc.user_list = new Array() //stocke la liste des utilisateurs fusionnés
root.id = "nekotb_fc_formulaire"
nekotb_fc.contrib_limit_per_user = 7500; //nb max de contribs récupérées par compte
nekotb_fc.edit_clash_limit = 5; //(en minutes) espacement sous lequel des edits de 2 comptes différents sont considérés comme en collision
nekotb_fc.timeline_nb_day_per_line = 5 //nombre de jours affichés par ligne (en + du nom des comptes) en mode timeline
//choix de date
nekotb_fc.oldest_timestamp = false;
curDate = new Date();
nekotb_fc.newest_timestamp = false;
root.appendChild( document.createTextNode("Fusionner entre le ") )
nekotb_fc.user_contribs = new Array()
nekotb_fc.every_contrib_ordered = new Array()
var temp = root.appendChild( document.createElement("input") )
temp.id = "nekotb_fc_date_debut"
temp.value = curDate.getFullYear()+"-01-01" //date par défaut
root.appendChild( document.createTextNode(" et le ") )
nekotb_fc.addLinkToLeftBar = function() {
var ul = document.getElementById("p-navigation").getElementsByTagName("ul")[0]
var li = ul.createAndAppendElement("li")
li.createAndAppendElement( "a", {href:'#', 'onclick':"return nekotb_fc.init()"}, '@Fusion contribs' )
temp = root.appendChild( document.createElement("input") )
}
temp.id = "nekotb_fc_date_fin"
addOnloadHook(nekotb_fc.addLinkToLeftBar)
temp.value = curDate.getFullYear()+"-12-31" //date par défaut
root.appendChild( document.createElement("hr") )
//ajout des users
var form = root.appendChild( document.createElement("form") )
temp = form.appendChild( document.createElement("input") )
temp.id = "nekotb_fc_user_input"
form.appendChild( document.createTextNode(" ") )
temp = form.appendChild( document.createElement("input") )
temp.type = "submit"
temp.value = "ajouter cet utilisateur"
form.setAttribute("onsubmit", "return nekotb_fc_add_user();");
temp = root.appendChild( document.createElement("ul") ) //la liste des users ajoutés sera affichée dans cet element
nekotb_fc.init = function() {
temp.id = "nekotbfc_liste_users"
document.getElementById("firstHeading").firstChild.nodeValue = "Neko toolbox : fusionneur de contribs, v1.1.beta du 12/12/2010"
var content =root.appendChild( document.getElementByIdcreateElement("bodyContenthr") )
root.appendChild( createAdressNode("#", "lancer la fusion", "return nekotb_fc_show_fusion()") )
content.removeChildNodes() //supprimer le contenu initial de la zone 'article".
root.appendChild( document.createElement("hr") )
var root = content.createAndAppendElement("div", {'id':"nekotb_fc_formulaire"} )
root.appendChild( nekotb_fc_make_help() ) //afficher l'aide
root.createAndAppendElement("h2", {}, "Zone temporelle à inspecter")
}
//on laisse à l'user le choix dans la date
curYear = new Date().getFullYear();
root.createAndAppendTextNode("Fusionner entre le ")
root.createAndAppendElement("input", {'id':"nekotb_fc_date_debut", 'value':curYear+"-01-01"} )
root.createAndAppendTextNode(" et le ")
root.createAndAppendElement("input", {'id':"nekotb_fc_date_fin", 'value':curYear+"-12-31"})
root.createAndAppendElement("h2", {}, "Comptes à fusionner")
// l'aide
//ajout des users
function nekotb_fc_make_help() {
var form = root.createAndAppendElement("form", {"onsubmit":"return nekotb_fc.add_user();"} )
var div = document.createElement("div")
form.createAndAppendElement("input", {'id':"nekotb_fc_user_input"} )
form.createAndAppendTextNode(" (appuyez sur entrée pour ajouter)")
div.appendChild( document.createTextNode(
root.createAndAppendElement("ul", {'id':"nekotbfc_liste_users"} ) //la liste des users ajoutés sera affichée dans cet element
"Ici l'aide de l'utilitaire. Sera plus détaillé dans une prochaine version... :)"
root.createAndAppendElement("hr")
) )
root.createAndAppendElement( "a", { href:"#", "onclick":"return nekotb_fc.show_fusion()" }, "=> lancer la fusion <=" )
div.appendChild( document.createElement("br") )
div.appendChild( document.createElement("br") )
div.appendChild( document.createTextNode(
"le fusionneur de contribs permet d'afficher simultanément les contributions de plusieurs utilisateurs,"
+ " classée par ordre antéchronologique. Les contribs de chaque utilisateurs sont différenciées par une couleur de fond différente. Cet outil sert typiquement dans la détection de faux nez"
) )
div.appendChild( document.createElement("br") )
div.appendChild( document.createTextNode(
//réglages divers
"Les dates sont [jour indiqué inclu] et à indiquer au format yyyy-mm-dd (année-mois-jour). Vérifiez bien"
root.createAndAppendElement("h2", {}, "Réglages optionnels divers")
) )
return div
root.createAndAppendElement("h3", {}, "Nombre max de contributions récupérées par utilisateur")
root.createAndAppendElement("input", { 'id' : "nekotb_fc_contrib_limit_per_user", "value": nekotb_fc.contrib_limit_per_user } )
root.createAndAppendTextNode(" (sera arrondi au multiple de 500 supérieur)")
root.createAndAppendElement("h3", {}, "indicateur de collisions")
root.createAndAppendTextNode("Ecart maximal de temps pour que des éditions de 2 users différents soient considérées comme entrant en 'collision' : ")
root.createAndAppendElement("br")
root.createAndAppendElement("input", { 'id' : "nekotb_fc_edit_clash_limit", "value":nekotb_fc.edit_clash_limit })
root.createAndAppendTextNode(" minutes")
root.createAndAppendElement("h3", {}, "timeline")
root.createAndAppendTextNode("Nombre de jours par ligne")
root.createAndAppendElement("br")
root.createAndAppendElement("input", { 'id' : "nekotb_fc_timeline_nb_day_per_line", "value":nekotb_fc.timeline_nb_day_per_line })
return false
}
function nekotb_fc_add_user() {
nekotb_fc.add_user = function() {
var input = document.getElementById("nekotb_fc_user_input")
var name = input.value
input.value = '' //on vide le champ
if(name.length < 1 ) return false //si champ vide, on ignore silencieusement
if(name.length < 1 ) return false //si champ vide, on ignore
var ul = document.getElementById("nekotbfc_liste_users")
var li = ul.appendChild( document.createElement("li") )
var randomNumber = Math.floor(Math.random()*100001) //generation d'un id [a priori] unique, comme le nom peut contenir des chars non valides
var randomNumber = Math.floor(Math.random()*100001)
var li = ul.createAndAppendElement("li", {'id':"nekotb_fc_"+randomNumber, "onclick":"nekotb_fc.remove_user('nekotb_fc_"+randomNumber +"')"} )
li.id = "nekotb_fc_"+randomNumber //generation d'un id [a priori] unique, comme le nom peut contenir des chars non valides
li.createAndAppendTextNode(name)
li.appendChild( document.createTextNode( name + " ") )
var img = li.createAndAppendElement("img", {'src':"http://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Pictogram_voting_delete.svg/15px-Pictogram_voting_delete.svg.png"} )
li.setAttribute("onclick", "deleteNodeById('nekotb_fc_"+randomNumber +"')" );
nekotb_fc.user_list.push( name.replace(/ /g, "_") )
var img = li.appendChild( document.createElement("img") )
img.src = "http://upload.wikimedia.org/wikipedia/commons/thumb/4/46/Pictogram_voting_delete.svg/15px-Pictogram_voting_delete.svg.png"
//on vide le champ
return false
}
nekotb_fc.remove_user = function(idnode) {
var node = document.getElementById(idnode)
var name = node.firstChild.nodeValue.replace(/ /g, "_")
node.parentNode.removeChild(node)
for(var a=0 ; a < nekotb_fc.user_list.length ; a++) {
if(nekotb_fc.user_list[a] == name) {
nekotb_fc.user_list.splice(a, 1);
break;
}
}
return false
}
function nekotb_fc_back_to_form() {
//supprimer le div de resultat complement
var div2 = document.getElementById("nekotb_fc_fusion")
div2.parentNode.removeChild(div2)
//afficher le formulaire tel qu'il était au moment de l'envoi (avec les noms selectionnés et date)
nekotb_fc.back_to_form = function() {
var div2 = document.getElementById("nekotb_fc_fusion")
div2.parentNode.removeChild(div2) //supprimer le div de resultat complement
document.getElementById("nekotb_fc_formulaire").style.display = "block"
return false
}
Linha 194 ⟶ 137:
function nekotb_fc_show_fusion() {
nekotb_fc.fetch_and_verify_parameters = function() {
//recuperer la liste de noms et les dates (/nekotb_fc_date_fin)
if( nekotb_fc.user_list.length < 1 ) {
var users = nekotb_fc_get_user_list()
alert("aucun utilisateur selectionné")
var fin = document.getElementById("nekotb_fc_date_fin").value
return false
var debut = document.getElementById("nekotb_fc_date_debut").value
}
var reg_int = new RegExp(/^[0-9]+$/)
//recupererici tests si les paramsvaleurs sont exactes.
reg_date = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/)
nekotb_fc.contrib_limit_per_user = document.getElementById("nekotb_fc_contrib_limit_per_user").value
if( ! reg_intreg_date.test(nekotb_fcfin) || ! reg_date.contrib_limit_per_usertest(debut) ) {
alert("laune limitedes dedates contributionsest récupérées par compte doit être un nombre entierincorrecte")
return false
}
if( users.length < 1 ) {
alert("aucun utilisateur selectionné")
nekotb_fc.edit_clash_limit = document.getElementById("nekotb_fc_edit_clash_limit").value
if( ! reg_int.test(nekotb_fc.edit_clash_limit ) ) {
alert("l'écart pour l'indicateur de clash doit etre un nombre entier")
return false
}
var newest_timestamp = fin + "T23:59:59Z"
nekotb_fc.timeline_nb_day_per_line = document.getElementById("nekotb_fc_timeline_nb_day_per_line").value
var oldest_timestamp = debut + "T00:00:00Z"
if( ! reg_int.test(nekotb_fc.timeline_nb_day_per_line ) ) {
alert("le nombre de jour par ligne de la timeline doit etre un nombre entier")
return false
}
nekotb_fc_user_count = 0 //mise ou remise à 0 du compteur utilisé pour la colorisation
//masquer le div du formulaire (sans le supprimer)
var reg_date = new RegExp(/^[0-9]{4}-[0-9]{2}-[0-9]{2}$/)
document.getElementById("nekotb_fc_formulaire").style.display = "none"
//creer le div qui contiendra les resultats
var debut = document.getElementById("nekotb_fc_date_debut").value
var div2 = document.getElementById("bodyContent").appendChild( document.createElement("div") )
if( ! reg_date.test(debut) ) {
div2.id = "nekotb_fc_fusion"
alert("date de début est incorrect")
return false
}
nekotb_fc.oldest_timestamp = debut + "T00:00:00Z"
div2.appendChild( createAdressNode("#", "revenir au formulaire", "return nekotb_fc_back_to_form()") )
var fin = document.getElementById("nekotb_fc_date_fin").value
div2.appendChild( document.createElement("br") )
if( ! reg_date.test(fin) ) {
div2.appendChild( document.createTextNode("Fusion du " + debut + " au " + fin + " inclus" ) )
alert("date de fin est incorrect")
return false
}
nekotb_fc.newest_timestamp = fin + "T23:59:59Z"
var tmp = document.createElement("h2") //utilisé pour jouer avec l'affichage en temps réel de la recup de contribs
tmp.appendChild( document.createTextNode("Récupération des contributions") )
div2.appendChild( tmp )
var tmp = document.createElement("ul") //utilisé pour jouer avec l'affichage en temps réel de la recup de contribs
return true
tmp.id = "nekotb_fc_fusion_user_list"
}
div2.appendChild( tmp )
var editList = get_all_users_contributions( users , oldest_timestamp, newest_timestamp )
div2.appendChild( document.createElement("br") )
var tmp = document.createElement("h2") //utilisé pour jouer avec l'affichage en temps réel de la recup de contribs
tmp.appendChild( document.createTextNode("Liste des contributions fusionnées") )
div2.appendChild( tmp )
var ul = document.createElement("ul")
div2.appendChild( ul )
nekotb_fc.show_fusion = function() {
for(var a = 0, len = editList.length ; a < len ; a++ ) {
if( ! nekotb_fc.fetch_and_verify_parameters() ) return false;
ul.appendChild( nekotb_fc_create_contrib_line(editList[a]) )
nekotb_fc.user_count = 0 //mise ou remise à 0 du compteur utilisé pour la colorisation
document.getElementById("nekotb_fc_formulaire").style.display = "none" //masquer le div du formulaire (sans le supprimer)
//creer le div qui contiendra les resultats
var div2 = document.getElementById("bodyContent").createAndAppendElement( "div", {'id':"nekotb_fc_fusion"} )
div2.createAndAppendElement( "a", {'href':"#", 'onclick':"return nekotb_fc.back_to_form()"}, "revenir au formulaire" )
div2.createAndAppendElement( "h2", {}, "Récupération des contributions" )
div2.createAndAppendElement("ul", { 'id' : "nekotb_fc_fusion_user_list" }) //utilisé pour jouer avec l'affichage en temps réel de la recup de contribs
div2.createAndAppendElement("h2", {}, "Liste des contributions fusionnées")
div2.createAndAppendTextNode("Note : les heures indiquées sont en UTC")
//recuperation des contributions par user
for(var a=0, len = nekotb_fc.user_list.length ; a < len ; a++) {
nekotb_fc.user_contribs[ nekotb_fc.user_list[a] ] = nekotb_fc.get_contribution_list( nekotb_fc.user_list[a])
nekotb_fc.every_contrib_ordered = nekotb_fc.every_contrib_ordered.concat( nekotb_fc.user_contribs[ nekotb_fc.user_list[a] ] );
nekotb_fc.user_contribs[ nekotb_fc.user_list[a] ].sort( function(a, b){ return a['revid'] - b['revid'] } ) //tri chronologique ascendant
}
nekotb_fc.every_contrib_ordered.sort( function(a, b){ return b['revid'] - a['revid'] } ) //tri chronologique descendant
var len = nekotb_fc.every_contrib_ordered.length
var dat = new Date()
if( len > 0 ) {
//test de creation de ligne
var first_timestamp = dat.setISO8601(nekotb_fc.oldest_timestamp).getTime() //(car antéchronologique)
var last_timestamp = dat.setISO8601(nekotb_fc.newest_timestamp).getTime()
nekotb_fc.show_timeline(first_timestamp, last_timestamp)
}
return false; //TEST timeline
var ul = div2.createAndAppendElement("ul")
if( len > 0 ) {
ul.appendChild( nekotb_fc.create_contrib_line(nekotb_fc.every_contrib_ordered[0]), false ) //car on ne peut pas comparer cette premiere ligne avec "celle d'avant"
for(var a = 1; a < len ; a++ ) {
var editClash = false //detecteur de clash
if( nekotb_fc.every_contrib_ordered[a]['bgcolor'] != nekotb_fc.every_contrib_ordered[a-1]['bgcolor'] ) {
var ecart = dat.setISO8601(nekotb_fc.every_contrib_ordered[a-1]['timestamp']).getTime() - dat.setISO8601(nekotb_fc.every_contrib_ordered[a]['timestamp']).getTime() / 1000
if( ecart < (nekotb_fc.edit_clash_limit * 60) ) {
editClash = true
}
}
ul.appendChild( nekotb_fc.create_contrib_line(nekotb_fc.every_contrib_ordered[a], editClash ) )
}
}
return false
}
Linha 302 ⟶ 196:
function nekotb_fc_get_user_list() {
var tab = new Array()
nekotb_fc.show_timeline = function(first_timestamp, last_timestamp) {
var div2array_li = document.getElementById("nekotb_fc_fusionnekotbfc_liste_users").getElementsByTagName("li");
for(var a=0, nb = array_li.length ; a < nb ; a++) {
var dat = new Date();
tab.push( array_li[a].firstChild.nodeValue )
var final = new Array()
}
var nb_users = nekotb_fc.user_list.length
return tab
div2.createAndAppendElement("br")
div2.createAndAppendTextNode("/!\\ Note : à cause des passages à l'heure d'été, le dernier dimanche de mars comporte 23 heures et le dernier dimanche d'octobre 25 heures")
//partie recuperation
for( var a = 0 ; a < nb_users ; a++) {
var cur_day = new Date(first_timestamp).getYYYYMMDD()
var user = nekotb_fc.user_list[a]
final[user] = new Array()
var ligne = ''
var length_user_list = nekotb_fc.user_contribs[user].length
for(var b=0, next_timestamp=false, cur_timestamp=first_timestamp ; cur_timestamp <= last_timestamp ; cur_timestamp=next_timestamp) {
next_timestamp = cur_timestamp + 1000 * 60 * 60 //1H plus tard
var edit = 0
while( b < length_user_list && dat.setISO8601(nekotb_fc.user_contribs[user][b]['timestamp']).getTime() < next_timestamp ) {
edit++
b++
}
//caractere a afficher pour cette heure
if(edit == 0) { ligne += "_" }
else if (edit < 10) { ligne += edit }
else { ligne += "X" }
var new_day = new Date(cur_timestamp).getYYYYMMDD() //test changement de jour pour remplir une case
if(cur_day != new_day) {
final[user][cur_day] = new Array()
final[user][cur_day] = ligne
ligne = ''
cur_day = new_day
}
} //boucle d'un user
final[user][cur_day] = new Array()
final[user][cur_day] = ligne //mise du dernier jour
} //boucle users
//partie affichage
var compteur_jours = 0;
for(var jour = first_timestamp ; jour < last_timestamp ; jour += (1000 * 60 * 60 * 24) ) {
if( compteur_jours % nekotb_fc.timeline_nb_day_per_line == 0 ) {
var table = div2.createAndAppendElement("table", {"class":"nekotb_fc_timeline", "style":"font-family: monospace; border:1px solid black; margin-top:5px;"})
var tr = new Array();
for(var a=0 ; a < nb_users+1 ; a++) {
tr[a] = table.createAndAppendElement("tr")
}
//premiere colonne : la liste des users
tr[0].createAndAppendElement("td", {}, " ")
for(var a=0 ; a < nb_users ; a++) {
tr[a+1].createAndAppendElement("td", {}, nekotb_fc.user_list[a])
}
}
var cur_day = new Date(jour)
tr[0].createAndAppendElement("td", {}, cur_day.getYYYYMMDD() )
for(var b = 0 ; b < nekotb_fc.user_list.length ; b++) {
tr[b+1].createAndAppendElement("td", {}, final[ nekotb_fc.user_list[b] ][ cur_day.getYYYYMMDD() ] )
}
compteur_jours++
}
}
function nekotb_fc_create_contrib_line(tab) {
nekotb_fc.create_contrib_line = function(tab, editClash) {
var li = document.createElement("li")
li.style.backgroundColor = tab['bgcolor']
if( editClash == true) { //ligne rouge entre les 2 contribs incriminées
li.setAttribute('style', "border-top: 5px solid red; background-color:"+tab['bgcolor']+";" );
} else {
li.setAttribute('style', "background-color:"+tab['bgcolor']+";" )
}
var timestamp = tab['timestamp'].replace("T", " à ").replace("Z", "") //mise en page du timestamp
li.appendChild( createAdressNode( "/w/index.php?title="+tab['title']+"&oldid="+tab['revid'], timestamp ) )
li.appendChild( document.createTextNode(" (") )
li.createAndAppendElement( "a", {'href':"/w/index.php?title="+tab['title']+"&oldid="+tab['revid']}, timestamp )
li.appendChild( createAdressNode( "/w/index.php?title="+tab['title']+"&oldid="+tab['revid']+"&diff=prev", "diff" ) )
li.createAndAppendTextNode(" (")
li.appendChild( document.createTextNode(" | ") )
li.createAndAppendElement( "a", {'href':"/w/index.php?title="+tab['title']+"&oldid="+tab['revid']+"&diff=prev"}, "diff" )
li.appendChild( createAdressNode( "/w/index.php?title="+tab['title']+"&action=history", "hist" ) )
li.createAndAppendTextNode(" | ")
li.appendChild( document.createTextNode(") ") )
li.createAndAppendElement( "a", {'href':"/w/index.php?title="+tab['title']+"&action=history"}, "hist" )
li.createAndAppendTextNode(") ")
if( tab['new'] != null ) {
var tmp = document.createElement("span")
li.createAndAppendElement("span", {'class':"newpage"}, "N" )
tmp.className = "newpage"
tmp.appendChild( document.createTextNode("N") )
li.appendChild( tmp )
}
if( tab['minor'] != null ) {
var tmp = document.createElement("span")
li.createAndAppendElement("span", {'class':"minor"}, "m" )
tmp.className = "minor"
tmp.appendChild( document.createTextNode("m") )
li.appendChild( tmp )
}
li.createAndAppendTextNodeappendChild( document.createTextNode(" ") )
li.createAndAppendElementappendChild( "a",createAdressNode( {'href':"/wiki/"+tab['title']}, tab['title'] ) )
var tmp = document.createElement("span")
if( tab['comment'] != null && tab['comment'] != "" ) {
li.createAndAppendTextNodeappendChild( document.createTextNode(" (") )
li.appendChild( tmp )
li.createAndAppendElement("span", {'class':"comment"}, tab['comment'] )
litmp.createAndAppendTextNode(className = ")comment")
tmp.appendChild( document.createTextNode(tab['comment']) )
li.appendChild( document.createTextNode(")") )
}
if( tab['top'] != null ) {
li.createAndAppendTextNodeappendChild( document.createTextNode(" ") )
var tmp = document.createElement("span")
li.createAndAppendElement("span", {'class':"mw-uctop"}, "(dernière)" )
tmp.className = "mw-uctop"
tmp.appendChild( document.createTextNode("(dernière)") )
li.appendChild( tmp )
}
return li
}
/*
retourne un tableau a partir d'une (ou plusieurs) requetes API
pour la zone de temps à traiter, p_end_time est la date la plus ancienne, p_start_time la plus recente
*/
function get_contribution_list(p_user, p_end_time, p_start_time) {
nekotb_fc.get_contribution_list = function(p_user) {
var bgcolor = nekotb_fc.bgcolor_list[nekotb_fc.user_count++] // choix de la couleur de fond
var bgcolor = nekotb_fc_bgcolor_list[nekotb_fc_user_count]
nekotb_fc_user_count++
var ul = document.getElementById('nekotb_fc_fusion_user_list') // pour faire joujou avec l'affichage
var li = document.createElement("li")
var li = ul.createAndAppendElement( "li", {'style':"background-color:"+bgcolor+";"}, " ")
ul.appendChild( li )
li.style.backgroundColor = bgcolor
li.appendChild( document.createTextNode(" ") ) //initialisation du textNode
var http_request = sajax_init_object()
Linha 432 ⟶ 272:
var compteur_tableau = 0
var nb_loop = 0 //compteur de protection
var newest_timestamp = nekotb_fc.newest_timestamp //variable locale car changé à chaque boucle
var nb_loop_allowed = 15 // max de contribs retournée pour un compte = 500 x cette valeur
do {
nb_loop++
if( tableau.length >= nekotb_fc.contrib_limit_per_user ) {
if( nb_loop > nb_loop_allowed ) { //pas plus de z boucles (limite en dur)
li.firstChild.nodeValue += " Limite atteinte - les contributions les plus anciennes n'apparaitrons pas"
li.firstChild.nodeValue += "Limite atteinte."
break;
}
var continue_do_while = false
var address = "/w/api.php?format=xml&action=query&list=usercontribs&uclimit=500&ucuser=" + p_user + "&ucend=" + nekotb_fc.oldest_timestampp_end_time + "&ucstart=" + newest_timestampp_start_time
http_request.open('GET', address , false)
http_request.send(null)
var lignes = http_request.responseXML.documentElement.getElementsByTagName("item")
Linha 456 ⟶ 299:
compteur_tableau ++
}
li.firstChild.nodeValue = p_user + " : " + tableau.length + " contributions récupérées."
query_continue = http_request.responseXML.documentElement.getElementsByTagName("query-continue")
if( query_continue && query_continue.length > 0 ) {
newest_timestampp_start_time = query_continue[0].getElementsByTagName("usercontribs")[0].getAttribute('ucstart')
if( newest_timestampp_start_time && newest_timestampp_start_time != 'undefined' ) { //protection
continue_do_while = true
}
Linha 469 ⟶ 311:
return tableau
}
function get_all_users_contributions( liste, p_oldtime, p_newtime ) {
var contributions = new Array()
for(var a=0, len = liste.length ; a < len ; a++) {
var temp = get_contribution_list( liste[a], p_oldtime, p_newtime )
contributions = contributions.concat(temp);
}
contributions.sort(function(a, b){ //tri chronologique descendant
return b['revid'] -a['revid']
})
return contributions
}
/* fonctions generiques */
//supprime tous les sous nodes d'un node (pas besoin d'être récursif).
function removeChildNodes(a) {
while (a.hasChildNodes() ) {
a.removeChild(a.firstChild);
}
}
function deleteNodeById(idnode) {
var node = document.getElementById(idnode)
node.parentNode.removeChild(node)
}