Utilisateur:Srtxg/common.js
Apparence
Note : après avoir enregistré vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
- Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
- Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
- Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
// ça n' rote nén avou des variåves locåles...
var cons_min = 'b-df-hj-np-tv-z';
var cons_maj ='B-DF-HJ-NP-TV-Z';
var cons = cons_min + cons_maj;
var voy_min = 'aàâåäeéèêëiîïoôöuûü';
var voy_maj = 'AÀÂÅÄEÉÈÊËIÎÏOÔÖUÛÜ';
var voy = voy_min + voy_maj;
var char_min = voy_min + cons_min;
var char_maj = voy_maj + cons_maj;
var char_mM = char_min + char_maj;
scanilles = {
container : "#mw-content-text",
//container : "#wpTextbox1",
error_count : 0,
infos : [],
// espace insécable => espace fine
narrow_whitespace_patterns : [
[ "([\u00A0])[?!;»]",
"Cette $1 devrait être remplacée par une une espace fine (U+202F) pour une typographie soignée."
],
[ "[«]([\u00A0])",
"Cette $1 devrait être remplacée par une espace fine (U+202F) pour une typographie soignée."
]
],
whitespace_patterns : [
[ // espace sécable devant ?!;» => espace fine
"([\u0020])[?!;»]",
"Cette $1 devrait être remplacée par une espace insécable (U+002A) ou une espace fine (U+202F) pour une typographie soignée."
],
[ // espace sécable ou insécable => espace fine
"[«]([\u0020])",
"Cette $1 devrait être remplacée par une espace fine (U+202F) ou une espace fine (U+202F) pour une typographie soignée."
],
[ // (Wallon) espace insécable après ’ => espace sécable
"[" + char_mM + "]{3,}[’]([\u00A0\u202F])[" + cons + "]",
"Cette $1 devrait être remplacée par une espace sécable."
],
[ // (Wallon) espace sécable ou fine après ’ => espace insécable
// "(ènn'|qu'|<cons>') "
"\b[EÈè]?[Qqn]?[" + cons + "][’]([\u0020\u202F])",
"Cette $1 devrait être remplacée par une espace insécable."
],
[ // (Wallon) espace sécable après un debut de phrase d'une lettre => espace insécable
//"\b[" + char_maj + "]([\u0020\u202F])",
"\b[I]([\u0020\u202F])",
"Cette $1 devrait être remplacée par une espace insécable."
]
],
typo_patterns : [
[ "[.]{3,}",
"Les trois points consécutifs « . » (U+002E) devraient êtres replacés par trois points de suspension « … » (U+2026)"
],
[ "'",
"Cette apostrophe droite « ' » (U+0027) devrait être remplacée par une apostrophe courbe « ’ » (U+2019)."
],
[ "‘",
"Ce caractère « ‘ » (U+2018) n'est pas une apostrophe courbe « ’ » (U+2019)."
],
[ "[!:,;?][,;.]+",
"Cette succession de signes de poncuation semble étrange."
],
[ "[" + char_min + "][:!?;]",
"Une espace insécable (U+00A0) devrait précéder un signe de ponctuation bipoints."
],
[ "[!?;:.,][" + char_mM + "]",
"Une espace sécable (U+0020) est attendu après un signe de ponctuation."
],
[ "[\u0020\u00A0][.,]",
"Il ne devrait pas y avoir d'espace à cet endroit."
],
[ "\u0020(1e[^r]|[!1][a]|1[^e0-9][^r0-9])",
"Il s'agit probablement d'un L minuscule, et non du chiffre 1."
],
[ "([^\u0020\u00A0\n]—|—[^\u0020\u00A0\n])",
"Une espace est attendue à cet endroit."
],
[ "([\u0020]-|-[\u0020])",
"Aucune espace est attendue à cet endroit."
],
],
precompile_regexp : function (search, group, multi_line) {
var ml = (multi_line)?"m":"";
var temp = [];
var search_r="";
for (var i in search){
search_r = search[i];
if (typeof(search_r) === 'object')
{
if(scanilles.infos[(group+'-'+i)] === undefined){
scanilles.infos[(group+'-'+i)] = search[i][1];
}
search_r = search_r[0];
}
temp.push([new RegExp(search_r, ml), i]);
}
return temp;
},
match : function (text, regexp) {
var m = text.match(regexp);
if (m) {
var i = (m[1]!==undefined)?1:0;
var start_match = text.search(regexp)+(m[0].search(m[i]));
var end_match = start_match + m[i].length;
return [ start_match, end_match, m[i] ];
}
return null;
},
change_text_node : function(el, search, first, group) {
var info = "";
var regex = "";
for (var cur = first; cur < search.length; ++cur) {
regex = search[cur][0];
info = search[cur][1];
var match = this.match(el.nodeValue, regex);
if (match) {
var tail = $(el).clone()[0];
el.nodeValue = el.nodeValue.substring(0, match[0]);
tail.nodeValue = tail.nodeValue.substring(match[1]);
var data_unicode = "";
if (match[2] == "\x20"){
data_unicode = "U+0020";
match[2] = "_"; // préserver une fausse espace
}
else if (match[2] == " "){
data_unicode = "U+00A0";
}
else if (match[2] == "\u202F"){
data_unicode = "U+202F";
}
if(data_unicode!=="")
data_unicode = 'data-unicode="'+data_unicode+'"';
// FIXME: how to setup the text part of the span w/o injecting it in html ?
$(el).after(tail).after($('<span class="rix '+group+'" data-rixid="'+group+'-'+info+'"'+data_unicode+'>' + match[2] + '</span>'));
scanilles.error_count++;
scanilles.change_text_node(el, search, cur + 1, group);
scanilles.change_text_node(tail, search, cur, group);
}
}
},
filter_page : function() {
if (mw.config.get('wgNamespaceNumber') !== 104 )
return false;
return true;
},
filter_node : function() {
if ($(this).parent().hasClass('rix'))
return false;
return this.nodeType == 3;
},
get_text_nodes : function () {
var content_id = scanilles.container;
if ($("#wikiPreview").length)
content_id = "#wikiPreview";
return $(content_id)
.find("*")
.contents()
.filter(scanilles.filter_node);
},
exec : function(user_filter, search, group, multi_line) {
if (multi_line === undefined)
multi_line = false;
if (!scanilles.filter_page())
return;
search = scanilles.precompile_regexp(search, group, multi_line);
var text_nodes = scanilles.get_text_nodes();
$.each(text_nodes, function(i, el) {
scanilles.change_text_node(el, search, 0, group);
});
},
tip : function (){
$(".rix").hover(function(){
var i = $(this).data('rixid');
if(scanilles.infos[i] === undefined){
return;
}
var rep = $(this).text();
if ($(this).data('unicode')!==undefined)
rep = $(this).data('unicode');
switch(rep){
case "U+0020" :
rep = "espace sécable (U+0020)"; break;
case "U+00A0" :
rep = "espace insécable (U+00A0)"; break;
case "U+202F" :
rep = "espace fine (U+202F)"; break;
default : rep = "« "+rep+" »"
}
info = scanilles.infos[i].replace('$1', rep);
var rixinfo = $('<span>',{
class : "rix-info"
}).html(info);
$(this).append(rixinfo);
},function(){$(".rix-info").remove();});
},
default_select : function(){
console.log('Chargement de Scanilles');
scanilles.exec(/.*/, scanilles.narrow_whitespace_patterns, 'narrowwhitespace');
scanilles.exec(/.*/, scanilles.whitespace_patterns, 'whitespace');
scanilles.exec(/.*/, scanilles.typo_patterns , 'scanille');
scanilles.tip();
},
};
$(document).ready(scanilles.default_select());