Użytkownik:Sp5uhe/formatowanie-test.js

Z Wikicytatów, wolnej kolekcji cytatów

Uwaga: Zmiany po zapisaniu nowych ustawień mogą nie być widoczne. Należy wyczyścić zawartość pamięci podręcznej przeglądarki internetowej.

  • Mozilla, Firefox lub Safari – przytrzymaj wciśnięty Shift i kliknij na Odśwież lub wciśnij Ctrl‐F5 lub Ctrl‐R (Cmd‐Shift‐R na Macintoshu)
  • Konqueror – kliknij przycisk Odśwież lub wciśnij F5
  • Opera – wyczyść pamięć podręczną w menu Narzędzia → Preferencje
  • Internet Explorer – przytrzymaj Ctrl i kliknij na Odśwież lub wciśnij Ctrl‐F5
/*<pre><nowiki>*/
//… ...
function mkBRnew(str, select) {
}
// Dodaje opis w opisie zmian, o ile takiego nie bylo
function dodajOpis(opis)
{
	var wpS = document.forms.editform.wpSummary;
        wpS.value=trim(wpS.value);
	if (wpS.value.indexOf(opis)<0) 
		if (wpS.value.substring(wpS.value.length,wpS.value.length-2)=="*\/")
			wpS.value = wpS.value +" "+ opis;
		else
			if (wpS.value.length>0)
				wpS.value = wpS.value +", "+ opis;
			else
				wpS.value = opis;
}
 
// Jeśli tekst jest zaznaczony, to wstawia łamanie wiersza zamiast każdego końca wiersza
// Jeśli tekst nie jest zaznaczony to usuwa końce wiersza za znakiem <br />
function mkBR() {
var tagOpen="aaa";
var tagClose="bbb";
//var sampleText="SMPL";
	var txtarea;
	if (document.editform) {
		txtarea = document.editform.wpTextbox1;
	} else {
		// some alternate form? take the first one we can find
		var areas = document.getElementsByTagName('textarea');
		txtarea = areas[0];
	}
	var txtareaorg=txtarea;
 
	// IE
	if (document.selection  && !is_gecko) {
		var theSelection = document.selection.createRange().text;
		if (!theSelection) {
			var txt = document.editform.wpTextbox1;
			var org;
			do {
				org=trim(txt.value);
				txt.value = txt.value.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
				txt.value = txt.value.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
			} while (org != trim(txt.value));
			txt.value = trim(txt.value);
//			exit;
		} else {
			txtarea.focus();
			var subst=theSelection;
			var org;
			do {
				org=trim(subst);
				subst = subst.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
				subst = subst.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
				subst = subst.replace(/\r?\n([^\s])/gi, "<br \/>$1");
			} while (org != trim(subst));
			document.selection.createRange().text = subst;
		}
	// Mozilla
	} else if(txtarea.selectionStart || txtarea.selectionStart == '0') {
		var replaced = false;
		var startPos = txtarea.selectionStart;
		var endPos = txtarea.selectionEnd;
		if (endPos-startPos) {
			replaced = true;
		}
		var scrollTop = txtarea.scrollTop;
		var myText = (txtarea.value).substring(startPos, endPos);
		if (!myText) {
			var org;
			do {
				org=trim(txtarea.value);
				txtarea.value = txtarea.value.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
				txtarea.value = txtarea.value.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
			} while (org != trim(txtarea.value));
			txtarea.value = trim(txtarea.value);
		} else {
			var subst=myText;
			var org;
			do {
				org=trim(subst);
				subst = subst.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
				subst = subst.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
				subst = subst.replace(/\r?\n([^\s])/gi, "<br \/>$1");
			} while (org != trim(subst));
			txtarea.value = txtarea.value.substring(0, startPos) + subst +
				txtarea.value.substring(endPos, txtarea.value.length);
		}
		txtarea.focus();
		//set new selection
		if (replaced) {
//			var cPos = startPos+(tagOpen.length+myText.length+tagClose.length);
			var cPos = startPos+(txtarea.length-txtareaorg.length);
 
			txtarea.selectionStart = cPos;
			txtarea.selectionEnd = cPos;
		} else {
			txtarea.selectionStart = startPos;//+tagOpen.length;
			txtarea.selectionEnd = startPos;//+tagOpen.length+myText.length;
		}
		txtarea.scrollTop = scrollTop;
 
	// All other browsers get no toolbar.
	// There was previously support for a crippled "help"
	// bar, but that caused more problems than it solved.
	}
	// reposition cursor if possible
	if (txtarea.createTextRange) {
		txtarea.caretPos = document.selection.createRange().duplicate();
	}
    dodajOpis("łamanie wierszy");
}
 
