outTemplate.js 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. class outwxml{
  2. constructor(option){
  3. const _ts = this;
  4. _ts.config = {};
  5. option = option || {};
  6. for(let i in option){
  7. _ts.config[i] = option[i];
  8. };
  9. let Towxml = require('./main');
  10. _ts.m = {
  11. fs:require('fs'),
  12. path:require('path'),
  13. towxml:new Towxml()
  14. };
  15. }
  16. init(){
  17. const _ts = this;
  18. _ts.outtag();
  19. let s = _ts.outwxml();
  20. _ts.m.fs.writeFileSync('./renderTemplate.wxml',s);
  21. }
  22. //输出tag
  23. outtag(id){
  24. const _ts = this;
  25. let s = '',
  26. attr = _ts.outattr(),
  27. wxmlTag = _ts.m.towxml.wxmlTag;
  28. wxmlTag.forEach((item,index)=>{
  29. let imgMode = ''
  30. if(item === 'image'){
  31. imgMode = 'mode="widthFix"';
  32. };
  33. s+= `
  34. <${item} wx:if="{{item.node === 'element' && item.tag === '${item}'}}" ${attr} ${imgMode}>
  35. <block wx:for="{{item.child}}" wx:key="{{item}}">
  36. <template is="m${id}" data="{{item}}"/>
  37. </block>
  38. </${item}>
  39. `;
  40. });
  41. return s;
  42. }
  43. //生成模版对应属性
  44. outattr(){
  45. const _ts = this;
  46. let s = '',
  47. attr = ['class','width','height','data','src','id','style'];
  48. attr.forEach((item,index)=>{
  49. if(item === 'class'){
  50. s += `${item}="{{item.attr.className}}"`;
  51. }else{
  52. s += `${item}="{{item.attr.${item}}}"`;
  53. };
  54. });
  55. return s;
  56. }
  57. //wxml模版生成
  58. outwxml(){
  59. const _ts = this;
  60. let s = '';
  61. for (let i = 0, len = _ts.config.depth; i<len; i++){
  62. let c = i < len - 1 ? i+1 : i;
  63. let temp = `<template name="m${i}"><block wx:if="{{item.node === 'text'}}">{{item.text}}</block>${_ts.outtag(c)}</template>`;
  64. // let temp = `<template name="m${i}">
  65. // <!--文字-->
  66. // <block wx:if="{{item.node === 'text'}}">
  67. // {{item.text}}
  68. // </block>
  69. // ${_ts.outtag(c)}
  70. // </template>
  71. // `;
  72. // let temp = `
  73. // <template name="m${i}">
  74. // <!--文字-->
  75. // <block wx:if="{{item.node === 'text'}}">
  76. // {{item.text}}
  77. // </block>
  78. // <!--视图-->
  79. // <view
  80. // wx:if="{{item.node === 'element' && item.tag === 'view'}}"
  81. // class="{{item.attr.class}}"
  82. // width="{{item.attr.width}}"
  83. // height="{{item.attr.height}}"
  84. // data="{{item.attr.data}}"
  85. // src="{{item.attr.src}}"
  86. // id="{{item.attr.id}}"
  87. // style="{{item.attr.style}}"
  88. // >
  89. // <block wx:for="{{item.child}}" wx:key="{{item}}">
  90. // <template is="m${c}" data="{{item}}"/>
  91. // </block>
  92. // </view>
  93. // <!--按钮-->
  94. // <button
  95. // wx:if="{{item.tag === 'button'}}"
  96. // class="{{item.attr.class}}"
  97. // width="{{item.attr.width}}"
  98. // height="{{item.attr.height}}"
  99. // data="{{item.attr.data}}"
  100. // src="{{item.attr.src}}"
  101. // id="{{item.attr.id}}"
  102. // style="{{item.attr.style}}"
  103. // >
  104. // <block wx:for="{{item.child}}" wx:key="{{item}}">
  105. // <template is="m${c}" data="{{item}}"/>
  106. // </block>
  107. // </button>
  108. // </template>
  109. // `;
  110. s+=temp;
  111. };
  112. return s;
  113. }
  114. };
  115. new outwxml({depth:10}).init();