WordPress/wp-includes/js/admin-bar.dev.js
2010-11-26 21:47:28 +00:00

140 lines
3.2 KiB
JavaScript

(function(d, w) {
var addEvent = function( obj, type, fn ) {
if (obj.addEventListener)
obj.addEventListener(type, fn, false);
else if (obj.attachEvent)
obj.attachEvent('on' + type, function() { return fn.call(obj, window.event);});
},
aB, hc = new RegExp('\\bhover\\b', 'g'), q = [],
/**
* Get the timeout ID of the given element
*/
getTOID = function(el) {
var i = q.length;
while( i-- )
if ( q[i] && el == q[i][1] )
return q[i][0];
return false;
},
addClass = function(t) {
var ancestors = [],
ancestorLength = 0,
id,
i = q.length,
inA;
while ( t && t != aB && t != d ) {
if( 'LI' == t.nodeName.toUpperCase() ) {
ancestors[ ancestors.length ] = t;
id = getTOID(t);
if ( id )
clearTimeout( id );
t.className = t.className ? ( t.className.replace(hc, '') + ' hover' ) : 'hover';
}
t = t.parentNode;
}
/* remove the hover class for any objects not in the immediate element's ancestry */
while ( i-- ) {
inA = false;
ancestorLength = ancestors.length;
while( ancestorLength-- ) {
if ( ancestors[ ancestorLength ] == q[i][1] )
inA = true;
}
/* keep delayed hover on mu (superadmin) menu because it's so easy to mouse away from */
if ( ! inA && -1 == q[i][1].className.indexOf('ab-superadmin') )
q[i][1].className = q[i][1].className ? q[i][1].className.replace(hc, '') : '';
}
},
removeClass = function(t) {
while ( t && t != aB && t != d ) {
if( 'LI' == t.nodeName.toUpperCase() ) {
(function(t) {
var to = setTimeout(function() {
t.className = t.className ? t.className.replace(hc, '') : '';
}, 500);
q[q.length] = [to, t];
})(t);
}
t = t.parentNode;
}
},
clickShortlink = function(e) {
var t = e.target || e.srcElement, links, i;
if ( 'undefined' == typeof adminBarL10n )
return;
while( t && t != aB && t != d && (
! t.className ||
-1 == t.className.indexOf('ab-get-shortlink')
) )
t = t.parentNode;
if ( t && t.className && -1 != t.className.indexOf('ab-get-shortlink') ) {
links = d.getElementsByTagName('link');
if ( ! links.length )
links = d.links;
i = links.length;
if ( e.preventDefault )
e.preventDefault();
e.returnValue = false;
while( i-- ) {
if ( links[i] && 'shortlink' == links[i].getAttribute('rel') ) {
prompt( adminBarL10n.url, links[i].href );
return false;
}
}
alert( adminBarL10n.noShortlink );
return false;
}
}
addEvent(w, 'load', function() {
var b = d.getElementsByTagName('body')[0],
s = d.getElementById('adminbar-search');
aB = d.getElementById('wpadminbar');
if ( b && aB ) {
b.appendChild( aB );
addEvent(aB, 'mouseover', function(e) {
addClass( e.target || e.srcElement );
});
addEvent(aB, 'mouseout', function(e) {
removeClass( e.target || e.srcElement );
});
addEvent(aB, 'click', clickShortlink );
}
if ( s ) {
if ( '' == s.value )
s.value = s.getAttribute('title');
s.onblur = function() {
this.value = '' == this.value ? this.getAttribute('title') : this.value;
}
s.onfocus = function() {
this.value = this.getAttribute('title') == this.value ? '' : this.value;
}
}
if ( w.location.hash )
w.scrollBy(0,-32);
});
})(document, window);