Login   Register  
PHP Classes
elePHPant
Icontem

File: script/ContextMenu_0.1.js

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Florian Sax  >  File PHP  >  script/ContextMenu_0.1.js  >  Download  
File: script/ContextMenu_0.1.js
Role: Auxiliary script
Content type: text/plain
Description: The JavaScript ContextMenu extension
Class: File PHP
Web based manager to browse the server file system
Author: By
Last change:
Date: 2004-06-14 14:35
Size: 5,935 bytes
 

Contents

Class file image Download
/**
* ContextMenu
*/


// taken from: http://www.quirksmode.org/js/detect.html
var thestring;
function detectBrowser(){
    var detect = navigator.userAgent.toLowerCase();
    var OS,browser,version,total;

    if(checkIt('konqueror')){
        browser = 'Konqueror';
        OS = 'Linux';
    }else if (checkIt('safari')) browser = 'Safari';
    else if (checkIt('omniweb')) browser = 'OmniWeb';
    else if (checkIt('opera')) browser = 'Opera';
    else if (checkIt('webtv')) browser = 'WebTV';
    else if (checkIt('icab')) browser = 'iCab';
    else if (checkIt('msie')) browser = 'Internet Explorer';
    else if (!checkIt('compatible')){
        browser = 'Netscape Navigator';
        version = detect.charAt(8);
    }else browser = 'An unknown browser';
    if(browser != 'Konqueror'){
        if(checkIt('gecko'))browser = 'Mozilla';
    }
    if(!version) version = detect.charAt(place + thestring.length);
    if(!OS){
        if (checkIt('linux')) OS = 'Linux';
        else if (checkIt('x11')) OS = 'Unix';
        else if (checkIt('mac')) OS = 'Mac'
        else if (checkIt('win')) OS = 'Windows'
        else OS = 'an unknown operating system';
    }
    total = OS+' '+browser+' '+version;
    return browser;
}
function checkIt(string){
    var detect = navigator.userAgent.toLowerCase();
    place = detect.indexOf(string) + 1;
    thestring = string;
    return place;
}






window.noHide = false;

function OnOver(bu){
    var elem = document.getElementById(bu);
    elem.style.backgroundColor = '#000088';
    elem.style.color = '#FFFFFF';
    window.status = elem.innerHTML;
}
function OnOut(bu){
    var elem = document.getElementById(bu);
    elem.style.backgroundColor = '#E0E0E0';
    elem.style.color = '#000000';
    window.status = '';
}

/**
* creates a contextMenu button and returns the HTML
*/
function mFAct(actName){
    act = eval(cMenu.actions);
    return '<tr><td class=cMenu_button id=\"cMenu_'+actName+'\" onmouseover=\"OnOver(id)\" onmouseout=\"OnOut(id)\" onclick=\"'+act[actName]+'\"><span onclick=\"'+act[actName]+'\">'+actName+'</span></td></tr>';
}

function contextMenuIE(){
    elem = event.srcElement;
    if(elem.className){
        return contextMenu(elem);
    }else{
        // get the parentElement to correct the M$IE failure
        elem = elem.parentElement;
        if(elem.className){
            return contextMenu(elem);
        }else{
            alert(elem.parentLayer);
        }
    }
}

/**
* creates and shows the contextMenu of the submitted element
*/
function contextMenu(elem){

    if(type = elem.className){
        id = elem.id;
        window.cMenu.value = id;
//        document.getElementById('browserValue').value = cMenu_value;
        if(detectBrowser() != 'Internet Explorer'){
            ContextMenu = document.getElementById('ContextMenu');
        }

        items = eval(cMenu.classes[type]);
        ContextMenu.style.visibility = 'hidden';
        mouseX = window.mouseX;
        mouseY = window.mouseY;
        cMenuW = 100;
        cMenuH = items.length*19+4;
        if(mouseX > document.body.clientWidth+document.body.scrollLeft-cMenuW)mouseX -= cMenuW;
        if(mouseY > document.body.clientHeight+document.body.scrollTop-cMenuH)mouseY -= cMenuH;
        if(mouseX <= 0)mouseX = document.body.scrollLeft;
        if(mouseY <= 0)mouseY = document.body.scrollTop;
        ContextMenu.style.left = mouseX -7;
        ContextMenu.style.top = mouseY -7;
        HTML ='';
        for(i = 0; i < items.length; i++){
            HTML += mFAct(items[i]);
        }
        ContextMenu.innerHTML = '<table cellspacing=0 class=cMenu_cMenu>'+HTML+'</table>';
        ContextMenu.style.visibility = 'visible';
        return false;
    }else return false;
}

/**
* this function evaluates the mouse position and makes it avilable in 'window.mouse(X/Y)'
*/
function mousePos(e){
    if(e)event = e;
    window.mouseX = event.clientX + document.body.scrollLeft;
    window.mouseY = event.clientY + document.body.scrollTop;
}

/**
* this function hides the contextMenu
*/
function hide(){
    if(window.noHide){
        window.noHide = false;
        return;
    }

    if(detectBrowser() != 'Internet Explorer')ContextMenu = document.getElementById('ContextMenu');
    ContextMenu.style.visibility = 'hidden';
//    ContextMenu.style.left = -999;
//    ContextMenu.style.top = -999;
}

function cancelproc(){
    window.event.cancelBubble = true;
    window.event.returnValue = false;
}

function fals(){
    return false;
}


function cMenu_begin(){
    document.body.innerHTML += '<div id=ContextMenu class=cMenu_cMenu style=z-index:4;></div>';
    var browser = detectBrowser();
    if(browser != 'Internet Explorer'){
        ContextMenu = document.getElementById('ContextMenu');
    }
    ContextMenu.style.visibility = 'hidden';
    ContextMenu.style.position = 'absolute';
    ContextMenu.style.border = '1px solid #E0E0E0';

    document.body.oncontextmenu = fals;
    document.body.onmousemove = mousePos;

    tags = eval(cMenu.tags);
    for(h = 0; h < tags.length; h++){
        tag = tags[h];
        for(i = 0; i < document.getElementsByTagName(tag).length; i++){
            elem = document.getElementsByTagName(tag).item(i);

            if(eval(cMenu.classes[elem.className])){
//                alert(detectBrowser());
                if(browser == 'Internet Explorer'){
                    elem.attachEvent('oncontextmenu', contextMenuIE);
                }else if(browser == 'Mozilla'){
                    elem.setAttribute('oncontextmenu', 'contextMenu(this)');
                }else if(browser == 'Opera'){
//                alert('<'+tag+' class='+elem.className+'>'+eval(cMenu.classes[elem.className]).length);
                    elem.innerHTML = '<input type=button onclick="contextMenu(this.parentElement); window.noHide=true;" value=cM>'+elem.innerHTML;
                }else{
                    elem.onclick = 'contextMenu(this); window.noHide=true;';
                    elem.setAttribute('onclick', 'contextMenu(this); window.noHide=true;');
                }
            }

        }
    }

    
    document.onclick = hide;
    ContextMenu.ondragstart = cancelproc;
    ContextMenu.onselectstart = cancelproc;
//    alert(document.body.innerHTML);
}

//if(window.attachEvent)window.attachEvent('onload', cMenu_begin);
//else if(window.addEventListener)window.addEventListener('load', cMenu_begin, false);