jsduck 2.0.pre4 → 3.0.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (485) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +126 -34
  3. data/Rakefile +343 -115
  4. data/bin/jsduck +4 -196
  5. data/example.js +144 -0
  6. data/jsduck.gemspec +4 -9
  7. data/lib/jsduck/aggregator.rb +1 -1
  8. data/lib/jsduck/app.rb +165 -182
  9. data/lib/jsduck/categories.rb +17 -2
  10. data/lib/jsduck/class.rb +10 -0
  11. data/lib/jsduck/class_formatter.rb +77 -0
  12. data/lib/jsduck/doc_formatter.rb +42 -4
  13. data/lib/jsduck/doc_parser.rb +64 -10
  14. data/lib/jsduck/examples.rb +33 -0
  15. data/lib/jsduck/exporter.rb +18 -42
  16. data/lib/jsduck/guides.rb +41 -74
  17. data/lib/jsduck/icons.rb +28 -0
  18. data/lib/jsduck/js_literal_builder.rb +21 -0
  19. data/lib/jsduck/js_literal_parser.rb +106 -0
  20. data/lib/jsduck/js_parser.rb +115 -97
  21. data/lib/jsduck/json_duck.rb +45 -0
  22. data/lib/jsduck/lexer.rb +55 -25
  23. data/lib/jsduck/lint.rb +84 -0
  24. data/lib/jsduck/merger.rb +91 -21
  25. data/lib/jsduck/options.rb +320 -0
  26. data/lib/jsduck/relations.rb +7 -1
  27. data/lib/jsduck/renderer.rb +315 -0
  28. data/lib/jsduck/source_writer.rb +2 -2
  29. data/lib/jsduck/type_parser.rb +85 -0
  30. data/lib/jsduck/videos.rb +33 -0
  31. data/lib/jsduck/welcome.rb +21 -0
  32. data/{template → template-min}/README.md +0 -0
  33. data/template-min/app.js +1 -0
  34. data/template-min/build-js.html +25 -0
  35. data/template-min/egIframe.html +24 -0
  36. data/template-min/extjs/bootstrap.js +73 -0
  37. data/template-min/extjs/ext-all-debug.js +90047 -0
  38. data/{template → template-min}/extjs/ext-all.js +0 -0
  39. data/template-min/extjs/resources/css/ext-all.css +1 -0
  40. data/template-min/extjs/resources/themes/images/default/boundlist/trigger-arrow.png +0 -0
  41. data/template-min/extjs/resources/themes/images/default/box/corners-blue.gif +0 -0
  42. data/template-min/extjs/resources/themes/images/default/box/corners.gif +0 -0
  43. data/template-min/extjs/resources/themes/images/default/box/l-blue.gif +0 -0
  44. data/template-min/extjs/resources/themes/images/default/box/l.gif +0 -0
  45. data/template-min/extjs/resources/themes/images/default/box/r-blue.gif +0 -0
  46. data/template-min/extjs/resources/themes/images/default/box/r.gif +0 -0
  47. data/template-min/extjs/resources/themes/images/default/box/tb-blue.gif +0 -0
  48. data/template-min/extjs/resources/themes/images/default/box/tb.gif +0 -0
  49. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-bg.gif +0 -0
  50. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-corners.gif +0 -0
  51. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-bg.gif +0 -0
  52. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-corners.gif +0 -0
  53. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-sides.gif +0 -0
  54. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-bg.gif +0 -0
  55. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-corners.gif +0 -0
  56. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-sides.gif +0 -0
  57. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-bg.gif +0 -0
  58. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-corners.gif +0 -0
  59. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-sides.gif +0 -0
  60. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-bg.gif +0 -0
  61. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-corners.gif +0 -0
  62. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-sides.gif +0 -0
  63. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-sides.gif +0 -0
  64. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-bg.gif +0 -0
  65. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-corners.gif +0 -0
  66. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-bg.gif +0 -0
  67. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-corners.gif +0 -0
  68. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-sides.gif +0 -0
  69. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-bg.gif +0 -0
  70. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-corners.gif +0 -0
  71. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-sides.gif +0 -0
  72. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-bg.gif +0 -0
  73. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-corners.gif +0 -0
  74. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-sides.gif +0 -0
  75. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-bg.gif +0 -0
  76. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-corners.gif +0 -0
  77. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-sides.gif +0 -0
  78. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-sides.gif +0 -0
  79. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-bg.gif +0 -0
  80. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-corners.gif +0 -0
  81. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-bg.gif +0 -0
  82. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-corners.gif +0 -0
  83. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-sides.gif +0 -0
  84. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-bg.gif +0 -0
  85. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-corners.gif +0 -0
  86. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-sides.gif +0 -0
  87. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-bg.gif +0 -0
  88. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-corners.gif +0 -0
  89. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-sides.gif +0 -0
  90. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-bg.gif +0 -0
  91. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-corners.gif +0 -0
  92. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-sides.gif +0 -0
  93. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-sides.gif +0 -0
  94. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-corners.gif +0 -0
  95. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-corners.gif +0 -0
  96. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-sides.gif +0 -0
  97. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-bg.gif +0 -0
  98. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-corners.gif +0 -0
  99. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-sides.gif +0 -0
  100. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-bg.gif +0 -0
  101. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-corners.gif +0 -0
  102. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-sides.gif +0 -0
  103. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-bg.gif +0 -0
  104. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-corners.gif +0 -0
  105. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-sides.gif +0 -0
  106. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-sides.gif +0 -0
  107. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-corners.gif +0 -0
  108. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-corners.gif +0 -0
  109. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-sides.gif +0 -0
  110. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-bg.gif +0 -0
  111. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-corners.gif +0 -0
  112. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-sides.gif +0 -0
  113. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-bg.gif +0 -0
  114. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-corners.gif +0 -0
  115. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-sides.gif +0 -0
  116. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-bg.gif +0 -0
  117. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-corners.gif +0 -0
  118. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-sides.gif +0 -0
  119. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-sides.gif +0 -0
  120. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-corners.gif +0 -0
  121. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-corners.gif +0 -0
  122. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-sides.gif +0 -0
  123. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-bg.gif +0 -0
  124. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-corners.gif +0 -0
  125. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-sides.gif +0 -0
  126. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-bg.gif +0 -0
  127. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-corners.gif +0 -0
  128. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-sides.gif +0 -0
  129. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-bg.gif +0 -0
  130. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-corners.gif +0 -0
  131. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-sides.gif +0 -0
  132. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-sides.gif +0 -0
  133. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-corners.gif +0 -0
  134. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-corners.gif +0 -0
  135. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-sides.gif +0 -0
  136. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-sides.gif +0 -0
  137. data/template-min/extjs/resources/themes/images/default/button/arrow.gif +0 -0
  138. data/template-min/extjs/resources/themes/images/default/button/btn.gif +0 -0
  139. data/template-min/extjs/resources/themes/images/default/button/group-cs.gif +0 -0
  140. data/template-min/extjs/resources/themes/images/default/button/group-lr.gif +0 -0
  141. data/template-min/extjs/resources/themes/images/default/button/group-tb.gif +0 -0
  142. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b-noline.gif +0 -0
  143. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b.gif +0 -0
  144. data/template-min/extjs/resources/themes/images/default/button/s-arrow-bo.gif +0 -0
  145. data/template-min/extjs/resources/themes/images/default/button/s-arrow-light.gif +0 -0
  146. data/template-min/extjs/resources/themes/images/default/button/s-arrow-noline.gif +0 -0
  147. data/template-min/extjs/resources/themes/images/default/button/s-arrow-o.gif +0 -0
  148. data/template-min/extjs/resources/themes/images/default/button/s-arrow.gif +0 -0
  149. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.gif +0 -0
  150. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.png +0 -0
  151. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.gif +0 -0
  152. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.png +0 -0
  153. data/template-min/extjs/resources/themes/images/default/dd/drop-add.gif +0 -0
  154. data/template-min/extjs/resources/themes/images/default/dd/drop-no.gif +0 -0
  155. data/template-min/extjs/resources/themes/images/default/dd/drop-yes.gif +0 -0
  156. data/template-min/extjs/resources/themes/images/default/editor/tb-sprite.gif +0 -0
  157. data/{template → template-min}/extjs/resources/themes/images/default/form/checkbox.gif +0 -0
  158. data/template-min/extjs/resources/themes/images/default/form/clear-trigger.gif +0 -0
  159. data/template-min/extjs/resources/themes/images/default/form/date-trigger.gif +0 -0
  160. data/template-min/extjs/resources/themes/images/default/form/error-tip-corners.gif +0 -0
  161. data/template-min/extjs/resources/themes/images/default/form/exclamation.gif +0 -0
  162. data/template-min/extjs/resources/themes/images/default/form/radio.gif +0 -0
  163. data/template-min/extjs/resources/themes/images/default/form/search-trigger.gif +0 -0
  164. data/template-min/extjs/resources/themes/images/default/form/spinner-small.gif +0 -0
  165. data/template-min/extjs/resources/themes/images/default/form/spinner.gif +0 -0
  166. data/{template → template-min}/extjs/resources/themes/images/default/form/text-bg.gif +0 -0
  167. data/template-min/extjs/resources/themes/images/default/form/trigger-square.gif +0 -0
  168. data/template-min/extjs/resources/themes/images/default/form/trigger-tpl.gif +0 -0
  169. data/template-min/extjs/resources/themes/images/default/form/trigger.gif +0 -0
  170. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-corners.gif +0 -0
  171. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-sides.gif +0 -0
  172. data/template-min/extjs/resources/themes/images/default/grid/arrow-left-white.gif +0 -0
  173. data/template-min/extjs/resources/themes/images/default/grid/arrow-right-white.gif +0 -0
  174. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.gif +0 -0
  175. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.png +0 -0
  176. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.gif +0 -0
  177. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.png +0 -0
  178. data/template-min/extjs/resources/themes/images/default/grid/checked.gif +0 -0
  179. data/template-min/extjs/resources/themes/images/default/grid/col-move-bottom.gif +0 -0
  180. data/template-min/extjs/resources/themes/images/default/grid/col-move-top.gif +0 -0
  181. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.gif +0 -0
  182. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.png +0 -0
  183. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.gif +0 -0
  184. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.png +0 -0
  185. data/template-min/extjs/resources/themes/images/default/grid/columns.gif +0 -0
  186. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.gif +0 -0
  187. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.png +0 -0
  188. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.gif +0 -0
  189. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.png +0 -0
  190. data/template-min/extjs/resources/themes/images/default/grid/dirty.gif +0 -0
  191. data/template-min/extjs/resources/themes/images/default/grid/done.gif +0 -0
  192. data/template-min/extjs/resources/themes/images/default/grid/drop-no.gif +0 -0
  193. data/template-min/extjs/resources/themes/images/default/grid/drop-yes.gif +0 -0
  194. data/template-min/extjs/resources/themes/images/default/grid/footer-bg.gif +0 -0
  195. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-hd.gif +0 -0
  196. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-split.gif +0 -0
  197. data/template-min/extjs/resources/themes/images/default/grid/grid-hrow.gif +0 -0
  198. data/template-min/extjs/resources/themes/images/default/grid/grid-loading.gif +0 -0
  199. data/template-min/extjs/resources/themes/images/default/grid/grid-split.gif +0 -0
  200. data/template-min/extjs/resources/themes/images/default/grid/grid-vista-hd.gif +0 -0
  201. data/template-min/extjs/resources/themes/images/default/grid/grid3-hd-btn.gif +0 -0
  202. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow-over.gif +0 -0
  203. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow.gif +0 -0
  204. data/template-min/extjs/resources/themes/images/default/grid/grid3-rowheader.gif +0 -0
  205. data/template-min/extjs/resources/themes/images/default/grid/group-by.gif +0 -0
  206. data/template-min/extjs/resources/themes/images/default/grid/group-collapse.gif +0 -0
  207. data/template-min/extjs/resources/themes/images/default/grid/group-expand-sprite.gif +0 -0
  208. data/template-min/extjs/resources/themes/images/default/grid/group-expand.gif +0 -0
  209. data/template-min/extjs/resources/themes/images/default/grid/hd-pop.gif +0 -0
  210. data/template-min/extjs/resources/themes/images/default/grid/hmenu-asc.gif +0 -0
  211. data/template-min/extjs/resources/themes/images/default/grid/hmenu-desc.gif +0 -0
  212. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.gif +0 -0
  213. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.png +0 -0
  214. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.gif +0 -0
  215. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.png +0 -0
  216. data/template-min/extjs/resources/themes/images/default/grid/invalid_line.gif +0 -0
  217. data/{template → template-min}/extjs/resources/themes/images/default/grid/loading.gif +0 -0
  218. data/template-min/extjs/resources/themes/images/default/grid/mso-hd.gif +0 -0
  219. data/template-min/extjs/resources/themes/images/default/grid/nowait.gif +0 -0
  220. data/template-min/extjs/resources/themes/images/default/grid/page-first-disabled.gif +0 -0
  221. data/template-min/extjs/resources/themes/images/default/grid/page-first.gif +0 -0
  222. data/template-min/extjs/resources/themes/images/default/grid/page-last-disabled.gif +0 -0
  223. data/template-min/extjs/resources/themes/images/default/grid/page-last.gif +0 -0
  224. data/template-min/extjs/resources/themes/images/default/grid/page-next-disabled.gif +0 -0
  225. data/template-min/extjs/resources/themes/images/default/grid/page-next.gif +0 -0
  226. data/template-min/extjs/resources/themes/images/default/grid/page-prev-disabled.gif +0 -0
  227. data/template-min/extjs/resources/themes/images/default/grid/page-prev.gif +0 -0
  228. data/template-min/extjs/resources/themes/images/default/grid/pick-button.gif +0 -0
  229. data/template-min/extjs/resources/themes/images/default/grid/property-cell-bg.gif +0 -0
  230. data/template-min/extjs/resources/themes/images/default/grid/property-cell-selected-bg.gif +0 -0
  231. data/template-min/extjs/resources/themes/images/default/grid/refresh-disabled.gif +0 -0
  232. data/template-min/extjs/resources/themes/images/default/grid/refresh.gif +0 -0
  233. data/template-min/extjs/resources/themes/images/default/grid/row-check-sprite.gif +0 -0
  234. data/template-min/extjs/resources/themes/images/default/grid/row-expand-sprite.gif +0 -0
  235. data/template-min/extjs/resources/themes/images/default/grid/row-over.gif +0 -0
  236. data/template-min/extjs/resources/themes/images/default/grid/row-sel.gif +0 -0
  237. data/template-min/extjs/resources/themes/images/default/grid/sort-hd.gif +0 -0
  238. data/template-min/extjs/resources/themes/images/default/grid/sort_asc.gif +0 -0
  239. data/template-min/extjs/resources/themes/images/default/grid/sort_desc.gif +0 -0
  240. data/template-min/extjs/resources/themes/images/default/grid/unchecked.gif +0 -0
  241. data/template-min/extjs/resources/themes/images/default/grid/wait.gif +0 -0
  242. data/template-min/extjs/resources/themes/images/default/layout/mini-bottom.gif +0 -0
  243. data/template-min/extjs/resources/themes/images/default/layout/mini-left.gif +0 -0
  244. data/template-min/extjs/resources/themes/images/default/layout/mini-right.gif +0 -0
  245. data/template-min/extjs/resources/themes/images/default/layout/mini-top.gif +0 -0
  246. data/template-min/extjs/resources/themes/images/default/menu/checked.gif +0 -0
  247. data/template-min/extjs/resources/themes/images/default/menu/group-checked.gif +0 -0
  248. data/template-min/extjs/resources/themes/images/default/menu/item-over.gif +0 -0
  249. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-bg.gif +0 -0
  250. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-corners.gif +0 -0
  251. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-sides.gif +0 -0
  252. data/template-min/extjs/resources/themes/images/default/menu/menu-parent.gif +0 -0
  253. data/template-min/extjs/resources/themes/images/default/menu/menu.gif +0 -0
  254. data/template-min/extjs/resources/themes/images/default/menu/unchecked.gif +0 -0
  255. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-corners.gif +0 -0
  256. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-sides.gif +0 -0
  257. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-bottom-bg.gif +0 -0
  258. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-bg.gif +0 -0
  259. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-corners.gif +0 -0
  260. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-sides.gif +0 -0
  261. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif +0 -0
  262. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif +0 -0
  263. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif +0 -0
  264. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-bg.gif +0 -0
  265. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-corners.gif +0 -0
  266. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-sides.gif +0 -0
  267. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-bg.gif +0 -0
  268. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-corners.gif +0 -0
  269. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-sides.gif +0 -0
  270. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-bg.gif +0 -0
  271. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-corners.gif +0 -0
  272. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-sides.gif +0 -0
  273. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-bg.gif +0 -0
  274. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-corners.gif +0 -0
  275. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-sides.gif +0 -0
  276. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-bg.gif +0 -0
  277. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-corners.gif +0 -0
  278. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-sides.gif +0 -0
  279. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-bg.gif +0 -0
  280. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-corners.gif +0 -0
  281. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-sides.gif +0 -0
  282. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-left-bg.gif +0 -0
  283. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-right-bg.gif +0 -0
  284. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-top-bg.gif +0 -0
  285. data/template-min/extjs/resources/themes/images/default/progress/progress-default-bg.gif +0 -0
  286. data/template-min/extjs/resources/themes/images/default/shared/blue-loading.gif +0 -0
  287. data/template-min/extjs/resources/themes/images/default/shared/calendar.gif +0 -0
  288. data/template-min/extjs/resources/themes/images/default/shared/glass-bg.gif +0 -0
  289. data/template-min/extjs/resources/themes/images/default/shared/hd-sprite.gif +0 -0
  290. data/template-min/extjs/resources/themes/images/default/shared/icon-error.gif +0 -0
  291. data/template-min/extjs/resources/themes/images/default/shared/icon-info.gif +0 -0
  292. data/template-min/extjs/resources/themes/images/default/shared/icon-question.gif +0 -0
  293. data/template-min/extjs/resources/themes/images/default/shared/icon-warning.gif +0 -0
  294. data/template-min/extjs/resources/themes/images/default/shared/large-loading.gif +0 -0
  295. data/template-min/extjs/resources/themes/images/default/shared/left-btn.gif +0 -0
  296. data/template-min/extjs/resources/themes/images/default/shared/loading-balls.gif +0 -0
  297. data/template-min/extjs/resources/themes/images/default/shared/right-btn.gif +0 -0
  298. data/template-min/extjs/resources/themes/images/default/shared/shadow-c.png +0 -0
  299. data/template-min/extjs/resources/themes/images/default/shared/shadow-lr.png +0 -0
  300. data/template-min/extjs/resources/themes/images/default/shared/shadow.png +0 -0
  301. data/template-min/extjs/resources/themes/images/default/shared/warning.gif +0 -0
  302. data/template-min/extjs/resources/themes/images/default/sizer/e-handle-dark.gif +0 -0
  303. data/template-min/extjs/resources/themes/images/default/sizer/e-handle.gif +0 -0
  304. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle-dark.gif +0 -0
  305. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle.gif +0 -0
  306. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle-dark.gif +0 -0
  307. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle.gif +0 -0
  308. data/template-min/extjs/resources/themes/images/default/sizer/s-handle-dark.gif +0 -0
  309. data/template-min/extjs/resources/themes/images/default/sizer/s-handle.gif +0 -0
  310. data/template-min/extjs/resources/themes/images/default/sizer/se-handle-dark.gif +0 -0
  311. data/template-min/extjs/resources/themes/images/default/sizer/se-handle.gif +0 -0
  312. data/template-min/extjs/resources/themes/images/default/sizer/square.gif +0 -0
  313. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle-dark.gif +0 -0
  314. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle.gif +0 -0
  315. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.gif +0 -0
  316. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.png +0 -0
  317. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.gif +0 -0
  318. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.png +0 -0
  319. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.gif +0 -0
  320. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.png +0 -0
  321. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.gif +0 -0
  322. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.png +0 -0
  323. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-bg.gif +0 -0
  324. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-corners.gif +0 -0
  325. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-sides.gif +0 -0
  326. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-bg.gif +0 -0
  327. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-corners.gif +0 -0
  328. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-bg.gif +0 -0
  329. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-corners.gif +0 -0
  330. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-sides.gif +0 -0
  331. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-bg.gif +0 -0
  332. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-corners.gif +0 -0
  333. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-sides.gif +0 -0
  334. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-sides.gif +0 -0
  335. data/template-min/extjs/resources/themes/images/default/tab/tab-default-close.gif +0 -0
  336. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-bg.gif +0 -0
  337. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-corners.gif +0 -0
  338. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-sides.gif +0 -0
  339. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-bg.gif +0 -0
  340. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-corners.gif +0 -0
  341. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-bg.gif +0 -0
  342. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-corners.gif +0 -0
  343. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-sides.gif +0 -0
  344. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-bg.gif +0 -0
  345. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-corners.gif +0 -0
  346. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-sides.gif +0 -0
  347. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-sides.gif +0 -0
  348. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-left.gif +0 -0
  349. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-right.gif +0 -0
  350. data/template-min/extjs/resources/themes/images/default/tab-bar/tab-bar-default-bg.gif +0 -0
  351. data/template-min/extjs/resources/themes/images/default/tip/tip-corners.gif +0 -0
  352. data/template-min/extjs/resources/themes/images/default/tip/tip-sides.gif +0 -0
  353. data/template-min/extjs/resources/themes/images/default/toolbar/more.gif +0 -0
  354. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-left.gif +0 -0
  355. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-right.gif +0 -0
  356. data/template-min/extjs/resources/themes/images/default/toolbar/toolbar-default-bg.gif +0 -0
  357. data/template-min/extjs/resources/themes/images/default/tools/tool-sprite-tpl.gif +0 -0
  358. data/template-min/extjs/resources/themes/images/default/tools/tool-sprites.gif +0 -0
  359. data/template-min/extjs/resources/themes/images/default/tools/tools-sprites-trans.gif +0 -0
  360. data/{template → template-min}/extjs/resources/themes/images/default/tree/arrows.gif +0 -0
  361. data/template-min/extjs/resources/themes/images/default/tree/drop-above.gif +0 -0
  362. data/template-min/extjs/resources/themes/images/default/tree/drop-add.gif +0 -0
  363. data/template-min/extjs/resources/themes/images/default/tree/drop-append.gif +0 -0
  364. data/template-min/extjs/resources/themes/images/default/tree/drop-below.gif +0 -0
  365. data/template-min/extjs/resources/themes/images/default/tree/drop-between.gif +0 -0
  366. data/template-min/extjs/resources/themes/images/default/tree/drop-no.gif +0 -0
  367. data/template-min/extjs/resources/themes/images/default/tree/drop-over.gif +0 -0
  368. data/template-min/extjs/resources/themes/images/default/tree/drop-under.gif +0 -0
  369. data/template-min/extjs/resources/themes/images/default/tree/drop-yes.gif +0 -0
  370. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus-nl.gif +0 -0
  371. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus.gif +0 -0
  372. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus-nl.gif +0 -0
  373. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus.gif +0 -0
  374. data/{template/resources/images → template-min/extjs/resources/themes/images/default/tree}/elbow-end.gif +0 -0
  375. data/template-min/extjs/resources/themes/images/default/tree/elbow-line.gif +0 -0
  376. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus-nl.gif +0 -0
  377. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus.gif +0 -0
  378. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus-nl.gif +0 -0
  379. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus.gif +0 -0
  380. data/template-min/extjs/resources/themes/images/default/tree/elbow.gif +0 -0
  381. data/template-min/extjs/resources/themes/images/default/tree/folder-open.gif +0 -0
  382. data/template-min/extjs/resources/themes/images/default/tree/folder.gif +0 -0
  383. data/template-min/extjs/resources/themes/images/default/tree/leaf.gif +0 -0
  384. data/template-min/extjs/resources/themes/images/default/tree/loading.gif +0 -0
  385. data/template-min/extjs/resources/themes/images/default/tree/s.gif +0 -0
  386. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-bottom.gif +0 -0
  387. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-left.gif +0 -0
  388. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-right.gif +0 -0
  389. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-top.gif +0 -0
  390. data/template-min/extjs/resources/themes/images/default/window/window-default-corners.gif +0 -0
  391. data/template-min/extjs/resources/themes/images/default/window/window-default-sides.gif +0 -0
  392. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-corners.gif +0 -0
  393. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-sides.gif +0 -0
  394. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-corners.gif +0 -0
  395. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-sides.gif +0 -0
  396. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-corners.gif +0 -0
  397. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-sides.gif +0 -0
  398. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-corners.gif +0 -0
  399. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-sides.gif +0 -0
  400. data/{template → template-min}/favicon.ico +0 -0
  401. data/template-min/index.php +59 -0
  402. data/template-min/print-template.html +22 -0
  403. data/template-min/resources/css/app.css +1 -0
  404. data/template-min/resources/images/arrows.png +0 -0
  405. data/{template → template-min}/resources/images/class-m.png +0 -0
  406. data/{template → template-min}/resources/images/class-sm.png +0 -0
  407. data/{template → template-min}/resources/images/component-m.png +0 -0
  408. data/{template → template-min}/resources/images/configs.png +0 -0
  409. data/{template → template-min}/resources/images/doc-m.png +0 -0
  410. data/template-min/resources/images/elbow-end.gif +0 -0
  411. data/{template → template-min}/resources/images/events.png +0 -0
  412. data/template-min/resources/images/example-icons.png +0 -0
  413. data/{template → template-min}/resources/images/expandcollapse.png +0 -0
  414. data/{template → template-min}/resources/images/guide-icon.png +0 -0
  415. data/{template → template-min}/resources/images/guides.png +0 -0
  416. data/template-min/resources/images/header.png +0 -0
  417. data/template-min/resources/images/hero-extjs4-alt.png +0 -0
  418. data/template-min/resources/images/icons.png +0 -0
  419. data/template-min/resources/images/link-green-standard-over.png +0 -0
  420. data/template-min/resources/images/link-green-standard.png +0 -0
  421. data/{template → template-min}/resources/images/loading-title.png +0 -0
  422. data/{template → template-min}/resources/images/loading.gif +0 -0
  423. data/template-min/resources/images/logo-screen-noglow.png +0 -0
  424. data/template-min/resources/images/logo.png +0 -0
  425. data/{template → template-min}/resources/images/member-collapsed.gif +0 -0
  426. data/{template → template-min}/resources/images/member-expanded.gif +0 -0
  427. data/{template → template-min}/resources/images/member-hover.gif +0 -0
  428. data/{template → template-min}/resources/images/methods.png +0 -0
  429. data/template-min/resources/images/more.png +0 -0
  430. data/template-min/resources/images/preview.png +0 -0
  431. data/template-min/resources/images/print.png +0 -0
  432. data/{template → template-min}/resources/images/properties.png +0 -0
  433. data/template-min/resources/images/search-box.png +0 -0
  434. data/{template → template-min}/resources/images/singleton-m.png +0 -0
  435. data/template-min/resources/images/tabs.png +0 -0
  436. data/{template → template-min}/resources/images/version-tabs.png +0 -0
  437. data/template-min/resources/images/welcome-bg-js4.gif +0 -0
  438. data/{template → template-min}/resources/images/x.png +0 -0
  439. data/{template → template-min}/resources/images/x12.png +0 -0
  440. data/template-min/resources/images/x122.png +0 -0
  441. data/{template/index.html → template-min/template.html} +9 -14
  442. data/template-min/welcome.html +78 -0
  443. metadata +429 -76
  444. data/lib/jsduck/jsonp.rb +0 -17
  445. data/lib/jsduck/tree.rb +0 -117
  446. data/lib/jsduck/tree_icons.rb +0 -19
  447. data/template/app/Application.js +0 -53
  448. data/template/app/Favorites.js +0 -88
  449. data/template/app/History.js +0 -45
  450. data/template/app/LocalStore.js +0 -45
  451. data/template/app/Settings.js +0 -39
  452. data/template/app/Syntax.js +0 -20
  453. data/template/app/controller/Classes.js +0 -301
  454. data/template/app/controller/Search.js +0 -189
  455. data/template/app/model/Favorite.js +0 -11
  456. data/template/app/model/Setting.js +0 -11
  457. data/template/app/store/Favorites.js +0 -7
  458. data/template/app/store/Search.js +0 -14
  459. data/template/app/store/Settings.js +0 -7
  460. data/template/app/view/ClassGrid.js +0 -114
  461. data/template/app/view/HoverMenu.js +0 -59
  462. data/template/app/view/HoverMenuButton.js +0 -147
  463. data/template/app/view/Viewport.js +0 -240
  464. data/template/app/view/cls/Header.js +0 -47
  465. data/template/app/view/cls/Overview.js +0 -415
  466. data/template/app/view/cls/Toolbar.js +0 -199
  467. data/template/app/view/index/Container.js +0 -62
  468. data/template/app/view/search/Dropdown.js +0 -115
  469. data/template/app/view/tree/Tree.js +0 -143
  470. data/template/app.js +0 -25
  471. data/template/prettify/prettify.css +0 -1
  472. data/template/prettify/prettify.js +0 -28
  473. data/template/resources/css/docs-ext.css +0 -3594
  474. data/template/resources/css/reset.css +0 -59
  475. data/template/resources/css/scrollbars.css +0 -14
  476. data/template/resources/css/viewport.css +0 -420
  477. data/template/resources/images/data-package.png +0 -0
  478. data/template/resources/images/drag-bar-center.png +0 -0
  479. data/template/resources/images/headBG.png +0 -0
  480. data/template/resources/images/header.gif +0 -0
  481. data/template/resources/images/icon.png +0 -0
  482. data/template/resources/images/icons.png +0 -0
  483. data/template/resources/images/model.png +0 -0
  484. data/template/resources/images/root-lines.png +0 -0
  485. data/template/resources/images/search-box.png +0 -0
