mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
ENHANCEMENT Updated jquery.metadata from ~v.1.0 to v2.1 (located in sapphire/thirdparty/jquery-metadata
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.4@100846 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
d494c1eec5
commit
ac8e75b2a6
0
thirdparty/jquery-metadata/META.json
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/META.json
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/README
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/README
vendored
Normal file → Executable file
126
thirdparty/jquery-metadata/jquery.metadata.js
vendored
Normal file → Executable file
126
thirdparty/jquery-metadata/jquery.metadata.js
vendored
Normal file → Executable file
@ -7,7 +7,7 @@
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id: jquery.metadata.js 4187 2007-12-16 17:15:27Z joern.zaefferer $
|
||||
* Revision: $Id: jquery.metadata.js 3640 2007-10-11 18:34:38Z pmclanahan $
|
||||
*
|
||||
*/
|
||||
|
||||
@ -15,7 +15,7 @@
|
||||
* Sets the type of metadata to use. Metadata is encoded in JSON, and each property
|
||||
* in the JSON will become a property of the element itself.
|
||||
*
|
||||
* There are three supported types of metadata storage:
|
||||
* There are four supported types of metadata storage:
|
||||
*
|
||||
* attr: Inside an attribute. The name parameter indicates *which* attribute.
|
||||
*
|
||||
@ -23,6 +23,7 @@
|
||||
*
|
||||
* elem: Inside a child element (e.g. a script tag). The
|
||||
* name parameter indicates *which* element.
|
||||
* html5: Values are stored in data-* attributes.
|
||||
*
|
||||
* The metadata for an element is loaded the first time the element is accessed via jQuery.
|
||||
*
|
||||
@ -46,6 +47,11 @@
|
||||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
|
||||
* @desc Reads metadata from a nested script element
|
||||
*
|
||||
* @example <p id="one" class="some_class" data-item_id="1" data-item_label="Label">This is a p</p>
|
||||
* @before $.metadata.setType("html5")
|
||||
* @after $("#one").metadata().item_id == 1; $("#one").metadata().item_label == "Label"
|
||||
* @desc Reads metadata from a series of data-* attributes
|
||||
*
|
||||
* @param String type The encoding type
|
||||
* @param String name The name of the attribute to be used to get metadata (optional)
|
||||
* @cat Plugins/Metadata
|
||||
@ -57,53 +63,73 @@
|
||||
(function($) {
|
||||
|
||||
$.extend({
|
||||
metadata : {
|
||||
defaults : {
|
||||
type: 'class',
|
||||
name: 'metadata',
|
||||
cre: /({.*})/,
|
||||
single: 'metadata'
|
||||
},
|
||||
setType: function( type, name ){
|
||||
this.defaults.type = type;
|
||||
this.defaults.name = name;
|
||||
},
|
||||
get: function( elem, opts ){
|
||||
var settings = $.extend({},this.defaults,opts);
|
||||
// check for empty string in single property
|
||||
if ( !settings.single.length ) settings.single = 'metadata';
|
||||
|
||||
var data = $.data(elem, settings.single);
|
||||
// returned cached data if it already exists
|
||||
if ( data ) return data;
|
||||
|
||||
data = "{}";
|
||||
|
||||
if ( settings.type == "class" ) {
|
||||
var m = settings.cre.exec( elem.className );
|
||||
if ( m )
|
||||
data = m[1];
|
||||
} else if ( settings.type == "elem" ) {
|
||||
if( !elem.getElementsByTagName )
|
||||
return undefined;
|
||||
var e = elem.getElementsByTagName(settings.name);
|
||||
if ( e.length )
|
||||
data = $.trim(e[0].innerHTML);
|
||||
} else if ( elem.getAttribute != undefined ) {
|
||||
var attr = elem.getAttribute( settings.name );
|
||||
if ( attr )
|
||||
data = attr;
|
||||
}
|
||||
|
||||
if ( data.indexOf( '{' ) <0 )
|
||||
data = "{" + data + "}";
|
||||
|
||||
data = eval("(" + data + ")");
|
||||
|
||||
$.data( elem, settings.single, data );
|
||||
return data;
|
||||
}
|
||||
}
|
||||
metadata : {
|
||||
defaults : {
|
||||
type: 'class',
|
||||
name: 'metadata',
|
||||
cre: /({.*})/,
|
||||
single: 'metadata'
|
||||
},
|
||||
setType: function( type, name ){
|
||||
this.defaults.type = type;
|
||||
this.defaults.name = name;
|
||||
},
|
||||
get: function( elem, opts ){
|
||||
var settings = $.extend({},this.defaults,opts);
|
||||
// check for empty string in single property
|
||||
if ( !settings.single.length ) settings.single = 'metadata';
|
||||
|
||||
var data = $.data(elem, settings.single);
|
||||
// returned cached data if it already exists
|
||||
if ( data ) return data;
|
||||
|
||||
data = "{}";
|
||||
|
||||
var getData = function(data) {
|
||||
if(typeof data != "string") return data;
|
||||
|
||||
if( data.indexOf('{') < 0 ) {
|
||||
data = eval("(" + data + ")");
|
||||
}
|
||||
}
|
||||
|
||||
var getObject = function(data) {
|
||||
if(typeof data != "string") return data;
|
||||
|
||||
data = eval("(" + data + ")");
|
||||
return data;
|
||||
}
|
||||
|
||||
if ( settings.type == "html5" ) {
|
||||
var object = {};
|
||||
$( elem.attributes ).each(function() {
|
||||
var name = this.nodeName;
|
||||
if(name.match(/^data-/)) name = name.replace(/^data-/, '');
|
||||
else return true;
|
||||
object[name] = getObject(this.nodeValue);
|
||||
});
|
||||
} else {
|
||||
if ( settings.type == "class" ) {
|
||||
var m = settings.cre.exec( elem.className );
|
||||
if ( m )
|
||||
data = m[1];
|
||||
} else if ( settings.type == "elem" ) {
|
||||
if( !elem.getElementsByTagName ) return;
|
||||
var e = elem.getElementsByTagName(settings.name);
|
||||
if ( e.length )
|
||||
data = $.trim(e[0].innerHTML);
|
||||
} else if ( elem.getAttribute != undefined ) {
|
||||
var attr = elem.getAttribute( settings.name );
|
||||
if ( attr )
|
||||
data = attr;
|
||||
}
|
||||
object = getObject(data.indexOf("{") < 0 ? "{" + data + "}" : data);
|
||||
}
|
||||
|
||||
$.data( elem, settings.single, object );
|
||||
return object;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
@ -116,7 +142,7 @@ $.extend({
|
||||
* @cat Plugins/Metadata
|
||||
*/
|
||||
$.fn.metadata = function( opts ){
|
||||
return $.metadata.get( this[0], opts );
|
||||
return $.metadata.get( this[0], opts );
|
||||
};
|
||||
|
||||
})(jQuery);
|
@ -1,13 +0,0 @@
|
||||
/*
|
||||
* Metadata - jQuery plugin for parsing metadata from elements
|
||||
*
|
||||
* Copyright (c) 2006 John Resig, Yehuda Katz, J<EFBFBD>örn Zaefferer, Paul McLanahan
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id: jquery.metadata.js 3620 2007-10-10 20:55:38Z pmclanahan $
|
||||
*
|
||||
*/
|
||||
(function($){$.extend({metadata:{defaults:{type:'class',name:'metadata',cre:/({.*})/,single:'metadata'},setType:function(type,name){this.defaults.type=type;this.defaults.name=name;},get:function(elem,opts){var settings=$.extend({},this.defaults,opts);if(!settings.single.length)settings.single='metadata';var data=$.data(elem,settings.single);if(data)return data;data="{}";if(settings.type=="class"){var m=settings.cre.exec(elem.className);if(m)data=m[1];}else if(settings.type=="elem"){if(!elem.getElementsByTagName)return;var e=elem.getElementsByTagName(settings.name);if(e.length)data=$.trim(e[0].innerHTML);}else if(elem.getAttribute!=undefined){var attr=elem.getAttribute(settings.name);if(attr)data=attr;}if(data.indexOf('{')<0)data="{"+data+"}";data=eval("("+data+")");$.data(elem,settings.single,data);return data;}}});$.fn.metadata=function(opts){return $.metadata.get(this[0],opts);};})(jQuery);
|
@ -1,13 +0,0 @@
|
||||
/*
|
||||
* Metadata - jQuery plugin for parsing metadata from elements
|
||||
*
|
||||
* Copyright (c) 2006 John Resig, Yehuda Katz, J<EFBFBD>örn Zaefferer, Paul McLanahan
|
||||
*
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
*
|
||||
* Revision: $Id: jquery.metadata.js 3620 2007-10-10 20:55:38Z pmclanahan $
|
||||
*
|
||||
*/
|
||||
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(9($){$.r({3:{7:{8:\'l\',h:\'3\',q:/({.*})/,4:\'3\'},w:9(a,b){g.7.8=a;g.7.h=b},j:9(b,c){5 d=$.r({},g.7,c);2(!d.4.o)d.4=\'3\';5 a=$.n(b,d.4);2(a)6 a;a="{}";2(d.8=="l"){5 m=d.q.v(b.u);2(m)a=m[1]}k 2(d.8=="t"){2(!b.i)6;5 e=b.i(d.h);2(e.o)a=$.s(e[0].C)}k 2(b.p!=A){5 f=b.p(d.h);2(f)a=f}2(a.z(\'{\')<0)a="{"+a+"}";a=y("("+a+")");$.n(b,d.4,a);6 a}}});$.x.3=9(a){6 $.3.j(g[0],a)}})(B);',39,39,'||if|metadata|single|var|return|defaults|type|function|||||||this|name|getElementsByTagName|get|else|class||data|length|getAttribute|cre|extend|trim|elem|className|exec|setType|fn|eval|indexOf|undefined|jQuery|innerHTML'.split('|'),0,{}))
|
76
thirdparty/jquery-metadata/test/index.html
vendored
Normal file → Executable file
76
thirdparty/jquery-metadata/test/index.html
vendored
Normal file → Executable file
@ -6,47 +6,53 @@
|
||||
<script type="text/javascript" src="testrunner.js"></script>
|
||||
<!-- include metadata plugin two times to make sure that doesn't hurt anyone -->
|
||||
<script type="text/javascript" src="../jquery.metadata.js"></script>
|
||||
<script type="text/javascript" src="../jquery.metadata.js"></script>
|
||||
<script type="text/javascript" src="test.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1>jQuery - Metadata Test Suite</h1>
|
||||
<div id="main" style="display: none">
|
||||
<ol id="one">
|
||||
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
|
||||
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
|
||||
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<ol id="two">
|
||||
<li class="test {foo:'bar',bar:'baz',arr:[1,2]} test2">Some stuff</li>
|
||||
<li class="{test:'bar',bar:'baz'} test test2">Some stuff</li>
|
||||
<li class="test test2 {zoooo:'bar',bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="some styles {number:true,stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<ol id="three">
|
||||
<li class="test test2"><script type="data">foo:'bar', bar:'baz', arr:[1,2]</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{test:'bar', bar:'baz'}</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{zoooo:'bar', bar:{test:'baz'}}</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{number:true, stuff:[2,8]}</script>Some stuff</li>
|
||||
</ol>
|
||||
<script type="data">test("execute script with type='data'", function() { ok( false, "Script tag with type='data' was executed!"); });</script>
|
||||
|
||||
<ol id="four">
|
||||
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
|
||||
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
|
||||
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<select class="{required:true}" name="meal" id="meal">
|
||||
<option value="">Please select...</option>
|
||||
<option value="1">Food</option>
|
||||
<option value="2">Milk</option>
|
||||
</select>
|
||||
<ol id="one">
|
||||
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
|
||||
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
|
||||
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<ol id="two">
|
||||
<li class="test {foo:'bar',bar:'baz',arr:[1,2]} test2">Some stuff</li>
|
||||
<li class="{test:'bar',bar:'baz'} test test2">Some stuff</li>
|
||||
<li class="test test2 {zoooo:'bar',bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="some styles {number:true,stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<ol id="three">
|
||||
<li class="test test2"><script type="data">foo:'bar', bar:'baz', arr:[1,2]</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{test:'bar', bar:'baz'}</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{zoooo:'bar', bar:{test:'baz'}}</script>Some stuff</li>
|
||||
<li class="test test2"><script type="data">{number:true, stuff:[2,8]}</script>Some stuff</li>
|
||||
</ol>
|
||||
<script type="data">test("execute script with type='data'", function() { ok( false, "Script tag with type='data' was executed!"); });</script>
|
||||
|
||||
<ol id="four">
|
||||
<li class="test test2" data="foo:'bar', bar:'baz', arr:[1,2]">Some stuff</li>
|
||||
<li class="test test2" data="{test:'bar', bar:'baz'}">Some stuff</li>
|
||||
<li class="test test2" data="{zoooo:'bar', bar:{test:'baz'}}">Some stuff</li>
|
||||
<li class="test test2" data="{number:true, stuff:[2,8]}">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<ol id="five">
|
||||
<li class="test test2" data-foo="'bar'" data-bar="'baz'" data-arr="[1,2]">Some stuff</li>
|
||||
<li class="test test2" data-test="'bar'" data-bar="'baz'">Some stuff</li>
|
||||
<li class="test test2" data-zoooo="'bar'" data-bar="{test:'baz'}">Some stuff</li>
|
||||
<li class="test test2" data-number="true" data-stuff="[2,8]">Some stuff</li>
|
||||
</ol>
|
||||
|
||||
<select class="{required:true}" name="meal" id="meal">
|
||||
<option value="">Please select...</option>
|
||||
<option value="1">Food</option>
|
||||
<option value="2">Milk</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<ol id="tests"></ol>
|
||||
|
1042
thirdparty/jquery-metadata/test/jquery.js
vendored
Normal file → Executable file
1042
thirdparty/jquery-metadata/test/jquery.js
vendored
Normal file → Executable file
@ -1,27 +1,29 @@
|
||||
(function(){
|
||||
/*
|
||||
* jQuery 1.2.2b2 - New Wave Javascript
|
||||
* jQuery @VERSION - New Wave Javascript
|
||||
*
|
||||
* Copyright (c) 2007 John Resig (jquery.com)
|
||||
* Dual licensed under the MIT (MIT-LICENSE.txt)
|
||||
* and GPL (GPL-LICENSE.txt) licenses.
|
||||
*
|
||||
* $Date: 2007-12-20 14:36:56 +0100 (Don, 20 Dez 2007) $
|
||||
* $Rev: 4251 $
|
||||
* $Date: 2007-10-01 22:15:20 +0200 (Mo, 01 Okt 2007) $
|
||||
* $Rev: 3501 $
|
||||
*/
|
||||
|
||||
// Map over jQuery in case of overwrite
|
||||
if ( window.jQuery )
|
||||
var _jQuery = window.jQuery;
|
||||
if ( typeof jQuery != "undefined" )
|
||||
var _jQuery = jQuery;
|
||||
|
||||
var jQuery = window.jQuery = function( selector, context ) {
|
||||
// The jQuery object is actually just the init constructor 'enhanced'
|
||||
return new jQuery.prototype.init( selector, context );
|
||||
// If the context is a namespace object, return a new object
|
||||
return this instanceof jQuery ?
|
||||
this.init( selector, context ) :
|
||||
new jQuery( selector, context );
|
||||
};
|
||||
|
||||
// Map over the $ in case of overwrite
|
||||
if ( window.$ )
|
||||
var _$ = window.$;
|
||||
if ( typeof $ != "undefined" )
|
||||
var _$ = $;
|
||||
|
||||
// Map the jQuery namespace to the '$' one
|
||||
window.$ = jQuery;
|
||||
@ -30,22 +32,13 @@ window.$ = jQuery;
|
||||
// (both of which we optimize for)
|
||||
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;
|
||||
|
||||
// Is it a simple selector
|
||||
var isSimple = /^.[^:#\[\.]*$/;
|
||||
|
||||
jQuery.fn = jQuery.prototype = {
|
||||
init: function( selector, context ) {
|
||||
// Make sure that a selection was provided
|
||||
selector = selector || document;
|
||||
|
||||
// Handle $(DOMElement)
|
||||
if ( selector.nodeType ) {
|
||||
this[0] = selector;
|
||||
this.length = 1;
|
||||
return this;
|
||||
|
||||
// Handle HTML strings
|
||||
} else if ( typeof selector == "string" ) {
|
||||
if ( typeof selector == "string" ) {
|
||||
// Are we dealing with HTML string or an ID?
|
||||
var match = quickExpr.exec( selector );
|
||||
|
||||
@ -196,15 +189,12 @@ jQuery.fn = jQuery.prototype = {
|
||||
},
|
||||
|
||||
css: function( key, value ) {
|
||||
// ignore negative width and height values
|
||||
if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 )
|
||||
value = undefined;
|
||||
return this.attr( key, value, "curCSS" );
|
||||
},
|
||||
|
||||
text: function( text ) {
|
||||
if ( typeof text != "object" && text != null )
|
||||
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
|
||||
return this.empty().append( document.createTextNode( text ) );
|
||||
|
||||
var ret = "";
|
||||
|
||||
@ -253,15 +243,13 @@ jQuery.fn = jQuery.prototype = {
|
||||
|
||||
append: function() {
|
||||
return this.domManip(arguments, true, false, function(elem){
|
||||
if (this.nodeType == 1)
|
||||
this.appendChild( elem );
|
||||
this.appendChild( elem );
|
||||
});
|
||||
},
|
||||
|
||||
prepend: function() {
|
||||
return this.domManip(arguments, true, true, function(elem){
|
||||
if (this.nodeType == 1)
|
||||
this.insertBefore( elem, this.firstChild );
|
||||
this.insertBefore( elem, this.firstChild );
|
||||
});
|
||||
},
|
||||
|
||||
@ -294,23 +282,9 @@ jQuery.fn = jQuery.prototype = {
|
||||
clone: function( events ) {
|
||||
// Do the clone
|
||||
var ret = this.map(function(){
|
||||
if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) {
|
||||
// IE copies events bound via attachEvent when
|
||||
// using cloneNode. Calling detachEvent on the
|
||||
// clone will also remove the events from the orignal
|
||||
// In order to get around this, we use innerHTML.
|
||||
// Unfortunately, this means some modifications to
|
||||
// attributes in IE that are actually only stored
|
||||
// as properties will not be copied (such as the
|
||||
// the name attribute on an input).
|
||||
var clone = this.cloneNode(true),
|
||||
container = document.createElement("div"),
|
||||
container2 = document.createElement("div");
|
||||
container.appendChild(clone);
|
||||
container2.innerHTML = container.innerHTML;
|
||||
return container2.firstChild;
|
||||
} else
|
||||
return this.cloneNode(true);
|
||||
return this.outerHTML ?
|
||||
jQuery( this.outerHTML )[0] :
|
||||
this.cloneNode( true );
|
||||
});
|
||||
|
||||
// Need to set the expando to null on the cloned set if it exists
|
||||
@ -346,26 +320,19 @@ jQuery.fn = jQuery.prototype = {
|
||||
},
|
||||
|
||||
not: function( selector ) {
|
||||
if ( selector.constructor == String )
|
||||
// test special case where just one selector is passed in
|
||||
if ( isSimple.test( selector ) )
|
||||
return this.pushStack( jQuery.multiFilter( selector, this, true ) );
|
||||
else
|
||||
selector = jQuery.multiFilter( selector, this );
|
||||
return this.pushStack(
|
||||
selector.constructor == String &&
|
||||
jQuery.multiFilter( selector, this, true ) ||
|
||||
|
||||
var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType;
|
||||
return this.filter(function() {
|
||||
return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector;
|
||||
});
|
||||
jQuery.grep(this, function(elem) {
|
||||
return selector.constructor == Array || selector.jquery ?
|
||||
jQuery.inArray( elem, selector ) < 0 :
|
||||
elem != selector;
|
||||
}) );
|
||||
},
|
||||
|
||||
add: function( selector ) {
|
||||
return !selector ? this : this.pushStack( jQuery.merge(
|
||||
this.get(),
|
||||
selector.constructor == String ?
|
||||
jQuery( selector ).get() :
|
||||
selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ?
|
||||
selector : [selector] ) );
|
||||
return this.pushStack( jQuery.merge( this.get(), jQuery( selector ) ) );
|
||||
},
|
||||
|
||||
is: function( selector ) {
|
||||
@ -383,7 +350,7 @@ jQuery.fn = jQuery.prototype = {
|
||||
|
||||
if ( this.length ) {
|
||||
var elem = this[0];
|
||||
|
||||
|
||||
// We need to handle select boxes special
|
||||
if ( jQuery.nodeName( elem, "select" ) ) {
|
||||
var index = elem.selectedIndex,
|
||||
@ -416,37 +383,32 @@ jQuery.fn = jQuery.prototype = {
|
||||
|
||||
// Everything else, we just grab the value
|
||||
} else
|
||||
return (this[0].value || "").replace(/\r/g, "");
|
||||
return this[0].value.replace(/\r/g, "");
|
||||
|
||||
}
|
||||
|
||||
return undefined;
|
||||
}
|
||||
} else
|
||||
return this.each(function(){
|
||||
if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
|
||||
this.checked = (jQuery.inArray(this.value, value) >= 0 ||
|
||||
jQuery.inArray(this.name, value) >= 0);
|
||||
|
||||
return this.each(function(){
|
||||
if ( this.nodeType != 1 )
|
||||
return;
|
||||
else if ( jQuery.nodeName( this, "select" ) ) {
|
||||
var values = value.constructor == Array ?
|
||||
value :
|
||||
[ value ];
|
||||
|
||||
if ( value.constructor == Array && /radio|checkbox/.test( this.type ) )
|
||||
this.checked = (jQuery.inArray(this.value, value) >= 0 ||
|
||||
jQuery.inArray(this.name, value) >= 0);
|
||||
jQuery( "option", this ).each(function(){
|
||||
this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
|
||||
jQuery.inArray( this.text, values ) >= 0);
|
||||
});
|
||||
|
||||
else if ( jQuery.nodeName( this, "select" ) ) {
|
||||
var values = value.constructor == Array ?
|
||||
value :
|
||||
[ value ];
|
||||
if ( !tmp.length )
|
||||
this.selectedIndex = -1;
|
||||
|
||||
jQuery( "option", this ).each(function(){
|
||||
this.selected = (jQuery.inArray( this.value, values ) >= 0 ||
|
||||
jQuery.inArray( this.text, values ) >= 0);
|
||||
});
|
||||
|
||||
if ( !values.length )
|
||||
this.selectedIndex = -1;
|
||||
|
||||
} else
|
||||
this.value = value;
|
||||
});
|
||||
} else
|
||||
this.value = value;
|
||||
});
|
||||
},
|
||||
|
||||
html: function( value ) {
|
||||
@ -493,49 +455,41 @@ jQuery.fn = jQuery.prototype = {
|
||||
var obj = this;
|
||||
|
||||
if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) )
|
||||
obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") );
|
||||
|
||||
var scripts = jQuery( [] );
|
||||
obj = this.getElementsByTagName("tbody")[0] || this.appendChild( document.createElement("tbody") );
|
||||
|
||||
jQuery.each(elems, function(){
|
||||
var elem = clone ?
|
||||
jQuery( this ).clone( true )[0] :
|
||||
this.cloneNode( true ) :
|
||||
this;
|
||||
|
||||
// execute all scripts after the elements have been injected
|
||||
if ( jQuery.nodeName( elem, "script" ) ) {
|
||||
scripts = scripts.add( elem );
|
||||
} else {
|
||||
// Remove any inner scripts for later evaluation
|
||||
if ( elem.nodeType == 1 )
|
||||
scripts = scripts.add( jQuery( "script", elem ).remove() );
|
||||
|
||||
// Inject the elements into the document
|
||||
if ( !evalScript( 0, elem ) )
|
||||
callback.call( obj, elem );
|
||||
}
|
||||
});
|
||||
|
||||
scripts.each( evalScript );
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Give the init function the jQuery prototype for later instantiation
|
||||
jQuery.prototype.init.prototype = jQuery.prototype;
|
||||
|
||||
function evalScript( i, elem ) {
|
||||
if ( elem.src )
|
||||
jQuery.ajax({
|
||||
url: elem.src,
|
||||
async: false,
|
||||
dataType: "script"
|
||||
});
|
||||
var script = jQuery.nodeName( elem, "script" );
|
||||
|
||||
else
|
||||
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
|
||||
if ( script ) {
|
||||
if ( elem.src )
|
||||
jQuery.ajax({
|
||||
url: elem.src,
|
||||
async: false,
|
||||
dataType: "script"
|
||||
});
|
||||
|
||||
if ( elem.parentNode )
|
||||
elem.parentNode.removeChild( elem );
|
||||
else
|
||||
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
|
||||
|
||||
if ( elem.parentNode )
|
||||
elem.parentNode.removeChild( elem );
|
||||
|
||||
} else if ( elem.nodeType == 1 )
|
||||
jQuery( "script", elem ).each( evalScript );
|
||||
|
||||
return script;
|
||||
}
|
||||
|
||||
jQuery.extend = jQuery.fn.extend = function() {
|
||||
@ -546,14 +500,8 @@ jQuery.extend = jQuery.fn.extend = function() {
|
||||
if ( target.constructor == Boolean ) {
|
||||
deep = target;
|
||||
target = arguments[1] || {};
|
||||
// skip the boolean and the target
|
||||
i = 2;
|
||||
}
|
||||
|
||||
// Handle case when target is a string or something (possible in deep copy)
|
||||
if ( typeof target != "object" && typeof target != "function" )
|
||||
target = {};
|
||||
|
||||
// extend jQuery itself if only one argument is passed
|
||||
if ( length == 1 ) {
|
||||
target = this;
|
||||
@ -566,12 +514,12 @@ jQuery.extend = jQuery.fn.extend = function() {
|
||||
// Extend the base object
|
||||
for ( var name in options ) {
|
||||
// Prevent never-ending loop
|
||||
if ( target === options[ name ] )
|
||||
if ( target == options[ name ] )
|
||||
continue;
|
||||
|
||||
// Recurse if we're merging object values
|
||||
if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType )
|
||||
target[ name ] = jQuery.extend( target[ name ], options[ name ] );
|
||||
if ( deep && typeof options[ name ] == "object" && target[ name ] )
|
||||
jQuery.extend( target[ name ], options[ name ] );
|
||||
|
||||
// Don't bring in undefined values
|
||||
else if ( options[ name ] != undefined )
|
||||
@ -612,6 +560,7 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
// Evalulates a script in a global context
|
||||
// Evaluates Async. in Safari 2 :-(
|
||||
globalEval: function( data ) {
|
||||
data = jQuery.trim( data );
|
||||
|
||||
@ -743,19 +692,18 @@ jQuery.extend({
|
||||
// internal only, use addClass("class")
|
||||
add: function( elem, classNames ) {
|
||||
jQuery.each((classNames || "").split(/\s+/), function(i, className){
|
||||
if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) )
|
||||
if ( !jQuery.className.has( elem.className, className ) )
|
||||
elem.className += (elem.className ? " " : "") + className;
|
||||
});
|
||||
},
|
||||
|
||||
// internal only, use removeClass("class")
|
||||
remove: function( elem, classNames ) {
|
||||
if (elem.nodeType == 1)
|
||||
elem.className = classNames != undefined ?
|
||||
jQuery.grep(elem.className.split(/\s+/), function(className){
|
||||
return !jQuery.className.has( classNames, className );
|
||||
}).join(" ") :
|
||||
"";
|
||||
elem.className = classNames != undefined ?
|
||||
jQuery.grep(elem.className.split(/\s+/), function(className){
|
||||
return !jQuery.className.has( classNames, className );
|
||||
}).join(" ") :
|
||||
"";
|
||||
},
|
||||
|
||||
// internal only, use is(".class")
|
||||
@ -766,10 +714,9 @@ jQuery.extend({
|
||||
|
||||
// A method for quickly swapping in/out CSS properties to get correct calculations
|
||||
swap: function( elem, options, callback ) {
|
||||
var old = {};
|
||||
// Remember the old values, and insert the new ones
|
||||
for ( var name in options ) {
|
||||
old[ name ] = elem.style[ name ];
|
||||
elem.style[ "old" + name ] = elem.style[ name ];
|
||||
elem.style[ name ] = options[ name ];
|
||||
}
|
||||
|
||||
@ -777,32 +724,60 @@ jQuery.extend({
|
||||
|
||||
// Revert the old values
|
||||
for ( var name in options )
|
||||
elem.style[ name ] = old[ name ];
|
||||
elem.style[ name ] = elem.style[ "old" + name ];
|
||||
},
|
||||
|
||||
css: function( elem, name, force ) {
|
||||
if ( name == "width" || name == "height" ) {
|
||||
var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ];
|
||||
|
||||
function getWH() {
|
||||
val = name == "width" ? elem.offsetWidth : elem.offsetHeight;
|
||||
var padding = 0, border = 0;
|
||||
jQuery.each( which, function() {
|
||||
padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0;
|
||||
border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0;
|
||||
});
|
||||
val -= Math.round(padding + border);
|
||||
}
|
||||
|
||||
if ( jQuery(elem).is(":visible") )
|
||||
getWH();
|
||||
else
|
||||
jQuery.swap( elem, props, getWH );
|
||||
|
||||
return Math.max(0, val);
|
||||
css: function( elem, name ) {
|
||||
if ( name == "height" || name == "width" ) {
|
||||
var old = {}, height, width;
|
||||
|
||||
// Revert the padding and border widths to get the
|
||||
// correct height/width values
|
||||
jQuery.each([ "Top", "Bottom", "Right", "Left" ], function(){
|
||||
old[ "padding" + this ] = 0;
|
||||
old[ "border" + this + "Width" ] = 0;
|
||||
});
|
||||
|
||||
// Swap out the padding/border values temporarily
|
||||
jQuery.swap( elem, old, function() {
|
||||
|
||||
// If the element is visible, then the calculation is easy
|
||||
if ( jQuery( elem ).is(":visible") ) {
|
||||
height = elem.offsetHeight;
|
||||
width = elem.offsetWidth;
|
||||
|
||||
// Otherwise, we need to flip out more values
|
||||
} else {
|
||||
elem = jQuery( elem.cloneNode(true) )
|
||||
.find(":radio").removeAttr("checked").end()
|
||||
.css({
|
||||
visibility: "hidden",
|
||||
position: "absolute",
|
||||
display: "block",
|
||||
right: "0",
|
||||
left: "0"
|
||||
}).appendTo( elem.parentNode )[0];
|
||||
|
||||
var position = jQuery.css( elem.parentNode, "position" ) || "static";
|
||||
if ( position == "static" )
|
||||
elem.parentNode.style.position = "relative";
|
||||
|
||||
height = elem.clientHeight;
|
||||
width = elem.clientWidth;
|
||||
|
||||
if ( position == "static" )
|
||||
elem.parentNode.style.position = "static";
|
||||
|
||||
elem.parentNode.removeChild( elem );
|
||||
}
|
||||
});
|
||||
|
||||
return name == "height" ?
|
||||
height :
|
||||
width;
|
||||
}
|
||||
|
||||
return jQuery.curCSS( elem, name, force );
|
||||
|
||||
return jQuery.curCSS( elem, name );
|
||||
},
|
||||
|
||||
curCSS: function( elem, name, force ) {
|
||||
@ -825,12 +800,6 @@ jQuery.extend({
|
||||
"1" :
|
||||
ret;
|
||||
}
|
||||
// Opera sometimes will give the wrong display answer, this fixes it, see #2037
|
||||
if ( jQuery.browser.opera && name == "display" ) {
|
||||
var save = elem.style.display;
|
||||
elem.style.display = "block";
|
||||
elem.style.display = save;
|
||||
}
|
||||
|
||||
// Make sure we're using the right name for getting the float value
|
||||
if ( name.match( /float/i ) )
|
||||
@ -873,7 +842,7 @@ jQuery.extend({
|
||||
// one special, otherwise get the value
|
||||
ret = name == "display" && swap[ stack.length - 1 ] != null ?
|
||||
"none" :
|
||||
( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || "";
|
||||
document.defaultView.getComputedStyle( elem, null ).getPropertyValue( name ) || "";
|
||||
|
||||
// Finally, revert the display styles back
|
||||
for ( var i = 0; i < swap.length; i++ )
|
||||
@ -918,9 +887,6 @@ jQuery.extend({
|
||||
clean: function( elems, context ) {
|
||||
var ret = [];
|
||||
context = context || document;
|
||||
// !context.createElement fails in IE with an error but returns typeof 'object'
|
||||
if (typeof context.createElement == 'undefined')
|
||||
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
|
||||
|
||||
jQuery.each(elems, function(i, elem){
|
||||
if ( !elem )
|
||||
@ -944,7 +910,7 @@ jQuery.extend({
|
||||
var wrap =
|
||||
// option or optgroup
|
||||
!tags.indexOf("<opt") &&
|
||||
[ 1, "<select multiple='multiple'>", "</select>" ] ||
|
||||
[ 1, "<select>", "</select>" ] ||
|
||||
|
||||
!tags.indexOf("<leg") &&
|
||||
[ 1, "<fieldset>", "</fieldset>" ] ||
|
||||
@ -983,18 +949,18 @@ jQuery.extend({
|
||||
div.firstChild && div.firstChild.childNodes :
|
||||
|
||||
// String was a bare <thead> or <tfoot>
|
||||
wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ?
|
||||
wrap[1] == "<table>" && s.indexOf("<tbody") < 0 ?
|
||||
div.childNodes :
|
||||
[];
|
||||
|
||||
for ( var j = tbody.length - 1; j >= 0 ; --j )
|
||||
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length )
|
||||
tbody[ j ].parentNode.removeChild( tbody[ j ] );
|
||||
|
||||
|
||||
for ( var i = tbody.length - 1; i >= 0 ; --i )
|
||||
if ( jQuery.nodeName( tbody[ i ], "tbody" ) && !tbody[ i ].childNodes.length )
|
||||
tbody[ i ].parentNode.removeChild( tbody[ i ] );
|
||||
|
||||
// IE completely kills leading whitespace when innerHTML is used
|
||||
if ( /^\s/.test( elem ) )
|
||||
div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild );
|
||||
|
||||
|
||||
}
|
||||
|
||||
elem = jQuery.makeArray( div.childNodes );
|
||||
@ -1015,10 +981,6 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
attr: function( elem, name, value ) {
|
||||
// don't set attributes on text and comment nodes
|
||||
if (!elem || elem.nodeType == 3 || elem.nodeType == 8)
|
||||
return undefined;
|
||||
|
||||
var fix = jQuery.isXMLDoc( elem ) ?
|
||||
{} :
|
||||
jQuery.props;
|
||||
@ -1049,8 +1011,7 @@ jQuery.extend({
|
||||
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode )
|
||||
throw "type property can't be changed";
|
||||
|
||||
// convert the value to a string (all browsers do this but IE) see #1070
|
||||
elem.setAttribute( name, "" + value );
|
||||
elem.setAttribute( name, value );
|
||||
}
|
||||
|
||||
if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) )
|
||||
@ -1072,7 +1033,7 @@ jQuery.extend({
|
||||
(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")");
|
||||
}
|
||||
|
||||
return elem.filter && elem.filter.indexOf("opacity=") >= 0 ?
|
||||
return elem.filter ?
|
||||
(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() :
|
||||
"";
|
||||
}
|
||||
@ -1222,10 +1183,7 @@ jQuery.extend({
|
||||
readonly: "readOnly",
|
||||
selected: "selected",
|
||||
maxlength: "maxLength",
|
||||
selectedIndex: "selectedIndex",
|
||||
defaultValue: "defaultValue",
|
||||
tagName: "tagName",
|
||||
nodeName: "nodeName"
|
||||
selectedIndex: "selectedIndex"
|
||||
}
|
||||
});
|
||||
|
||||
@ -1272,8 +1230,7 @@ jQuery.each({
|
||||
jQuery.each({
|
||||
removeAttr: function( name ) {
|
||||
jQuery.attr( this, name, "" );
|
||||
if (this.nodeType == 1)
|
||||
this.removeAttribute( name );
|
||||
this.removeAttribute( name );
|
||||
},
|
||||
|
||||
addClass: function( classNames ) {
|
||||
@ -1290,21 +1247,17 @@ jQuery.each({
|
||||
|
||||
remove: function( selector ) {
|
||||
if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) {
|
||||
// Prevent memory leaks
|
||||
jQuery( "*", this ).add(this).each(function(){
|
||||
jQuery.event.remove(this);
|
||||
jQuery.removeData(this);
|
||||
});
|
||||
if (this.parentNode)
|
||||
this.parentNode.removeChild( this );
|
||||
jQuery.removeData( this );
|
||||
this.parentNode.removeChild( this );
|
||||
}
|
||||
},
|
||||
|
||||
empty: function() {
|
||||
// Remove element nodes and prevent memory leaks
|
||||
jQuery( ">*", this ).remove();
|
||||
|
||||
// Remove any remaining nodes
|
||||
// Clean up the cache
|
||||
jQuery( "*", this ).each(function(){
|
||||
jQuery.removeData(this);
|
||||
});
|
||||
|
||||
while ( this.firstChild )
|
||||
this.removeChild( this.firstChild );
|
||||
}
|
||||
@ -1324,19 +1277,16 @@ jQuery.each([ "Height", "Width" ], function(i, name){
|
||||
jQuery.browser.opera && document.body[ "client" + name ] ||
|
||||
|
||||
// Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths)
|
||||
jQuery.browser.safari && window[ "inner" + name ] ||
|
||||
jQuery.browser.safari && self[ "inner" + name ] ||
|
||||
|
||||
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
|
||||
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] :
|
||||
|
||||
// Get document width or height
|
||||
this[0] == document ?
|
||||
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
|
||||
Math.max(
|
||||
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
|
||||
Math.max(document.body["offset" + name], document.documentElement["offset" + name])
|
||||
) :
|
||||
|
||||
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater (Mozilla reports scrollWidth the same as offsetWidth)
|
||||
Math.max( document.body[ "scroll" + name ], document.body[ "offset" + name ] ) :
|
||||
|
||||
// Get or set width or height on the element
|
||||
size == undefined ?
|
||||
// Get width or height on the element
|
||||
@ -1444,15 +1394,15 @@ jQuery.extend({
|
||||
if ( typeof t != "string" )
|
||||
return [ t ];
|
||||
|
||||
// check to make sure context is a DOM element or a document
|
||||
if ( context && context.nodeType != 1 && context.nodeType != 9)
|
||||
return [ ];
|
||||
// Make sure that the context is a DOM Element
|
||||
if ( context && !context.nodeType )
|
||||
context = null;
|
||||
|
||||
// Set the correct context (if none is provided)
|
||||
context = context || document;
|
||||
|
||||
// Initialize the search
|
||||
var ret = [context], done = [], last, nodeName;
|
||||
var ret = [context], done = [], last;
|
||||
|
||||
// Continue while a selector expression exists, and while
|
||||
// we're no longer looping upon ourselves
|
||||
@ -1470,12 +1420,12 @@ jQuery.extend({
|
||||
var m = re.exec(t);
|
||||
|
||||
if ( m ) {
|
||||
nodeName = m[1].toUpperCase();
|
||||
var nodeName = m[1].toUpperCase();
|
||||
|
||||
// Perform our own iteration and filter
|
||||
for ( var i = 0; ret[i]; i++ )
|
||||
for ( var c = ret[i].firstChild; c; c = c.nextSibling )
|
||||
if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) )
|
||||
if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName.toUpperCase()) )
|
||||
r.push( c );
|
||||
|
||||
ret = r;
|
||||
@ -1488,8 +1438,7 @@ jQuery.extend({
|
||||
if ( (m = re.exec(t)) != null ) {
|
||||
r = [];
|
||||
|
||||
var merge = {};
|
||||
nodeName = m[2].toUpperCase();
|
||||
var nodeName = m[2], merge = {};
|
||||
m = m[1];
|
||||
|
||||
for ( var j = 0, rl = ret.length; j < rl; j++ ) {
|
||||
@ -1500,7 +1449,7 @@ jQuery.extend({
|
||||
|
||||
if ( m == "~" && merge[id] ) break;
|
||||
|
||||
if (!nodeName || n.nodeName.toUpperCase() == nodeName ) {
|
||||
if (!nodeName || n.nodeName.toUpperCase() == nodeName.toUpperCase() ) {
|
||||
if ( m == "~" ) merge[id] = true;
|
||||
r.push( n );
|
||||
}
|
||||
@ -1541,7 +1490,7 @@ jQuery.extend({
|
||||
|
||||
// Re-organize the results, so that they're consistent
|
||||
if ( m ) {
|
||||
m = [ 0, m[2], m[3], m[1] ];
|
||||
m = [ 0, m[2], m[3], m[1] ];
|
||||
|
||||
} else {
|
||||
// Otherwise, do a traditional filter check for
|
||||
@ -1646,7 +1595,7 @@ jQuery.extend({
|
||||
var last;
|
||||
|
||||
// Look for common filter expressions
|
||||
while ( t && t != last ) {
|
||||
while ( t && t != last ) {
|
||||
last = t;
|
||||
|
||||
var p = jQuery.parse, m;
|
||||
@ -1669,10 +1618,7 @@ jQuery.extend({
|
||||
// :not() is a special case that can be optimized by
|
||||
// keeping it out of the expression list
|
||||
if ( m[1] == ":" && m[2] == "not" )
|
||||
// optimize if only one selector found (most common case)
|
||||
r = isSimple.test( m[3] ) ?
|
||||
jQuery.filter(m[3], r, true).r :
|
||||
jQuery( r ).not( m[3] );
|
||||
r = jQuery.filter(m[3], r, true).r;
|
||||
|
||||
// We can get a big speed boost by filtering by class here
|
||||
else if ( m[1] == "." )
|
||||
@ -1701,14 +1647,11 @@ jQuery.extend({
|
||||
// We can get a speed boost by handling nth-child here
|
||||
} else if ( m[1] == ":" && m[2] == "nth-child" ) {
|
||||
var merge = {}, tmp = [],
|
||||
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
|
||||
test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
|
||||
test = /(\d*)n\+?(\d*)/.exec(
|
||||
m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" ||
|
||||
!/\D/.test(m[3]) && "0n+" + m[3] || m[3]),
|
||||
// calculate the numbers (first)n+(last) including if they are negative
|
||||
first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0;
|
||||
|
||||
// loop through all the elements left in the jQuery object
|
||||
!/\D/.test(m[3]) && "n+" + m[3] || m[3]),
|
||||
first = (test[1] || 1) - 0, last = test[2] - 0;
|
||||
|
||||
for ( var i = 0, rl = r.length; i < rl; i++ ) {
|
||||
var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode);
|
||||
|
||||
@ -1724,10 +1667,10 @@ jQuery.extend({
|
||||
|
||||
var add = false;
|
||||
|
||||
if ( first == 0 ) {
|
||||
if ( node.nodeIndex == last )
|
||||
if ( first == 1 ) {
|
||||
if ( last == 0 || node.nodeIndex == last )
|
||||
add = true;
|
||||
} else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 )
|
||||
} else if ( (node.nodeIndex + last) % first == 0 )
|
||||
add = true;
|
||||
|
||||
if ( add ^ not )
|
||||
@ -1788,7 +1731,6 @@ jQuery.extend({
|
||||
return r;
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* A number of helper functions used for managing events.
|
||||
* Many of the ideas behind this code orignated from
|
||||
@ -1798,14 +1740,11 @@ jQuery.event = {
|
||||
|
||||
// Bind an event to an element
|
||||
// Original by Dean Edwards
|
||||
add: function(elem, types, handler, data) {
|
||||
if ( elem.nodeType == 3 || elem.nodeType == 8 )
|
||||
return;
|
||||
|
||||
add: function(element, type, handler, data) {
|
||||
// For whatever reason, IE has trouble passing the window object
|
||||
// around, causing it to be cloned in the process
|
||||
if ( jQuery.browser.msie && elem.setInterval != undefined )
|
||||
elem = window;
|
||||
if ( jQuery.browser.msie && element.setInterval != undefined )
|
||||
element = window;
|
||||
|
||||
// Make sure that the function being executed has a unique ID
|
||||
if ( !handler.guid )
|
||||
@ -1813,7 +1752,7 @@ jQuery.event = {
|
||||
|
||||
// if data is passed, bind to handler
|
||||
if( data != undefined ) {
|
||||
// Create temporary function pointer to original handler
|
||||
// Create temporary function pointer to original handler
|
||||
var fn = handler;
|
||||
|
||||
// Create unique handler function, wrapped around original handler
|
||||
@ -1829,179 +1768,149 @@ jQuery.event = {
|
||||
handler.guid = fn.guid;
|
||||
}
|
||||
|
||||
// Namespaced event handlers
|
||||
var parts = type.split(".");
|
||||
type = parts[0];
|
||||
handler.type = parts[1];
|
||||
|
||||
// Init the element's event structure
|
||||
var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}),
|
||||
handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){
|
||||
// returned undefined or false
|
||||
var val;
|
||||
var events = jQuery.data(element, "events") || jQuery.data(element, "events", {});
|
||||
|
||||
var handle = jQuery.data(element, "handle", function(){
|
||||
// returned undefined or false
|
||||
var val;
|
||||
|
||||
// Handle the second event of a trigger and when
|
||||
// an event is called after a page has unloaded
|
||||
if ( typeof jQuery == "undefined" || jQuery.event.triggered )
|
||||
return val;
|
||||
|
||||
val = jQuery.event.handle.apply(elem, arguments);
|
||||
|
||||
// Handle the second event of a trigger and when
|
||||
// an event is called after a page has unloaded
|
||||
if ( typeof jQuery == "undefined" || jQuery.event.triggered )
|
||||
return val;
|
||||
});
|
||||
|
||||
// Handle multiple events seperated by a space
|
||||
// jQuery(...).bind("mouseover mouseout", fn);
|
||||
jQuery.each(types.split(/\s+/), function(index, type) {
|
||||
// Namespaced event handlers
|
||||
var parts = type.split(".");
|
||||
type = parts[0];
|
||||
handler.type = parts[1];
|
||||
val = jQuery.event.handle.apply(element, arguments);
|
||||
|
||||
return val;
|
||||
});
|
||||
|
||||
// Get the current list of functions bound to this event
|
||||
var handlers = events[type];
|
||||
// Get the current list of functions bound to this event
|
||||
var handlers = events[type];
|
||||
|
||||
// Init the event handler queue
|
||||
if (!handlers) {
|
||||
handlers = events[type] = {};
|
||||
|
||||
// Check for a special event handler
|
||||
// Only use addEventListener/attachEvent if the special
|
||||
// events handler returns false
|
||||
if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) {
|
||||
// Bind the global event handler to the element
|
||||
if (elem.addEventListener)
|
||||
elem.addEventListener(type, handle, false);
|
||||
else if (elem.attachEvent)
|
||||
elem.attachEvent("on" + type, handle);
|
||||
}
|
||||
}
|
||||
// Init the event handler queue
|
||||
if (!handlers) {
|
||||
handlers = events[type] = {};
|
||||
|
||||
// And bind the global event handler to the element
|
||||
if (element.addEventListener)
|
||||
element.addEventListener(type, handle, false);
|
||||
else
|
||||
element.attachEvent("on" + type, handle);
|
||||
}
|
||||
|
||||
// Add the function to the element's handler list
|
||||
handlers[handler.guid] = handler;
|
||||
// Add the function to the element's handler list
|
||||
handlers[handler.guid] = handler;
|
||||
|
||||
// Keep track of which events have been used, for global triggering
|
||||
jQuery.event.global[type] = true;
|
||||
});
|
||||
// Keep track of which events have been used, for global triggering
|
||||
this.global[type] = true;
|
||||
},
|
||||
|
||||
guid: 1,
|
||||
global: {},
|
||||
|
||||
// Detach an event or set of events from an element
|
||||
remove: function(elem, types, handler) {
|
||||
// don't do events on text and comment nodes
|
||||
if ( elem.nodeType == 3 || elem.nodeType == 8 )
|
||||
return;
|
||||
remove: function(element, type, handler) {
|
||||
var events = jQuery.data(element, "events"), ret, index;
|
||||
|
||||
var events = jQuery.data(elem, "events"), ret, index;
|
||||
// Namespaced event handlers
|
||||
if ( typeof type == "string" ) {
|
||||
var parts = type.split(".");
|
||||
type = parts[0];
|
||||
}
|
||||
|
||||
if ( events ) {
|
||||
// Unbind all events for the element
|
||||
if ( types == undefined )
|
||||
for ( var type in events )
|
||||
this.remove( elem, type );
|
||||
else {
|
||||
// types is actually an event object here
|
||||
if ( types.type ) {
|
||||
handler = types.handler;
|
||||
types = types.type;
|
||||
}
|
||||
|
||||
// Handle multiple events seperated by a space
|
||||
// jQuery(...).unbind("mouseover mouseout", fn);
|
||||
jQuery.each(types.split(/\s+/), function(index, type){
|
||||
// Namespaced event handlers
|
||||
var parts = type.split(".");
|
||||
type = parts[0];
|
||||
|
||||
if ( events[type] ) {
|
||||
// remove the given handler for the given type
|
||||
if ( handler )
|
||||
delete events[type][handler.guid];
|
||||
// type is actually an event object here
|
||||
if ( type && type.type ) {
|
||||
handler = type.handler;
|
||||
type = type.type;
|
||||
}
|
||||
|
||||
// remove all handlers for the given type
|
||||
else
|
||||
for ( handler in events[type] )
|
||||
// Handle the removal of namespaced events
|
||||
if ( !parts[1] || events[type][handler].type == parts[1] )
|
||||
delete events[type][handler];
|
||||
if ( !type ) {
|
||||
for ( type in events )
|
||||
this.remove( element, type );
|
||||
|
||||
// remove generic event handler if no more handlers exist
|
||||
for ( ret in events[type] ) break;
|
||||
if ( !ret ) {
|
||||
if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) {
|
||||
if (elem.removeEventListener)
|
||||
elem.removeEventListener(type, jQuery.data(elem, "handle"), false);
|
||||
else if (elem.detachEvent)
|
||||
elem.detachEvent("on" + type, jQuery.data(elem, "handle"));
|
||||
}
|
||||
ret = null;
|
||||
delete events[type];
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if ( events[type] ) {
|
||||
// remove the given handler for the given type
|
||||
if ( handler )
|
||||
delete events[type][handler.guid];
|
||||
|
||||
// remove all handlers for the given type
|
||||
else
|
||||
for ( handler in events[type] )
|
||||
// Handle the removal of namespaced events
|
||||
if ( !parts[1] || events[type][handler].type == parts[1] )
|
||||
delete events[type][handler];
|
||||
|
||||
// remove generic event handler if no more handlers exist
|
||||
for ( ret in events[type] ) break;
|
||||
if ( !ret ) {
|
||||
if (element.removeEventListener)
|
||||
element.removeEventListener(type, jQuery.data(element, "handle"), false);
|
||||
else
|
||||
element.detachEvent("on" + type, jQuery.data(element, "handle"));
|
||||
ret = null;
|
||||
delete events[type];
|
||||
}
|
||||
}
|
||||
|
||||
// Remove the expando if it's no longer used
|
||||
for ( ret in events ) break;
|
||||
if ( !ret ) {
|
||||
jQuery.removeData( elem, "events" );
|
||||
jQuery.removeData( elem, "handle" );
|
||||
jQuery.removeData( element, "events" );
|
||||
jQuery.removeData( element, "handle" );
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
trigger: function(type, data, elem, donative, extra) {
|
||||
trigger: function(type, data, element, donative, extra) {
|
||||
// Clone the incoming data, if any
|
||||
data = jQuery.makeArray(data || []);
|
||||
|
||||
// Handle a global trigger
|
||||
if ( !elem ) {
|
||||
if ( !element ) {
|
||||
// Only trigger if we've ever bound an event for it
|
||||
if ( this.global[type] )
|
||||
jQuery("*").add([window, document]).trigger(type, data);
|
||||
|
||||
// Handle triggering a single element
|
||||
} else {
|
||||
// don't do events on text and comment nodes
|
||||
if ( elem.nodeType == 3 || elem.nodeType == 8 )
|
||||
return undefined;
|
||||
|
||||
var val, ret, fn = jQuery.isFunction( elem[ type ] || null ),
|
||||
var val, ret, fn = jQuery.isFunction( element[ type ] || null ),
|
||||
// Check to see if we need to provide a fake event, or not
|
||||
event = !data[0] || !data[0].preventDefault;
|
||||
evt = !data[0] || !data[0].preventDefault;
|
||||
|
||||
// Pass along a fake event
|
||||
if ( event )
|
||||
data.unshift( this.fix({ type: type, target: elem }) );
|
||||
if ( evt )
|
||||
data.unshift( this.fix({ type: type, target: element }) );
|
||||
|
||||
// Enforce the right trigger type
|
||||
data[0].type = type;
|
||||
|
||||
// Trigger the event
|
||||
if ( jQuery.isFunction( jQuery.data(elem, "handle") ) )
|
||||
val = jQuery.data(elem, "handle").apply( elem, data );
|
||||
if ( jQuery.isFunction( jQuery.data(element, "handle") ) )
|
||||
val = jQuery.data(element, "handle").apply( element, data );
|
||||
|
||||
// Handle triggering native .onfoo handlers
|
||||
if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false )
|
||||
if ( !fn && element["on"+type] && element["on"+type].apply( element, data ) === false )
|
||||
val = false;
|
||||
|
||||
// Extra functions don't get the custom event object
|
||||
if ( event )
|
||||
if ( evt )
|
||||
data.shift();
|
||||
|
||||
// Handle triggering of extra function
|
||||
if ( extra && jQuery.isFunction( extra ) ) {
|
||||
// call the extra function and tack the current return value on the end for possible inspection
|
||||
var ret = extra.apply( elem, data.concat( val ) );
|
||||
// if anything is returned, give it precedence and have it overwrite the previous value
|
||||
if (ret !== undefined)
|
||||
val = ret;
|
||||
}
|
||||
if ( extra && extra.apply( element, data ) === false )
|
||||
val = false;
|
||||
|
||||
// Trigger the native events (except for clicks on links)
|
||||
if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) {
|
||||
if ( fn && donative !== false && val !== false && !(jQuery.nodeName(element, 'a') && type == "click") ) {
|
||||
this.triggered = true;
|
||||
try {
|
||||
elem[ type ]();
|
||||
// prevent IE from throwing an error for some hidden elements
|
||||
} catch (e) {}
|
||||
element[ type ]();
|
||||
}
|
||||
|
||||
this.triggered = false;
|
||||
@ -2021,24 +1930,23 @@ jQuery.event = {
|
||||
var parts = event.type.split(".");
|
||||
event.type = parts[0];
|
||||
|
||||
var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
|
||||
var c = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 );
|
||||
args.unshift( event );
|
||||
|
||||
for ( var j in handlers ) {
|
||||
var handler = handlers[j];
|
||||
for ( var j in c ) {
|
||||
// Pass in a reference to the handler function itself
|
||||
// So that we can later remove it
|
||||
args[0].handler = handler;
|
||||
args[0].data = handler.data;
|
||||
args[0].handler = c[j];
|
||||
args[0].data = c[j].data;
|
||||
|
||||
// Filter the functions by class
|
||||
if ( !parts[1] || handler.type == parts[1] ) {
|
||||
var ret = handler.apply( this, args );
|
||||
if ( !parts[1] || c[j].type == parts[1] ) {
|
||||
var tmp = c[j].apply( this, args );
|
||||
|
||||
if ( val !== false )
|
||||
val = ret;
|
||||
val = tmp;
|
||||
|
||||
if ( ret === false ) {
|
||||
if ( tmp === false ) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
}
|
||||
@ -2054,18 +1962,11 @@ jQuery.event = {
|
||||
},
|
||||
|
||||
fix: function(event) {
|
||||
// Short-circuit if the event has already been fixed by jQuery.event.fix
|
||||
if ( event[ expando ] )
|
||||
return event;
|
||||
|
||||
// store a copy of the original event object
|
||||
// and clone to set read-only properties
|
||||
var originalEvent = event;
|
||||
event = jQuery.extend({}, originalEvent);
|
||||
|
||||
// Mark the event as fixed by jQuery.event.fix
|
||||
event[ expando ] = true;
|
||||
|
||||
// add preventDefault and stopPropagation since
|
||||
// they will not work on the clone
|
||||
event.preventDefault = function() {
|
||||
@ -2084,11 +1985,11 @@ jQuery.event = {
|
||||
};
|
||||
|
||||
// Fix target property, if necessary
|
||||
if ( !event.target )
|
||||
event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either
|
||||
if ( !event.target && event.srcElement )
|
||||
event.target = event.srcElement;
|
||||
|
||||
// check if target is a textnode (safari)
|
||||
if ( event.target.nodeType == 3 )
|
||||
if (jQuery.browser.safari && event.target.nodeType == 3)
|
||||
event.target = originalEvent.target.parentNode;
|
||||
|
||||
// Add relatedTarget, if necessary
|
||||
@ -2097,9 +1998,9 @@ jQuery.event = {
|
||||
|
||||
// Calculate pageX/Y if missing and clientX/Y available
|
||||
if ( event.pageX == null && event.clientX != null ) {
|
||||
var doc = document.documentElement, body = document.body;
|
||||
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0);
|
||||
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0);
|
||||
var e = document.documentElement, b = document.body;
|
||||
event.pageX = event.clientX + (e && e.scrollLeft || b && b.scrollLeft || 0);
|
||||
event.pageY = event.clientY + (e && e.scrollTop || b && b.scrollTop || 0);
|
||||
}
|
||||
|
||||
// Add which for key events
|
||||
@ -2116,62 +2017,6 @@ jQuery.event = {
|
||||
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
|
||||
|
||||
return event;
|
||||
},
|
||||
|
||||
special: {
|
||||
ready: {
|
||||
setup: function() {
|
||||
// Make sure the ready event is setup
|
||||
bindReady();
|
||||
return;
|
||||
},
|
||||
|
||||
teardown: function() { return; }
|
||||
},
|
||||
|
||||
mouseenter: {
|
||||
setup: function() {
|
||||
if ( jQuery.browser.msie ) return false;
|
||||
jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler);
|
||||
return true;
|
||||
},
|
||||
|
||||
teardown: function() {
|
||||
if ( jQuery.browser.msie ) return false;
|
||||
jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler);
|
||||
return true;
|
||||
},
|
||||
|
||||
handler: function(event) {
|
||||
// If we actually just moused on to a sub-element, ignore it
|
||||
if ( withinElement(event, this) ) return true;
|
||||
// Execute the right handlers by setting the event type to mouseenter
|
||||
arguments[0].type = "mouseenter";
|
||||
return jQuery.event.handle.apply(this, arguments);
|
||||
}
|
||||
},
|
||||
|
||||
mouseleave: {
|
||||
setup: function() {
|
||||
if ( jQuery.browser.msie ) return false;
|
||||
jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler);
|
||||
return true;
|
||||
},
|
||||
|
||||
teardown: function() {
|
||||
if ( jQuery.browser.msie ) return false;
|
||||
jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler);
|
||||
return true;
|
||||
},
|
||||
|
||||
handler: function(event) {
|
||||
// If we actually just moused on to a sub-element, ignore it
|
||||
if ( withinElement(event, this) ) return true;
|
||||
// Execute the right handlers by setting the event type to mouseleave
|
||||
arguments[0].type = "mouseleave";
|
||||
return jQuery.event.handle.apply(this, arguments);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@ -2206,50 +2051,70 @@ jQuery.fn.extend({
|
||||
triggerHandler: function( type, data, fn ) {
|
||||
if ( this[0] )
|
||||
return jQuery.event.trigger( type, data, this[0], false, fn );
|
||||
return undefined;
|
||||
},
|
||||
|
||||
toggle: function() {
|
||||
// Save reference to arguments for access in closure
|
||||
var args = arguments;
|
||||
var a = arguments;
|
||||
|
||||
return this.click(function(event) {
|
||||
return this.click(function(e) {
|
||||
// Figure out which function to execute
|
||||
this.lastToggle = 0 == this.lastToggle ? 1 : 0;
|
||||
|
||||
// Make sure that clicks stop
|
||||
event.preventDefault();
|
||||
e.preventDefault();
|
||||
|
||||
// and execute the function
|
||||
return args[this.lastToggle].apply( this, arguments ) || false;
|
||||
return a[this.lastToggle].apply( this, [e] ) || false;
|
||||
});
|
||||
},
|
||||
|
||||
hover: function(fnOver, fnOut) {
|
||||
return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut);
|
||||
hover: function(f,g) {
|
||||
|
||||
// A private function for handling mouse 'hovering'
|
||||
function handleHover(e) {
|
||||
// Check if mouse(over|out) are still within the same parent element
|
||||
var p = e.relatedTarget;
|
||||
|
||||
// Traverse up the tree
|
||||
while ( p && p != this ) try { p = p.parentNode; } catch(e) { p = this; };
|
||||
|
||||
// If we actually just moused on to a sub-element, ignore it
|
||||
if ( p == this ) return false;
|
||||
|
||||
// Execute the right function
|
||||
return (e.type == "mouseover" ? f : g).apply(this, [e]);
|
||||
}
|
||||
|
||||
// Bind the function to the two event listeners
|
||||
return this.mouseover(handleHover).mouseout(handleHover);
|
||||
},
|
||||
|
||||
ready: function(fn) {
|
||||
ready: function(f) {
|
||||
// Attach the listeners
|
||||
bindReady();
|
||||
|
||||
// If the DOM is already ready
|
||||
if ( jQuery.isReady )
|
||||
// Execute the function immediately
|
||||
fn.call( document, jQuery );
|
||||
f.apply( document, [jQuery] );
|
||||
|
||||
// Otherwise, remember the function for later
|
||||
else
|
||||
// Add the function to the wait list
|
||||
jQuery.readyList.push( function() { return fn.call(this, jQuery); } );
|
||||
jQuery.readyList.push( function() { return f.apply(this, [jQuery]); } );
|
||||
|
||||
return this;
|
||||
}
|
||||
});
|
||||
|
||||
jQuery.extend({
|
||||
/*
|
||||
* All the code that makes DOM Ready work nicely.
|
||||
*/
|
||||
isReady: false,
|
||||
readyList: [],
|
||||
|
||||
// Handle when the DOM is ready
|
||||
ready: function() {
|
||||
// Make sure that the DOM is not already loaded
|
||||
@ -2267,102 +2132,58 @@ jQuery.extend({
|
||||
// Reset the list of functions
|
||||
jQuery.readyList = null;
|
||||
}
|
||||
|
||||
// Trigger any bound ready events
|
||||
$(document).triggerHandler("ready");
|
||||
// Remove event listener to avoid memory leak
|
||||
if ( jQuery.browser.mozilla || jQuery.browser.opera )
|
||||
document.removeEventListener( "DOMContentLoaded", jQuery.ready, false );
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
|
||||
"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
|
||||
"submit,keydown,keypress,keyup,error").split(","), function(i,o){
|
||||
|
||||
// Handle event binding
|
||||
jQuery.fn[o] = function(f){
|
||||
return f ? this.bind(o, f) : this.trigger(o);
|
||||
};
|
||||
});
|
||||
|
||||
var readyBound = false;
|
||||
|
||||
function bindReady(){
|
||||
if ( readyBound ) return;
|
||||
readyBound = true;
|
||||
|
||||
// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
|
||||
if ( document.addEventListener && !jQuery.browser.opera)
|
||||
// If Mozilla is used
|
||||
if ( jQuery.browser.mozilla || jQuery.browser.opera )
|
||||
// Use the handy event callback
|
||||
document.addEventListener( "DOMContentLoaded", jQuery.ready, false );
|
||||
|
||||
// If IE is used and is not in a frame
|
||||
// Continually check to see if the document is ready
|
||||
if ( jQuery.browser.msie && window == top ) (function(){
|
||||
if (jQuery.isReady) 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;
|
||||
// If Safari or IE is used
|
||||
else {
|
||||
// Continually check to see if the document is ready
|
||||
function timer(){
|
||||
try {
|
||||
// If IE is used, use the trick by Diego Perini
|
||||
// http://javascript.nwbox.com/IEContentLoaded/
|
||||
if ( jQuery.browser.msie || document.readyState != "loaded" && document.readyState != "complete" )
|
||||
document.documentElement.doScroll("left");
|
||||
|
||||
// and execute any waiting functions
|
||||
jQuery.ready();
|
||||
} catch( error ) {
|
||||
setTimeout( timer, 0 );
|
||||
}
|
||||
}
|
||||
// and execute any waiting functions
|
||||
jQuery.ready();
|
||||
})();
|
||||
|
||||
if ( jQuery.browser.opera )
|
||||
document.addEventListener( "DOMContentLoaded", function () {
|
||||
if (jQuery.isReady) return;
|
||||
for (var i = 0; i < document.styleSheets.length; i++)
|
||||
if (document.styleSheets[i].disabled) {
|
||||
setTimeout( arguments.callee, 0 );
|
||||
return;
|
||||
}
|
||||
// and execute any waiting functions
|
||||
jQuery.ready();
|
||||
}, false);
|
||||
|
||||
if ( jQuery.browser.safari ) {
|
||||
var numStyles;
|
||||
(function(){
|
||||
if (jQuery.isReady) return;
|
||||
if ( document.readyState != "loaded" && document.readyState != "complete" ) {
|
||||
setTimeout( arguments.callee, 0 );
|
||||
return;
|
||||
}
|
||||
if ( numStyles === undefined )
|
||||
numStyles = jQuery("style, link[rel=stylesheet]").length;
|
||||
if ( document.styleSheets.length != numStyles ) {
|
||||
setTimeout( arguments.callee, 0 );
|
||||
return;
|
||||
}
|
||||
// and execute any waiting functions
|
||||
jQuery.ready();
|
||||
})();
|
||||
timer();
|
||||
}
|
||||
|
||||
// A fallback to window.onload, that will always work
|
||||
jQuery.event.add( window, "load", jQuery.ready );
|
||||
}
|
||||
|
||||
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," +
|
||||
"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," +
|
||||
"submit,keydown,keypress,keyup,error").split(","), function(i, name){
|
||||
|
||||
// Handle event binding
|
||||
jQuery.fn[name] = function(fn){
|
||||
return fn ? this.bind(name, fn) : this.trigger(name);
|
||||
};
|
||||
});
|
||||
|
||||
// Checks if an event happened on an element within another element
|
||||
// Used in jQuery.event.special.mouseenter and mouseleave handlers
|
||||
var withinElement = function(event, elem) {
|
||||
// Check if mouse(over|out) are still within the same parent element
|
||||
var parent = event.relatedTarget;
|
||||
// Traverse up the tree
|
||||
while ( parent && parent != elem ) try { parent = parent.parentNode } catch(error) { parent = elem; };
|
||||
// Return true if we actually just moused on to a sub-element
|
||||
return parent == elem;
|
||||
};
|
||||
|
||||
// Prevent memory leaks in IE
|
||||
// And prevent errors on refresh with events like mouseover in other browsers
|
||||
// Window isn't included so as not to unbind existing unload events
|
||||
jQuery(window).bind("unload", function() {
|
||||
jQuery("*").add(document).unbind();
|
||||
});
|
||||
jQuery.fn.extend({
|
||||
load: function( url, params, callback ) {
|
||||
if ( jQuery.isFunction( url ) )
|
||||
@ -2399,7 +2220,6 @@ jQuery.fn.extend({
|
||||
jQuery.ajax({
|
||||
url: url,
|
||||
type: type,
|
||||
dataType: "html",
|
||||
data: params,
|
||||
complete: function(res, status){
|
||||
// If successful, inject the HTML into all the matched elements
|
||||
@ -2418,7 +2238,10 @@ jQuery.fn.extend({
|
||||
// If not, just inject the full result
|
||||
res.responseText );
|
||||
|
||||
self.each( callback, [res.responseText, status, res] );
|
||||
// Add delay to account for Safari's delay in globalEval
|
||||
setTimeout(function(){
|
||||
self.each( callback, [res.responseText, status, res] );
|
||||
}, 13);
|
||||
}
|
||||
});
|
||||
return this;
|
||||
@ -2516,7 +2339,7 @@ jQuery.extend({
|
||||
lastModified: {},
|
||||
|
||||
ajax: function( s ) {
|
||||
var jsonp, jsre = /=\?(&|$)/g, status, data;
|
||||
var jsonp, jsre = /=(\?|%3F)/g, status, data;
|
||||
|
||||
// Extend the settings, but re-extend 's' so that it can be
|
||||
// checked again later (in the test suite, specifically)
|
||||
@ -2542,8 +2365,8 @@ jQuery.extend({
|
||||
|
||||
// Replace the =? sequence both in the query string and the data
|
||||
if ( s.data )
|
||||
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
|
||||
s.url = s.url.replace(jsre, "=" + jsonp + "$1");
|
||||
s.data = s.data.replace(jsre, "=" + jsonp);
|
||||
s.url = s.url.replace(jsre, "=" + jsonp);
|
||||
|
||||
// We need to make sure
|
||||
// that a JSONP style response is executed properly
|
||||
@ -2557,21 +2380,14 @@ jQuery.extend({
|
||||
// Garbage collect
|
||||
window[ jsonp ] = undefined;
|
||||
try{ delete window[ jsonp ]; } catch(e){}
|
||||
if ( head )
|
||||
head.removeChild( script );
|
||||
};
|
||||
}
|
||||
|
||||
if ( s.dataType == "script" && s.cache == null )
|
||||
s.cache = false;
|
||||
|
||||
if ( s.cache === false && s.type.toLowerCase() == "get" ) {
|
||||
var ts = (new Date()).getTime();
|
||||
// try replacing _= if it is there
|
||||
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2");
|
||||
// if nothing was replaced, add timestamp to the end
|
||||
s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : "");
|
||||
}
|
||||
if ( s.cache === false && s.type.toLowerCase() == "get" )
|
||||
s.url += (s.url.match(/\?/) ? "&" : "?") + "_=" + (new Date()).getTime();
|
||||
|
||||
// If data is available, append data to url for get requests
|
||||
if ( s.data && s.type.toLowerCase() == "get" ) {
|
||||
@ -2586,16 +2402,14 @@ jQuery.extend({
|
||||
jQuery.event.trigger( "ajaxStart" );
|
||||
|
||||
// If we're requesting a remote document
|
||||
// and trying to load JSON or Script with a GET
|
||||
if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) && ( s.dataType == "script" || s.dataType =="json" ) && s.type.toLowerCase() == "get" ) {
|
||||
// and trying to load JSON or Script
|
||||
if ( !s.url.indexOf("http") && s.dataType == "script" ) {
|
||||
var head = document.getElementsByTagName("head")[0];
|
||||
var script = document.createElement("script");
|
||||
script.src = s.url;
|
||||
if (s.scriptCharset)
|
||||
script.charset = s.scriptCharset;
|
||||
|
||||
// Handle Script loading
|
||||
if ( !jsonp ) {
|
||||
if ( !jsonp && (s.success || s.complete) ) {
|
||||
var done = false;
|
||||
|
||||
// Attach handlers for all browsers
|
||||
@ -2613,7 +2427,7 @@ jQuery.extend({
|
||||
head.appendChild(script);
|
||||
|
||||
// We handle everything using the script element injection
|
||||
return undefined;
|
||||
return;
|
||||
}
|
||||
|
||||
var requestDone = false;
|
||||
@ -2625,27 +2439,24 @@ jQuery.extend({
|
||||
// Open the socket
|
||||
xml.open(s.type, s.url, s.async);
|
||||
|
||||
// Need an extra try/catch for cross domain requests in Firefox 3
|
||||
try {
|
||||
// Set the correct header, if data is being sent
|
||||
if ( s.data )
|
||||
xml.setRequestHeader("Content-Type", s.contentType);
|
||||
// Set the correct header, if data is being sent
|
||||
if ( s.data )
|
||||
xml.setRequestHeader("Content-Type", s.contentType);
|
||||
|
||||
// Set the If-Modified-Since header, if ifModified mode.
|
||||
if ( s.ifModified )
|
||||
xml.setRequestHeader("If-Modified-Since",
|
||||
jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
|
||||
// Set the If-Modified-Since header, if ifModified mode.
|
||||
if ( s.ifModified )
|
||||
xml.setRequestHeader("If-Modified-Since",
|
||||
jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" );
|
||||
|
||||
// Set header so the called script knows that it's an XMLHttpRequest
|
||||
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
||||
} catch(e){}
|
||||
// Set header so the called script knows that it's an XMLHttpRequest
|
||||
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest");
|
||||
|
||||
// Allow custom headers/mimetypes
|
||||
if ( s.beforeSend )
|
||||
s.beforeSend(xml);
|
||||
|
||||
if ( s.global )
|
||||
jQuery.event.trigger("ajaxSend", [xml, s]);
|
||||
jQuery.event.trigger("ajaxSend", [xml, s]);
|
||||
|
||||
// Wait for a response to come back
|
||||
var onreadystatechange = function(isTimeout){
|
||||
@ -2728,6 +2539,9 @@ jQuery.extend({
|
||||
// firefox 1.5 doesn't fire statechange for sync requests
|
||||
if ( !s.async )
|
||||
onreadystatechange();
|
||||
|
||||
// return XMLHttpRequest to allow aborting the request etc.
|
||||
return xml;
|
||||
|
||||
function success(){
|
||||
// If a local callback was specified, fire it and pass it the data
|
||||
@ -2752,9 +2566,6 @@ jQuery.extend({
|
||||
if ( s.global && ! --jQuery.active )
|
||||
jQuery.event.trigger( "ajaxStop" );
|
||||
}
|
||||
|
||||
// return XMLHttpRequest to allow aborting the request etc.
|
||||
return xml;
|
||||
},
|
||||
|
||||
handleError: function( s, xml, status, e ) {
|
||||
@ -2772,9 +2583,8 @@ jQuery.extend({
|
||||
// Determines if an XMLHttpRequest was successful or not
|
||||
httpSuccess: function( r ) {
|
||||
try {
|
||||
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
|
||||
return !r.status && location.protocol == "file:" ||
|
||||
( r.status >= 200 && r.status < 300 ) || r.status == 304 || r.status == 1223 ||
|
||||
( r.status >= 200 && r.status < 300 ) || r.status == 304 ||
|
||||
jQuery.browser.safari && r.status == undefined;
|
||||
} catch(e){}
|
||||
return false;
|
||||
@ -2849,12 +2659,9 @@ jQuery.fn.extend({
|
||||
}, speed, callback) :
|
||||
|
||||
this.filter(":hidden").each(function(){
|
||||
this.style.display = this.oldblock || "";
|
||||
if ( jQuery.css(this,"display") == "none" ) {
|
||||
var elem = jQuery("<" + this.tagName + " />").appendTo("body");
|
||||
this.style.display = elem.css("display");
|
||||
elem.remove();
|
||||
}
|
||||
this.style.display = this.oldblock ? this.oldblock : "";
|
||||
if ( jQuery.css(this,"display") == "none" )
|
||||
this.style.display = "block";
|
||||
}).end();
|
||||
},
|
||||
|
||||
@ -2866,6 +2673,8 @@ jQuery.fn.extend({
|
||||
|
||||
this.filter(":visible").each(function(){
|
||||
this.oldblock = this.oldblock || jQuery.css(this,"display");
|
||||
if ( this.oldblock == "none" )
|
||||
this.oldblock = "block";
|
||||
this.style.display = "none";
|
||||
}).end();
|
||||
},
|
||||
@ -2910,13 +2719,10 @@ jQuery.fn.extend({
|
||||
},
|
||||
|
||||
animate: function( prop, speed, easing, callback ) {
|
||||
var optall = jQuery.speed(speed, easing, callback);
|
||||
var opt = jQuery.speed(speed, easing, callback);
|
||||
|
||||
return this[ optall.queue === false ? "each" : "queue" ](function(){
|
||||
if ( this.nodeType != 1)
|
||||
return false;
|
||||
|
||||
var opt = jQuery.extend({}, optall);
|
||||
return this[ opt.queue === false ? "each" : "queue" ](function(){
|
||||
opt = jQuery.extend({}, opt);
|
||||
var hidden = jQuery(this).is(":hidden"), self = this;
|
||||
|
||||
for ( var p in prop ) {
|
||||
@ -2973,7 +2779,7 @@ jQuery.fn.extend({
|
||||
},
|
||||
|
||||
queue: function(type, fn){
|
||||
if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) {
|
||||
if ( jQuery.isFunction(type) ) {
|
||||
fn = type;
|
||||
type = "fx";
|
||||
}
|
||||
@ -2982,9 +2788,6 @@ jQuery.fn.extend({
|
||||
return queue( this[0], type );
|
||||
|
||||
return this.each(function(){
|
||||
if ( this.nodeType != 1)
|
||||
return;
|
||||
|
||||
if ( fn.constructor == Array )
|
||||
queue(this, type, fn);
|
||||
else {
|
||||
@ -2996,37 +2799,21 @@ jQuery.fn.extend({
|
||||
});
|
||||
},
|
||||
|
||||
stop: function(clearQueue, gotoEnd){
|
||||
stop: function(){
|
||||
var timers = jQuery.timers;
|
||||
|
||||
if (clearQueue)
|
||||
this.queue([]);
|
||||
|
||||
this.each(function(){
|
||||
// go in reverse order so anything added to the queue during the loop is ignored
|
||||
for ( var i = timers.length - 1; i >= 0; i-- )
|
||||
if ( timers[i].elem == this ) {
|
||||
if (gotoEnd)
|
||||
// force the next step to be the last
|
||||
timers[i](true);
|
||||
timers.splice(i, 1);
|
||||
}
|
||||
});
|
||||
|
||||
// start the next in the queue if the last step wasn't forced
|
||||
if (!gotoEnd)
|
||||
this.dequeue();
|
||||
|
||||
return this;
|
||||
return this.each(function(){
|
||||
for ( var i = 0; i < timers.length; i++ )
|
||||
if ( timers[i].elem == this )
|
||||
timers.splice(i--, 1);
|
||||
}).dequeue();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
var queue = function( elem, type, array ) {
|
||||
if ( !elem )
|
||||
return undefined;
|
||||
|
||||
type = type || "fx";
|
||||
return;
|
||||
|
||||
var q = jQuery.data( elem, type + "queue" );
|
||||
|
||||
@ -3067,8 +2854,7 @@ jQuery.extend({
|
||||
// Queueing
|
||||
opt.old = opt.complete;
|
||||
opt.complete = function(){
|
||||
if ( opt.queue !== false )
|
||||
jQuery(this).dequeue();
|
||||
jQuery(this).dequeue();
|
||||
if ( jQuery.isFunction( opt.old ) )
|
||||
opt.old.apply( this );
|
||||
};
|
||||
@ -3086,7 +2872,6 @@ jQuery.extend({
|
||||
},
|
||||
|
||||
timers: [],
|
||||
timerId: null,
|
||||
|
||||
fx: function( elem, options, prop ){
|
||||
this.options = options;
|
||||
@ -3118,8 +2903,8 @@ jQuery.fx.prototype = {
|
||||
if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null )
|
||||
return this.elem[ this.prop ];
|
||||
|
||||
var r = parseFloat(jQuery.css(this.elem, this.prop, force));
|
||||
return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0;
|
||||
var r = parseFloat(jQuery.curCSS(this.elem, this.prop, force));
|
||||
return r && r > -10000 ? r : parseFloat(jQuery.css(this.elem, this.prop)) || 0;
|
||||
},
|
||||
|
||||
// Start an animation from one number to another
|
||||
@ -3133,26 +2918,24 @@ jQuery.fx.prototype = {
|
||||
this.update();
|
||||
|
||||
var self = this;
|
||||
function t(gotoEnd){
|
||||
return self.step(gotoEnd);
|
||||
function t(){
|
||||
return self.step();
|
||||
}
|
||||
|
||||
t.elem = this.elem;
|
||||
|
||||
jQuery.timers.push(t);
|
||||
|
||||
if ( jQuery.timerId == null ) {
|
||||
jQuery.timerId = setInterval(function(){
|
||||
if ( jQuery.timers.length == 1 ) {
|
||||
var timer = setInterval(function(){
|
||||
var timers = jQuery.timers;
|
||||
|
||||
for ( var i = 0; i < timers.length; i++ )
|
||||
if ( !timers[i]() )
|
||||
timers.splice(i--, 1);
|
||||
|
||||
if ( !timers.length ) {
|
||||
clearInterval( jQuery.timerId );
|
||||
jQuery.timerId = null;
|
||||
}
|
||||
if ( !timers.length )
|
||||
clearInterval( timer );
|
||||
}, 13);
|
||||
}
|
||||
},
|
||||
@ -3186,10 +2969,10 @@ jQuery.fx.prototype = {
|
||||
},
|
||||
|
||||
// Each step of an animation
|
||||
step: function(gotoEnd){
|
||||
step: function(){
|
||||
var t = (new Date()).getTime();
|
||||
|
||||
if ( gotoEnd || t > this.options.duration + this.startTime ) {
|
||||
if ( t > this.options.duration + this.startTime ) {
|
||||
this.now = this.end;
|
||||
this.pos = this.state = 1;
|
||||
this.update();
|
||||
@ -3269,7 +3052,7 @@ jQuery.fn.offset = function() {
|
||||
var left = 0, top = 0, elem = this[0], results;
|
||||
|
||||
if ( elem ) with ( jQuery.browser ) {
|
||||
var parent = elem.parentNode,
|
||||
var parent = elem.parentNode,
|
||||
offsetChild = elem,
|
||||
offsetParent = elem.offsetParent,
|
||||
doc = elem.ownerDocument,
|
||||
@ -3281,23 +3064,26 @@ jQuery.fn.offset = function() {
|
||||
var box = elem.getBoundingClientRect();
|
||||
|
||||
// Add the document scroll offsets
|
||||
add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
|
||||
box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
|
||||
add(
|
||||
box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
|
||||
box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop)
|
||||
);
|
||||
|
||||
// IE adds the HTML element's border, by default it is medium which is 2px
|
||||
// IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; }
|
||||
// IE 6 and IE 7 quirks mode the border width is overwritable by the following css html { border: 0; }
|
||||
// IE 7 standards mode, the border is always 2px
|
||||
// This border/offset is typically represented by the clientLeft and clientTop properties
|
||||
// However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS
|
||||
// Therefore this method will be off by 2px in IE while in quirksmode
|
||||
add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop );
|
||||
if ( msie ) {
|
||||
var border = jQuery("html").css("borderWidth");
|
||||
border = (border == "medium" || jQuery.boxModel && parseInt(version) >= 7) && 2 || border;
|
||||
add( -border, -border );
|
||||
}
|
||||
|
||||
// Otherwise loop through the offsetParents and parentNodes
|
||||
} else {
|
||||
|
||||
// Initial element offsets
|
||||
add( elem.offsetLeft, elem.offsetTop );
|
||||
|
||||
|
||||
// Get parent offsets
|
||||
while ( offsetParent ) {
|
||||
// Add offsetParent offsets
|
||||
@ -3319,9 +3105,9 @@ jQuery.fn.offset = function() {
|
||||
}
|
||||
|
||||
// Get parent scroll offsets
|
||||
while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
|
||||
// Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug
|
||||
if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) )
|
||||
while ( parent.tagName && !/^body|html$/i.test(parent.tagName) ) {
|
||||
// Remove parent scroll UNLESS that parent is inline or a table-row to work around Opera inline/table scrollLeft/Top bug
|
||||
if ( !/^inline|table-row.*$/i.test(jQuery.css(parent, "display")) )
|
||||
// Subtract parent scroll offsets
|
||||
add( -parent.scrollLeft, -parent.scrollTop );
|
||||
|
||||
@ -3336,28 +3122,30 @@ jQuery.fn.offset = function() {
|
||||
// Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild
|
||||
// Mozilla doubles body offsets with a non-absolutely positioned offsetChild
|
||||
if ( (safari2 && (fixed || jQuery.css(offsetChild, "position") == "absolute")) ||
|
||||
(mozilla && jQuery.css(offsetChild, "position") != "absolute") )
|
||||
(mozilla && jQuery.css(offsetChild, "position") != "absoltue") )
|
||||
add( -doc.body.offsetLeft, -doc.body.offsetTop );
|
||||
|
||||
// Add the document scroll offsets if position is fixed
|
||||
if ( fixed )
|
||||
add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
|
||||
Math.max(doc.documentElement.scrollTop, doc.body.scrollTop));
|
||||
add(
|
||||
Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft),
|
||||
Math.max(doc.documentElement.scrollTop, doc.body.scrollTop)
|
||||
);
|
||||
}
|
||||
|
||||
// Return an object with top and left properties
|
||||
results = { top: top, left: left };
|
||||
}
|
||||
|
||||
return results;
|
||||
|
||||
function border(elem) {
|
||||
add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) );
|
||||
add( jQuery.css(elem, "borderLeftWidth"), jQuery.css(elem, "borderTopWidth") );
|
||||
}
|
||||
|
||||
function add(l, t) {
|
||||
left += parseInt(l) || 0;
|
||||
top += parseInt(t) || 0;
|
||||
}
|
||||
|
||||
return results;
|
||||
};
|
||||
})();
|
||||
|
104
thirdparty/jquery-metadata/test/test.js
vendored
Normal file → Executable file
104
thirdparty/jquery-metadata/test/test.js
vendored
Normal file → Executable file
@ -1,79 +1,85 @@
|
||||
function testData(index) {
|
||||
var data = jQuery.metadata.get(this);
|
||||
switch(index) {
|
||||
case 0:
|
||||
ok( data.foo == "bar", "Check foo property" );
|
||||
ok( data.bar == "baz", "Check baz property" );
|
||||
ok( data.arr[0] == 1, "Check arr[0] property" );
|
||||
ok( data.arr[1] == 2, "Check arr[1] property" );
|
||||
break;
|
||||
case 1:
|
||||
ok( data.test == "bar", "Check test property" );
|
||||
ok( data.bar == "baz", "Check bar property" );
|
||||
break;
|
||||
case 2:
|
||||
ok( data.zoooo == "bar", "Check zoooo property" );
|
||||
ok( data.bar.test == "baz", "Check bar.test property" );
|
||||
break;
|
||||
case 3:
|
||||
ok( data.number, "Check number property" );
|
||||
ok( data.stuff[0] == 2, "Check stuff[0] property" );
|
||||
ok( data.stuff[1] == 8, "Check stuff[1] property" );
|
||||
break;
|
||||
default:
|
||||
ok( false, ["Assertion failed on index ", index, ", with data ", data].join('') );
|
||||
}
|
||||
var data = jQuery.metadata.get(this);
|
||||
switch(index) {
|
||||
case 0:
|
||||
ok( data.foo == "bar", "Check foo property" );
|
||||
ok( data.bar == "baz", "Check baz property" );
|
||||
ok( data.arr[0] == 1, "Check arr[0] property" );
|
||||
ok( data.arr[1] == 2, "Check arr[1] property" );
|
||||
break;
|
||||
case 1:
|
||||
ok( data.test == "bar", "Check test property" );
|
||||
ok( data.bar == "baz", "Check bar property" );
|
||||
break;
|
||||
case 2:
|
||||
ok( data.zoooo == "bar", "Check zoooo property" );
|
||||
ok( data.bar.test == "baz", "Check bar.test property" );
|
||||
break;
|
||||
case 3:
|
||||
ok( data.number, "Check number property" );
|
||||
ok( data.stuff[0] == 2, "Check stuff[0] property" );
|
||||
ok( data.stuff[1] == 8, "Check stuff[1] property" );
|
||||
break;
|
||||
default:
|
||||
ok( false, ["Assertion failed on index ", index, ", with data ", data].join('') );
|
||||
}
|
||||
}
|
||||
|
||||
// check if set can be intercepted without breaking metadata plugin
|
||||
var oldSet = jQuery.fn.set;
|
||||
jQuery.fn.set = function() {
|
||||
ok( true, "set was interecepted" );
|
||||
oldSet.apply(this, arguments);
|
||||
ok( true, "set was interecepted" );
|
||||
oldSet.apply(this, arguments);
|
||||
};
|
||||
|
||||
//jQuery.meta.single = "";
|
||||
|
||||
test("meta: type attr - from data attribute", function() {
|
||||
expect(11);
|
||||
jQuery.metadata.setType("attr", "data");
|
||||
jQuery("#one li").each(testData);
|
||||
expect(11);
|
||||
jQuery.metadata.setType("attr", "data");
|
||||
jQuery("#one li").each(testData);
|
||||
});
|
||||
|
||||
test("meta: type class - from className", function() {
|
||||
expect(11);
|
||||
jQuery.metadata.setType( "class" );
|
||||
jQuery("#two li").each(testData);
|
||||
expect(11);
|
||||
jQuery.metadata.setType( "class" );
|
||||
jQuery("#two li").each(testData);
|
||||
});
|
||||
|
||||
test("meta: children script element - get data from child script element", function() {
|
||||
expect(11);
|
||||
jQuery.metadata.setType( "elem", "script" );
|
||||
jQuery("#three li").each(testData);
|
||||
expect(11);
|
||||
jQuery.metadata.setType( "elem", "script" );
|
||||
jQuery("#three li").each(testData);
|
||||
});
|
||||
|
||||
test("check if window doesn't break anything", function() {
|
||||
jQuery(window).get();
|
||||
jQuery(window).get();
|
||||
});
|
||||
|
||||
test("meta: default with single data object", function() {
|
||||
expect(11);
|
||||
jQuery.metadata.setType("attr","data");
|
||||
jQuery.metadata.defaults.single = "data";
|
||||
jQuery("#four li").each(testData);
|
||||
expect(11);
|
||||
jQuery.metadata.setType("attr","data");
|
||||
jQuery.metadata.defaults.single = "data";
|
||||
jQuery("#four li").each(testData);
|
||||
});
|
||||
|
||||
test("meta with select and class", function() {
|
||||
expect(2);
|
||||
jQuery.metadata.setType("class");
|
||||
jQuery.metadata.single = "stuff";
|
||||
var e = $('#meal').metadata();
|
||||
ok( e, "data property" );
|
||||
ok( e.required, "property on data property" );
|
||||
expect(2);
|
||||
jQuery.metadata.setType("class");
|
||||
jQuery.metadata.single = "stuff";
|
||||
var e = $('#meal').metadata();
|
||||
ok( e, "data property" );
|
||||
ok( e.required, "property on data property" );
|
||||
});
|
||||
|
||||
test("try to add and remove classes on metadata elements", function() {
|
||||
$("#two li").addClass("foobar").addClass("foo bar").removeClass("foobar");
|
||||
ok( $("#two li").is(".foo"), 'Check class foo was added.' );
|
||||
ok( $("#two li").is(".bar"), 'Check class bar was added.' );
|
||||
$("#two li").addClass("foobar").addClass("foo bar").removeClass("foobar");
|
||||
ok( $("#two li").is(".foo"), 'Check class foo was added.' );
|
||||
ok( $("#two li").is(".bar"), 'Check class bar was added.' );
|
||||
});
|
||||
|
||||
test("meta: type html5 - from data-*", function() {
|
||||
expect(11);
|
||||
jQuery.metadata.setType("html5");
|
||||
jQuery("#five li").each(testData);
|
||||
});
|
0
thirdparty/jquery-metadata/test/testrunner.js
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/test/testrunner.js
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/test/testsuite.css
vendored
Normal file → Executable file
0
thirdparty/jquery-metadata/test/testsuite.css
vendored
Normal file → Executable file
Loading…
Reference in New Issue
Block a user