Jump to content

MediaWiki:Corrections.js: Difference between revisions

From Wikisource
Content deleted Content added
ThomasV (talk | contribs)
No edit summary
Tpt (talk | contribs)
Fixes navbar display
 
(80 intermediate revisions by 8 users not shown)
Line 2: Line 2:
* corrections
* corrections
**************/
**************/

// Until we can use dependencies to ensure load of Base.js first, we need this,
// window.ws_msg and window.get_opt_list in this script.
if(!self.ws_messages) self.ws_messages = { };

function ws_msg(name) {
var m = self.ws_messages[name];
if(m) return m; else return name;
}

// Copy from MediaWiki:Base.js
function get_optlist() {
var optlist = document.getElementById("optlist"),displayOptions,
cl, ulCl;
if(!optlist) {
if (mw.config.get('skin')==='vector') {
displayOptions = document.createElement("nav");
displayOptions.className = "mw-portlet vector-menu vector-menu-portal portal";
cl="vector-menu-content";
ulCl="vector-menu-content-list";
} else {
displayOptions = document.createElement("div");
displayOptions.className = "portlet";
cl="pBody";
ulCl="";
}
displayOptions.innerHTML = '<h3 class="vector-menu-heading">' + ws_msg('optlist') + '<\/h3><div class="'+cl+'"><ul id="optlist" class="'+ ulCl + '"></ul><\/div>';
var ptb = document.getElementById("p-tb");
ptb.parentNode.insertBefore(displayOptions,ptb);
displayOptions.setAttribute("id","p-displayOptions");
displayOptions.id="p-displayOptions"; /* */
optlist = document.getElementById("optlist");
}
return optlist;
}

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;
};
}



function close_corr_summary() {
function close_corr_summary() {
content = document.getElementById("corr_summary");
var summary = document.getElementById("corr_summary");
if(!content) return;
if(!summary) return;
content.innerHTML = "";
summary.innerHTML = "";
content.parentNode.removeChild(content);
summary.parentNode.removeChild(summary);
}
}