data/lib/jsduck/app.rb CHANGED
@@ -3,136 +3,108 @@ require 'jsduck/aggregator'
3
3
  require 'jsduck/source_file'
4
4
  require 'jsduck/source_writer'
5
5
  require 'jsduck/doc_formatter'
6
+ require 'jsduck/class_formatter'
6
7
  require 'jsduck/class'
7
- require 'jsduck/tree'
8
- require 'jsduck/tree_icons'
8
+ require 'jsduck/icons'
9
9
  require 'jsduck/search_data'
10
10
  require 'jsduck/relations'
11
11
  require 'jsduck/aliases'
12
12
  require 'jsduck/exporter'
13
+ require 'jsduck/renderer'
13
14
  require 'jsduck/timer'
14
15
  require 'jsduck/parallel_wrap'
15
16
  require 'jsduck/logger'
17
+ require 'jsduck/welcome'
16
18
  require 'jsduck/guides'
19
+ require 'jsduck/videos'
20
+ require 'jsduck/examples'
17
21
  require 'jsduck/categories'
18
- require 'jsduck/jsonp'
19
- require 'json'
22
+ require 'jsduck/json_duck'
23
+ require 'jsduck/lint'
20
24
  require 'fileutils'
21
25
 
22
26
  module JsDuck
23
27
 
