Корисник:Bjankuloski06/Регуларни изрази/Regex menu framework.js
Напомена: По објавувањето може да треба да го исчистите меѓускладот (кеш) на прелистувачот за да можете ги видите промените.
- Firefox / Safari: Држете Shift и стиснете на Превчитај (Reload) или притиснете Ctrl-F5 или Ctrl-R (⌘-R на Mac);
- Google Chrome: Притиснете Ctrl-Shift-R (⌘-R на Mac)
- Internet Explorer / Edge: Држете Ctrl додека притискате на Refresh или притиснете Ctrl-F5.
- Opera: Стиснете на Ctrl-F5.
/*************
*** Regex menu framework 1.2
*** by [[m:user:Pathoschild]]
*** documentation: http://meta.wikimedia.org/wiki/User:Pathoschild/Script:Regex_menu_framework
*************/
var rmf_globals = {};
if($.inArray( mw.config.get( 'wgAction' ), [ 'edit' , 'submit' ]) > -1) {
/****************
*** config tools
****************/
// function
window.regexTool = function (name,functionname) {
var newline = document.createElement('li');
var newlink = document.createElement('a');
newlink.setAttribute('href','javascript:'+functionname);
newlink.setAttribute('title',name);
newlink.setAttribute('class','sidebar-link');
newlink.appendChild(document.createTextNode(name));
newline.appendChild(newlink);
toollist.appendChild(newline);
};
/****************
*** framework tools
****************/
/* search only */
window.regsearch = function (search) {
return editbox.value.match(search);
};
/* search & replace */
window.regex = function (search,replace,repeat) {
/* define how many times to perform */
if(!repeat || repeat<0) {
var repeat = 1;
}
/* perform */
for(var i=0; i<repeat; i++) {
editbox.value = editbox.value.replace(search,replace);
}
};
/* change reason */
window.setreason = function(reason,mode) {
// append once
if( mode=='appendonce' && !rmf_globals['summary_'+reason] ) {
rmf_globals['summary_'+reason] = 1;
if(editreason.value.match(/[^\s]/))
editreason.value += ', ' + reason;
else
editreason.value = reason;
}
// append mode
else if(mode=='append' && editreason.value.match(/[^\s]/)) {
editreason.value += ', ' + reason;
}
// default mode
else {
editreason.value = reason;
}
};
/* set edit options */
window.setoptions = function (minor,watch) {
// minor edit?
if(minor=='true') {
document.getElementById('wpMinoredit').checked = true;
}
else if(minor=='false') {
document.getElementById('wpMinoredit').checked = false;
}
// watch page?
if(watch=='true') {
document.getElementById('wpWatchthis').checked = true;
}
else if(watch=='false') {
document.getElementById('wpWatchthis').checked = false;
}
};
/* automatically perform an action */
window.doaction = function (action) {
if(action=='preview') {
document.getElementById('wpPreview').click();
}
else if(action=='diff') {
document.getElementById('wpDiff').click();
}
else if(action=='save') {
document.getElementById('wpSave').click();
}
};
/****************
*** алатка Прилагодливи регуларни изрази
****************/
/* create form */
window.custom = function () {
/* if already open */
if(document.getElementById('regexform')) {
/* display reset warning, unless it's already displayed */
if(!document.getElementById('resetwarning')) {
/* ask the user whether he wants to reset the form or cancel */
// create elements
resetwarning = document.createElement('div');
resetwarning.setAttribute('id','resetwarning');
var resetlink = document.createElement('a');
resetlink.setAttribute('href','javascript:customremove(); custom();');
resetlink.setAttribute('title','Reset form');
resetlink.appendChild(document.createTextNode('reset form'));
var cancellink = document.createElement('a');
cancellink.setAttribute('href','javascript:function customreset() { regexform.removeChild(resetwarning); }; customreset();');
cancellink.setAttribute('title','Cancel new launch');
cancellink.appendChild(document.createTextNode('cancel new launch'));
// put message together
resetwarning.appendChild(document.createTextNode('You are launching the Custom regex tool, but it is already open. Please select an action: '));
resetwarning.appendChild(resetlink);
resetwarning.appendChild(document.createTextNode(' or '));
resetwarning.appendChild(cancellink);
// output
regexform.insertBefore(resetwarning,regexform.firstChild);
}
}
else {
/* container */
regexform = document.createElement('div');
regexform.setAttribute('id','regexform');
editbox.parentNode.insertBefore(regexform,editbox.parentNode.firstChild);
/* header */
var formheader = document.createElement('h3');
formheader.appendChild(document.createTextNode('Прилагодливи регуларни изрази'));
regexform.appendChild(formheader);
/* instructions */
var newlink = document.createElement('a');
newlink.setAttribute('href','javascript:function opennew(url) { window.open(url); }; opennew("http://www.regular-expressions.info/javascript.html");');
newlink.setAttribute('title','JavaScript regex tutorial');
newlink.setAttribute('class','external text');
newlink.appendChild(document.createTextNode('упатство'));
var newtext = document.createElement('p');
newtext.appendChild(document.createTextNode('Образецов ви овозможува динамичка примена на шеми на регуларни изрази. Внесете шема во полето „Пребарај“ во обликот „пребарана шема“ или „/пребарана шема/изменители“ (погл. '));
newtext.appendChild(newlink);
newtext.appendChild(document.createTextNode(') и текст за замена во полето „Замени“ (повикувачките групи се означуваат од „$1“ до „$9“).'));
regexform.appendChild(newtext);
/* mini tutorial */
var newtext = document.createElement('p');
newtext.appendChild(document.createTextNode('Расположиви изменители (можат да се комбинираат, како на пр. /foo/mig):'));
regexform.appendChild(newtext);
var newtext = document.createElement('ul');
var newitem = document.createElement('li');
newitem.appendChild(document.createTextNode('по редови (/foo/m): совпаѓањата се проверуваат по редови, наместо целиот документ наеднаш.'));
regexform.appendChild(newtext);
newtext.appendChild(newitem);
var newitem = document.createElement('li');
newitem.appendChild(document.createTextNode('насекаде (/foo/g): се заменуваат сите совпаѓања, наместо само првото.'));
newtext.appendChild(newitem);
var newitem = document.createElement('li');
newitem.appendChild(document.createTextNode('занемарувајќи големина (/foo/i): проверката ја занемарува големината на буквите, што значи „/foo/i“ ќе се совпадне и со „foo“ и со „FOO“.'));
newtext.appendChild(newitem);
/* form tag */
var formform = document.createElement('form');
formform.setAttribute('id','regexformform');
regexform.appendChild(formform);
// place marker for input boxes
inputlist = document.createElement('ol');
formform.appendChild(inputlist);
/* options */
// list format
var formoptions = document.createElement('ul');
formform.appendChild(formoptions);
// go! link
var container = document.createElement('li');
var newlink = document.createElement('a');
newlink.setAttribute('href','javascript:customgo();');
newlink.setAttribute('title','Примени ги шемите');
newlink.appendChild(document.createTextNode('Примени ги шемите'));
newlink.setAttribute('style','font-weight:bold;');
container.appendChild(newlink);
formoptions.appendChild(container);
// add new boxes link
var container = document.createElement('li');
var newlink = document.createElement('a');
newlink.setAttribute('href','javascript:customaddnew();');
newlink.setAttribute('title','Додај уште полиња');
newlink.appendChild(document.createTextNode('Додај уште полиња'));
container.appendChild(newlink);
formoptions.appendChild(container);
// remove form
var container = document.createElement('li');
var newlink = document.createElement('a');
newlink.setAttribute('href','javascript:customremove();');
newlink.setAttribute('title','Отстрани го образецов');
newlink.appendChild(document.createTextNode('Отстрани го образецов'));
newlink.setAttribute('style','color:red;');
container.appendChild(newlink);
formoptions.appendChild(container);
// add first pair of input boxes
customaddnew();
}
};
/* add a new pair of input boxes */
window.customaddnew = function () {
/* count for later processing */
if("patterncount" in window) {
patterncount++;
}
else {
patterncount = 0;
}
/* add new list item */
var container = document.createElement('li');
inputlist.appendChild(container);
/* create search */
var newinput = document.createElement('textarea');
newinput.setAttribute('class','formsearch');
newinput.setAttribute('tabindex',patterncount+100);
newlabel = document.createElement('label');
newlabel.setAttribute('for','formsearch');
newlabel.appendChild(document.createTextNode('Најди бр.'+(patterncount+1)));
container.appendChild(newlabel);
container.appendChild(newinput);
/* force newline */
container.appendChild(document.createElement('br'));
/* create replace */
var newinput = document.createElement('textarea');
newinput.setAttribute('class','formreplace');
newinput.setAttribute('tabindex',patterncount+101);
newlabel = document.createElement('label');
newlabel.setAttribute('for','formreplace');
newlabel.appendChild(document.createTextNode('Замени бр.'+(patterncount+1)));
container.appendChild(newlabel);
container.appendChild(newinput);
};
/* run patterns */
window.customgo = function () {
/* get search and replace arrays */
var arrpatterns = regexform.getElementsByTagName('textarea');
arrsearch = [];
arrreplace = [];
var searchcount = -1;
var replacecount = -1;
for(i=0; i<arrpatterns.length; i++) {
/* search boxes */
if(arrpatterns[i].getAttribute('class') == 'formsearch') {
searchcount++;
arrsearch[searchcount] = arrpatterns[i].value;
}
/* replace boxes */
else if (arrpatterns[i].getAttribute('class') == 'formreplace') {
replacecount++;
arrreplace[replacecount] = arrpatterns[i].value;
}
}
/* perform patterns */
for(var i=0; i<arrsearch.length; i++) {
/* convert input to regex */
// without delimiters
if(!arrsearch[i].match(/^\s*\/[\s\S]*\/[a-z]*\s*$/i)) {
arrsearch[i] = new RegExp(arrsearch[i]);
}
// with delimiters
else {
// break into parts
var regpattern = arrsearch[i].replace(/^\s*\/([\s\S]*)\/[a-z]*\s*$/i,'$1');
var regmodifiers = arrsearch[i].replace(/^\s*\/[\s\S]*\/([a-z]*)\s*$/,'$1');
// filter invalid flags
regmodifiers = regmodifiers.replace(/[^gim]/ig,'');
// convert into array
arrsearch[i] = new RegExp(regpattern, regmodifiers);
}
/* perform */
editbox.value = editbox.value.replace(arrsearch[i],arrreplace[i]);
}
};
/* remove form */
function customremove() {
regexform.parentNode.removeChild(regexform);
patterncount = -1;
};
/****************
*** create menu
****************/
window.rfmenu = function (rfmconfig) {
/* get elements */
// note: these must be global.
editbox = document.getElementById('wpTextbox1');
editreason = document.getElementById('wpSummary');
sidebar = document.getElementById('mw-panel') /* vector */
|| document.getElementById('column-one') /* monobook, myskin, chick & simple */
|| document.getElementById('mw_portlets'); /* modern */
/* add CSS */
mw.util.addCSS('<style type="text/css">'
+ '#p-regex li { list-style:none !important; }'
+ '#p-regex a { color:gray !important; }'
+ '#regexform { margin:1em; padding:0.5em; border:2px solid blue; }'
+ '#regexform ol { list-style:none; border:1px solid #CCC; padding:0.5em; }'
+ '#resetwarning { border:1px solid red; padding:3px; }'
+ '</style>');
/* create menu */
var container = document.createElement('div');
container.setAttribute('class','portlet portal collapsed');
container.setAttribute('id','p-regex');
sidebar.appendChild(container);
var header = document.createElement('h3');
header.appendChild(document.createTextNode('Скрипти'));
container.appendChild(header);
var toolbox = document.createElement('div');
toolbox.setAttribute('class','p-body pBody body');
container.appendChild(toolbox);
toollist = document.createElement('ul');
toolbox.appendChild(toollist);
/* load user-defined sidebar links */
if(self['gadget_rmflinks']) { gadget_rmflinks(); }
if(self['rmflinks']) { rmflinks(); }
};
/* load script */
$(rfmenu);
}