eenterMouseleave && originalType === 'mouseleave' ) {
if( event.currentTarget.contains(event.relatedTarget) ) {
return;
}
}
handler.call( context || _Event.cache[uid].node, event );
};
},
/**
* Purge events from given element
*
* @param number
* @return void
*/
purge: function ( uid ) {
var cache = _Event.cache[uid],
element,
key;
if( !cache ) {
return;
}
element = PB(cache.node);
for( key in cache ) {
if( cache.hasOwnProperty(key) && key !== 'node' ) {
element.off( key );
}
}
delete _Event.cache[uid];
cache.node = null;
return;
},
/**
* Extend event object with functionality, on event fire
* this function will be called.
*
* For legacy browsers this also extend the event object with
* with de Event specications.
*
* Returns an extended Event object
*
* @param Event
* @param number
* @return Event
*/
extend: function ( event, uid ) {
if( event.type.indexOf('touch') === 0 && event.touches[0] ) {
event.touchX = event.touches[0].pageX;
event.touchY = event.touches[0].pageY;
}
if( event.type === 'DOMMouseScroll' || event.type === 'mousewheel' || event.type === 'wheel' ) {
event.wheel = event.wheelDelta ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
}
if( _Event.manualExtend === false ) {
return event;
}
PB.overwrite( event, _Event.methods );
event.target = event.srcElement || _Event.cache[uid].node;
event.currentTarget = _Event.cache[uid].node;
switch ( event.type ) {
case 'mouseover':
case 'mouseenter':
event.relatedTarget = event.fromElement;
break;
case 'mouseout':
case 'mouseleave':
event.relatedTarget = event.toElement;
break;
}
if( event.pageX === undefined ) {
event.pageX = event.clientX + (docElement.scrollLeft || body.scrollLeft) - (docElement.clientLeft || 0);
event.pageY = event.clientY + (docElement.scrollTop || body.scrollTop) - (docElement.clientTop || 0);
}
event.which = (event.keyCode === undefined) ? event.charCode : event.keyCode;
event.which = (event.which === 0 ? 1 : (event.which === 4 ? 2: (event.which === 2 ? 3 : event.which)));
return event;
}
};
/**
*
*/
_Event.methods = {
/**
* Short for preventDefault and stopPropagation
*
* Tnx prototypejs! :)
*/
stop: function () {
this.preventDefault();
this.stopPropagation();
}
};
/**
* Extend event prototype with DOM level 2 events
*/
if (window.addEventListener) {
PB.overwrite(Event.prototype, _Event.methods);
}
/**
* Add methods for non DOM level 2 events
*/
if( window.attachEvent && !window.addEventListener ) {
_Event.manualExtend = true;
PB.overwrite(_Event.methods, {
/**
* Normalize stopPropagation
*/
stopPropagation: function () {
this.cancelBubble = true;
},
/**
* Normalize stopPropagation
*/
preventDefault: function () {
this.returnValue = false;
}
});
}
/**
*
*/
PB.overwrite(PB.dom, {
/**
* DOM event binding
*
* Example
* PB('element').on('click', function ( e ){ alert(e.type) })
*
* @param string
* @param Function
* @param Object
* @return Dom
*/
on: function ( type, handler, context ) {
var types = type.split(' ');
if ( typeof handler !== 'function' ) {
throw new TypeError('element.on(\''+type+'\'), handler is not a function');
}
if( types.length > 1 ) {
types.forEach(function ( type ) {
this.on( type, handler, context );
}, this);
return this;
}
var node = this.node,
uid = node.__PBJS_ID__,
events = _Event.cache[uid],
originalType = type,
eventsType,
i;
if( _Event.supportsMouseenterMouseleave === false ) {
type = (type === 'mouseenter' ? 'mouseover' : (type === 'mouseleave' ? 'mouseout' : type));
}
if( !events ) {
_Event.cache[uid] = events = {node: node};
}
if( !events[type] ) {
events[type] = [];
}
eventsType = events[type];
i = eventsType.length;
while( i-- ) {
if( eventsType[i].handler === handler ) {
return this;
}
}
var entry = {
handler: handler,
responder: _Event.createResponder( uid, type, originalType, handler, context )
};
eventsType.push( entry );
if( node.addEventListener ) {
node.addEventListener( type, entry.responder, false );
} else {
node.attachEvent( 'on'+type, entry.responder );
}
node = null;
return this;
},
/**
* Bind the event, and removes it after use
*
* @param string
* @param Function
* @param Object
* @return Dom
*/
once: function ( types, handler, context ) {
var me = this;
types.split(' ').forEach(function ( type ) {
var _handler = function () {
me.off( type, _handler );
handler.apply( context || me.node, PB.toArray(arguments) );
};
me.on(type, _handler);
});
return this;
},
/**
* Removes the given: (type + handler) or (type) or (all)
*
* @param string
* @param Function
* @return Dom
*/
off: function ( type, handler ) {
var node = this.node,
uid = node.__PBJS_ID__,
events = _Event.cache[uid],
eventsType,
entry,
i;
if( !events ) {
return this;
}
if( !type ) {
_Event.purge( uid );
return this;
}
eventsType = events[type];
if( !eventsType ) {
return this;
}
i = eventsType.length;
if( !handler ) {
while( i-- ) {
this.off( type, eventsType[i].handler );
}
return this;
}
while( i-- ) {
if( eventsType[i].handler === handler ) {
entry = eventsType[i];
eventsType.splice( i, 1 );
if( !eventsType.length ) {
delete _Event.cache[uid][type];
}
break;
}
}
if( !entry ) {
return this;
}
if( node.removeEventListener ) {
node.removeEventListener( type, entry.responder, false );
} else {
node.detachEvent( 'on'+type, entry.responder );
}
node = null;
return this;
},
/**
* Dispatch the event on the element
*
* @param string
* @return Dom
*/
emit: function ( type ) {
var evt;
if( _Event.HTMLEvents.test(type) || this.nodeName === 'INPUT' ) {
this.node[type]();
}
else if( doc.createEvent ) {
if ( _Event.MouseEvents.test(type) ) {
evt = doc.createEvent('MouseEvents');
evt.initMouseEvent(
type, true, true, window, // type, canBubble, cancelable, view,
0, 0, 0, 0, 0, // detail, screenX, screenY, clientX, clientY,
false, false, false, false, // ctrlKey, altKey, shiftKey, metaKey,
0, null); // button, relatedTarget
this.node.dispatchEvent(evt);
} else {
evt = doc.createEvent('Events');
evt.initEvent( type, true, true );
this.node.dispatchEvent(evt);
}
}
else {
evt = doc.createEventObject();
this.node.fireEvent('on'+type, evt);
}
return this;
}
});
/**
*
*/
PB.ready = (function () {
var ready = doc.readyState === 'complete',
queue = [];
function execQueue () {
var callback;
ready = true;
body = doc.body;
while( callback = queue.shift() ) {
callback();
}
}
function domready () {
try {
doc.body.scrollLeft;
execQueue();
} catch ( e ) {
setTimeout(domready, 16.7);
return;
}
}
if( doc.addEventListener ) {
PB(doc).once('DOMContentLoaded', execQueue);
} else {
domready();
}
return function ( callback ) {
if( !ready ) {
return queue.push( callback );
}
callback();
};
})();
PB.overwrite(PB.dom, {
set: function ( key, value ) {
this.storage[key] = value;
return this;
},
get: function ( key ) {
return this.storage[key];
},
unset: function ( key ) {
return delete this.storage[key];
},
isset: function ( key ) {
return this.storage[key] !== undefined;
}
});
PB.overwrite(PB.dom, {
/**
* Set/get/remove attribute
* null values will remove attribute
*
* @return mixed
*/
attr: function ( key, value ) {
if( PB.type(key) === 'object' ) {
PB.each(key, this.attr, this);
return this;
}
if( value === undefined ) {
return this.node.getAttribute(key);
} else if ( value === null ) {
this.node.removeAttribute(key);
} else {
this.node.setAttribute(key, value);
}
return this;
},
/**
* Set / get value from form element
*/
val: function ( value ) {
if( value === undefined ) {
return this.node.value;
}
this.node.value = value;
return this;
},
/**
* Set or retrieve 'data-' attribute
*/
data: function ( key, value ) {
return this.attr( 'data-'+key, value );
},
/**
* Select the content in the provided range
*/
select: function( start, length ) {
var node = this.node,
value = this.val(),
range;
if ( value ) {
if ( !length ){ // default: select all
length = ( start ) ? start : value.length;
start = 0;
}
if ( node.createTextRange ) {
document.selection.empty();
range = node.createTextRange();
range.collapse( true );
range.moveStart( 'character', start );
range.moveEnd( 'character', start + length );
range.select();
} else {
window.getSelection().removeAllRanges();
node.setSelectionRange( start, start+length );
}
}
}
});
var unit = /^-?[\d.]+px$/i,
opacity = /alpha\(opacity=(.*)\)/i,
noPixel = /(thin|medium|thick|em|ex|pt|%)$/,
computedStyle = doc.defaultView && doc.defaultView.getComputedStyle,
vendorDiv = doc.createElement('div'),
supportsOpacity = vendorDiv.style.opacity !== undefined,
supportsCssFloat = vendorDiv.style.cssFloat !== undefined,
skipUnits = 'zIndex zoom fontWeight opacity',
cssPrefixProperties = 'animationName transform transition transitionProperty transitionDuration transitionTimingFunction boxSizing backgroundSize boxReflect'.split(' '),
cssPropertyMap = {},
vendorPrefixes = 'O ms Moz Webkit'.split(' '),
i = vendorPrefixes.length;
/**
* Add prefixes to cssPropertyMap map if needed/supported
*/
cssPrefixProperties.forEach(function ( property ) {
if( property in vendorDiv.style ) {
return cssPropertyMap[property] = property;
}
var j = i,
prop = property.charAt(0).toUpperCase()+property.substr(1);
while( j-- ) {
if( vendorPrefixes[j]+prop in vendorDiv.style ) {
return cssPropertyMap[property] = vendorPrefixes[j]+prop;
}
}
});
cssPrefixProperties = vendorDiv = null;
PB.support.CSSTransition = !!cssPropertyMap.transition;
PB.support.CSSAnimation = !!cssPropertyMap.animationName;
/**
* Add px numeric values
*/
function addUnits ( property, value ) {
if( skipUnits.indexOf(property) >= 0 ) {
return value;
}
return typeof value === 'string' ? value : value+'px';
}
/**
* Remove units from px values
*/
function removeUnits ( value ) {
return unit.test( value ) ? parseInt( value, 10 ) : value;
}
/**
* Get the right property name for this browser
*/
function getCssProperty ( property ) {
if( property === 'float' ) {
property = supportsCssFloat ? 'cssFloat' : 'styleFloat';
}
return cssPropertyMap[property] || property;
}
PB.overwrite(PB.dom, {
/**
* Set CSS styles
*
* @param object
* @return PB.Dom
*/
setStyle: function ( values ) {
var property;
if( arguments.length === 2 ) {
var property = values;
values = {};
values[property] = arguments[1];
}
for( property in values ) {
if( values.hasOwnProperty(property) ) {
if( property === 'opacity' && !supportsOpacity ) {
if( !this.node.currentStyle || !this.node.currentStyle.hasLayout ) {
this.node.style.zoom = 1;
}
this.node.style.filter = 'alpha(opacity='+(values[property]*100)+')';
} else {
this.node.style[getCssProperty( property )] = addUnits( property, values[property] );
}
}
}
return this;
},
/**
* Get CSS style
*
* @param string
* @return number/string
*/
getStyle: function ( property, calculated ) {
property = getCssProperty( property );
var node = this.node,
value = node.style[property],
o;
if( calculated || !value || value === 'auto' ) {
if( computedStyle ) {
value = doc.defaultView.getComputedStyle( node, null )[property];
} else {
value = node.currentStyle[property];
if( noPixel.test(value) ) {
var style = value.lastIndexOf('%') > -1 ? 'height: '+value : 'border: '+value+' solid #000; border-bottom-width: 0',
div = PB('
')
.appendTo(body);
value = div.node.offsetHeight;
div.remove();
return value;
}
}
}
if( property === 'opacity' ) {
if( node.style.filter && (o = node.style.filter.match(opacity)) && o[1] ) {
return parseFloat(o[1]) / 100;
}
return value ? parseFloat(value) : 1.0;
}
return value === 'auto' ? 0 : removeUnits(value);
}
});
PB.browser.supportsCSSAnimation = !!cssPropertyMap['animationName'];
function morphArgs ( args ) {
var options = {
duration: .4,
effect: 'ease'
};
for( var i = 1 ; i < args.length; i++ ) {
switch( typeof args[i] ) {
case 'function':
options.callback = args[i];
break;
case 'number':
options.duration = args[i];
break;
case 'string':
options.effect = PB.String.decamelize(args[i]);
break;
}
}
return options;
}
/**
* @todo add 'effect' arguments
*
* Firefox bug, https://bugzilla.mozilla.org/show_bug.cgi?id=604074
* https://developer.mozilla.org/en-US/docs/CSS/transition-timing-function
*/
PB.dom.morph = PB.support.CSSTransition ?
function ( to ) {
var me = this,
options = morphArgs( arguments ),
morph = this.get('__morph') || {},
from = {};
if( morph.running ) {
this.stop(false, true);
}
morph.to = to;
morph.callback = options.callback;
morph.running = true;
from.transition = 'all '+options.duration+'s '+options.effect+' 0s';
PB.each(to, function ( property ) {
from[property] = me.getStyle( property, true );
});
this.setStyle(from);
PB.each(to, function ( property ) {
me.getStyle( property, true );
});
/* Example code to force `GPU` */
/*
if( (to.left !== undefined && to.top !== undefined) && !to.transform ) {
to.transform = 'translate('+addUnits('left', to.left)+', '+addUnits('top', to.top)+')';
delete to.left;
delete to.top;
}
*/
me.setStyle(to);
morph.endTimer = setTimeout(function() {
if( !me.node ) {
return;
}
morph.running = false;
me.setStyle({
transition: ''
});
if( options.callback ) {
options.callback( me );
}
}, (options.duration*1000));
this.set('__morph', morph);
return this;
} :
function ( to ) {
var options = morphArgs( arguments );
this.setStyle(to);
if( options.callback ) {
options.callback( this );
}
};
/**
* Stop morphing
*
* @param {boolean} (optional)
* @param {boolean} (optional)
* @return this
*/
PB.dom.stop = function ( skipToEnd, triggerCallback ) {
var me = this,
morph = this.get('__morph');
if( !morph || !morph.running ) {
return this;
}
triggerCallback = (triggerCallback === undefined) ? true : !!triggerCallback;
morph.running = false;
clearTimeout( morph.endTimer );
if( skipToEnd ) {
PB.each(morph.to, function ( property ) {
me.setStyle(property, '');
me.getStyle(property, true);
});
}
else {
PB.each(morph.to, function ( property ) {
morph.to[property] = me.getStyle(property, true);
});
}
morph.to.transition = '';
this.setStyle(morph.to);
if( triggerCallback && morph.callback ) {
morph.callback( this );
}
return this;
}
PB.overwrite(PB.dom, {
/**
* Check if element has class
*/
hasClass: function ( className ) {
return (new RegExp( "(^|\\s)"+className+"($|\\s)" )).test(this.node.className);
},
/**
* Add class to element
*/
addClass: function ( classNames ) {
classNames = classNames.split(' ')
for( var i = 0; i < classNames.length; i++ ) {
if( this.hasClass(classNames[i]) ) {
continue;
}
this.node.className += (this.node.className ? ' ' : '')+classNames[i];
}
return this;
},
/**
* Remove class from element
*/
removeClass: function ( classNames ) {
var node = this.node,
classes = node.className,
className;
classNames = classNames.split(' ')
for( var i = 0; i < classNames.length; i++ ) {
className = classNames[i];
classes = classes.replace( new RegExp( "(^|\\s)"+className+"($|\\s)" ), ' ' );
classes = classes.trim();
}
if( classes === '' ) {
node.className = null;
} else {
node.className = classes;
}
return this;
},
/**
*
*/
show: function () {
this.node.style.display = this.get('css-display') || 'block';
return this;
},
hide: function () {
var display = this.getStyle('display');
if( display === 'none' ) {
return this;
}
this.set('css-display', display);
this.node.style.display = 'none';
return this;
},
isVisible: function () {
return this.getStyle('display') !== 'none' && this.getStyle('opacity') > 0;
},
getXY: function ( fromBody ) {
var node = this.node,
x = 0,
y = 0;
while( node ) {
x += node.offsetLeft;
y += node.offsetTop;
node = node.offsetParent;
if( !node || (!fromBody && Dom.get(node).getStyle('position') !== 'static') ) {
break;
}
}
return {
left: x,
top: y
};
},
getScroll: function () {
var node = this.node,
scroll = {};
if( node.nodeType === 9 || node === window ) {
scroll.left = Math.max( docElement.scrollLeft, body.scrollLeft );
scroll.top = Math.max( docElement.scrollTop, body.scrollTop );
} else {
scroll.left = node.scrollLeft;
scroll.top = node.scrollTop;
}
return scroll;
},
width: function ( value ) {
if( value !== undefined ) {
return this.setStyle('width', value);
}
var node = this.node;
if( node === window ) {
return window.innerWidth || docElement.offsetWidth;
} else if ( node.nodeType === 9 ) {
return Math.max(docElement.clientWidth, body.scrollWidth, docElement.offsetWidth);
}
if( value = this.getStyle('width', true) && typeof value === 'number' ) {
return value;
}
if( !this.isVisible() ) {
this.show();
value = node.offsetWidth;
this.hide()
} else {
value = node.offsetWidth;
}
return value;
},
innerWidth: function () {
return this.width() + (this.getStyle('paddingLeft', true) || 0) + (this.getStyle('paddingRight', true) || 0);
},
outerWidth: function () {
return this.width() + (this.getStyle('borderLeftWidth', true) || 0) + (this.getStyle('borderRightWidth', true) || 0);
},
scrollWidth: function () {
return this.node.scrollWidth;
},
height: function ( value ) {
if( value !== undefined ) {
return this.setStyle('height', value);
}
var node = this.node;
if( node === window ) {
return window.innerHeight || docElement.offsetHeight;
} else if ( node.nodeType === 9 ) {
return Math.max(docElement.clientHeight, body.scrollHeight, docElement.offsetHeight);
}
if( value = this.getStyle('height', true) && typeof value === 'number' ) {
return value;
}
if( !this.isVisible() ) {
this.show();
value = node.offsetHeight;
this.hide()
} else {
value = node.offsetHeight;
}
return value;
},
innerHeight: function () {
return this.height() + (this.getStyle('paddingTop', true) || 0) + (this.getStyle('paddingBottom', true) || 0);
},
outerHeight: function () {
return this.height() + (this.getStyle('borderTopWidth', true) || 0) + (this.getStyle('borderBottomWidth', true) || 0);
},
scrollHeight: function () {
return this.node.scrollHeight;
}
});
PB.each({ left: 'Left', top: 'Top' }, function ( lower, upper ) {
PB.dom['scroll'+upper] = function ( value ) {
if( value !== undefined ) {
var node = this.node;
if( node === win || node === doc || node === docElement ) {
window.scrollTo( lower === 'left' ? value : this.scrollLeft(), lower === 'top' ? value : this.scrollTop() );
} else {
node['scroll'+upper] = value;
}
return this;
}
return this.getScroll()[lower];
}
PB.dom[lower] = function ( fromBody ) {
if( fromBody !== undefined && fromBody !== true ) {
this.setStyle(lower, fromBody);
return this;
}
return this.getXY(fromBody)[lower];
}
});
PB.overwrite(PB.dom, {
/**
* Retrieve parent node
*
* @return
*/
parent: function () {
return Dom.get( this.node.parentNode );
},
/**
* Retrieve the first child that is an ELEMENT_NODE
*
* @return
*/
first: function () {
var first = this.node.firstChild;
while( first && first.nodeType !== 1 ) {
first = first.nextSibling;
}
return first === null
? null
: Dom.get(first);
},
/**
* Retrieve the last child that is an ELEMENT_NODE
*
* @return
*/
last: function () {
var last = this.node.lastChild;
while( last && last.nodeType !== 1 ) {
last = last.previousSibling;
}
return last === null
? null
: Dom.get(last);
},
/**
* Retrieve the next sibling that is an ELEMENT_NODE
*
* @return
*/
next: function () {
var sibling = this.node;
while( sibling = sibling.nextSibling ) {
if( sibling.nodeType === 1 ) {
return Dom.get( sibling );
}
}
return null;
},
/**
* Retrieve the previous sibling that is an ELEMENT_NODE
*
* @return
*/
prev: function () {
var sibling = this.node;
while( sibling = sibling.previousSibling ) {
if( sibling.nodeType === 1 ) {
return Dom.get( sibling );
}
}
return null;
},
/**
* Retrieve childs of the current node
*
* @return
*/
childs: function () {
var childs = new PB.Collection, // new Collection
node = this.first();
if( node === null ) {
return childs;
}
do {
childs.push( node );
} while ( node = node.next() );
return childs;
},
/**
* Tries to find a matching parent that matches the given expression
*
* @param string CSS expression
* @param number max parents to crawl up
* @return
*/
closest: function ( expression, maxDepth ) {
var node = this;
maxDepth = maxDepth || 50;
do {
if( qwery.is( node.node, expression ) ) {
return node;
}
if( !--maxDepth ) {
break;
}
} while ( node = node.parent() );
return null;
},
/**
* Current node is a descendant of the given element?
*
* @param string/node/PBDom
* @return boolean
*/
descendantOf: function ( element ) {
element = Dom.get(element);
return element
? element.contains( this )
: false;
},
/**
* Current node contains the given element?
*
* @param string/node/PBDom
* @return boolean
*/
contains: function ( element ) {
var node = this.node;
element = Dom.get(element).node;
return node.contains
? node !== element && node.contains( element )
: !!(node.compareDocumentPosition( element ) & 16);
},
/**
* Find elements trough CSS expression, searching from within
* the current element.
*
* @param string
* @return
*/
find: function ( expression ) {
return new PB.Collection( qwery( expression, this.node ).map(Dom.get) );
}
});
var tableInnerHTMLbuggie = false;
try {
doc.createElement('table').innerHTML = '
';
} catch (e) {
tableInnerHTMLbuggie = true;
}
PB.overwrite(PB.dom, {
/**
* Append element to self
*/
append: function ( element ) {
if( (element = Dom.get(element)) === null ) {
return null;
}
this.node.appendChild( element.node );
return this;
},
/**
* Append self to target element
*/
appendTo: function ( target ) {
if( (target = Dom.get(target)) === null ) {
return null;
}
target.append( this );
return this;
},
/**
* Insert self before target element
*/
insertBefore: function ( target ) {
if( (target = Dom.get(target)) === null ) {
return null;
}
target.node.parentNode.insertBefore( this.node, target.node );
return this;
},
/**
* Insert self after target element
*/
insertAfter: function ( target ) {
if( (target = Dom.get(target)) === null ) {
return null;
}
var next = target.next();
if( next === null ) {
target.parent().node.appendChild( this.node );
} else {
target.parent().node.insertBefore( this.node, next.node );
}
return this;
},
insertFirst: function ( target ) {
if( (target = Dom.get(target)) === null ) {
return null;
}
if( target.first() === null ) {
target.append( this );
} else {
this.insertBefore( target.first() );
}
return this;
},
replace: function ( target ) {
if( (target = Dom.get(target)) === null ) {
return null;
}
this.insertBefore( target );
target.remove();
return this;
},
clone: function ( deep ) {
var clone = this.node.cloneNode( deep ),
childs = clone.getElementsByTagName('*'),
length = childs,
i = 0;
clone.removeAttribute('id');
clone.removeAttribute('__PBJS_ID__');
for ( ; i < length; i++) {
childs[i].removeAttribute('id');
childs[i].removeAttribute('__PBJS_ID__');
}
this._flagged_ = true;
return Dom.get(clone);
},
remove: function () {
var node = this.node,
pbid = node.__PBJS_ID__;
if( this.get('__morph') ) {
this.stop(false, false);
}
_Event.purge( pbid );
if( node.parentNode ) {
node.parentNode.removeChild( node );
}
this.node = this.storage = node = null;
delete PB.cache[pbid];
},
empty: function () {
this.html('');
return this;
},
/**
* @todo script tags with src tag set should be appended to document
*/
html: function ( html, evalScripts ) {
if( html === undefined ) {
return this.node.innerHTML;
}
if( tableInnerHTMLbuggie ) {
if( /^<(tbody|tr)>/i.test( html ) ) {
var table = Dom.create('');
this.empty();
(table.first().nodeName === 'TBODY' ? table.first() : table)
.childs().invoke('appendTo', this);
return this;
}
if ( /^<(td)>/i.test( html ) ) {
var table = Dom.create('');
this.empty();
table.find('td').invoke('appendTo', this);
return this;
}
if( /(TBODY|TR|TD|TH|TABLE)/.test(this.nodeName) ) {
this.childs().invoke('remove');
return this;
}
}
this.node.innerHTML = html;
if( evalScripts ) {
html = html.replace(/
zaterdag 21 april 2012
serif;
font-size: 11px;
}
.pbplayer-wrapper .pbplayer-skin {
border-width: 1px;
border-style: solid;
border-color: #ffffff #4d7fc0 #4d7fc0 #ffffff;
padding-top: 1px;
background: #ffffff;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin {
min-height: 24px;
height: auto !important;
height: 24px;
border-width: 1px;
border-style: solid;
border-color: #ffffff #86abdf #86abdf #ffffff;
background: #93b6df;
background: -moz-linear-gradient(100% 100% 90deg, #93b6df, #f8fafb);
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#93b6df), to(#f8fafb));
filter:progid:DXImageTransform.Microsoft.Gradient(endColorstr='#93b6df', startColorstr='#f8fafb', gradientType='0');
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell {
min-height: 24px;
height: auto !important;
height: 24px;
padding-bottom: 10px;
}
/*/* pbplayer-player/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker {
position: relative;
bottom: -12px;
margin-left: 45px;
margin-right: 160px;
}
/*/* pbplayer-button/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-button {
overflow: hidden;
position: absolute;
top: -4px;
left: -33px;
display: block;
padding: 0;
border: none;
cursor: pointer;
outline: none;
// background: url('images/sprite-pbplayer-controls.png') repeat-x;
background: url(/gx/ZghylytIgbE.png) repeat-x;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-play {
width: 14px;
height: 17px;
background-position: 0 0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-pause {
width: 16px;
height: 17px;
background-position: -14px 0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-control-button {
top: -5px;
left: 0%;
width: 18px;
height: 19px;
margin-left: -9px;
z-index: 4;
background-position: -70px 0;
}
/*/* pbplayer-volumn-control/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control {
overflow: visible;
position: absolute;
top: -4px;
right: -125px;
left: auto;
width: 8px;
height: 17px;
z-index: 5;
background-position: -30px 0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn0,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn1,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn2,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn3 {
overflow: hidden;
position: absolute;
top: 0;
left: 9px;
display: block;
width: 10px;
height: 17px;
border: none;
text-indent: -9999px;
// background: url('images/sprite-pbplayer-controls.png') repeat-x;
background: url(/gx/ZghylytIgbE.png) repeat-x;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn3 { background-position: -38px 0; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn2 { background-position: -48px 0; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn1 { background-position: -58px 0; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-control .pbplayer-volumn0 { background: none; }
/* pbplayer-volumn-slider */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-slider {
position: absolute;
bottom: 7px;
_bottom: 42px;
left: auto;
right: -133px;
_right: 18px;
width: 5px;
height: 60px;
padding: 6px 4px;
border: 1px solid #a7aec0;
display: none;
-moz-box-shadow: 0px 1px 1px #999;
-webkit-box-shadow: 0px 1px 1px #999;
-o-box-shadow: 0px 1px 1px #999;
box-shadow: 0px 1px 1px #999;
background: -moz-linear-gradient(100% 100% 90deg, #93b6df, #f8fafb);
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#93b6df), to(#f8fafb));
filter:progid:DXImageTransform.Microsoft.Gradient(endColorstr='#93b6df', startColorstr='#f8fafb', gradientType='0');
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-slider .pbplayer-volumn-slider-range {
position: relative;
width: 3px;
height: 60px;
border: 1px solid #a7aec0;
background: #ffffff;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
-o-border-radius: 2px;
border-radius: 2px;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-slider .pbplayer-volumn-slider-range .pbplayer-volumn-slider-bar {
position: absolute;
bottom: 0;
width: 100%;
height: 30%;
background: #1964B0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-volumn-slider .pbplayer-volumn-slider-range .pbplayer-volumn-slider-handle {
overflow: hidden;
position: absolute;
right: 0;
bottom: 30%;
display: block;
width: 9px;
height: 5px;
margin-bottom: -2px;
margin-right: -4px;
_margin-right: -5px;
padding: 0;
border: 1px solid #a7aec0;
cursor: pointer;
background: #e3e3e3;
-moz-border-radius: 2px;
-webkit-border-radius: 2px;
-o-border-radius: 2px;
border-radius: 2px;
background: -moz-linear-gradient(100% 100% 90deg, #ffffff, #f2f2f2);
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#ffffff), to(#f2f2f2));
filter:progid:DXImageTransform.Microsoft.Gradient(endColorstr='#ffffff', startColorstr='#f2f2f2', gradientType='0');
}
/* pbplayer-playing-stream */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-playing-stream {
margin-left: 45px;
margin-right: 54px;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-playing-stream .pbplayer-volumn-control {
right: -27px;
_right: 26px;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-playing-stream .pbplayer-volumn-slider {
right: -36px;
_right: 18px;
}
/*x pbplayer-bar/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-stream {
position: absolute;
left: 0;
right: 0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar .pbplayer-bar-skin,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer .pbplayer-bar-skin,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress .pbplayer-bar-skin,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-stream .pbplayer-bar-skin {
overflow: hidden;
background: #8a8a8a;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
border-bottom: 1px solid #ffffff;
// background: url('images/sprite-pbplayer-bar.gif') repeat-x 0 0;
background: url(/gx/ZghylytIcbE.gif) repeat-x 0 0;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar .pbplayer-bar-skin .pbplayer-bar-inner,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer .pbplayer-bar-skin .pbplayer-bar-inner,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress .pbplayer-bar-skin .pbplayer-bar-inner,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-stream .pbplayer-bar-skin .pbplayer-bar-inner {
overflow: hidden;
height: 8px;
border-left: 1px solid #454545;
border-bottom: 1px solid #a7a6c0;
border-right: 1px solid transparent;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
-o-border-radius: 4px;
border-radius: 4px;
/* -moz-box-shadow: inset 0px 1px 4px #444;
-webkit-box-shadow: inset 0px 1px 4px #444;
-o-box-shadow: inset 0px 1px 4px #444;
box-shadow: inset 0px 1px 4px #444;
*/}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar { z-index: 1; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer { z-index: 2; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress { z-index: 3; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-stream { z-index: 3; }
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-stream .pbplayer-bar-skin {
// background: url('images/pbplayer-bar-stream-animated.gif') repeat-x;
background: url(/gx/ZghylytIebE.gif) repeat-x;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar .pbplayer-bar-skin {
background: #ffffff;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer .pbplayer-bar-skin {
background: #93b6df;
background: -moz-linear-gradient(top, #93b6df 0%, #fafcfe 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#93b6df), color-stop(100%,#fafcfe));
background: -webkit-linear-gradient(top, #93b6df 0%, #fafcfe 100%);
background: -o-linear-gradient(top, #93b6df 0%, #fafcfe 100%);
background: -ms-linear-gradient(top, #93b6df 0%, #fafcfe 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#93b6df', endColorstr='#fafcfe',GradientType=0 );
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress .pbplayer-bar-skin {
background: #1964b0;
background: -moz-linear-gradient(top, #1964b0 0%, #08080f 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1964b0), color-stop(100%,#08080f));
background: -webkit-linear-gradient(top, #1964b0 0%, #08080f 100%);
background: -o-linear-gradient(top, #1964b0 0%, #08080f 100%);
background: -ms-linear-gradient(top, #1964b0 0%, #08080f 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1964b0', endColorstr='#08080f',GradientType=0 );
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-buffer .pbplayer-bar-skin,
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-bar-progress .pbplayer-bar-skin {
border-top: none;
border-right: none;
border-bottom: none;
border-left: none;
-moz-box-shadow: none;
-webkit-box-shadow: none;
-o-box-shadow: none;
box-shadow: none;
}
/*/* pbplayer-details/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-details {
overflow: hidden;
padding-top: 6px;
margin-left: 12px;
margin-right: 12px;
font-size: 13px;
font-weight: bold;
color: #222;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-details p {
margin: 0;
padding-right: 20px;
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-play-icon {
position: relative;
display: inline-block;
padding: 0;
border: none;
cursor: pointer;
background: url('images/sprite-pbplayer-controls.png') no-repeat;
background-position: -90px 2px;
*background-position: -90px 4px;
width: 18px;
height: 19px;
margin-left: 6px;
z-index: 4;
}
/*/* pbplayer-time/* */
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-time {
position: absolute;
top: 0;
*top: -2px;
left: auto;
right: -135px;
width: 120px;
line-height: 11px;
text-align: left;
color: #494949;
font-family: 'Helvetica';
}
.pbplayer-wrapper .pbplayer-skin .pbplayer-inner-skin .pbplayer-seeker-shell .pbplayer-seeker .pbplayer-time span {
display: inline;
height: auto;
border: none;
vertical-align: top;
line-height: 11px;
}
/*/* pbplayer-wrapper .pbplayer-playlist/* */
.pbplayer-wrapper .pbplayer-playlist {
border: 1px solid #a3a3a3;
border-top: none;
border-bottom: none;
font-size: 13px;
font-family: 'Helvetica';
font-weight: bold;
color: #222;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul {
margin: 0;
padding: 0;
list-style-type: none;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul li {
overflow: hidden;
position: relative;
display: block;
margin-bottom:0;
border-top: 1px solid #ffffff;
border-bottom: 1px solid #d9d9d9;
background: #ffffff url('images/sprite-pbplayer-bar.gif') repeat-x 0 -24px;
background: -moz-linear-gradient(100% 100% 90deg, #ffffff, #f2f2f2);
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#ffffff), to(#f2f2f2));
filter:progid:DXImageTransform.Microsoft.Gradient(endColorstr='#ffffff', startColorstr='#f2f2f2', gradientType='0');
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul li:hover {
_background: #f8f8f8 url('images/pbplayer-bar-hover.png') repeat-x 0 0;
background: -moz-linear-gradient(100% 100% 90deg, #f2f2f2, #d9d9d9);
background: -webkit-gradient(linear, 0% 100%, 0% 0%, from(#f2f2f2), to(#d9d9d9));
filter:progid:DXImageTransform.Microsoft.Gradient(endColorstr='#f2f2f2', startColorstr='#d9d9d9', gradientType='0');
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul li a {
overflow: hidden;
display: block;
padding: 8px 35px 8px 10px;
line-height: 18px;
text-decoration: none;
color: #222;
font-weight: normal;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul li a span {
display: inline;
height: auto;
border: none;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul .last {
border-bottom: 1px solid #a3a3a3;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul .pbplayer-playing {
margin-left: 30px;
font-weight: bold;
}
.pbplayer-wrapper .pbplayer-playlist .pbplayer-playlist-skin ul .pbplayer-playing span {
position: absolute;
top: 9px;
_top: 10px;
left: 15px;
display: block;
width: 12px;
height: 14px;
border: none;
background: url('images/sprite-pbplayer-controls.png') no-repeat -103px 0;
}
/*/* Common mockup/* */
/* pbplayer-text-shadow */
.pbplayer-text-shadow {
text-shadow: #fff 0px 1px 0px;
}
/* Embed code takes some px.. */
embed.pbplayer {
position: absolute;
}
> > > > zaterdag 21 april 2012