مستخدم:زكريا/common.js
ملاحظة: بعد النشر، أنت قد تحتاج إلى إفراغ الكاش الخاص بمتصفحك لرؤية التغييرات.
- فايرفوكس / سافاري: أمسك Shift أثناء ضغط Reload، أو اضغط على إما Ctrl-F5 أو Ctrl-R (⌘-R على ماك)
- جوجل كروم: اضغط Ctrl-Shift-R (⌘-Shift-R على ماك)
- إنترنت إكسبلورر/إيدج: أمسك Ctrl أثناء ضغط Refresh، أو اضغط Ctrl-F5
- أوبرا: اضغط Ctrl-F5.
// This script adds an "Add definition" button to the toolbox section of the sidebar.
var bodyContent;
if(mw.config.get("wgNamespaceNumber") == 0 && mw.config.get("wgCurRevisionId") && mw.config.get("wgAction") == "view" && !/&printable=yes|&diff=|&oldid=/.test(window.location.search))
{
jQuery(document).ready(function()
{
bodyContent = document.getElementById('bodyContent');
mw.util.addPortletLink('p-tb', 'javascript:addDefinition()', 'Add definition');
});
}
var currentBoxToBeAdded, definitionHover, tempDefinitionText
function setUpBoxToBeAdded()
{
bodyContent.appendChild(currentBoxToBeAdded);
document.onmousemove =
function (e)
{
e = e || event;
currentBoxToBeAdded.style.right = e.clientX + 2 + 'px';
currentBoxToBeAdded.style.top = e.clientY + 2 + 'px';
};
document.body.style.cursor = 'move';
}
function addDefinition()
{
var instructions = "Type in your definition, drag it to where it should be placed, and click there to place it.",
temp;
currentBoxToBeAdded =
(
newNode
(
'div',
{
style:
'border: 1px solid #000000;' +
'position:fixed; right:200px; top:500px; z-index:5;' +
'padding:10px; background-color:#FFFFFF;'
},
newNode
(
'nobr',
'Definition: ',
newNode
(
'input',
{
size: 100,
blur: function(){
if(definitionHover)
{addDefinition2(definitionHover, currentBoxToBeAdded.lastChild.lastChild.value.replace(instructions,''))}
else
{tempDefinitionText=currentBoxToBeAdded.lastChild.lastChild.value.replace(instructions,'');}
bodyContent.removeChild(currentBoxToBeAdded);
document.onmousemove = null;
document.body.style.cursor = '';
for(var ols = document.getElementsByTagName('ol'), i = 0; i < ols.length; i++)
{
for(var lis = ols[i].getElementsByTagName('li'), ii = 0; ii < lis.length; ii++)
{
if(lis[ii].parentNode == ols[i])
{
lis[ii].onmouseover = lis[ii].onmouseout = null
}
}
}
},
value: tempDefinitionText || ""
}
)
)
)
);
setUpBoxToBeAdded();
temp=currentBoxToBeAdded.lastChild.lastChild
temp.focus();
if(!temp.value){
temp.value = instructions
temp.style.color="#AAA"
temp.onkeydown=function(){
this.style.color = "#000";
this.value=''
this.onkeydown=null
}
}
for(var ols = document.getElementsByTagName('ol'), i = 0; i < ols.length; i++)
{
for(var lis = ols[i].getElementsByTagName('li'), ii = 0; ii < lis.length; ii++)
{
if(lis[ii].parentNode == ols[i])
{
lis[ii].onmouseover =
function () { this.style.borderBottom = '1px solid #000000'; definitionHover=this; };
lis[ii].onmouseout =
function () { this.style.borderBottom = this.style.borderTopStyle=="dashed"?"2px #00FF00 dashed":""; definitionHover=null };
}
}
}
}
function addDefinition2(q, newdef)
{
q.style.borderBottom = q.style.borderTopStyle=="dashed"?"2px #00FF00 dashed":"";
definitionHover = tempDefinitionText = null;
var qq = newNode('li', newNode('span'));
JsMwApi().page(mw.config.get("wgPageName")).parseFragment(newdef, function (res) { qq.lastChild.innerHTML = res; });
function addDefinition3(wikitext)
{
var prevheader = q, prevols=0, prevlis=1;
while(prevheader.previousSibling)
{
prevheader = prevheader.previousSibling;
if(prevheader.nodeName.toLowerCase() == "li")
{prevlis++}
}
prevheader=prevheader.parentNode;
while(! /^h\d$/i.test(prevheader.nodeName))
{
prevheader = prevheader.previousSibling;
if(prevheader.nodeName.toLowerCase() == "ol")
{prevols++}
}
var findNumberOfHeaders =
Number(prevheader.lastChild.getElementsByTagName('a')[0].href.match(/\d*$/));
wikitext =
(
wikitext.replace
(
RegExp("((?:(^|\n)=[\\s\\S]*?){" + findNumberOfHeaders + "}([\\s\\S]*?\n#[\\s\\S]*?\n(?!#)){" + prevols+ "}([\\s\\S]*?\n#(?![#:\\*])){" + prevlis + "}[\\s\\S]*?)(\n(?!#[#:\\*])|$)"),
'$1\n# ' + newdef + '\n'
)
);
return ccc = wikitext;
}
var updatecatscallback,
editor=new Editor()
editor.addEdit({
edit: addDefinition3,
redo: function ()
{
q.parentNode.insertBefore(qq, q.nextSibling);
if(window.makedefsidebox && qq.childNodes.length == 1 && window.defsidebuttons && defsidebuttons.length)
{ makedefsidebox(qq); } // User:Yair_rand/editor.js stuff
if(window.updateCategories && window.tabbedLanguages)
{ updatecatscallback = updateCategories((q.parentNode.parentNode.nodeName.toLowerCase()=="li"?q.parentNode.parentNode:q).parentNode.parentNode, newdef); }
},
undo: function () { q.parentNode.removeChild(qq); updatecatscallback && updatecatscallback() },
summary: "+def: " +newdef
}, qq);
}