zy_tmpl.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. var zy_tmpl_count=function(dd)
  2. {
  3. if(Object.prototype.toString.apply(dd)==="[object Array]")
  4. {
  5. return dd.length;
  6. }
  7. else
  8. {
  9. var c=0;
  10. for(var i in dd)
  11. c++;
  12. return c;
  13. }
  14. }
  15. var _f = function(d,c,k1,k2,l){
  16. var q = c.match(/(first:|last:)(\"|\'*)([^\"\']*)(\"|\'*)/);
  17. if(!q) return;
  18. if(q[1]==k1){
  19. if(q[2]=='\"'||q[2]=='\''){
  20. return q[3];
  21. }
  22. else
  23. return d[q[3]];
  24. }
  25. else if(q[1]==k2 && l>1)
  26. return "";
  27. }
  28. var t_f = function(t,d,i,l,cb){
  29. return t.replace( /\$\{([^\}]*)\}/g,function(m,c){
  30. if(c.match(/index:/)){
  31. return i;
  32. }
  33. if(c.match(/cb:/) && cb){
  34. return cb(d,c.match(/cb:(.*)/));
  35. }
  36. if(i==0){
  37. var s=_f(d,c,"first:","last:",l);
  38. if(s) return s;
  39. }
  40. if(i==(l-1)){
  41. var s= _f(d,c,"last:","first:",l);
  42. if(s) return s;
  43. }
  44. var ar=c.split('.');
  45. var res=d;
  46. for(var key in ar)
  47. res=res[ar[key]];
  48. return res||"";
  49. });
  50. }
  51. var zy_tmpl = function(t,dd,l,cb,scb){
  52. var r = "";
  53. {
  54. var index=0;
  55. for(var i in dd)
  56. {
  57. if(scb)
  58. scb(0,i,dd[i]);
  59. var rr=t_f(t,dd[i],index,l,cb);
  60. if(scb)
  61. scb(1,rr,dd[i]);
  62. r+=rr;
  63. index++;
  64. }
  65. }
  66. return r;
  67. }
  68. var zy_tmpl_s = function(t,dd,cb)
  69. {
  70. return t_f(t,dd,-1,-1,cb);
  71. }