24
28
  # The main application logic of jsduck
25
29
  class App
26
- # These are basically input parameters for app
27
- attr_accessor :output_dir
28
- attr_accessor :template_dir
29
- attr_accessor :guides_dir
30
- attr_accessor :guides_order
31
- attr_accessor :categories_path
32
- attr_accessor :template_links
33
- attr_accessor :input_files
34
- attr_accessor :export
35
- attr_accessor :link_tpl
36
- attr_accessor :img_tpl
37
- attr_accessor :ignore_global
38
- attr_accessor :external_classes
39
- attr_accessor :show_private_classes
40
- attr_accessor :title
41
- attr_accessor :footer
42
- attr_accessor :extjs_path
43
- attr_accessor :local_storage_db
44
- attr_accessor :head_html
45
- attr_accessor :body_html
46
-
47
- def initialize
48
- @output_dir = nil
49
- @template_dir = nil
50
- @guides_dir = nil
51
- @guides_order = nil
52
- @categories_path = nil
53
- @template_links = false
54
- @input_files = []
55
- @warnings = true
56
- @export = nil
57
- @link_tpl = nil
58
- @img_tpl = nil
59
- @ignore_global = false
60
- @external_classes = []
61
- @show_private_classes = false
62
- @title = "Ext JS API Documentation"
63
- @footer = 'Generated with <a href="https://github.com/senchalabs/jsduck">JSDuck</a>.'
64
- @extjs_path = "extjs/ext-all.js"
65
- @local_storage_db = "docs"
66
- @head_html = ""
67
- @body_html = ""
30
+ # Initializes app with JsDuck::Options object
31
+ def initialize(opts)
32
+ @opts = opts
68
33
  @timer = Timer.new