/*
    var txt = document.editform.wpTextbox1;
 
    var sels=txt.selectionStart;
    var sele=txt.selectionEnd;
    if (sele>sels) {
      str=txt.value.substring(sels,sele);
      var org;
      do {
        org=trim(str);
        str = str.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
        str = str.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
        str = str.replace(/\r?\n([^\s])/gi, "<br \/>$1");
      } while (org != trim(str));
//      var seln=sele - (str.length-txt.value.length);
      txt.value = txt.value.substring(0,sels) + str + txt.value.substring(sele);
//      txt.selectionStart=sels;
//      txt.selectionEnd=seln;
        txt.scrollTop=10;//txt.scrollHeight*(lineNo-10)/allLines;
        txt.focus();
      }
    else
      {
      var org;
      do {
        org=trim(txt.value);
        txt.value = txt.value.replace(/<br \/>\r?\n([^\s])/gi, "<br />$1");
        txt.value = txt.value.replace(/(\*[^\n\r]*)\r?\n([^\=\*\:\n\r])/gi, "$1<br />$2");
      } while (org != trim(txt.value));
    }
    txt.value = trim(txt.value);
  }
*/
function rmBR() {
    var txt = document.editform.wpTextbox1;
    txt.value = txt.value.replace(/<br>/gi, "<br \/>");
    txt.value = txt.value.replace(/<br\/>/gi, "<br \/>");
    txt.value = txt.value.replace(/<br \/>([^\r\n])/gi, "<br \/>\n$1");
    txt.value = trim(txt.value);
    dodajOpis("łamanie wierszy");
  }
 
function format() {
    var txt = document.editform.wpTextbox1;
    var old = txt.value;
    txt.value = whitespace(txt.value);
    txt.value = interpunkcja(txt.value);
    txt.value = catFixer(txt.value);
    txt.value = entities(txt.value);
    txt.value = fixheadings(txt.value);
    txt.value = fixsyntax(txt.value);
    txt.value = linkfixer(txt.value, false);
    //txt.value = imagefixer(txt.value);
    txt.value = whitespace(txt.value);
    txt.value = linksimplifyer(txt.value);
//    txt.value = lamiemyInterWiki(txt.value);
    txt.value = konceWiersza(txt.value);
//    txt.value = zobaczKonceWiersza(txt.value);
    txt.value = wielkoscZnakow(txt.value);
    txt.value = sortujKategorie(txt.value);
    txt.value = trim(txt.value);
    if (txt.value != trim(old))
      dodajOpis("formatowanie automatyczne");
}
 
function zobaczKonceWiersza(str){
   str = str.replace(/\n/gm, "!!!NNN!!!");
   str = str.replace(/\r/gm, "!!!RRR!!!");
   return trim(str);
   }
 
// "Nazwa używana w linku", // Nazwa do sortowania
// Ta tablica musi już być posortowana
// Kolejność sortowania za pywikipedia/family.py zgodnie z self.alphabetic
// Ponieważ pywikipedia/families/wikipedia_family.py zgodnie z self.interwiki_putfirst jest 'pl': self.alphabetic
// Dane za http://meta.wikimedia.org/wiki/Interwiki_sorting_order
 
var Jezyki=[
           'aa','af','ak','als','am','ang','ab','ar','an','arc','roa-rup','frp','as',
           'ast','gn','av','ay','az','bm','bn','zh-min-nan','map-bms','ba','be','be-x-old',
           'bh','bi','bar','bo','bs','br','bg','bxr','ca','cv','ceb','cs','ch',
           'ny','sn',
           'tum','cho','co','za','cy','da','pdc','de','dv','nv','dz','mh',
           'et','el','eml','en','es','eo','eu','ee','fa','fo','fr','fy','ff','fur','ga',
           'gv','gd','gl','ki','glk','gu','got','zh-classical','hak','xal','ko','ha','haw','hy','hi','ho','hsb','hr',
           'io','ig','ilo','bpy','id','ia','ie','iu','ik','os','xh','zu','is','it','he',
           'jv','kl','pam','kn','kr','ka','ks','csb','kk','kw','rw','ky','rn',
           'sw','kv','kg','ht','kj','ku','lad','lbe','lo','la','lv','lb','lij','lt',
           'li','ln','jbo','lg','lmo','hu','mk','mg','ml','mt','mi','mr','mzn','ms','cdo',
           'mo','mn','mus','my','nah','na','fj','nl','nds-nl','cr','ne','new','ja','nap',
           'ce','pih','no','nn','nrm','nov','oc','or','om','ng','hz','ug','uz','pa','pi',
           'pag','pap','ps','km','pms','nds','pl','pt','ty','ksh','ro','rmy','rm',
           'qu','ru','se','sm','sa','sg','sc','sco','st','tn','sq','ru-sib','scn',
           'si','simple','sd','ss','sk','sl','cu','so','sr','sh','su','fi','sv','tl',
           'ta','kab','roa-tara','tt','te','tet','th','vi','ti','tg','tpi','to','chr','chy','ve',
           'tr','tk','tw','udm','bug','uk','ur','vec','vo','fiu-vro','wa',
           'vls','war','wo','wuu','ts','ii','yi','yo','zh-yue','cbk-zam','diq','zea','bat-smg','zh',
           'zh-tw','zh-cn'];
 
function sortujKategorie(str){
   var kat="";
   while (str.search(/\[\[Kategoria\:[^\n\[\]]*\]\]/gmi) != -1) {
      var p=str.search(/\[\[Kategoria\:[^\n\[\]]*\]\]/gmi);
      var f=str.match(/(\[\[Kategoria\:[^\n\[\]]*\]\])/gmi)[0];
      kat=kat+"\n"+f;
      str=str.substring(0,p)+" "+str.substring(p+f.length,str.length);
      }
   var ilink="";
   var i;
   for (i=0; i<Jezyki.length; i++ ) {
      var sr="\\[\\["+Jezyki[i]+"\\:[\^\\n\[\\]]*\\]\\]";
      while (str.search(sr,"gmi") != -1) {
         var p=str.search(sr,"gmi");
         var f=str.match(sr,"gmi")[0];
         ilink=ilink+"\n"+f;
         str=str.substring(0,p)+" "+str.substring(p+f.length,str.length);
         }
      }
   str=konceWiersza(str)+"\n\n"+kat+"\n"+ilink;
   return trim(str);
   }
 
