doc/index.xhtml in dfect-0.1.0 vs doc/index.xhtml in dfect-1.0.0

- old
+ new

@@ -17,15 +17,15 @@ <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <meta name="generator" content="ERBook 7.0.0"/> - <title>Dfect 0.1.0</title> + <title>Dfect 1.0.0</title> <meta name="author" content="Suraj N. Kurapati"/> - <meta name="date" content="28 April 2009"/> + <meta name="date" content="04 May 2009"/> <link rel="alternate" type="application/rss+xml" href="http://snk.tuxfamily.org/lib/dfect/ann.xml"/> <style type="text/css" media="all"> /*<![CDATA[*/ body{color:#000;background-color:#FFF;line-height:1.5em;font-family:Calibri, Verdana, sans-serif}blockquote{color:#333;font-style:italic}em,strong,dt{font-family:Constantia, "Book Antiqua", "URW Bookman L", serif}hr{height:0;border:0;border-top:thin dashed#000}tt,code,pre{font-family:Monaco, Consolas, "Lucida Console", monospace;font-size:100%}code.para{white-space:pre}a > img{border:none}dt{margin-top:1.5em;font-weight:bolder}h1,h2,h3,h4,h5,h6,.title{font-weight:lighter;font-family:Constantia, "Book Antiqua", "URW Bookman L", serif}#lof h1,#lof h2,#lof h3,#lof h4,#lof h5,#lof h6{margin-top:1.25em}#content h1,#content h2,#content h3,#content h4,#content h5,#content h6{margin-top:2.5em;line-height:1.25em}#content h1{font-size:2.0em}#content h2{font-size:1.8em}#content h3{font-size:1.6em}#content h4{font-size:1.4em}#content h5{font-size:1.2em}#content h6{font-size:1.0em}table{border-collapse:collapse;margin:auto;margin-top:1em}th,td{padding:1em;border:1px solid #bbb;vertical-align:top;background-color:#FFF}th{background-color:#F5F5F5}#header{text-align:center}#header > .title{font-size:2.25em}#header > .subtitle{}#header > .authors{margin-top:1.625em;margin-bottom:-0.25em}#header > .date{}.logo,.header_outside_above,#header,.header_outside_below{margin-bottom:5em}.footer_outside_above,#footer,.footer_outside_below{margin-top:5em}#header .header_inside_above,#footer .footer_inside_above{margin-bottom:4em}#header .header_inside_below,#footer .footer_inside_below{margin-top:4em}#Abstract{margin-bottom:5em}#toc li{list-style-type:none}#toc li ul{padding-bottom:1em;border-left:thick solid #F5F5F5}#toc li ul:hover{border-color:#DCDCDC}#toc > ul{padding-left:1em}#bib{margin-top:5em}#footer{border-top:thick dotted #DCDCDC;padding-top:1em;text-align:center}#footer-credits{margin-top:2em;margin-bottom:2em}.part > .title,.chapter > .title{padding-bottom:.5em}.part > .title > big,.chapter > .title > big{display:block;margin-top:.25em}.paragraph > .title,.tip > .title,.note > .title,.caution > .title,.warning > .title,.important > .title,.figure > .title,.table > .title,.example > .title,.equation > .title,.procedure > .title{font-size:large;margin-top:2em}.tip,.note,.caution,.warning,.important,.figure,.table,.example,.equation,.procedure{margin:3em}.tip .nav,.note .nav,.caution .nav,.warning .nav,.important .nav,.figure .nav,.table .nav,.example .nav,.equation .nav,.procedure .nav{margin-right:-3em}.tip > .content,.note > .content,.caution > .content,.warning > .content,.important > .content,.figure > .content,.table > .content,.example > .content,.equation > .content,.procedure > .content{min-height:48px}.tip > .content > .icon,.note > .content > .icon,.caution > .content > .icon,.warning > .content > .icon,.important > .content > .icon{float:left;margin:0 1em 1em 0}.figure > .title{text-align:center}.figure > .content img{display:block;margin:auto}/*]]>*/ @@ -62,11 +62,11 @@ /*]]>*/ </style> <script type="text/javascript"> //<![CDATA[ -/* + /* * jQuery JavaScript Library v1.3.2 * http://jquery.com/ * * Copyright (c) 2009 John Resig * Dual licensed under the MIT and GPL licenses. @@ -80,29 +80,32 @@ * Sizzle CSS Selector Engine - v0.9.3 * Copyright 2009, The Dojo Foundation * Released under the MIT, BSD, and GPL Licenses. * More information: http://sizzlejs.com/ */ -(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")}})})();/** +(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")}})})(); + /** * jQuery.ScrollTo - Easy element scrolling using jQuery. * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 3/9/2009 * @author Ariel Flesler * @version 1.4.1 * * http://flesler.blogspot.com/2007/10/jqueryscrollto.html */ -;(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);/** +;(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); + /** * jQuery.LocalScroll - Animated scrolling navigation, using anchors. * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Dual licensed under MIT and GPL. * Date: 3/11/2009 * @author Ariel Flesler * @version 1.2.7 **/ ;(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); + $(document).ready( function(){ $.localScroll({ // the default 1000 is too slow, and 500 is too fast duration: 700, @@ -127,17 +130,18 @@ <div id="header"> - <h1 class="title">Dfect 0.1.0</h1> + <h1 class="title">Dfect 1.0.0</h1> + <h2 class="subtitle">Assertion testing library for Ruby</h2> <h3 class="authors"><a href="mailto:sunaku@gmail.com">Suraj N. Kurapati</a></h3> - <h3 class="date">28 April 2009</h3> + <h3 class="date">04 May 2009</h3> </div> @@ -149,26 +153,28 @@ <hr style="display: none"/> <br style="display: none"/> <div id="toc"> - <a name="Contents"/><div class="nav" id="Contents"><a title="Focus this segment" href="#Contents"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Return to listing" href="#rev:Contents"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Contents"/><div class="nav" id="Contents"><a title="Focus this segment" href="#Contents"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Contents"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h1 class="title">Contents</h1> - <ul><li>1&nbsp;&nbsp;<a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1&nbsp;&nbsp;<a id="rev:Logistics" href="#Logistics">Logistics</a><ul><li><a id="rev:Version-numbers" href="#Version-numbers">Version numbers</a></li></ul></li><li>1.2&nbsp;&nbsp;<a id="rev:License" href="#License">License</a></li><li>1.3&nbsp;&nbsp;<a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2&nbsp;&nbsp;<a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="rev:Installation" href="#Installation">Installation</a></li><li>2.3&nbsp;&nbsp;<a id="rev:Manifest" href="#Manifest">Manifest</a></li></ul></li><li>3&nbsp;&nbsp;<a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Failures" href="#Failures">Failures</a></li></ul></li><li>3.2&nbsp;&nbsp;<a id="rev:Tests" href="#Tests">Tests</a><ul><li>3.2.1&nbsp;&nbsp;<a id="rev:Hooks" href="#Hooks">Hooks</a></li><li>3.2.2&nbsp;&nbsp;<a id="rev:Insulation" href="#Insulation">Insulation</a></li></ul></li><li>3.3&nbsp;&nbsp;<a id="rev:Execution" href="#Execution">Execution</a><ul><li>3.3.1&nbsp;&nbsp;<a id="rev:Automatic-test-execution" href="#Automatic-test-execution">Automatic test execution</a></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="rev:History" href="#History">History</a><ul><li>4.1&nbsp;&nbsp;<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" 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&nbsp;&nbsp;<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> + <ul><li>1&nbsp;&nbsp;<a id="rev:Introduction" href="#Introduction">Introduction</a><ul><li><a id="rev:Etymology" href="#Etymology">Etymology</a></li><li>1.1&nbsp;&nbsp;<a id="rev:Motivation" href="#Motivation">Motivation</a></li><li>1.2&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Credits" href="#Credits">Credits</a></li></ul></li><li>2&nbsp;&nbsp;<a id="rev:Setup" href="#Setup">Setup</a><ul><li>2.1&nbsp;&nbsp;<a id="rev:Requirements" href="#Requirements">Requirements</a></li><li>2.2&nbsp;&nbsp;<a id="rev:Installation" href="#Installation">Installation</a></li></ul></li><li>3&nbsp;&nbsp;<a id="rev:Usage" href="#Usage">Usage</a><ul><li>3.1&nbsp;&nbsp;<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&nbsp;&nbsp;<a id="rev:Failures" href="#Failures">Failures</a></li></ul></li><li>3.2&nbsp;&nbsp;<a id="rev:Tests" href="#Tests">Tests</a><ul><li>3.2.1&nbsp;&nbsp;<a id="rev:Hooks" href="#Hooks">Hooks</a></li><li>3.2.2&nbsp;&nbsp;<a id="rev:Insulation" href="#Insulation">Insulation</a></li></ul></li><li>3.3&nbsp;&nbsp;<a id="rev:Execution" href="#Execution">Execution</a><ul><li>3.3.1&nbsp;&nbsp;<a id="rev:Automatic-test-execution" href="#Automatic-test-execution">Automatic test execution</a></li></ul></li></ul></li><li>4&nbsp;&nbsp;<a id="rev:History" href="#History">History</a><ul><li>4.1&nbsp;&nbsp;<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&nbsp;&nbsp;<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&nbsp;&nbsp;<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> </div> - <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;" alt="&lowast;"/></a> <a title="Return to listing" href="#rev:Examples"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></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> + <div id="lof"><a name="Examples"/><div class="nav" id="Examples"><a title="Focus this segment" href="#Examples"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Return to listing" href="#rev:Examples"><img alt="&equiv;" 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> <br style="display: none"/> <hr style="display: none"/> <br style="display: none"/> <div id="content"> + + <div class="chapter"> - <a name="Introduction"/><div class="nav" id="Introduction"><a title="Focus this segment" href="#Introduction"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus next segment" href="#Etymology"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Introduction"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Introduction"/><div class="nav" id="Introduction"><a title="Focus this segment" href="#Introduction"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus next segment" href="#Etymology"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Introduction"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h1 class="title"> Chapter&nbsp;1 <br/> <big>Introduction</big> </h1> @@ -183,60 +189,80 @@ <li>It keeps a detailed report of assertion failures.</li> <li>It lets you nest tests and execution hooks.</li> -<li>It is implemented in a mere 313 lines of code.</li> -</ul><p>These features distinguish Dfect from the competition:</p> +<li>It is implemented in a mere 479 lines of code.</li> +</ul><p> These features distinguish Dfect from the competition:</p> <ul> <li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li> -<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li> +<li><a href='http://chneukirchen.org/repos/bacon/README'>Bacon</a></li> -<li><a href='http://www.ruby-forum.com/topic/182798'>Testy</a></li> +<li><a href='http://github.com/jeremymcanally/context'>Context</a></li> <li><a href='http://blog.zenspider.com/minitest'>minitest</a></li> -<li><a href='http://github.com/jeremymcanally/context'>Context</a></li> +<li><a href='http://rspec.info'>RSpec</a></li> <li><a href='http://thoughtbot.com/projects/shoulda'>Shoulda</a></li> -<li><a href='http://chneukirchen.org/repos/bacon/README'>Bacon</a></li> - <li><a href='http://test-spec.rubyforge.org/test-spec'>test-spec</a></li> -<li><a href='http://rspec.info'>RSpec</a></li> - <li><a href='http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/index.html'>Test::Unit</a></li> + +<li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li> + +<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li> </ul> <div class="paragraph"> - <a name="Etymology"/><div class="nav" id="Etymology"><a title="Focus this segment" href="#Etymology"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Introduction"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Logistics"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Etymology"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Etymology"/><div class="nav" id="Etymology"><a title="Focus this segment" href="#Etymology"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Introduction"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Motivation"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Etymology"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Etymology</p> <div class="content"><p>Dfect is named after the D F E C T methods it provides.</p> <p>The name is also play on the word &#8220;defect&#8221;, whereby the intentional misspelling of &#8220;defect&#8221; as &#8220;dfect&#8221; is a defect in itself! <tt>;-)</tt></p> <p>This wordplay is similar to <a href='http://www.erlang.org/doc/apps/mnesia/index.html'>Mnesia</a>&#8217;s play on the word &#8220;amnesia&#8221;, whereby the intentional omission of the letter &#8220;A&#8221; indicates forgetfulness&#8212;the key characteristic of having amnesia. Clever!</p></div> </div><div class="section"> - <a name="Logistics"/><div class="nav" id="Logistics"><a title="Focus this segment" href="#Logistics"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Etymology"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Version-numbers"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Logistics"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Motivation"/><div class="nav" id="Motivation"><a title="Focus this segment" href="#Motivation"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Etymology"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Logistics"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Motivation"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> - 1.1&nbsp;&nbsp;Logistics + 1.1&nbsp;&nbsp;Motivation </h2> + <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> + +<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> + +<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 &#8221;<a href='http://oopweb.com/CPP/Documents/DebugCPP/Volume/techniques.html#PRINTF'>printf debugging</a>&#8221;.</p> + +<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> + +<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>&#8230;), saving the result to a correctly named file, invoking the C/C++/Java compiler, and finally executing the binary&#8212;only to be greeted by a <a href='http://en.wikipedia.org/wiki/Segmentation_fault'>segfault</a>. ;-)</p> + +<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> + +<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> +</div><div class="section"> + <a name="Logistics"/><div class="nav" id="Logistics"><a title="Focus this segment" href="#Logistics"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Motivation"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-numbers"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Logistics"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <h2 class="title"> + 1.2&nbsp;&nbsp;Logistics + </h2> <div class="content"><ul> <li><a class="xref" href="#History" title="Chapter 4. &quot;History&quot;">Release notes</a> &#8212; history of project releases.</li> <li><a href='http://github.com/sunaku/dfect'>Source code</a> &#8212; obtain via <a href='http://git-scm.com'>Git</a> or browse online.</li> <li><a href='./api/index.html'>API reference</a> &#8212; documentation for source code.</li> + +<li><a href='http://snk.tuxfamily.org/lib/dfect/'>Project home</a> &#8212; the Dfect project home page.</li> </ul> -<p>To get help or provide feedback, simply <a class="xref" href="#License" title="Section 1.2. &quot;License&quot;">contact the author(s)</a>.</p> +<p>To get help or provide feedback, simply <a class="xref" href="#License" title="Paragraph. &quot;License&quot;">contact the author(s)</a>.</p> <div class="paragraph"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Logistics"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#License"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Version-numbers"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Version-numbers"/><div class="nav" id="Version-numbers"><a title="Focus this segment" href="#Version-numbers"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Logistics"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#License"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-numbers"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Version numbers</p> <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> <table border="1"> <thead> <tr> @@ -268,109 +294,69 @@ <td style='background-color: #FFE4E1;'>No</td> <td>Yes</td> </tr> </tbody> </table></div> -</div><p></p></div> -</div><div class="section"> - <a name="License"/><div class="nav" id="License"><a title="Focus this segment" href="#License"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Version-numbers"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Credits"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:License"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> - <h2 class="title"> - 1.2&nbsp;&nbsp;License - </h2> +</div><div class="paragraph"> + <a name="License"/><div class="nav" id="License"><a title="Focus this segment" href="#License"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-numbers"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Credits"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:License"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <p class="title">License</p> <div class="content"><p>(the ISC license)</p> <p>Copyright 2009 Suraj N. Kurapati <a href='mailto:sunaku@gmail.com'>&#115;&#117;&#110;&#097;&#107;&#117;&#064;&#103;&#109;&#097;&#105;&#108;&#046;&#099;&#111;&#109;</a></p> <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> <p>THE SOFTWARE IS PROVIDED &#8220;AS IS&#8221; 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> +</div><p> </p></div> </div><div class="section"> - <a name="Credits"/><div class="nav" id="Credits"><a title="Focus this segment" href="#Credits"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#License"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Setup"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Credits"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Credits"/><div class="nav" id="Credits"><a title="Focus this segment" href="#Credits"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#License"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Setup"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Credits"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 1.3&nbsp;&nbsp;Credits </h2> <div class="content"><p>Dfect is made possible by <a class="xref" href="#History" title="Chapter 4. &quot;History&quot;">contributions</a> from users like you:</p> <ul> <li><a href='http://github.com/francois'>François Beausoleil</a></li> </ul></div> -</div><p></p></div> +</div><p> </p></div> </div> + <div class="chapter"> - <a name="Setup"/><div class="nav" id="Setup"><a title="Focus this segment" href="#Setup"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Credits"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Requirements"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Setup"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Setup"/><div class="nav" id="Setup"><a title="Focus this segment" href="#Setup"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Credits"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Requirements"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Setup"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h1 class="title"> Chapter&nbsp;2 <br/> <big>Setup</big> </h1> <div class="content"><div class="section"> - <a name="Requirements"/><div class="nav" id="Requirements"><a title="Focus this segment" href="#Requirements"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Setup"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Installation"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Requirements"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Requirements"/><div class="nav" id="Requirements"><a title="Focus this segment" href="#Requirements"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Setup"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Installation"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Requirements"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 2.1&nbsp;&nbsp;Requirements </h2> <div class="content"><p>Your system needs the following software to run Dfect.</p> <table border="1"><thead><tr><th>Software</th><th>Description</th><th>Notes</th></tr></thead><tbody><tr><td style='text-align: left;'><a href='http://ruby-lang.org'>Ruby</a></td><td style='text-align: left;'>Ruby language interpreter</td><td style='text-align: left;'>Version 1.8.6, 1.8.7, and 1.9.1 have been tested successfully.</td> </tr><tr><td style='text-align: left;'><a href='http://rubygems.org'>RubyGems</a></td><td style='text-align: left;'>Ruby packaging system</td><td style='text-align: left;'>Version 1.3.1 is required.</td> </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> </tr></tbody></table></div> </div><div class="section"> - <a name="Installation"/><div class="nav" id="Installation"><a title="Focus this segment" href="#Installation"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Requirements"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Manifest"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Installation"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Installation"/><div class="nav" id="Installation"><a title="Focus this segment" href="#Installation"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Requirements"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Usage"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Installation"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 2.2&nbsp;&nbsp;Installation </h2> <div class="content"><p>You can install Dfect by running this command:</p> -<pre>gem install dfect</pre></div> -</div><div class="section"> - <a name="Manifest"/><div class="nav" id="Manifest"><a title="Focus this segment" href="#Manifest"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Installation"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Usage"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Manifest"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> - <h2 class="title"> - 2.3&nbsp;&nbsp;Manifest - </h2> - <div class="content"><p>You will see the following items inside Dfect&#8217;s installation directory:</p> +<pre>gem install dfect</pre> -<ul> -<li> -<p><tt>lib/</tt></p> +<p>If you want to develop Dfect, run this command:</p> -<ul> -<li> -<p><tt>dfect.rb</tt> &#8212; the main Dfect library.</p> -</li> - -<li> -<p><tt>dfect/</tt></p> - -<ul> -<li><tt>auto.rb</tt> &#8212; automates test execution.</li> -</ul> -</li> -</ul> -</li> - -<li> -<p><tt>doc/</tt></p> - -<ul> -<li> -<p><tt>api/</tt> &#8212; API reference documentation.</p> -</li> - -<li> -<p><tt>index.erb</tt> &#8212; source of this user manual.</p> -</li> -</ul> -</li> - -<li> -<p><tt>LICENSE</tt> &#8212; copyright notice and legal conditions.</p> -</li> -</ul></div> -</div><p></p></div> +<pre>gem install dfect --development</pre></div> +</div><p> </p></div> </div> + <div class="chapter"> - <a name="Usage"/><div class="nav" id="Usage"><a title="Focus this segment" href="#Usage"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Manifest"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Assertions"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Usage"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Usage"/><div class="nav" id="Usage"><a title="Focus this segment" href="#Usage"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Installation"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Assertions"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Usage"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h1 class="title"> Chapter&nbsp;3 <br/> <big>Usage</big> </h1> @@ -396,40 +382,40 @@ </pre></ins></p> <p>The following sections explain these provided methods in detail.</p> <div class="section"> - <a name="Assertions"/><div class="nav" id="Assertions"><a title="Focus this segment" href="#Assertions"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Usage"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Negation"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Assertions"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Assertions"/><div class="nav" id="Assertions"><a title="Focus this segment" href="#Assertions"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Usage"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Negation"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Assertions"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 3.1&nbsp;&nbsp;Assertions </h2> <div class="content"><p>The following methods take a block parameter and assert something about the result of executing that block. See the <a href='api/classes/Dfect.html'>API documentation</a> for examples.</p> <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;'>assert not true (<code class="line"><span style="color:#038;font-weight:bold">nil</span></code> or <code class="line"><span style="color:#038;font-weight:bold">false</span></code>)</td> </tr><tr><td style='text-align: left;'>E</td><td style='text-align: left;'>assert that an execption is raised</td> </tr><tr><td style='text-align: left;'>C</td><td style='text-align: left;'>assert that a symbol is thrown</td> </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> </tr></tbody></table> <div class="paragraph"> - <a name="Negation"/><div class="nav" id="Negation"><a title="Focus this segment" href="#Negation"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Assertions"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Sampling"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Negation"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Negation"/><div class="nav" id="Negation"><a title="Focus this segment" href="#Negation"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Assertions"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Sampling"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Negation"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Negation</p> <div class="content"><p>These methods are the <em>opposite</em> of <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">normal assertions</a>.</p> <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> </tr><tr><td style='text-align: left;'>E!</td><td style='text-align: left;'>assert that an execption is <em>not</em> raised</td> </tr><tr><td style='text-align: left;'>C!</td><td style='text-align: left;'>assert that a symbol is <em>not</em> thrown</td> </tr><tr><td style='text-align: left;'>T!</td><td style='text-align: left;'>same as F</td> </tr></tbody></table></div> </div><div class="paragraph"> - <a name="Sampling"/><div class="nav" id="Sampling"><a title="Focus this segment" href="#Sampling"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Negation"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Failures"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Sampling"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Sampling"/><div class="nav" id="Sampling"><a title="Focus this segment" href="#Sampling"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Negation"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Failures"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Sampling"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Sampling</p> <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. &quot;Assertions&quot;">assertion</a> without the penalty of pass or failure.</p> <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> </tr><tr><td style='text-align: left;'>E?</td><td style='text-align: left;'>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if E passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td> </tr><tr><td style='text-align: left;'>C?</td><td style='text-align: left;'>returns <code class="line"><span style="color:#038;font-weight:bold">true</span></code> if C passes; <code class="line"><span style="color:#038;font-weight:bold">false</span></code> otherwise</td> </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> </tr></tbody></table></div> </div><div class="section"> - <a name="Failures"/><div class="nav" id="Failures"><a title="Focus this segment" href="#Failures"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Sampling"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Tests"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Failures"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Failures"/><div class="nav" id="Failures"><a title="Focus this segment" href="#Failures"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Sampling"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Tests"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Failures"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h3 class="title"> 3.1.1&nbsp;&nbsp;Failures </h3> <div class="content"><p>When an assertion fails, details about the failure will be shown:</p> @@ -455,13 +441,13 @@ - test/simple.rb:3</pre><p></p> <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> <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> -</div><p></p></div> +</div><p> </p></div> </div><div class="section"> - <a name="Tests"/><div class="nav" id="Tests"><a title="Focus this segment" href="#Tests"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Failures"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Hooks"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Tests"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Tests"/><div class="nav" id="Tests"><a title="Focus this segment" href="#Tests"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Failures"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Hooks"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Tests"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 3.2&nbsp;&nbsp;Tests </h2> <div class="content"><p>The <a href='api/classes/Dfect.html'><code class="line">D()</code> method</a> defines a new <strong>test</strong>, which is analagous to the <code class="line">describe()</code> environment provided by BDD frameworks like RSpec.</p> @@ -475,11 +461,11 @@ <span style="color:#080;font-weight:bold">end</span> <span style="color:#080;font-weight:bold">end</span> </pre></ins></p> <div class="section"> - <a name="Hooks"/><div class="nav" id="Hooks"><a title="Focus this segment" href="#Hooks"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Tests"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Insulation"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Hooks"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Hooks"/><div class="nav" id="Hooks"><a title="Focus this segment" href="#Hooks"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Tests"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Insulation"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Hooks"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h3 class="title"> 3.2.1&nbsp;&nbsp;Hooks </h3> <div class="content"><p>The <a href='api/classes/Dfect.html'><code class="line">D()</code> method</a> provides several entry points (hooks) into the test execution process:</p> @@ -499,11 +485,11 @@ <p><ins><pre class="para"><span style="color:#036;font-weight:bold">D</span> .&lt; { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">do something</span><span style="color:#710">&quot;</span></span> } <span style="color:#036;font-weight:bold">D</span> .&lt; { puts <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">do something more!</span><span style="color:#710">&quot;</span></span> } </pre></ins></p></div> </div><div class="section"> - <a name="Insulation"/><div class="nav" id="Insulation"><a title="Focus this segment" href="#Insulation"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Hooks"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Execution"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Insulation"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Insulation"/><div class="nav" id="Insulation"><a title="Focus this segment" href="#Insulation"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Hooks"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Execution"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Insulation"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h3 class="title"> 3.2.2&nbsp;&nbsp;Insulation </h3> <div class="content"><p>Use the singleton class of a temporary object to shield your test logic from Ruby&#8217;s global environment, the code being tested, and from other tests:</p> @@ -546,13 +532,13 @@ <span style="color:#080;font-weight:bold">class</span> <span style="color:#B06;font-weight:bold">YourHelperClass</span> <span style="color:#888"># your helper logic here</span> <span style="color:#080;font-weight:bold">end</span> <span style="color:#080;font-weight:bold">end</span> </pre></ins></p></div> -</div><p></p></div> +</div><p> </p></div> </div><div class="section"> - <a name="Execution"/><div class="nav" id="Execution"><a title="Focus this segment" href="#Execution"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Insulation"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Automatic-test-execution"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Execution"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Execution"/><div class="nav" id="Execution"><a title="Focus this segment" href="#Execution"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Insulation"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Automatic-test-execution"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Execution"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> 3.3&nbsp;&nbsp;Execution </h2> <div class="content"><p>You can configure test execution using:</p> @@ -575,22 +561,22 @@ </pre></ins></p> <p>See the <a href='api/classes/Dfect.html'>API documentation</a> for details and examples.</p> <div class="section"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Execution"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#A-sample-unit-test"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Automatic-test-execution"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Automatic-test-execution"/><div class="nav" id="Automatic-test-execution"><a title="Focus this segment" href="#Automatic-test-execution"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Execution"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#A-sample-unit-test"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Automatic-test-execution"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h3 class="title"> 3.3.1&nbsp;&nbsp;Automatic test execution </h3> <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> require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span> <span style="color:#888"># &lt;== notice the &quot;auto&quot;</span> </pre></ins></p> <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> </div><p></p></div> </div><div class="example"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Automatic-test-execution"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#History"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:A-sample-unit-test"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <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="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Automatic-test-execution"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#History"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:A-sample-unit-test"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Example 1.&nbsp;&nbsp;A sample unit test</p> <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> require <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">'</span><span style="">dfect/auto</span><span style="color:#710">'</span></span> <span style="color:#036;font-weight:bold">D</span> <span style="background-color:#fff0f0;color:#D20"><span style="color:#710">&quot;</span><span style="">a test</span><span style="color:#710">&quot;</span></span> <span style="color:#080;font-weight:bold">do</span> @@ -629,32 +615,115 @@ <span style="color:#080;font-weight:bold">end</span> <span style="color:#080;font-weight:bold">end</span> </pre></ins></p></div> </div><p></p></div> </div> + <div class="chapter"> - <a name="History"/><div class="nav" id="History"><a title="Focus this segment" href="#History"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#A-sample-unit-test"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Version-0.1.0-2009-04-28"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:History"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="History"/><div class="nav" id="History"><a title="Focus this segment" href="#History"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#A-sample-unit-test"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-1.0.0-2009-05-03"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:History"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h1 class="title"> Chapter&nbsp;4 <br/> <big>History</big> </h1> - <div class="content"><div class="section"> - <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 class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#History"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Thank-you"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Version-0.1.0-2009-04-28"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <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> + +<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> + +<p>Recent experiments in assertion testing libraries smashed my world view:</p> + +<ul> +<li><a href='http://assert2.rubyforge.org'>assert{ 2.0 }</a></li> + +<li><a href='http://github.com/ahoward/testy/tree/master'>Testy</a></li> + +<li><a href='http://www.ruby-forum.com/topic/183354'>Verify</a></li> +</ul> + +<p>The status quo was certainly <em>not</em> &#8220;good enough&#8221;, 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> + +<p>Empowered by this revelation and inspired by <a href='http://www.ruby-forum.com/topic/183354#801895'>Sean O&#8217;Halpin&#8217;s musing</a> on alternative names for assertion methods, I rose to challenge the status quo.</p> + +<div class="section"> + <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="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#History"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Incompatible-changes"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-1.0.0-2009-05-03"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> - 4.1&nbsp;&nbsp;Version 0.1.0 (2009-04-28) + 4.1&nbsp;&nbsp;Version 1.0.0 (2009-05-03) </h2> + <div class="content"><p>This release improves default choices, adds emulation layers to mimic other testing libraries, and fixes some bugs.</p> + +<div class="paragraph"> + <a name="Incompatible-changes"/><div class="nav" id="Incompatible-changes"><a title="Focus this segment" href="#Incompatible-changes"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-1.0.0-2009-05-03"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Incompatible-changes"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <p class="title">Incompatible changes</p> + <div class="content"><ul> +<li> +<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> +</li> + +<li> +<p><code class="line"><span style="color:#036;font-weight:bold">Dfect</span>.run()</code> now appends to previous results by default.</p> + +<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> +</li> +</ul></div> +</div><div class="paragraph"> + <a name="New-features"/><div class="nav" id="New-features"><a title="Focus this segment" href="#New-features"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Incompatible-changes"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <p class="title">New features</p> + <div class="content"><ul> +<li> +<p>Add emulation layers to mimic other testing libraries:</p> + +<ul> +<li><tt>dfect/unit</tt> &#8212; Test::Unit</li> + +<li><tt>dfect/mini</tt> &#8212; Minitest</li> + +<li><tt>dfect/spec</tt> &#8212; RSpec</li> +</ul> +</li> +</ul></div> +</div><div class="paragraph"> + <a name="Bug-fixes"/><div class="nav" id="Bug-fixes"><a title="Focus this segment" href="#Bug-fixes"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <p class="title">Bug fixes</p> + <div class="content"><ul> +<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> +</ul></div> +</div><div class="paragraph"> + <a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Focus this segment" href="#Housekeeping"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.1.0-2009-04-28"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <p class="title">Housekeeping</p> + <div class="content"><ul> +<li> +<p>Add <a class="xref" href="#Motivation" title="Section 1.1">Motivation</a> section in user manual to promote interactive debugging.</p> +</li> + +<li> +<p>Add brief <a class="xref" href="#History" title="Chapter 4">History</a> of this project&#8217;s inception.</p> +</li> + +<li> +<p>Remove redundant assertions for F!() and T!() methods in test suite.</p> +</li> + +<li> +<p>Add copyright notice at the top of every file.</p> +</li> +</ul></div> +</div><p> </p></div> +</div><div class="section"> + <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="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Thank-you"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Version-0.1.0-2009-04-28"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> + <h2 class="title"> + 4.2&nbsp;&nbsp;Version 0.1.0 (2009-04-28) + </h2> <div class="content"><p>This release adds new variations to assertion methods, fixes several bugs, and improves test coverage.</p> <div class="paragraph"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Version-0.1.0-2009-04-28"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#New-features"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Thank-you"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Thank-you"/><div class="nav" id="Thank-you"><a title="Focus this segment" href="#Thank-you"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Version-0.1.0-2009-04-28"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#New-features-615768778"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Thank-you"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Thank you</p> <div class="content"><ul> <li>François Beausoleil contributed patches for both code <em>and</em> tests! :-)</li> </ul></div> </div><div class="paragraph"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Thank-you"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Bug-fixes"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:New-features"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="New-features-615768778"/><div class="nav" id="New-features-615768778"><a title="Focus this segment" href="#New-features-615768778"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Thank-you"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Bug-fixes-615787488"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:New-features-615768778"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">New features</p> <div class="content"><ul> <li> <p>Added <a class="xref" href="#Negation" title="Paragraph. &quot;Negation&quot;">negation (m!)</a> and <a class="xref" href="#Sampling" title="Paragraph. &quot;Sampling&quot;">sampling (m?)</a> variations to <a class="xref" href="#Assertions" title="Section 3.1. &quot;Assertions&quot;">assertion methods</a>.</p> @@ -664,11 +733,11 @@ <li> <p>Added documentation on <a class="xref" href="#Insulation" title="Section 3.2.2. &quot;Insulation&quot;">how to insulate tests</a> from the global Ruby namespace.</p> </li> </ul></div> </div><div class="paragraph"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#New-features"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Housekeeping"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Bug-fixes"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Bug-fixes-615787488"/><div class="nav" id="Bug-fixes-615787488"><a title="Focus this segment" href="#Bug-fixes-615787488"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#New-features-615768778"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Housekeeping-615791368"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Bug-fixes-615787488"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Bug fixes</p> <div class="content"><ul> <li> <p>The <code class="line">E()</code> method did not consider the case where a block does not raise anything as a failure. &#8212;<em>François Beausoleil</em></p> </li> @@ -688,67 +757,58 @@ <pre>TypeError: can&#39;t dump anonymous class Class</pre> </li> </ul></div> </div><div class="paragraph"> - <a name="Housekeeping"/><div class="nav" id="Housekeeping"><a title="Focus this segment" href="#Housekeeping"><img class="icon" src="&icon_nav_here;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Bug-fixes"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Focus next segment" href="#Version-0.0.0-2009-04-13"><img class="icon" src="&icon_nav_next;" alt="&darr;"/></a> <a title="Return to listing" href="#rev:Housekeeping"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <a name="Housekeeping-615791368"/><div class="nav" id="Housekeeping-615791368"><a title="Focus this segment" href="#Housekeeping-615791368"><img alt="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Bug-fixes-615787488"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Focus next segment" href="#Version-0.0.0-2009-04-13"><img alt="&darr;" class="icon" src="&icon_nav_next;"/></a> <a title="Return to listing" href="#rev:Housekeeping-615791368"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <p class="title">Housekeeping</p> <div class="content"><ul> <li>Filled the big holes in test coverage. Everything except the runtime debugging logic is now covered by the unit tests.</li> </ul></div> -</div><p></p></div> +</div><p> </p></div> </div><div class="section"> - <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;" alt="&lowast;"/></a> <a title="Focus previous segment" href="#Housekeeping"><img class="icon" src="&icon_nav_prev;" alt="&uarr;"/></a> <a title="Return to listing" href="#rev:Version-0.0.0-2009-04-13"><img class="icon" src="&icon_nav_list;" alt="&equiv;"/></a></div> + <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="&lowast;" class="icon" src="&icon_nav_here;"/></a> <a title="Focus previous segment" href="#Housekeeping-615791368"><img alt="&uarr;" class="icon" src="&icon_nav_prev;"/></a> <a title="Return to listing" href="#rev:Version-0.0.0-2009-04-13"><img alt="&equiv;" class="icon" src="&icon_nav_list;"/></a></div> <h2 class="title"> - 4.2&nbsp;&nbsp;Version 0.0.0 (2009-04-13) + 4.3&nbsp;&nbsp;Version 0.0.0 (2009-04-13) </h2> <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&#8217;Halpin&#8217;s musing</a> on alternative names for assertion methods.</p></div> </div><p></p><p></p></div> </div> </div> + <br style="display: none"/> <hr style="display: none"/> <br style="display: none"/> <div id="footer"> - Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 7.0.0</a> on Tue Apr 28 22:22:39 -0700 2009. + Generated by <a href="http://snk.tuxfamily.org/lib/erbook/">ERBook 7.0.0</a> on Mon May 04 01:18:01 -0700 2009. <div id="footer-credits"> <p> - <img class="icon" src="&icon_here_frag;" alt="here_frag"/> + <img alt="here_frag" class="icon" src="&icon_here_frag;"/> + <img alt="caution" class="icon" src="&icon_caution;"/> + <img alt="nav_here" class="icon" src="&icon_nav_here;"/> + <img alt="nav_prev" class="icon" src="&icon_nav_prev;"/> + <img alt="tip" class="icon" src="&icon_tip;"/> + <img alt="important" class="icon" src="&icon_important;"/> + <img alt="nav_list" class="icon" src="&icon_nav_list;"/> + <img alt="note" class="icon" src="&icon_note;"/> + <img alt="warning" class="icon" src="&icon_warning;"/> + <img alt="quote" class="icon" src="&icon_quote;"/> + <img alt="nav_next" class="icon" src="&icon_nav_next;"/> - <img class="icon" src="&icon_caution;" alt="caution"/> - - <img class="icon" src="&icon_nav_here;" alt="nav_here"/> - - <img class="icon" src="&icon_nav_prev;" alt="nav_prev"/> - - <img class="icon" src="&icon_tip;" alt="tip"/> - - <img class="icon" src="&icon_important;" alt="important"/> - - <img class="icon" src="&icon_nav_list;" alt="nav_list"/> - - <img class="icon" src="&icon_note;" alt="note"/> - - <img class="icon" src="&icon_warning;" alt="warning"/> - - <img class="icon" src="&icon_quote;" alt="quote"/> - - <img class="icon" src="&icon_nav_next;" alt="nav_next"/> - <br/> The icons shown above are part of <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango Icon Theme</a>, which is copyright &copy; 2005 <a href="http://tango.freedesktop.org">Tango Desktop Project</a> and is distributed under <a href="http://creativecommons.org/licenses/by-sa/2.5/">Creative Commons Attribution-ShareAlike 2.5 License Agreement</a>. </p> <p> - <img class="icon" src="&icon_hyperlink;" alt="hyperlink"/> + <img alt="hyperlink" class="icon" src="&icon_hyperlink;"/> <br/> The icons shown above are part of <a href="http://www.mediawiki.org/wiki/MediaWiki">MediaWiki</a>, which is copyright &copy; 2007 <a href="https://www.ohloh.net/projects/mediawiki/contributors">MediaWiki contributors</a> and is distributed under <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html">GNU General Public License, version 2</a>. </p>