69
- @parallel = ParallelWrap.new
70
- end
71
-
72
- # Sets the nr of parallel processes to use.
73
- # Set to 0 to disable parallelization completely.
74
- def processes=(count)
75
- @parallel = ParallelWrap.new(:in_processes => count)
76
- end
77
-
78
- # Sets warnings on or off
79
- def warnings=(enabled)
80
- Logger.instance.warnings = enabled
81
- end
82
-
83
- # Sets verbose mode on or off
84
- def verbose=(enabled)
85
- Logger.instance.verbose = enabled
34
+ # Sets the nr of parallel processes to use.
35
+ # Set to 0 to disable parallelization completely.
36
+ @parallel = ParallelWrap.new(:in_processes => @opts.processes)
37
+ # Sets warnings and verbose mode on or off
38
+ Logger.instance.warnings = @opts.warnings
39
+ Logger.instance.verbose = @opts.verbose
40
+ # Turn JSON pretty-printing on/off
41
+ JsonDuck.pretty = @opts.pretty_json
86
42
  end
87
43
 
88
44
  # Call this after input parameters set
89
45
  def run
90
- # Set default templates
91
- @link_tpl ||= '<a href="#/api/%c%-%m" rel="%c%-%m" class="docClass">%a</a>'
92
- # Note that we wrap image template inside <p> because {@img} often
93
- # appears inline within text, but that just looks ugly in HTML
94
- @img_tpl ||= '<p><img src="doc-resources/%u" alt="%a"></p>'
95
-
96
- parsed_files = @timer.time(:parsing) { parallel_parse(@input_files) }
46
+ parsed_files = @timer.time(:parsing) { parallel_parse(@opts.input_files) }
97
47
  result = @timer.time(:aggregating) { aggregate(parsed_files) }