function scroll_to_correction(k){
function scroll_to_correction(k) {
var selectedPosX = 0;
var selectedPosX = 0;
var selectedPosY = 0;
var selectedPosY = 0;
var spanlist = $('span.coquille');
var j=0;
for(var i=0; item=document.getElementsByTagName("span")[i]; i++) {
for (var i = 0; i < spanlist.length; i++) {
var item = spanlist[i];
if(item.className=="coquille") {
j=j+1;
if(i==k) {
if(j==k){
element=item;
element=item;
while(element != null){
selectedPosX += element.offsetLeft;
while(element != null){
selectedPosX += element.offsetLeft;
selectedPosY += element.offsetTop;
selectedPosY += element.offsetTop;
element = element.offsetParent;
element = element.offsetParent;
}
window.scrollTo(selectedPosX,selectedPosY);
}
}
window.scrollTo(selectedPosX,selectedPosY);
}
}
}
}
Line 31: Line 78:


function pr_popup(){
function pr_popup(){
corr_container = document.getElementById("corr_summary");
var corr_container = document.getElementById("corr_summary");
if(corr_container) return;
if(corr_container) { close_corr_summary(); return; }
corr_container = document.createElement("div");
corr_container = document.createElement("div");
corr_container.setAttribute("id","corr_summary");
corr_container.setAttribute("id","corr_summary");
corr_container.style.cssText="position:fixed;max-width:35em;max-height:35em;scroll:auto;right:0.5em;background:#ffffff;opacity:1;border:1px solid;padding:5px";
corr_container.innerHTML = self.corr_list;


content = document.getElementsByClassName("text");
var content= document.getElementById("text");
var spanlist = document.getElementsByTagName("span");
if(!content) for(var i=0; i< spanlist.length; i++) { if( spanlist[i].className=="text") content=item; }
if(content) {
if(content) {
corr_container.style.cssText="position:relative;";
content = content[0];
corr_container.style.cssText="position:fixed;max-width:35em;max-height:35em;scroll:auto;right:-10em;background:#ffffff;opacity:1;border:1px solid;padding:5px";
corr_container.innerHTML = "<div style=\"position:absolute;right:-0.5em;width:0em;\"><div style=\"position:fixed;min-width:16em;max-width:35em;max-height:35em;overflow:auto;background:#ffffff;z-index:1;border:1px solid;padding:5px\">"+self.corr_list+"</div></div>";
content.insertBefore(corr_container,content.firstChild);
content.insertBefore(corr_container,content.firstChild);
} else {
} else {
corr_container.style.cssText="position:fixed;min-width:16em;max-width:35em;max-height:35em;overflow:auto;scroll:auto;right:0.5em;background:#ffffff;z-index:1;border:1px solid;padding:5px";
corr_container.innerHTML = self.corr_list;
content = document.getElementById("bodyContent");
content = document.getElementById("bodyContent");
content.insertBefore(corr_container,content.firstChild);
content.insertBefore(corr_container,content.firstChild);
Line 51: Line 100:
function pr_typos() {
function pr_typos() {


if( wgNamespaceNumber==0 || self.proofreadPageViewURL ) {
if( ! ( mw.config.get('wgNamespaceNumber')==0 || mw.config.get( 'wgCanonicalNamespace' ) === 'Page' ) ) return;


var str = '<div style="float:right"><a href="javascript:close_corr_summary()"><img src="//upload.wikimedia.org/wikipedia/commons/9/97/WikEd_close.png"/></a></div><h4>'+ ws_msg('corr_list') + " :</h4><ul>";
var message_title = {
var spanlist = $('span.coquille');
'en':"List of corrections performed on this page" ,
for(var i=0; i< spanlist.length; i++) {
'fr':"Liste des corrections apportées à cette page"
var item = spanlist[i];
}
w1=w2='';
var message_link = {
if(item.previousSibling && item.previousSibling.data) {
'en':"Corrections" ,
context1=item.previousSibling.data.split(' ');
'fr':"Coquilles"
if(context1.length>1) w1 = context1[context1.length - 2];
}
}
var message_corr_1 = {
if(item.nextSibling && item.nextSibling.data) {
'en':"One typo </a> has been corrected." ,
context2=item.nextSibling.data.split(' ');
'fr':"Une coquille </a> a été corrigée."
if(context2.length>1) w2 = context2[1];
}
}
var message_corr = {
//hidden "m" char is to avoid rtl languages firefox bug
'en':" typos</a> have been corrected." ,
var newline = '<li>'+'<a style=\"color:#000000;\" href=\"javascript:scroll_to_correction('+i+');\"> « '+w1+' <span style=\"color:#ff0000;\">#pre#</span> '+ w2.HTMLize() + ' » →<span style=\"color:#ffffff;\">m</span>« ' + w1.HTMLize() + ' <span style=\"color:#00A000;\">#post#</span> ' + w2 +' » </a></li>';
'fr':" coquilles</a> ont été corrigées."
newline = newline.replace("#pre#",item.title.HTMLize());
}
newline = newline.replace("#post#",item.innerHTML);
var message_close = {
str = str + newline;
'en':"Close." ,
}
'fr':"Fermer."
str=str+'</ul>';
}
self.corr_list = str;


if (spanlist.length) {
var str = '<h4>'+message_title[wgContentLanguage] + " :</h4><ul>";
mw.loader.using( 'mediawiki.util', function() {
j=0;
var optlist = get_optlist();
for(var i=0; item=document.getElementsByTagName("span")[i]; i++) {
mw.util.addPortletLink ('p-displayOptions', 'javascript:pr_popup();', ws_msg('corr_link')+" ("+spanlist.length+")", 'option-corrections', '' );
if(item.className=="coquille") {
cs = document.getElementById("corr-info");
j=j+1;
if(cs) {
w1=w2='';
if (spanlist.length == 1)
if(item.previousSibling) {
cs.innerHTML += " <a href='javascript:pr_popup();'>" + ws_msg('corr_one');
context1=item.previousSibling.data.split(' ');
else
if(context1.length>1) w1 = context1[context1.length - 2];
cs.innerHTML += " <a href='javascript:pr_popup();'>" + spanlist.length + ws_msg('corr_many');
}
}
if(item.nextSibling) {
});
context2=item.nextSibling.data.split(' ');
}
if(context2.length>1) w2 = context2[1];
}
str = str +'<li>'+'<a style=\"color:#000000;\" href=\"javascript:scroll_to_correction('+j+');\"> « '+w1+' <span style=\"color:#ff0000;\">'+item.title + '</span> '+ w2 + ' » → « ' + w1 + ' <span style=\"color:#00A000;\">' + item.innerHTML + '</span> ' + w2 +' » </a></li>';
}
}
str=str+'</ul><br/><div style="float:right;"><a href="javascript:close_corr_summary()">'+message_close[wgContentLanguage]+'</a></div>'
self.corr_list = str;

if(j) {
var optlist = get_optlist();
optlist.innerHTML = optlist.innerHTML + "<li class=\"\"><a href='javascript:pr_popup();'>"+message_link[wgContentLanguage]+" ("+j+")</a></li>";
cs=document.getElementById("corr-info");
if(cs){
if(j==1)
cs.innerHTML = " <a href='javascript:pr_popup();'>" + message_corr_1[wgContentLanguage];
else
cs.innerHTML = " <a href='javascript:pr_popup();'>" + j + message_corr[wgContentLanguage];
}
}
}
}
}


addOnloadHook(pr_typos);
$(pr_typos);

Latest revision as of 11:22, 9 July 2022

/**************
 * corrections 
 **************/

// Until we can use dependencies to ensure load of Base.js first, we need this,
// window.ws_msg and window.get_opt_list in this script.
if(!self.ws_messages) self.ws_messages = { };

function ws_msg(name) {
   var m = self.ws_messages[name];
   if(m) return m; else return name;
}

// Copy from MediaWiki:Base.js
function get_optlist() {
	var optlist = document.getElementById("optlist"),displayOptions,
      cl, ulCl;
	if(!optlist) {
		if (mw.config.get('skin')==='vector') {
	displayOptions = document.createElement("nav");
	displayOptions.className = "mw-portlet vector-menu vector-menu-portal portal";
	cl="vector-menu-content";
	ulCl="vector-menu-content-list";
} else {
	 displayOptions = document.createElement("div");
	displayOptions.className = "portlet";
	cl="pBody";
	ulCl="";
}
		displayOptions.innerHTML = '<h3 class="vector-menu-heading">' + ws_msg('optlist') + '<\/h3><div class="'+cl+'"><ul id="optlist" class="'+ ulCl + '"></ul><\/div>';
                var ptb = document.getElementById("p-tb");
                ptb.parentNode.insertBefore(displayOptions,ptb);
                displayOptions.setAttribute("id","p-displayOptions");
                displayOptions.id="p-displayOptions"; /* */
		optlist = document.getElementById("optlist");
	}
	return optlist;
}

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;
  };
}


function close_corr_summary() {
	var summary = document.getElementById("corr_summary");
	if(!summary) return;
	summary.innerHTML = "";
	summary.parentNode.removeChild(summary);
}

function scroll_to_correction(k) {
	var selectedPosX = 0;
	var selectedPosY = 0;
        var spanlist = $('span.coquille');
	for (var i = 0; i < spanlist.length; i++) {
		var item = spanlist[i];
		if(i==k) {
			element=item;
			while(element != null){
				selectedPosX += element.offsetLeft;
				selectedPosY += element.offsetTop;
				element = element.offsetParent;
			}
			window.scrollTo(selectedPosX,selectedPosY);
		}
	}
}

function pr_popup(){
	var corr_container = document.getElementById("corr_summary");
	if(corr_container) { close_corr_summary(); return; }
	corr_container = document.createElement("div");
	corr_container.setAttribute("id","corr_summary");

	var content= document.getElementById("text");
	var spanlist = document.getElementsByTagName("span");
	if(!content) for(var i=0; i< spanlist.length; i++) { if( spanlist[i].className=="text") content=item; }
	if(content) {
		corr_container.style.cssText="position:relative;";
		corr_container.innerHTML = "<div style=\"position:absolute;right:-0.5em;width:0em;\"><div style=\"position:fixed;min-width:16em;max-width:35em;max-height:35em;overflow:auto;background:#ffffff;z-index:1;border:1px solid;padding:5px\">"+self.corr_list+"</div></div>";
		content.insertBefore(corr_container,content.firstChild);
	} else {
		corr_container.style.cssText="position:fixed;min-width:16em;max-width:35em;max-height:35em;overflow:auto;scroll:auto;right:0.5em;background:#ffffff;z-index:1;border:1px solid;padding:5px";
		corr_container.innerHTML = self.corr_list;
		content = document.getElementById("bodyContent");
		content.insertBefore(corr_container,content.firstChild);
	}
}

function pr_typos() {

	if( ! ( mw.config.get('wgNamespaceNumber')==0 || mw.config.get( 'wgCanonicalNamespace' ) === 'Page' ) ) return;

	var str = '<div style="float:right"><a href="javascript:close_corr_summary()"><img src="//upload.wikimedia.org/wikipedia/commons/9/97/WikEd_close.png"/></a></div><h4>'+ ws_msg('corr_list') + " :</h4><ul>"; 
	var spanlist = $('span.coquille');
	for(var i=0; i< spanlist.length; i++) {
		var item = spanlist[i];
		w1=w2='';
		if(item.previousSibling && item.previousSibling.data) { 
			context1=item.previousSibling.data.split(' ');
			if(context1.length>1) w1 = context1[context1.length - 2];
		}
		if(item.nextSibling && item.nextSibling.data) { 
			context2=item.nextSibling.data.split(' ');
			if(context2.length>1) w2 = context2[1]; 
		}
		//hidden "m" char is to avoid rtl languages firefox bug
		var newline = '<li>'+'<a style=\"color:#000000;\" href=\"javascript:scroll_to_correction('+i+');\"> « '+w1+' <span style=\"color:#ff0000;\">#pre#</span> '+ w2.HTMLize() + ' »  →<span style=\"color:#ffffff;\">m</span>« ' + w1.HTMLize() + ' <span style=\"color:#00A000;\">#post#</span> ' + w2 +' » </a></li>'; 
		newline = newline.replace("#pre#",item.title.HTMLize());
		newline = newline.replace("#post#",item.innerHTML);
		str = str + newline; 
	}
	str=str+'</ul>';
	self.corr_list = str;

	if (spanlist.length) {
		mw.loader.using( 'mediawiki.util', function() {
		var optlist = get_optlist();
		mw.util.addPortletLink ('p-displayOptions', 'javascript:pr_popup();', ws_msg('corr_link')+" ("+spanlist.length+")", 'option-corrections', '' );
		cs = document.getElementById("corr-info");
		if(cs) {
			if (spanlist.length == 1)
				cs.innerHTML += " <a href='javascript:pr_popup();'>" + ws_msg('corr_one');
			else
				cs.innerHTML += " <a href='javascript:pr_popup();'>" + spanlist.length + ws_msg('corr_many'); 
		}
		});
	}
}

$(pr_typos);