sarah 0.0.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/HISTORY.txt +18 -0
- data/lib/doc/_index.html +88 -0
- data/lib/doc/class_list.html +53 -0
- data/lib/doc/css/common.css +1 -0
- data/lib/doc/css/full_list.css +57 -0
- data/lib/doc/css/style.css +338 -0
- data/lib/doc/file_list.html +52 -0
- data/lib/doc/frames.html +28 -0
- data/lib/doc/index.html +88 -0
- data/lib/doc/js/app.js +214 -0
- data/lib/doc/js/full_list.js +173 -0
- data/lib/doc/js/jquery.js +4 -0
- data/lib/doc/method_list.html +52 -0
- data/lib/doc/top-level-namespace.html +102 -0
- data/lib/sarah.rb +1256 -218
- data/sarah.gemspec +2 -2
- data/test/05class2.rb +49 -0
- data/test/06instance2.rb +41 -0
- data/test/07inst_attr.rb +84 -0
- data/test/08set_ops.rb +36 -0
- data/test/09delete_unset.rb +135 -0
- data/test/10count_size.rb +36 -0
- data/test/11each.rb +49 -0
- data/test/12search.rb +52 -0
- data/test/13misc.rb +155 -0
- data/test/14slice.rb +55 -0
- metadata +36 -3
@@ -0,0 +1,4 @@
|
|
1
|
+
/*! jQuery v1.7.1 jquery.com | jquery.org/license */
|
2
|
+
(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cv(a){if(!ck[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function cb(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function ca(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bE.test(a)?d(a,e):ca(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)ca(a+"["+e+"]",b[e],c,d);else d(a,b)}function b_(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function b$(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bT,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=b$(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=b$(a,c,d,e,"*",g));return l}function bZ(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bP),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bC(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bx:by,g=0,h=e.length;if(d>0){if(c!=="border")for(;g<h;g++)c||(d-=parseFloat(f.css(a,"padding"+e[g]))||0),c==="margin"?d+=parseFloat(f.css(a,c+e[g]))||0:d-=parseFloat(f.css(a,"border"+e[g]+"Width"))||0;return d+"px"}d=bz(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0;if(c)for(;g<h;g++)d+=parseFloat(f.css(a,"padding"+e[g]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+e[g]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+e[g]))||0);return d+"px"}function bp(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c+(i[c][d].namespace?".":"")+i[c][d].namespace,i[c][d],i[c][d].data)}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?m(g):h==="function"&&(!a.unique||!o.has(g))&&c.push(g)},n=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,l=j||0,j=0,k=c.length;for(;c&&l<k;l++)if(c[l].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}i=!1,c&&(a.once?e===!0?o.disable():c=[]:d&&d.length&&(e=d.shift(),o.fireWith(e[0],e[1])))},o={add:function(){if(c){var a=c.length;m(arguments),i?k=c.length:e&&e!==!0&&(j=a,n(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){i&&f<=k&&(k--,f<=l&&l--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&o.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(i?a.once||d.push([b,c]):(!a.once||!e)&&n(b,c));return this},fire:function(){o.fireWith(this,arguments);return this},fired:function(){return!!e}};return o};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p,q=c.createElement("div"),r=c.documentElement;q.setAttribute("className","t"),q.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="<div "+n+"><div></div></div>"+"<table "+n+" cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="<div style='width:4px;'></div>",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h=null;if(typeof a=="undefined"){if(this.length){h=f.data(this[0]);if(this[0].nodeType===1&&!f._data(this[0],"parsedAttrs")){e=this[0].attributes;for(var i=0,j=e.length;i<j;i++)g=e[i].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),l(this[0],g,h[g]));f._data(this[0],"parsedAttrs",!0)}}return h}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split("."),d[1]=d[1]?"."+d[1]:"";if(c===b){h=this.triggerHandler("getData"+d[1]+"!",[d[0]]),h===b&&this.length&&(h=f.data(this[0],a),h=l(this[0],a,h));return h===b&&d[1]?this.data(d[0]):h}return this.each(function(){var b=f(this),e=[d[0],c];b.triggerHandler("setData"+d[1]+"!",e),f.data(this,a,c),b.triggerHandler("changeData"+d[1]+"!",e)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise()}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h<g;h++)e=d[h],e&&(c=f.propFix[e]||e,f.attr(a,e,""),a.removeAttribute(v?e:c),u.test(e)&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};
|
3
|
+
f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=[],j,k,l,m,n,o,p,q,r,s,t;g[0]=c,c.delegateTarget=this;if(e&&!c.target.disabled&&(!c.button||c.type!=="click")){m=f(this),m.context=this.ownerDocument||this;for(l=c.target;l!=this;l=l.parentNode||this){o={},q=[],m[0]=l;for(j=0;j<e;j++)r=d[j],s=r.selector,o[s]===b&&(o[s]=r.quick?H(l,r.quick):m.is(s)),o[s]&&q.push(r);q.length&&i.push({elem:l,matches:q})}}d.length>e&&i.push({elem:this,matches:d.slice(e)});for(j=0;j<i.length&&!c.isPropagationStopped();j++){p=i[j],c.currentTarget=p.elem;for(k=0;k<p.matches.length&&!c.isImmediatePropagationStopped();k++){r=p.matches[k];if(h||!c.namespace&&!r.namespace||c.namespace_re&&c.namespace_re.test(r.namespace))c.data=r.data,c.handleObj=r,n=((f.event.special[r.origType]||{}).handle||r.handler).apply(p.elem,g),n!==b&&(c.result=n,n===!1&&(c.preventDefault(),c.stopPropagation()))}}return c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0)}),d._submit_attached=!0)})},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on.call(this,a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.type+"."+e.namespace:e.type,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.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|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.POS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function()
|
4
|
+
{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bp)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bn(k[i]);else bn(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||be.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bq=/alpha\([^)]*\)/i,br=/opacity=([^)]*)/,bs=/([A-Z]|^ms)/g,bt=/^-?\d+(?:px)?$/i,bu=/^-?\d/,bv=/^([\-+])=([\-+.\de]+)/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Left","Right"],by=["Top","Bottom"],bz,bA,bB;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bz(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bv.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bz)return bz(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return bC(a,b,d);f.swap(a,bw,function(){e=bC(a,b,d)});return e}},set:function(a,b){if(!bt.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cv(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cu("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cu("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cv(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cn.test(h)?(o=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),o?(f._data(this,"toggle"+i,o==="show"?"hide":"show"),j[o]()):j[h]()):(k=co.exec(h),l=j.cur(),k?(m=parseFloat(k[2]),n=k[3]||(f.cssNumber[i]?"":"px"),n!=="px"&&(f.style(this,i,(m||1)+n),l=(m||1)/j.cur()*l,f.style(this,i,l+n)),k[1]&&(m=(k[1]==="-="?-1:1)*m+l),j.custom(l,m,n)):j.custom(l,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:cu("show",1),slideUp:cu("hide",1),slideToggle:cu("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cr||cs(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){e.options.hide&&f._data(e.elem,"fxshow"+e.prop)===b&&f._data(e.elem,"fxshow"+e.prop,e.start)},h()&&f.timers.push(h)&&!cp&&(cp=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cr||cs(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cp),cp=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(["width","height"],function(a,b){f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cy(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.support.fixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.support.fixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window);
|
@@ -0,0 +1,52 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
|
7
|
+
<link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
|
8
|
+
|
9
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
10
|
+
|
11
|
+
|
12
|
+
|
13
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
14
|
+
|
15
|
+
<script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
|
16
|
+
|
17
|
+
|
18
|
+
<base id="base_target" target="_parent" />
|
19
|
+
</head>
|
20
|
+
<body>
|
21
|
+
<script type="text/javascript" charset="utf-8">
|
22
|
+
if (window.top.frames.main) {
|
23
|
+
document.getElementById('base_target').target = 'main';
|
24
|
+
document.body.className = 'frames';
|
25
|
+
}
|
26
|
+
</script>
|
27
|
+
<div id="content">
|
28
|
+
<h1 id="full_list_header">Method List</h1>
|
29
|
+
<div id="nav">
|
30
|
+
|
31
|
+
<span><a target="_self" href="class_list.html">
|
32
|
+
Classes
|
33
|
+
</a></span>
|
34
|
+
|
35
|
+
<span><a target="_self" href="method_list.html">
|
36
|
+
Methods
|
37
|
+
</a></span>
|
38
|
+
|
39
|
+
<span><a target="_self" href="file_list.html">
|
40
|
+
Files
|
41
|
+
</a></span>
|
42
|
+
|
43
|
+
</div>
|
44
|
+
<div id="search">Search: <input type="text" /></div>
|
45
|
+
|
46
|
+
<ul id="full_list" class="method">
|
47
|
+
|
48
|
+
|
49
|
+
</ul>
|
50
|
+
</div>
|
51
|
+
</body>
|
52
|
+
</html>
|
@@ -0,0 +1,102 @@
|
|
1
|
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
2
|
+
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
3
|
+
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
4
|
+
<head>
|
5
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
6
|
+
<title>
|
7
|
+
Top Level Namespace
|
8
|
+
|
9
|
+
— Documentation by YARD 0.8.5.2
|
10
|
+
|
11
|
+
</title>
|
12
|
+
|
13
|
+
<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
|
14
|
+
|
15
|
+
<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
|
16
|
+
|
17
|
+
<script type="text/javascript" charset="utf-8">
|
18
|
+
hasFrames = window.top.frames.main ? true : false;
|
19
|
+
relpath = '';
|
20
|
+
framesUrl = "frames.html#!" + escape(window.location.href);
|
21
|
+
</script>
|
22
|
+
|
23
|
+
|
24
|
+
<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
|
25
|
+
|
26
|
+
<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
|
27
|
+
|
28
|
+
|
29
|
+
</head>
|
30
|
+
<body>
|
31
|
+
<div id="header">
|
32
|
+
<div id="menu">
|
33
|
+
|
34
|
+
<a href="_index.html">Index</a> »
|
35
|
+
|
36
|
+
|
37
|
+
<span class="title">Top Level Namespace</span>
|
38
|
+
|
39
|
+
|
40
|
+
<div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
|
41
|
+
</div>
|
42
|
+
|
43
|
+
<div id="search">
|
44
|
+
|
45
|
+
<a class="full_list_link" id="class_list_link"
|
46
|
+
href="class_list.html">
|
47
|
+
Class List
|
48
|
+
</a>
|
49
|
+
|
50
|
+
<a class="full_list_link" id="method_list_link"
|
51
|
+
href="method_list.html">
|
52
|
+
Method List
|
53
|
+
</a>
|
54
|
+
|
55
|
+
<a class="full_list_link" id="file_list_link"
|
56
|
+
href="file_list.html">
|
57
|
+
File List
|
58
|
+
</a>
|
59
|
+
|
60
|
+
</div>
|
61
|
+
<div class="clear"></div>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<iframe id="search_frame"></iframe>
|
65
|
+
|
66
|
+
<div id="content"><h1>Top Level Namespace
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
</h1>
|
71
|
+
|
72
|
+
<dl class="box">
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
</dl>
|
82
|
+
<div class="clear"></div>
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
</div>
|
94
|
+
|
95
|
+
<div id="footer">
|
96
|
+
Generated on Fri Mar 28 22:10:10 2014 by
|
97
|
+
<a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
|
98
|
+
0.8.5.2 (ruby-1.9.2).
|
99
|
+
</div>
|
100
|
+
|
101
|
+
</body>
|
102
|
+
</html>
|
data/lib/sarah.rb
CHANGED
@@ -1,69 +1,264 @@
|
|
1
|
-
# Sarah
|
1
|
+
# Sarah is a hybrid sequential array, sparse array, and random-access hash
|
2
|
+
# implementing alternate semantics for Ruby arrays.
|
2
3
|
#
|
3
|
-
#
|
4
|
-
#
|
5
|
-
#
|
6
|
-
# are created or removed.
|
4
|
+
# By default, negative indexes are relative to the end of the array (just
|
5
|
+
# like a regular Ruby Array), but they can be configured to be distinct,
|
6
|
+
# actual indexes instead.
|
7
7
|
#
|
8
|
-
#
|
9
|
-
#
|
8
|
+
# Sarahs can also be used to implement (pure Ruby) sparse matrices,
|
9
|
+
# especially when used in conjunction with the Sarah::XK module (gem
|
10
|
+
# sarah-xk), an XKeys extension for Sarah.
|
11
|
+
#
|
12
|
+
# = Background
|
13
|
+
#
|
14
|
+
# Standard Ruby lets you create an array literal like:
|
15
|
+
#
|
16
|
+
# a = [ 1, 2, 5 => :five, :six => 'hello' ]
|
17
|
+
#
|
18
|
+
# which is a short-cut for an array with an embedded hash:
|
19
|
+
#
|
20
|
+
# a = [ 1, 2, { 5 => :five, :six => 'hello' } }
|
21
|
+
#
|
22
|
+
# Initially: After v = a.shift:
|
23
|
+
#
|
24
|
+
# a[0] = a[-3] = 1 v = 1
|
25
|
+
# a[1] = a[-2] = 2 a[0] = a[-2] = 2
|
26
|
+
# a[2] = a[-1] = a hash a[1] = a[-1] = a hash
|
27
|
+
# a[3][5] = :five a[2][5] = :five
|
28
|
+
# a[3][:six] = 'hello' a[2][:six] = 'hello'
|
29
|
+
#
|
30
|
+
# In contrast, using a Sarah looks like this:
|
31
|
+
#
|
32
|
+
# s = Sarah[ 1, 2, 5 => :five, :six => 'hello' ]
|
33
|
+
#
|
34
|
+
# Initially: After v = s.shift:
|
35
|
+
#
|
36
|
+
# s[0] = s[-6] = 1 v = 1
|
37
|
+
# s[1] = s[-5] = 2 s[0] = s[-5] = 2
|
38
|
+
# s[5] = s[-1] = :five s[4] = s[-1] = :five
|
39
|
+
# s[:six] = 'hello' s[:six] = 'hello'
|
40
|
+
#
|
41
|
+
# = Internal Structure
|
42
|
+
#
|
43
|
+
# As of version 2.0.0, there are three major data structures internally:
|
44
|
+
# * "seq" - an array of sequentially-indexed values beginning at index 0
|
45
|
+
# (except when negative actual keys are present; see {#negative_mode=}
|
46
|
+
# :actual)
|
47
|
+
# * "spr" - a hash representing a sparse array of all other
|
48
|
+
# numerically-indexed values
|
49
|
+
# * "rnd" - a "random access" hash of all non-numerically keyed values
|
50
|
+
#
|
51
|
+
# The sequential and sparse parts are collectively referred to as "ary".
|
52
|
+
# All three parts together are collectively referred to as "all".
|
53
|
+
#
|
54
|
+
# Some methods allow you to direct their action to all or specific parts
|
55
|
+
# of the structure by specifying a corrsponding symbol, :seq, :spr, :ary,
|
56
|
+
# :rnd, or :all.
|
57
|
+
#
|
58
|
+
# @author Brian Katzung (briank@kappacs.com), Kappa Computer Solutions, LLC
|
59
|
+
# @copyright 2013-2014 Brian Katzung and Kappa Computer Solutions, LLC
|
10
60
|
# @license MIT License
|
61
|
+
# @version 2.0.0
|
11
62
|
|
12
63
|
class Sarah
|
13
64
|
|
65
|
+
VERSION = "2.0.0"
|
66
|
+
|
67
|
+
# Private attributes:
|
68
|
+
# seq [Array] An array of (zero-origin) sequential values.
|
69
|
+
# spr [Hash] A hash of (typically sparse) integer-keyed values. If
|
70
|
+
# there are any negatively-keyed values (in :actual negative mode),
|
71
|
+
# this hash contains all of the numerically-indexed values.
|
72
|
+
# rnd [Hash] A hash of non-numerically-keyed values.
|
73
|
+
# ary_first [Integer] The first integer array index.
|
74
|
+
# ary_next [Integer] One more than the highest integer array index.
|
75
|
+
|
14
76
|
# @!attribute default
|
15
|
-
# The default value
|
77
|
+
# The default value to return for missing keys and for pop or shift
|
78
|
+
# on an empty array.
|
16
79
|
attr_accessor :default
|
17
80
|
|
18
81
|
# @!attribute default_proc
|
19
|
-
#
|
20
|
-
#
|
21
|
-
#
|
22
|
-
#
|
23
|
-
|
82
|
+
# A proc to call to return a default value for missing keys and for
|
83
|
+
# pop or shift on an empty array. The proc is passed the Sarah
|
84
|
+
# and the missing key (or nil for pop and shift).
|
85
|
+
# @return [Proc|nil]
|
86
|
+
attr :default_proc
|
87
|
+
|
88
|
+
# @!attribute [r] negative_mode
|
89
|
+
# @return [:actual|:error|:ignore]
|
90
|
+
# How negative indexes/keys are handled. Possible values are
|
91
|
+
# :actual, :error, and :ignore. See {#negative_mode=}.
|
92
|
+
attr_reader :negative_mode
|
93
|
+
|
94
|
+
# ##### Class Methods #####
|
95
|
+
|
96
|
+
# Instantiate a "Sarah literal".
|
97
|
+
#
|
98
|
+
# s = Sarah[pos1, ..., posN, key1 => val1, ..., keyN => valN]
|
99
|
+
#
|
100
|
+
# s = Sarah['sequen', 'tial', 5 => 'sparse', :key => 'random']
|
101
|
+
#
|
102
|
+
# @return [Sarah]
|
103
|
+
# @since 2.0.0
|
104
|
+
def self.[] (*args); new.set *args; end
|
105
|
+
|
106
|
+
# Try to convert the passed object to a Sarah.
|
107
|
+
#
|
108
|
+
# In the current implementation, the object must respond to #to_sarah,
|
109
|
+
# #each_index, or #each_pair.
|
110
|
+
#
|
111
|
+
# @param source [Object] The object to try to convert
|
112
|
+
# @return [Sarah|nil]
|
113
|
+
# @since 2.0.0
|
114
|
+
def self.try_convert (source)
|
115
|
+
if source.respond_to? :to_sarah then source.to_sarah
|
116
|
+
elsif source.respond_to?(:each_index) || source.respond_to?(:each_pair)
|
117
|
+
new :from => source
|
118
|
+
else nil
|
119
|
+
end
|
120
|
+
end
|
24
121
|
|
25
122
|
# Initialize a new instance.
|
26
123
|
#
|
124
|
+
# An initialization array may optionally be passed as the first
|
125
|
+
# parameter. (Since 2.0.0)
|
126
|
+
#
|
27
127
|
# If passed a block, the block is called to provide default values
|
28
128
|
# instead of using the :default option value. The block is passed the
|
29
129
|
# hash and the requested key (or nil for a shift or pop on an empty
|
30
130
|
# sequential array).
|
31
131
|
#
|
32
|
-
#
|
33
|
-
#
|
34
|
-
#
|
35
|
-
#
|
36
|
-
|
37
|
-
|
38
|
-
# @option opts [Hash, Array] :hash A hash (or array!) to use for
|
39
|
-
# initialization (second).
|
40
|
-
# @option opts [Array, Hash] :from An array or hash to use for
|
41
|
-
# initialization (third).
|
42
|
-
def initialize (opts = {}, &block)
|
132
|
+
# s = Sarah.new([pos1, ..., posN, key1 => val1, ..., keyN => valN],
|
133
|
+
# :default => default, :default_proc => Proc.new { |sarah, key| block },
|
134
|
+
# :array => source, :hash => source, :from => source,
|
135
|
+
# :negative_mode => negative_mode)
|
136
|
+
def initialize (*args, &block)
|
137
|
+
opts = (!args.empty? && args[-1].is_a?(Hash)) ? args.pop : {}
|
43
138
|
clear
|
139
|
+
@negative_mode = :error
|
140
|
+
self.negative_mode = opts[:negative_mode]
|
44
141
|
@default = opts[:default]
|
45
142
|
@default_proc = block || opts[:default_proc]
|
143
|
+
if !args.empty?
|
144
|
+
case args[0]
|
145
|
+
when Array then set *args[0]
|
146
|
+
when Sarah
|
147
|
+
self.default = args[0].default
|
148
|
+
self.default_proc = args[0].default_proc
|
149
|
+
self.negative_mode = args[0].negative_mode
|
150
|
+
merge! args[0]
|
151
|
+
end
|
152
|
+
end
|
46
153
|
merge! opts[:array], opts[:hash], opts[:from]
|
47
154
|
end
|
48
155
|
|
49
|
-
#
|
156
|
+
# ##### Instance Methods #####
|
157
|
+
|
158
|
+
# Compute the intersection with another object.
|
159
|
+
#
|
160
|
+
# The intersection of array values is taken without regard to indexes.
|
161
|
+
# Random-access hash values must match by key and value.
|
162
|
+
#
|
163
|
+
# @return [Sarah]
|
164
|
+
# @since 2.0.0
|
165
|
+
def & (other)
|
166
|
+
case other
|
167
|
+
when Array then new_similar :array => (values(:ary) & other)
|
168
|
+
when Hash, Sarah
|
169
|
+
new_similar(:array => (values(:ary) & _hash_filter(other, :array).
|
170
|
+
values), :hash => other.select { |k, v| @rnd[k] == v })
|
171
|
+
else raise TypeError.new('Unsupported type in Sarah#&')
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
# Compute the union with another object.
|
176
|
+
#
|
177
|
+
# Changed random-access hash values for a given key overwrite the
|
178
|
+
# original value.
|
179
|
+
#
|
180
|
+
# @return [Sarah]
|
181
|
+
# @since 2.0.0
|
182
|
+
def | (other)
|
183
|
+
case other
|
184
|
+
when Array then new_similar(:hash => @rnd).merge!(values(:ary) | other)
|
185
|
+
when Hash, Sarah
|
186
|
+
new_similar.merge!(@rnd, _hash_filter(other, :other),
|
187
|
+
values(:ary) | _hash_filter(other, :array).values)
|
188
|
+
else raise TypeError.new('Unsupported type in Sarah#|')
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
# #* (replicate or join) is not implemented.
|
193
|
+
|
194
|
+
# Return a new Sarah that is the concatenation of this one and
|
195
|
+
# another object.
|
196
|
+
#
|
197
|
+
# (#+ alias since 2.0.0)
|
198
|
+
def + (other)
|
199
|
+
new_similar(:from => self).append!(other)
|
200
|
+
end
|
201
|
+
|
202
|
+
alias_method :concat, :+
|
203
|
+
|
204
|
+
# Compute the array difference with another object.
|
205
|
+
#
|
206
|
+
# Random-access hash values are only removed when both keys and values
|
207
|
+
# match.
|
50
208
|
#
|
51
209
|
# @return [Sarah]
|
52
|
-
|
53
|
-
|
54
|
-
|
210
|
+
# @since 2.0.0
|
211
|
+
def - (other)
|
212
|
+
case other
|
213
|
+
when Array then new_similar(:array => (values(:ary) - other),
|
214
|
+
:hash => @rnd)
|
215
|
+
when Hash, Sarah
|
216
|
+
new_similar(:array => (values(:ary) -
|
217
|
+
other.select { |k, v| k.is_a? Integer}.values),
|
218
|
+
:hash => @rnd.select { |k, v| other[k] != v })
|
219
|
+
else raise TypeError.new('Unsupported type in Sarah#-')
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
# Push (append) sequential values.
|
224
|
+
#
|
225
|
+
# @param vlist [Array] A list of values to push (append).
|
226
|
+
# @return [Sarah]
|
227
|
+
def << (*vlist)
|
228
|
+
if !@spr.empty?
|
229
|
+
# Sparse push
|
230
|
+
vlist.each do |value|
|
231
|
+
self[@ary_next] = value
|
232
|
+
@ary_next += 1
|
233
|
+
end
|
234
|
+
else
|
235
|
+
# Sequential push
|
236
|
+
@seq.push *vlist
|
237
|
+
@ary_next = @seq.size
|
238
|
+
end
|
55
239
|
self
|
56
240
|
end
|
57
241
|
|
58
|
-
|
242
|
+
alias_method :push, :<<
|
243
|
+
|
244
|
+
# Array comparison (#<=>) - not supported
|
245
|
+
|
246
|
+
# Check for equality with another object.
|
59
247
|
#
|
60
|
-
#
|
61
|
-
#
|
62
|
-
|
63
|
-
|
64
|
-
|
248
|
+
# Compares to arrays via {#to_a} and to hashes or Sarahs via {#to_h}.
|
249
|
+
#
|
250
|
+
# @since 2.0.0
|
251
|
+
def == (other)
|
252
|
+
case other
|
253
|
+
when Array then to_a == other
|
254
|
+
when Hash then to_h == other
|
255
|
+
when Sarah then to_h == other.to_h
|
256
|
+
else false
|
257
|
+
end
|
65
258
|
end
|
66
259
|
|
260
|
+
alias_method :eql?, :==
|
261
|
+
|
67
262
|
# Get a value by sequential or random-access key. If the key does not
|
68
263
|
# exist, the default value or initial block value is returned. If
|
69
264
|
# called with a range or an additional length parameter, a slice is
|
@@ -71,165 +266,467 @@ class Sarah
|
|
71
266
|
#
|
72
267
|
# @param key The key for the value to be returned, or a range.
|
73
268
|
# @param len [Integer] An optional slice length.
|
74
|
-
# @return [Object
|
269
|
+
# @return [Object|Array]
|
75
270
|
def [] (key, len = nil)
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
271
|
+
# Slice cases...
|
272
|
+
return slice(key, len) if len
|
273
|
+
return slice(key) if key.is_a? Range
|
274
|
+
|
275
|
+
if key.is_a? Integer
|
276
|
+
# A key in the sequential array or sparse array hash?
|
277
|
+
catch :index_error do
|
278
|
+
key = _adjust_key key
|
279
|
+
return @seq[key] if key >= 0 && key < @seq.size
|
280
|
+
return @spr[key] if @spr.has_key? key
|
281
|
+
end
|
84
282
|
else
|
85
|
-
|
283
|
+
# A key in the random-access hash?
|
284
|
+
return @rnd[key] if @rnd.has_key? key
|
86
285
|
end
|
286
|
+
|
287
|
+
# Return the default value
|
288
|
+
@default_proc ? @default_proc.call(self, key) : @default
|
87
289
|
end
|
88
290
|
|
89
|
-
|
90
|
-
|
91
|
-
#
|
92
|
-
#
|
93
|
-
# If a local block is supplied, it is passed the key as a parameter.
|
291
|
+
alias_method :at, :[]
|
292
|
+
|
293
|
+
# Set a value by sequential or random-access key.
|
94
294
|
#
|
95
|
-
# @param key The key for the value
|
96
|
-
# @param
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
295
|
+
# @param key The key for which the value should be set.
|
296
|
+
# @param value The value to set for the key.
|
297
|
+
# @return Returns the value.
|
298
|
+
def []= (key, value)
|
299
|
+
if key.is_a? Integer
|
300
|
+
# A key in the sequential array or sparse array hash...
|
301
|
+
catch :index_error do
|
302
|
+
key = _adjust_key key
|
303
|
+
if key >= 0 && key <= @seq.size && @ary_first >= 0
|
304
|
+
# It's in sequence
|
305
|
+
@seq[key] = value
|
306
|
+
_spr_to_seq if @spr.has_key? @seq.size
|
307
|
+
else
|
308
|
+
# It's a sparse key
|
309
|
+
if (@seq.empty? && @spr.empty?) || key < @ary_first
|
310
|
+
@ary_first = key
|
311
|
+
end
|
312
|
+
_seq_to_spr if key < 0 && !@seq.empty?
|
313
|
+
@spr[key] = value
|
314
|
+
end
|
315
|
+
@ary_next = key + 1 if key >= @ary_next
|
316
|
+
end
|
106
317
|
else
|
107
|
-
|
318
|
+
# A key in the random-access hash...
|
319
|
+
@rnd[key] = value
|
108
320
|
end
|
321
|
+
|
322
|
+
value
|
109
323
|
end
|
110
324
|
|
111
|
-
|
325
|
+
alias_method :store, :[]=
|
326
|
+
|
327
|
+
# Append arrays or Sarahs and merge hashes.
|
112
328
|
#
|
113
|
-
# @
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
329
|
+
# @param ahlist [Array<Array, Hash, Sarah>] The structures to append.
|
330
|
+
# @return [Sarah]
|
331
|
+
def append! (*ahlist)
|
332
|
+
ahlist.each do |ah|
|
333
|
+
if ah.is_a? Sarah
|
334
|
+
push *ah.values(:ary)
|
335
|
+
merge! ah.to_h(:rnd)
|
336
|
+
elsif ah.respond_to? :each_pair
|
337
|
+
merge! ah
|
338
|
+
elsif ah.respond_to? :each_index
|
339
|
+
push *ah
|
340
|
+
end
|
121
341
|
end
|
342
|
+
self
|
122
343
|
end
|
123
344
|
|
124
|
-
#
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
345
|
+
# Return the first associated array. See Array#assoc and Hash#assoc.
|
346
|
+
# The result is always in Array#assoc format.
|
347
|
+
#
|
348
|
+
# @param which [:all|:ary|:seq|:spr|:rnd] Which elements to search.
|
349
|
+
# @return [Array|nil]
|
350
|
+
# @since 2.0.0
|
351
|
+
def assoc (other, which = :all)
|
352
|
+
res = nil
|
353
|
+
case which when :all, :ary, :seq then res ||= @seq.assoc(other) end
|
354
|
+
case which when :all, :ary, :spr
|
355
|
+
res ||= @spr.values_at(*@spr.keys.sort).assoc(other)
|
132
356
|
end
|
357
|
+
case which when :all, :rnd
|
358
|
+
if res.nil?
|
359
|
+
res = @rnd.assoc(other)
|
360
|
+
res.flatten!(1) unless res.nil?
|
361
|
+
end
|
362
|
+
end
|
363
|
+
res
|
133
364
|
end
|
134
365
|
|
135
|
-
#
|
366
|
+
# #bsearch (binary search) is not implemented.
|
367
|
+
|
368
|
+
# Clear sequential+sparse array and/or random-access hash values.
|
136
369
|
#
|
370
|
+
# @param which [:all|:ary|:rnd] (since 2.0.0)
|
137
371
|
# @return [Sarah]
|
138
|
-
def
|
139
|
-
|
140
|
-
|
372
|
+
def clear (which = :all)
|
373
|
+
case which when :all, :ary
|
374
|
+
@seq, @spr, @ary_first, @ary_next = [], {}, 0, 0
|
375
|
+
end
|
376
|
+
case which when :all, :rnd then @rnd = {} end
|
141
377
|
self
|
142
378
|
end
|
143
379
|
|
144
|
-
|
380
|
+
# #collect and #collect! are not implemented, but see #ary_collect!.
|
145
381
|
|
146
|
-
#
|
382
|
+
# Collect (map) in-place. The block (required) is passed the current
|
383
|
+
# value and the index/key (in that order). The return value of the
|
384
|
+
# block becomes the new value.
|
385
|
+
#
|
386
|
+
# s.collect!(which) { |value, key| block }
|
147
387
|
#
|
388
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] Which data structures
|
389
|
+
# are mapped.
|
148
390
|
# @return [Sarah]
|
149
|
-
|
150
|
-
|
151
|
-
|
391
|
+
# @since 2.0.0
|
392
|
+
def collect! (which = :all)
|
393
|
+
case which when :all, :ary, :seq
|
394
|
+
@seq.each_index { |index| @seq[index] = yield @seq[index], index }
|
395
|
+
end
|
396
|
+
case which when :all, :ary, :spr
|
397
|
+
@spr.each_pair { |key, value| @spr[key] = yield value, key }
|
398
|
+
end
|
399
|
+
case which when :all, :rnd
|
400
|
+
@rnd.each_pair { |key, value| @rnd[key] = yield value, key }
|
401
|
+
end
|
152
402
|
self
|
153
403
|
end
|
154
404
|
|
155
|
-
|
405
|
+
alias_method :map!, :collect!
|
406
|
+
|
407
|
+
# #combination is not implemented.
|
408
|
+
|
409
|
+
# Remove nil values in place. In the case of the sequential and sparse
|
410
|
+
# arrays, the remaining values are reindexed sequentially from 0.
|
156
411
|
#
|
157
|
-
# @param
|
158
|
-
# @
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
@rnd[key] = value
|
412
|
+
# @param which [:all|:ary|:rnd] Which data structures are compacted.
|
413
|
+
# @return [Sarah]
|
414
|
+
def compact! (which = :all)
|
415
|
+
case which when :all, :ary
|
416
|
+
@seq = values(:ary).compact
|
417
|
+
@spr, @ary_first, @ary_next = {}, 0, @seq.size
|
418
|
+
end
|
419
|
+
case which when :all, :rnd
|
420
|
+
@rnd.delete_if { |key, value| value.nil? }
|
167
421
|
end
|
422
|
+
self
|
423
|
+
end
|
168
424
|
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
425
|
+
# #compare_by_identity and #compare_by_identity? are not implemented.
|
426
|
+
|
427
|
+
# Return a count of values or matching objects
|
428
|
+
#
|
429
|
+
# s.count(which, value)
|
430
|
+
# s.count(which) { |item| block }
|
431
|
+
#
|
432
|
+
# @param which [:all|:ary|:rnd] Where to count
|
433
|
+
# @return [Integer]
|
434
|
+
def count (which = :all, *args)
|
435
|
+
if !args.empty? then values(which).count args[0]
|
436
|
+
elsif block_given? then values(which).count { |item| yield item }
|
437
|
+
else size which
|
174
438
|
end
|
439
|
+
end
|
175
440
|
|
176
|
-
|
441
|
+
# #cycle is not implemented.
|
442
|
+
|
443
|
+
# Set the default_proc block for generating default values.
|
444
|
+
#
|
445
|
+
# @param proc [Proc|nil] The proc block for default values.
|
446
|
+
def default_proc= (proc)
|
447
|
+
if proc.nil? || proc.is_a?(Proc) then @default_proc = proc
|
448
|
+
else raise TypeError.new('Default_proc must be a Proc or nil')
|
449
|
+
end
|
450
|
+
proc
|
177
451
|
end
|
178
452
|
|
179
|
-
#
|
453
|
+
# #delete is not implemented. Use #delete_at, #delete_value,
|
454
|
+
# #unset_at, or #unset_value instead.
|
455
|
+
|
456
|
+
# Delete a specific index or key.
|
180
457
|
#
|
181
|
-
#
|
458
|
+
# (#delete_at alias since 2.0.0)
|
459
|
+
def delete_at (key)
|
460
|
+
return unset_at(key) if @negative_mode == :actual
|
461
|
+
if key.is_a? Integer
|
462
|
+
res = nil
|
463
|
+
catch :index_error do
|
464
|
+
key = _adjust_key key
|
465
|
+
if key >= 0 && key < @seq.size
|
466
|
+
res = @seq.delete_at key
|
467
|
+
_scan_spr -1
|
468
|
+
else
|
469
|
+
res = @spr.delete key
|
470
|
+
_scan_spr -1, key
|
471
|
+
end
|
472
|
+
end
|
473
|
+
res
|
474
|
+
else
|
475
|
+
@rnd.delete key
|
476
|
+
end
|
477
|
+
end
|
478
|
+
|
479
|
+
alias_method :delete_key, :delete_at
|
480
|
+
|
481
|
+
# Deletes each value for which the required block returns true.
|
182
482
|
#
|
183
|
-
#
|
184
|
-
#
|
483
|
+
# Subsequent values are re-indexed except when {#negative_mode=}
|
484
|
+
# :actual. See also {#unset_if}.
|
485
|
+
#
|
486
|
+
# The block is passed the current value and nil for the sequential
|
487
|
+
# and sparse arrays or the current value and key (in that order)
|
488
|
+
# for the random-access hash.
|
489
|
+
#
|
490
|
+
# s.delete_if(which) { |value, key| block }
|
491
|
+
#
|
492
|
+
# @param which [:all|:ary|:rnd] The data structures in which to delete.
|
185
493
|
# @return [Sarah]
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
494
|
+
# @since 2.0.0
|
495
|
+
def delete_if (which = :all)
|
496
|
+
if @negative_mode == :actual
|
497
|
+
return unset_if(which) { |value, key| yield value, key }
|
498
|
+
end
|
499
|
+
case which when :all, :ary
|
500
|
+
num_del = @seq.size
|
501
|
+
@seq.delete_if { |value| yield value, nil }
|
502
|
+
num_del -= @seq.size
|
503
|
+
new_spr = {}
|
504
|
+
@spr.keys.sort.each do |key|
|
505
|
+
if yield @spr[key], nil then num_del += 1
|
506
|
+
else new_spr[key - num_del] = @spr[key]
|
507
|
+
end
|
508
|
+
end
|
509
|
+
@spr = new_spr
|
510
|
+
_scan_spr
|
511
|
+
end
|
512
|
+
case which when :all, :rnd
|
513
|
+
@rnd.delete_if { |key, value| yield value, key }
|
514
|
+
end
|
190
515
|
self
|
191
516
|
end
|
192
517
|
|
193
|
-
#
|
518
|
+
# Delete by value.
|
194
519
|
#
|
195
|
-
#
|
520
|
+
# Subsequent values are re-indexed except when {#negative_mode=} :actual.
|
521
|
+
# See also {#unset_value}.
|
196
522
|
#
|
197
|
-
# @param
|
523
|
+
# @param what [Object] The value to be deleted
|
524
|
+
# @param which [:all|:ary|:rnd] The data structures in which to delete.
|
198
525
|
# @return [Sarah]
|
199
|
-
def
|
200
|
-
|
201
|
-
|
526
|
+
def delete_value (what, which = :all)
|
527
|
+
if @negative_mode == :actual
|
528
|
+
unset_if(which) { |value, key| value == what }
|
529
|
+
else
|
530
|
+
delete_if(which) { |value, key| value == what }
|
531
|
+
end
|
202
532
|
end
|
203
533
|
|
204
|
-
|
534
|
+
# #drop and #drop_while are not implemented.
|
205
535
|
|
206
|
-
#
|
536
|
+
# Iterate a block (required) over each key and value like Hash#each.
|
207
537
|
#
|
208
|
-
#
|
538
|
+
# s.each(which) { |key, value| block }
|
539
|
+
#
|
540
|
+
# (#each_key alias since 2.0.0)
|
541
|
+
#
|
542
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] The data structures over
|
543
|
+
# which to iterate. (Since 2.0.0)
|
209
544
|
# @return [Sarah]
|
210
|
-
def
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
545
|
+
def each (which = :all)
|
546
|
+
case which when :all, :ary, :seq
|
547
|
+
@seq.each_index { |i| yield i, @seq[i] }
|
548
|
+
end
|
549
|
+
case which when :all, :ary, :spr
|
550
|
+
@spr.keys.sort.each { |i| yield i, @spr[i] }
|
551
|
+
end
|
552
|
+
case which when :all, :rnd
|
553
|
+
@rnd.each { |key, value| yield key, value }
|
554
|
+
end
|
555
|
+
self
|
556
|
+
end
|
557
|
+
|
558
|
+
alias_method :each_index, :each
|
559
|
+
alias_method :each_key, :each
|
560
|
+
alias_method :each_pair, :each
|
561
|
+
|
562
|
+
# #each_value not implemented.
|
563
|
+
|
564
|
+
# Is the array (or are parts of it) empty?
|
565
|
+
#
|
566
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] When data structures to check
|
567
|
+
# @return [Boolean]
|
568
|
+
# @since 2.0.0
|
569
|
+
def empty? (which = :all)
|
570
|
+
case which
|
571
|
+
when :all then @seq.empty? && @spr.empty? && @rnd.empty?
|
572
|
+
when :ary then @seq.empty? && @spr.empty?
|
573
|
+
when :rnd then @rnd.empty?
|
574
|
+
when :seq then @seq.empty?
|
575
|
+
when :spr then @spr.empty?
|
576
|
+
else true
|
577
|
+
end
|
578
|
+
end
|
579
|
+
|
580
|
+
# Get a value by sequential or random-access key. If the key does not
|
581
|
+
# exist, the local default or block value is returned. If no local or
|
582
|
+
# block value is supplied, a KeyError exception is raised instead.
|
583
|
+
#
|
584
|
+
# If a local block is supplied, it is passed the key as a parameter.
|
585
|
+
#
|
586
|
+
# fetch(key)
|
587
|
+
# fetch(key, default)
|
588
|
+
# fetch(key) { |key| block }
|
589
|
+
#
|
590
|
+
# @param key The key for the value to be returned.
|
591
|
+
# @param default The value to return if the key does not exist.
|
592
|
+
def fetch (key, *default)
|
593
|
+
if key.is_a? Integer
|
594
|
+
# A key in the sequential array or sparse array hash?
|
595
|
+
key += @ary_next if key < 0 && @negative_mode != :actual
|
596
|
+
return @seq[key] if key >= 0 && key < @seq.size
|
597
|
+
return @spr[key] if @spr.has_key? key
|
598
|
+
else
|
599
|
+
# A key in the random-access hash?
|
600
|
+
return @rnd[key] if @rnd.has_key? key
|
601
|
+
end
|
602
|
+
|
603
|
+
if !default.empty? then default[0]
|
604
|
+
elsif block_given? then yield key
|
605
|
+
else raise KeyError.new('Key not found')
|
606
|
+
end
|
607
|
+
end
|
608
|
+
|
609
|
+
# #fill is not implemented.
|
610
|
+
|
611
|
+
# Find the first index within the sequential or sparse array for
|
612
|
+
# the specified value or yielding true from the supplied block.
|
613
|
+
#
|
614
|
+
# find_index(value)
|
615
|
+
# find_index { |value| block }
|
616
|
+
#
|
617
|
+
# @return [Integer|nil]
|
618
|
+
# @since 2.0.0
|
619
|
+
def find_index (*args)
|
620
|
+
if block_given?
|
621
|
+
index = @seq.index { |value| yield value }
|
622
|
+
return index unless index.nil?
|
623
|
+
@spr.keys.sort.each do |index|
|
624
|
+
return index if yield @spr[index]
|
219
625
|
end
|
626
|
+
else
|
627
|
+
value = args.pop
|
628
|
+
index = @seq.index value
|
629
|
+
return index unless index.nil?
|
630
|
+
@spr.keys.sort.each { |index| return index if @spr[index] == value }
|
220
631
|
end
|
632
|
+
nil
|
633
|
+
end
|
634
|
+
|
635
|
+
alias_method :index, :find_index
|
636
|
+
|
637
|
+
# Return the first array value or first n array values.
|
638
|
+
#
|
639
|
+
# obj = s.first
|
640
|
+
# list = s.first(n)
|
641
|
+
#
|
642
|
+
# @return [Object|Array]
|
643
|
+
def first (*args); values(:ary).first(*args); end
|
644
|
+
|
645
|
+
# Flatten sequential and sparse array values in place.
|
646
|
+
#
|
647
|
+
# @since 2.0.0
|
648
|
+
def flatten! (*levels)
|
649
|
+
if levels.empty? then @seq = values(:ary).flatten
|
650
|
+
else @seq = values(:ary).flatten(levels[0])
|
651
|
+
end
|
652
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
221
653
|
self
|
222
654
|
end
|
223
655
|
|
224
|
-
#
|
656
|
+
# #frozen? is not implemented.
|
657
|
+
|
658
|
+
# #hash is not implemented.
|
659
|
+
|
660
|
+
# #initialize_copy is not implemented.
|
661
|
+
|
662
|
+
# Return a string representation of this object.
|
663
|
+
#
|
664
|
+
# @since 2.0.0
|
665
|
+
def inspect; self.class.name + (@seq + [@spr.merge(@rnd)]).to_s; end
|
666
|
+
|
667
|
+
alias_method :to_s, :inspect
|
668
|
+
|
669
|
+
# #invert is not implemented.
|
670
|
+
|
671
|
+
# Return the sequential and sparse array values as a string,
|
672
|
+
# separated by the supplied separator (or $, or the empty string).
|
673
|
+
#
|
674
|
+
# @param separator [String]
|
675
|
+
# @return [String]
|
676
|
+
# @since 2.0.0
|
677
|
+
def join (separator = nil); values(:ary).join(separator || $, || ''); end
|
678
|
+
|
679
|
+
# #keep_if is not implemented.
|
680
|
+
|
681
|
+
# Test key/index existence.
|
682
|
+
#
|
683
|
+
# (#key? and #member? aliases since 2.0.0)
|
684
|
+
#
|
685
|
+
# @param key The key to check for existence.
|
686
|
+
# @return [Boolean]
|
687
|
+
def has_key? (key)
|
688
|
+
if key.is_a? Integer
|
689
|
+
key += @ary_next if key < 0 && @negative_mode != :actual
|
690
|
+
(key >= 0 && key < @seq.size) || @spr.has_key?(key)
|
691
|
+
else
|
692
|
+
@rnd.has_key? key
|
693
|
+
end
|
694
|
+
end
|
695
|
+
|
696
|
+
alias_method :key?, :has_key?
|
697
|
+
alias_method :member?, :has_key?
|
698
|
+
|
699
|
+
# Test value presence.
|
700
|
+
#
|
701
|
+
# @param value The value for which to check presence.
|
702
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] Where to check for presence.
|
703
|
+
# @return [Boolean]
|
704
|
+
# @since 2.0.0
|
705
|
+
def has_value? (value, which = :all)
|
706
|
+
case which when :all, :ary, :seq
|
707
|
+
return true if @seq.include? value
|
708
|
+
end
|
709
|
+
case which when :all, :ary, :spr
|
710
|
+
return true if @spr.has_value? value
|
711
|
+
end
|
712
|
+
case which when :all, :rnd
|
713
|
+
return true if @rnd.has_value? value
|
714
|
+
end
|
715
|
+
false
|
716
|
+
end
|
717
|
+
|
718
|
+
alias_method :include?, :has_value?
|
719
|
+
alias_method :value?, :has_value?
|
720
|
+
|
721
|
+
# Insert arrays or Sarahs and merge hashes.
|
225
722
|
#
|
226
723
|
# @param ahlist [Array<Array, Hash, Sarah>] The structures to insert.
|
227
724
|
# @return [Sarah]
|
228
725
|
def insert! (*ahlist)
|
229
726
|
ahlist.reverse_each do |ah|
|
230
|
-
if ah.
|
231
|
-
unshift *ah.
|
232
|
-
merge! ah.rnd
|
727
|
+
if ah.is_a? Sarah
|
728
|
+
unshift *ah.values(:ary)
|
729
|
+
merge! ah.to_h(:rnd)
|
233
730
|
elsif ah.respond_to? :each_pair
|
234
731
|
merge! ah
|
235
732
|
elsif ah.respond_to? :each_index
|
@@ -239,14 +736,94 @@ class Sarah
|
|
239
736
|
self
|
240
737
|
end
|
241
738
|
|
242
|
-
#
|
739
|
+
# Return the (first) key having the specified value.
|
740
|
+
#
|
741
|
+
# @param value The value for which the key is desired.
|
742
|
+
# @param which [:all|:ary|:rnd] Where to search for the value.
|
743
|
+
def key (value, which = :all)
|
744
|
+
case which when :all, :ary
|
745
|
+
pos = index value
|
746
|
+
return pos unless pos.nil?
|
747
|
+
end
|
748
|
+
case which when :all, :rnd then return @rnd.key(value) end
|
749
|
+
nil
|
750
|
+
end
|
751
|
+
|
752
|
+
# Return the random-access hash keys.
|
753
|
+
#
|
754
|
+
# @return [Array]
|
755
|
+
# @deprecated Please use {#keys} instead.
|
756
|
+
def rnd_keys; @rnd.keys; end
|
757
|
+
|
758
|
+
# Return the sequential array keys (indexes).
|
759
|
+
#
|
760
|
+
# @return [Array<Integer>]
|
761
|
+
# @deprecated Please use {#keys} instead.
|
762
|
+
def seq_keys; 0...@seq.size; end
|
763
|
+
|
764
|
+
# Return an array of indexes and keys.
|
765
|
+
#
|
766
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] Which indexes and keys
|
767
|
+
# to return. (Since 2.0.0)
|
768
|
+
# @return [Array]
|
769
|
+
def keys (which = :all)
|
770
|
+
case which
|
771
|
+
when :all then keys(:seq) + keys(:spr) + @rnd.keys
|
772
|
+
when :ary then keys(:seq) + keys(:spr)
|
773
|
+
when :rnd then @rnd.keys
|
774
|
+
when :seq then (0...@seq.size).to_a
|
775
|
+
when :spr then @spr.keys.sort
|
776
|
+
else []
|
777
|
+
end
|
778
|
+
end
|
779
|
+
|
780
|
+
# Return the last array value or last n array values.
|
781
|
+
#
|
782
|
+
# obj = s.last
|
783
|
+
# list = s.last(n)
|
784
|
+
#
|
785
|
+
# @return [Object|Array]
|
786
|
+
def last (*args); values(:ary).last(*args); end
|
787
|
+
|
788
|
+
# Return the random-access hash size.
|
789
|
+
#
|
790
|
+
# @deprecated Please use {#size} instead.
|
791
|
+
# @return [Integer]
|
792
|
+
def rnd_length; @rnd.size; end
|
793
|
+
|
794
|
+
alias_method :rnd_size, :rnd_length
|
795
|
+
|
796
|
+
# Return the sequential array size.
|
797
|
+
#
|
798
|
+
# @deprecated Please use {#size} instead.
|
799
|
+
# @return [Integer]
|
800
|
+
def seq_length; @seq.size; end
|
801
|
+
|
802
|
+
alias_method :seq_size, :seq_length
|
803
|
+
|
804
|
+
# Return the number of stored values (AKA size or length).
|
805
|
+
#
|
806
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] The data structures
|
807
|
+
# for which the (combined) size is to be returned. (Since 2.0.0)
|
808
|
+
# @return [Integer]
|
809
|
+
def length (which = :all)
|
810
|
+
size = 0
|
811
|
+
case which when :all, :ary, :seq then size += @seq.size end
|
812
|
+
case which when :all, :ary, :spr then size += @spr.size end
|
813
|
+
case which when :all, :rnd then size += @rnd.size end
|
814
|
+
size
|
815
|
+
end
|
816
|
+
|
817
|
+
alias_method :size, :length
|
818
|
+
|
819
|
+
# Load/merge from a hash, array, or Sarah (beginning at key 0).
|
243
820
|
#
|
244
821
|
# @param ahlist [Array<Array, Hash, Sarah>] The structures to load/merge.
|
245
822
|
# @return [Sarah]
|
246
823
|
def merge! (*ahlist)
|
247
824
|
ahlist.each do |ah|
|
248
825
|
if ah.respond_to? :each_pair
|
249
|
-
ah.each_pair { |
|
826
|
+
ah.each_pair { |key, value| self[key] = value }
|
250
827
|
elsif ah.respond_to? :each_index
|
251
828
|
ah.each_index { |i| self[i] = ah[i] }
|
252
829
|
end
|
@@ -256,138 +833,599 @@ class Sarah
|
|
256
833
|
|
257
834
|
alias_method :update, :merge!
|
258
835
|
|
259
|
-
#
|
836
|
+
# Sets the negative mode, the manner in which negative integer
|
837
|
+
# index/key values are handled.
|
838
|
+
#
|
839
|
+
# :actual - Negative keys represent themselves and are not treated
|
840
|
+
# specially (although delete works like unset in this mode--values
|
841
|
+
# are not reindexed)
|
842
|
+
# :error (default) - Negative keys are interpreted relative to the
|
843
|
+
# end of the array; keys < -@ary_next raise an IndexError
|
844
|
+
# :ignore - Like :error, but keys < -@ary_next are treated as
|
845
|
+
# non-existent on fetch and silently ignored on set
|
846
|
+
def negative_mode= (mode)
|
847
|
+
case mode
|
848
|
+
when :actual then @negative_mode = :actual
|
849
|
+
when :error, :ignore
|
850
|
+
# These modes are only possible if there aren't currently
|
851
|
+
# any negative keys.
|
852
|
+
@negative_mode = mode if @ary_first >= 0
|
853
|
+
end
|
854
|
+
@negative_mode
|
855
|
+
end
|
856
|
+
|
857
|
+
# Return a new instance configured similarly to this one.
|
260
858
|
#
|
261
|
-
# @param vlist [Array] A list of values to unshift (insert).
|
262
859
|
# @return [Sarah]
|
263
|
-
|
264
|
-
|
265
|
-
@
|
860
|
+
# @since 2.0.0
|
861
|
+
def new_similar (*args)
|
862
|
+
opts = { :default => @default, :default_proc => @default_proc,
|
863
|
+
:negative_mode => @negative_mode }
|
864
|
+
opts.merge! args.pop if !args.empty? && args[-1].is_a?(Hash)
|
865
|
+
self.class.new(*args, opts)
|
866
|
+
end
|
867
|
+
|
868
|
+
# #pack is not implemented.
|
869
|
+
|
870
|
+
# Return a hash of key/value pairs corresponding to the list of
|
871
|
+
# keys/indexes.
|
872
|
+
#
|
873
|
+
# @return [Hash]
|
874
|
+
# @since 2.0.0
|
875
|
+
def pairs_at (*list)
|
876
|
+
pairs = {}
|
877
|
+
list.each { |key| pairs[key] = self[key] }
|
878
|
+
pairs
|
879
|
+
end
|
880
|
+
|
881
|
+
# #permutation is not implemented.
|
882
|
+
|
883
|
+
# Pop one or more values off the end of the sequential and sparse
|
884
|
+
# arrays.
|
885
|
+
#
|
886
|
+
# @param count [Integer|nil] The number of items to pop (1 if nil).
|
887
|
+
# (Since 2.0.0)
|
888
|
+
def pop (count = nil)
|
889
|
+
if !count.nil?
|
890
|
+
max = size :ary
|
891
|
+
count = max if max < count
|
892
|
+
res = []
|
893
|
+
count.times { res << pop }
|
894
|
+
res.reverse
|
895
|
+
elsif !@seq.empty? || !@spr.empty? then delete_at(@ary_next - 1)
|
896
|
+
else @default_proc ? @default_proc.call(self, nil) : @default
|
897
|
+
end
|
898
|
+
end
|
899
|
+
|
900
|
+
# #product is not implemented.
|
901
|
+
|
902
|
+
# #rassoc is not implemented.
|
903
|
+
|
904
|
+
# #reject is not implemented.
|
905
|
+
|
906
|
+
# Rehash keys
|
907
|
+
#
|
908
|
+
# @return [Sarah]
|
909
|
+
# @since 2.0.0
|
910
|
+
def rehash; @spr.rehash; @rnd.rehash; self; end
|
911
|
+
|
912
|
+
# #repeated_combination is not implemented.
|
913
|
+
|
914
|
+
# #repeated_permutation is not implemented.
|
915
|
+
|
916
|
+
# Replace contents with the contents of another array, hash, or Sarah.
|
917
|
+
#
|
918
|
+
# @param other [Sarah|hash]
|
919
|
+
# @return [Sarah]
|
920
|
+
def replace (other)
|
921
|
+
clear
|
922
|
+
negative_mode = other.negative_mode if other.is_a? Sarah
|
923
|
+
merge! other
|
266
924
|
self
|
267
925
|
end
|
268
926
|
|
269
|
-
#
|
927
|
+
# Reverse sequential and sparse array values into a sequential list.
|
270
928
|
#
|
271
|
-
# @param vlist [Array] A list of values to push (append).
|
272
929
|
# @return [Sarah]
|
273
|
-
|
274
|
-
|
275
|
-
@seq.
|
930
|
+
# @since 2.0.0
|
931
|
+
def reverse!
|
932
|
+
@seq = values(:ary).reverse
|
933
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
276
934
|
self
|
277
935
|
end
|
278
936
|
|
279
|
-
|
937
|
+
# Iterate a block (required) over each key and value in reverse order
|
938
|
+
# like Hash#each (first the random-access hash, then array values in
|
939
|
+
# reverse key order).
|
940
|
+
#
|
941
|
+
# s.reverse_each(which) { |key, value| block }
|
942
|
+
#
|
943
|
+
# @param which [:all|:ary|:seq|:spr] The data structures over
|
944
|
+
# which to iterate. The random-access hash is only included for :all.
|
945
|
+
# @return [Sarah]
|
946
|
+
# @since 2.0.0
|
947
|
+
def reverse_each (which = :ary)
|
948
|
+
case which when :all
|
949
|
+
@rnd.each { |key, value| yield key, value }
|
950
|
+
end
|
951
|
+
case which when :all, :ary, :spr
|
952
|
+
@spr.keys.sort.reverse_each { |i| yield i, @spr[i] }
|
953
|
+
end
|
954
|
+
case which when :all, :ary, :seq
|
955
|
+
(@seq.size - 1).downto(0) { |i| yield i, @seq[i] }
|
956
|
+
end
|
957
|
+
self
|
958
|
+
end
|
280
959
|
|
281
|
-
#
|
282
|
-
#
|
960
|
+
# Find the last index within the sequential or sparse array for
|
961
|
+
# the specified value or yielding true from the supplied block.
|
283
962
|
#
|
284
|
-
#
|
285
|
-
#
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
963
|
+
# rindex(value)
|
964
|
+
# rindex { |value| block }
|
965
|
+
#
|
966
|
+
# @return [Integer|nil]
|
967
|
+
# @since 2.0.0
|
968
|
+
def rindex (*args)
|
969
|
+
if block_given?
|
970
|
+
@spr.keys.sort.reverse_each do |index|
|
971
|
+
return index if yield @spr[index]
|
972
|
+
end
|
973
|
+
return @seq.rindex { |value| yield value }
|
974
|
+
else
|
975
|
+
value = args.pop
|
976
|
+
@spr.keys.sort.reverse_each do |index|
|
977
|
+
return index if @spr[index] == value
|
978
|
+
end
|
979
|
+
return @seq.rindex(value)
|
980
|
+
end
|
981
|
+
end
|
292
982
|
|
293
|
-
|
294
|
-
|
983
|
+
# Return the sparse array and random-access hash (for
|
984
|
+
# backward-compatibility only).
|
985
|
+
#
|
986
|
+
# @return [Hash]
|
987
|
+
# @deprecated Please use {#to_h} instead.
|
988
|
+
def rnd; @rnd; end
|
295
989
|
|
296
|
-
|
297
|
-
|
990
|
+
# Return the sparse array and random-access hash values (for
|
991
|
+
# backward-compatibility only).
|
992
|
+
#
|
993
|
+
# @return [Array]
|
994
|
+
# @deprecated Please use {#values} instead.
|
995
|
+
def rnd_values; @spr.values + @rnd.values; end
|
298
996
|
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
997
|
+
# Rotate sequential and sparse array values into a sequential list.
|
998
|
+
#
|
999
|
+
# @param count [Integer] The amount to rotate. See Array#rotate!.
|
1000
|
+
# @return [Sarah]
|
1001
|
+
# @since 2.0.0
|
1002
|
+
def rotate! (count = 1)
|
1003
|
+
@seq = values(:ary).rotate(count)
|
1004
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
1005
|
+
self
|
303
1006
|
end
|
304
1007
|
|
305
|
-
# Return the sequential
|
1008
|
+
# Return a random sample from the sequential and sparse arrays
|
1009
|
+
# like Array#sample.
|
306
1010
|
#
|
307
|
-
# @
|
308
|
-
def
|
1011
|
+
# @since 2.0.0
|
1012
|
+
def sample (*args); values(:ary).sample(*args); end
|
309
1013
|
|
310
|
-
#
|
1014
|
+
# Select a subset of values as indicated by the supplied block and
|
1015
|
+
# return as a hash like Hash#select.
|
311
1016
|
#
|
312
|
-
#
|
313
|
-
|
1017
|
+
# s.select(which) { |key, value| block }
|
1018
|
+
#
|
1019
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] Which values to select.
|
1020
|
+
def select (which = :all)
|
1021
|
+
to_h(which).select { |key, value| yield key, value }
|
1022
|
+
end
|
314
1023
|
|
315
|
-
# Return the
|
1024
|
+
# Return a copy of the sequential array values.
|
316
1025
|
#
|
317
|
-
# @return [
|
318
|
-
|
1026
|
+
# @return [Array]
|
1027
|
+
# @deprecated Please use {#values} instead.
|
1028
|
+
def seq; Array.new(@seq); end
|
319
1029
|
|
320
|
-
alias_method :
|
321
|
-
|
322
|
-
|
1030
|
+
alias_method :seq_values, :seq
|
1031
|
+
|
1032
|
+
# Set values and/or key/value pairs (in standard Ruby calling syntax).
|
1033
|
+
#
|
1034
|
+
# set(seq1, ..., seqN, key1 => val1, ..., keyN => valN)
|
1035
|
+
#
|
1036
|
+
# @param list [Array] A list of sequential values or random-access
|
1037
|
+
# key/value pairs to set.
|
1038
|
+
# @return [Sarah]
|
1039
|
+
def set (*list)
|
1040
|
+
hash = (list.size > 0 and list[-1].is_a? Hash) ? list.pop : nil
|
1041
|
+
merge! list
|
1042
|
+
merge! hash if hash
|
1043
|
+
self
|
1044
|
+
end
|
323
1045
|
|
324
|
-
#
|
1046
|
+
# Set from a list of key/value pairs.
|
1047
|
+
#
|
1048
|
+
# set_kv(key1, val1, ..., keyN, valN)
|
1049
|
+
#
|
1050
|
+
# @param kvlist [Array] The list of key/value pairs to set.
|
1051
|
+
# @return [Sarah]
|
1052
|
+
def set_kv (*kvlist)
|
1053
|
+
kvlist.each_slice(2) { |kv| self.[]=(*kv) }
|
1054
|
+
self
|
1055
|
+
end
|
1056
|
+
|
1057
|
+
alias_method :set_pairs, :set_kv
|
1058
|
+
|
1059
|
+
# Shift one or more values off the beginning of the sequential and
|
1060
|
+
# sparse arrays.
|
1061
|
+
#
|
1062
|
+
# Subsequent values are re-indexed unless {#negative_mode=} :actual.
|
1063
|
+
#
|
1064
|
+
# @param count [Integer|nil] The number of items to shift (1 if nil).
|
1065
|
+
# (Since 2.0.0)
|
1066
|
+
def shift (count = nil)
|
1067
|
+
if !count.nil?
|
1068
|
+
max = size :ary
|
1069
|
+
count = max if max < count
|
1070
|
+
res = []
|
1071
|
+
count.times { res << shift }
|
1072
|
+
res
|
1073
|
+
elsif !@seq.empty? || !@spr.empty? then delete_at @ary_first
|
1074
|
+
else @default_proc ? @default_proc.call(self, nil) : @default
|
1075
|
+
end
|
1076
|
+
end
|
1077
|
+
|
1078
|
+
# Return the sequential and sparse array values in a shuffled
|
1079
|
+
# sequence like Array#shuffle.
|
1080
|
+
#
|
1081
|
+
# shuffle
|
1082
|
+
# shuffle(random: rng)
|
325
1083
|
#
|
326
1084
|
# @return [Array]
|
327
|
-
|
1085
|
+
# @since 2.0.0
|
1086
|
+
def shuffle (*args); values(:ary).shuffle(*args); end
|
328
1087
|
|
329
|
-
#
|
1088
|
+
# Replaces the sequential and sparse array values with shuffled
|
1089
|
+
# sequential values.
|
330
1090
|
#
|
331
|
-
#
|
332
|
-
|
1091
|
+
# shuffle!
|
1092
|
+
# shuffle!(random: rng)
|
1093
|
+
#
|
1094
|
+
# @return [Sarah]
|
1095
|
+
# @since 2.0.0
|
1096
|
+
def shuffle! (*args)
|
1097
|
+
@seq = values(:ary).shuffle
|
1098
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
1099
|
+
self
|
1100
|
+
end
|
333
1101
|
|
334
|
-
# Return the sequential
|
1102
|
+
# Return an element or return a slice of elements from the sequential +
|
1103
|
+
# sparse array as a new Sarah.
|
335
1104
|
#
|
336
|
-
#
|
337
|
-
|
1105
|
+
# The original array is unmodified.
|
1106
|
+
#
|
1107
|
+
# NOTES: This implementation is new since 2.0.0 and incompatible with
|
1108
|
+
# prior versions. Alias #seq_slice is deprecated since 2.0.0.
|
1109
|
+
#
|
1110
|
+
# s.slice(key) # a single element (or nil)
|
1111
|
+
# s.slice(start, length) # up to length elements at index >= start
|
1112
|
+
# s.slice(range) # elements with indexes within the range
|
1113
|
+
#
|
1114
|
+
# @return [Object|Sarah]
|
1115
|
+
# @since 2.0.0
|
1116
|
+
def slice (*args)
|
1117
|
+
case args.size
|
1118
|
+
when 1
|
1119
|
+
if args[0].is_a? Range
|
1120
|
+
range = args[0]
|
1121
|
+
new_similar(:hash => pairs_at(*keys(:ary).select do |key|
|
1122
|
+
range.include? key
|
1123
|
+
end))
|
1124
|
+
else fetch args[0], nil
|
1125
|
+
end
|
1126
|
+
when 2
|
1127
|
+
in_range = []
|
1128
|
+
catch :index_error do
|
1129
|
+
start = _adjust_key args[0]
|
1130
|
+
in_range = keys(:ary).select { |key| key >= start }
|
1131
|
+
end
|
1132
|
+
new_similar(:hash => pairs_at(*in_range.slice(0, args[1])))
|
1133
|
+
else nil
|
1134
|
+
end
|
1135
|
+
end
|
338
1136
|
|
339
|
-
|
1137
|
+
alias_method :seq_slice, :slice
|
1138
|
+
|
1139
|
+
# Extract (delete) and return an element, or a slice of elements from
|
1140
|
+
# the sequential + sparse array as a new Sarah. Elements are unset
|
1141
|
+
# rather than deleted when {#negative_mode=} :actual.
|
1142
|
+
#
|
1143
|
+
# NOTES: This implementation is new since 2.0.0 and incompatible with
|
1144
|
+
# prior versions. Alias #seq_slice! is deprecated since 2.0.0.
|
1145
|
+
#
|
1146
|
+
# s.slice!(key) # a single element (or nil)
|
1147
|
+
# s.slice!(start, length) # up to length elements at index >= start
|
1148
|
+
# s.slice!(range) # elements with indexes within the range
|
1149
|
+
#
|
1150
|
+
# @return [Object|Sarah]
|
1151
|
+
# @since 2.0.0
|
1152
|
+
def slice! (*args)
|
1153
|
+
case args.size
|
1154
|
+
when 1
|
1155
|
+
if args[0].is_a? Range then res = slice *args
|
1156
|
+
else return has_key?(args[0]) ? delete_key(args[0]) : nil
|
1157
|
+
end
|
1158
|
+
when 2 then res = slice *args
|
1159
|
+
else return nil
|
1160
|
+
end
|
1161
|
+
res.reverse_each(:all) { |key, value| delete_key key }
|
1162
|
+
end
|
1163
|
+
|
1164
|
+
alias_method :seq_slice!, :slice!
|
1165
|
+
|
1166
|
+
# Return a sorted list of sequential and sparse array values.
|
1167
|
+
# Accepts an optional block to compare pairs of values.
|
1168
|
+
#
|
1169
|
+
# s.sort
|
1170
|
+
# s.sort { |a, b| block }
|
340
1171
|
#
|
341
1172
|
# @return [Array]
|
342
|
-
|
1173
|
+
# @since 2.0.0
|
1174
|
+
def sort
|
1175
|
+
if block_given? then values(:ary).sort { |a, b| yield a, b }
|
1176
|
+
else values(:ary).sort
|
1177
|
+
end
|
1178
|
+
end
|
1179
|
+
|
1180
|
+
# Replace the sequential and sparse array values by a sorted
|
1181
|
+
# sequential list of values. Accepts an optional block to compare
|
1182
|
+
# pairs of values.
|
1183
|
+
#
|
1184
|
+
# s.sort!
|
1185
|
+
# s.sort! { |a, b| block }
|
1186
|
+
#
|
1187
|
+
# @return [Sarah]
|
1188
|
+
# @since 2.0.0
|
1189
|
+
def sort!
|
1190
|
+
if block_given? then @seq = values(:ary).sort { |a, b| yield a, b }
|
1191
|
+
else @seq = values(:ary).sort
|
1192
|
+
end
|
1193
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
1194
|
+
self
|
1195
|
+
end
|
1196
|
+
|
1197
|
+
# #sort_by is not implemented.
|
1198
|
+
|
1199
|
+
# #take is not implemented.
|
1200
|
+
|
1201
|
+
# #take_while is not implemented.
|
343
1202
|
|
344
|
-
# Return all the
|
1203
|
+
# Return all or part of the structure in array representation.
|
1204
|
+
#
|
1205
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] The parts to represent.
|
1206
|
+
# @since 2.0.0
|
1207
|
+
def to_a (which = :all)
|
1208
|
+
ary, hsh = [], {}
|
1209
|
+
case which when :all, :ary, :seq then ary = @seq end
|
1210
|
+
case which when :all, :ary, :spr then hsh.merge! @spr end
|
1211
|
+
case which when :all, :rnd then hsh.merge! @rnd end
|
1212
|
+
ary + [hsh]
|
1213
|
+
end
|
1214
|
+
|
1215
|
+
# Return all or part of the structure in hash representation.
|
1216
|
+
#
|
1217
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] The parts to represent.
|
1218
|
+
# @since 2.0.0
|
1219
|
+
def to_h (which = :all)
|
1220
|
+
hsh = {}
|
1221
|
+
case which when :all, :ary, :seq
|
1222
|
+
@seq.each_index { |i| hsh[i] = @seq[i] }
|
1223
|
+
end
|
1224
|
+
case which when :all, :ary, :spr then hsh.merge! @spr end
|
1225
|
+
case which when :all, :rnd then hsh.merge! @rnd end
|
1226
|
+
hsh
|
1227
|
+
end
|
1228
|
+
|
1229
|
+
# #transpose is not implemented.
|
1230
|
+
|
1231
|
+
# Return unique sequential and sparse values as a sequential list.
|
1232
|
+
#
|
1233
|
+
# s.uniq
|
1234
|
+
# s.uniq { |item| block }
|
345
1235
|
#
|
346
1236
|
# @return [Array]
|
347
|
-
|
1237
|
+
# @since 2.0.0
|
1238
|
+
def uniq
|
1239
|
+
if block_given? then values(:ary).uniq { |item| yield item }
|
1240
|
+
else values(:ary).uniq
|
1241
|
+
end
|
1242
|
+
end
|
348
1243
|
|
349
|
-
#
|
350
|
-
|
1244
|
+
# Replace sequential and sparse values with sequential unique values.
|
1245
|
+
#
|
1246
|
+
# s.uniq!
|
1247
|
+
# s.uniq! { |item| block }
|
1248
|
+
#
|
1249
|
+
# @return [Sarah]
|
1250
|
+
# @since 2.0.0
|
1251
|
+
def uniq!
|
1252
|
+
if block_given? then @seq = values(:ary).uniq { |item| yield item }
|
1253
|
+
else @seq = values(:ary).uniq
|
1254
|
+
end
|
1255
|
+
@ary_first, @ary_next, @spr = 0, @seq.size, {}
|
1256
|
+
self
|
1257
|
+
end
|
351
1258
|
|
352
|
-
#
|
353
|
-
|
1259
|
+
# Unset a specific index or key (without reindexing other values).
|
1260
|
+
#
|
1261
|
+
# @since 2.0.0
|
1262
|
+
def unset_at (key)
|
1263
|
+
if key.is_a? Integer
|
1264
|
+
res = nil
|
1265
|
+
catch :index_error do
|
1266
|
+
key = _adjust_key key
|
1267
|
+
if key >= 0 && key < @seq.size
|
1268
|
+
_seq_to_spr key + 1
|
1269
|
+
res = @seq.pop
|
1270
|
+
else
|
1271
|
+
res = @spr.delete key
|
1272
|
+
end
|
1273
|
+
_scan_spr
|
1274
|
+
end
|
1275
|
+
res
|
1276
|
+
else
|
1277
|
+
@rnd.delete key
|
1278
|
+
end
|
1279
|
+
end
|
354
1280
|
|
355
|
-
alias_method :
|
1281
|
+
alias_method :unset_key, :unset_at
|
1282
|
+
|
1283
|
+
# Unsets each value for which the required block returns true.
|
1284
|
+
#
|
1285
|
+
# Subsequent values are never re-indexed. See also {#delete_if}.
|
1286
|
+
#
|
1287
|
+
# The block is passed the current value and index for the sequential
|
1288
|
+
# and sparse arrays or the current value and key (in that order)
|
1289
|
+
# for the random-access hash.
|
1290
|
+
#
|
1291
|
+
# s.unset_if { |value, key| block }
|
1292
|
+
#
|
1293
|
+
# @param which [:all|:ary|:rnd] The data structures in which to unset.
|
1294
|
+
# @since 2.0.0
|
1295
|
+
# @return [Sarah]
|
1296
|
+
def unset_if (which = :all)
|
1297
|
+
case which when :all, :ary
|
1298
|
+
@seq.each_index do |index|
|
1299
|
+
if yield @seq[index], index
|
1300
|
+
unset_at index
|
1301
|
+
break # Any other sequentials are now sparse
|
1302
|
+
end
|
1303
|
+
end
|
1304
|
+
@spr.keys.sort.each do |key|
|
1305
|
+
@spr.delete(key) if yield @spr[key], key
|
1306
|
+
end
|
1307
|
+
_scan_spr
|
1308
|
+
end
|
1309
|
+
case which when :all, :rnd
|
1310
|
+
@rnd.delete_if { |key, value| yield value, key }
|
1311
|
+
end
|
1312
|
+
self
|
1313
|
+
end
|
356
1314
|
|
357
|
-
#
|
1315
|
+
# Unset by value.
|
1316
|
+
#
|
1317
|
+
# Subsequent values are never re-indexed. See also {#delete_value}.
|
358
1318
|
#
|
359
|
-
# @
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
1319
|
+
# @param what [Object] The value to be deleted
|
1320
|
+
# @param which [:all|:ary|:rnd] The data structures in which to unset.
|
1321
|
+
# @return [Sarah]
|
1322
|
+
# @since 2.0.0
|
1323
|
+
def unset_value (what, which = :all)
|
1324
|
+
unset_if(which) { |value, key| value == what }
|
364
1325
|
end
|
365
1326
|
|
366
|
-
#
|
1327
|
+
# Unshift (insert) sequential values onto the beginning of the
|
1328
|
+
# sequential or sparse array.
|
1329
|
+
#
|
1330
|
+
# Subsequent values are re-indexed except when {#negative_mode=} :actual.
|
367
1331
|
#
|
368
|
-
# @
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
1332
|
+
# @param vlist [Array] A list of values to unshift (insert).
|
1333
|
+
# @return [Sarah]
|
1334
|
+
def unshift (*vlist)
|
1335
|
+
if @negative_mode == :actual
|
1336
|
+
vlist.reverse_each do |value|
|
1337
|
+
@ary_first -= 1
|
1338
|
+
self[@ary_first] = value
|
1339
|
+
end
|
1340
|
+
else
|
1341
|
+
_scan_spr vlist.size
|
1342
|
+
@seq.unshift *vlist
|
1343
|
+
end
|
1344
|
+
self
|
373
1345
|
end
|
374
1346
|
|
375
|
-
#
|
1347
|
+
# Return an array of values.
|
376
1348
|
#
|
377
|
-
# @
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
1349
|
+
# @param which [:all|:ary|:rnd|:seq|:spr] Which values to return.
|
1350
|
+
# (Since 2.0.0)
|
1351
|
+
# @return [Array]
|
1352
|
+
def values (which = :all)
|
1353
|
+
case which
|
1354
|
+
when :all then @seq + values(:spr) + @rnd.values
|
1355
|
+
when :ary then @seq + values(:spr)
|
1356
|
+
when :rnd then @rnd.values
|
1357
|
+
when :seq then Array.new @seq
|
1358
|
+
when :spr then @spr.values_at(*@spr.keys.sort)
|
1359
|
+
else []
|
1360
|
+
end
|
382
1361
|
end
|
383
1362
|
|
384
|
-
#
|
1363
|
+
# Return the values corresponding to the list of keys/indexes.
|
385
1364
|
#
|
386
|
-
# @return [
|
387
|
-
|
388
|
-
|
389
|
-
|
390
|
-
|
1365
|
+
# @return [Array]
|
1366
|
+
# @since 2.0.0
|
1367
|
+
def values_at (*list); list.collect { |key| self[key] }; end
|
1368
|
+
|
1369
|
+
# Zip sequential and sparse array values with other arrays.
|
1370
|
+
# See Array#zip.
|
1371
|
+
#
|
1372
|
+
# @return [Array]
|
1373
|
+
# @since 2.0.0
|
1374
|
+
def zip (*args); values(:ary).zip(*args); end
|
1375
|
+
|
1376
|
+
##### Protected methods #####
|
1377
|
+
|
1378
|
+
protected
|
1379
|
+
|
1380
|
+
def _adjust_key (key)
|
1381
|
+
case @negative_mode
|
1382
|
+
when :error
|
1383
|
+
raise IndexError.new('Index is too small') if key < -@ary_next
|
1384
|
+
when :ignore
|
1385
|
+
throw :index_error, nil if key < -@ary_next
|
1386
|
+
end
|
1387
|
+
if key < 0 && @negative_mode != :actual then key + @ary_next
|
1388
|
+
else key
|
1389
|
+
end
|
1390
|
+
end
|
1391
|
+
|
1392
|
+
# Extract integer-keyed or other parts from a hash
|
1393
|
+
def _hash_filter (h, type)
|
1394
|
+
case type
|
1395
|
+
when :array then h.select { |k, v| k.is_a?(Integer) && k >= 0 }
|
1396
|
+
when :other then h.select { |k, v| !k.is_a?(Integer) || k < 0 }
|
1397
|
+
end
|
1398
|
+
end
|
1399
|
+
|
1400
|
+
# Scan the sparse array for min and max, possibly adjusting keys
|
1401
|
+
# as we go.
|
1402
|
+
def _scan_spr (adjustment = 0, from = 0)
|
1403
|
+
@ary_first = @seq.empty? ? nil : 0
|
1404
|
+
@ary_next = @seq.size
|
1405
|
+
|
1406
|
+
adj = {} # adjusted sparse array
|
1407
|
+
@spr.each do |key, value|
|
1408
|
+
if adjustment != 0
|
1409
|
+
key += adjustment if key >= from
|
1410
|
+
adj[key] = value
|
1411
|
+
end
|
1412
|
+
@ary_first = key if !@ary_first || key < @ary_first
|
1413
|
+
@ary_next = key + 1 if key >= @ary_next
|
1414
|
+
end
|
1415
|
+
@ary_first ||= 0
|
1416
|
+
@spr = adj unless adj.empty?
|
1417
|
+
end
|
1418
|
+
|
1419
|
+
# Migrate selected sequential values to the sparse hash.
|
1420
|
+
def _seq_to_spr (index = 0)
|
1421
|
+
(@seq.size - 1).downto(index) { |i| @spr[i] = @seq.pop }
|
1422
|
+
end
|
1423
|
+
|
1424
|
+
# Migrate newly adjacent sparse values to the sequential array.
|
1425
|
+
def _spr_to_seq
|
1426
|
+
@seq.push @spr.delete(@seq.size) while @spr.has_key? @seq.size
|
391
1427
|
end
|
392
1428
|
|
393
1429
|
end
|
1430
|
+
|
1431
|
+
# END
|