« MediaWiki:Common-IntersectionCategorie.js » : différence entre les versions

Contenu supprimé Contenu ajouté
Phe (discussion | contributions)
mAucun résumé des modifications
Phe (discussion | contributions)
mAucun résumé des modifications
Ligne 2 :
* Utilise http://www.mediawiki.org/wiki/Extension:DynamicPageList_(Wikimedia)
* pour présenter l’intersection de catégorie aux utilisateurs. L’interface est
* sur http://fr.wikisource.org/wiki/SpécialWikisource:Intersection_de_catégorieRecherche_dans_les_catégories
* le nom de cette page peut varier, voir la variable special_pagename
*
* Page layout is built on special_pagename and must provide placeholder html
* element with the following id:
* input_cat : place of the dropdown menu selecting the cat group
* input_listbox_cat: place of the category selection listbox
* input_listbox_nocat: place of the not category selection listbox (unused)
* submit_button: place of the submit button
* output_result: place of the query result.
*/
var intersection_categorie = {
Ligne 8 ⟶ 17 :
* TODO :
*
* 1) (point obsolète)
* 1) la liste des catégories ne devrait pas être codée en dur
* dans le script, l’idéal serait de générer la liste à partir d’une cat
* racine dont le premier (et deuxième ?) niveau de sous-catégories
* sont de bons candidats à l’intersection, autre solution, voir 2)
*
* 2) Alternative à 1), les sous-page de la page contenant l’interface
* 2) Utiliser une page spéciale est une mauvaise idée, il faut situer
* l'interfacedevrait dansdéfinir Wikisource:Recherchele dansnom leset le contenu des groupes de catégories candidats
* groupes des catégories candidats à la recherche.
* les sous-pages de cette page définissant le nom et le contenu des
* groupes des catégories candidats à la recherche.
*
* 3) permettre de mettre en place l'interfacel’interface sur toutes les pages
* contenant un <div id="recherche_dans_les_categories"></div> ? (NON)
*
* 4) gérer les nocat= en ajoutant une seconde listbox, par exemple
* DynamicPageList ne permet pas d'obtenird’obtenir les textes d'économiesd’économies
* qui sont dans la cat 00% et 25% mais on peut obtenir la même
* information en sélectionnant les textes qui sont dans la cat
Ligne 29 ⟶ 34 :
* 5) ajouter des liens suivants et précédents.
*
* 6) renommer(point intersection par recherche ?obsolète)
*
* 7) permettre de voir la date d'entréed’entrée de chaque page dans la première
* catégorie sélectionné ?
*
* 8) Suivi des pages liées ne fonctionne pas avec des liens ajoutés
* DynamicPageList est limité à six catégories, est-ce qu'il s'agit
* dynamiquement, mais c’est faisable. Mais dans ce cas suivi des pages
* de six category= plus six nocategory= ou de six en tout.
* liées ne montrera que le suivi des liens pour les liens visibles
* sur la page.
*
* DynamicPageList est limité à six catégories, est-ce qu'ilqu’il s'agits’agit
* de six category= plus six nocategory= ou de six en tout. ?
*/
special_pagename : "Wikisource:Recherche_dans_les_catégories",
 
possible_author_category : [
//"Page à problème",
//"Page corrigée",
 
"Auteurs de l'Antiquité",
Ligne 161 ⟶ 173 :
],
 
get_group_nameget_cat_group : function () {
return this.possible_intersection[$("#dropdown option:selected").text()];
},
 
default_query : function () {
return {
nocat : [],
if ( cat.length) : [],
count : 50,
offset : 0
};
},
 
