params.tmpl 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. <?js
  2. var params = obj;
  3. /* sort subparams under their parent params (like opts.classname) */
  4. var parentParam = null;
  5. params.forEach(function(param, i) {
  6. var paramRegExp;
  7. if (!param) {
  8. return;
  9. }
  10. if (parentParam && parentParam.name && param.name) {
  11. try {
  12. paramRegExp = new RegExp('^(?:' + parentParam.name + '(?:\\[\\])*)\\.(.+)$');
  13. }
  14. catch (e) {
  15. console.error("Problem parsing comment", e);
  16. // there's probably a typo in the JSDoc comment that resulted in a weird
  17. // parameter name
  18. return;
  19. }
  20. if ( paramRegExp.test(param.name) ) {
  21. param.name = RegExp.$1;
  22. parentParam.subparams = parentParam.subparams || [];
  23. parentParam.subparams.push(param);
  24. params[i] = null;
  25. }
  26. else {
  27. parentParam = param;
  28. }
  29. }
  30. else {
  31. parentParam = param;
  32. }
  33. });
  34. /* determine if we need extra columns, "attributes" and "default" */
  35. params.hasAttributes = false;
  36. params.hasDefault = false;
  37. params.hasName = false;
  38. params.forEach(function(param) {
  39. if (!param) { return; }
  40. if (param.optional || param.nullable || param.variable) {
  41. params.hasAttributes = true;
  42. }
  43. if (param.name) {
  44. params.hasName = true;
  45. }
  46. if (typeof param.defaultvalue !== 'undefined') {
  47. params.hasDefault = true;
  48. }
  49. });
  50. ?>
  51. <table class="params">
  52. <thead>
  53. <tr>
  54. <?js if (params.hasName) {?>
  55. <th>Name</th>
  56. <?js } ?>
  57. <th>Type</th>
  58. <?js if (params.hasAttributes) {?>
  59. <th>Attributes</th>
  60. <?js } ?>
  61. <?js if (params.hasDefault) {?>
  62. <th>Default</th>
  63. <?js } ?>
  64. <th class="last">Description</th>
  65. </tr>
  66. </thead>
  67. <tbody>
  68. <?js
  69. var self = this;
  70. params.forEach(function(param) {
  71. if (!param) { return; }
  72. ?>
  73. <tr>
  74. <?js if (params.hasName) {?>
  75. <td class="name"><code><?js= param.name ?></code></td>
  76. <?js } ?>
  77. <td class="type">
  78. <?js if (param.type && param.type.names) {?>
  79. <?js= self.partial('type.tmpl', param.type.names) ?>
  80. <?js } ?>
  81. </td>
  82. <?js if (params.hasAttributes) {?>
  83. <td class="attributes">
  84. <?js if (param.optional) { ?>
  85. &lt;optional><br>
  86. <?js } ?>
  87. <?js if (param.nullable) { ?>
  88. &lt;nullable><br>
  89. <?js } ?>
  90. <?js if (param.variable) { ?>
  91. &lt;repeatable><br>
  92. <?js } ?>
  93. </td>
  94. <?js } ?>
  95. <?js if (params.hasDefault) {?>
  96. <td class="default">
  97. <?js if (typeof param.defaultvalue !== 'undefined') { ?>
  98. <code><?js= self.htmlsafe(param.defaultvalue) ?></code>
  99. <?js } ?>
  100. </td>
  101. <?js } ?>
  102. <td class="description last"><?js= param.description ?><?js if (param.subparams) { ?>
  103. <h6>Properties</h6>
  104. <?js= self.partial('params.tmpl', param.subparams) ?>
  105. <?js } ?></td>
  106. </tr>
  107. <?js }); ?>
  108. </tbody>
  109. </table>