template-syntax.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*!
  2. * artTemplate - Syntax Extensions
  3. * https://github.com/aui/artTemplate
  4. * Released under the MIT, BSD, and GPL Licenses
  5. */
  6. (function (exports) {
  7. exports.openTag = '{{';
  8. exports.closeTag = '}}';
  9. exports.parser = function (code) {
  10. code = code.replace(/^\s/, '');
  11. var split = code.split(' ');
  12. var key = split.shift();
  13. var args = split.join(' ');
  14. switch (key) {
  15. case 'var':
  16. code = 'var ' + args + ';';
  17. break;
  18. case 'if':
  19. code = 'if(' + args + '){';
  20. break;
  21. case 'else':
  22. if (split.shift() === 'if') {
  23. split = ' if(' + split.join(' ') + ')';
  24. } else {
  25. split = '';
  26. }
  27. code = '}else' + split + '{';
  28. break;
  29. case '/if':
  30. code = '}';
  31. break;
  32. case 'each':
  33. var object = split[0] || '$data';
  34. var as = split[1] || 'as';
  35. var value = split[2] || '$value';
  36. var index = split[3] || '$index';
  37. var param = value + ',' + index;
  38. if (as !== 'as') {
  39. object = '[]';
  40. }
  41. code = '$each(' + object + ',function(' + param + '){';
  42. break;
  43. case '/each':
  44. code = '});';
  45. break;
  46. case 'echo':
  47. code = 'print(' + args + ');'
  48. break;
  49. case 'include':
  50. code = 'include(' + split.join(',') + ');';
  51. break;
  52. default:
  53. if (exports.helpers.hasOwnProperty(key)) {
  54. code = '=#' + key + '(' + split.join(',') + ');';
  55. } else {
  56. code = code.replace(/[\s;]*$/, '');
  57. code = '=' + code;
  58. }
  59. break;
  60. }
  61. return code;
  62. };
  63. })(template);