98
- relations = @timer.time(:aggregating) { filter_classes(result) }
99
- Aliases.new(relations).resolve_all
100
- warn_globals(relations)
101
- warn_unnamed(relations)
48
+ @relations = @timer.time(:aggregating) { filter_classes(result) }
49
+ Aliases.new(@relations).resolve_all
50
+ Lint.new(@relations).run
102
51
 
103
- @guides = Guides.new(get_doc_formatter(relations), @guides_order)
104
- if @guides_dir
105
- @timer.time(:parsing) { @guides.parse_dir(@guides_dir) }
52
+ @welcome = Welcome.new
53
+ if @opts.welcome
54
+ @timer.time(:parsing) { @welcome.parse(@opts.welcome) }
106
55
  end
107
56
 
108
- @categories = Categories.new(get_doc_formatter(relations), relations)
109
- if @categories_path
57
+ @guides = Guides.new(get_doc_formatter)
58
+ if @opts.guides
59
+ @timer.time(:parsing) { @guides.parse(@opts.guides) }
60
+ end
61
+
62
+ @videos = Videos.new
63
+ if @opts.videos
64
+ @timer.time(:parsing) { @videos.parse(@opts.videos) }
65
+ end
66
+
67
+ @examples = Examples.new
68
+ if @opts.examples
69
+ @timer.time(:parsing) { @examples.parse(@opts.examples) }
70
+ end
71
+
72
+ @categories = Categories.new(get_doc_formatter, @relations)
73
+ if @opts.categories_path
110
74
  @timer.time(:parsing) do
111
- @categories.parse(@categories_path)
75
+ @categories.parse(@opts.categories_path)
112
76
  @categories.validate
113
77
  end
114
78
  end
115
79
 
