assets/bibliographic/mindmap/OOoBib.html_files/marktree.js (344 lines of code) (raw):

/* MarkTree JavaScript code * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * Miika Nurminen, 12.7.2004. */ /* cross-browser (tested with ie5, mozilla 1 and opera 5) keypress detection */ function get_keycode(evt) { // IE code = document.layers ? evt.which : document.all ? event.keyCode // event.keyCode!=evt.keyCode! : evt.keyCode; if (code==0) code=evt.which; // for NS return code; } var lastnode=null; var listnodes = null; var list_index=1; var lastnodetype=''; // determines if node is a link, input or text; // up, left, down, right, keypress codes //ijkl //var keys = new Array(105,106,107,108); //num arrows //var keys = new Array(56,52,50,54); //wasd // var press2 = new Array(119,97,115,100); var press = new Array(47,45,42,43); // keydown codes // var keys2=new Array(87,65,83,68); var keys= new Array(38,37,40,39); // keyset 1 = keydown, otherwise press function checkup(keyset,n) { if (keyset==1) return (n==keys[0]); return ((n==press[0]) /*|| (n==press2[0])*/) } function checkdn(keyset,n) { if (keyset==1) return (n==keys[2]); return ((n==press[2]) /*|| (n==press2[2])*/) } function checkl(keyset,n) { if (keyset==1) return (n==keys[1]); return ((n==press[1]) /*|| (n==press2[1])*/) } function checkr(keyset,n) { if (keyset==1) return (n==keys[3]); return ((n==press[3]) /*|| (n==press2[3])*/) } function is_exp(n) { if (n==null) return false; return ((n.className=='exp') || (n.className=='exp_active')); } function is_col(n) { if (n==null) return false; return ((n.className=='col') || (n.className=='col_active')); } function is_basic(n) { if (n==null) return false; return ((n.className=='basic') || (n.className=='basic_active')); } /* returns i>=0 if true */ function is_active(node) { if (node.className==null) return false return node.className.indexOf('_active'); } function toggle_class(node) { if ((node==null) || (node.className==null)) return; str=node.className; result=""; i = str.indexOf('_active'); if (i>0) result= str.substr(0,i); else result= str+"_active"; node.className=result; return node; } function activate(node) { node.style.backgroundColor='#eeeeff'; } function deactivate(node) { node.style.backgroundColor='#ffffff'; } function is_list_node(n) { if (n==null) return false; if (n.className==null) return false; if ( (is_exp(n)) || (is_col(n)) || (is_basic(n)) ) return true; else return false; } function get_href(n) { alist=n.attributes; if (alist!=null) { hr = alist.getNamedItem('href'); if (hr!=null) return hr.nodeValue; } if (n.childNodes.length==0) return ''; for (var i=0; i<n.childNodes.length; i++) { s = get_href(n.childNodes[i]); if (s!='') return s; } return ''; } function get_link(n) { if (n==null) return null; if (n.style==null) return null; // disabling uncontrolled recursion to prevent error messages on IE // when trying to focus to invisible links (readonly mode) // alert(n.nodeName+' '+n.className); if ((n.nodeName=='UL') && (n.className=='sub')) return null; if (n.nodeName=='A') return n; if (n.childNodes.length==0) return null; for (var i=0; i<n.childNodes.length; i++) { s = get_link(n.childNodes[i]); if (s!=null) return s; } return null; } function set_lastnode(n) { /*var d = new Date(); var t_mil = d.getMilliseconds();*/ // testattu nopeuksia explorerilla, ei merkitt�vi� eroja if (lastnode==n) return; /* deactivate(lastnode) lastnode=n; activate(lastnode);*/ if (is_active(lastnode)>=0) toggle_class(lastnode); lastnode=n; if (!(is_active(lastnode)>=0)) toggle_class(lastnode); /*var d2 = new Date(); var t_mil2 = d2.getMilliseconds(); window.alert(t_mil2-t_mil);*/ } function next_list_node() { tempIndex = list_index; while (tempIndex<listnodes.length-1) { tempIndex++; var x = listnodes[tempIndex]; if (is_list_node(x)) { list_index=tempIndex; return; } } } function prev_list_node() { tempIndex = list_index; while (tempIndex>0) { tempIndex--; var x = listnodes[tempIndex]; if (is_list_node(x)) { list_index=tempIndex; return; } } } function getsub (li) { if (li.childNodes.length==0) return null; for (var c = 0; c < li.childNodes.length; c++) if ( (li.childNodes[c].className == 'sub') || (li.childNodes[c].className == 'subexp') ) return li.childNodes[c]; } function find_listnode_recursive (li) { if (is_list_node(li)) return li; if (li.childNodes.length==0) return null; result=null; for (var c = 0; c < li.childNodes.length; c++) { result=find_listnode_recursive(li.childNodes[c]); if (result!=null) return result; } return null; } function next_child_listnode(li) { var result=null; for (var i=0; i<li.childNodes.length; i++) { result=find_listnode_recursive(li.childNodes[i]); if (result!=null) return result; } return null; } function next_actual_sibling_listnode(li) { if (li==null) return null; var temp=li; while (1) { var n = temp.nextSibling; if (n==null) { n=parent_listnode(temp); return next_actual_sibling_listnode(n); } if (is_list_node(n)) return n; temp=n; } } function next_sibling_listnode(li) { if (li==null) return null; var result=null; var temp=li; if (is_col(temp)) return next_child_listnode(temp); while (1) { var n = temp.nextSibling; if (n==null) { n=parent_listnode(temp); return next_actual_sibling_listnode(n); } if (is_list_node(n)) return n; temp=n; } } function last_sibling_listnode(li) { if (li==null) return null; var temp=li; var last=null; while(1) { var n = temp.nextSibling; if (is_list_node(temp)) last = temp; if (n==null) { if (is_col(last)) return last_sibling_listnode(next_child_listnode(last)); else return last; } temp = n; } } function prev_sibling_listnode(li) { if (li==null) return null; var temp=li; var n = null; while (1) { n = temp.previousSibling; if (n==null) { return parent_listnode(li); } if (is_list_node(n)) { if (is_col(n)) { return last_sibling_listnode(next_child_listnode(n)); } else { return n; } } temp=n; } } function parent_listnode(li) { // added 12.7.2004 to prevent IE error when readonly mode==true if (li==null) return null; n=li; while (1) { n=n.parentNode; if (n==null) return null; if (is_list_node(n)) return n; } } function getVisibleParents(id) { var n = document.getElementById(id); while(1) { expand(n); n = parent_listnode(n); if (n==null) return; } } function onClickHandler (evt) { if (lastnode==null) { listnodes = document.getElementsByTagName('li'); lastnode=listnodes[1]; temp=listnodes[1]; } var target = evt ? evt.target : event.srcElement; if (!is_list_node(target)) return; toggle(target); set_lastnode(target); } function expand(node) { if (!is_exp(node)) return; if (node.className=='exp_active') node.className='col_active'; else node.className='col'; setSubClass(node,'subexp'); // getsub(node).className='subexp'; } function collapse(node) { if (!is_col(node)) return; if (node.className=='col_active') node.className='exp_active' else node.className='exp'; setSubClass(node,'sub'); // getsub(node).className='sub'; } function setSubClass(node,name) { sub = getsub(node); if (sub==null) return; sub.className=name; } function toggle(target) { if (!is_list_node(target)) return; if (is_col(target)) { target.className='exp'; setSubClass(target,'sub'); // getsub(target).className='sub'; } else if (is_exp(target)) { target.className='col'; setSubClass(target,'subexp'); // getsub(target).className='subexp'; } } function expandAll(node) { if (node.className=='exp') { node.className='col'; setSubClass(node,'subexp'); // getsub(node).className='subexp'; } var i; if (node.childNodes!=null) // if (node.hasChildNodes()) for ( i = 0; i<node.childNodes.length; i++) expandAll(node.childNodes[i]); } function collapseAll(node) { if (node.className=='col') { node.className='exp'; setSubClass(node,'sub'); // getsub(node).className='sub'; } var i; if (node.childNodes!=null) // for opera if (node.hasChildNodes()) for ( i = 0; i<node.childNodes.length; i++) collapseAll(node.childNodes[i]); } function unFocus(node) { // unfocuses potential link that is to be hidden (if a==null there is no link so it should not be blurred). // tested with mozilla 1.7, 12.7.2004. /mn ( intemp=parent_listnode(node); a = get_link(intemp); // added 6.4. to get keyboard working with // moved before collapse to prevent an error message with IE when readonly==true if (a!=null) a.blur(); // netscape after collapsing a focused node return intemp; } // mode: 0==keypress, 1==keyup function keyfunc(evt,mode) { var c = get_keycode(evt); var temp = null; var a = null; if (lastnode==null) { listnodes = document.getElementsByTagName('li'); lastnode=listnodes[1]; temp=listnodes[1]; } //window.alert(c); if (checkup(mode,c)) { // i temp=prev_sibling_listnode(lastnode); } else if (checkdn(mode,c)) { // k temp=next_sibling_listnode(lastnode); } else if (checkr(mode,c)) { // l expand(lastnode); // temp=next_child_listnode(lastnode); // if (temp==null) { a = get_link(lastnode); if (a!=null) a.focus(); else self.focus(); //} } else if (checkl(mode,c)) { // j if (is_col(lastnode)) { unFocus(lastnode); collapse(lastnode); } else { temp=unFocus(lastnode); collapse(temp); } // if (temp==null) lastnode.focus(); // forces focus to correct div (try mozilla typesearch) (doesn't seem to work -mn/6.4.2004) } else return; if (temp!=null) set_lastnode(temp); // alert('pressed ' + String.fromCharCode(c) + '(' + c + ')'); return true; } function keytest (evt) { return keyfunc(evt,1); }; function presstest (evt) { return keyfunc(evt,0); }; document.onclick = onClickHandler; document.onkeypress = presstest; document.onkeyup = keytest;