dfect 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/doc/api/classes/Dfect.html +138 -132
- data/doc/api/classes/Kernel.html +322 -0
- data/doc/api/created.rid +1 -1
- data/doc/api/files/lib/dfect/mini_rb.html +77 -0
- data/doc/api/files/lib/dfect/spec_rb.html +75 -0
- data/doc/api/files/lib/dfect/unit_rb.html +73 -0
- data/doc/api/files/lib/dfect_rb.html +1 -1
- data/doc/api/panel/search_index.js +1 -1
- data/doc/api/panel/tree.js +1 -1
- data/doc/history.erb +49 -1
- data/doc/index.erb +5 -0
- data/doc/index.xhtml +187 -127
- data/doc/intro.erb +48 -12
- data/doc/setup.erb +7 -18
- data/doc/usage.erb +5 -0
- data/lib/dfect.rb +27 -14
- data/lib/dfect/mini.rb +91 -0
- data/lib/dfect/spec.rb +39 -0
- data/lib/dfect/unit.rb +105 -0
- data/rakefile +3 -3
- data/test/dfect.rb +9 -21
- metadata +11 -4
@@ -0,0 +1,73 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
3
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
4
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
5
|
+
<head>
|
6
|
+
<title>unit.rb</title>
|
7
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
8
|
+
<link rel="stylesheet" href="../../../css/reset.css" type="text/css" media="screen" />
|
9
|
+
<link rel="stylesheet" href="../../../css/main.css" type="text/css" media="screen" />
|
10
|
+
<script src="../../../js/jquery-1.3.2.min.js" type="text/javascript" charset="utf-8"></script>
|
11
|
+
<script src="../../../js/jquery-effect.js" type="text/javascript" charset="utf-8"></script>
|
12
|
+
<script src="../../../js/main.js" type="text/javascript" charset="utf-8"></script>
|
13
|
+
</head>
|
14
|
+
|
15
|
+
<body>
|
16
|
+
<div class="banner">
|
17
|
+
<h1>
|
18
|
+
unit.rb
|
19
|
+
</h1>
|
20
|
+
<ul class="files">
|
21
|
+
<li>lib/dfect/unit.rb</li>
|
22
|
+
<li>Last modified: Sun May 03 21:45:24 -0700 2009</li>
|
23
|
+
</ul>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div id="bodyContent">
|
27
|
+
<div id="content">
|
28
|
+
|
29
|
+
<div class="description">
|
30
|
+
<p>
|
31
|
+
Test::Unit emulation layer.
|
32
|
+
</p>
|
33
|
+
|
34
|
+
</div>
|
35
|
+
|
36
|
+
|
37
|
+
|
38
|
+
<div class="sectiontitle">Required Files</div>
|
39
|
+
<ul>
|
40
|
+
|
41
|
+
<li>dfect</li>
|
42
|
+
|
43
|
+
</ul>
|
44
|
+
|
45
|
+
|
46
|
+
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
<div class="sectiontitle">Classes and Modules</div>
|
58
|
+
<ul>
|
59
|
+
|
60
|
+
<li><span class="type">MODULE</span> <a href="../../../classes/Kernel.html">Kernel</a></li>
|
61
|
+
|
62
|
+
</ul>
|
63
|
+
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
</body>
|
73
|
+
</html>
|
@@ -1 +1 @@
|
|
1
|
-
var search_data = {"index":{"
|
1
|
+
var search_data = {"index":{"info":[["Dfect","lib\/dfect.rb","classes\/Dfect.html","","",1],["Kernel","lib\/dfect\/spec.rb","classes\/Kernel.html","","",1],["Object","lib\/dfect\/auto.rb","classes\/Object.html"," < Object","",1],["<","Dfect","classes\/Dfect.html#M000008","(*args, &block)","Registers the given block to be executed before each nested test inside this test. ==== Examples D .<",2],["<<","Dfect","classes\/Dfect.html#M000010","(&block)","Registers the given block to be executed before all nested tests inside this test. ==== Examples D .<<",2],[">","Dfect","classes\/Dfect.html#M000009","(&block)","Registers the given block to be executed after each nested test inside this test. ==== Examples D .>",2],[">>","Dfect","classes\/Dfect.html#M000011","(&block)","Registers the given block to be executed after all nested tests inside this test. ==== Examples D .>>",2],["C","Dfect","classes\/Dfect.html#M000019","(message = nil, symbol = nil, &block)","Asserts that the given symbol is thrown when the given block is executed. If a value is thrown along",2],["C!","Dfect","classes\/Dfect.html#M000020","(message = nil, symbol = nil, &block)","Asserts that the given symbol is not thrown when the given block is executed. Returns nil, always. ====",2],["C?","Dfect","classes\/Dfect.html#M000021","(message = nil, symbol = nil, &block)","Returns true if the given symbol is thrown when the given block is executed. Otherwise, returns false.",2],["D","Dfect","classes\/Dfect.html#M000007","(description = caller.first, &block)","Defines a new test, composed of the given description and the given block to execute. A test may contain",2],["E","Dfect","classes\/Dfect.html#M000016","(message = nil, *kinds, &block)","Asserts that one of the given kinds of exceptions is raised when the given block is executed. If the",2],["E!","Dfect","classes\/Dfect.html#M000017","(message = nil, *kinds, &block)","Asserts that one of the given kinds of exceptions is not raised when the given block is executed. If",2],["E?","Dfect","classes\/Dfect.html#M000018","(message = nil, *kinds, &block)","Returns true if one of the given kinds of exceptions is raised when the given block is executed. Otherwise,",2],["F?","Dfect","classes\/Dfect.html#M000015","(message = nil, &block)","Returns true if the result of the given block is either nil or false. Otherwise, returns false. ====",2],["T","Dfect","classes\/Dfect.html#M000012","(message = nil, &block)","Asserts that the result of the given block is neither nil nor false and returns that result. ==== Parameters",2],["T!","Dfect","classes\/Dfect.html#M000013","(message = nil, &block)","Asserts that the result of the given block is either nil or false and returns that result. ==== Parameters",2],["T?","Dfect","classes\/Dfect.html#M000014","(message = nil, &block)","Returns true if the result of the given block is neither nil nor false. Otherwise, returns false. ====",2],["after","Kernel","classes\/Kernel.html#M000006","(what, &block)","",2],["before","Kernel","classes\/Kernel.html#M000005","(what, &block)","",2],["context","Kernel","classes\/Kernel.html#M000003","(*args, &block)","Alias for #describe",2],["describe","Kernel","classes\/Kernel.html#M000002","(*args, &block)","",2],["it","Kernel","classes\/Kernel.html#M000004","(*args, &block)","Alias for #describe",2],["run","Dfect","classes\/Dfect.html#M000022","(continue = true)","Executes all tests defined thus far and stores the results in #report. ==== Parameters [continue] If",2],["setup","Kernel","classes\/Kernel.html#M000000","(&block)","",2],["stop","Dfect","classes\/Dfect.html#M000023","()","Stops the execution of the #run method or raises an exception if that method is not currently executing.",2],["teardown","Kernel","classes\/Kernel.html#M000001","(&block)","",2],["CREDITS","files\/CREDITS.html","files\/CREDITS.html","","* [Fran\u00e7ois Beausoleil](http:\/\/github.com\/francois) ",3],["LICENSE","files\/LICENSE.html","files\/LICENSE.html","","(the ISC license) Copyright 2009 Suraj N. Kurapati <sunaku@gmail.com> Permission to use, copy, modify,",3],["dfect.rb","files\/lib\/dfect_rb.html","files\/lib\/dfect_rb.html",""," ",3],["auto.rb","files\/lib\/dfect\/auto_rb.html","files\/lib\/dfect\/auto_rb.html","","Provides painless, automatic configuration of Dfect. Simply require() this file and Dfect will be available",3],["mini.rb","files\/lib\/dfect\/mini_rb.html","files\/lib\/dfect\/mini_rb.html","","MiniTest emulation layer. ",3],["spec.rb","files\/lib\/dfect\/spec_rb.html","files\/lib\/dfect\/spec_rb.html","","RSpec emulation layer. ",3],["unit.rb","files\/lib\/dfect\/unit_rb.html","files\/lib\/dfect\/unit_rb.html","","Test::Unit emulation layer. ",3]],"searchIndex":["dfect","kernel","object","<()","<<()",">()",">>()","c()","c!()","c?()","d()","e()","e!()","e?()","f?()","t()","t!()","t?()","after()","before()","context()","describe()","it()","run()","setup()","stop()","teardown()","credits","license","dfect.rb","auto.rb","mini.rb","spec.rb","unit.rb"],"longSearchIndex":["dfect.rb","spec.rb","auto.rb","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","dfect","kernel","kernel","kernel","kernel","kernel","dfect","kernel","dfect","kernel","files\/credits.html","files\/license.html","files\/lib\/dfect_rb.html","files\/lib\/dfect\/auto_rb.html","files\/lib\/dfect\/mini_rb.html","files\/lib\/dfect\/spec_rb.html","files\/lib\/dfect\/unit_rb.html"]}}
|
data/doc/api/panel/tree.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
var tree = [["Dfect","classes\/Dfect.html","",[]],["Object","classes\/Object.html"," < Object",[]]]
|
1
|
+
var tree = [["Dfect","classes\/Dfect.html","",[]],["Kernel","classes\/Kernel.html","",[]],["Object","classes\/Object.html"," < Object",[]]]
|
data/doc/history.erb
CHANGED
@@ -1,5 +1,53 @@
|
|
1
|
+
%#--
|
2
|
+
%# Copyright 2009 Suraj N. Kurapati
|
3
|
+
%# See the LICENSE file for details.
|
4
|
+
%#++
|
5
|
+
|
1
6
|
%|chapter "History"
|
7
|
+
% sean_ohalpin_musing = "[Sean O'Halpin's musing](http://www.ruby-forum.com/topic/183354#801895)"
|
8
|
+
|
2
9
|
%|history
|
10
|
+
For the longest time, I took <%= competitors.link_for 'Test::Unit' %> and <%= competitors.link_for 'RSpec' %> for granted. They were the epitomy of modern Ruby practice; the insurmountable status quo; immortalized in books, conferences, and blogs alike.
|
11
|
+
|
12
|
+
Why would *anyone* think of using anything remotely different, let alone be foolish enough to write an alternative testing library when these are clearly *good enough*?
|
13
|
+
|
14
|
+
Recent experiments in assertion testing libraries smashed my world view:
|
15
|
+
* <%= competitors.link_for 'assert{ 2.0 }' %>
|
16
|
+
* <%= competitors.link_for 'Testy' %>
|
17
|
+
* <%= competitors.link_for 'Verify' %>
|
18
|
+
|
19
|
+
The status quo was certainly *not* "good enough", as I had so blindly believed all these years. In fact, they were *verbose* behemoths that chose to encode endless permutations of conjecture into methods.
|
20
|
+
|
21
|
+
Empowered by this revelation and inspired by <%= sean_ohalpin_musing %> on alternative names for assertion methods, I rose to challenge the status quo.
|
22
|
+
|
23
|
+
%|section "Version 1.0.0 (2009-05-03)"
|
24
|
+
This release improves default choices, adds emulation layers to mimic other testing libraries, and fixes some bugs.
|
25
|
+
|
26
|
+
%|paragraph "Incompatible changes"
|
27
|
+
* The `:debug` option is now enabled by default and is no longer linked to the value of `$DEBUG`.
|
28
|
+
|
29
|
+
* `Dfect.run()` now appends to previous results by default.
|
30
|
+
|
31
|
+
This behavior can be disabled by passing `false` to the method.
|
32
|
+
|
33
|
+
%|paragraph "New features"
|
34
|
+
* Add emulation layers to mimic other testing libraries:
|
35
|
+
* <tt>dfect/unit</tt> --- Test::Unit
|
36
|
+
* <tt>dfect/mini</tt> --- Minitest
|
37
|
+
* <tt>dfect/spec</tt> --- RSpec
|
38
|
+
|
39
|
+
%|paragraph "Bug fixes"
|
40
|
+
* Do not blindly replace `Class#to_yaml`; it might be fixed someday.
|
41
|
+
|
42
|
+
%|paragraph "Housekeeping"
|
43
|
+
* Add <%= xref "Motivation" %> section in user manual to promote interactive debugging.
|
44
|
+
|
45
|
+
* Add brief <%= xref "History" %> of this project's inception.
|
46
|
+
|
47
|
+
* Remove redundant assertions for F!() and T!() methods in test suite.
|
48
|
+
|
49
|
+
* Add copyright notice at the top of every file.
|
50
|
+
|
3
51
|
%|section "Version 0.1.0 (2009-04-28)"
|
4
52
|
This release adds new variations to assertion methods, fixes several bugs, and improves test coverage.
|
5
53
|
|
@@ -30,4 +78,4 @@
|
|
30
78
|
* Filled the big holes in test coverage. Everything except the runtime debugging logic is now covered by the unit tests.
|
31
79
|
|
32
80
|
%|section "Version 0.0.0 (2009-04-13)"
|
33
|
-
This is the first public release of <%= $project %>. It was inspired by
|
81
|
+
This is the first public release of <%= $project %>. It was inspired by <%= sean_ohalpin_musing %> on alternative names for assertion methods.
|
data/doc/index.erb
CHANGED
data/doc/index.xhtml
CHANGED
@@ -19,11 +19,11 @@
|
|
19
19
|
<meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/>
|
20
20
|
<meta name="generator" content="ERBook 7.0.0"/>
|
21
21
|
|
22
|
-
<title>Dfect
|
22
|
+
<title>Dfect 1.0.0</title>
|
23
23
|
|
24
24
|
<meta name="author" content="Suraj N. Kurapati"/>
|
25
25
|
|
26
|
-
<meta name="date" content="
|
26
|
+
<meta name="date" content="04 May 2009"/>
|
27
27
|
|
28
28
|
<link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/dfect/ann.xml"/>
|
29
29
|
|
@@ -64,7 +64,7 @@
|
|
64
64
|
|
65
65
|
<script type="text/javascript">
|
66
66
|
//<![CDATA[
|
67
|
-
/*
|
67
|
+
/*
|
68
68
|
* jQuery JavaScript Library v1.3.2
|
69
69
|
* http://jquery.com/
|
70
70
|
*
|
@@ -82,7 +82,8 @@
|
|
82
82
|
* Released under the MIT, BSD, and GPL Licenses.
|
83
83
|
* More information: http://sizzlejs.com/
|
84
84
|
*/
|
85
|
-
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();/**
|
85
|
+
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML=' <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
|
86
|
+
/**
|
86
87
|
* jQuery.ScrollTo - Easy element scrolling using jQuery.
|
87
88
|
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
88
89
|
* Dual licensed under MIT and GPL.
|
@@ -92,7 +93,8 @@
|
|
92
93
|
*
|
93
94
|
* http://flesler.blogspot.com/2007/10/jqueryscrollto.html
|
94
95
|
*/
|
95
|
-
;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery)
|
96
|
+
;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);
|
97
|
+
/**
|
96
98
|
* jQuery.LocalScroll - Animated scrolling navigation, using anchors.
|
97
99
|
* Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
|
98
100
|
* Dual licensed under MIT and GPL.
|
@@ -101,6 +103,7 @@
|
|
101
103
|
* @version 1.2.7
|
102
104
|
**/
|
103
105
|
;(function($){var l=location.href.replace(/#.*/,'');var g=$.localScroll=function(a){$('body').localScroll(a)};g.defaults={duration:1e3,axis:'y',event:'click',stop:true,target:window,reset:true};g.hash=function(a){if(location.hash){a=$.extend({},g.defaults,a);a.hash=false;if(a.reset){var e=a.duration;delete a.duration;$(a.target).scrollTo(0,a);a.duration=e}i(0,location,a)}};$.fn.localScroll=function(b){b=$.extend({},g.defaults,b);return b.lazy?this.bind(b.event,function(a){var e=$([a.target,a.target.parentNode]).filter(d)[0];if(e)i(a,e,b)}):this.find('a,area').filter(d).bind(b.event,function(a){i(a,this,b)}).end().end();function d(){return!!this.href&&!!this.hash&&this.href.replace(this.hash,'')==l&&(!b.filter||$(this).is(b.filter))}};function i(a,e,b){var d=e.hash.slice(1),f=document.getElementById(d)||document.getElementsByName(d)[0];if(!f)return;if(a)a.preventDefault();var h=$(b.target);if(b.lock&&h.is(':animated')||b.onBefore&&b.onBefore.call(b,a,f,h)===false)return;if(b.stop)h.stop(true);if(b.hash){var j=f.id==d?'id':'name',k=$('<a> </a>').attr(j,d).css({position:'absolute',top:$(window).scrollTop(),left:$(window).scrollLeft()});f[j]='';$('body').prepend(k);location=e.hash;k.remove();f[j]=d}h.scrollTo(f,b).trigger('notify.serialScroll',[f])}})(jQuery);
|
106
|
+
|
104
107
|
$(document).ready(
|
105
108
|
function(){
|
106
109
|
$.localScroll({
|
@@ -129,13 +132,14 @@
|
|
129
132
|
<div id="header">
|
130
133
|
|
131
134
|
|
132
|
-
|
135
|
+
|
136
|
+
<h1 class="title">Dfect 1.0.0</h1>
|
133
137
|
|
134
138
|
<h2 class="subtitle">Assertion testing library for Ruby</h2>
|
135
139
|
|
136
140
|
<h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3>
|
137
141
|
|
138
|
-
<h3 class="date">
|
142
|
+
<h3 class="date">04 May 2009</h3>
|
139
143
|
|
140
144
|
|
141
145
|
</div>
|
@@ -151,12 +155,12 @@
|
|
151
155
|
|
152
156
|
|
153
157
|
<div id="toc">
|
154
|
-
<a name="Contents"/><div class="nav" id="Contents"><a title="Focus this segment" href="#Contents"><img class="icon" src="&icon_nav_here;"
|
158
|
+
<a name="Contents"/><div class="nav" id="Contents"><a title="Focus this segment" href="#Contents"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Contents"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
155
159
|
<h1 class="title">Contents</h1>
|
156
|
-
<ul><li>1 <a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1 <a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li
|
160
|
+
<ul><li>1 <a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1 <a id="rev:Motivation" href="#Motivation">Motivation</a></li><li>1.2 <a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li><li><a id="rev:License" href="#License">License</a></li></ul></li><li>1.3 <a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2 <a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1 <a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2 <a id="rev:Installation" href="#Installation">Installation</a></li></ul></li><li>3 <a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1 <a id="rev:Assertions" href="#Assertions">Assertions</a><ul><li><a id="rev:Negation" href="#Negation">Negation</a></li><li><a id="rev:Sampling" href="#Sampling">Sampling</a></li><li>3.1.1 <a id="rev:Failures" href="#Failures">Failures</a></li></ul></li><li>3.2 <a id="rev:Tests" href="#Tests">Tests</a><ul><li>3.2.1 <a id="rev:Hooks" href="#Hooks">Hooks</a></li><li>3.2.2 <a id="rev:Insulation" href="#Insulation">Insulation</a></li></ul></li><li>3.3 <a id="rev:Execution" href="#Execution">Execution</a><ul><li>3.3.1 <a id="rev:Automatic-test-execution" href="#Automatic-test-execution">Automatic test execution</a></li></ul></li></ul></li><li>4 <a id="rev:History" href="#History">History</a><ul><li>4.1 <a id="rev:Version-1.0.0-2009-05-03" href="#Version-1.0.0-2009-05-03">Version 1.0.0 (2009-05-03)</a><ul><li><a id="rev:Incompatible-changes" href="#Incompatible-changes">Incompatible changes</a></li><li><a id="rev:New-features" href="#New-features">New features</a></li><li><a id="rev:Bug-fixes" href="#Bug-fixes">Bug fixes</a></li><li><a id="rev:Housekeeping" href="#Housekeeping">Housekeeping</a></li></ul></li><li>4.2 <a id="rev:Version-0.1.0-2009-04-28" href="#Version-0.1.0-2009-04-28">Version 0.1.0 (2009-04-28)</a><ul><li><a id="rev:Thank-you" href="#Thank-you">Thank you</a></li><li><a id="rev:New-features-615768778" href="#New-features-615768778">New features</a></li><li><a id="rev:Bug-fixes-615787488" href="#Bug-fixes-615787488">Bug fixes</a></li><li><a id="rev:Housekeeping-615791368" href="#Housekeeping-615791368">Housekeeping</a></li></ul></li><li>4.3 <a id="rev:Version-0.0.0-2009-04-13" href="#Version-0.0.0-2009-04-13">Version 0.0.0 (2009-04-13)</a></li></ul></li></ul>
|
157
161
|
</div>
|
158
162
|
|
159
|
-
<div id="lof"><a name="Examples"/><div class="nav" id="Examples"><a title="Focus this segment" href="#Examples"><img class="icon" src="&icon_nav_here;"
|
163
|
+
<div id="lof"><a name="Examples"/><div class="nav" id="Examples"><a title="Focus this segment" href="#Examples"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Examples"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div><h2 class="title">Examples</h2> <ol><li><a id="rev:A-sample-unit-test" href="#A-sample-unit-test">A sample unit test</a></li></ol></div>
|
160
164
|
|
161
165
|
<br style="display: none"/>
|
162
166
|
<hr style="display: none"/>
|
@@ -165,8 +169,10 @@
|
|
165
169
|
|
166
170
|
<div id="content">
|
167
171
|
|
172
|
+
|
173
|
+
|
168
174
|
<div class="chapter">
|
169
|
-
<a name="Introduction"/><div class="nav" id="Introduction"><a title="Focus this segment" href="#Introduction"><img class="icon" src="&icon_nav_here;"
|
175
|
+
<a name="Introduction"/><div class="nav" id="Introduction"><a title="Focus this segment" href="#Introduction"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus next segment" href="#Etymology"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Introduction"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
170
176
|
<h1 class="title">
|
171
177
|
Chapter 1
|
172
178
|
<br/>
|
@@ -185,33 +191,33 @@
|
|
185
191
|
|
186
192
|
<li>It lets you nest tests and execution hooks.</li>
|
187
193
|
|
188
|
-
<li>It is implemented in a mere
|
189
|
-
</ul><p>These features distinguish Dfect from the competition:</p>
|
194
|
+
<li>It is implemented in a mere 479 lines of code.</li>
|
195
|
+
</ul><p> These features distinguish Dfect from the competition:</p>
|
190
196
|
|
191
197
|
<ul>
|
192
198
|
<li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li>
|
193
199
|
|
194
|
-
<li><a href='http://
|
200
|
+
<li><a href='http://chneukirchen.org/repos/bacon/README'>Bacon</a></li>
|
195
201
|
|
196
|
-
<li><a href='http://
|
202
|
+
<li><a href='http://github.com/jeremymcanally/context'>Context</a></li>
|
197
203
|
|
198
204
|
<li><a href='http://blog.zenspider.com/minitest'>minitest</a></li>
|
199
205
|
|
200
|
-
<li><a href='http://
|
206
|
+
<li><a href='http://rspec.info'>RSpec</a></li>
|
201
207
|
|
202
208
|
<li><a href='http://thoughtbot.com/projects/shoulda'>Shoulda</a></li>
|
203
209
|
|
204
|
-
<li><a href='http://chneukirchen.org/repos/bacon/README'>Bacon</a></li>
|
205
|
-
|
206
210
|
<li><a href='http://test-spec.rubyforge.org/test-spec'>test-spec</a></li>
|
207
211
|
|
208
|
-
<li><a href='http://rspec.info'>RSpec</a></li>
|
209
|
-
|
210
212
|
<li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a></li>
|
213
|
+
|
214
|
+
<li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li>
|
215
|
+
|
216
|
+
<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li>
|
211
217
|
</ul>
|
212
218
|
|
213
219
|
<div class="paragraph">
|
214
|
-
<a name="Etymology"/><div class="nav" id="Etymology"><a title="Focus this segment" href="#Etymology"><img class="icon" src="&icon_nav_here;"
|
220
|
+
<a name="Etymology"/><div class="nav" id="Etymology"><a title="Focus this segment" href="#Etymology"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Introduction"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Motivation"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Etymology"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
215
221
|
<p class="title">Etymology</p>
|
216
222
|
<div class="content"><p>Dfect is named after the D F E C T methods it provides.</p>
|
217
223
|
|
@@ -219,9 +225,27 @@
|
|
219
225
|
|
220
226
|
<p>This wordplay is similar to <a href='http://www.erlang.org/doc/apps/mnesia/index.html'>Mnesia</a>’s play on the word “amnesia”, whereby the intentional omission of the letter “A” indicates forgetfulness—the key characteristic of having amnesia. Clever!</p></div>
|
221
227
|
</div><div class="section">
|
222
|
-
<a name="
|
228
|
+
<a name="Motivation"/><div class="nav" id="Motivation"><a title="Focus this segment" href="#Motivation"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Etymology"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Logistics"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Motivation"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
223
229
|
<h2 class="title">
|
224
|
-
1.1
|
230
|
+
1.1 Motivation
|
231
|
+
</h2>
|
232
|
+
<div class="content"><p>The basic premise of Dfect is that, when a failure occurs, I want to be put inside an interactive debugger where I have the freedom to properly scrutinize the state of my program and determine the root cause of the failure.</p>
|
233
|
+
|
234
|
+
<p>Other testing libraries do not fulfill this need. Instead, they simply report each failed assertion along with a stack trace (if I am lucky) and abruptly terminate my program.</p>
|
235
|
+
|
236
|
+
<p>This deliberate separation of <em>fault</em> (my program being in an erroneous state) and <em>cause</em> (the source code of my program which caused the fault) reduces me to a primitive and laborious investigative technique known as ”<a href='http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html#PRINTF'>printf debugging</a>”.</p>
|
237
|
+
|
238
|
+
<p>If you are not the least bit <em>unsettled</em> by those two words, then recall your first encounter with <a href='http://tryruby.hobix.com/'>IRB, the interactive Ruby shell</a>: remember how you would enter code expressions and IRB would <em>instantly</em> evaluate them and show you the result?</p>
|
239
|
+
|
240
|
+
<p>What an immense productivity boost! A <em>stark contrast</em> to the endless toil of wrapping every such experiment in standard boilerplate (<code class="line">public static void</code>…), saving the result to a correctly named file, invoking the C/C++/Java compiler, and finally executing the binary—only to be greeted by a <a href='http://en.wikipedia.org/wiki/Segmentation_fault'>segfault</a>. ;-)</p>
|
241
|
+
|
242
|
+
<p>I exaggerate, for the sake of entertainment, of course. But my point is that the Ruby testing libraries of today have (thus far) limited our productivity by orphaning us from the nurturing environment of IRB and shooing us off to a barren desert of antiquated techniques. How cruel!</p>
|
243
|
+
|
244
|
+
<p>And that, I say, is why Dfect is essential to Ruby developers today. It reunites us with our playful, interactive, <em>real-time</em> IRB roots and, with unwavering tenacity, enables us to investigate failures <em>productively</em>!</p></div>
|
245
|
+
</div><div class="section">
|
246
|
+
<a name="Logistics"/><div class="nav" id="Logistics"><a title="Focus this segment" href="#Logistics"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Motivation"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-numbers"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Logistics"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
247
|
+
<h2 class="title">
|
248
|
+
1.2 Logistics
|
225
249
|
</h2>
|
226
250
|
<div class="content"><ul>
|
227
251
|
<li><a class="xref" href="#History" title="Chapter 4. "History"">Release notes</a> — history of project releases.</li>
|
@@ -229,12 +253,14 @@
|
|
229
253
|
<li><a href='http://github.com/sunaku/dfect'>Source code</a> — obtain via <a href='http://git-scm.com'>Git</a> or browse online.</li>
|
230
254
|
|
231
255
|
<li><a href='./api/index.html'>API reference</a> — documentation for source code.</li>
|
256
|
+
|
257
|
+
<li><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> — the Dfect project home page.</li>
|
232
258
|
</ul>
|
233
259
|
|
234
|
-
<p>To get help or provide feedback, simply <a class="xref" href="#License" title="
|
260
|
+
<p>To get help or provide feedback, simply <a class="xref" href="#License" title="Paragraph. "License"">contact the author(s)</a>.</p>
|
235
261
|
|
236
262
|
<div class="paragraph">
|
237
|
-
<a name="Version-numbers"/><div class="nav" id="Version-numbers"><a title="Focus this segment" href="#Version-numbers"><img class="icon" src="&icon_nav_here;"
|
263
|
+
<a name="Version-numbers"/><div class="nav" id="Version-numbers"><a title="Focus this segment" href="#Version-numbers"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Logistics"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#License"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-numbers"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
238
264
|
<p class="title">Version numbers</p>
|
239
265
|
<div class="content"><p>Dfect releases are numbered in <em>major.minor.patch</em> form according to the <a href='http://www.rubygems.org/read/chapter/7'>RubyGems rational versioning policy</a>, which can be summarized thus:</p>
|
240
266
|
<table border="1">
|
@@ -270,12 +296,9 @@
|
|
270
296
|
</tr>
|
271
297
|
</tbody>
|
272
298
|
</table></div>
|
273
|
-
</div><
|
274
|
-
|
275
|
-
<
|
276
|
-
<h2 class="title">
|
277
|
-
1.2 License
|
278
|
-
</h2>
|
299
|
+
</div><div class="paragraph">
|
300
|
+
<a name="License"/><div class="nav" id="License"><a title="Focus this segment" href="#License"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-numbers"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Credits"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:License"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
301
|
+
<p class="title">License</p>
|
279
302
|
<div class="content"><p>(the ISC license)</p>
|
280
303
|
|
281
304
|
<p>Copyright 2009 Suraj N. Kurapati <a href='mailto:sunaku@gmail.com'>sunaku@gmail.com</a></p>
|
@@ -283,8 +306,9 @@
|
|
283
306
|
<p>Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.</p>
|
284
307
|
|
285
308
|
<p>THE SOFTWARE IS PROVIDED “AS IS” AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.</p></div>
|
309
|
+
</div><p> </p></div>
|
286
310
|
</div><div class="section">
|
287
|
-
<a name="Credits"/><div class="nav" id="Credits"><a title="Focus this segment" href="#Credits"><img class="icon" src="&icon_nav_here;"
|
311
|
+
<a name="Credits"/><div class="nav" id="Credits"><a title="Focus this segment" href="#Credits"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#License"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Setup"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Credits"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
288
312
|
<h2 class="title">
|
289
313
|
1.3 Credits
|
290
314
|
</h2>
|
@@ -293,17 +317,18 @@
|
|
293
317
|
<ul>
|
294
318
|
<li><a href='http://github.com/francois'>François Beausoleil</a></li>
|
295
319
|
</ul></div>
|
296
|
-
</div><p
|
320
|
+
</div><p> </p></div>
|
297
321
|
</div>
|
322
|
+
|
298
323
|
<div class="chapter">
|
299
|
-
<a name="Setup"/><div class="nav" id="Setup"><a title="Focus this segment" href="#Setup"><img class="icon" src="&icon_nav_here;"
|
324
|
+
<a name="Setup"/><div class="nav" id="Setup"><a title="Focus this segment" href="#Setup"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Credits"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Requirements"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Setup"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
300
325
|
<h1 class="title">
|
301
326
|
Chapter 2
|
302
327
|
<br/>
|
303
328
|
<big>Setup</big>
|
304
329
|
</h1>
|
305
330
|
<div class="content"><div class="section">
|
306
|
-
<a name="Requirements"/><div class="nav" id="Requirements"><a title="Focus this segment" href="#Requirements"><img class="icon" src="&icon_nav_here;"
|
331
|
+
<a name="Requirements"/><div class="nav" id="Requirements"><a title="Focus this segment" href="#Requirements"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Setup"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Installation"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Requirements"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
307
332
|
<h2 class="title">
|
308
333
|
2.1 Requirements
|
309
334
|
</h2>
|
@@ -313,62 +338,23 @@
|
|
313
338
|
</tr><tr><td style='text-align: left;'><a href='http://www.datanoise.com/ruby-debug'>ruby-debug</a></td><td style='text-align: left;'>Interactive debugger</td><td style='text-align: left;'>This is an <em>optional</em> requirement; IRB will be used if this library is not available.</td>
|
314
339
|
</tr></tbody></table></div>
|
315
340
|
</div><div class="section">
|
316
|
-
<a name="Installation"/><div class="nav" id="Installation"><a title="Focus this segment" href="#Installation"><img class="icon" src="&icon_nav_here;"
|
341
|
+
<a name="Installation"/><div class="nav" id="Installation"><a title="Focus this segment" href="#Installation"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Requirements"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Usage"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Installation"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
317
342
|
<h2 class="title">
|
318
343
|
2.2 Installation
|
319
344
|
</h2>
|
320
345
|
<div class="content"><p>You can install Dfect by running this command:</p>
|
321
346
|
|
322
|
-
<pre>gem install dfect</pre
|
323
|
-
</div><div class="section">
|
324
|
-
<a name="Manifest"/><div class="nav" id="Manifest"><a title="Focus this segment" href="#Manifest"><img class="icon" src="&icon_nav_here;" alt="∗"/></a> <a title="Focus previous segment" href="#Installation"><img class="icon" src="&icon_nav_prev;" alt="↑"/></a> <a title="Focus next segment" href="#Usage"><img class="icon" src="&icon_nav_next;" alt="↓"/></a> <a title="Return to listing" href="#rev:Manifest"><img class="icon" src="&icon_nav_list;" alt="≡"/></a></div>
|
325
|
-
<h2 class="title">
|
326
|
-
2.3 Manifest
|
327
|
-
</h2>
|
328
|
-
<div class="content"><p>You will see the following items inside Dfect’s installation directory:</p>
|
329
|
-
|
330
|
-
<ul>
|
331
|
-
<li>
|
332
|
-
<p><tt>lib/</tt></p>
|
333
|
-
|
334
|
-
<ul>
|
335
|
-
<li>
|
336
|
-
<p><tt>dfect.rb</tt> — the main Dfect library.</p>
|
337
|
-
</li>
|
338
|
-
|
339
|
-
<li>
|
340
|
-
<p><tt>dfect/</tt></p>
|
347
|
+
<pre>gem install dfect</pre>
|
341
348
|
|
342
|
-
<
|
343
|
-
<li><tt>auto.rb</tt> — automates test execution.</li>
|
344
|
-
</ul>
|
345
|
-
</li>
|
346
|
-
</ul>
|
347
|
-
</li>
|
348
|
-
|
349
|
-
<li>
|
350
|
-
<p><tt>doc/</tt></p>
|
349
|
+
<p>If you want to develop Dfect, run this command:</p>
|
351
350
|
|
352
|
-
<
|
353
|
-
|
354
|
-
<p><tt>api/</tt> — API reference documentation.</p>
|
355
|
-
</li>
|
356
|
-
|
357
|
-
<li>
|
358
|
-
<p><tt>index.erb</tt> — source of this user manual.</p>
|
359
|
-
</li>
|
360
|
-
</ul>
|
361
|
-
</li>
|
362
|
-
|
363
|
-
<li>
|
364
|
-
<p><tt>LICENSE</tt> — copyright notice and legal conditions.</p>
|
365
|
-
</li>
|
366
|
-
</ul></div>
|
367
|
-
</div><p></p></div>
|
351
|
+
<pre>gem install dfect --development</pre></div>
|
352
|
+
</div><p> </p></div>
|
368
353
|
</div>
|
369
354
|
|
355
|
+
|
370
356
|
<div class="chapter">
|
371
|
-
<a name="Usage"/><div class="nav" id="Usage"><a title="Focus this segment" href="#Usage"><img class="icon" src="&icon_nav_here;"
|
357
|
+
<a name="Usage"/><div class="nav" id="Usage"><a title="Focus this segment" href="#Usage"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Installation"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Assertions"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Usage"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
372
358
|
<h1 class="title">
|
373
359
|
Chapter 3
|
374
360
|
<br/>
|
@@ -398,7 +384,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
398
384
|
<p>The following sections explain these provided methods in detail.</p>
|
399
385
|
|
400
386
|
<div class="section">
|
401
|
-
<a name="Assertions"/><div class="nav" id="Assertions"><a title="Focus this segment" href="#Assertions"><img class="icon" src="&icon_nav_here;"
|
387
|
+
<a name="Assertions"/><div class="nav" id="Assertions"><a title="Focus this segment" href="#Assertions"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Usage"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Negation"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Assertions"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
402
388
|
<h2 class="title">
|
403
389
|
3.1 Assertions
|
404
390
|
</h2>
|
@@ -409,7 +395,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
409
395
|
</tr><tr><td style='text-align: left;'>T</td><td style='text-align: left;'>assert true (not <code class="line"><span style="color:#038;font-weight:bold">nil</span></code> and not <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td>
|
410
396
|
</tr></tbody></table>
|
411
397
|
<div class="paragraph">
|
412
|
-
<a name="Negation"/><div class="nav" id="Negation"><a title="Focus this segment" href="#Negation"><img class="icon" src="&icon_nav_here;"
|
398
|
+
<a name="Negation"/><div class="nav" id="Negation"><a title="Focus this segment" href="#Negation"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Assertions"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Sampling"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Negation"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
413
399
|
<p class="title">Negation</p>
|
414
400
|
<div class="content"><p>These methods are the <em>opposite</em> of <a class="xref" href="#Assertions" title="Section 3.1. "Assertions"">normal assertions</a>.</p>
|
415
401
|
<table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td style='text-align: left;'>F!</td><td style='text-align: left;'>same as T</td>
|
@@ -418,7 +404,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
418
404
|
</tr><tr><td style='text-align: left;'>T!</td><td style='text-align: left;'>same as F</td>
|
419
405
|
</tr></tbody></table></div>
|
420
406
|
</div><div class="paragraph">
|
421
|
-
<a name="Sampling"/><div class="nav" id="Sampling"><a title="Focus this segment" href="#Sampling"><img class="icon" src="&icon_nav_here;"
|
407
|
+
<a name="Sampling"/><div class="nav" id="Sampling"><a title="Focus this segment" href="#Sampling"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Negation"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Failures"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Sampling"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
422
408
|
<p class="title">Sampling</p>
|
423
409
|
<div class="content"><p>These methods allow you to <em>check the outcome</em> of an <a class="xref" href="#Assertions" title="Section 3.1. "Assertions"">assertion</a> without the penalty of pass or failure.</p>
|
424
410
|
<table border="1"><thead><tr><th>Method</th><th>Description</th></tr></thead><tbody><tr><td style='text-align: left;'>F?</td><td style='text-align: left;'>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if F passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td>
|
@@ -427,7 +413,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
427
413
|
</tr><tr><td style='text-align: left;'>T?</td><td style='text-align: left;'>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if T passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td>
|
428
414
|
</tr></tbody></table></div>
|
429
415
|
</div><div class="section">
|
430
|
-
<a name="Failures"/><div class="nav" id="Failures"><a title="Focus this segment" href="#Failures"><img class="icon" src="&icon_nav_here;"
|
416
|
+
<a name="Failures"/><div class="nav" id="Failures"><a title="Focus this segment" href="#Failures"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Sampling"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Tests"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Failures"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
431
417
|
<h3 class="title">
|
432
418
|
3.1.1 Failures
|
433
419
|
</h3>
|
@@ -457,9 +443,9 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
457
443
|
<p>You will then be placed into a debugger to investigate the failure if the <code class="line"><span style="color:#A60">:debug</span></code> option is enabled in <a href='api/classes/Dfect.html'><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.options</code></a>.</p>
|
458
444
|
|
459
445
|
<p>Details about all assertion failures and a trace of all tests executed are stored by Dfect and provided by the <a href='api/classes/Dfect.html'><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.report</code></a> method.</p></div>
|
460
|
-
</div><p
|
446
|
+
</div><p> </p></div>
|
461
447
|
</div><div class="section">
|
462
|
-
<a name="Tests"/><div class="nav" id="Tests"><a title="Focus this segment" href="#Tests"><img class="icon" src="&icon_nav_here;"
|
448
|
+
<a name="Tests"/><div class="nav" id="Tests"><a title="Focus this segment" href="#Tests"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Failures"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Hooks"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Tests"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
463
449
|
<h2 class="title">
|
464
450
|
3.2 Tests
|
465
451
|
</h2>
|
@@ -477,7 +463,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
477
463
|
</pre></ins></p>
|
478
464
|
|
479
465
|
<div class="section">
|
480
|
-
<a name="Hooks"/><div class="nav" id="Hooks"><a title="Focus this segment" href="#Hooks"><img class="icon" src="&icon_nav_here;"
|
466
|
+
<a name="Hooks"/><div class="nav" id="Hooks"><a title="Focus this segment" href="#Hooks"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Tests"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Insulation"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Hooks"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
481
467
|
<h3 class="title">
|
482
468
|
3.2.1 Hooks
|
483
469
|
</h3>
|
@@ -501,7 +487,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
501
487
|
<span style="color:#036;font-weight:bold">D</span> .< { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">"</span><span style="">do something more!</span><span style="color:#710">"</span></span> }
|
502
488
|
</pre></ins></p></div>
|
503
489
|
</div><div class="section">
|
504
|
-
<a name="Insulation"/><div class="nav" id="Insulation"><a title="Focus this segment" href="#Insulation"><img class="icon" src="&icon_nav_here;"
|
490
|
+
<a name="Insulation"/><div class="nav" id="Insulation"><a title="Focus this segment" href="#Insulation"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Hooks"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Execution"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Insulation"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
505
491
|
<h3 class="title">
|
506
492
|
3.2.2 Insulation
|
507
493
|
</h3>
|
@@ -548,9 +534,9 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
548
534
|
<span style="color:#080;font-weight:bold">end</span>
|
549
535
|
<span style="color:#080;font-weight:bold">end</span>
|
550
536
|
</pre></ins></p></div>
|
551
|
-
</div><p
|
537
|
+
</div><p> </p></div>
|
552
538
|
</div><div class="section">
|
553
|
-
<a name="Execution"/><div class="nav" id="Execution"><a title="Focus this segment" href="#Execution"><img class="icon" src="&icon_nav_here;"
|
539
|
+
<a name="Execution"/><div class="nav" id="Execution"><a title="Focus this segment" href="#Execution"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Insulation"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Automatic-test-execution"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Execution"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
554
540
|
<h2 class="title">
|
555
541
|
3.3 Execution
|
556
542
|
</h2>
|
@@ -577,7 +563,7 @@ include <span style="color:#036;font-weight:bold">Dfect</span>
|
|
577
563
|
<p>See the <a href='api/classes/Dfect.html'>API documentation</a> for details and examples.</p>
|
578
564
|
|
579
565
|
<div class="section">
|
580
|
-
<a name="Automatic-test-execution"/><div class="nav" id="Automatic-test-execution"><a title="Focus this segment" href="#Automatic-test-execution"><img class="icon" src="&icon_nav_here;"
|
566
|
+
<a name="Automatic-test-execution"/><div class="nav" id="Automatic-test-execution"><a title="Focus this segment" href="#Automatic-test-execution"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Execution"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#A-sample-unit-test"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Automatic-test-execution"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
581
567
|
<h3 class="title">
|
582
568
|
3.3.1 Automatic test execution
|
583
569
|
</h3>
|
@@ -588,7 +574,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
588
574
|
<p>The above code will mix-in the <code class="line"><span style="color:#036;font-weight:bold">Dfect</span></code> module into your program and will execute all tests defined by your program before it terminates.</p></div>
|
589
575
|
</div><p></p></div>
|
590
576
|
</div><div class="example">
|
591
|
-
<a name="A-sample-unit-test"/><div class="nav" id="A-sample-unit-test"><a title="Focus this segment" href="#A-sample-unit-test"><img class="icon" src="&icon_nav_here;"
|
577
|
+
<a name="A-sample-unit-test"/><div class="nav" id="A-sample-unit-test"><a title="Focus this segment" href="#A-sample-unit-test"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Automatic-test-execution"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#History"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:A-sample-unit-test"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
592
578
|
<p class="title">Example 1. A sample unit test</p>
|
593
579
|
<div class="content"><p><ins><pre class="para">require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">rubygems</span><span style="color:#710">'</span></span>
|
594
580
|
require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span>
|
@@ -631,28 +617,111 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
631
617
|
</pre></ins></p></div>
|
632
618
|
</div><p></p></div>
|
633
619
|
</div>
|
620
|
+
|
634
621
|
<div class="chapter">
|
635
|
-
<a name="History"/><div class="nav" id="History"><a title="Focus this segment" href="#History"><img class="icon" src="&icon_nav_here;"
|
622
|
+
<a name="History"/><div class="nav" id="History"><a title="Focus this segment" href="#History"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#A-sample-unit-test"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-1.0.0-2009-05-03"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:History"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
636
623
|
<h1 class="title">
|
637
624
|
Chapter 4
|
638
625
|
<br/>
|
639
626
|
<big>History</big>
|
640
627
|
</h1>
|
641
|
-
<div class="content"><
|
642
|
-
|
628
|
+
<div class="content"><p>For the longest time, I took <a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a> and <a href='http://rspec.info'>RSpec</a> for granted. They were the epitomy of modern Ruby practice; the insurmountable status quo; immortalized in books, conferences, and blogs alike.</p>
|
629
|
+
|
630
|
+
<p>Why would <em>anyone</em> think of using anything remotely different, let alone be foolish enough to write an alternative testing library when these are clearly <em>good enough</em>?</p>
|
631
|
+
|
632
|
+
<p>Recent experiments in assertion testing libraries smashed my world view:</p>
|
633
|
+
|
634
|
+
<ul>
|
635
|
+
<li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li>
|
636
|
+
|
637
|
+
<li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li>
|
638
|
+
|
639
|
+
<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li>
|
640
|
+
</ul>
|
641
|
+
|
642
|
+
<p>The status quo was certainly <em>not</em> “good enough”, as I had so blindly believed all these years. In fact, they were <em>verbose</em> behemoths that chose to encode endless permutations of conjecture into methods.</p>
|
643
|
+
|
644
|
+
<p>Empowered by this revelation and inspired by <a href='http://www.ruby-forum.com/topic/183354#801895'>Sean O’Halpin’s musing</a> on alternative names for assertion methods, I rose to challenge the status quo.</p>
|
645
|
+
|
646
|
+
<div class="section">
|
647
|
+
<a name="Version-1.0.0-2009-05-03"/><div class="nav" id="Version-1.0.0-2009-05-03"><a title="Focus this segment" href="#Version-1.0.0-2009-05-03"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#History"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Incompatible-changes"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-1.0.0-2009-05-03"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
643
648
|
<h2 class="title">
|
644
|
-
4.1 Version
|
649
|
+
4.1 Version 1.0.0 (2009-05-03)
|
650
|
+
</h2>
|
651
|
+
<div class="content"><p>This release improves default choices, adds emulation layers to mimic other testing libraries, and fixes some bugs.</p>
|
652
|
+
|
653
|
+
<div class="paragraph">
|
654
|
+
<a name="Incompatible-changes"/><div class="nav" id="Incompatible-changes"><a title="Focus this segment" href="#Incompatible-changes"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-1.0.0-2009-05-03"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Incompatible-changes"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
655
|
+
<p class="title">Incompatible changes</p>
|
656
|
+
<div class="content"><ul>
|
657
|
+
<li>
|
658
|
+
<p>The <code class="line"><span style="color:#A60">:debug</span></code> option is now enabled by default and is no longer linked to the value of <code class="line"><span style="color:#d70;font-weight:bold">$DEBUG</span></code>.</p>
|
659
|
+
</li>
|
660
|
+
|
661
|
+
<li>
|
662
|
+
<p><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.run()</code> now appends to previous results by default.</p>
|
663
|
+
|
664
|
+
<p>This behavior can be disabled by passing <code class="line"><span style="color:#038;font-weight:bold">false</span></code> to the method.</p>
|
665
|
+
</li>
|
666
|
+
</ul></div>
|
667
|
+
</div><div class="paragraph">
|
668
|
+
<a name="New-features"/><div class="nav" id="New-features"><a title="Focus this segment" href="#New-features"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Incompatible-changes"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
669
|
+
<p class="title">New features</p>
|
670
|
+
<div class="content"><ul>
|
671
|
+
<li>
|
672
|
+
<p>Add emulation layers to mimic other testing libraries:</p>
|
673
|
+
|
674
|
+
<ul>
|
675
|
+
<li><tt>dfect/unit</tt> — Test::Unit</li>
|
676
|
+
|
677
|
+
<li><tt>dfect/mini</tt> — Minitest</li>
|
678
|
+
|
679
|
+
<li><tt>dfect/spec</tt> — RSpec</li>
|
680
|
+
</ul>
|
681
|
+
</li>
|
682
|
+
</ul></div>
|
683
|
+
</div><div class="paragraph">
|
684
|
+
<a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Focus this segment" href="#Bug-fixes"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
685
|
+
<p class="title">Bug fixes</p>
|
686
|
+
<div class="content"><ul>
|
687
|
+
<li>Do not blindly replace <code class="line"><span style="color:#036;font-weight:bold">Class</span><span style="color:#888">#to_yaml</span></code>; it might be fixed someday.</li>
|
688
|
+
</ul></div>
|
689
|
+
</div><div class="paragraph">
|
690
|
+
<a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Focus this segment" href="#Housekeeping"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.1.0-2009-04-28"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
691
|
+
<p class="title">Housekeeping</p>
|
692
|
+
<div class="content"><ul>
|
693
|
+
<li>
|
694
|
+
<p>Add <a class="xref" href="#Motivation" title="Section 1.1">Motivation</a> section in user manual to promote interactive debugging.</p>
|
695
|
+
</li>
|
696
|
+
|
697
|
+
<li>
|
698
|
+
<p>Add brief <a class="xref" href="#History" title="Chapter 4">History</a> of this project’s inception.</p>
|
699
|
+
</li>
|
700
|
+
|
701
|
+
<li>
|
702
|
+
<p>Remove redundant assertions for F!() and T!() methods in test suite.</p>
|
703
|
+
</li>
|
704
|
+
|
705
|
+
<li>
|
706
|
+
<p>Add copyright notice at the top of every file.</p>
|
707
|
+
</li>
|
708
|
+
</ul></div>
|
709
|
+
</div><p> </p></div>
|
710
|
+
</div><div class="section">
|
711
|
+
<a name="Version-0.1.0-2009-04-28"/><div class="nav" id="Version-0.1.0-2009-04-28"><a title="Focus this segment" href="#Version-0.1.0-2009-04-28"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Thank-you"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.1.0-2009-04-28"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
712
|
+
<h2 class="title">
|
713
|
+
4.2 Version 0.1.0 (2009-04-28)
|
645
714
|
</h2>
|
646
715
|
<div class="content"><p>This release adds new variations to assertion methods, fixes several bugs, and improves test coverage.</p>
|
647
716
|
|
648
717
|
<div class="paragraph">
|
649
|
-
<a name="Thank-you"/><div class="nav" id="Thank-you"><a title="Focus this segment" href="#Thank-you"><img class="icon" src="&icon_nav_here;"
|
718
|
+
<a name="Thank-you"/><div class="nav" id="Thank-you"><a title="Focus this segment" href="#Thank-you"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.1.0-2009-04-28"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-615768778"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Thank-you"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
650
719
|
<p class="title">Thank you</p>
|
651
720
|
<div class="content"><ul>
|
652
721
|
<li>François Beausoleil contributed patches for both code <em>and</em> tests! :-)</li>
|
653
722
|
</ul></div>
|
654
723
|
</div><div class="paragraph">
|
655
|
-
<a name="New-features"/><div class="nav" id="New-features"><a title="Focus this segment" href="#New-features"><img class="icon" src="&icon_nav_here;"
|
724
|
+
<a name="New-features-615768778"/><div class="nav" id="New-features-615768778"><a title="Focus this segment" href="#New-features-615768778"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Thank-you"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-615787488"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-615768778"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
656
725
|
<p class="title">New features</p>
|
657
726
|
<div class="content"><ul>
|
658
727
|
<li>
|
@@ -666,7 +735,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
666
735
|
</li>
|
667
736
|
</ul></div>
|
668
737
|
</div><div class="paragraph">
|
669
|
-
<a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Focus this segment" href="#Bug-fixes"><img class="icon" src="&icon_nav_here;"
|
738
|
+
<a name="Bug-fixes-615787488"/><div class="nav" id="Bug-fixes-615787488"><a title="Focus this segment" href="#Bug-fixes-615787488"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-615768778"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-615791368"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-615787488"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
670
739
|
<p class="title">Bug fixes</p>
|
671
740
|
<div class="content"><ul>
|
672
741
|
<li>
|
@@ -690,22 +759,23 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
690
759
|
</li>
|
691
760
|
</ul></div>
|
692
761
|
</div><div class="paragraph">
|
693
|
-
<a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Focus this segment" href="#Housekeeping"><img class="icon" src="&icon_nav_here;"
|
762
|
+
<a name="Housekeeping-615791368"/><div class="nav" id="Housekeeping-615791368"><a title="Focus this segment" href="#Housekeeping-615791368"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-615787488"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.0-2009-04-13"><img alt="↓" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-615791368"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
694
763
|
<p class="title">Housekeeping</p>
|
695
764
|
<div class="content"><ul>
|
696
765
|
<li>Filled the big holes in test coverage. Everything except the runtime debugging logic is now covered by the unit tests.</li>
|
697
766
|
</ul></div>
|
698
|
-
</div><p
|
767
|
+
</div><p> </p></div>
|
699
768
|
</div><div class="section">
|
700
|
-
<a name="Version-0.0.0-2009-04-13"/><div class="nav" id="Version-0.0.0-2009-04-13"><a title="Focus this segment" href="#Version-0.0.0-2009-04-13"><img class="icon" src="&icon_nav_here;"
|
769
|
+
<a name="Version-0.0.0-2009-04-13"/><div class="nav" id="Version-0.0.0-2009-04-13"><a title="Focus this segment" href="#Version-0.0.0-2009-04-13"><img alt="∗" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-615791368"><img alt="↑" class="icon" src="&icon_nav_prev;"/></a> <a title="Return to listing" href="#rev:Version-0.0.0-2009-04-13"><img alt="≡" class="icon" src="&icon_nav_list;"/></a></div>
|
701
770
|
<h2 class="title">
|
702
|
-
4.
|
771
|
+
4.3 Version 0.0.0 (2009-04-13)
|
703
772
|
</h2>
|
704
773
|
<div class="content"><p>This is the first public release of Dfect. It was inspired by <a href='http://www.ruby-forum.com/topic/183354#801895'>Sean O’Halpin’s musing</a> on alternative names for assertion methods.</p></div>
|
705
774
|
</div><p></p><p></p></div>
|
706
775
|
</div>
|
707
776
|
</div>
|
708
777
|
|
778
|
+
|
709
779
|
<br style="display: none"/>
|
710
780
|
<hr style="display: none"/>
|
711
781
|
<br style="display: none"/>
|
@@ -715,31 +785,21 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
715
785
|
|
716
786
|
<div id="footer">
|
717
787
|
|
718
|
-
Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 7.0.0</a> on
|
788
|
+
Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 7.0.0</a> on Mon May 04 01:18:01 -0700 2009.
|
719
789
|
|
720
790
|
<div id="footer-credits">
|
721
791
|
<p>
|
722
|
-
<img class="icon" src="&icon_here_frag;"
|
723
|
-
|
724
|
-
<img class="icon" src="&
|
725
|
-
|
726
|
-
<img class="icon" src="&
|
727
|
-
|
728
|
-
<img class="icon" src="&
|
729
|
-
|
730
|
-
<img class="icon" src="&
|
731
|
-
|
732
|
-
<img class="icon" src="&
|
733
|
-
|
734
|
-
<img class="icon" src="&icon_nav_list;" alt="nav_list"/>
|
735
|
-
|
736
|
-
<img class="icon" src="&icon_note;" alt="note"/>
|
737
|
-
|
738
|
-
<img class="icon" src="&icon_warning;" alt="warning"/>
|
739
|
-
|
740
|
-
<img class="icon" src="&icon_quote;" alt="quote"/>
|
741
|
-
|
742
|
-
<img class="icon" src="&icon_nav_next;" alt="nav_next"/>
|
792
|
+
<img alt="here_frag" class="icon" src="&icon_here_frag;"/>
|
793
|
+
<img alt="caution" class="icon" src="&icon_caution;"/>
|
794
|
+
<img alt="nav_here" class="icon" src="&icon_nav_here;"/>
|
795
|
+
<img alt="nav_prev" class="icon" src="&icon_nav_prev;"/>
|
796
|
+
<img alt="tip" class="icon" src="&icon_tip;"/>
|
797
|
+
<img alt="important" class="icon" src="&icon_important;"/>
|
798
|
+
<img alt="nav_list" class="icon" src="&icon_nav_list;"/>
|
799
|
+
<img alt="note" class="icon" src="&icon_note;"/>
|
800
|
+
<img alt="warning" class="icon" src="&icon_warning;"/>
|
801
|
+
<img alt="quote" class="icon" src="&icon_quote;"/>
|
802
|
+
<img alt="nav_next" class="icon" src="&icon_nav_next;"/>
|
743
803
|
|
744
804
|
<br/>
|
745
805
|
|
@@ -747,7 +807,7 @@ require <span style="background-color:#fff0f0;color:#D20"><span style="color:#71
|
|
747
807
|
</p>
|
748
808
|
|
749
809
|
<p>
|
750
|
-
<img class="icon" src="&icon_hyperlink;"
|
810
|
+
<img alt="hyperlink" class="icon" src="&icon_hyperlink;"/>
|
751
811
|
|
752
812
|
<br/>
|
753
813
|
|