You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

119 lines
4.1 KiB

/* class2context.js
creator: Arnau
July 2016
version: v0.1
usage:
class2context(
'className',
"title",
[["option1", "functionoption1()"], ["option 2","functionoption2()"]]
);
*/
/* testing this, not necessary */
var cmCallNum=0;
$( document ).ready(function() {
$(document).on('contextmenu', function (e) {
//e.preventDefault();
/*//testing only
console.log('ContextMenus() called, num.' + cmCallNum);
cmCallNum++;*/
ContextMenus();
});
$(document).on('click', function (e) {
//e.preventDefault();
/*//testing only
console.log('ContextMenus() called, num.' + cmCallNum);
cmCallNum++;*/
ContextMenus();
});
});
/* MUTATION OBSERVER
--detect changes in dom, and re-asign context menus*/
// select the target node //MUTATION DOM
var target = document.body;
var mutNum=0;
var observer = new MutationObserver(function(mutations) {
console.log("class2context.js: mutation of dom, num." + mutNum);
mutNum++;
ContextMenus();
});
// configuration of the observer:
var config = { attributes: true, childList: true, characterData: true };
// pass in the target node, as well as the observer options
observer.observe(target, config);
/* </MUTATION OBSERVER */
//creates the div where the context menus will place
document.body.innerHTML+="<div id='contextMenus'></div>";
//
function class2context(classgiv, title, options){
classgiv=JSON.parse(JSON.stringify(classgiv));
if(document.getElementById("context"+classgiv))
{
//toastr.success("alreadyExist");
}else{
var aux="";
aux+="<div id='context"+classgiv+"' class='contextMenu'>";
aux+=" <ul class='c2c-dropdown c2c-border' style='display:block;position:static;margin-bottom:5px;'>";
aux+="<div class='contextTitle'>" + title + "</div>";
for(var i=0; i<options.length; i++)
{
//aux+=" <a onmousedown='"+options[i][1]+";' href='javascript:void(0);'>"+options[i][0]+"</a>";
aux+=" <a onmousedown='"+options[i][1]+"; ContextMenus();' href='javascript:void(0);'>"+options[i][0]+"</a>";
}
aux+=" </ul>";
aux+="</div>";
document.getElementById('contextMenus').innerHTML+=aux; //adds the div context menu into the context menus div place
}
for(var i=0; i<document.getElementsByClassName(classgiv).length; i++)
{
classgiv=JSON.parse(JSON.stringify(classgiv));
//toastr.info(document.getElementsByClassName(classgiv)[i].oncontextmenu);
document.getElementsByClassName(classgiv)[i].addEventListener("contextmenu", function(e){
// Avoid the real one
e.preventDefault();
e.stopPropagation();
setTimeout(function(){
//classaux=this.className.split(" ")[0];
document.getElementById('context'+classgiv).style.display='block';
document.getElementById('context'+classgiv).style.left=e.pageX + "px";
document.getElementById('context'+classgiv).style.top=e.pageY + "px";
}, 150);
});
/*document.getElementsByClassName(classgiv)[i].oncontextmenu+= function(e){
// Avoid the real one
e.preventDefault();
setTimeout(function(){
//classaux=this.className.split(" ")[0];
document.getElementById('context'+classgiv).style.display='block';
document.getElementById('context'+classgiv).style.left=e.pageX + "px";
document.getElementById('context'+classgiv).style.top=e.pageY + "px";
}, 150);
};*/
}
document.body.addEventListener("mousedown", function(e){
// Avoid the real one
//e.preventDefault();
if(document.getElementById('context'+classgiv))
{
setTimeout(function(){
document.getElementById('context'+classgiv).style.display='none';
}, 70);
//ContextMenus();
}
return false;
}, false);
}