PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/dojo/dojox/dtl/_base.js

https://github.com/schnuffel/learncards-web
JavaScript | 574 lines | 567 code | 2 blank | 5 comment | 86 complexity | 2d5d3f72cad2567ce06beaa11634d34c MD5 | raw file
Possible License(s): BSD-3-Clause, LGPL-2.0, MIT
  1. /*
  2. Copyright (c) 2004-2009, The Dojo Foundation All Rights Reserved.
  3. Available via Academic Free License >= 2.1 OR the modified BSD license.
  4. see: http://dojotoolkit.org/license for details
  5. */
  6. if(!dojo._hasResource["dojox.dtl._base"]){
  7. dojo._hasResource["dojox.dtl._base"]=true;
  8. dojo.provide("dojox.dtl._base");
  9. dojo.require("dojox.string.Builder");
  10. dojo.require("dojox.string.tokenize");
  11. dojo.experimental("dojox.dtl");
  12. (function(){
  13. var dd=dojox.dtl;
  14. dd.TOKEN_BLOCK=-1;
  15. dd.TOKEN_VAR=-2;
  16. dd.TOKEN_COMMENT=-3;
  17. dd.TOKEN_TEXT=3;
  18. dd._Context=dojo.extend(function(_1){
  19. dojo._mixin(this,_1||{});
  20. this._dicts=[];
  21. },{push:function(){
  22. var _2=this;
  23. var _3=dojo.delegate(this);
  24. _3.pop=function(){
  25. return _2;
  26. };
  27. return _3;
  28. },pop:function(){
  29. throw new Error("pop() called on empty Context");
  30. },get:function(_4,_5){
  31. if(typeof this[_4]!="undefined"){
  32. return this._normalize(this[_4]);
  33. }
  34. for(var i=0,_6;_6=this._dicts[i];i++){
  35. if(typeof _6[_4]!="undefined"){
  36. return this._normalize(_6[_4]);
  37. }
  38. }
  39. return _5;
  40. },_normalize:function(_7){
  41. if(_7 instanceof Date){
  42. _7.year=_7.getFullYear();
  43. _7.month=_7.getMonth()+1;
  44. _7.day=_7.getDate();
  45. _7.date=_7.year+"-"+("0"+_7.month).slice(-2)+"-"+("0"+_7.day).slice(-2);
  46. _7.hour=_7.getHours();
  47. _7.minute=_7.getMinutes();
  48. _7.second=_7.getSeconds();
  49. _7.microsecond=_7.getMilliseconds();
  50. }
  51. return _7;
  52. },update:function(_8){
  53. var _9=this.push();
  54. if(_8){
  55. dojo._mixin(this,_8);
  56. }
  57. return _9;
  58. }});
  59. var _a=/("(?:[^"\\]*(?:\\.[^"\\]*)*)"|'(?:[^'\\]*(?:\\.[^'\\]*)*)'|[^\s]+)/g;
  60. var _b=/\s+/g;
  61. var _c=function(_d,_e){
  62. _d=_d||_b;
  63. if(!(_d instanceof RegExp)){
  64. _d=new RegExp(_d,"g");
  65. }
  66. if(!_d.global){
  67. throw new Error("You must use a globally flagged RegExp with split "+_d);
  68. }
  69. _d.exec("");
  70. var _f,_10=[],_11=0,i=0;
  71. while(_f=_d.exec(this)){
  72. _10.push(this.slice(_11,_d.lastIndex-_f[0].length));
  73. _11=_d.lastIndex;
  74. if(_e&&(++i>_e-1)){
  75. break;
  76. }
  77. }
  78. _10.push(this.slice(_11));
  79. return _10;
  80. };
  81. dd.Token=function(_12,_13){
  82. this.token_type=_12;
  83. this.contents=new String(dojo.trim(_13));
  84. this.contents.split=_c;
  85. this.split=function(){
  86. return String.prototype.split.apply(this.contents,arguments);
  87. };
  88. };
  89. dd.Token.prototype.split_contents=function(_14){
  90. var bit,_15=[],i=0;
  91. _14=_14||999;
  92. while(i++<_14&&(bit=_a.exec(this.contents))){
  93. bit=bit[0];
  94. if(bit.charAt(0)=="\""&&bit.slice(-1)=="\""){
  95. _15.push("\""+bit.slice(1,-1).replace("\\\"","\"").replace("\\\\","\\")+"\"");
  96. }else{
  97. if(bit.charAt(0)=="'"&&bit.slice(-1)=="'"){
  98. _15.push("'"+bit.slice(1,-1).replace("\\'","'").replace("\\\\","\\")+"'");
  99. }else{
  100. _15.push(bit);
  101. }
  102. }
  103. }
  104. return _15;
  105. };
  106. var ddt=dd.text={_get:function(_16,_17,_18){
  107. var _19=dd.register.get(_16,_17.toLowerCase(),_18);
  108. if(!_19){
  109. if(!_18){
  110. throw new Error("No tag found for "+_17);
  111. }
  112. return null;
  113. }
  114. var fn=_19[1];
  115. var _1a=_19[2];
  116. var _1b;
  117. if(fn.indexOf(":")!=-1){
  118. _1b=fn.split(":");
  119. fn=_1b.pop();
  120. }
  121. dojo["require"](_1a);
  122. var _1c=dojo.getObject(_1a);
  123. return _1c[fn||_17]||_1c[_17+"_"]||_1c[fn+"_"];
  124. },getTag:function(_1d,_1e){
  125. return ddt._get("tag",_1d,_1e);
  126. },getFilter:function(_1f,_20){
  127. return ddt._get("filter",_1f,_20);
  128. },getTemplate:function(_21){
  129. return new dd.Template(ddt.getTemplateString(_21));
  130. },getTemplateString:function(_22){
  131. return dojo._getText(_22.toString())||"";
  132. },_resolveLazy:function(_23,_24,_25){
  133. if(_24){
  134. if(_25){
  135. return dojo.fromJson(dojo._getText(_23))||{};
  136. }else{
  137. return dd.text.getTemplateString(_23);
  138. }
  139. }else{
  140. return dojo.xhrGet({handleAs:(_25)?"json":"text",url:_23});
  141. }
  142. },_resolveTemplateArg:function(arg,_26){
  143. if(ddt._isTemplate(arg)){
  144. if(!_26){
  145. var d=new dojo.Deferred();
  146. d.callback(arg);
  147. return d;
  148. }
  149. return arg;
  150. }
  151. return ddt._resolveLazy(arg,_26);
  152. },_isTemplate:function(arg){
  153. return (typeof arg=="undefined")||(typeof arg=="string"&&(arg.match(/^\s*[<{]/)||arg.indexOf(" ")!=-1));
  154. },_resolveContextArg:function(arg,_27){
  155. if(arg.constructor==Object){
  156. if(!_27){
  157. var d=new dojo.Deferred;
  158. d.callback(arg);
  159. return d;
  160. }
  161. return arg;
  162. }
  163. return ddt._resolveLazy(arg,_27,true);
  164. },_re:/(?:\{\{\s*(.+?)\s*\}\}|\{%\s*(load\s*)?(.+?)\s*%\})/g,tokenize:function(str){
  165. return dojox.string.tokenize(str,ddt._re,ddt._parseDelims);
  166. },_parseDelims:function(_28,_29,tag){
  167. if(_28){
  168. return [dd.TOKEN_VAR,_28];
  169. }else{
  170. if(_29){
  171. var _2a=dojo.trim(tag).split(/\s+/g);
  172. for(var i=0,_2b;_2b=_2a[i];i++){
  173. dojo["require"](_2b);
  174. }
  175. }else{
  176. return [dd.TOKEN_BLOCK,tag];
  177. }
  178. }
  179. }};
  180. dd.Template=dojo.extend(function(_2c,_2d){
  181. var str=_2d?_2c:ddt._resolveTemplateArg(_2c,true)||"";
  182. var _2e=ddt.tokenize(str);
  183. var _2f=new dd._Parser(_2e);
  184. this.nodelist=_2f.parse();
  185. },{update:function(_30,_31){
  186. return ddt._resolveContextArg(_31).addCallback(this,function(_32){
  187. var _33=this.render(new dd._Context(_32));
  188. if(_30.forEach){
  189. _30.forEach(function(_34){
  190. _34.innerHTML=_33;
  191. });
  192. }else{
  193. dojo.byId(_30).innerHTML=_33;
  194. }
  195. return this;
  196. });
  197. },render:function(_35,_36){
  198. _36=_36||this.getBuffer();
  199. _35=_35||new dd._Context({});
  200. return this.nodelist.render(_35,_36)+"";
  201. },getBuffer:function(){
  202. dojo.require("dojox.string.Builder");
  203. return new dojox.string.Builder();
  204. }});
  205. var _37=/\{\{\s*(.+?)\s*\}\}/g;
  206. dd.quickFilter=function(str){
  207. if(!str){
  208. return new dd._NodeList();
  209. }
  210. if(str.indexOf("{%")==-1){
  211. return new dd._QuickNodeList(dojox.string.tokenize(str,_37,function(_38){
  212. return new dd._Filter(_38);
  213. }));
  214. }
  215. };
  216. dd._QuickNodeList=dojo.extend(function(_39){
  217. this.contents=_39;
  218. },{render:function(_3a,_3b){
  219. for(var i=0,l=this.contents.length;i<l;i++){
  220. if(this.contents[i].resolve){
  221. _3b=_3b.concat(this.contents[i].resolve(_3a));
  222. }else{
  223. _3b=_3b.concat(this.contents[i]);
  224. }
  225. }
  226. return _3b;
  227. },dummyRender:function(_3c){
  228. return this.render(_3c,dd.Template.prototype.getBuffer()).toString();
  229. },clone:function(_3d){
  230. return this;
  231. }});
  232. dd._Filter=dojo.extend(function(_3e){
  233. if(!_3e){
  234. throw new Error("Filter must be called with variable name");
  235. }
  236. this.contents=_3e;
  237. var _3f=this._cache[_3e];
  238. if(_3f){
  239. this.key=_3f[0];
  240. this.filters=_3f[1];
  241. }else{
  242. this.filters=[];
  243. dojox.string.tokenize(_3e,this._re,this._tokenize,this);
  244. this._cache[_3e]=[this.key,this.filters];
  245. }
  246. },{_cache:{},_re:/(?:^_\("([^\\"]*(?:\\.[^\\"])*)"\)|^"([^\\"]*(?:\\.[^\\"]*)*)"|^([a-zA-Z0-9_.]+)|\|(\w+)(?::(?:_\("([^\\"]*(?:\\.[^\\"])*)"\)|"([^\\"]*(?:\\.[^\\"]*)*)"|([a-zA-Z0-9_.]+)|'([^\\']*(?:\\.[^\\']*)*)'))?|^'([^\\']*(?:\\.[^\\']*)*)')/g,_values:{0:"\"",1:"\"",2:"",8:"\""},_args:{4:"\"",5:"\"",6:"",7:"'"},_tokenize:function(){
  247. var pos,arg;
  248. for(var i=0,has=[];i<arguments.length;i++){
  249. has[i]=(typeof arguments[i]!="undefined"&&typeof arguments[i]=="string"&&arguments[i]);
  250. }
  251. if(!this.key){
  252. for(pos in this._values){
  253. if(has[pos]){
  254. this.key=this._values[pos]+arguments[pos]+this._values[pos];
  255. break;
  256. }
  257. }
  258. }else{
  259. for(pos in this._args){
  260. if(has[pos]){
  261. var _40=arguments[pos];
  262. if(this._args[pos]=="'"){
  263. _40=_40.replace(/\\'/g,"'");
  264. }else{
  265. if(this._args[pos]=="\""){
  266. _40=_40.replace(/\\"/g,"\"");
  267. }
  268. }
  269. arg=[!this._args[pos],_40];
  270. break;
  271. }
  272. }
  273. var fn=ddt.getFilter(arguments[3]);
  274. if(!dojo.isFunction(fn)){
  275. throw new Error(arguments[3]+" is not registered as a filter");
  276. }
  277. this.filters.push([fn,arg]);
  278. }
  279. },getExpression:function(){
  280. return this.contents;
  281. },resolve:function(_41){
  282. if(typeof this.key=="undefined"){
  283. return "";
  284. }
  285. var str=this.resolvePath(this.key,_41);
  286. for(var i=0,_42;_42=this.filters[i];i++){
  287. if(_42[1]){
  288. if(_42[1][0]){
  289. str=_42[0](str,this.resolvePath(_42[1][1],_41));
  290. }else{
  291. str=_42[0](str,_42[1][1]);
  292. }
  293. }else{
  294. str=_42[0](str);
  295. }
  296. }
  297. return str;
  298. },resolvePath:function(_43,_44){
  299. var _45,_46;
  300. var _47=_43.charAt(0);
  301. var _48=_43.slice(-1);
  302. if(!isNaN(parseInt(_47))){
  303. _45=(_43.indexOf(".")==-1)?parseInt(_43):parseFloat(_43);
  304. }else{
  305. if(_47=="\""&&_47==_48){
  306. _45=_43.slice(1,-1);
  307. }else{
  308. if(_43=="true"){
  309. return true;
  310. }
  311. if(_43=="false"){
  312. return false;
  313. }
  314. if(_43=="null"||_43=="None"){
  315. return null;
  316. }
  317. _46=_43.split(".");
  318. _45=_44.get(_46[0]);
  319. if(dojo.isFunction(_45)){
  320. var _49=_44.getThis&&_44.getThis();
  321. if(_45.alters_data){
  322. _45="";
  323. }else{
  324. if(_49){
  325. _45=_45.call(_49);
  326. }else{
  327. _45="";
  328. }
  329. }
  330. }
  331. for(var i=1;i<_46.length;i++){
  332. var _4a=_46[i];
  333. if(_45){
  334. var _4b=_45;
  335. if(dojo.isObject(_45)&&_4a=="items"&&typeof _45[_4a]=="undefined"){
  336. var _4c=[];
  337. for(var key in _45){
  338. _4c.push([key,_45[key]]);
  339. }
  340. _45=_4c;
  341. continue;
  342. }
  343. if(_45.get&&dojo.isFunction(_45.get)&&_45.get.safe){
  344. _45=_45.get(_4a);
  345. }else{
  346. if(typeof _45[_4a]=="undefined"){
  347. _45=_45[_4a];
  348. break;
  349. }else{
  350. _45=_45[_4a];
  351. }
  352. }
  353. if(dojo.isFunction(_45)){
  354. if(_45.alters_data){
  355. _45="";
  356. }else{
  357. _45=_45.call(_4b);
  358. }
  359. }else{
  360. if(_45 instanceof Date){
  361. _45=dd._Context.prototype._normalize(_45);
  362. }
  363. }
  364. }else{
  365. return "";
  366. }
  367. }
  368. }
  369. }
  370. return _45;
  371. }});
  372. dd._TextNode=dd._Node=dojo.extend(function(obj){
  373. this.contents=obj;
  374. },{set:function(_4d){
  375. this.contents=_4d;
  376. return this;
  377. },render:function(_4e,_4f){
  378. return _4f.concat(this.contents);
  379. },isEmpty:function(){
  380. return !dojo.trim(this.contents);
  381. },clone:function(){
  382. return this;
  383. }});
  384. dd._NodeList=dojo.extend(function(_50){
  385. this.contents=_50||[];
  386. this.last="";
  387. },{push:function(_51){
  388. this.contents.push(_51);
  389. return this;
  390. },concat:function(_52){
  391. this.contents=this.contents.concat(_52);
  392. return this;
  393. },render:function(_53,_54){
  394. for(var i=0;i<this.contents.length;i++){
  395. _54=this.contents[i].render(_53,_54);
  396. if(!_54){
  397. throw new Error("Template must return buffer");
  398. }
  399. }
  400. return _54;
  401. },dummyRender:function(_55){
  402. return this.render(_55,dd.Template.prototype.getBuffer()).toString();
  403. },unrender:function(){
  404. return arguments[1];
  405. },clone:function(){
  406. return this;
  407. },rtrim:function(){
  408. while(1){
  409. i=this.contents.length-1;
  410. if(this.contents[i] instanceof dd._TextNode&&this.contents[i].isEmpty()){
  411. this.contents.pop();
  412. }else{
  413. break;
  414. }
  415. }
  416. return this;
  417. }});
  418. dd._VarNode=dojo.extend(function(str){
  419. this.contents=new dd._Filter(str);
  420. },{render:function(_56,_57){
  421. var str=this.contents.resolve(_56);
  422. if(!str.safe){
  423. str=dd._base.escape(""+str);
  424. }
  425. return _57.concat(str);
  426. }});
  427. dd._noOpNode=new function(){
  428. this.render=this.unrender=function(){
  429. return arguments[1];
  430. };
  431. this.clone=function(){
  432. return this;
  433. };
  434. };
  435. dd._Parser=dojo.extend(function(_58){
  436. this.contents=_58;
  437. },{i:0,parse:function(_59){
  438. var _5a={},_5b;
  439. _59=_59||[];
  440. for(var i=0;i<_59.length;i++){
  441. _5a[_59[i]]=true;
  442. }
  443. var _5c=new dd._NodeList();
  444. while(this.i<this.contents.length){
  445. _5b=this.contents[this.i++];
  446. if(typeof _5b=="string"){
  447. _5c.push(new dd._TextNode(_5b));
  448. }else{
  449. var _5d=_5b[0];
  450. var _5e=_5b[1];
  451. if(_5d==dd.TOKEN_VAR){
  452. _5c.push(new dd._VarNode(_5e));
  453. }else{
  454. if(_5d==dd.TOKEN_BLOCK){
  455. if(_5a[_5e]){
  456. --this.i;
  457. return _5c;
  458. }
  459. var cmd=_5e.split(/\s+/g);
  460. if(cmd.length){
  461. cmd=cmd[0];
  462. var fn=ddt.getTag(cmd);
  463. if(fn){
  464. _5c.push(fn(this,new dd.Token(_5d,_5e)));
  465. }
  466. }
  467. }
  468. }
  469. }
  470. }
  471. if(_59.length){
  472. throw new Error("Could not find closing tag(s): "+_59.toString());
  473. }
  474. this.contents.length=0;
  475. return _5c;
  476. },next_token:function(){
  477. var _5f=this.contents[this.i++];
  478. return new dd.Token(_5f[0],_5f[1]);
  479. },delete_first_token:function(){
  480. this.i++;
  481. },skip_past:function(_60){
  482. while(this.i<this.contents.length){
  483. var _61=this.contents[this.i++];
  484. if(_61[0]==dd.TOKEN_BLOCK&&_61[1]==_60){
  485. return;
  486. }
  487. }
  488. throw new Error("Unclosed tag found when looking for "+_60);
  489. },create_variable_node:function(_62){
  490. return new dd._VarNode(_62);
  491. },create_text_node:function(_63){
  492. return new dd._TextNode(_63||"");
  493. },getTemplate:function(_64){
  494. return new dd.Template(_64);
  495. }});
  496. dd.register={_registry:{attributes:[],tags:[],filters:[]},get:function(_65,_66){
  497. var _67=dd.register._registry[_65+"s"];
  498. for(var i=0,_68;_68=_67[i];i++){
  499. if(typeof _68[0]=="string"){
  500. if(_68[0]==_66){
  501. return _68;
  502. }
  503. }else{
  504. if(_66.match(_68[0])){
  505. return _68;
  506. }
  507. }
  508. }
  509. },getAttributeTags:function(){
  510. var _69=[];
  511. var _6a=dd.register._registry.attributes;
  512. for(var i=0,_6b;_6b=_6a[i];i++){
  513. if(_6b.length==3){
  514. _69.push(_6b);
  515. }else{
  516. var fn=dojo.getObject(_6b[1]);
  517. if(fn&&dojo.isFunction(fn)){
  518. _6b.push(fn);
  519. _69.push(_6b);
  520. }
  521. }
  522. }
  523. return _69;
  524. },_any:function(_6c,_6d,_6e){
  525. for(var _6f in _6e){
  526. for(var i=0,fn;fn=_6e[_6f][i];i++){
  527. var key=fn;
  528. if(dojo.isArray(fn)){
  529. key=fn[0];
  530. fn=fn[1];
  531. }
  532. if(typeof key=="string"){
  533. if(key.substr(0,5)=="attr:"){
  534. var _70=fn;
  535. if(_70.substr(0,5)=="attr:"){
  536. _70=_70.slice(5);
  537. }
  538. dd.register._registry.attributes.push([_70.toLowerCase(),_6d+"."+_6f+"."+_70]);
  539. }
  540. key=key.toLowerCase();
  541. }
  542. dd.register._registry[_6c].push([key,fn,_6d+"."+_6f]);
  543. }
  544. }
  545. },tags:function(_71,_72){
  546. dd.register._any("tags",_71,_72);
  547. },filters:function(_73,_74){
  548. dd.register._any("filters",_73,_74);
  549. }};
  550. var _75=/&/g;
  551. var _76=/</g;
  552. var _77=/>/g;
  553. var _78=/'/g;
  554. var _79=/"/g;
  555. dd._base.escape=function(_7a){
  556. return dd.mark_safe(_7a.replace(_75,"&amp;").replace(_76,"&lt;").replace(_77,"&gt;").replace(_79,"&quot;").replace(_78,"&#39;"));
  557. };
  558. dd._base.safe=function(_7b){
  559. if(typeof _7b=="string"){
  560. _7b=new String(_7b);
  561. }
  562. if(typeof _7b=="object"){
  563. _7b.safe=true;
  564. }
  565. return _7b;
  566. };
  567. dd.mark_safe=dd._base.safe;
  568. dd.register.tags("dojox.dtl.tag",{"date":["now"],"logic":["if","for","ifequal","ifnotequal"],"loader":["extends","block","include","load","ssi"],"misc":["comment","debug","filter","firstof","spaceless","templatetag","widthratio","with"],"loop":["cycle","ifchanged","regroup"]});
  569. dd.register.filters("dojox.dtl.filter",{"dates":["date","time","timesince","timeuntil"],"htmlstrings":["linebreaks","linebreaksbr","removetags","striptags"],"integers":["add","get_digit"],"lists":["dictsort","dictsortreversed","first","join","length","length_is","random","slice","unordered_list"],"logic":["default","default_if_none","divisibleby","yesno"],"misc":["filesizeformat","pluralize","phone2numeric","pprint"],"strings":["addslashes","capfirst","center","cut","fix_ampersands","floatformat","iriencode","linenumbers","ljust","lower","make_list","rjust","slugify","stringformat","title","truncatewords","truncatewords_html","upper","urlencode","urlize","urlizetrunc","wordcount","wordwrap"]});
  570. dd.register.filters("dojox.dtl",{"_base":["escape","safe"]});
  571. })();
  572. }