User:Subh83/JavaScriptTools/selectRightclickMenu.js

/****************************************************

  • 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 = "

" +

"\"" + ((selText.length>40)?(selText.substr(0,17)+' ... '+selText.substr(selText.length-17,17)):(selText)) +

"\"


";

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

});