function wielkoscZnakow(str){
   str = str.replace(/^\x2a\x2a ?Autor\:/gmi, "** Autor:");
   str = str.replace(/^\x2a\x2a ?Opis\:/gmi, "** Opis:");
   str = str.replace(/^\x2a\x2a ?Pochodzenie\:/gmi, "** Opis:");
   str = str.replace(/^\x2a\x2a ?Komentarz\:/gmi, "** Opis:");
   str = str.replace(/^\x2a\x2a ?[ŹŻZ]r[óou]d[łl][oó]\:/gmi, "** Źródło:");
   str = str.replace(/^\x2a\x2a ?Postać\:/gmi, "** Postać:");
   str = str.replace(/^\x2a\x2a ?Zobacz też\:/gmi, "** Zobacz też:");
   str = str.replace(/^\x2a\x2a ?Postacie?\:/gmi, "** Postacie:");
   str = str.replace(/\[\[Image\: */gmi, "[[Grafika:");
   str = str.replace(/\[\[Grafika\: */gmi, "[[Grafika:");
   str = str.replace(/\[\[Grafika\: *Grafika\: */gmi, "[[Grafika:");
   str = str.replace(/\[\[Grafika\: *Image\: */gmi, "[[Grafika:");
   str = str.replace(/\[\[Image\: *Image\: */gmi, "[[Grafika:");
   str = str.replace(/\[\[Image\: *Grafika\: */gmi, "[[Grafika:");
// Inne
// Wymieniamy w linkach [[w:pl: na [[w:
   str = str.replace(/\[\[w\:pl\:/gi, "[[w:");
   return trim(str);
   }
 
function konceWiersza(str){
// Usuwamy podwójne wiersze przed **
    str = str.replace(/\n*(\n\x2a\x2a)/gm, "$1");
// Wstawiamy podwójne wiersze przed *
   str = str.replace(/([^\n\=])(\n)(\x2a[^\x2a])/gm, "$1$2$2$3");
   str = str.replace(/\=[\n\r]*([\n])\x2a/gm, "=$1*");
// Usuwamy podwójny koniec wiersza przed pierwszą *
   var l="\n";
   l=l.length;
   if (str.indexOf("\n\n*")+l*2==str.indexOf("*"))
     str = str.substring(0,str.indexOf("\n\n*"))+str.substring(str.indexOf("\n\n*")+l);
// Zamiana Zobacz też na '''Zobacz też:'''
   str = str.replace(/^Zobacz te.\:?$/gm, "'''Zobacz też:'''");
   str = str.replace(/^\=\=\=Zobacz te.\=\=\=$/gm, "==Zobacz też==");
// Usuwamy podwójne wiersze, jeśli wczesniej była sekwencja Zobacz też:''
   var org; do { org=str;
     str = str.replace(/(Zobacz te.)\:?(\'\'\'[^=]*)\n(\n\x2a)/gm, "$1:$2$3");
// Usuwamy podwójne wiersze, jeśli wczesniej była sekwencja ==Zobacz też==''
     str = str.replace(/\=\=Zobacz te.\:?\=\=([^=]*)\n(\n\x2a)/gm, "==Zobacz też==$1$2");
     } while (org != str);
   return trim(str);
   }
 
function interpunkcja(str){
   var org;
   do {
   org=str;
// ((?:^[^\n\[]+)|(?:\][^\n\[^\]]+)) na początku wiersza zabezpiecza przed zmianą w [ ]
// ((?:^[^\n\[\{]?)|(?:\][^\n\[\]\{]+)|(?:\}[^\n\{\}\[]+)) [ ] oraz { }
// Usuwamy spację przed znakiem interpunkcyjnym
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]+)(?: +)([\.\,\;\!\?\)\:])/gm, "$1$2$3");
// Usuwamy spację za znakiem interpunkcyjnym
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\()(?: +)([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]+)/gm, "$1$2$3");
// Wstawiamy spację przed znakiem interpunkcyjnym
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]+)(\()([^\)\n]+( ))/gm, "$1$2 $3$4$5");
// Wstawiamy spację za znakiem interpunkcyjnym
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([\.\,\;\!\?\)\:])([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]*)([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]+)/gm, "$1$2 $3$4");
// Usuwamy spacje w wielokropku
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\.)(?: +)(\.)/gm, "$1$2$3");
// Usuwamy spację w znacznikach formatowania
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([\'\}])(?: +)(\')/gm, "$1$2$3");
// Usuwamy spację w znacznikach formatowania
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\')(?: +)([\{])/gm, "$1$2$3");
// Usuwamy spację w znacznikach formatowania
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\{)(?: +)(\{)/gm, "$1$2$3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\})(?: +)(\})/gm, "$1$2$3");
// Usuwamy spacje przed i za : jeśli przed i za jest cyfra (formatowanie czasu), przecinek dla liczb
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d)(?: *)([\:])(?: +)(\d)/gm, "$1$2$3$4");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d)(?: +)([\:])(\d)/gm, "$1$2$3$4");
 
//    str = str.replace(/\.\.\./g, "...");
// Myślniki przerabiamy na Unicode
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\&mdash\;)/gm, "$1\u2014");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\&ndash\;)/gm, "$1\u2013");
// Myślnik w tekście cytatu oraz tekstach opisu
//    str = str.replace(/((?:^[^\[\{]*)|(?:\][^\[\]\{]*)|(?:\}[^\{\}\[]*))(.*)[\-\u2014]/g, "$1$2\u2013");
// Myślnik w tekście cytatu oraz tekstach opisu, ale nie pomiędzy cyframi
//str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(.*[^0-9\x2a ]) *[\u2014] *([^0-9 ])/gm, "$1$2 \u2014 $3");
//Wszystkie myślniki poza [] i {}
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))[\u002d\u2014\u2212] /gm, "$1\u2013 ");
//Usuwanie spacji w zakresach
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([^0-9\[\{\u2013 ]) ?[\u2013] ?([^\n0-9 ])/gm, "$1$2 \u2013 $3");
// Myślnik w zakresie dat 1-1
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d) ?[\u002d\u2014\u2013] ?(\d)/gm, "$1$2\u2013$3");
// p.n.e. n.p.m.
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(.\.) ?(.\.) ?(.\.)/gm, "$1$2$3$4");
// n.e.
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(.\.) ?(.\.)/gm, "$1$2$3");
// '''[[...]]''' (...) to
    str = str.replace(/^(\'{3,5}\[\[[^\n\[\]]*\]\]\'{3,5}(?: \([^\n\)]*\))?) ?(?:(?:to)|(?:[\u002d\u2013\u2014\u2212]))/gmi, "$1,");
// Myślnik za myślnikiem w znaczniku formatowania
    str = str.replace(/[\-\u2014\u2013] ?[\-\u2014\u2013] ?[\-\u2014\u2013] ?[\-\u2014\u2013]/g, "----");
    str = str.replace(/[\-\u2014\u2013] ?[\-\u2014\u2013]/g, "--");
    str = str.replace(/\< ?\! ?[\-\u2014\u2013] ?[\-\u2014\u2013]/g, "<!--");
    str = str.replace(/[\-\u2014\u2013] ?[\-\u2014\u2013] ?\>/g, "-->");
// usuwamy right jeśli jest thumb    
    str = str.replace(/(\[\[Grafika\:[^\]]*\|thumb[^\]]*)\|right/gi, "$1");
    str = str.replace(/(\[\[Grafika\:[^\]]*)\|right([^\]]*\|thumb)/gi, "$1$2");
// usuwamy px jeśli jest thumb    
    str = str.replace(/(\[\[Grafika\:[^\]]*\|thumb[^\]]*)\|\d\d?\d?px/gi, "$1");
    str = str.replace(/(\[\[Grafika\:[^\]]*)\|\d\d?\d?px([^\]]*\|thumb)/gi, "$1$2");
// podwójne odstępy między wierszami bez sensu
    str = str.replace(/(\]\]\n)\n(\[\[)/gm, "$1$2");
    str = str.replace(/(\]\]\n)\n(\'{3,5}\[\[)/gm, "$1$2");
// URL-e
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-Z]*\.) ?(pl|com|net|gov|de)/gmi, "$1$2$3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-Z]*\.) ?([a-zA-Z]*\.)(pl|com|net|gov|de)/gmi, "$1$2$3$4");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-Z]*\.) ?([a-zA-Z]*\.)([a-zA-Z]*\.)(pl|com|net|gov|de)/gmi, "$1$2$3$4$5");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))([a-zA-Z]*\.) ?([a-zA-Z]*\.)([a-zA-Z]*\.)([a-zA-Z]*\.)(pl|com|net|gov|de)/gmi, "$1$2$3$4$5$6");
// Poprawa dat
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:01|1|i)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 stycznia $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:02|2|ii)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 lutego $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:03|3|iii)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 marca $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:04|4|iv)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 kwietnia $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:05|5|v)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 maja $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:06|6|vi)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 czerwca $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:07|7|vii)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 lipca $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:08|8|viii)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 sierpnia $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:09|9|ix)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 września $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:10|10|x)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 października $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:11|11|xi)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 listopada $2");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d\d\d)[\-\u2013\u2014\. ](?:12|12|xii)[\-\u2013\u2014\. ](\d\d)/gmi, "$1$3 grudnia $2");
 
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:01|1|i)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 stycznia $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:02|2|ii)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 lutego $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:03|3|iii)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 marca $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:04|4|iv)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 kwietnia $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:05|5|v)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 maja $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:06|6|vi)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 czerwca $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:07|7|vii)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 lipca $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:08|8|viii)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 sierpnia $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:09|9|ix)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 września $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:10|10|x)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 października $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:11|11|xi)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 listopada $3");
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))(\d\d)[\-\u2013\u2014\. ](?:12|12|xii)[\-\u2013\u2014\. ](\d\d\d\d)/gmi, "$1$2 grudnia $3");
// Usuwam 0 sprzed pierwszej liczby
    str = str.replace(/((?:^[^\n\[\{]*)|(?:\][^\n\[\]\{]*)|(?:\}[^\n\{\}\[]*))0(\d (?:stycznia|lutego|marca|kwietnia|maja|czerwca|lipca|sierpnia|września|października|listopada|grudnia) \d\d\d\d)/gmi, "$1$2");
    } while (org != str);
    return trim(str);
}
 
