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&section=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)) +                  "\"  "; if (EditLink!="") ret +=   " Edit this text "; ret +=       " Trace history on WikiBlame " + " " +                  " Search Google for this text " + " ";

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

});