mirror of
https://github.com/lkddi/nexusphp.git
synced 2026-04-14 20:40:49 +08:00
support menu modify
This commit is contained in:
@@ -32,35 +32,35 @@ if ($_SERVER["REQUEST_METHOD"] == "POST")
|
||||
$email = unesc(htmlspecialchars(trim($_POST["email"])));
|
||||
$wantpassword = unesc(htmlspecialchars(trim($_POST["wantpassword"])));
|
||||
$passagain = unesc(htmlspecialchars(trim($_POST["passagain"])));
|
||||
|
||||
|
||||
$email = safe_email($email);
|
||||
if (empty($wantpassword) || empty($passagain) || empty($email))
|
||||
bark($lang_confirm_resend['std_fields_blank']);
|
||||
|
||||
|
||||
if (!check_email($email))
|
||||
failedlogins($lang_confirm_resend['std_invalid_email_address'],true);
|
||||
$res = sql_query("SELECT * FROM users WHERE email=" . sqlesc($email) . " LIMIT 1") or sqlerr(__FILE__, __LINE__);
|
||||
$arr = mysql_fetch_assoc($res) or failedlogins($lang_confirm_resend['std_email_not_found'],true);
|
||||
if($arr["status"] != "pending") failedlogins($lang_confirm_resend['std_user_already_confirm'],true);
|
||||
|
||||
|
||||
if ($wantpassword != $passagain)
|
||||
bark($lang_confirm_resend['std_passwords_unmatched']);
|
||||
|
||||
|
||||
if (strlen($wantpassword) < 6)
|
||||
bark($lang_confirm_resend['std_password_too_short']);
|
||||
|
||||
|
||||
if (strlen($wantpassword) > 40)
|
||||
bark($lang_confirm_resend['std_password_too_long']);
|
||||
|
||||
|
||||
if ($wantpassword == $wantusername)
|
||||
bark($lang_confirm_resend['std_password_equals_username']);
|
||||
|
||||
|
||||
$secret = mksecret();
|
||||
$wantpasshash = md5($secret . $wantpassword . $secret);
|
||||
$editsecret = ($verification == 'admin' ? '' : $secret);
|
||||
|
||||
sql_query("UPDATE users SET passhash=" .sqlesc($wantpasshash) . ",secret=" . sqlesc($secret) . ",editsecret=" . sqlesc($editsecret) . " WHERE id=" . sqlesc($arr["id"])) or sqlerr(__FILE__, __LINE__);
|
||||
|
||||
|
||||
if (!mysql_affected_rows())
|
||||
stderr($lang_confirm_resend['std_error'], $lang_confirm_resend['std_database_error']);
|
||||
|
||||
@@ -69,29 +69,29 @@ if ($_SERVER["REQUEST_METHOD"] == "POST")
|
||||
$usern = $arr["username"];
|
||||
$id = $arr["id"];
|
||||
$title = $SITENAME.$lang_confirm_resend['mail_title'];
|
||||
|
||||
$baseUrl = getSchemeAndHttpHost();
|
||||
$body = <<<EOD
|
||||
{$lang_confirm_resend['mail_one']}$usern{$lang_confirm_resend['mail_two']}($email){$lang_confirm_resend['mail_three']}$ip{$lang_confirm_resend['mail_four']}
|
||||
<b><a href="javascript:void(null)" onclick="window.open('http://$BASEURL/confirm.php?id=$id&secret=$psecret')">
|
||||
<b><a href="javascript:void(null)" onclick="window.open('{$baseUrl}/confirm.php?id=$id&secret=$psecret')">
|
||||
{$lang_confirm_resend['mail_this_link']} </a></b><br />
|
||||
http://$BASEURL/confirm.php?id=$id&secret=$psecret
|
||||
{$baseUrl}/confirm.php?id=$id&secret=$psecret
|
||||
{$lang_confirm_resend['mail_four_1']}
|
||||
<b><a href="javascript:void(null)" onclick="window.open('http://$BASEURL/confirm_resend.php')">{$lang_confirm_resend['mail_here']}</a></b><br />
|
||||
http://$BASEURL/confirm_resend.php
|
||||
<b><a href="javascript:void(null)" onclick="window.open('{$baseUrl}/confirm_resend.php')">{$lang_confirm_resend['mail_here']}</a></b><br />
|
||||
{$baseUrl}/confirm_resend.php
|
||||
<br />
|
||||
{$lang_confirm_resend['mail_five']}
|
||||
EOD;
|
||||
|
||||
|
||||
sent_mail($email,$SITENAME,$SITEEMAIL,$title,$body,"signup",false,false,'');
|
||||
header("Location: " . get_protocol_prefix() . "$BASEURL/ok.php?type=signup&email=" . rawurlencode($email));
|
||||
header("Location: " . "{$baseUrl}/ok.php?type=signup&email=" . rawurlencode($email));
|
||||
}
|
||||
else
|
||||
{
|
||||
stdhead();
|
||||
$s = "<select name=\"sitelanguage\" onchange='submit()'>\n";
|
||||
|
||||
|
||||
$langs = langlist("site_lang");
|
||||
|
||||
|
||||
foreach ($langs as $row)
|
||||
{
|
||||
if ($row["site_lang_folder"] == get_langfolder_cookie()) $se = " selected=\"selected\""; else $se = "";
|
||||
|
||||
BIN
public/ddlevelsfiles/arrow-down.gif
Normal file
BIN
public/ddlevelsfiles/arrow-down.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 850 B |
BIN
public/ddlevelsfiles/arrow-right.gif
Normal file
BIN
public/ddlevelsfiles/arrow-right.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 852 B |
BIN
public/ddlevelsfiles/bulletlist.gif
Normal file
BIN
public/ddlevelsfiles/bulletlist.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 887 B |
76
public/ddlevelsfiles/ddlevelsmenu-base.css
vendored
Normal file
76
public/ddlevelsfiles/ddlevelsmenu-base.css
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
/* ######### Drop Down DIVs CSS ######### */
|
||||
|
||||
|
||||
.ddsubmenustyle, .ddsubmenustyle div{ /*topmost and sub DIVs, respectively*/
|
||||
font: normal 13px Verdana;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
list-style-type: none;
|
||||
background: white;
|
||||
border: 1px solid black;
|
||||
border-bottom-width: 0;
|
||||
visibility: hidden;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.ddsubmenustyle ul{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
list-style-type: none;
|
||||
border: 0px none;
|
||||
}
|
||||
|
||||
.ddsubmenustyle li a{
|
||||
display: block;
|
||||
width: 170px; /*width of menu (not including side paddings)*/
|
||||
color: black;
|
||||
background-color: lightyellow;
|
||||
text-decoration: none;
|
||||
padding: 4px 5px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
* html .ddsubmenustyle li{ /*IE6 CSS hack*/
|
||||
display: inline-block;
|
||||
width: 170px; /*width of menu (include side paddings of LI A*/
|
||||
}
|
||||
|
||||
.ddsubmenustyle li a:hover{
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* ######### Neutral CSS ######### */
|
||||
|
||||
.downarrowpointer{ /*CSS for "down" arrow image added to top menu items*/
|
||||
padding-left: 4px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.rightarrowpointer{ /*CSS for "right" arrow image added to drop down menu items*/
|
||||
position: absolute;
|
||||
padding-top: 3px;
|
||||
right: 3px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.backarrowpointer{ /*CSS for "back" arrow image added to breadcrumb of mobile menu sub menus*/
|
||||
position: relative;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.ddiframeshim{
|
||||
position: absolute;
|
||||
z-index: 500;
|
||||
background: transparent;
|
||||
border-width: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
display: block;
|
||||
}
|
||||
185
public/ddlevelsfiles/ddlevelsmenu-mobile.css
vendored
Normal file
185
public/ddlevelsfiles/ddlevelsmenu-mobile.css
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
.notransition{ /* class to temporarily disable CSS3 transition. No not edit */
|
||||
-webkit-transition: none !important;
|
||||
-moz-transition: none !important;
|
||||
-o-transition: none !important;
|
||||
transition: none !important;
|
||||
}
|
||||
|
||||
/* ######### Mobile Menu CSS ######### */
|
||||
|
||||
|
||||
nav.mobilelevelsmenu{
|
||||
position: fixed;
|
||||
width: 240px; /* width of menu. Percentage value accepted */
|
||||
height: 100%; /* height of menu */
|
||||
border: 1px solid black;
|
||||
left: 0;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
overflow: hidden;
|
||||
-webkit-transform: translateX(-100%);
|
||||
transform: translateX(-100%);
|
||||
opacity: 0;
|
||||
-webkit-transition: all 0.5s; /* animate UL menus within mobile container into view */
|
||||
transition: all 0.5s; /* animate UL menus within mobile container into view */
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu.open{
|
||||
-webkit-transform: translateX(0);
|
||||
transform: translateX(0);
|
||||
opacity: 1;
|
||||
-webkit-transition: all 0.5s; /* animate UL menus within mobile container into view */
|
||||
transition: all 0.5s; /* animate UL menus within mobile container into view */
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu ul{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
overflow-y: auto;
|
||||
list-style: none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
left: 0;
|
||||
top: 0;
|
||||
background: lightyellow;
|
||||
font-weight: bold;
|
||||
box-shadow: 0 0 10px gray;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-transition: left 0.5s;
|
||||
transition: left 0.5s; /* animate UL menus' left property inside mobile container to show them */
|
||||
}
|
||||
|
||||
|
||||
nav.mobilelevelsmenu ul li.breadcrumb{ /* Breadcrumb DIV that gets added to top of each sub level UL menu */
|
||||
position: relative;
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid gray;
|
||||
background: black;
|
||||
color: white;
|
||||
font-weight: bold;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu ul span.left{ /* SPAN inside breadcrumb containing "left" arrow markup */
|
||||
margin-right: 5px;
|
||||
font-weight: bold;
|
||||
font-size: 1.5em;
|
||||
color: darkred;
|
||||
}
|
||||
|
||||
|
||||
nav.mobilelevelsmenu ul li{
|
||||
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu ul li a{
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 10px;
|
||||
color: black;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu ul li a:hover{
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
nav.mobilelevelsmenu ul li a span.right{ /* SPAN inside LI headers containing "right" arrow markup */
|
||||
position: absolute;
|
||||
right: 8px;
|
||||
font-weight: bold;
|
||||
font-size: 1.1em;
|
||||
}
|
||||
|
||||
/* ############# Animated Drawer icon (horizontal mobile menu toggler) CSS ############# */
|
||||
|
||||
.animateddrawer{
|
||||
font-size: 10px; /* Base font size. Adjust this value to modify size of drawer icon */
|
||||
width: 3em;
|
||||
height: 2.8em;
|
||||
outline: none;
|
||||
display: none;
|
||||
position: relative;
|
||||
background: white;
|
||||
z-index: 1000;
|
||||
}
|
||||
|
||||
.animateddrawer:before, .animateddrawer:after{
|
||||
position: absolute;
|
||||
content: '';
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 0.6em; /* height of top and bottom drawer line */
|
||||
background: black;
|
||||
border-radius: 2px;
|
||||
top: 0;
|
||||
left: 0;
|
||||
opacity: 1;
|
||||
-webkit-transition: all 0.3s ease-in; /* set transition type and time */
|
||||
transition: all 0.3s ease-in;
|
||||
}
|
||||
|
||||
.animateddrawer:after{
|
||||
top: auto;
|
||||
bottom: 0;
|
||||
}
|
||||
|
||||
.animateddrawer span{
|
||||
width: 100%;
|
||||
height: 0.6em; /* height of middle drawer line */
|
||||
background: black;
|
||||
position: absolute;
|
||||
top: 50%;
|
||||
margin-top: -0.3em; /* set this to - half of middle drawer line height */
|
||||
border-radius: 2px;
|
||||
-ms-transform-origin: 50% 50%;
|
||||
-webkit-transform-origin: 50% 50%;
|
||||
transform-origin: 50% 50%;
|
||||
-webkit-transition: all 0.3s ease-in 0.3s; /* set transition type and time */
|
||||
transition: all 0.3s ease-in 0.3s;
|
||||
}
|
||||
|
||||
.animateddrawer span::after{
|
||||
content: '';
|
||||
display: block;
|
||||
width: 100%;
|
||||
height: 0.6em; /* height of middle drawer line */
|
||||
background: black;
|
||||
border-radius: 2px;
|
||||
position: absolute;
|
||||
-ms-transform-origin: 50% 50%;
|
||||
-webkit-transform-origin: 50% 50%;
|
||||
transform-origin: 50% 50%;
|
||||
-webkit-transition: all 0.3s ease-in 0.3s; /* set transition type and time */
|
||||
transition: all 0.3s ease-in 0.3s;
|
||||
}
|
||||
|
||||
.animateddrawer.open{
|
||||
}
|
||||
|
||||
.animateddrawer.open:before{ /* style when .open class is added to button */
|
||||
top: 50%;
|
||||
margin-top: -0.3em; /* set this to - half of top drawer line height */
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.animateddrawer.open:after{ /* style when .open class is added to button */
|
||||
bottom: 50%;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
.animateddrawer.open span{ /* style when .open class is added to button */
|
||||
-ms-transform: rotate(-45deg);
|
||||
-webkit-transform: rotate(-45deg);
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.animateddrawer.open span:after{ /* style when .open class is added to button */
|
||||
-ms-transform: rotate(-90deg);
|
||||
-webkit-transform: rotate(-90deg);
|
||||
transform: rotate(-90deg);
|
||||
}
|
||||
51
public/ddlevelsfiles/ddlevelsmenu-sidebar.css
vendored
Normal file
51
public/ddlevelsfiles/ddlevelsmenu-sidebar.css
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
/* ######### Marker List Vertical Menu ######### */
|
||||
|
||||
.markermenu{
|
||||
width: 175px; /*width of side bar menu*/
|
||||
clear: left;
|
||||
position: relative; /*Preserve this for "right" arrow images (added by script) to be positioned correctly*/
|
||||
|
||||
}
|
||||
|
||||
.markermenu ul{
|
||||
list-style-type: none;
|
||||
margin: 5px 0;
|
||||
padding: 0;
|
||||
border: 1px solid #9A9A9A;
|
||||
}
|
||||
|
||||
.markermenu ul li a{
|
||||
background: #F2F2F2; /*light gray background*/
|
||||
font: bold 13px "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, sans-serif;
|
||||
color: #00014e;
|
||||
display: block;
|
||||
width: auto;
|
||||
padding: 10px 0;
|
||||
padding-left: 10px;
|
||||
text-decoration: none;
|
||||
border-bottom: 1px solid #B5B5B5;
|
||||
}
|
||||
|
||||
* html .markermenu ul li a{ /*IE6 hack*/
|
||||
width: 155px;
|
||||
}
|
||||
|
||||
.markermenu ul li a:visited, .markermenu ul li a:active{
|
||||
color: #00014e;
|
||||
}
|
||||
|
||||
.markermenu ul li a:hover, .markermenu ul li a.selected{
|
||||
color: white;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
/* ######### Customized Drop Down ULs CSS (inherits from ddlevelsmenu-base.css) ######### */
|
||||
|
||||
.blackwhite li a{
|
||||
background: white;
|
||||
}
|
||||
|
||||
.blackwhite li a:hover{
|
||||
background: black;
|
||||
color: white;
|
||||
}
|
||||
40
public/ddlevelsfiles/ddlevelsmenu-topbar.css
vendored
Normal file
40
public/ddlevelsfiles/ddlevelsmenu-topbar.css
vendored
Normal file
@@ -0,0 +1,40 @@
|
||||
/* ######### Matt Black Strip Main Menu Bar CSS ######### */
|
||||
|
||||
.mattblackmenu ul{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font: bold 12px Verdana;
|
||||
list-style-type: none;
|
||||
border-bottom: 1px solid gray;
|
||||
background: #414141;
|
||||
overflow: hidden;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.mattblackmenu li{
|
||||
display: inline;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.mattblackmenu li a{
|
||||
float: left;
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
margin: 0;
|
||||
padding: 6px 8px; /*padding inside each tab*/
|
||||
border-right: 1px solid white; /*right divider between tabs*/
|
||||
color: white;
|
||||
background: #414141;
|
||||
}
|
||||
|
||||
.mattblackmenu li a:visited{
|
||||
color: white;
|
||||
}
|
||||
|
||||
.mattblackmenu li a:hover{
|
||||
background: black; /*background of tabs for hover state */
|
||||
}
|
||||
|
||||
.mattblackmenu a.selected{
|
||||
background: black; /*background of tab with "selected" class assigned to its LI */
|
||||
}
|
||||
603
public/ddlevelsfiles/ddlevelsmenu.js
vendored
Normal file
603
public/ddlevelsfiles/ddlevelsmenu.js
vendored
Normal file
@@ -0,0 +1,603 @@
|
||||
//** All Levels Navigational Menu- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com
|
||||
//** Script Download/ instructions page: http://www.dynamicdrive.com/dynamicindex1/ddlevelsmenu/
|
||||
//** Usage Terms: http://www.dynamicdrive.com/notice.htm
|
||||
|
||||
//** Current version: 4.0 See changelog.txt for details
|
||||
|
||||
if (typeof dd_domreadycheck=="undefined") //global variable to detect if DOM is ready
|
||||
var dd_domreadycheck=false
|
||||
|
||||
var ddlevelsmenu={
|
||||
mql: (window.matchMedia)? window.matchMedia("screen and (max-width: 700px)") : {matches:false, addListener: function(){}}, // CSS media query to switch to mobile menu when matched
|
||||
enableshim: true, //enable IFRAME shim to prevent drop down menus from being hidden below SELECT or FLASH elements? (tip: disable if not in use, for efficiency)
|
||||
|
||||
arrowpointers:{
|
||||
downarrow: ["ddlevelsfiles/arrow-down.gif", 11,7], //[path_to_down_arrow, arrowwidth, arrowheight]
|
||||
rightarrow: ["ddlevelsfiles/arrow-right.gif", 12,12], //[path_to_right_arrow, arrowwidth, arrowheight]
|
||||
backarrow: ["ddlevelsfiles/left.gif"], //[path_to_back_arrow, arrowwidth, arrowheight]
|
||||
showarrow: {toplevel: true, sublevel: true} //Show arrow images on top level items and sub level items, respectively?
|
||||
},
|
||||
hideinterval: 200, //delay in milliseconds before entire menu disappears onmouseout.
|
||||
effects: {enableswipe: true, enableslide: true, enablefade: true, duration: 200},
|
||||
httpsiframesrc: "blank.htm", //If menu is run on a secure (https) page, the IFRAME shim feature used by the script should point to an *blank* page *within* the secure area to prevent an IE security prompt. Specify full URL to that page on your server (leave as is if not applicable).
|
||||
|
||||
///No need to edit beyond here////////////////////
|
||||
|
||||
topmenuids: [], //array containing ids of all the primary menus on the page
|
||||
menuclone: {}, //object containing a clone of each top level menu plus its sub ULs (for mobile menu sake)
|
||||
topitems: {}, //object array containing all top menu item links
|
||||
subuls: {}, //object array containing all ULs
|
||||
lastactivesubul: {}, //object object containing info for last mouse out menu item's UL
|
||||
topitemsindex: -1,
|
||||
ulindex: -1,
|
||||
hidetimers: {}, //object array timer
|
||||
shimadded: false,
|
||||
nonFF: !/Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent), //detect non FF browsers
|
||||
ismobile:navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i) != null, //boolean check for popular mobile browsers
|
||||
mobilezindex: 1000,
|
||||
|
||||
getoffset:function(what, offsettype){
|
||||
return (what.offsetParent)? what[offsettype]+this.getoffset(what.offsetParent, offsettype) : what[offsettype]
|
||||
},
|
||||
|
||||
getoffsetof:function(el){
|
||||
el._offsets={left:this.getoffset(el, "offsetLeft"), top:this.getoffset(el, "offsetTop")}
|
||||
},
|
||||
|
||||
getwindowsize:function(){
|
||||
this.docwidth=window.innerWidth? window.innerWidth-10 : this.standardbody.clientWidth-10
|
||||
this.docheight=window.innerHeight? window.innerHeight-15 : this.standardbody.clientHeight-18
|
||||
},
|
||||
|
||||
gettopitemsdimensions:function(){
|
||||
for (var m=0; m<this.topmenuids.length; m++){
|
||||
var topmenuid=this.topmenuids[m]
|
||||
for (var i=0; i<this.topitems[topmenuid].length; i++){
|
||||
var header=this.topitems[topmenuid][i]
|
||||
var submenu=document.getElementById(header.getAttribute('rel'))
|
||||
header._dimensions={w:header.offsetWidth, h:header.offsetHeight, submenuw:submenu.offsetWidth, submenuh:submenu.offsetHeight}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
isContained:function(m, e){
|
||||
var e=window.event || e
|
||||
var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
|
||||
while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
|
||||
if (c==m)
|
||||
return true
|
||||
else
|
||||
return false
|
||||
},
|
||||
|
||||
addpointer:function(target, imgclass, imginfo, BeforeorAfter){
|
||||
var pointer=document.createElement("img")
|
||||
pointer.src=imginfo[0]
|
||||
pointer.style.width=imginfo[1]+"px"
|
||||
pointer.style.height=imginfo[2]+"px"
|
||||
if(imgclass=="rightarrowpointer"){
|
||||
pointer.style.left=target.offsetWidth-imginfo[2]-2+"px"
|
||||
}
|
||||
pointer.className=imgclass
|
||||
var target_firstEl=target.childNodes[target.firstChild.nodeType!=1? 1 : 0] //see if the first child element within A is a SPAN (found in sliding doors technique)
|
||||
if (target_firstEl && target_firstEl.tagName=="SPAN"){
|
||||
target=target_firstEl //arrow should be added inside this SPAN instead if found
|
||||
}
|
||||
if (BeforeorAfter=="before")
|
||||
target.insertBefore(pointer, target.firstChild)
|
||||
else
|
||||
target.appendChild(pointer)
|
||||
},
|
||||
|
||||
css:function(el, targetclass, action){
|
||||
var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
|
||||
if (action=="check")
|
||||
return needle.test(el.className)
|
||||
else if (action=="remove")
|
||||
el.className=el.className.replace(needle, "")
|
||||
else if (action=="add" && !needle.test(el.className))
|
||||
el.className+=" "+targetclass
|
||||
},
|
||||
|
||||
addshimmy:function(target){
|
||||
var shim=(!window.opera)? document.createElement("iframe") : document.createElement("div") //Opera 9.24 doesnt seem to support transparent IFRAMEs
|
||||
shim.className="ddiframeshim"
|
||||
shim.setAttribute("src", location.protocol=="https:"? this.httpsiframesrc : "about:blank")
|
||||
shim.setAttribute("frameborder", "0")
|
||||
target.appendChild(shim)
|
||||
try{
|
||||
shim.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
|
||||
}
|
||||
catch(e){}
|
||||
return shim
|
||||
},
|
||||
|
||||
positionshim:function(header, submenu, dir, scrollX, scrollY){
|
||||
if (header._istoplevel){
|
||||
var scrollY=window.pageYOffset? window.pageYOffset : this.standardbody.scrollTop
|
||||
var topgap=header._offsets.top-scrollY
|
||||
var bottomgap=scrollY+this.docheight-header._offsets.top-header._dimensions.h
|
||||
if (topgap>0){
|
||||
this.shimmy.topshim.style.left=scrollX+"px"
|
||||
this.shimmy.topshim.style.top=scrollY+"px"
|
||||
this.shimmy.topshim.style.width="99%"
|
||||
this.shimmy.topshim.style.height=topgap+"px" //distance from top window edge to top of menu item
|
||||
}
|
||||
if (bottomgap>0){
|
||||
this.shimmy.bottomshim.style.left=scrollX+"px"
|
||||
this.shimmy.bottomshim.style.top=header._offsets.top + header._dimensions.h +"px"
|
||||
this.shimmy.bottomshim.style.width="99%"
|
||||
this.shimmy.bottomshim.style.height=bottomgap+"px" //distance from bottom of menu item to bottom window edge
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
hideshim:function(){
|
||||
this.shimmy.topshim.style.width=this.shimmy.bottomshim.style.width=0
|
||||
this.shimmy.topshim.style.height=this.shimmy.bottomshim.style.height=0
|
||||
},
|
||||
|
||||
getoffset:function(what, offsettype){
|
||||
return (what.offsetParent)? what[offsettype]+this.getoffset(what.offsetParent, offsettype) : what[offsettype]
|
||||
},
|
||||
|
||||
|
||||
buildmenu:function(mainmenuid, header, submenu, submenupos, istoplevel, dir){
|
||||
header._master=mainmenuid //Indicate which top menu this header is associated with
|
||||
header._pos=submenupos //Indicate pos of sub menu this header is associated with
|
||||
header._istoplevel=istoplevel
|
||||
if (istoplevel){
|
||||
this.addEvent(header, function(e){
|
||||
ddlevelsmenu.hidemenu(ddlevelsmenu.subuls[this._master][parseInt(this._pos)].parentNode)
|
||||
}, "click")
|
||||
}
|
||||
this.subuls[mainmenuid][submenupos]=submenu
|
||||
header._dimensions={w:header.offsetWidth, h:header.offsetHeight, submenuw:submenu.offsetWidth, submenuh:submenu.offsetHeight}
|
||||
this.getoffsetof(header)
|
||||
submenu.parentNode.style.left=0
|
||||
submenu.parentNode.style.top=0
|
||||
submenu.parentNode.style.visibility="hidden"
|
||||
submenu.style.visibility="hidden"
|
||||
this.addEvent(header, function(e){ //mouseover event
|
||||
if (ddlevelsmenu.ismobile || !ddlevelsmenu.isContained(this, e)){
|
||||
var submenu=ddlevelsmenu.subuls[this._master][parseInt(this._pos)]
|
||||
if (this._istoplevel){
|
||||
ddlevelsmenu.css(this, "selected", "add")
|
||||
clearTimeout(ddlevelsmenu.hidetimers[this._master][this._pos])
|
||||
}
|
||||
ddlevelsmenu.getoffsetof(header)
|
||||
var scrollX=window.pageXOffset? window.pageXOffset : ddlevelsmenu.standardbody.scrollLeft
|
||||
var scrollY=window.pageYOffset? window.pageYOffset : ddlevelsmenu.standardbody.scrollTop
|
||||
var submenurightedge=this._offsets.left + this._dimensions.submenuw + (this._istoplevel && dir=="topbar"? 0 : this._dimensions.w)
|
||||
var submenubottomedge=this._offsets.top + this._dimensions.submenuh
|
||||
//Sub menu starting left position
|
||||
var menuleft=(this._istoplevel? this._offsets.left + (dir=="sidebar"? this._dimensions.w : 0) : this._dimensions.w)
|
||||
if (submenurightedge-scrollX>ddlevelsmenu.docwidth){ // not enough room to drop right?
|
||||
menuleft+= -this._dimensions.submenuw + (this._istoplevel && dir=="topbar" ? this._dimensions.w : -this._dimensions.w)
|
||||
if ( !(this._istoplevel && dir=="topbar") && (this._offsets.left - this._dimensions.submenuw) < scrollX ){ // if no room to drop left either
|
||||
menuleft = 0
|
||||
}
|
||||
}
|
||||
submenu.parentNode.style.left=menuleft+"px"
|
||||
//Sub menu starting top position
|
||||
var menutop=(this._istoplevel? this._offsets.top + (dir=="sidebar"? 0 : this._dimensions.h) : this.offsetTop)
|
||||
if (submenubottomedge-scrollY>ddlevelsmenu.docheight){ //no room downwards?
|
||||
if (this._dimensions.submenuh<this._offsets.top+(dir=="sidebar"? this._dimensions.h : 0)-scrollY){ //move up?
|
||||
menutop+= - this._dimensions.submenuh + (this._istoplevel && dir=="topbar"? -this._dimensions.h : this._dimensions.h)
|
||||
}
|
||||
else{ //top of window edge
|
||||
menutop+= -(this._offsets.top-scrollY) + (this._istoplevel && dir=="topbar"? -this._dimensions.h : 0)
|
||||
}
|
||||
}
|
||||
submenu.parentNode.style.top=menutop+"px"
|
||||
if (ddlevelsmenu.enableshim && (ddlevelsmenu.effects.enableswipe==false || ddlevelsmenu.nonFF)){ //apply shim immediately only if animation is turned off, or if on, in non FF2.x browsers
|
||||
ddlevelsmenu.positionshim(header, submenu, dir, scrollX, scrollY)
|
||||
}
|
||||
else{
|
||||
submenu.FFscrollInfo={x:scrollX, y:scrollY}
|
||||
}
|
||||
ddlevelsmenu.showmenu(header, submenu, dir)
|
||||
if (!ddlevelsmenu.ismobile){
|
||||
if (e.preventDefault)
|
||||
e.preventDefault()
|
||||
if (e.stopPropagation)
|
||||
e.stopPropagation()
|
||||
}
|
||||
else{ //if is mobile
|
||||
if (header._istoplevel || e.target.parentNode.getElementsByTagName('ul').length>0){ //if user clicks on a header (instead of a menu item)
|
||||
e.preventDefault()
|
||||
e.stopPropagation()
|
||||
}
|
||||
}
|
||||
}
|
||||
}, (this.ismobile)? "click" : "mouseover")
|
||||
this.addEvent(header, function(e){ //mouseout event
|
||||
var submenu=ddlevelsmenu.subuls[this._master][parseInt(this._pos)]
|
||||
if (this._istoplevel){
|
||||
if (!ddlevelsmenu.isContained(this, e) && !ddlevelsmenu.isContained(submenu.parentNode, e)) //hide drop down div if mouse moves out of menu bar item but not into drop down div itself
|
||||
ddlevelsmenu.hidemenu(submenu.parentNode)
|
||||
}
|
||||
else if (!this._istoplevel && !ddlevelsmenu.isContained(this, e)){
|
||||
ddlevelsmenu.hidemenu(submenu.parentNode)
|
||||
}
|
||||
|
||||
}, "mouseout")
|
||||
},
|
||||
|
||||
buildmobilemenu:function(menuid, ul, dir){
|
||||
function flattenul(ul, cloneulBol, callback, finalcall){
|
||||
var callback = callback || function(){}
|
||||
var finalcall = finalcall || function(){}
|
||||
var docfrag = document.createDocumentFragment()
|
||||
var targetul = cloneulBol? ul.cloneNode(true) : ul
|
||||
var subuls = targetul.getElementsByTagName('ul')
|
||||
var subulscount = subuls.length
|
||||
for (var i=subulscount-1; i>=0; i--){
|
||||
var subul = subuls[i]
|
||||
var header = subuls[i].parentNode
|
||||
docfrag.appendChild( subuls[i] )
|
||||
callback(i, header, subul)
|
||||
}
|
||||
docfrag.appendChild( targetul )
|
||||
finalcall(targetul)
|
||||
return docfrag
|
||||
}
|
||||
|
||||
if (!document.getElementById(menuid+'-mobile')){ // if mobile menu outermost container not created yet
|
||||
var mobilecontainer = document.createElement('nav')
|
||||
mobilecontainer.setAttribute('id', menuid+'-mobile')
|
||||
mobilecontainer.className = 'mobilelevelsmenu'
|
||||
//mobilecontainer.style.display = 'none'
|
||||
document.body.appendChild(mobilecontainer)
|
||||
var mobiletoggle = document.getElementById(menuid+'-mobiletoggle')
|
||||
if (mobiletoggle){
|
||||
this.addEvent(mobiletoggle, function(e){
|
||||
ddlevelsmenu.togglemobilemenu(menuid)
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}, "click")
|
||||
}
|
||||
}
|
||||
else{ // else, just reference mobile menu
|
||||
var mobilecontainer = document.getElementById(menuid+'-mobile')
|
||||
}
|
||||
|
||||
var flattened = flattenul(ul, false,
|
||||
function(i, header, subul){ // loop through header LIs and sub ULs
|
||||
var rightarrow = document.createElement('img')
|
||||
rightarrow.src = ddlevelsmenu.arrowpointers.rightarrow[0]
|
||||
rightarrow.className = "rightarrowpointer"
|
||||
header.getElementsByTagName('a')[0].appendChild(rightarrow)
|
||||
header._submenuref = subul
|
||||
subul.className = 'submenu'
|
||||
var breadcrumb = document.createElement('li')
|
||||
breadcrumb.className = "breadcrumb"
|
||||
breadcrumb.innerHTML = '<img src="' + ddlevelsmenu.arrowpointers.backarrow[0] + '" class="backarrowpointer" /> ' + header.getElementsByTagName('a')[0].firstChild.nodeValue
|
||||
breadcrumb._headerref = header
|
||||
subul.insertBefore(breadcrumb, subul.getElementsByTagName('li')[0])
|
||||
ddlevelsmenu.addEvent(header, function(e){
|
||||
var headermenu = this.parentNode
|
||||
var submenu = this._submenuref
|
||||
ddlevelsmenu.animatemobilesubmenu(submenu, '100%', 0)
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}, "click")
|
||||
ddlevelsmenu.addEvent(breadcrumb, function(e){
|
||||
var parentmenu = this._headerref.parentNode
|
||||
ddlevelsmenu.animatemobilesubmenu(parentmenu, '-100%', 0)
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}, "click")
|
||||
},
|
||||
function(topul){
|
||||
topul.style.zIndex = ddlevelsmenu.mobilezindex++
|
||||
}
|
||||
)
|
||||
mobilecontainer.appendChild(flattened)
|
||||
},
|
||||
|
||||
setopacity:function(el, value){
|
||||
el.style.opacity=value
|
||||
if (typeof el.style.opacity!="string"){ //if it's not a string (ie: number instead), it means property not supported
|
||||
el.style.MozOpacity=value
|
||||
try{
|
||||
if (el.filters){
|
||||
el.style.filter="progid:DXImageTransform.Microsoft.alpha(opacity="+ value*100 +")"
|
||||
}
|
||||
} catch(e){}
|
||||
}
|
||||
},
|
||||
|
||||
animatemobilesubmenu:function(targetul, beforeleft, afterleft){
|
||||
// See http://stackoverflow.com/questions/18564942/clean-way-to-programmatically-use-css-transitions-from-js/31862081#31862081
|
||||
this.css(targetul, 'notransition', 'add')
|
||||
targetul.style.zIndex = ddlevelsmenu.mobilezindex++
|
||||
targetul.style.left = beforeleft
|
||||
window.getComputedStyle(targetul).left // force layout reflow
|
||||
this.css(targetul, 'notransition', 'remove')
|
||||
targetul.style.left = afterleft
|
||||
},
|
||||
|
||||
|
||||
togglemobilemenu:function(mainmenuid, xoffset, yoffset){
|
||||
var toggler = document.getElementById(mainmenuid + '-mobiletoggle')
|
||||
var mobilemenu = document.getElementById(mainmenuid + '-mobile')
|
||||
if (mobilemenu){
|
||||
if (!ddlevelsmenu.css(mobilemenu, 'open', 'check')){
|
||||
ddlevelsmenu.css(mobilemenu, 'open', 'add')
|
||||
if (toggler)
|
||||
ddlevelsmenu.css(toggler, 'open', 'add')
|
||||
}
|
||||
else{
|
||||
ddlevelsmenu.css(mobilemenu, 'open', 'remove')
|
||||
if (toggler)
|
||||
ddlevelsmenu.css(toggler, 'open', 'remove')
|
||||
}
|
||||
}
|
||||
return false
|
||||
},
|
||||
|
||||
showmenu:function(header, submenu, dir){
|
||||
if (this.effects.enableswipe || this.effects.enablefade){
|
||||
if (this.effects.enableswipe){
|
||||
var endpoint=(header._istoplevel && dir=="topbar")? header._dimensions.submenuh : header._dimensions.submenuw
|
||||
submenu.parentNode.style.width=submenu.parentNode.style.height=0
|
||||
submenu.parentNode.style.overflow="hidden"
|
||||
}
|
||||
if (this.effects.enablefade){
|
||||
submenu.parentNode.style.width=submenu.offsetWidth+"px"
|
||||
submenu.parentNode.style.height=submenu.offsetHeight+"px"
|
||||
this.setopacity(submenu.parentNode, 0) //set opacity to 0 so menu appears hidden initially
|
||||
}
|
||||
submenu._curanimatedegree=0
|
||||
submenu.parentNode.style.visibility="visible"
|
||||
submenu.style.visibility="visible"
|
||||
clearInterval(submenu._animatetimer)
|
||||
submenu._starttime=new Date().getTime() //get time just before animation is run
|
||||
submenu._animatetimer=setInterval(function(){ddlevelsmenu.revealmenu(header, submenu, endpoint, dir)}, 10)
|
||||
}
|
||||
else{
|
||||
submenu.parentNode.style.visibility="visible"
|
||||
submenu.style.visibility="visible"
|
||||
}
|
||||
},
|
||||
|
||||
revealmenu:function(header, submenu, endpoint, dir){
|
||||
var elapsed=new Date().getTime()-submenu._starttime //get time animation has run
|
||||
if (elapsed<this.effects.duration){
|
||||
if (this.effects.enableswipe){
|
||||
if (submenu._curanimatedegree==0){ //reset either width or height of sub menu to "auto" when animation begins
|
||||
submenu.parentNode.style[header._istoplevel && dir=="topbar"? "width" : "height"]=(header._istoplevel && dir=="topbar"? submenu.offsetWidth : submenu.offsetHeight)+"px"
|
||||
}
|
||||
submenu.parentNode.style[header._istoplevel && dir=="topbar"? "height" : "width"]=(submenu._curanimatedegree*endpoint)+"px"
|
||||
if (this.effects.enableslide){
|
||||
submenu.style[header._istoplevel && dir=="topbar"? "top" : "left"]=Math.floor((submenu._curanimatedegree-1)*endpoint)+"px"
|
||||
}
|
||||
}
|
||||
if (this.effects.enablefade){
|
||||
this.setopacity(submenu.parentNode, submenu._curanimatedegree)
|
||||
}
|
||||
}
|
||||
else{
|
||||
clearInterval(submenu._animatetimer)
|
||||
if (this.effects.enableswipe){
|
||||
submenu.parentNode.style.width=submenu.offsetWidth+"px"
|
||||
submenu.parentNode.style.height=submenu.offsetHeight+"px"
|
||||
submenu.parentNode.style.overflow="visible"
|
||||
if (this.effects.enableslide){
|
||||
submenu.style.top=0;
|
||||
submenu.style.left=0;
|
||||
}
|
||||
}
|
||||
if (this.effects.enablefade){
|
||||
this.setopacity(submenu.parentNode, 1)
|
||||
submenu.parentNode.style.filter=""
|
||||
}
|
||||
if (this.enableshim && submenu.FFscrollInfo) //if this is FF browser (meaning shim hasn't been applied yet
|
||||
this.positionshim(header, submenu, dir, submenu.FFscrollInfo.x, submenu.FFscrollInfo.y)
|
||||
}
|
||||
submenu._curanimatedegree=(1-Math.cos((elapsed/this.effects.duration)*Math.PI)) / 2
|
||||
},
|
||||
|
||||
hidemenu:function(submenu){
|
||||
if (typeof submenu._pos!="undefined"){ //if submenu is outermost DIV drop down menu
|
||||
this.css(this.topitems[submenu._master][parseInt(submenu._pos)], "selected", "remove")
|
||||
if (this.enableshim)
|
||||
this.hideshim()
|
||||
}
|
||||
clearInterval(submenu.firstChild._animatetimer)
|
||||
submenu.style.left=0
|
||||
submenu.style.top="-1000px"
|
||||
submenu.style.visibility="hidden"
|
||||
submenu.firstChild.style.visibility="hidden"
|
||||
},
|
||||
|
||||
|
||||
addEvent:function(target, functionref, tasktype) {
|
||||
if (target.addEventListener)
|
||||
target.addEventListener(tasktype, functionref, false);
|
||||
else if (target.attachEvent)
|
||||
target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
|
||||
},
|
||||
|
||||
domready:function(functionref){ //based on code from the jQuery library
|
||||
if (dd_domreadycheck){
|
||||
functionref()
|
||||
return
|
||||
}
|
||||
// Mozilla, Opera and webkit nightlies currently support this event
|
||||
if (document.addEventListener) {
|
||||
// Use the handy event callback
|
||||
document.addEventListener("DOMContentLoaded", function(){
|
||||
document.removeEventListener("DOMContentLoaded", arguments.callee, false )
|
||||
functionref();
|
||||
dd_domreadycheck=true
|
||||
}, false )
|
||||
}
|
||||
else if (document.attachEvent){
|
||||
// If IE and not an iframe
|
||||
// continually check to see if the document is ready
|
||||
if ( document.documentElement.doScroll && window == window.top) (function(){
|
||||
if (dd_domreadycheck){
|
||||
functionref()
|
||||
return
|
||||
}
|
||||
try{
|
||||
// If IE is used, use the trick by Diego Perini
|
||||
// http://javascript.nwbox.com/IEContentLoaded/
|
||||
document.documentElement.doScroll("left")
|
||||
}catch(error){
|
||||
setTimeout( arguments.callee, 0)
|
||||
return;
|
||||
}
|
||||
//and execute any waiting functions
|
||||
functionref();
|
||||
dd_domreadycheck=true
|
||||
})();
|
||||
}
|
||||
if (document.attachEvent && parent.length>0) //account for page being in IFRAME, in which above doesn't fire in IE
|
||||
this.addEvent(window, function(){functionref()}, "load");
|
||||
},
|
||||
|
||||
|
||||
init:function(mainmenuid, dir, mobile){
|
||||
|
||||
var desktopmenu = document.getElementById(mainmenuid)
|
||||
var mobilemenu = document.getElementById(mainmenuid + '-mobile')
|
||||
var toggler = document.getElementById(mainmenuid + '-mobiletoggle')
|
||||
|
||||
if (typeof this.menuclone[mainmenuid] != "object"){ // if sub menus haven't been cloned yet (for sake of mobile menu generation)
|
||||
this.menuclone[mainmenuid] = desktopmenu.getElementsByTagName("ul")[0].cloneNode(true) // clone and get UL inside top menu container
|
||||
var menuclone = this.menuclone[mainmenuid]
|
||||
var alllinks=menuclone.getElementsByTagName("a")
|
||||
for (var i=0; i<alllinks.length; i++){
|
||||
if (alllinks[i].getAttribute('rel')){
|
||||
var dropul=document.getElementById(alllinks[i].getAttribute('rel'))
|
||||
var dropulClone = dropul.cloneNode(true)
|
||||
dropulClone.removeAttribute('id')
|
||||
dropulClone.removeAttribute('class')
|
||||
alllinks[i].parentNode.appendChild(dropulClone)
|
||||
}
|
||||
}
|
||||
this.addEvent(document, function(e){ // hide mobile menu on click of document
|
||||
var mobilemenu = document.getElementById(mainmenuid + '-mobile')
|
||||
var toggler = document.getElementById(mainmenuid + '-mobiletoggle')
|
||||
if (mobilemenu)
|
||||
ddlevelsmenu.css(mobilemenu, 'open', 'remove')
|
||||
if (toggler)
|
||||
toggler.className = toggler.className.replace(/\s*open/g, "")
|
||||
}, 'click')
|
||||
}
|
||||
|
||||
if (mobile){ // if mobile mode (media query match)
|
||||
if (!mobilemenu){ // if mobile menu mode and mobile menu not generated yet
|
||||
this.buildmobilemenu(mainmenuid, this.menuclone[mainmenuid], dir)
|
||||
}
|
||||
if (desktopmenu.style.display != "none")
|
||||
desktopmenu.style.display = "none"
|
||||
if (toggler)
|
||||
toggler.style.display = "block"
|
||||
return
|
||||
}
|
||||
else{ // if regular menu mode but it's already generated, exit
|
||||
desktopmenu.style.display = "block"
|
||||
if (mobilemenu)
|
||||
ddlevelsmenu.css(mobilemenu, 'open', 'remove')
|
||||
if (toggler){
|
||||
toggler.className = toggler.className.replace(/\s*open/g, "")
|
||||
toggler.style.display = "none"
|
||||
}
|
||||
if (typeof this.topitems[mainmenuid] == "object"){
|
||||
return
|
||||
}
|
||||
}
|
||||
this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
|
||||
this.topitemsindex=-1
|
||||
this.ulindex=-1
|
||||
this.topmenuids.push(mainmenuid)
|
||||
this.topitems[mainmenuid]=[] //declare array on object
|
||||
this.subuls[mainmenuid]=[] //declare array on object
|
||||
this.hidetimers[mainmenuid]=[] //declare hide entire menu timer
|
||||
this.enableshim = (this.ismobile)? false : this.enableshim //disable shim if mobile browser
|
||||
if (this.enableshim && !this.shimadded){
|
||||
this.shimmy={}
|
||||
this.shimmy.topshim=this.addshimmy(document.body) //create top iframe shim obj
|
||||
this.shimmy.bottomshim=this.addshimmy(document.body) //create bottom iframe shim obj
|
||||
this.shimadded=true
|
||||
}
|
||||
var menubar=document.getElementById(mainmenuid)
|
||||
var alllinks=menubar.getElementsByTagName("a")
|
||||
var shelldivs=[]
|
||||
this.getwindowsize()
|
||||
for (var i=0; i<alllinks.length; i++){
|
||||
if (alllinks[i].getAttribute('rel')){
|
||||
this.topitemsindex++
|
||||
this.ulindex++
|
||||
var menuitem=alllinks[i]
|
||||
this.topitems[mainmenuid][this.topitemsindex]=menuitem //store ref to main menu links
|
||||
var dropul=document.getElementById(menuitem.getAttribute('rel'))
|
||||
var shelldiv=document.createElement("div") // create DIV which will contain the UL
|
||||
shelldiv.className="ddsubmenustyle"
|
||||
dropul.removeAttribute("class")
|
||||
shelldiv.appendChild(dropul)
|
||||
document.body.appendChild(shelldiv) //move main DIVs to end of document
|
||||
shelldivs.push(shelldiv)
|
||||
shelldiv.style.zIndex=2000 //give drop down menus a high z-index
|
||||
shelldiv._master=mainmenuid //Indicate which main menu this main DIV is associated with
|
||||
shelldiv._pos=this.topitemsindex //Indicate which main menu item this main DIV is associated with
|
||||
this.addEvent(shelldiv, function(e){ // 3.03 code
|
||||
e.stopPropagation()
|
||||
e.cancelBubble = true
|
||||
}, "touchstart")
|
||||
this.addEvent(shelldiv, function(e){ // 3.03 code
|
||||
ddlevelsmenu.hidemenu(this)
|
||||
}, "click")
|
||||
var arrowclass=(dir=="sidebar")? "rightarrowpointer" : "downarrowpointer"
|
||||
var arrowpointer=(dir=="sidebar")? this.arrowpointers.rightarrow : this.arrowpointers.downarrow
|
||||
if (this.arrowpointers.showarrow.toplevel)
|
||||
this.addpointer(menuitem, arrowclass, arrowpointer, (dir=="sidebar")? "before" : "after")
|
||||
this.buildmenu(mainmenuid, menuitem, dropul, this.ulindex, true, dir) //build top level menu
|
||||
shelldiv.onmouseover=function(){
|
||||
clearTimeout(ddlevelsmenu.hidetimers[this._master][this._pos])
|
||||
}
|
||||
this.addEvent(shelldiv, function(e){ //hide menu if mouse moves out of main DIV element into open space
|
||||
if (!ddlevelsmenu.isContained(this, e) && !ddlevelsmenu.isContained(ddlevelsmenu.topitems[this._master][parseInt(this._pos)], e)){
|
||||
var dropul=this
|
||||
if (ddlevelsmenu.enableshim)
|
||||
ddlevelsmenu.hideshim()
|
||||
ddlevelsmenu.hidetimers[this._master][this._pos]=setTimeout(function(){
|
||||
ddlevelsmenu.hidemenu(dropul)
|
||||
}, ddlevelsmenu.hideinterval)
|
||||
}
|
||||
}, "mouseout")
|
||||
var subuls=dropul.getElementsByTagName("ul")
|
||||
for (var c=0; c<subuls.length; c++){
|
||||
this.ulindex++
|
||||
var parentli=subuls[c].parentNode
|
||||
var subshell=document.createElement("div")
|
||||
subshell.appendChild(subuls[c])
|
||||
parentli.appendChild(subshell)
|
||||
if (this.arrowpointers.showarrow.sublevel)
|
||||
this.addpointer(parentli.getElementsByTagName("a")[0], "rightarrowpointer", this.arrowpointers.rightarrow, "before")
|
||||
this.buildmenu(mainmenuid, parentli, subuls[c], this.ulindex, false, dir) //build sub level menus
|
||||
}
|
||||
}
|
||||
} //end for loop
|
||||
this.addEvent(window, function(){ddlevelsmenu.getwindowsize(); ddlevelsmenu.gettopitemsdimensions()}, "resize")
|
||||
if (this.ismobile){ // 3.03 code
|
||||
this.addEvent(document, function(e){
|
||||
for (var i=0; i<shelldivs.length; i++){
|
||||
ddlevelsmenu.hidemenu(shelldivs[i])
|
||||
}
|
||||
}, 'touchstart')
|
||||
}
|
||||
},
|
||||
|
||||
setup:function(mainmenuid, dir){
|
||||
this.domready(function(){ddlevelsmenu.init(mainmenuid, dir, ddlevelsmenu.mql.matches)})
|
||||
this.mql.addListener(function(){
|
||||
ddlevelsmenu.domready(function(){ddlevelsmenu.init(mainmenuid, dir, ddlevelsmenu.mql.matches)})
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
0
public/ddlevelsfiles/index.htm
Normal file
0
public/ddlevelsfiles/index.htm
Normal file
BIN
public/ddlevelsfiles/left.gif
Normal file
BIN
public/ddlevelsfiles/left.gif
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 87 B |
74
public/ddlevelsfiles/new-base.css
vendored
Normal file
74
public/ddlevelsfiles/new-base.css
vendored
Normal file
@@ -0,0 +1,74 @@
|
||||
/* ######### Drop Down DIVs CSS ######### */
|
||||
|
||||
|
||||
.ddsubmenustyle, .ddsubmenustyle div{ /*topmost and sub DIVs, respectively*/
|
||||
font: normal 13px Verdana;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
list-style-type: none;
|
||||
background: white;
|
||||
border: 1px solid black;
|
||||
border-bottom-width: 0;
|
||||
visibility: hidden;
|
||||
z-index: 100;
|
||||
}
|
||||
|
||||
.ddsubmenustyle ul{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
list-style-type: none;
|
||||
border: 0px none;
|
||||
}
|
||||
.ddsubmenustyle ul li{
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.ddsubmenustyle li a{
|
||||
display: block;
|
||||
width: 150px; /*width of menu (not including side paddings)*/
|
||||
color: black;
|
||||
background-color: lightyellow;
|
||||
text-decoration: none;
|
||||
padding: 4px 5px;
|
||||
border-bottom: 1px solid black;
|
||||
}
|
||||
|
||||
* html .ddsubmenustyle li{ /*IE6 CSS hack*/
|
||||
display: inline-block;
|
||||
width: 100px; /*width of menu (include side paddings of LI A*/
|
||||
}
|
||||
|
||||
.ddsubmenustyle li a:hover{
|
||||
background-color: black;
|
||||
color: white;
|
||||
}
|
||||
|
||||
/* ######### Neutral CSS ######### */
|
||||
|
||||
.downarrowpointer{ /*CSS for "down" arrow image added to top menu items*/
|
||||
padding-left: 4px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.rightarrowpointer{ /*CSS for "right" arrow image added to drop down menu items*/
|
||||
position: absolute;
|
||||
padding-top: 3px;
|
||||
left: 100px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.ddiframeshim{
|
||||
position: absolute;
|
||||
z-index: 500;
|
||||
background: transparent;
|
||||
border-width: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
display: block;
|
||||
}
|
||||
Reference in New Issue
Block a user