function whitespace(str){
    str = str.replace(/\t/g, " ");
 
// Standaryzujemy końce wiersza
    str = str.replace(/(\r)(\n)/gm, "$2");
    str = str.replace(/\r/gm, "\n");
    str = str.replace(/(\r)(\n)/gm, "$2");
 
    str = str.replace(/^ ? ? (\n)/gm, "$1");
    str = str.replace(/(\n\n)\n+/gm, "$1");
    str = str.replace(/== ? ?\n(\n)==/gm, "==$1==");
    str = str.replace(/\n(\n\* ?\[?http)/gm, "$1");
 
    str = str.replace(/^ ? ? (\n)/gm, "$1");
    str = str.replace(/\n(\n\*)/gm, "$1");
    str = str.replace(/[ \t][ \t]+/g, " ");
    str = str.replace(/([=\n]\n)\n+/gm, "$1");
    str = str.replace(/ *(\n)/gm, "$1");
 
    //* bullet points
    str = str.replace(/^([\*#]+) /gm, "$1");
    str = str.replace(/^([\*#]+)/gm, "$1 ");
 
    //==Headings==
    str = str.replace(/^(={1,4}) ?(.*?) ?(={1,4})$/gm, "$1$2$3");
 
    //dash — spacing
    str = str.replace(/ ?(–|&#150;|&ndash;|&#8211;|&#x2013;) ?/g, "$1");
    str = str.replace(/ ?(—|&#151;|&mdash;|&#8212;|&#x2014;) ?/g, "$1");
    str = str.replace(/([^1-9])(—|&#151;|&mdash;|&#8212;|&#x2014;|–|&#150;|&ndash;|&#8211;|&#x2013;)([^1-9])/g, "$1 $2 $3");
 
//Spacje na końcach i początkach wierszy
    str = str.replace(/ ? ?<br \/> ? ?/gi, "<br />");
    str = str.replace(/^ /g, "");
    str = str.replace(/ $/g, "");
    return trim(str);
}
 
function entities(str){
    //str = str.replace(//g, "");
    str = str.replace(/&#150;|&#8211;|&#x2013;/g, "&ndash;");
    str = str.replace(/&#151;|&#8212;|&#x2014;/g, "&mdash;");
   // str = str.replace(/(cm| m|km|mi)<sup>2</sup>/g, "$1²");
    str = str.replace(/&sup2;/g, "²");
    str = str.replace(/&deg;/g, "°");
 
    return trim(str);
}
 
//Fix ==See also== and similar section common errors.
function fixheadings(str)
{
  if( !str.match(/= ?See also ?=/) )
    str = str.replace(/(== ?)(see also:?|related topics:?|related articles:?|internal links:?|also see:?)( ?==)/gi, "$1See also$3");
 
  str = str.replace(/(== ?)(external links?:?|outside links?|web ?links?:?|exterior links?:?)( ?==)/gi, "$1External links$3");
  str = str.replace(/(== ?)(references?:?)( ?==)/gi, "$1References$3");
  str = str.replace(/(== ?)(sources?:?)( ?==)/gi, "$1Sources$3");
  str = str.replace(/(== ?)(further readings?:?)( ?==)/gi, "$1Further reading$3");
 
  return str;
}
 
function catFixer(str){
    str = str.replace(/\[\[ ?[Cc]ategory ?: ?/g, "[[Kategoria:");
    str = str.replace(/\[\[ ?[Kk]ategoria ?: ?/g, "[[Kategoria:");
 
    return trim(str);
}
 
//fixes many common syntax problems
function fixsyntax(str)
{
  //replace html with wiki syntax
  if( !str.match(/'<\/?[ib]>|<\/?[ib]>'/gi) )
  {
    str = str.replace(/<i>(.*?)<\/i>/gi, "''$1''");
    str = str.replace(/<b>(.*?)<\/b>/gi, "'''$1'''");
  }
  str = str.replace(/<br\/>/gi, "<br />");
  str = str.replace(/<br>/gi, "<br />");
 
  str = str.replace(/ ? ?<br \/> ? ?/gi, "<br />");
  return trim(str);
}
 
//formats links in standard fashion
function linkfixer(str, checkImages)
{ 
  str = str.replace(/\]\[/g, "] [");
  var m = str.match(/\[?\[[^\]]*?\]\]?/g);
  if (m)
  {
    for (var i = 0; i < m.length; i++)
    {
      var x = m[i].toString();
      var y = x;
 
      //internal links only
      if ( !y.match(/^\[?\[http:\/\//i) && !y.match(/^\[?\[image:/i) )
      {
        if (y.indexOf(":") == -1 && y.substr(0,3) != "[[_" && y.indexOf("|_") == -1)
        {
          if (y.indexOf("|") == -1)
            y = y.replace(/_/g, " ");
          else
            y = y.replace( y.substr(0, y.indexOf("|")), y.substr(0, y.indexOf("|")).replace(/_/g, " "));
        }  
 
        y = y.replace(/ ?\| ?/, "|").replace("|]]", "| ]]");
 
      }
 
      str = str.replace(x, y);
    }
  }
 
  //repair bad internal links
  str = str.replace(/\[\[ ?([^\]]*?) ?\]\]/g, "[[$1]]");
  str = str.replace(/\[\[([^\]]*?)( |_)#([^\]]*?)\]\]/g, "[[$1#$3]]");
 
  //repair bad external links
  str = str.replace(/\[?\[http:\/\/([^\]]*?)\]\]?/gi, "[http://$1]");
  str = str.replace(/\[http:\/\/([^\]]*?)\|([^\]]*?)\]/gi, "[http://$1 $2]");
 
  return trim(str);
}
 
//fixes images
function imagefixer(str)
{
 
  //remove external images
  str = str.replace(/\[?\[image:http:\/\/([^\]]*?)\]\]?/gi, "[http://$1]");
  str = str.replace(/\[?\[grafika:http:\/\/([^\]]*?)\]\]?/gi, "[http://$1]");
 
  //fix links within internal images
  var m = str.match(/\[?\[image:[^\[\]]*?(\[?\[[^\]]*?\]*?[^\[\]]*?)*?\]+/gi);
  if (m)
  {
    for (var i = 0; i < m.length; i++)
    {
      var x = m[i].toString();
      var y = x;
 
      y = y.replace(/^\[\[i/i, "I").replace(/\]\]$/, "");
      y = y.replace(/(\[[^\]]*?)$/, "$1]");
      y = linkfixer(y, true);
      y = "[[" + y + "]]";
 
      str = str.replace(x, y);
    }
  }
  var m = str.match(/\[?\[grafika:[^\[\]]*?(\[?\[[^\]]*?\]*?[^\[\]]*?)*?\]+/gi);
  if (m)
  {
    for (var i = 0; i < m.length; i++)
    {
      var x = m[i].toString();
      var y = x;
 
      y = y.replace(/^\[\[g/i, "G").replace(/\]\]$/, "");
      y = y.replace(/(\[[^\]]*?)$/, "$1]");
      y = linkfixer(y, true);
      y = "[[" + y + "]]";
 
      str = str.replace(x, y);
    }
  }
 
  return trim(str);
}
 
//simplifies some links e.g. [[Dog|dog]] to [[dog]] and [[Dog|dogs]] to [[dog]]s
function linksimplifyer(str){
  var m = str.match(/\[\[([^\[]*?)\|([^\[]*?)\]\]/g);
  if (m)
  {
    for (var i = 0; i < m.length; i++)
    {
      var n_arr = m[i].toString().match(/\[\[([^\[]*?)\|([^\[]*?)\]\]/);
      var n = n_arr[0];
      var a = n_arr[1];
      var b = n_arr[2];
 
      if (b.indexOf(a) == 0 || b.indexOf(TurnFirstToLower(a)) == 0)
      {
        var k = n.replace(/\[\[([^\]\|]*?)\|(\1)([a-zA-ZąśżźćęńółĄŚŻŹĆĘŃÓŁ]*?)\]\]/i, "[[$2]]$3");
        str = str.replace(n, k);
      }
    }
  }
 
  str = str.replace(/\[\[([^\]\|]+)\|([^\]\|]+)\]\]([A-Za-z\'][A-Za-z]*)([\.\,\;\:\"\!\?\s\n])/g, "[[$1|$2$3]]$4");
 
  return str;
}
 
//trim start and end, trim spaces from the end of lines
function trim(str) {
   str = str.replace(/ $/gm, "");
   return str.replace(/^\s*|\s*$/g, "");
}
 
//turns first character to lowercase
function TurnFirstToLower(input) {
  if (input != "")
  {
    var input = trim(input);
    var temp = input.substr(0, 1);
    return temp.toLowerCase() + input.substr(1, input.length);
  }
  else
    return "";
}
 
//entities that should never be unicoded
function noUnicodify(str) {
  str = str.replace(" &amp; ", " & ");
  str = str.replace("&amp;", "&amp;amp;").replace("&amp;lt;", "&amp;amp;lt;").replace("&amp;gt;", "&amp;amp;gt;").replace("&amp;quot;", "&amp;amp;quot;").replace("&amp;apos;", "&amp;amp;apos;");
  str = str.replace("&minus;", "&amp;minus;").replace("&times;", "&amp;times;");
 
  str = str.replace("&nbsp;", "&amp;nbsp;").replace("&thinsp;", "&amp;thinsp;").replace("&shy;", "&amp;shy;");
  str = str.replace("&prime;", "&amp;prime;");
  str = str.replace(/&(#0?9[13];)/, "&amp;$1");
  str = str.replace(/&(#0?12[345];)/, "&amp;$1");
 
  return str;
}
 
function addFormatButton() {
    editingTools = document.getElementById('toolbar');
    if (editingTools != null)  {
        FormatTextButton = "<a href=\"javascript:document.forms.editform.wpSave.click();\"><img src=\"http://upload.wikimedia.org/wikipedia/commons/9/90/Button_save_changes.png\" alt=\"Zapisz\" title=\"Zapisz zmiany\"></a>";
        editingTools.innerHTML = editingTools.innerHTML + FormatTextButton;
        FormatTextButton = "<a href=\"javascript:document.forms.editform.wpPreview.click();\"><img src=\"http://upload.wikimedia.org/wikipedia/commons/e/e9/Button_preview.png\" alt=\"Podgląd\" title=\"Pokaż podgląd\"></a>";
        editingTools.innerHTML = editingTools.innerHTML + FormatTextButton;
        FormatTextButton = "<a href=\"javascript:format();\"><img src=\"http://upload.wikimedia.org/wikipedia/commons/c/c1/Button_wikiquote.png\" alt=\"Formatuj\" title=\"Formatuj tekst\"></a>";
        editingTools.innerHTML = editingTools.innerHTML + FormatTextButton;
 
        FormatTextButton = "<a href=\"javascript:mkBR();\"><img src=\"http://upload.wikimedia.org/wikipedia/commons/c/c5/Button_br.png\" alt=\"Wstaw znaczniki br\" title=\"Wstaw znaczniki br\"></a>";
        editingTools.innerHTML = editingTools.innerHTML + FormatTextButton;
 
        FormatTextButton = "<a href=\"javascript:rmBR();\"><img src=\"http://upload.wikimedia.org/wikipedia/commons/f/f3/Button_brrm.png\" alt=\"Usuń br\" title=\"Usuń znaczniki br\"></a>";
        editingTools.innerHTML = editingTools.innerHTML + FormatTextButton;
    }
}
 
 
addOnloadHook(function () {
  if(document.forms.editform) {
// Dodaje zakładkę na górze obok Edytuj
//    addPortletLink('p-cactions', 'javascript:format()', 'formatuj', 'ca-format', 'Format article', '', document.getElementById('ca-edit'));
// Dodaje przycisk do toolbara
  addFormatButton();
 
  for (var i = 0; i < mwEditButtons.length; i++)
    if (mwEditButtons[i].imageId=='mw-editbutton-image')
      {
      mwEditButtons[i].tagClose='|thumb|'+wgTitle+']]';
      }
  addButton('http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png','Kategoria','[[Kategoria:','|'+wgTitle+']]','tu wstaw','');
  }
});
 
 
/***************************************************************************************************************************/
function przyciskiOpis()
{
	// stop before starting
	if (window.przyciskiOpisDone) return;
 
	// sprawdzenie, czy to jest pole edycji z opisem zmian (nie jest takie jako nagłówek)
	var el = document.getElementById('wpSummaryLabel');
	if (el) {
		if (el.innerHTML.indexOf('Opis zmian')==-1)
			return;	// stop
	} else return;	// stop
 
	// dodanie elementu okalającego przyciski bezpośrednio za opisem zmian
	var el = document.getElementById('wpSummary').nextSibling;
	var opisBtns = document.createElement('span');
	opisBtns.id = 'userSummaryButtonsA'
	el.parentNode.insertBefore(document.createElement('br'), el)
	el.parentNode.insertBefore(opisBtns, el)
 
	// dodawanie przycisków
//	var kl = 'userButtonsStyle';
	var kl = '';	// klasa jest niepotrzebna (wszystkie <a> w #userSummaryButtonsA ustawione poprzez CSS)
	if (opisBtns)
	{
		// drobne różne
		przyciskiDodaj(opisBtns, 'lit.', 'dodajOpis("lit.")', kl,
			'Poprawiono literówkę');
                przyciskiDodaj(opisBtns, 'int.', 'dodajOpis("int.")', kl,
                        'Poprawiono interpunkcję');
                przyciskiDodaj(opisBtns, 'format.', 'dodajOpis("formatowanie")', kl,
                        'Przeformatowano');
                przyciskiDodaj(opisBtns, 'notka', 'dodajOpis("notka")', kl,
                        'Poprawiono/dodano notkę');
                przyciskiDodaj(opisBtns, 'sort.', 'dodajOpis("sortowanie")', kl,
                        'Posortowano cytaty alfabetycznie lub chronologicznie');
		przyciskiDodaj(opisBtns, 'grafika', 'dodajOpis("grafika")', kl,
			'Poprawiono/dodano grafikę');
		przyciskiDodaj(opisBtns, 'ogonki', 'dodajOpis("polskie znaki")', kl,
			'Poprawa polskich znaków');
 
		// opisBtns.appendChild(document.createTextNode(' ')); // odstęp
 
		// drobne około wikizacyjne
		przyciskiDodaj(opisBtns, 'linki-zew', 'dodajOpis("linki zewnętrzne")', kl,
			'Poprawiono/dodano linki zewnętrzne');
		przyciskiDodaj(opisBtns, 'linki-popr', 'dodajOpis("poprawa linków")', kl,
			'Poprawiono linki zewnętrzne/wewnętrzne');
		przyciskiDodaj(opisBtns, 'interwiki', 'dodajOpis("[[Pomoc:Interwiki|interwiki]]")', kl,
			'Poprawiono/dodano linki do innych wersji Wikipedii');
		przyciskiDodaj(opisBtns, 'kat.', 'dodajOpis("kat.")', kl,
			'Poprawiono/dodano kategorię');
//		przyciskiDodaj(opisBtns, 'wikizacja', 'dodajOpis("[[Wikipedia:Terminologia#W|wikizacja]]")', kl,
//			'Wikizacja artykułu (dodanie linków wewnętrznych, podział na sekcje itp.)');
 
		opisBtns.appendChild(document.createTextNode(' ')); // odstęp
 
		// drobne około techniczne
		przyciskiDodaj(opisBtns, 'stub', 'dodajOpis("stub (zalążek)")', kl,
			'Ten artykuł to stub');
		przyciskiDodaj(opisBtns, 'redir', 'dodajOpis("redir (przekierowanie)")', kl,
			'Poprawiono/dodano redirect');
		przyciskiDodaj(opisBtns, 'disamb', 'dodajOpis("disambig (ujednoznacznienie)")', kl,
			'Poprawiono/dodano stronę ujednoznaczniającą');
		przyciskiDodaj(opisBtns, 'szablon', 'dodajOpis("szablon")', kl,
			'Poprawiono/dodano szablon');
//		przyciskiDodaj(opisBtns, 'infobox', 'dodajOpis("infobox")', kl,
//			'Poprawiono/uzupełnienio/dodano infobox');
 
		opisBtns.appendChild(document.createElement('br'));
 
		// drobne inne
		przyciskiDodaj(opisBtns, 'dr.meryt.', 'dodajOpis("drobne merytoryczne")', kl,
			'Drobne zmiany merytoryczne');
		przyciskiDodaj(opisBtns, 'dr.red.', 'dodajOpis("drobne redakcyjne")', kl,
			'Drobne zmiany redakcyjne');
		przyciskiDodaj(opisBtns, 'dr.tech.', 'dodajOpis("drobne techniczne")', kl,
			'Drobne zmiany techniczne');
 
		opisBtns.appendChild(document.createTextNode(' ')); // odstęp
 
		// do użytkownika i około administracyjne
		przyciskiDodaj(opisBtns, 'witaj', 'dodajOpis("witaj")', kl,
			'Dodano powitanie dla użytkownika');
		przyciskiDodaj(opisBtns, 'test', 'dodajOpis("test")', kl,
			'Dodano ostrzeżenie dla użytkownika');      
 
		przyciskiDodaj(opisBtns, 'npa', 'dodajOpis("[[WC:NPA|npa]]")', kl,
			'Zgłoszono artykuł jako podejrzany o naruszenie praw autorskich');
		przyciskiDodaj(opisBtns, 'sdu', 'dodajOpis("[[WC:SDU|sdu]]")', kl,
			'Zgłoszono artykuł do usunięcia');
		przyciskiDodaj(opisBtns, 'ek', 'dodajOpis("[[WC:EK|ek]]")', kl,
			'Zgłoszono artykuł do ekspresowego (s)kasowania');
		przyciskiDodaj(opisBtns, 'rev.', 'dodajOpis("przywrócenie poprzedniej wersji")', kl,
			'przywrócenie poprzedniej wersji');
		przyciskiDodaj(opisBtns, 'rev.długi', 'dodajOpis("*)Przywrócono poprzednią wersję, jej autor to [[Użytkownik:?|?]]. Autor wycofanej edycji to [[Specjalna:Contributions/?|?]]")', kl,
			'przywrócenie poprzedniej wersji - długi opis jak przy automatycznym');
		przyciskiDodaj(opisBtns, 'integracja', 'dodajOpis("integracja (autorzy: [[Użytkownik:]], [[Użytkownik:]]...")', kl,
			'Integracja artykułu z innym - podaj autorów wklejanego tekstu!');
 
		opisBtns.appendChild(document.createTextNode(' ')); // odstęp
 
		// insze do dyskusji i głosowań
		przyciskiDodaj(opisBtns, 'głos', 'dodajOpis("głos")', kl,
			'Oddano głos');
		przyciskiDodaj(opisBtns, 'komentarz', 'dodajOpis("komentarz")', kl,
			'Dodano komentarz w dyskusji lub do głosu');
 
		// odstęp przed własnymi
		opisBtns.appendChild(document.createTextNode(' ')); // odstęp
 
//		document.editform.wpMinoredit.onclick = onMinorEditClick;
	}
}
 
/*
Parametry:
* elUserBtns - element okalający, do którego dodać przycisk
* pTekst - tekst w środku przycisku
* pAkcja - akcja (w formie tekstowej) jaką wykonać przy naciśnięciu; może być ciągiem poleceń
* pKlasa - klasa jeśli konieczna
* pOpis - opis widoczny w dymku przy przycisku
*/
function przyciskiDodaj(elUserBtns, pTekst, pAkcja, pKlasa, pOpis)
{
	var nowyBtn = document.createElement('a');
 
	// atrybuty
	nowyBtn.appendChild(document.createTextNode(pTekst));
	nowyBtn.title = pOpis;
	if (pKlasa != '')
		nowyBtn.className = pKlasa
	;
	nowyBtn.onclick = new Function(pAkcja);
 
	// dodanie przycisku
	elUserBtns.appendChild(nowyBtn);
}
 
var clickedMinor = false;
function onMinorEditClick()
{
	if (this.checked && !clickedMinor)
	{
		dodajOpis("drobne");
		clickedMinor = true;
	}
}
 
if (document.URL.indexOf("action=edit") > 0 || document.URL.indexOf("action=submit") > 0)
{
	if (wgCanonicalNamespace != "Special")
	{
		addOnloadHook(przyciskiOpis);
	}
}
 
 document.write('<link rel="stylesheet" type="text/css" href=" \
 http://pl.wikiquote.org/w/index.php?title=U%C5%BCytkownik:Sp5uhe/formatowanie-test.css \
 &amp;action=raw&amp;ctype=text/css&amp;dontcountme=s">');
 
/*</nowiki></pre>*/