📄 dommenu.js
字号:
'leftCenter', offsetLeft + originalWidth/2,
'topCenter', offsetTop + originalHeight/2,
'radius', Math.max(originalWidth, originalHeight)
);
}
// }}}
// {{{ domMenu_callTimeout()
function domMenu_callTimeout(in_function, in_timeout, in_args, in_basename, in_type)
{
if (in_timeout == 0) {
var tmp_function = new Function('argv', in_function);
tmp_function(in_args);
}
else if (in_timeout > 0) {
// after we complete the timeout call, we want to remove the reference, so always add that
var tmp_function = new Function('argv', in_function + ' domMenu_timeouts[' + domMenu_quote(in_type) + '].removeItem(' + domMenu_quote(in_basename) + ');');
var tmp_args = new Array();
for (var i = 0; i < in_args.length; i++) {
tmp_args[i] = in_args[i];
}
if (!domMenu_isKonq && !domMenu_isIE50) {
domMenu_timeouts[in_type].setItem(in_basename, setTimeout(function() { tmp_function(tmp_args); }, in_timeout));
}
else {
var tmp_data = new Array();
tmp_data['function'] = tmp_function;
tmp_data['args'] = tmp_args;
domMenu_timeoutStates[in_type].setItem(in_basename, tmp_data);
var tmp_type = domMenu_quote(in_type);
var tmp_basename = domMenu_quote(in_basename);
domMenu_timeouts[in_type].setItem(in_basename, setTimeout('domMenu_timeoutStates[' + tmp_type + '].items[' + tmp_basename + '][' + domMenu_quote('function') + '](domMenu_timeoutStates[' + tmp_type + '].items[' + tmp_basename + '][' + domMenu_quote('args') + ']); domMenu_timeoutStates[' + tmp_type + '].removeItem(' + tmp_basename + ');', in_timeout));
}
}
}
// }}}
// {{{ domMenu_cancelTimeout()
function domMenu_cancelTimeout(in_basename, in_type)
{
// take advantage of browsers which use the anonymous function
if (!domMenu_isKonq && !domMenu_isIE50) {
clearTimeout(domMenu_timeouts[in_type].removeItem(in_basename));
}
else {
// if konqueror, we only want to clearTimeout if it is still running
if (domMenu_timeoutStates[in_type].hasItem(in_basename)) {
clearTimeout(domMenu_timeouts[in_type].removeItem(in_basename));
domMenu_timeoutStates[in_type].removeItem(in_basename);
}
}
}
// }}}
// {{{ domMenu_correctEdgeBleed()
function domMenu_correctEdgeBleed(in_width, in_height, in_x, in_y, in_padding, in_axis)
{
if (domMenu_isIE && !domMenu_isIE5) {
var pageHeight = document.documentElement.clientHeight;
}
else if (!domMenu_isKonq) {
var pageHeight = document.body.clientHeight;
}
else {
var pageHeight = window.innerHeight;
}
var pageYOffset = domMenu_isIE ? document.body.scrollTop : window.pageYOffset;
var pageXOffset = domMenu_isIE ? document.body.scrollLeft : window.pageXOffset;
if (in_axis == 'horizontal') {
var bleedRight = (in_x - pageXOffset) + in_width - (document.body.clientWidth - in_padding);
var bleedLeft = (in_x - pageXOffset) - in_padding;
// we are bleeding off the right, move menu to stay on page
if (bleedRight > 0) {
in_x -= bleedRight;
}
// we are bleeding to the left, move menu over to stay on page
// we don't want an 'else if' here, because if it doesn't fit we will bleed off the right
if (bleedLeft < 0) {
in_x += bleedLeft;
}
}
else {
var bleedTop = (in_y - pageYOffset) - in_padding;
var bleedBottom = (in_y - pageYOffset) + in_height - (pageHeight - in_padding);
// if we are bleeding off the bottom, move menu to stay on page
if (bleedBottom > 0) {
in_y -= bleedBottom;
}
// if we are bleeding off the top, move menu down
// we don't want an 'else if' here, because if we just can't fit it, bleed off the bottom
if (bleedTop < 0) {
in_y += bleedTop;
}
}
return new Array(in_x, in_y);
}
// }}}
// {{{ domMenu_toggleSubMenu()
function domMenu_toggleSubMenu(in_parentElement, in_style)
{
var subMenu = in_parentElement.data.items['subMenu'];
if (subMenu && subMenu.style.visibility != in_style) {
var settings = domMenu_settings.items[in_parentElement.data.items['basename']];
var prefix = in_parentElement.data.items['level'] == 1 ? 'menu' : 'subMenu';
var className = settings.items[prefix + 'ElementClass'];
// :BUG: this is a problem if submenus click to open, then it won't
// have the right class when you click to close
if (in_style == 'visible') {
className += ' ' + settings.items[prefix + 'Element' + (in_style == 'visible' ? 'Active' : 'Hover') + 'Class'];
}
in_parentElement.firstChild.className = className;
// position our submenu
if (in_style == 'visible') {
var tmp_offsets = domMenu_getOffsets(in_parentElement);
if (in_parentElement.data.items['level'] == 1) {
tmp_offsets.items['top'] += settings.items['verticalSubMenuOffsetY'];
tmp_offsets.items['bottom'] += settings.items['verticalSubMenuOffsetY'];
tmp_offsets.items['left'] += settings.items['verticalSubMenuOffsetX'];
tmp_offsets.items['right'] += settings.items['verticalSubMenuOffsetX'];
}
// reposition if there was a change in the parent position/size
if (!in_parentElement.data.items['offsets'].compare(tmp_offsets)) {
in_parentElement.data.items['offsets'] = tmp_offsets;
if (settings.items['axis'] == 'horizontal' && in_parentElement.data.items['level'] == 1) {
var xCoor = tmp_offsets.items['left'];
if (settings.items['verticalExpand'] == 'north') {
var yCoor = tmp_offsets.items['top'] - subMenu.offsetHeight - settings.items['verticalSubMenuOffsetY'];
}
else {
var yCoor = tmp_offsets.items['bottom'];
}
}
else {
var xCoor = tmp_offsets.items['right'] + settings.items['horizontalSubMenuOffsetX'];
var yCoor = tmp_offsets.items['top'] + settings.items['horizontalSubMenuOffsetY'];
}
var minWidth = settings.items['subMenuMinWidth'];
var renderedWidth = subMenu.offsetWidth;
if (minWidth == 'inherit') {
minWidth = in_parentElement.offsetWidth + settings.items['subMenuWidthCorrection'];
}
else if (minWidth == 'auto') {
minWidth = renderedWidth;
}
if (domMenu_isKonq) {
// change with width of the first cell
subMenu.firstChild.firstChild.firstChild.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
}
else {
// change the width of the table
subMenu.firstChild.style.width = Math.max(minWidth, renderedWidth) + 'px';
}
var coordinates = domMenu_correctEdgeBleed(subMenu.offsetWidth, subMenu.offsetHeight, xCoor, yCoor, settings.items['screenPadding'], settings.items['axis']);
subMenu.style.left = coordinates[0] + 'px';
subMenu.style.top = coordinates[1] + 'px';
// ** if we inherit, it is necessary to check the parent element width again **
if (settings.items['axis'] == 'horizontal' && settings.items['subMenuMinWidth'] == 'inherit') {
subMenu.firstChild.style.width = Math.max(in_parentElement.offsetWidth + settings.items['subMenuWidthCorrection'], renderedWidth) + 'px';
}
}
}
// force konqueror to change the styles
if (domMenu_isKonq) {
in_parentElement.firstChild.style.display = 'none';
in_parentElement.firstChild.style.display = '';
}
subMenu.style.visibility = in_style;
domMenu_detectCollisions(subMenu, (in_style == 'hidden'));
}
}
// }}}
// {{{ domMenu_toggleHighlight()
function domMenu_toggleHighlight(in_element, in_status)
{
// if this is a heading, don't change the style
if (!in_element.data.items['numChildren'] && !in_element.data.items['uri']) {
return;
}
var settings = domMenu_settings.items[in_element.data.items['basename']];
var prefix = in_element.data.items['level'] == 1 ? 'menu' : 'subMenu';
var className = settings.items[prefix + 'ElementClass'];
var highlightElement = in_element.firstChild;
var pseudoClass;
if (in_status) {
if (in_element.data.hasItem('subMenu') && in_element.data.items['subMenu'].style.visibility == 'visible') {
pseudoClass = 'Active';
}
else if (in_element.data.items['numChildren'] || in_element.data.items['uri']) {
pseudoClass = 'Hover';
}
}
if (pseudoClass) {
className += ' ' + settings.items[prefix + 'Element' + pseudoClass + 'Class'];
// if we are changing to hover, change the alt contents (only change if needs it)
if (highlightElement.childNodes.length == 2 && highlightElement.lastChild.style.display == 'none') {
highlightElement.firstChild.style.display = 'none';
highlightElement.lastChild.style.display = '';
}
}
else {
// if we are changing to non-hover, change the alt contents (only change if needs it)
if (highlightElement.childNodes.length == 2 && highlightElement.firstChild.style.display == 'none') {
highlightElement.lastChild.style.display = 'none';
highlightElement.firstChild.style.display = '';
}
}
highlightElement.className = className;
// force konqueror to change the styles
if (domMenu_isKonq) {
highlightElement.style.display = 'none';
highlightElement.style.display = '';
}
}
// }}}
// {{{ domMenu_resolveLink()
function domMenu_resolveLink(in_this, in_event)
{
var eventObj = domMenu_isIE ? event : in_event;
var currentTarget = domMenu_isIE ? in_this : eventObj.currentTarget;
var basename = currentTarget.data.items['basename'];
// close the menu system immediately when we resolve the uri
domMenu_changeActivePath(false, domMenu_activeElement.items[basename], 0);
if (currentTarget.data.items['uri']) {
window.status = 'Resolving Link...';
// open in current window
if (!currentTarget.data.items['target'] || currentTarget.data.items['target'] == '_self') {
window.location = currentTarget.data.items['uri'];
}
// open in new window
else {
window.open(currentTarget.data.items['uri'], currentTarget.data.items['target']);
}
}
}
// }}}
// {{{ domMenu_quote()
function domMenu_quote(in_string)
{
return "'" + in_string.replace(new RegExp("'", 'g'), "\\'") + "'";
}
// }}}
function fixCircleRefs(){
// alert (document.all.length)
if(document.all){
var el;
for(var d=0;d<document.all.length;d++){
if (d > 200) break;
el = document.all[d];
// alert (el.name + " :: " + d);
for(var c = cearElementProps.length;c--;){
el[cearElementProps[c]] = null;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -