From 7802893a8458e5a9a3288581bb36126a9fcd5743 Mon Sep 17 00:00:00 2001 From: Bryan Berry Date: Thu, 05 Nov 2009 19:36:01 +0000 Subject: copied a working copy of Conozco-Uruguay into examples/ . This copy of Conozco a Uruguay doesn't depend on the main jquery.karma.js yet --- diff --git a/examples/Conozco-Uruguay/assets/generic/images/Uruguay_departments_blank.svg b/examples/Conozco-Uruguay/assets/generic/images/Uruguay_departments_blank.svg new file mode 100644 index 0000000..5f9d64a --- /dev/null +++ b/examples/Conozco-Uruguay/assets/generic/images/Uruguay_departments_blank.svg @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/examples/Conozco-Uruguay/assets/generic/images/capitals.svg b/examples/Conozco-Uruguay/assets/generic/images/capitals.svg new file mode 100644 index 0000000..16f973f --- /dev/null +++ b/examples/Conozco-Uruguay/assets/generic/images/capitals.svg @@ -0,0 +1,28 @@ + + + + + + + + + diff --git a/examples/Conozco-Uruguay/assets/generic/images/capitals1-bak.svg b/examples/Conozco-Uruguay/assets/generic/images/capitals1-bak.svg new file mode 100644 index 0000000..6eaf340 --- /dev/null +++ b/examples/Conozco-Uruguay/assets/generic/images/capitals1-bak.svg @@ -0,0 +1,362 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Artigas + + + Rocha + + Rivera + + Salto + + Tacuarembo + + Paysandu + + Fray Bentos + + Mercedes + + Mercedes + diff --git a/examples/Conozco-Uruguay/assets/generic/images/capitals1.svg b/examples/Conozco-Uruguay/assets/generic/images/capitals1.svg new file mode 100644 index 0000000..24c886c --- /dev/null +++ b/examples/Conozco-Uruguay/assets/generic/images/capitals1.svg @@ -0,0 +1,783 @@ + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Artigas + + Rocha + + Rivera + + Salto + + Tacuarembó + + Paysandú + + Fray Bentos + + Mercedes + + Durazno + + Trinidad + + Melo + + Minas + + Treinta Y Tres + + Florida + + Colonia + + Maldonado + + San José + + Canelones + + Montevideo + MONTEVIDEO + CANELONES + MALDONADO + Rocha + S. JOSÉ + COLONIA + FLORIDA + LAVALLEJA + TREINTA Y TRES + DURAZNO + FLORES + SORIANO + RÍO NEGRO + TACUAREMBÓ + CERRO LARGO + PAYSANDÚ + RIVERA + SALTO + ARTIGAS + diff --git a/examples/Conozco-Uruguay/css/jquery.svg.css b/examples/Conozco-Uruguay/css/jquery.svg.css new file mode 100644 index 0000000..c181ec1 --- /dev/null +++ b/examples/Conozco-Uruguay/css/jquery.svg.css @@ -0,0 +1,15 @@ +/* http://keith-wood.name/svg.html + SVG for jQuery v1.4.2. + Written by Keith Wood (kbwood{at}iinet.com.au) August 2007. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ + +svg\:svg { + display: none; +} + +.svg_error { + color: red; + font-weight: bold; +} diff --git a/examples/Conozco-Uruguay/css/lesson.css b/examples/Conozco-Uruguay/css/lesson.css new file mode 100644 index 0000000..fb645dd --- /dev/null +++ b/examples/Conozco-Uruguay/css/lesson.css @@ -0,0 +1,14 @@ +#map{ + width: 60%; + height: 100%; + display: inline; + float: left; +} + +#questionArea{ + width: 40%; + height: 100%; + display: inline; + float: left; + +} \ No newline at end of file diff --git a/examples/Conozco-Uruguay/index.html b/examples/Conozco-Uruguay/index.html index be1b5a2..e22cb96 100755 --- a/examples/Conozco-Uruguay/index.html +++ b/examples/Conozco-Uruguay/index.html @@ -1,25 +1,36 @@ - - + - Karma - Connoszco Uruguay - + Conozco a Uruguay + + + + + - + + -
- -
-
- +
+
-
+
+
+ + +
+
+
+
+
+
- - \ No newline at end of file + diff --git a/examples/Conozco-Uruguay/js/capital.js b/examples/Conozco-Uruguay/js/capital.js index e19019a..af20c08 100755 --- a/examples/Conozco-Uruguay/js/capital.js +++ b/examples/Conozco-Uruguay/js/capital.js @@ -36,7 +36,7 @@ function random_between(upperbound) { } if (selected.isClickingp(x,y)) { - selected.toogle(); + selected.toggle(); selected = undefined; return true; } diff --git a/examples/Conozco-Uruguay/js/jquery-1.3.2.min.js b/examples/Conozco-Uruguay/js/jquery-1.3.2.min.js new file mode 100755 index 0000000..b1ae21d --- /dev/null +++ b/examples/Conozco-Uruguay/js/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
","
"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/examples/Conozco-Uruguay/js/jquery.karma.js b/examples/Conozco-Uruguay/js/jquery.karma.js new file mode 100755 index 0000000..f4b99af --- /dev/null +++ b/examples/Conozco-Uruguay/js/jquery.karma.js @@ -0,0 +1,1161 @@ +/* +* Karma Framework +* http://wiki.sugarlabs.org/go/Karma +* +* Copyright (c) 2009 +* Felipe López Toledo zer.subzero@gmail.com +* Bryan W Berry bryan@olenepal.org +* +* Under MIT License: +* Permission is hereby granted, free of charge, to any person +* obtaining a copy of this software and associated documentation +* files (the "Software"), to deal in the Software without +* restriction, including without limitation the rights to use, +* copy, modify, merge, publish, distribute, sublicense, and/or sell +* copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following +* conditions: +* +* The above copyright notice and this permission notice shall be +* included in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +*/ + +/** +* @fileOverview Contains karma library +* @version 0.1 +* @author Felipe Lopez Toledo +*/ + + +/** + * See jQuery. + * @class + * @name jQuery + * @exports $ as jQuery +*/ + +(function ($) { +//helpers +/** +Checks if the argument 'arg' is set and if its type is 'type'.
+1. if arg is set: it returns 'toReturn' if specified, otherwise it returns + 'true' +2. if arg is not set: it returns 'false' +@param arg The param to check +@param {Object} [type] The expeted type of 'arg' +@param [toReturn] object or value to return in case 1 +@returns true | false | toReturn +@example +var msg = "hi"; +valid(msg); //returns true +valid(msg, "String" ); //returns true +valid(msg, "Number"); //returns false +valid(msg, "String",false ); //returns false +valid(msg, "String", "hello" ); //returns "hello" +valid(msg123); //returns false +**/ +var valid = function ( arg, type, toReturn ) { + if ( type ) { + if ( typeof arg === type ) { + if ( toReturn ) + return toReturn; + return true; + } + return false + } + if ( typeof arg !== "undefined" && arg!== "null" ) return true; + return false; +} +/** +Clones an object +@param {object} obj The source object +@returns {object} The cloned object +**/ +var clone = function( obj ){ + if(obj == null || typeof(obj) != 'object') + return obj; + var temp = new obj.constructor(); + for(var key in obj) + temp[ key ] = clone( obj[ key ] ); + return temp; +} + +/** +Karma +@name Karma +@class Represents a Karma (master) object. +@param {String | Object } options Constructor arguments +@param {String | Object } [options.container] Target DIV-class that will contain + any canvas element created using Karma functions +@param {String} [options.language] +*/ +var Karma = function( options ) { + var that = this; + this.version = "0.01"; + // + //relative path to the po, images, sounds, etc. from the html + //defined here: http://wiki.sugarlabs.org/go/Karma/Bundle_layout + //localized is recalculated inside localizeContent ( $ = language.lang ) + this.paths = { + po: "po/", + images: { + localized: "assets/$/images/", + generic: "assets/generic/images/" + }, + sounds: { + localized: "assets/$/sounds/", + generic: "assets/generic/sounds/" + }, + videos: { + localized: "assets/$/videos/", + generic: "assets/generic/videos/" + } + }; + this.supportedLangFileTypes = [ + { ext: "po", type: 'application/x-po' }, + { ext: "json", type: 'application/json'} + ]; + // + //PRIVATE STUFF start + /** + Gets the language acording to the browser language + @returns {Object}
+ lang: countryCode and langCode (if specified) + langCode*: language code represented as xx, example: en.
+ countryCode*: country code represented as YY, example: US.
+ *optional + **/ + var getLanguage = function () { + //console.log += navigator.language +"\n"; + var lang = navigator.language || navigator.browserLanguage; //mozilla/ie + lang = lang.replace(/_/, '-').toLowerCase(); + if (lang.length > 3 ) { + var country = lang.substring(3, 5); + lang = lang.substring(0, 2); + if ( country.match(/[^a-zA-Z]/) === null ) { + country = country.toUpperCase(); + return { + "lang": lang + "-" + country, + "langCode": lang, + "countryCode": country + }; + } + } + return { "lang": lang }; + } + /** + Creates a new Gettext object and returns a shortcut function to localise + defined strings.
We use karma.Gettext.js it's a modification of + + Gettext.js from beril OS. + @requires karma.Gettext.js + @param {Object} options The arguments of the Gettext constructor + @returns {Function} A generic function to call Gettext functions + **/ + var i18nWrapper = function ( options ) { + var gt = new Gettext( options ); + if ( typeof ( gt ) === 'undefined' ) + throw new Error("Unable to initialize Gettext object"); + return (function (str1, str2, str3, str4 ) { + var n, context, singular, plural; + if (typeof(str4) != 'undefined') { + // number, context, singular, plural + return gt.npgettext(str2, str3, str4, str1); + } else if (typeof(str3) != 'undefined') { + // number, singular, plural + return gt.ngettext(str2, str3, str1); + } else if (typeof(str2) != 'undefined') { + // context, msgid + return gt.pgettext(str1, str2); + } else if (typeof(str1) != 'undefined') { + // msgid + return gt.gettext(str1); + } else { + // nothing passed in; return blank string. + // XXX: we could error here, but that may cause more harm than good. + return ''; + } + }); + }; + /** + Localises the inline html content and it creates the localised paths for + "images", "sounds" and "videos". + Note:Inline html localisation under development
+ @param {String} lang The language that will be used to localise the content + @see + Karma Bundle_layout + **/ + var localiseContent = function ( lang ) { + + var toFix = ["images", "sounds", "videos"]; + for (var i = 0; i < toFix.length; i++) { + that.paths[ toFix[ i ] ].localized = that.paths[ + toFix[ i ] ].localized.replace('\$', lang ); + } + //dirty hack to support {lang}_AudioFile + var prefix = lang+"_"; + that.paths[ "sounds" ].localized+=prefix; + } + /** + It will attempt to load a language file, the posible languages are defined + on language.alternatives. +

The language file type could be: .po (Pootle) or .json (JSON). The + precedence between file types is defined according to which is defined first + in supportedLangFileTypes. By default Pootle files has precedence over JSON, + files.

+ @see Karma + @returns {String} The name of the language file loaded. Example: en-US.po + **/ + var loadAlternatives = function ( ) { + var loaded = undefined; + var tryNext = true; + //try to load the po or json language file if it exists. + //the lang order is acording to options.language.alternatives + //the type (po or json or ...) is defined in supportedLangFileTypes + $.each( that.language.alternatives, function ( c, lang ) { + for (var i=0; i < that.supportedLangFileTypes.length + && tryNext === true; i++) { + $.ajax({ + url: that.paths.po + lang + "." + + that.supportedLangFileTypes[i].ext, + cache: true, + dataType: "text", + async: false, //important: touch it at your own risk + success: function( data, textStatus ){ + + loaded = lang + "." + + that.supportedLangFileTypes[i].ext; + //i18n + //we pass the data so we avoid re-loading the file + //creates the shorcout + that.i18n.root[ that.i18n.shortcut ] = i18nWrapper( + { + domain : lang, + file : { + type: that.supportedLangFileTypes[i].type, + uri: this.url, data: data + } + } + ); + localiseContent( lang ); + tryNext = false; + }, + error: function ( XHR, textStatus, errorThrown ) { + //the file doesn't exist or it wasn't possible to load it + tryNext = true; + } + }); + return tryNext; + } + }); + return loaded; + } + //PRIVATE STUFF end + // default options + var defaultOptions ={ + container: "#karma-main", + language: { + lang: undefined, + alternatives: ['en-US', 'en'], + countryCode: undefined, + langCode: undefined, + }, + i18n: { + root: self, // self is global + shortcut: "_" + } + }; + // + this.library = { "images": [], "sounds": [], "videos":[], "shapes":[] }; + + //initializes the defaultOptions argument + //1 argument: string. assume it's the container + if ( typeof options === "string" ) { + options = { container: options }; + options.language = getLanguage() ; + } else if (typeof options === "object" ){ + if ( typeof options.lang === "string" ) { + //if language is string, assume it's the language.lang + options.language = { lang: options.lang }; + } + } + $.extend( true, defaultOptions, options ); + // + //copy defaultOptions to this, we use this.xyz instead this.defaultOptions.xyz + for (var i in defaultOptions ) { + this[ i ] = defaultOptions[i]; + } + + //initializes i18n + //add the localized language to the language.alternatives + if ( typeof this.language.countryCode !== "undefined" ) { + this.language.alternatives.unshift( + this.language.langCode, + this.language.countryCode + ); + } + if ( typeof this.language.lang !== "undefined" ) { + this.language.alternatives.unshift( this.language.lang ); + } + //try to load the localized lang file (po or json or ...) + this.language.fileLoaded = loadAlternatives( ); + //initializes the container + if ( typeof this.container === "string" ) { + this.container = $( this.container )[ 0 ]; + if ( !valid(this.container) ) delete this.container; + } + + gk = { + "paths": this.paths + } + this.surfaces = {}; +} + +/** +@memberOf Karma +@namespace Geometry functions. +**/ +Karma.prototype.geometry = { + /** + Converts a value from degrees to radians. + @param {Number} angle The angle in degrees + @returns {Number} The The angle in radians + **/ + radians : function( angle ){ + return ( angle / 180 ) * Math.PI; + }, + /** + Gets the square of the Euclidian (ordinary) distance between 2 points. + @param {Number} Point Point No. 0 + @param {Number} Point Point No. 1 + @returns {Number} The square of the Euclidian distance + **/ + distance2 : function ( p0, p1 ) { + return (p1.x - p0.x) * (p1.x - p0.x) + (p1.y - p1.y) * (p1.y - p1.y); + }, + /** + Gets the Euclidian (ordinary) distance between 2 points.
+ Warning: It's slower than distance2 function + @param {Number} Point Point No. 0 + @param {Number} Point Point No. 1 + @returns {Number} The Euclidian distance + **/ + distance : function ( p0, p1 ) { + return Math.sqrt( Karma.prototype.geometry.distance2( p0, p1 ) ); + } +} +/** +@memberOf Karma +@namespace Graphics functions. +**/ +Karma.prototype.graphics = { + /** + Creates a new rectangle. It's a shortcut for calling 'new KRectangle(..)'. + **/ + rectangle: function ( args ) { return new KRectangle( args ); }, + /** + Creates a new circle. It's a shortcut for calling 'new KCircle(..)'. + **/ + circle: function ( args ) { return new KCircle( args ); } +} +/** +@memberOf Karma +@namespace Math functions. +**/ +Karma.prototype.math = { + /** + Generates a random bumber between lower bound and upper bound inclusive. + @param {Number} lower The lower bound + @param {Number} upper The upper bound + @returns {Number} The generated number + **/ + rand : function ( lower, upper ){ + return Math.round ( Math.random() * (upper - lower) + lower ); + } +} +//FIXME +//everything inside karma.graphics is exported to karma.prototype +$.extend( Karma.prototype, Karma.prototype.graphics); +// +/** +@param {Object} [toLoad] The Object that has the arrays for preloading. +@param {Array} [toLoad.images] The images +@param {Array} [toLoad.sounds] The sounds +@param {Array} [toLoad.videos] The videos +@memberOf Karma +@returns {Object} this +**/ +Karma.prototype.init = function( toLoad ) { + this.pendingToLoad = toLoad; + return this; //chaining :) +} + +/** +Main function. Any Karma function call should be inside the callback function. +The callback function will be executed when the preloading finishes. +@param {Function} cb The callback funtion +@memberOf Karma +@see Karma#init +**/ +Karma.prototype.main = function ( cb ) { + if ( valid( this.pendingToLoad ) ) { + //loader + var loaderDiv = $("body").append('
Karma is \ + loading ...
'); + var statusDiv = $("#karma-loader .status"); + + var statusUpdate = function ( current, error, total) { + statusDiv.html(current + "/" + total + (error > 0 ? " [ "+error+" ]":'')); + } + + var that = this; + var categories = ["images", "sounds", "videos" ]; + var counters = { "loaded":0, "error": 0 }; + var totalItems = 0; + //creates the surfaces + if ( valid( this.pendingToLoad[ "surfaces" ] ) ) { + $.each (this.pendingToLoad[ "surfaces" ], function( key, config ){ + Karma.prototype.surface.call( that, config ); + }); + } + statusUpdate( 0, 0, totalItems); + //get the total items + for ( var i=0; i < categories.length; i++ ) { + if ( valid ( this.pendingToLoad[ categories[ i ] ] ) ) { + totalItems += this.pendingToLoad[ categories[ i ] ].length; + } + } + + /** + callback to check if all the items were loaded or got an error when + loading + **/ + var errors=[]; + var checkAllLoaded = function ( ev ) { + if ( ev.type === "load") counters.loaded += 1; + else { + errors.push( ev.target.src ); + counters.error += 1; + } + statusUpdate( counters.loaded, counters.error, totalItems); + if ( counters.loaded + counters.error === totalItems ) { + if ( counters.error > 0 ){ + throw ( "Media files not found: " + errors ); + } + $("#karma-loader:hiden:first").fadeOut("slow",function(){ + $(this).remove();}); + if ( cb ) cb(); + } + } + + for ( var i=0; i < categories.length; i++ ) { + var category = categories[ i ]; + if ( valid ( this.pendingToLoad[ category ] ) ) { + //load all the category elements + var type = category.substr( 0, category.length-1 ) + $.each (this.pendingToLoad[ category ], function( key, config ){ + var name = config.name; + delete config.name; + //register the elements into the library + that.library[ category ][ name ] = Karma.prototype[ type ]( + config + ); + that.library[ category ][ name ].media.addEventListener( + "load",checkAllLoaded,false + ); + that.library[ category ][ name ].media.addEventListener( + "error",checkAllLoaded,false + ); + }); + } + } + }else { + if ( cb ) cb(); + } +} +/** +A shortcut for calling 'KImage( )' +@see KImage +@memberOf Karma +@returns {Object} new instance of KImage object +**/ +Karma.prototype.image = function ( args ) { return new KImage( args ) }; +/** +A shortcut for calling 'KSound( )' +@see KSound +@memberOf Karma +@returns {Object} new instance of KSound object +**/ +Karma.prototype.sound = function ( args ) { return new KSound( args ) }; +/** +A shortcut for calling 'KVideo( )' +@see KVideo +@memberOf Karma +@returns {Object} new instance of KVideo object +**/ +Karma.prototype.video = function ( args ) { alert("Not implemented yet"); }; +/** +A shortcut for calling 'KGroup( )' +@see KGroup +@memberOf Karma +@returns {Object} new instance of KGroup object +**/ +Karma.prototype.group = function ( args ) { return new KGroup( args ) }; +/** +A shortcut for calling 'KButton( )' +@see KButton +@memberOf Karma +@returns {Object} new instance of KButton object +**/ +Karma.prototype.button = function ( args ) { return new KButton( args ) }; +/** +A shortcut for calling 'KSurface(.. )'. +@see KSurface +@memberOf Karma +@returns {Object} new instance of KSurface object +**/ +Karma.prototype.surface = function ( options ) { + if ( !valid(options, "object") ){ + var options = { name: "ksurface-"+ ( this.surfaces.length + 1 ) }; + } + options.mainContainer = this.container; + options.paths = this.paths; + this.surfaces[ options.name ] = new KSurface( options ); + return this.surface[ options.name ]; +} + +/** +Mouse +**/ +var mouse = {}; +/** +Gets the 'x' and 'y' mouse coordinates relatives to the canvas +@returns {Object} An Object with 'x' and 'y' attributes +**/ +mouse.getRelativeCanvasPosition = function ( ev ) { + if ( !ev ) return; + var xy ={x:0, y:0}; + xy.x = ev.layerX; + xy.y = ev.layerY; + return xy; +} + +//Events stuff +var master ={} +master.buttons =[]; +var handleEvents = function( ev ) { + var xy = mouse.getRelativeCanvasPosition( ev ); + for (var i in master.buttons) { + if (master.buttons[i].isPointInPath( xy.x, xy.y) ){ + master.buttons[i].onClick( ev ); + } + } + /*switch(ev.type){ + case "click": break; + }*/ + /*var s=""; + for (var i in ev) { + s+=i+"="+ev[i]+"\n"; + } + alert(s);*/ +}; + +/** +Master class creator. It will merge all the properties and methods of the +recived arguments (objects) into one new class that wil be returned. +@returns {Object} The new class +**/ +var Class = function ( ) { + var log=""; + var parents = []; + for ( var i = 0; i < arguments.length; i++ ) { + if ( arguments[i].prototype && arguments[i].init ) { + parents.push( arguments[i].init ); + } + } + var o = function ( ) { + //we inject all the init functions + /*for ( var i = 0; i < this.__parents.length; i++ ) { + this.__parents[ i ].apply ( this, arguments ); + }*/ + //call the real class init + if ( this.init ) + this.init.apply( this, arguments ); + }; + + o.prototype ={}; + var a; + for ( var i =0; i < arguments.length; i++) { + a = arguments[i]; + log += "**" + typeof a+"\n"; + //if ( a === "function") { + if (a.prototype) { + for ( var j in a.prototype ) { + //log += j+" = "+a.prototype[j]+"\n"; + o[ j ] = o.prototype[ j ] = a.prototype [ j ]; + } + } + else { + //if ( typeof a === "object") { + for (var j in a) { + //log += j+" = "+a[j]+"\n"; + o[ j ] = o.prototype[ j ] = a [ j ]; + } + } + + } + o.prototype.__parents = parents; + //alert( log ); + return o; //(function ( ) { return new o( arguments );}); +}; + +/** +Creates a new surface. A surface is a 'canvas' element with additional methods +that makes easier its manipulation.
+There are 2 ways to create a new KSurface: +
    +
  1. Using an existing canvas element:You must provide at least + the 'canvas' parameter. The 'name' is optional (if it's not provided the + 'canvas' parameter will be used). +
  2. +
  3. Creating a new canvas element: A new 'canvas' element will be + created and it will be appended to the specific 'container'. + You must provide at least the 'name' and 'container' parameters. +
  4. +
+@class KSurface class +@param {object} options Constructor options. +@param {string} [options.name] The desired name for the surface. The value must + be unique among others KSurfaces-name objects. +@param {string} [options.canvas] The name of the element. Commonly the + canvas-id value. +@param {string | object} [options.container] The the name of the container + element. Commonly a div-id value. +@param {number} [width=100] The width of the canvas. +@param {number} [height=100] The height of the canvas. +@param {number} [fps=24] The frames per second for any refresh operation. +@param {boolean} [visible=true] 'true' if the content is visible (will be drawn). +@memberOf_ Karma +**/ +var KSurface = Class( + { + init: function( options ){ + //fix the container + if ( valid( options.container, "string" ) && !valid( options.canvas) + ) { + var name=options.container; + options.container = $( options.container )[ 0 ]; + if ( !valid (options.container) ){ + // the container must be created inside the mainContainer + if ( !valid( options.mainContainer ) ){ + throw ("You need to create the Karma master container"); + } + var div = document.createElement("div"); + div.id = name; + options.container=options.mainContainer.appendChild( div ); + } + }else { + if ( !valid( options.mainContainer ) ){ + throw ("You need to create the Karma master container"); + } + options.container = options.mainContainer; + } + + var defaultOptions = { + //mainContainer: '',//must be overwritten by Karma.container + name: '',//must be overwritten by the Karma.surface OR user + container: '', //must be overwritten by Karma.container OR user + + width: 100, + height: 100, + fps: 24, + visible: true + } + $.extend( this, defaultOptions, options); + + if ( !this.canvas ) { + this.canvas = document.createElement("canvas"); + this.canvas.width = this.width; + this.canvas.height = this.height; + this.canvas.id = this.name; + this.container.appendChild( this.canvas ); + }else { + this.canvas = document.getElementById( options.canvas ); + if ( !this.canvas ){ + throw new Error ("The canvas id doesn't exist"); + } + this.width = this.canvas.width; + this.height = this.canvas.height; + if (!this.name){ + this.name = this.canvas.id; + } + } + if ( this.canvas.getContext ) { + this.ctx = this.canvas.getContext("2d"); + }else { + throw new Error ("Your browser doesn't support canvas, \ + try the newest Firefox, Safari or Google Chrome"); + } + //ctx methods chaining stuff + var toChain = [ + "globalAlpha", "globalCompositeOperation", "lineWidth", "lineCap", + "lineJoin", "miterLimit", "font", "textAlign", "textBaseline", "save", + "restore", "scale", "rotate", "translate", "transform", "setTransform", + "clearRect", "fillRect", "strokeRect", "beginPath", "closePath", + "moveTo", "lineTo", "quadraticCurveTo", "bezierCurveTo", "arcTo", + "arc", "rect", "fill", "stroke", "clip", "fillText", "strokeText", + "measureText", "isPointInPath", "strokeStyle", "fillStyle", + "createLinearGradient", "createRadialGradient", "createPattern", + "shadowOffsetX", "shadowOffsetY", "shadowBlur", "shadowColor", + //"mozTextStyle", "mozDrawText", "mozMeasureText", "mozPathText", + "mozTextAlongPath", "drawImage", "getImageData", "putImageData", + "createImageData", "drawWindow" + ]; + var that=this; + var chainMaker = function ( name ){ + that[ name ] = function ( ){ + var type = typeof that.ctx[name]; + if ( type === "function") { + that.ctx[ name ].apply( that.ctx, arguments ); + }else if ( type === "string" ){ + that.ctx[ name ] = arguments[0]; + }else { + throw ("wtf?!: impossible to chain " + name + "!"); + } + return that; + } + } + for (var i=0; i= x && + this.y <= y && (this.y+this.width)>=y); + }, + addEventListener : function (type, cb, bubble) { + //FIXME + } + } +); +/** +An object that collects multiple KGraphic objects. Supports multiple objects. +@class An object that collects multiple KGraphic objects +@augments KGraphic +@memberOf_ Karma +**/ +var KGroup = Class( + KGraphic, + { + init: function ( options ) { + this.childNodes = []; + this.sorted = true; + }, + /** + @memberOf KGroup + Adds each argument passed to the funtion to chilNodes. + @param {Array:KGraphic} arguments The elements to add to childNodes + @see KGroup#draw + **/ + appendChild : function ( ) { + if ( arguments.length > 0 ) { + for ( var i = 0; i< arguments.length; i++) { + this.childNodes.push ( arguments[ i ] ); + } + this.sorted = false; + + } + }, + removeChild: function () { + //FIXME + }, + /** + @memberOf_ KGroup + Draws all the elements in childNodes. The elements are drawn according + to its 'z' (z-index) value. + @see KGroup#appendChild + **/ + draw : function() { + if ( this.visible && this.childNodes.length > 0 ) { + if ( !this.sorted ) { + this.childNodes.sort ( function ( g1, g2 ) { + return g1.z - g2.z; + }); + this.sorted = true; + } + for (var i in this.childNodes) { + this.childNodes[ i ].draw(); + } + } + }, + isPointInPath : function() { + //TODO + } + + } +); + +/** +Graphics basic Media object. +@class General methods for any Graphic object +@param {String} file The name of the file that must be loaded +@param {String} type 'image', 'sound' or 'video' +@param {Object} [options] Options that will be passed to the media element + constructor +@augments KObject +@memberOf_ Karma +**/ +var KMedia = Class( + KObject, + { + init: function (file, type, options ) { + if ( !file || !type ) { + throw new Error ("file and type needed"); + } + if ( valid ( options ) ) + KObject.init.call (this, options); + + this.file = file; + this.type = type; + + this.status = undefined; + this.path = undefined; + this.media = undefined; + switch ( this.type ) { + case "image": this.media = new Image(); break; + case "sound": this.media = new Audio(); break; + default: throw new Error ("Media type not supported"); + } + this.path = gk.paths[ this.type + "s" ][ + this.localized ? "localized": "generic" + ]; + this.media.src = this.src = this.path + this.file; + + var that = this; + this.media.addEventListener("load", + function (e) { that.status = "loaded";}, false); + this.media.addEventListener("error", + function (e) { that.status = "error";}, false); + this.media.addEventListener("abort", + function (e) { that.status = "aborted";}, false); + } + } +); + +/** +Image object +@class General methods for any Image object +@param {Object} options Constructor arguments. +@param {Object} options.file The image file that will be loaded. +@augments KGraphic +@augments KMedia +@memberOf_ Karma +**/ +var KImage = Class( + KGraphic, + KMedia, + { + init: function ( options ) { + if ( valid ( options, "string" ) ) { + options = { file:options }; + } + if ( valid( options ) ) { + KGraphic.init.call(this, options); + KMedia.init.call(this, options.file, "image", options ); + } + var defaultOptions = { + //w : undefined, + //h : undefined, + }; + $.extend( this, defaultOptions, options); + }, + draw : function( ctx, x, y ) { + if ( this.visible && this.isReady() ) { + this.x = x || this.x; + this.y = y || this.y; + ctx.drawImage( this.media, this.x , this.y ); + } + }, + /** + Checks if the image has been loaded and fully decoded. + @returns {boolean} 'true' or 'false' + **/ + isReady : function () { + if ( !this.media.complete ) return false; + if ( !this.media.naturalWidth || this.media.naturalWidth === 0) + return false; + return true; + } + } +); + +/** +Sound object +@class General methods for any Sound object +@param {Object} options Constructor arguments. +@param {Object} options.file The image file that will be loaded. +@augments KMedia +@memberOf_ Karma +**/ +var KSound = Class( + /**@lends_ KMedia*/ + KMedia, + { + init: function( options ) { + if ( valid ( options, "string" ) ) { + options = { file: options }; + } + if ( valid( options ) ) { + KMedia.init.call(this, options.file, "sound", options ); + //next line is important! + this.media.load(); + } + }, + /** + Checks if the image has been loaded and fully decoded. + @returns {boolean} 'true' or 'false' + **/ + isReady: function () { + return this.readyState === 4; + }, + play: function (){ + //hack to fix the audio "stuttering" problem + //more info: https://bugs.launchpad.net/karma/+bug/426108 + this.media.currentTime = 0.1; + this.media.play(); + } + } +); + +/** +Shape object +@class General methods for any Shape object +@param {object} options Constructor arguments. +@param {boolean} [options.fill=true] 'true' if the Shape will be filled when + drawing. +@param {boolean} [options.stroke=true] 'true' if the stroke will be drawn. +@param {color|string} [options.fillStyle="#000"] The fill style of the shape. +@param {color|string} [options.strokeStyle="#000"] The stroke style of the shape. +@augments KMedia +@memberOf_ Karma +**/ +var KShape = Class( + /**@lends_ KGraphic*/ + KGraphic, + { + init : function ( options ) { + if ( valid( options ) ) { + KGraphic.init.call(this, options ); + } + var defaultOptions = { + fill: true, + stroke: true, + fillStyle: '#000', + strokeStyle: '#000', + openPath : false + } + $.extend( this, defaultOptions, options); + }, + draw : function ( ctx ) { + if ( this.visible ) { + ctx.fillStyle = this.fillStyle + ctx.strokeStyle= this.strokeStyle + if ( this.fill ) + ctx.fill(); + if ( this.stroke ) + ctx.stroke(); + if ( !this.openPath ) + ctx.closePath(); + ctx.restore(); + } + } + } +); +/** +Rectangle object +@class General methods for a rectangle object +@param {object} options Constructor arguments. +@param {number} options.x The 'x' position. +@param {number} options.y The 'y' position. +@param {number} options.w The width of the rectangle. +@param {number} options.h The height of the rectangle. +@augments KShape +@memberOf_ Karma +**/ +var KRectangle = Class( + KShape, + { + init : function ( options ) { + //ADD multiple constructors support + //x,y,w,h + //w,y,w,h,options + if ( valid( options ) ) { + KShape.init.call(this, options ); + } + }, + draw : function ( ctx ) { + if ( this.visible ) { + ctx.save(); + ctx.beginPath(); + ctx.rect( this.x, this.y, this.width, this.height); + KShape.draw.call( this, ctx ); + } + }, + clear : function ( ) { + if ( this.visible ) { + + } + } + } + +); + +/**@class_ */ +var KButton = Class( + /**@lends_ KGraphic*/ + KGraphic, + { + + init : function ( options ) { + //ADD multiple constructors support + //x,y,w,h + //w,y,w,h,options + if ( valid( options ) ) { + KGraphic.init.call(this, options ); + } + this.name = options.name; + master.buttons.push(this); + }, + draw : function ( ) {}, + onClick : function() { } //callback + } +); +// +/** +Karma function. It's a shotcut for calling 'new Karma(..)' +@param [options] Options passed to the Karma constructor +@returns {Object} a new Karma object +@see Karma +**/ +$.karma = function (options) { + var k =new Karma( options ); + return k; +} +})(jQuery); \ No newline at end of file diff --git a/examples/Conozco-Uruguay/js/jquery.svg.pack.js b/examples/Conozco-Uruguay/js/jquery.svg.pack.js new file mode 100644 index 0000000..4727218 --- /dev/null +++ b/examples/Conozco-Uruguay/js/jquery.svg.pack.js @@ -0,0 +1,7 @@ +/* http://keith-wood.name/svg.html + SVG for jQuery v1.4.2. + Written by Keith Wood (kbwood{at}iinet.com.au) August 2007. + Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and + MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. + Please attribute the author if you use it. */ +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(9($){9 2f(){7.1U=[];7.1V=[];7.2g=[];7.2g[\'\']={2Q:\'4d 4e\',2R:\'4f 1s 4g 4h 4i 2h\'};7.2i=7.2g[\'\'];7.2S=1d 4j().4k();7.2j=2T(\'4l.4m\')}9 2T(a){1t{u!!(4n.2k&&1d 2k(a))}1u(e){u 1H}}8 p=\'4o\';$.G(2f.R,{1C:\'4p\',1W:\'2U://2V.2W.2X/4q/B\',1h:\'2U://2V.2W.2X/4r/2l\',2Y:2m,2Z:{4s:\'30\',4t:\'1X\',4u:\'4v-2n\',4w:\'2n-4x\',4y:\'31-19\',4z:\'31-32\',4A:\'1D-33\',4B:\'1D-33-4C\',4D:\'1D-2o\',4E:\'4F-2n\',4G:\'4H-4I\',4J:\'34-1Y\',4K:\'34-32\',4L:\'35-1D\',4M:\'35-1Y\',4N:\'1v-4O\',4P:\'1v-36\',4Q:\'1v-36-4R\',4S:\'1v-4T\',4U:\'1v-1I\',4V:\'1v-4W\',4X:\'1v-4Y\',4Z:\'37-38-50\',51:\'37-38-52\',53:\'1Z-39-x\',54:\'1Z-3a-x\',55:\'21-2o\',56:\'57-3b\',58:\'59-1D\',5a:\'1J-5b\',5c:\'1J-5d\',5e:\'1J-5f\',3c:\'2p-1D\',3d:\'2p-1Y\',5g:\'3e-3f\',5h:\'3e-3g\',5i:\'1w-5j\',5k:\'1w-5l\',5m:\'1w-5n\',5o:\'1w-5p\',5q:\'1w-5r\',5s:\'1w-1Y\',5t:\'1w-P\',5u:\'13-5v\',5w:\'13-5x\',5y:\'13-2o\',5z:\'3h-3f\',5A:\'3h-3g\',5B:\'22-39-y\',5C:\'22-3a-y\',5D:\'5E-3b\',5F:\'5G-5H\'},3i:9(a,b){w($(a).2q(7.1C)){u}w(16 b==\'1i\'){b={23:b}}Y w(16 b==\'9\'){b={1l:b}}$(a).5I(7.1C);1t{8 c=24.2r(7.1W,\'B\');c.1x(\'2s\',\'1.1\');c.1x(\'P\',a.3j);c.1x(\'U\',a.3k);a.11(c);7.2t(a,c,b)}1u(e){w($.1s.25){w(!a.D){a.D=\'B\'+(7.2S++)}7.1U[a.D]=b;a.3l=\'<5J 1y="21/B+2u" P="3m%" \'+\'U="3m%" 5K="\'+(b.5L||\'\')+\'5M.B"/>\'}Y{a.3l=\'

\'+7.2i.2R+\'

\'}}},3n:9(){12(8 i=0;i<24.2v.N;i++){8 a=24.2v[i].3o;w(!$(a).2q($.B.1C)||$.2w(a,p)){5O}8 b=W;1t{b=24.2v[i].5P()}1u(e){5Q($.B.3n,5R);u}b=(b?b.1K:W);w(b){$.B.2t(a,b)}}},2t:9(a,b,c){8 c=c||7.1U[a.D];7.1U[a.D]=W;8 d=1d 7.2Y(b,a);$.2w(a,p,d);1t{w(c.23){d.3p(c.23,c)}w(c.E){d.1L(c.E)}w(c.1l&&!c.23){c.1l.1M(a,[d])}}1u(e){5S(e)}},5T:9(a){a=(16 a==\'1i\'?$(a)[0]:(a.3q?a[0]:a));u $.2w(a,p)},5U:9(a){8 b=$(a);w(!b.2q(7.1C)){u}b.5V(7.1C).5W();$.5X(a,p)},5Y:9(a,b){7.1V.5Z([a,b])}});9 2m(a,b){7.O=a;7.1N=b;12(8 i=0;i<$.B.1V.N;i++){8 c=$.B.1V[i];7[c[0]]=1d c[1](7)}}$.G(2m.R,{60:9(){u 7.1N.3j},61:9(){u 7.1N.3k},62:9(){u 7.O},1L:9(a,b){w(b){12(8 i=7.O.1e.N-1;i>=0;i--){8 c=7.O.1e.26(i);w(!(c.15==\'63\'||c.15==\'2s\'||c.15.1E(0,5)==\'2x\')){7.O.1e.64(c.15)}}}12(8 d 1X a){7.O.1x(d,a[d])}u 7},3r:9(a){u 7.O.17.3r(a)},65:9(a,b){w(a){12(8 c 1X b){w(b[c]==W){a.66(c)}Y{a.1x(c,b[c])}}}u 7},J:9(b,c,d){c.3s(0,0,\'F\');c.3s(c.N,0,\'E\');8 e={};8 f=0;w(b[0]!=W&&(16 b[0]!=\'2y\'||!b[0].15)){e[\'F\']=W;f=1}12(8 i=0;i\'+d.2D+\'\')}u e},1O:9(a,b,c,d){8 e=7.J(I,[\'1O\',\'1y\'],[\'1y\']);8 f=7.K(e.F,\'1O\',$.G({1y:e.1y||\'13/6f\'},e.E||{}));f.11(7.O.17.1f(7.3z(e.1O)));w(!$.1s.6g){$.6h(e.1O)}u f},3A:9(a,b,c,d,e,f,g,h){8 i=7.J(I,[\'D\',\'28\',\'1g\',\'1m\',\'1n\',\'1o\'],[\'1g\']);8 j=$.G({D:i.D},(i.1g!=W?{1g:i.1g,1m:i.1m,1n:i.1n,1o:i.1o}:{}));u 7.2E(i.F,\'3A\',$.G(j,i.E||{}),i.28)},3B:9(a,b,c,d,e,r,f,g,h){8 i=7.J(I,[\'D\',\'28\',\'1b\',\'1j\',\'r\',\'2F\',\'2G\'],[\'1b\']);8 j=$.G({D:i.D},(i.1b!=W?{1b:i.1b,1j:i.1j,r:i.r,2F:i.2F,2G:i.2G}:{}));u 7.2E(i.F,\'3B\',$.G(j,i.E||{}),i.28)},2E:9(a,b,c,d){8 e=7.K(a,b,c);12(8 i=0;i/g,\'&3U;\'))}}}u b},2M:9(a){a=(a.1E(0,1)>=\'A\'&&a.1E(0,1)<=\'Z\'?a.6s():a);u(a.1E(0,4)==\'B:\'?a.1E(4):a)},3p:9(h,j){j=(16 j==\'6t\'?{3V:j}:(16 j==\'9\'?{1l:j}:j||{}));w(!j.3V){7.3W(1H)}8 k=[7.O.3X(\'P\'),7.O.3X(\'U\')];8 l=7;8 m=9(a){a=$.B.2i.2Q+\': \'+a;w(j.1l){j.1l.1M(l.1N,[l,a])}Y{l.13(W,10,20,a)}};8 n=9(a){8 b=1d 2k(\'6u.6v\');b.6w=1H;b.6x=1H;b.6y=1H;b.6z(a);w(b.3Y.6A!=0){m(b.3Y.6B);u W}u b};8 o=9(a){w(!a){u}w(a.1K.15!=\'B\'){8 b=a.3Z(\'6C\');8 c=(b.N?b[0].3Z(\'6D\'):[]);m(!b.N?\'???\':(c.N?c[0]:b[0]).1T.14);u}8 d={};12(8 i=0;i\'}Y{b=\'<\'+a.15;w(a.1e){12(8 i=0;i\';8 d=a.1T;41(d){b+=7.2P(d);d=d.6T}b+=\'\'}Y{b+=\'/>\'}}u b},3z:9(a){a=a.1G(/&/g,\'&3S;\');a=a.1G(//g,\'&3U;\');u a}});9 X(){7.1c=\'\'}$.G(X.R,{43:9(){7.1c=\'\';u 7},44:9(x,y,a){a=(18(x)?y:a);u 7.1B((a?\'m\':\'M\'),x,y)},2c:9(x,y,a){a=(18(x)?y:a);u 7.1B((a?\'l\':\'L\'),x,y)},1Z:9(x,a){7.1c+=(a?\'h\':\'H\')+(18(x)?x.1Q(\' \'):x);u 7},22:9(y,a){7.1c+=(a?\'v\':\'V\')+(18(y)?y.1Q(\' \'):y);u 7},45:9(a,b,c,d,x,y,e){e=(18(a)?b:e);u 7.1B((e?\'c\':\'C\'),a,b,c,d,x,y)},46:9(a,b,x,y,c){c=(18(a)?b:c);u 7.1B((c?\'s\':\'S\'),a,b,x,y)},47:9(a,b,x,y,c){c=(18(a)?b:c);u 7.1B((c?\'q\':\'Q\'),a,b,x,y)},48:9(x,y,a){a=(18(x)?y:a);u 7.1B((a?\'t\':\'T\'),x,y)},1B:9(a,b,c,d,e,f,g){w(18(b)){12(8 i=0;i35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(4($){2 j=$.9.W;$.9.W=4(d){d=d||\'\';7 3.D(4(){5(C(3)){2 c=3;$.D(d.J(/\\s+/),4(i,a){2 b=(c.8?c.8.A:c.I(\'F\'));5($.X(a,b.J(/\\s+/))==-1){b+=(b?\' \':\'\')+a;(c.8?c.8.A=b:c.L(\'F\',b))}})}G{j.H($(3),[d])}})};2 k=$.9.Y;$.9.Y=4(d){d=d||\'\';7 3.D(4(){5(C(3)){2 c=3;$.D(d.J(/\\s+/),4(i,a){2 b=(c.8?c.8.A:c.I(\'F\'));b=$.1g(b.J(/\\s+/),4(n,i){7 n!=a}).1h(\' \');(c.8?c.8.A=b:c.L(\'F\',b))})}G{k.H($(3),[d])}})};2 l=$.9.Z;$.9.Z=4(a,b){7 3.D(4(){5(C(3)){5(M b!==\'1i\'){b=!$(3).T(a)}$(3)[(b?\'1j\':\'1k\')+\'1l\'](a)}G{l.H($(3),[a,b])}})};2 m=$.9.T;$.9.T=4(b){b=b||\'\';2 c=N;3.D(4(){5(C(3)){2 a=(3.8?3.8.A:3.I(\'F\')).J(/\\s+/);c=($.X(b,a)>-1)}G{c=(m.H($(3),[b]))}7!c});7 c};2 o=$.9.10;$.9.10=4(a,b,c){5(M a===\'11\'&&b===1m){2 d=o.H(3,[a,b,c]);7(d&&d.A?d.A.1n:d)}2 e=a;5(M a===\'11\'){e={};e[a]=b}7 3.D(4(){5(C(3)){O(2 n 1o e){3.L(n,(M e[n]==\'4\'?e[n]():e[n]))}}G{o.H($(3),[a,b,c])}})};2 p=$.9.12;$.9.12=4(a){7 3.D(4(){5(C(3)){(3[a]&&3[a].A?3[a].A.1p=\'\':3.L(a,\'\'))}G{p.H($(3),[a])}})};2 q=$.6.E[\'+\'];2 r=$.6.E[\'>\'];2 s=$.6.E[\'\'];2 t=$.6.E[\'~\'];2 u=$.6.P.13;2 v=$.6.P.14;2 w=$.6.15.Q;2 x=$.6.R.Q;2 y=$.6.R.16;4 K(a){O(2 i=0;i\']=4(a,b,c){r(a,b,c||K(a))};$.6.E[\'\']=4(a,b,c){s(a,b,c||K(a))};$.6.E[\'~\']=4(a,b,c){t(a,b,c||K(a))};$.6.P.13=4(a,b,c){7(C(b)?[b.1r.1s(a[1])]:u(a,b,c))};2 z=1b.1t(\'1u\');z.1v(1b.1w(\'\'));5(z.1c(\'*\').17>0){$.6.P.14=4(a,b){2 c=b.1c(a[1]);5(a[1]===\'*\'){2 d=[];O(2 i=0;c[i]||c.S(i);i++){5((c[i]||c.S(i)).U===1){d.1d(c[i]||c.S(i))}}c=d}7 c}}$.6.15.Q=4(a,b,c,d,f,g){a=\' \'+a[1].1x(/\\\\/g,\'\')+\' \';5(g){7 a}O(2 i=0,B={};B!=V;i++){B=b[i];5(!B){1y{B=b.S(i)}1z(e){}}5(B){2 h=(!C(B)?B.8:(B.8?B.8.A:\'\')||B.I(\'F\'));5(f^(h&&(\' \'+h+\' \').1e(a)>-1)){5(!c)d.1d(B)}G 5(c){b[i]=N}}}7 N};$.6.R.Q=4(a,b){2 c=(!C(a)?a.8:(a.8?a.8.A:a.I(\'F\')));7(\' \'+c+\' \').1e(b)>-1};$.6.R.16=4(c,d){2 e=V;5(C(c)){e=d[1];$.6.1f[e]=4(a){2 b=a.I(e);7 b&&b.A||b}}2 f=y(c,d);5(e){$.6.1f[e]=V}7 f};4 C(a){7(a.U==1&&a.18==$.19.1a)}})(1A);',62,99,'||var|this|function|if|expr|return|className|fn|||||||||||||||||||||||||||baseVal|elem|isSVGElem|each|relative|class|else|apply|getAttribute|split|anySVG|setAttribute|typeof|false|for|find|CLASS|filter|item|hasClass|nodeType|null|addClass|inArray|removeClass|toggleClass|attr|string|removeAttr|ID|TAG|preFilter|ATTR|length|namespaceURI|svg|svgNS|document|getElementsByTagName|push|indexOf|attrHandle|grep|join|boolean|add|remove|Class|undefined|valueAsString|in|value|true|ownerDocument|getElementById|createElement|div|appendChild|createComment|replace|try|catch|jQuery'.split('|'),0,{})) \ No newline at end of file diff --git a/examples/Conozco-Uruguay/js/karma.Gettext.js b/examples/Conozco-Uruguay/js/karma.Gettext.js new file mode 100755 index 0000000..0e39a31 --- /dev/null +++ b/examples/Conozco-Uruguay/js/karma.Gettext.js @@ -0,0 +1,1282 @@ +/* +Pure Javascript implementation of Uniforum message translation. +Copyright (C) 2008 Joshua I. Miller , all rights reserved + +This program is free software; you can redistribute it and/or modify it +under the terms of the GNU Library General Public License as published +by the Free Software Foundation; either version 2, or (at your option) +any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Library General Public License for more details. + +You should have received a copy of the GNU Library General Public +License along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, +USA. + +=head1 NAME + +Javascript Gettext - Javascript implemenation of GNU Gettext API. + +=head1 SYNOPSIS + + // ////////////////////////////////////////////////////////// + // Optimum caching way + + + + var gt = new Gettext({ "domain" : "myDomain" }); + // rest is the same + + + // ////////////////////////////////////////////////////////// + // The reson the shortcuts aren't exported by default is because they'd be + // glued to the single domain you created. So, if you're adding i18n support + // to some js library, you should use it as so: + + if (typeof(MyNamespace) == 'undefined') MyNamespace = {}; + MyNamespace.MyClass = function () { + var gtParms = { "domain" : 'MyNamespace_MyClass' }; + this.gt = new Gettext(gtParams); + return this; + }; + MyNamespace.MyClass.prototype._ = function (msgid) { + return this.gt.gettext(msgid); + }; + MyNamespace.MyClass.prototype.something = function () { + var myString = this._("this will get translated"); + }; + + // ////////////////////////////////////////////////////////// + // Adding the shortcuts to a global scope is easier. If that's + // ok in your app, this is certainly easier. + var myGettext = new Gettext({ 'domain' : 'myDomain' }); + function _ (msgid) { + return myGettext.gettext(msgid); + } + alert( _("text") ); + + // ////////////////////////////////////////////////////////// + // Data structure of the json data + // NOTE: if you're loading via the + + // in domain.json + json_locale_data = { + "mydomain" : { + // po header fields + "" : { + "plural-forms" : "...", + "lang" : "en", + }, + // all the msgid strings and translations + "msgid" : [ "msgid_plural", "translation", "plural_translation" ], + }, + }; + // please see the included bin/po2json script for the details on this format + +This method also allows you to use unsupported file formats, so long as you can parse them into the above format. + +=item 2. Use AJAX to load language file. + +Use XMLHttpRequest (actually, SJAX - syncronous) to load an external resource. + +Supported external formats are: + +=over + +=item * Javascript Object Notation (.json) + +(see bin/po2json) + + type=application/json + +=item * Uniforum Portable Object (.po) + +(see GNU Gettext's xgettext) + + type=application/x-po + +=item * Machine Object (compiled .po) (.mo) + +NOTE: .mo format isn't actually supported just yet, but support is planned. + +(see GNU Gettext's msgfmt) + + type=application/x-mo + +=back + +=back + +=head1 METHODS + +The following methods are implemented: + + new Gettext(args) + textdomain (domain) + gettext (msgid) + dgettext (domainname, msgid) + dcgettext (domainname, msgid, LC_MESSAGES) + ngettext (msgid, msgid_plural, count) + dngettext (domainname, msgid, msgid_plural, count) + dcngettext (domainname, msgid, msgid_plural, count, LC_MESSAGES) + pgettext (msgctxt, msgid) + dpgettext (domainname, msgctxt, msgid) + dcpgettext (domainname, msgctxt, msgid, LC_MESSAGES) + npgettext (msgctxt, msgid, msgid_plural, count) + dnpgettext (domainname, msgctxt, msgid, msgid_plural, count) + dcnpgettext (domainname, msgctxt, msgid, msgid_plural, count, LC_MESSAGES) + strargs (string, args_array) + + +=head2 new Gettext (args) + +Several methods of loading locale data are included. You may specify a plugin or alternative method of loading data by passing the data in as the "locale_data" option. For example: + + var get_locale_data = function () { + // plugin does whatever to populate locale_data + return locale_data; + }; + var gt = new Gettext( 'domain' : 'messages', + 'locale_data' : get_locale_data() ); + +The above can also be used if locale data is specified in a statically included