add_dpl_result_to_page : function (datas) {
$("#output_result").html(datas.parse.text["*"]);
var catquery = []this.cat_from_string(location.search);
varif nocat = [];(query.cat.length)
this.cat_from_stringset_selected(locationquery.searchcat, catthis.get_cat_group(), nocat"select_cat");
 
if (cat.length)
if this(query.set_selected(cat,.length this|| query.get_group_name(nocat.length)); {
var url = this.dpl_querybuild_url(cat, nocatquery);
$("#ca-nstab-project > span > a").attr("href", url);
$("#ca-view > span > a").attr("href", url);
}
},
 
build_url : function (cat, nocatquery) {
var url = mw.config.get("wgServer") + mw.config.get("wgScriptPath");
url += "/index.php?title=" + "Spécial:Intersection_de_catégorie"this.special_pagename;
for (var i = 0; i < query.cat.length; ++i)
url += "&cat=" + encodeURIComponent(query.cat[i]);
for (var i = 0; i < query.nocat.length; ++i)
url += "&notcat=" + encodeURIComponent(query.nocat[i]);
if (catquery.lengthoffset)
url += "&offset=" + query.offset;
if (catquery.lengthcount) {
url += "&count=" + query.count;
return url;
},
 
exec_user_query : function () {
var catquery = []this.default_query();
$("#select_cat option:selected").each(function () {
query.cat.push($(this).text());
});
 
if (query.cat.length || query.nocat.length)
window.location.assign(this.build_url(cat, []query));
},
 
build_listbox : function (cat, id) {
var text = "<select nameid='select_cat'" + id='select_cat + "' size='8' multiple='multiple'>\n";
for (var i = 0; i < cat.length; ++i)
text += "<option value='" + i + "'>" + cat[i] + "</option>";
return text + "</select>" + "<br /><button type='button' onclick='intersection_categorie.exec_user_query()'>Exécuter la requête</button>";
},
 
build_dpl_querybuild_dpl_query_str : function (cat, nocatquery) {
return "<DynamicPageList>\n"
+ "count = 50" + query.count + "\n"
+ "offset = " + query.offset + "\n"
+ "order = sortkey\n"
+ "shownamespace = false\n"
+ "category = " + query.cat.join("\ncategory = ") + "\n";
+ "nocategory = " + query.nocat.join("\nnocategory = ") + "\n";
+ "</DynamicPageList>";
},
 
dpl_query : function (cat, nocatquery) {
var queryquery_str = this.build_dpl_querybuild_dpl_query_str(cat, nocatquery);
var url = mw.config.get("wgServer") + mw.config.get("wgScriptPath")
+ "/api.php?action=parse&callback=intersection_categorie.add_dpl_result_to_page"
+ "&format=json&text=" + encodeURIComponent(queryquery_str);
this.create_script_obj(url)
},
Ligne 226 ⟶ 256 :
},
 
set_selected : function (cat, possible_cat, id) {
for (var i = 0 ; i < cat.length; ++i) {
for (var j = 0 ; j < possible_cat.length; ++j) {
if (cat[i].replace("_", " ") == possible_cat[j])
$("#select_cat" + id + " option[value=" + j + "]").attr("selected", "selected");
}
}
},
 
cat_from_string : function (str, cat, nocat) {
var query = this.default_query();
 
if (str.charAt[0] = "?")
str = str.slice(1);
Ligne 243 ⟶ 275 :
if (key_value.length == 2) {
if (key_value[0] == "cat")
query.cat.push(decodeURIComponent(key_value[1]).replace("_", " "));
else if (key_value[0] == "nocat")
query.nocat.push(decodeURIComponent(key_value[1]).replace("_", " "));
else if (key_value[0] == "offset")
query.offset = Number(key_value[1]);
else if (key_value[0] == "count")
query.count = Number(key_value[1]);
}
}
return query;
},
 
query_from_url : function () {
var catresult = []this.cat_from_string(location.search);
varif nocat = [];(result.cat.length)
this.cat_from_stringdpl_query(location.search, cat, nocatresult);
if (cat.length)
this.dpl_query(cat, nocat);
},
 
guess_cat_group_from_url : function() {
var catresult = []this.cat_from_string(location.search);
varif nocat(result.cat.length) = [];{
this.cat_from_string(location.search, cat, nocat);
if (cat.length) {
for (var group in this.possible_intersection) {
var possible_cat = this.possible_intersection[group];
for (var i = 0; i < possible_cat.length; ++i) {
if (result.cat[0] == possible_cat[i])
return group;
}
Ligne 275 ⟶ 308 :
 
dropdown_change : function() {
$("#input_listboxinput_listbox_cat").html(this.build_listbox(this.get_group_nameget_cat_group(), "select_cat"));
},
 
Ligne 286 ⟶ 319 :
$("#dropdown").val(this.guess_cat_group_from_url());
$("#dropdown").change();
},
 
add_submit_button : function() {
$("#submit_button").html("<button type='button' onclick='intersection_categorie.exec_user_query()'>Exécuter la requête</button>");
},
 
Ligne 293 ⟶ 330 :
"Intersection d’articles" : this.possible_article_category
};
$("#firstHeadingoutput_result").texthtml("Intersection de catégorie");
this.add_submit_button();
$("#bodyContent").html("<div id='input_cat'></div><div id='input_listbox'></div><div id='output_result'></div>");
$("title").text("Spécial:Intersection de catégorie");
this.add_dropdown_list();
this.query_from_url();
Ligne 301 ⟶ 337 :
}
 
if (mw.config.get("wgPageName") == intersection_categorie.special_pagename && mw.config.get("Spécial:Intersection_de_catégoriewgAction") == "view")
intersection_categorie.setup();