116
- clear_dir(@output_dir) unless @export == :stdout
117
- if @export == :stdout
118
- @timer.time(:generating) { puts JSON.generate(relations.classes) }
119
- elsif @export == :json
120
- FileUtils.mkdir(@output_dir)
121
- init_output_dirs(@output_dir)
122
- @timer.time(:generating) { write_src(@output_dir+"/source", parsed_files) }
123
- @timer.time(:generating) { write_classes(@output_dir+"/output", relations) }
80
+ clear_output_dir unless @opts.export == :stdout
81
+ if @opts.export == :stdout
82
+ @timer.time(:generating) { puts JsonDuck.generate(@relations.classes) }
83
+ elsif @opts.export == :json
84
+ FileUtils.mkdir(@opts.output_dir)
85
+ init_output_dirs
86
+ @timer.time(:generating) { write_src(parsed_files) }
87
+ @timer.time(:generating) { format_classes }
88
+ @timer.time(:generating) { write_classes }
124
89
  else
125
- if @template_links
126
- link_template(@template_dir, @output_dir)
90
+ if @opts.template_links
91
+ link_template
127
92
  else
128
- copy_template(@template_dir, @output_dir)
93
+ copy_template
94
+ end
95
+ create_template_html
96
+ create_print_template_html
97
+ if !@opts.seo
98
+ FileUtils.rm(@opts.output_dir+"/index.php")
99
+ FileUtils.cp(@opts.output_dir+"/template.html", @opts.output_dir+"/index.html")
129
100
  end
130
- create_index_html(@template_dir, @output_dir)
131
- @timer.time(:generating) { write_src(@output_dir+"/source", parsed_files) }
132
- @timer.time(:generating) { write_tree(@output_dir+"/output/tree.js", relations) }
133
- @timer.time(:generating) { write_search_data(@output_dir+"/output/searchData.js", relations) }
134
- @timer.time(:generating) { write_classes(@output_dir+"/output", relations) }
135
- @timer.time(:generating) { @guides.write(@output_dir+"/guides") }
101
+ @timer.time(:generating) { write_src(parsed_files) }
102
+ @timer.time(:generating) { format_classes }
103
+ @timer.time(:generating) { write_app_data }
104
+ @timer.time(:generating) { write_classes }
105
+ @timer.time(:generating) { @guides.write(@opts.output_dir+"/guides") }
106
+ @timer.time(:generating) { @videos.write(@opts.output_dir+"/videos") }
107
+ @timer.time(:generating) { @examples.write(@opts.output_dir+"/examples") }
136
108
  end
137
109
 
138
110
  @timer.report
@@ -154,7 +126,7 @@ module JsDuck
154
126
  agr.aggregate(file)
155
127
  end
156
128
  agr.classify_orphans
157
- agr.create_global_class unless @ignore_global
129
+ agr.create_global_class unless @opts.ignore_global
158
130
  agr.append_ext4_event_options
159
131
  agr.result
160
132
  end
@@ -165,7 +137,7 @@ module JsDuck
165
137
  classes = []
166
138
  docs.each do |d|
167
139
  if d[:tagname] == :class
168
- classes << Class.new(d) if !d[:private] || @show_private_classes
140
+ classes << Class.new(d)
169
141
  else
170
142
  type = d[:tagname].to_s
171
143
  name = d[:name]
@@ -174,69 +146,57 @@ module JsDuck
174
146
  Logger.instance.warn("Ignoring #{type}: #{name} in #{file} line #{line}")
175
147
  end
176
148
  end
177
- Relations.new(classes, @external_classes)
149
+ Relations.new(classes, @opts.external_classes)
178
150
  end
179
151
 
180
- # print warning for each global member
181
- def warn_globals(relations)
182
- global = relations["global"]
183
- return unless global
184
- global[:members].each_key do |type|
185
- global.members(type).each do |member|
186
- name = member[:name]
187
- file = member[:filename]
188
- line = member[:linenr]
189
- Logger.instance.warn("Global #{type}: #{name} in #{file} line #{line}")
190
- end
152
+ # Formats each class
153
+ def format_classes
154
+ formatter = ClassFormatter.new(@relations, get_doc_formatter)
155
+ # Don't format types when exporting
156
+ formatter.include_types = !@opts.export
157
+ # Format all doc-objects in parallel
158
+ formatted_docs = @parallel.map(@relations.classes) do |cls|
159
+ formatter.format(cls.internal_doc)
191
160
  end
192
- end
193
-
194
- # print warning for each member with no name
195
- def warn_unnamed(relations)
196
- relations.each do |cls|
197
- cls[:members].each_pair do |type, members|
198
- members.each do |member|
199
- if !member[:name] || member[:name] == ""
200
- file = member[:filename]
201
- line = member[:linenr]
202
- Logger.instance.warn("Unnamed #{type} in #{file} line #{line}")
203
- end
204
- end
205
- end
161
+ # Then merge the data back to classes sequentially
162
+ formatted_docs.each do |doc|
163
+ @relations[doc[:name]].internal_doc = doc
206
164
  end
207
165
  end
208
166
 
209
- # Given all classes, generates namespace tree and writes it
210
- # in JSON form into a file.
211
- def write_tree(filename, relations)
212
- tree = Tree.new.create(relations.classes, @guides)
213
- icons = TreeIcons.new.extract_icons(tree)
214
- js = "Docs.classData = " + JSON.generate( tree ) + ";"
215
- js += "Docs.icons = " + JSON.generate( icons ) + ";"
216
- File.open(filename, 'w') {|f| f.write(js) }
167
+ # Writes classes, guides, videos, and search data to one big .js file
168
+ def write_app_data
169
+ js = "Docs.data = " + JsonDuck.generate({
170
+ :classes => Icons.new.create(@relations.classes),
171
+ :guides => @guides.to_array,
172
+ :videos => @videos.to_array,
173
+ :examples => @examples.to_array,
174
+ :search => SearchData.new.create(@relations.classes),
175
+ }) + ";\n"
176
+ File.open(@opts.output_dir+"/data.js", 'w') {|f| f.write(js) }
217
177
  end
218
178
 
219
- # Given all classes, generates members data for search and writes in
220
- # in JSON form into a file.
221
- def write_search_data(filename, relations)
222
- search_data = SearchData.new.create(relations.classes)
223
- js = "Docs.searchData = " + JSON.generate( {:data => search_data} ) + ";"
224
- File.open(filename, 'w') {|f| f.write(js) }
225
- end
226
-
227
- # Writes JsonP export file for each class
228
- def write_classes(path, relations)
229
- exporter = Exporter.new(relations, get_doc_formatter(relations))
230
- @parallel.each(relations.classes) do |cls|
231
- filename = path + "/" + cls[:name] + ".js"
179
+ # Writes JSON export or JsonP file for each class
180
+ def write_classes
181
+ exporter = Exporter.new(@relations)
182
+ renderer = Renderer.new
183
+ @parallel.each(@relations.classes) do |cls|
184
+ filename = @opts.output_dir+"/output/" + cls[:name] + (@opts.export ? ".json" : ".js")
232
185
  Logger.instance.log("Writing to #{filename} ...")
233
- JsonP.write(filename, cls[:name].gsub(/\./, "_"), exporter.export(cls))
186
+ data = exporter.export(cls)
187
+ if @opts.export
188
+ JsonDuck.write_json(filename, data)
189
+ else
190
+ data[:html] = renderer.render(data)
191
+ data = exporter.compact(data)
192
+ JsonDuck.write_jsonp(filename, cls[:name].gsub(/\./, "_"), data)
193
+ end
234
194
  end
235
195
  end
236
196
 
237
197
  # Writes formatted HTML source code for each input file
