/****************************************************
* Created by Subhrajit Bhattacharya [[User:Subh83]] *
* Licensed under GNU-GPL v3.0 *
*****************************************************/
if (typeof(RightClickMenuKey)=='undefined') RightClickMenuKey = ''; // 'shift', 'alt', 'ctrl' or ''
if (typeof(UserSubh83_utils1)=='undefined') importScript("User:Subh83/JavaScriptTools/utils1.js");
function getSelectionMenuHTML(selText, clickElem)
{
selText = selText.toString();
var encodedSelText = XEncodeURIComponent(selText);
setCookie("lastRightClickSelText", encodedSelText);
var pageTitle = getPageTitle();
var sectionEditLinkNode = GetPrevEditsectionLinkElement(clickElem);
if (sectionEditLinkNode) {
var EditLink = sectionEditLinkNode.href;
var secNumMatch = EditLink.match(/section=([\d]+)/);
if (secNumMatch.length > 1)
var secNum = secNumMatch[1];
var WikiBlameFun = "WikiBlameFromSnippet('"+XEncodeURIComponent(pageTitle)+"','"+encodedSelText+"',"+secNum+"); ";
}
else {
var EditLink = (wgServer+wgScript)+"?title="+pageTitle+"&action=edit§ion=0";
var secNum = 0;
var WikiBlameFun = "WikiBlameFromSnippet('"+XEncodeURIComponent(pageTitle)+"','"+encodedSelText+"',"+secNum+"); ";
var DiffTableNode = FindNodeUpTree(clickElem, ['table']);
if (DiffTableNode && DiffTableNode.className.indexOf('diff') >= 0) {
EditLink = "";
secNum = -1;
WikiBlameFun = "WikiBlameFromWikitext('"+XEncodeURIComponent(pageTitle)+"','"+encodedSelText+"'); ";
}
}
// Generate the HTML
var ret = "<div class='rightclickmenu'> " +
"<span class='heading'>\"" + ((selText.length>40)?(selText.substr(0,17)+' ... '+selText.substr(selText.length-17,17)):(selText)) +
"\"</span><hr/><div class='items'>";
if (EditLink!="")
ret += "<div class='menuitem'><a href=\""+ EditLink +"\" onClick=\"placeCursorInTextarea(25);\">Edit this text</a></div>";
ret += "<div class='menuitem'><a href=\"javascript:void(0);\" onClick=\"" + WikiBlameFun +
"document.getElementById('selectrightclickmenu').style.display='none'; " +
"delCookie('lastRightClickSelText');\">Trace history on WikiBlame</a></div>" +
"<hr/>" +
"<div class='menuitem'><a href=\"http://www.google.com/search?q="+encodedSelText+"\" target=\"_blank\">Search Google for this text</a></div>" +
"</div></div>";
return ret;
}
function showSelectionMenu(e)
{
var selText = "";
if (window.getSelection) selText = window.getSelection();
else if (document.getSelection) selText = document.getSelection();
else if (document.selection) selText = document.selection.createRange().text;
else return;
if (!e) var e = window.event;
var rightclick;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
if (e.target) targ = e.target;
else if (e.srcElement) targ = e.srcElement;
if (targ.nodeType == 3) // Safari bug
targ = targ.parentNode;
var keyPressed = true;
if (RightClickMenuKey=='' && (e.shiftKey || e.ctrlKey || e.altKey)) keyPressed = false;
else if (RightClickMenuKey=='shift' && !e.shiftKey) keyPressed = false;
else if (RightClickMenuKey=='ctrl' && !e.ctrlKey) keyPressed = false;
else if (RightClickMenuKey=='alt' && !e.altKey) keyPressed = false;
var selectrightclickmenu = document.getElementById("selectrightclickmenu");
if (!selectrightclickmenu) {
alert("Unable to locate rightclick-menu!");
return false;
}
if (selText != "" && rightclick && keyPressed && targ.tagName.toLowerCase()!='textarea') {
selectrightclickmenu.innerHTML = getSelectionMenuHTML(selText, targ);
setMenuPosition (e, selectrightclickmenu);
selectrightclickmenu.style.zIndex = "10000";
selectrightclickmenu.style.display = "block";
return true;
}
else {
selectrightclickmenu.style.display = "none";
delCookie("lastRightClickSelText");
return false;
}
}
function placeCursorInTextarea(retry) {
var mainTextArea = document.getElementById('wpTextbox1');
if (!mainTextArea && retry > 0) { // Support for 'secedit' (User:Supadawg/secedit.js)
setTimeout(placeCursorInTextarea, 200, retry-1);
return;
}
if (mainTextArea) {
setSelectionInWikitextFromSnippet(mainTextArea, decodeURIComponent(getCookie("lastRightClickSelText")));
delCookie("lastRightClickSelText");
if (document.getElementById("selectrightclickmenu"))
document.getElementById("selectrightclickmenu").style.display = "none";
}
}
$( function () {
// The right-click menu
var bodyContent = document.getElementById('bodyContent');
if (bodyContent) {
AppendHandlerToEvent( "document.getElementById('bodyContent').onmouseup", showSelectionMenu, 'pre', false, "return (!retNew);" );
AppendHandlerToEvent( "document.getElementById('bodyContent').oncontextmenu", showSelectionMenu, 'pre', false, "return (!retNew);" );
}
var selectrightclickmenu = document.createElement("div");
selectrightclickmenu.setAttribute("id", "selectrightclickmenu");
selectrightclickmenu.setAttribute("display", "none");
var theBody = document.getElementsByTagName("body")[0];
theBody.insertBefore(selectrightclickmenu, theBody.childNodes[0]);
// Cursor positioning in editform
placeCursorInTextarea(1);
});