238
- def write_src(path, parsed_files)
239
- src = SourceWriter.new(path, @export ? nil : :page)
198
+ def write_src(parsed_files)
199
+ src = SourceWriter.new(@opts.output_dir + "/source", @opts.export ? nil : :page)
240
200
  # Can't be done in parallel, because file.html_filename= method
241
201
  # updates all the doc-objects related to the file
242
202
  parsed_files.each do |file|
@@ -247,53 +207,76 @@ module JsDuck
247
207
  end
248
208
 
249
209
  # Creates and initializes DocFormatter
250
- def get_doc_formatter(relations)
210
+ def get_doc_formatter
251
211
  formatter = DocFormatter.new
252
- formatter.link_tpl = @link_tpl if @link_tpl
253
- formatter.img_tpl = @img_tpl if @img_tpl
254
- formatter.relations = relations
212
+ formatter.link_tpl = @opts.link_tpl if @opts.link_tpl
213
+ formatter.img_tpl = @opts.img_tpl if @opts.img_tpl
214
+ formatter.relations = @relations
215
+ if @opts.inline_examples_dir
216
+ formatter.get_example = lambda {|path| IO.read(@opts.inline_examples_dir + "/" + path) }
217
+ end
255
218
  formatter
256
219
  end
257
220
 
258
- def copy_template(template_dir, dir)
259
- Logger.instance.log("Copying template files to #{dir}...")
260
- FileUtils.cp_r(template_dir, dir)
261
- init_output_dirs(dir)
221
+ def copy_template
222
+ Logger.instance.log("Copying template files to #{@opts.output_dir}...")
223
+ FileUtils.cp_r(@opts.template_dir, @opts.output_dir)
224
+ init_output_dirs
262
225
  end
263
226
 
264
- def link_template(template_dir, dir)
265
- Logger.instance.log("Linking template files to #{dir}...")
266
- FileUtils.mkdir(dir)
267
- Dir.glob(template_dir + "/*").each do |file|
268
- File.symlink(File.expand_path(file), dir+"/"+File.basename(file))
227
+ def link_template
228
+ Logger.instance.log("Linking template files to #{@opts.output_dir}...")
229
+ FileUtils.mkdir(@opts.output_dir)
230
+ Dir.glob(@opts.template_dir + "/*").each do |file|
231
+ File.symlink(File.expand_path(file), @opts.output_dir+"/"+File.basename(file))
269
232
  end
270
- init_output_dirs(dir)
233
+ init_output_dirs
271
234
  end
272
235
 
273
- def clear_dir(dir)
274
- if File.exists?(dir)
275
- FileUtils.rm_r(dir)
236
+ def clear_output_dir
237
+ if File.exists?(@opts.output_dir)
238
+ FileUtils.rm_r(@opts.output_dir)
276
239
  end
277
240
  end
278
241
 
279
- def init_output_dirs(dir)
280
- FileUtils.mkdir(dir + "/output")
281
- FileUtils.mkdir(dir + "/source")
242
+ def init_output_dirs
243
+ FileUtils.mkdir(@opts.output_dir + "/output")
244
+ FileUtils.mkdir(@opts.output_dir + "/source")
245
+ end
246
+
247
+ def create_template_html
248
+ write_template("template.html", {
249
+ "{title}" => @opts.title,
250
+ "{header}" => @opts.header,
251
+ "{footer}" => "<div id='footer-content' style='display: none'>#{@opts.footer}</div>",
252
+ "{extjs_path}" => @opts.extjs_path,
253
+ "{local_storage_db}" => @opts.local_storage_db,
254
+ "{welcome}" => @welcome.to_html,
255
+ "{categories}" => @categories.to_html,
256
+ "{guides}" => @guides.to_html,
257
+ "{head_html}" => @opts.head_html,
258
+ "{body_html}" => @opts.body_html,
259
+ })
282
260
  end
283
261
 
284
- def create_index_html(template_dir, dir)
285
- Logger.instance.log("Creating #{dir}/index.html...")
286
- html = IO.read(template_dir+"/index.html")
287
- html.gsub!("{title}", @title)
288
- html.gsub!("{footer}", "<div id='footer-content' style='display: none'>#{@footer}</div>")
289
- html.gsub!("{extjs_path}", @extjs_path)
290
- html.gsub!("{local_storage_db}", @local_storage_db)
291
- html.gsub!("{guides}", @guides.to_html)
292
- html.gsub!("{categories}", @categories.to_html)
293
- html.gsub!("{head_html}", @head_html)
294
- html.gsub!("{body_html}", @body_html)
295
- FileUtils.rm(dir+"/index.html")
296
- File.open(dir+"/index.html", 'w') {|f| f.write(html) }
262
+ def create_print_template_html
263
+ write_template("print-template.html", {
264
+ "{title}" => @opts.title,
265
+ "{header}" => @opts.header,
266
+ })
267
+ end
268
+
269
+ # Opens file in template dir, replaces {keys} inside it, writes to output dir
270
+ def write_template(filename, replacements)
271
+ in_file = @opts.template_dir + '/' + filename
272
+ out_file = @opts.output_dir + '/' + filename
273
+ Logger.instance.log("Creating #{out_file}...")
274
+ html = IO.read(in_file)
275
+ html.gsub!(/\{\w+\}/) do |key|
276
+ replacements[key] ? replacements[key] : key
277
+ end
278
+ FileUtils.rm(out_file)
279
+ File.open(out_file, 'w') {|f| f.write(html) }
297
280
  end
298
281
  end
299
282
 
@@ -1,5 +1,5 @@
1
1
  require 'jsduck/logger'
2
- require 'json'
2
+ require 'jsduck/json_duck'
3
3
 
4
4
  module JsDuck
5
5
 
@@ -13,7 +13,22 @@ module JsDuck
13
13
 
14
14
  # Parses categories in JSON file
15
15
  def parse(path)
16
- @categories = JSON.parse(IO.read(path))["categories"]
16
+ @categories = JsonDuck.read(path)["categories"]
17
+
18
+ # Perform expansion on all class names containing * wildcard
19
+ @categories.each do |cat|
20
+ cat["groups"].each do |group|
21
+ group["classes"] = group["classes"].map do |name|
22
+ expand(name) # name =~ /\*/ ? expand(name) : name
23
+ end.flatten
24
+ end
25
+ end
26
+ end
27
+
28
+ # Expands class name like 'Foo.*' into multiple class names.
29
+ def expand(name)
30
+ re = Regexp.new("^" + name.split(/\*/, -1).map {|part| Regexp.escape(part) }.join('.*') + "$")
31
+ @relations.to_a.find_all {|cls| re =~ cls[:name] && !cls[:private] }.map {|cls| cls[:name] }.sort
17
32
  end
18
33
 
19
34
  # Prints warnings for missing classes in categories file
data/lib/jsduck/class.rb CHANGED
@@ -15,6 +15,16 @@ module JsDuck
15
15
  @relations = nil
16
16
  end
17
17
 
18
+ # Accessors for internal doc object. These are used to run
19
+ # ClassFormatter on the internal doc object and then assign it
20
+ # back.
21
+ def internal_doc
22
+ @doc
23
+ end
24
+ def internal_doc=(doc)
25
+ @doc = doc
26
+ end
27
+
18
28
  def [](key)
19
29
  @doc[key]
20
30
  end
@@ -0,0 +1,77 @@
1
+ require 'jsduck/type_parser'
2
+ require 'jsduck/logger'
3
+
4
+ module JsDuck
5
+
6
+ # Converts :doc properties of class from markdown to HTML, resolves
7
+ # @links, and converts type definitions to HTML. Also removes
8
+ # private members.
9
+ class ClassFormatter
10
+ # Set to false to disable HTML-formatting of type definitions.
11
+ attr_accessor :include_types
12
+
13
+ def initialize(relations, formatter)
14
+ @relations = relations
15
+ @formatter = formatter
16
+ @include_types = true
17
+ end
18
+
19
+ # Runs the formatter on doc object of a class.
20
+ # Accessed using Class#internal_doc
21
+ def format(cls)
22
+ @cls = cls
23
+ @formatter.class_context = cls[:name]
24
+ @formatter.doc_context = cls
25
+ cls[:doc] = @formatter.format(cls[:doc]) if cls[:doc]
26
+ cls[:members].each_pair do |type, members|
27
+ cls[:members][type] = members.reject {|m| m[:private] }.map {|m| format_member(m) }
28
+ end
29
+ cls[:statics].each_pair do |type, members|
30
+ cls[:statics][type] = members.reject {|m| m[:private] }.map {|m| format_member(m) }
31
+ end
32
+ cls
33
+ end
34
+
35
+ def format_member(m)
36
+ @formatter.doc_context = m
37
+ m[:doc] = @formatter.format(m[:doc]) if m[:doc]
38
+ m[:deprecated][:text] = @formatter.format(m[:deprecated][:text]) if m[:deprecated]
39
+ if expandable?(m) || @formatter.too_long?(m[:doc])
40
+ m[:shortDoc] = @formatter.shorten(m[:doc])
41
+ end
42
+ m[:html_type] = format_type(m[:type]) if m[:type] && @include_types
43
+ m[:params] = m[:params].map {|p| format_item(p) } if m[:params]
44
+ m[:return] = format_item(m[:return]) if m[:return]
45
+ m[:properties] = m[:properties].map {|b| format_item(b) } if m[:properties]
46
+ m
47
+ end
48
+
49
+ def expandable?(m)
50
+ m[:params] || (m[:properties] && m[:properties].length > 0) || m[:default] || m[:deprecated]
51
+ end
52
+
53
+ def format_item(it)
54
+ it[:doc] = @formatter.format(it[:doc]) if it[:doc]
55
+ it[:html_type] = format_type(it[:type]) if it[:type] && @include_types
56
+ it[:properties] = it[:properties].map {|s| format_item(s) } if it[:properties]
57
+ it
58
+ end
59
+
60
+ def format_type(type)
61
+ tp = TypeParser.new(@relations, @formatter)
62
+ if tp.parse(type)
63
+ tp.out
64
+ else
65
+ context = @formatter.doc_context
66
+ if tp.error == :syntax
67
+ Logger.instance.warn("Incorrect type syntax #{type} in #{context[:filename]} line #{context[:linenr]}")
68
+ else
69
+ Logger.instance.warn("Unknown type #{type} in #{context[:filename]} line #{context[:linenr]}")
70
+ end
71
+ type
72
+ end
73
+ end
74
+
75
+ end
76
+
77
+ end
@@ -29,6 +29,10 @@ module JsDuck
29
29
  # Default value: '<img src="%u" alt="%a"/>'
30
30
  attr_accessor :img_tpl
31
31
 
32
+ # Assign to this a function that retrieves the example code when
33
+ # passed in a filename
34
+ attr_accessor :get_example
35
+
32
36
  # Sets up instance to work in context of particular class, so
33
37
  # that when {@link #blah} is encountered it knows that
34
38
  # Context#blah is meant.
@@ -55,8 +59,11 @@ module JsDuck
55
59
  @relations = {}
56
60
  @link_tpl = '<a href="%c%#%m">%a</a>'
57
61
  @img_tpl = '<img src="%u" alt="%a"/>'
62
+ @example_tpl = '<pre class="inline-example"><code>%a</code></pre>'
58
63
  @link_re = /\{@link\s+(\S*?)(?:\s+(.+?))?\}/m
59
64
  @img_re = /\{@img\s+(\S*?)(?:\s+(.+?))?\}/m
65
+ @example_re = /\{@example\s+(\S*?)\s*\}/m
66
+ @example_annotation_re = /<pre><code>@example( +[^\n]*)?\s+/m
60
67
  end
61
68
 
62
69
  # Replaces {@link} and {@img} tags, auto-generates links for
@@ -67,6 +74,10 @@ module JsDuck
67
74
  #
68
75
  # Replaces {@img path/to/image.jpg Alt text} with HTML from @img_tpl.
69
76
  #
77
+ # Replaces {@example path/to/example.js} with source from that file.
78
+ #
79
+ # Adds 'inline-example' class to code examples beginning with @example.
80
+ #
70
81
  # Additionally replaces strings recognized as ClassNames with
71
82
  # links to these classes. So one doesn even need to use the @link
72
83
  # tag to create a link.
@@ -78,10 +89,15 @@ module JsDuck
78
89
  out += replace_link_tag(s.scan(@link_re))
79
90
  elsif s.check(@img_re)
80
91
  out += replace_img_tag(s.scan(@img_re))
81
- elsif s.check(/\{/)
82
- out += s.scan(/\{/)
92
+ elsif s.check(@example_re)
93
+ out += replace_example_tag(s.scan(@example_re))
94
+ elsif s.check(@example_annotation_re)
95
+ s.scan(@example_annotation_re)
96
+ out += '<pre class="inline-example"><code>'
97
+ elsif s.check(/[{<]/)
98
+ out += s.scan(/[{<]/)
83
99
  else
84
- out += replace_class_names(s.scan(/[^{]+/))
100
+ out += replace_class_names(s.scan(/[^{<]+/))
85
101
  end
86
102
  end
87
103
  out
@@ -128,6 +144,10 @@ module JsDuck
128
144
  input.sub(@img_re) { img($1, $2) }
129
145
  end
130
146
 
147
+ def replace_example_tag(input)
148
+ input.sub(@example_re) { example($1) }
149
+ end
150
+
131
151
  def replace_class_names(input)
132
152
  input.gsub(/(\A|\s)([A-Z][A-Za-z0-9.]*[A-Za-z0-9])(?:(#)([A-Za-z0-9]+))?([.,]?(?:\s|\Z))/m) do
133
153
  before = $1
@@ -136,7 +156,7 @@ module JsDuck
136
156
  member = $4
137
157
  after = $5
138
158
 
139
- if @relations[cls] && (!member || get_member(cls, member))
159
+ if @relations[cls] && (member ? get_member(cls, member) : cls =~ /\./)
140
160
  label = member ? cls+"."+member : cls
141
161
  before + link(cls, member, label) + after
142
162
  else
@@ -159,6 +179,24 @@ module JsDuck
159
179
  end
160
180
  end
161
181
 
182
+ # Replaces example template with example read from file
183
+ def example(path)
184
+ @example_tpl.gsub(/(%\w)/) do
185
+ case $1
186
+ when '%a'
187
+ if @get_example
188
+ CGI.escapeHTML(@get_example.call(path))
189
+ else
190
+ file = @doc_context[:filename]
191
+ line = @doc_context[:linenr]
192
+ Logger.instance.warn("--examples not specified, but {@example} found in #{file} line #{line}.")
193
+ end
194
+ else
195
+ $1
196
+ end
197
+ end
198
+ end
199
+
162
200
  # applies the link template
163
201
  def link(cls, member, anchor_text, type=nil)
164
202
  # Use the canonical class name for link (not some alternateClassName)