solvas-jsduck 6.0.0.beta.1888

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. checksums.yaml +7 -0
  2. data/COPYING +674 -0
  3. data/README.md +115 -0
  4. data/bin/solvas-jsduck +27 -0
  5. data/js-classes/Array.js +1054 -0
  6. data/js-classes/Boolean.js +110 -0
  7. data/js-classes/Date.js +1022 -0
  8. data/js-classes/Function.js +336 -0
  9. data/js-classes/Number.js +308 -0
  10. data/js-classes/Object.js +1042 -0
  11. data/js-classes/RegExp.js +415 -0
  12. data/js-classes/String.js +1052 -0
  13. data/lib/jsduck/aggregator.rb +200 -0
  14. data/lib/jsduck/app.rb +63 -0
  15. data/lib/jsduck/assets.rb +54 -0
  16. data/lib/jsduck/base_type.rb +53 -0
  17. data/lib/jsduck/batch_parser.rb +46 -0
  18. data/lib/jsduck/batch_processor.rb +83 -0
  19. data/lib/jsduck/cache.rb +137 -0
  20. data/lib/jsduck/categories/auto.rb +83 -0
  21. data/lib/jsduck/categories/class_name.rb +39 -0
  22. data/lib/jsduck/categories/factory.rb +75 -0
  23. data/lib/jsduck/categories/file.rb +69 -0
  24. data/lib/jsduck/class.rb +218 -0
  25. data/lib/jsduck/class_doc_expander.rb +132 -0
  26. data/lib/jsduck/class_name.rb +23 -0
  27. data/lib/jsduck/class_writer.rb +53 -0
  28. data/lib/jsduck/columns.rb +56 -0
  29. data/lib/jsduck/css/parser.rb +90 -0
  30. data/lib/jsduck/css/type.rb +57 -0
  31. data/lib/jsduck/doc/comment.rb +40 -0
  32. data/lib/jsduck/doc/delimited_parser.rb +105 -0
  33. data/lib/jsduck/doc/map.rb +23 -0
  34. data/lib/jsduck/doc/parser.rb +135 -0
  35. data/lib/jsduck/doc/processor.rb +52 -0
  36. data/lib/jsduck/doc/scanner.rb +83 -0
  37. data/lib/jsduck/doc/standard_tag_parser.rb +125 -0
  38. data/lib/jsduck/doc/subproperties.rb +71 -0
  39. data/lib/jsduck/examples.rb +63 -0
  40. data/lib/jsduck/export_writer.rb +63 -0
  41. data/lib/jsduck/exporter/app.rb +80 -0
  42. data/lib/jsduck/exporter/examples.rb +58 -0
  43. data/lib/jsduck/exporter/full.rb +60 -0
  44. data/lib/jsduck/external_classes.rb +362 -0
  45. data/lib/jsduck/format/batch.rb +58 -0
  46. data/lib/jsduck/format/class.rb +62 -0
  47. data/lib/jsduck/format/doc.rb +172 -0
  48. data/lib/jsduck/format/html_stack.rb +108 -0
  49. data/lib/jsduck/format/shortener.rb +55 -0
  50. data/lib/jsduck/format/subproperties.rb +64 -0
  51. data/lib/jsduck/grouped_asset.rb +59 -0
  52. data/lib/jsduck/guide_anchors.rb +39 -0
  53. data/lib/jsduck/guide_toc.rb +68 -0
  54. data/lib/jsduck/guide_toc_entry.rb +54 -0
  55. data/lib/jsduck/guide_writer.rb +58 -0
  56. data/lib/jsduck/guides.rb +188 -0
  57. data/lib/jsduck/img/dir.rb +94 -0
  58. data/lib/jsduck/img/dir_set.rb +39 -0
  59. data/lib/jsduck/img/writer.rb +23 -0
  60. data/lib/jsduck/inline/auto_link.rb +106 -0
  61. data/lib/jsduck/inline/example.rb +44 -0
  62. data/lib/jsduck/inline/img.rb +63 -0
  63. data/lib/jsduck/inline/link.rb +100 -0
  64. data/lib/jsduck/inline/link_renderer.rb +70 -0
  65. data/lib/jsduck/inline/video.rb +61 -0
  66. data/lib/jsduck/inline_examples.rb +94 -0
  67. data/lib/jsduck/js/associator.rb +224 -0
  68. data/lib/jsduck/js/ast.rb +69 -0
  69. data/lib/jsduck/js/class.rb +248 -0
  70. data/lib/jsduck/js/evaluator.rb +70 -0
  71. data/lib/jsduck/js/event.rb +34 -0
  72. data/lib/jsduck/js/ext_define.rb +46 -0
  73. data/lib/jsduck/js/ext_patterns.rb +75 -0
  74. data/lib/jsduck/js/fires.rb +42 -0
  75. data/lib/jsduck/js/listener.rb +35 -0
  76. data/lib/jsduck/js/method.rb +99 -0
  77. data/lib/jsduck/js/method_calls.rb +40 -0
  78. data/lib/jsduck/js/node.rb +267 -0
  79. data/lib/jsduck/js/node_array.rb +36 -0
  80. data/lib/jsduck/js/parser.rb +44 -0
  81. data/lib/jsduck/js/property.rb +81 -0
  82. data/lib/jsduck/js/returns.rb +211 -0
  83. data/lib/jsduck/js/rkelly_adapter.rb +587 -0
  84. data/lib/jsduck/js/scoped_traverser.rb +42 -0
  85. data/lib/jsduck/js/serializer.rb +263 -0
  86. data/lib/jsduck/js/utils.rb +21 -0
  87. data/lib/jsduck/logger.rb +186 -0
  88. data/lib/jsduck/member_registry.rb +41 -0
  89. data/lib/jsduck/members_index.rb +141 -0
  90. data/lib/jsduck/merger.rb +83 -0
  91. data/lib/jsduck/news.rb +149 -0
  92. data/lib/jsduck/options/config.rb +35 -0
  93. data/lib/jsduck/options/helpful_parser.rb +111 -0
  94. data/lib/jsduck/options/input_files.rb +60 -0
  95. data/lib/jsduck/options/jsb.rb +25 -0
  96. data/lib/jsduck/options/parser.rb +968 -0
  97. data/lib/jsduck/options/processor.rb +47 -0
  98. data/lib/jsduck/options/record.rb +51 -0
  99. data/lib/jsduck/output_dir.rb +29 -0
  100. data/lib/jsduck/params_merger.rb +47 -0
  101. data/lib/jsduck/parser.rb +76 -0
  102. data/lib/jsduck/process/accessors.rb +152 -0
  103. data/lib/jsduck/process/circular_deps.rb +58 -0
  104. data/lib/jsduck/process/components.rb +19 -0
  105. data/lib/jsduck/process/enums.rb +90 -0
  106. data/lib/jsduck/process/ext4_events.rb +46 -0
  107. data/lib/jsduck/process/fires.rb +71 -0
  108. data/lib/jsduck/process/global_members.rb +35 -0
  109. data/lib/jsduck/process/ignored_classes.rb +16 -0
  110. data/lib/jsduck/process/importer.rb +75 -0
  111. data/lib/jsduck/process/inherit_class.rb +58 -0
  112. data/lib/jsduck/process/inherit_doc.rb +32 -0
  113. data/lib/jsduck/process/inherit_members.rb +259 -0
  114. data/lib/jsduck/process/lint.rb +118 -0
  115. data/lib/jsduck/process/no_doc.rb +50 -0
  116. data/lib/jsduck/process/overrides.rb +99 -0
  117. data/lib/jsduck/process/return_values.rb +72 -0
  118. data/lib/jsduck/process/versions.rb +137 -0
  119. data/lib/jsduck/relations.rb +95 -0
  120. data/lib/jsduck/render/class.rb +152 -0
  121. data/lib/jsduck/render/sidebar.rb +97 -0
  122. data/lib/jsduck/render/signature_util.rb +14 -0
  123. data/lib/jsduck/render/subproperties.rb +117 -0
  124. data/lib/jsduck/render/tags.rb +50 -0
  125. data/lib/jsduck/source/file.rb +89 -0
  126. data/lib/jsduck/tag/abstract.rb +11 -0
  127. data/lib/jsduck/tag/accessor.rb +10 -0
  128. data/lib/jsduck/tag/alias.rb +42 -0
  129. data/lib/jsduck/tag/alternate_class_names.rb +13 -0
  130. data/lib/jsduck/tag/aside.rb +71 -0
  131. data/lib/jsduck/tag/author.rb +30 -0
  132. data/lib/jsduck/tag/boolean_tag.rb +24 -0
  133. data/lib/jsduck/tag/cfg.rb +79 -0
  134. data/lib/jsduck/tag/chainable.rb +12 -0
  135. data/lib/jsduck/tag/class.rb +77 -0
  136. data/lib/jsduck/tag/class_list_tag.rb +40 -0
  137. data/lib/jsduck/tag/component.rb +19 -0
  138. data/lib/jsduck/tag/constructor.rb +24 -0
  139. data/lib/jsduck/tag/css_mixin.rb +31 -0
  140. data/lib/jsduck/tag/css_var.rb +50 -0
  141. data/lib/jsduck/tag/default.rb +25 -0
  142. data/lib/jsduck/tag/deprecated.rb +23 -0
  143. data/lib/jsduck/tag/deprecated_tag.rb +60 -0
  144. data/lib/jsduck/tag/doc.rb +32 -0
  145. data/lib/jsduck/tag/docauthor.rb +12 -0
  146. data/lib/jsduck/tag/enum.rb +67 -0
  147. data/lib/jsduck/tag/event.rb +36 -0
  148. data/lib/jsduck/tag/evented.rb +10 -0
  149. data/lib/jsduck/tag/experimental.rb +28 -0
  150. data/lib/jsduck/tag/extends.rb +39 -0
  151. data/lib/jsduck/tag/fires.rb +55 -0
  152. data/lib/jsduck/tag/ftype.rb +19 -0
  153. data/lib/jsduck/tag/hide.rb +11 -0
  154. data/lib/jsduck/tag/icons/cfg.png +0 -0
  155. data/lib/jsduck/tag/icons/class-large.png +0 -0
  156. data/lib/jsduck/tag/icons/class-redirect.png +0 -0
  157. data/lib/jsduck/tag/icons/class.png +0 -0
  158. data/lib/jsduck/tag/icons/component-large.png +0 -0
  159. data/lib/jsduck/tag/icons/component-redirect.png +0 -0
  160. data/lib/jsduck/tag/icons/component.png +0 -0
  161. data/lib/jsduck/tag/icons/css_mixin.png +0 -0
  162. data/lib/jsduck/tag/icons/css_var.png +0 -0
  163. data/lib/jsduck/tag/icons/event.png +0 -0
  164. data/lib/jsduck/tag/icons/listener.png +0 -0
  165. data/lib/jsduck/tag/icons/method.png +0 -0
  166. data/lib/jsduck/tag/icons/property.png +0 -0
  167. data/lib/jsduck/tag/icons/singleton-large.png +0 -0
  168. data/lib/jsduck/tag/icons/singleton-redirect.png +0 -0
  169. data/lib/jsduck/tag/icons/singleton.png +0 -0
  170. data/lib/jsduck/tag/ignore.rb +12 -0
  171. data/lib/jsduck/tag/inheritable.rb +10 -0
  172. data/lib/jsduck/tag/inheritdoc.rb +48 -0
  173. data/lib/jsduck/tag/listener.rb +36 -0
  174. data/lib/jsduck/tag/localdoc.rb +33 -0
  175. data/lib/jsduck/tag/markdown.rb +14 -0
  176. data/lib/jsduck/tag/member.rb +24 -0
  177. data/lib/jsduck/tag/member_tag.rb +131 -0
  178. data/lib/jsduck/tag/method.rb +75 -0
  179. data/lib/jsduck/tag/mixins.rb +27 -0
  180. data/lib/jsduck/tag/new.rb +32 -0
  181. data/lib/jsduck/tag/override.rb +37 -0
  182. data/lib/jsduck/tag/overrides.rb +29 -0
  183. data/lib/jsduck/tag/param.rb +46 -0
  184. data/lib/jsduck/tag/preventable.rb +37 -0
  185. data/lib/jsduck/tag/private.rb +35 -0
  186. data/lib/jsduck/tag/property.rb +67 -0
  187. data/lib/jsduck/tag/protected.rb +12 -0
  188. data/lib/jsduck/tag/ptype.rb +19 -0
  189. data/lib/jsduck/tag/readonly.rb +11 -0
  190. data/lib/jsduck/tag/removed.rb +32 -0
  191. data/lib/jsduck/tag/required.rb +23 -0
  192. data/lib/jsduck/tag/requires.rb +13 -0
  193. data/lib/jsduck/tag/return.rb +48 -0
  194. data/lib/jsduck/tag/since.rb +30 -0
  195. data/lib/jsduck/tag/singleton.rb +28 -0
  196. data/lib/jsduck/tag/static.rb +12 -0
  197. data/lib/jsduck/tag/subproperties.rb +23 -0
  198. data/lib/jsduck/tag/tag.rb +164 -0
  199. data/lib/jsduck/tag/template.rb +29 -0
  200. data/lib/jsduck/tag/throws.rb +39 -0
  201. data/lib/jsduck/tag/type.rb +38 -0
  202. data/lib/jsduck/tag/uses.rb +13 -0
  203. data/lib/jsduck/tag/xtype.rb +31 -0
  204. data/lib/jsduck/tag_loader.rb +50 -0
  205. data/lib/jsduck/tag_registry.rb +95 -0
  206. data/lib/jsduck/type_parser.rb +388 -0
  207. data/lib/jsduck/util/html.rb +27 -0
  208. data/lib/jsduck/util/io.rb +49 -0
  209. data/lib/jsduck/util/json.rb +60 -0
  210. data/lib/jsduck/util/md5.rb +32 -0
  211. data/lib/jsduck/util/null_object.rb +36 -0
  212. data/lib/jsduck/util/os.rb +14 -0
  213. data/lib/jsduck/util/parallel.rb +38 -0
  214. data/lib/jsduck/util/singleton.rb +35 -0
  215. data/lib/jsduck/util/stdout.rb +33 -0
  216. data/lib/jsduck/version.rb +5 -0
  217. data/lib/jsduck/videos.rb +40 -0
  218. data/lib/jsduck/warning/all.rb +36 -0
  219. data/lib/jsduck/warning/basic.rb +57 -0
  220. data/lib/jsduck/warning/deprecated.rb +40 -0
  221. data/lib/jsduck/warning/nodoc.rb +79 -0
  222. data/lib/jsduck/warning/parser.rb +168 -0
  223. data/lib/jsduck/warning/registry.rb +108 -0
  224. data/lib/jsduck/warning/tag.rb +57 -0
  225. data/lib/jsduck/warning/warn_exception.rb +10 -0
  226. data/lib/jsduck/web/class_icons.rb +76 -0
  227. data/lib/jsduck/web/css.rb +40 -0
  228. data/lib/jsduck/web/data.rb +52 -0
  229. data/lib/jsduck/web/index_html.rb +105 -0
  230. data/lib/jsduck/web/member_icons.rb +43 -0
  231. data/lib/jsduck/web/search.rb +153 -0
  232. data/lib/jsduck/web/source.rb +89 -0
  233. data/lib/jsduck/web/template.rb +51 -0
  234. data/lib/jsduck/web/tree.rb +22 -0
  235. data/lib/jsduck/web/writer.rb +100 -0
  236. data/lib/jsduck/welcome.rb +31 -0
  237. data/template-min/README.md +14 -0
  238. data/template-min/app-0f524ddd276c4019a11a6128932a9c96.js +1 -0
  239. data/template-min/eg-iframe.html +26 -0
  240. data/template-min/extjs/ext-all.js +38 -0
  241. data/template-min/extjs/resources/themes/images/default/boundlist/trigger-arrow.png +0 -0
  242. data/template-min/extjs/resources/themes/images/default/box/corners-blue.gif +0 -0
  243. data/template-min/extjs/resources/themes/images/default/box/corners.gif +0 -0
  244. data/template-min/extjs/resources/themes/images/default/box/l-blue.gif +0 -0
  245. data/template-min/extjs/resources/themes/images/default/box/l.gif +0 -0
  246. data/template-min/extjs/resources/themes/images/default/box/r-blue.gif +0 -0
  247. data/template-min/extjs/resources/themes/images/default/box/r.gif +0 -0
  248. data/template-min/extjs/resources/themes/images/default/box/tb-blue.gif +0 -0
  249. data/template-min/extjs/resources/themes/images/default/box/tb.gif +0 -0
  250. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-corners.gif +0 -0
  251. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-corners.gif +0 -0
  252. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-notitle-sides.gif +0 -0
  253. data/template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-sides.gif +0 -0
  254. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-bg.gif +0 -0
  255. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-corners.gif +0 -0
  256. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-bg.gif +0 -0
  257. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-corners.gif +0 -0
  258. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-disabled-sides.gif +0 -0
  259. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-bg.gif +0 -0
  260. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-corners.gif +0 -0
  261. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-focus-sides.gif +0 -0
  262. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-bg.gif +0 -0
  263. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-corners.gif +0 -0
  264. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-over-sides.gif +0 -0
  265. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-bg.gif +0 -0
  266. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-corners.gif +0 -0
  267. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-pressed-sides.gif +0 -0
  268. data/template-min/extjs/resources/themes/images/default/btn/btn-default-large-sides.gif +0 -0
  269. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-bg.gif +0 -0
  270. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-corners.gif +0 -0
  271. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-bg.gif +0 -0
  272. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-corners.gif +0 -0
  273. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-disabled-sides.gif +0 -0
  274. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-bg.gif +0 -0
  275. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-corners.gif +0 -0
  276. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-focus-sides.gif +0 -0
  277. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-bg.gif +0 -0
  278. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-corners.gif +0 -0
  279. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-over-sides.gif +0 -0
  280. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-bg.gif +0 -0
  281. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-corners.gif +0 -0
  282. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-pressed-sides.gif +0 -0
  283. data/template-min/extjs/resources/themes/images/default/btn/btn-default-medium-sides.gif +0 -0
  284. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-bg.gif +0 -0
  285. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-corners.gif +0 -0
  286. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-bg.gif +0 -0
  287. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-corners.gif +0 -0
  288. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-disabled-sides.gif +0 -0
  289. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-bg.gif +0 -0
  290. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-corners.gif +0 -0
  291. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-focus-sides.gif +0 -0
  292. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-bg.gif +0 -0
  293. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-corners.gif +0 -0
  294. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-over-sides.gif +0 -0
  295. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-bg.gif +0 -0
  296. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-corners.gif +0 -0
  297. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-pressed-sides.gif +0 -0
  298. data/template-min/extjs/resources/themes/images/default/btn/btn-default-small-sides.gif +0 -0
  299. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-corners.gif +0 -0
  300. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-corners.gif +0 -0
  301. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-disabled-sides.gif +0 -0
  302. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-bg.gif +0 -0
  303. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-corners.gif +0 -0
  304. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-focus-sides.gif +0 -0
  305. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-bg.gif +0 -0
  306. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-corners.gif +0 -0
  307. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-over-sides.gif +0 -0
  308. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-bg.gif +0 -0
  309. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-corners.gif +0 -0
  310. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-pressed-sides.gif +0 -0
  311. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-large-sides.gif +0 -0
  312. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-corners.gif +0 -0
  313. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-corners.gif +0 -0
  314. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-disabled-sides.gif +0 -0
  315. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-bg.gif +0 -0
  316. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-corners.gif +0 -0
  317. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-focus-sides.gif +0 -0
  318. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-bg.gif +0 -0
  319. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-corners.gif +0 -0
  320. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-over-sides.gif +0 -0
  321. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-bg.gif +0 -0
  322. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-corners.gif +0 -0
  323. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-pressed-sides.gif +0 -0
  324. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-medium-sides.gif +0 -0
  325. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-corners.gif +0 -0
  326. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-corners.gif +0 -0
  327. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-disabled-sides.gif +0 -0
  328. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-bg.gif +0 -0
  329. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-corners.gif +0 -0
  330. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-focus-sides.gif +0 -0
  331. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-bg.gif +0 -0
  332. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-corners.gif +0 -0
  333. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-over-sides.gif +0 -0
  334. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-bg.gif +0 -0
  335. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-corners.gif +0 -0
  336. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-pressed-sides.gif +0 -0
  337. data/template-min/extjs/resources/themes/images/default/btn/btn-default-toolbar-small-sides.gif +0 -0
  338. data/template-min/extjs/resources/themes/images/default/button/arrow.gif +0 -0
  339. data/template-min/extjs/resources/themes/images/default/button/btn.gif +0 -0
  340. data/template-min/extjs/resources/themes/images/default/button/group-cs.gif +0 -0
  341. data/template-min/extjs/resources/themes/images/default/button/group-lr.gif +0 -0
  342. data/template-min/extjs/resources/themes/images/default/button/group-tb.gif +0 -0
  343. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b-noline.gif +0 -0
  344. data/template-min/extjs/resources/themes/images/default/button/s-arrow-b.gif +0 -0
  345. data/template-min/extjs/resources/themes/images/default/button/s-arrow-bo.gif +0 -0
  346. data/template-min/extjs/resources/themes/images/default/button/s-arrow-light.gif +0 -0
  347. data/template-min/extjs/resources/themes/images/default/button/s-arrow-noline.gif +0 -0
  348. data/template-min/extjs/resources/themes/images/default/button/s-arrow-o.gif +0 -0
  349. data/template-min/extjs/resources/themes/images/default/button/s-arrow.gif +0 -0
  350. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.gif +0 -0
  351. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-footer-bg.png +0 -0
  352. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.gif +0 -0
  353. data/template-min/extjs/resources/themes/images/default/datepicker/datepicker-header-bg.png +0 -0
  354. data/template-min/extjs/resources/themes/images/default/dd/drop-add.gif +0 -0
  355. data/template-min/extjs/resources/themes/images/default/dd/drop-no.gif +0 -0
  356. data/template-min/extjs/resources/themes/images/default/dd/drop-yes.gif +0 -0
  357. data/template-min/extjs/resources/themes/images/default/editor/tb-sprite.gif +0 -0
  358. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-corners.gif +0 -0
  359. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-corners.gif +0 -0
  360. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-default-sides.gif +0 -0
  361. data/template-min/extjs/resources/themes/images/default/form-invalid-tip/form-invalid-tip-sides.gif +0 -0
  362. data/template-min/extjs/resources/themes/images/default/form/checkbox.gif +0 -0
  363. data/template-min/extjs/resources/themes/images/default/form/clear-trigger.gif +0 -0
  364. data/template-min/extjs/resources/themes/images/default/form/date-trigger.gif +0 -0
  365. data/template-min/extjs/resources/themes/images/default/form/error-tip-corners.gif +0 -0
  366. data/template-min/extjs/resources/themes/images/default/form/exclamation.gif +0 -0
  367. data/template-min/extjs/resources/themes/images/default/form/radio.gif +0 -0
  368. data/template-min/extjs/resources/themes/images/default/form/search-trigger.gif +0 -0
  369. data/template-min/extjs/resources/themes/images/default/form/spinner-small.gif +0 -0
  370. data/template-min/extjs/resources/themes/images/default/form/spinner.gif +0 -0
  371. data/template-min/extjs/resources/themes/images/default/form/text-bg.gif +0 -0
  372. data/template-min/extjs/resources/themes/images/default/form/trigger-square.gif +0 -0
  373. data/template-min/extjs/resources/themes/images/default/form/trigger-tpl.gif +0 -0
  374. data/template-min/extjs/resources/themes/images/default/form/trigger.gif +0 -0
  375. data/template-min/extjs/resources/themes/images/default/grid/arrow-left-white.gif +0 -0
  376. data/template-min/extjs/resources/themes/images/default/grid/arrow-right-white.gif +0 -0
  377. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.gif +0 -0
  378. data/template-min/extjs/resources/themes/images/default/grid/cell-special-bg.png +0 -0
  379. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.gif +0 -0
  380. data/template-min/extjs/resources/themes/images/default/grid/cell-special-selected-bg.png +0 -0
  381. data/template-min/extjs/resources/themes/images/default/grid/checked.gif +0 -0
  382. data/template-min/extjs/resources/themes/images/default/grid/col-move-bottom.gif +0 -0
  383. data/template-min/extjs/resources/themes/images/default/grid/col-move-top.gif +0 -0
  384. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.gif +0 -0
  385. data/template-min/extjs/resources/themes/images/default/grid/column-header-bg.png +0 -0
  386. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.gif +0 -0
  387. data/template-min/extjs/resources/themes/images/default/grid/column-header-over-bg.png +0 -0
  388. data/template-min/extjs/resources/themes/images/default/grid/columns.gif +0 -0
  389. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.gif +0 -0
  390. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-left.png +0 -0
  391. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.gif +0 -0
  392. data/template-min/extjs/resources/themes/images/default/grid/dd-insert-arrow-right.png +0 -0
  393. data/template-min/extjs/resources/themes/images/default/grid/dirty.gif +0 -0
  394. data/template-min/extjs/resources/themes/images/default/grid/done.gif +0 -0
  395. data/template-min/extjs/resources/themes/images/default/grid/drop-no.gif +0 -0
  396. data/template-min/extjs/resources/themes/images/default/grid/drop-yes.gif +0 -0
  397. data/template-min/extjs/resources/themes/images/default/grid/footer-bg.gif +0 -0
  398. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-hd.gif +0 -0
  399. data/template-min/extjs/resources/themes/images/default/grid/grid-blue-split.gif +0 -0
  400. data/template-min/extjs/resources/themes/images/default/grid/grid-hrow.gif +0 -0
  401. data/template-min/extjs/resources/themes/images/default/grid/grid-loading.gif +0 -0
  402. data/template-min/extjs/resources/themes/images/default/grid/grid-split.gif +0 -0
  403. data/template-min/extjs/resources/themes/images/default/grid/grid-vista-hd.gif +0 -0
  404. data/template-min/extjs/resources/themes/images/default/grid/grid3-hd-btn.gif +0 -0
  405. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow-over.gif +0 -0
  406. data/template-min/extjs/resources/themes/images/default/grid/grid3-hrow.gif +0 -0
  407. data/template-min/extjs/resources/themes/images/default/grid/grid3-rowheader.gif +0 -0
  408. data/template-min/extjs/resources/themes/images/default/grid/group-by.gif +0 -0
  409. data/template-min/extjs/resources/themes/images/default/grid/group-collapse.gif +0 -0
  410. data/template-min/extjs/resources/themes/images/default/grid/group-expand-sprite.gif +0 -0
  411. data/template-min/extjs/resources/themes/images/default/grid/group-expand.gif +0 -0
  412. data/template-min/extjs/resources/themes/images/default/grid/hd-pop.gif +0 -0
  413. data/template-min/extjs/resources/themes/images/default/grid/hmenu-asc.gif +0 -0
  414. data/template-min/extjs/resources/themes/images/default/grid/hmenu-desc.gif +0 -0
  415. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.gif +0 -0
  416. data/template-min/extjs/resources/themes/images/default/grid/hmenu-lock.png +0 -0
  417. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.gif +0 -0
  418. data/template-min/extjs/resources/themes/images/default/grid/hmenu-unlock.png +0 -0
  419. data/template-min/extjs/resources/themes/images/default/grid/invalid_line.gif +0 -0
  420. data/template-min/extjs/resources/themes/images/default/grid/loading.gif +0 -0
  421. data/template-min/extjs/resources/themes/images/default/grid/mso-hd.gif +0 -0
  422. data/template-min/extjs/resources/themes/images/default/grid/nowait.gif +0 -0
  423. data/template-min/extjs/resources/themes/images/default/grid/page-first-disabled.gif +0 -0
  424. data/template-min/extjs/resources/themes/images/default/grid/page-first.gif +0 -0
  425. data/template-min/extjs/resources/themes/images/default/grid/page-last-disabled.gif +0 -0
  426. data/template-min/extjs/resources/themes/images/default/grid/page-last.gif +0 -0
  427. data/template-min/extjs/resources/themes/images/default/grid/page-next-disabled.gif +0 -0
  428. data/template-min/extjs/resources/themes/images/default/grid/page-next.gif +0 -0
  429. data/template-min/extjs/resources/themes/images/default/grid/page-prev-disabled.gif +0 -0
  430. data/template-min/extjs/resources/themes/images/default/grid/page-prev.gif +0 -0
  431. data/template-min/extjs/resources/themes/images/default/grid/pick-button.gif +0 -0
  432. data/template-min/extjs/resources/themes/images/default/grid/property-cell-bg.gif +0 -0
  433. data/template-min/extjs/resources/themes/images/default/grid/property-cell-selected-bg.gif +0 -0
  434. data/template-min/extjs/resources/themes/images/default/grid/refresh-disabled.gif +0 -0
  435. data/template-min/extjs/resources/themes/images/default/grid/refresh.gif +0 -0
  436. data/template-min/extjs/resources/themes/images/default/grid/row-check-sprite.gif +0 -0
  437. data/template-min/extjs/resources/themes/images/default/grid/row-expand-sprite.gif +0 -0
  438. data/template-min/extjs/resources/themes/images/default/grid/row-over.gif +0 -0
  439. data/template-min/extjs/resources/themes/images/default/grid/row-sel.gif +0 -0
  440. data/template-min/extjs/resources/themes/images/default/grid/sort-hd.gif +0 -0
  441. data/template-min/extjs/resources/themes/images/default/grid/sort_asc.gif +0 -0
  442. data/template-min/extjs/resources/themes/images/default/grid/sort_desc.gif +0 -0
  443. data/template-min/extjs/resources/themes/images/default/grid/unchecked.gif +0 -0
  444. data/template-min/extjs/resources/themes/images/default/grid/wait.gif +0 -0
  445. data/template-min/extjs/resources/themes/images/default/layout/mini-bottom.gif +0 -0
  446. data/template-min/extjs/resources/themes/images/default/layout/mini-left.gif +0 -0
  447. data/template-min/extjs/resources/themes/images/default/layout/mini-right.gif +0 -0
  448. data/template-min/extjs/resources/themes/images/default/layout/mini-top.gif +0 -0
  449. data/template-min/extjs/resources/themes/images/default/menu/checked.gif +0 -0
  450. data/template-min/extjs/resources/themes/images/default/menu/group-checked.gif +0 -0
  451. data/template-min/extjs/resources/themes/images/default/menu/item-over.gif +0 -0
  452. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-bg.gif +0 -0
  453. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-corners.gif +0 -0
  454. data/template-min/extjs/resources/themes/images/default/menu/menu-item-active-sides.gif +0 -0
  455. data/template-min/extjs/resources/themes/images/default/menu/menu-parent.gif +0 -0
  456. data/template-min/extjs/resources/themes/images/default/menu/menu.gif +0 -0
  457. data/template-min/extjs/resources/themes/images/default/menu/unchecked.gif +0 -0
  458. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-bottom-bg.gif +0 -0
  459. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-bg.gif +0 -0
  460. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-corners.gif +0 -0
  461. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-bottom-sides.gif +0 -0
  462. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-bg.gif +0 -0
  463. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-corners.gif +0 -0
  464. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-bottom-sides.gif +0 -0
  465. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-bg.gif +0 -0
  466. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-corners.gif +0 -0
  467. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-left-sides.gif +0 -0
  468. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-bg.gif +0 -0
  469. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-corners.gif +0 -0
  470. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-right-sides.gif +0 -0
  471. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-bg.gif +0 -0
  472. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-corners.gif +0 -0
  473. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-collapsed-top-sides.gif +0 -0
  474. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-bg.gif +0 -0
  475. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-corners.gif +0 -0
  476. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-left-sides.gif +0 -0
  477. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-bg.gif +0 -0
  478. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-corners.gif +0 -0
  479. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-right-sides.gif +0 -0
  480. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-bg.gif +0 -0
  481. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-corners.gif +0 -0
  482. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-framed-top-sides.gif +0 -0
  483. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-left-bg.gif +0 -0
  484. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-right-bg.gif +0 -0
  485. data/template-min/extjs/resources/themes/images/default/panel-header/panel-header-default-top-bg.gif +0 -0
  486. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-corners.gif +0 -0
  487. data/template-min/extjs/resources/themes/images/default/panel/panel-default-framed-sides.gif +0 -0
  488. data/template-min/extjs/resources/themes/images/default/progress/progress-default-bg.gif +0 -0
  489. data/template-min/extjs/resources/themes/images/default/shared/blue-loading.gif +0 -0
  490. data/template-min/extjs/resources/themes/images/default/shared/calendar.gif +0 -0
  491. data/template-min/extjs/resources/themes/images/default/shared/glass-bg.gif +0 -0
  492. data/template-min/extjs/resources/themes/images/default/shared/hd-sprite.gif +0 -0
  493. data/template-min/extjs/resources/themes/images/default/shared/icon-error.gif +0 -0
  494. data/template-min/extjs/resources/themes/images/default/shared/icon-info.gif +0 -0
  495. data/template-min/extjs/resources/themes/images/default/shared/icon-question.gif +0 -0
  496. data/template-min/extjs/resources/themes/images/default/shared/icon-warning.gif +0 -0
  497. data/template-min/extjs/resources/themes/images/default/shared/large-loading.gif +0 -0
  498. data/template-min/extjs/resources/themes/images/default/shared/left-btn.gif +0 -0
  499. data/template-min/extjs/resources/themes/images/default/shared/loading-balls.gif +0 -0
  500. data/template-min/extjs/resources/themes/images/default/shared/right-btn.gif +0 -0
  501. data/template-min/extjs/resources/themes/images/default/shared/shadow-c.png +0 -0
  502. data/template-min/extjs/resources/themes/images/default/shared/shadow-lr.png +0 -0
  503. data/template-min/extjs/resources/themes/images/default/shared/shadow.png +0 -0
  504. data/template-min/extjs/resources/themes/images/default/shared/warning.gif +0 -0
  505. data/template-min/extjs/resources/themes/images/default/sizer/e-handle-dark.gif +0 -0
  506. data/template-min/extjs/resources/themes/images/default/sizer/e-handle.gif +0 -0
  507. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle-dark.gif +0 -0
  508. data/template-min/extjs/resources/themes/images/default/sizer/ne-handle.gif +0 -0
  509. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle-dark.gif +0 -0
  510. data/template-min/extjs/resources/themes/images/default/sizer/nw-handle.gif +0 -0
  511. data/template-min/extjs/resources/themes/images/default/sizer/s-handle-dark.gif +0 -0
  512. data/template-min/extjs/resources/themes/images/default/sizer/s-handle.gif +0 -0
  513. data/template-min/extjs/resources/themes/images/default/sizer/se-handle-dark.gif +0 -0
  514. data/template-min/extjs/resources/themes/images/default/sizer/se-handle.gif +0 -0
  515. data/template-min/extjs/resources/themes/images/default/sizer/square.gif +0 -0
  516. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle-dark.gif +0 -0
  517. data/template-min/extjs/resources/themes/images/default/sizer/sw-handle.gif +0 -0
  518. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.gif +0 -0
  519. data/template-min/extjs/resources/themes/images/default/slider/slider-bg.png +0 -0
  520. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.gif +0 -0
  521. data/template-min/extjs/resources/themes/images/default/slider/slider-thumb.png +0 -0
  522. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.gif +0 -0
  523. data/template-min/extjs/resources/themes/images/default/slider/slider-v-bg.png +0 -0
  524. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.gif +0 -0
  525. data/template-min/extjs/resources/themes/images/default/slider/slider-v-thumb.png +0 -0
  526. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-left.gif +0 -0
  527. data/template-min/extjs/resources/themes/images/default/tab-bar/scroll-right.gif +0 -0
  528. data/template-min/extjs/resources/themes/images/default/tab-bar/tab-bar-default-bg.gif +0 -0
  529. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-bg.gif +0 -0
  530. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-corners.gif +0 -0
  531. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-active-sides.gif +0 -0
  532. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-bg.gif +0 -0
  533. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-corners.gif +0 -0
  534. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-bg.gif +0 -0
  535. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-corners.gif +0 -0
  536. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-disabled-sides.gif +0 -0
  537. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-bg.gif +0 -0
  538. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-corners.gif +0 -0
  539. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-over-sides.gif +0 -0
  540. data/template-min/extjs/resources/themes/images/default/tab/tab-default-bottom-sides.gif +0 -0
  541. data/template-min/extjs/resources/themes/images/default/tab/tab-default-close.gif +0 -0
  542. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-bg.gif +0 -0
  543. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-corners.gif +0 -0
  544. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-active-sides.gif +0 -0
  545. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-bg.gif +0 -0
  546. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-corners.gif +0 -0
  547. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-bg.gif +0 -0
  548. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-corners.gif +0 -0
  549. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-disabled-sides.gif +0 -0
  550. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-bg.gif +0 -0
  551. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-corners.gif +0 -0
  552. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-over-sides.gif +0 -0
  553. data/template-min/extjs/resources/themes/images/default/tab/tab-default-top-sides.gif +0 -0
  554. data/template-min/extjs/resources/themes/images/default/tip/tip-corners.gif +0 -0
  555. data/template-min/extjs/resources/themes/images/default/tip/tip-sides.gif +0 -0
  556. data/template-min/extjs/resources/themes/images/default/toolbar/more.gif +0 -0
  557. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-left.gif +0 -0
  558. data/template-min/extjs/resources/themes/images/default/toolbar/scroll-right.gif +0 -0
  559. data/template-min/extjs/resources/themes/images/default/toolbar/toolbar-default-bg.gif +0 -0
  560. data/template-min/extjs/resources/themes/images/default/tools/tool-sprite-tpl.gif +0 -0
  561. data/template-min/extjs/resources/themes/images/default/tools/tool-sprites.gif +0 -0
  562. data/template-min/extjs/resources/themes/images/default/tools/tools-sprites-trans.gif +0 -0
  563. data/template-min/extjs/resources/themes/images/default/tree/arrows.gif +0 -0
  564. data/template-min/extjs/resources/themes/images/default/tree/drop-above.gif +0 -0
  565. data/template-min/extjs/resources/themes/images/default/tree/drop-add.gif +0 -0
  566. data/template-min/extjs/resources/themes/images/default/tree/drop-append.gif +0 -0
  567. data/template-min/extjs/resources/themes/images/default/tree/drop-below.gif +0 -0
  568. data/template-min/extjs/resources/themes/images/default/tree/drop-between.gif +0 -0
  569. data/template-min/extjs/resources/themes/images/default/tree/drop-no.gif +0 -0
  570. data/template-min/extjs/resources/themes/images/default/tree/drop-over.gif +0 -0
  571. data/template-min/extjs/resources/themes/images/default/tree/drop-under.gif +0 -0
  572. data/template-min/extjs/resources/themes/images/default/tree/drop-yes.gif +0 -0
  573. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus-nl.gif +0 -0
  574. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-minus.gif +0 -0
  575. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus-nl.gif +0 -0
  576. data/template-min/extjs/resources/themes/images/default/tree/elbow-end-plus.gif +0 -0
  577. data/template-min/extjs/resources/themes/images/default/tree/elbow-end.gif +0 -0
  578. data/template-min/extjs/resources/themes/images/default/tree/elbow-line.gif +0 -0
  579. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus-nl.gif +0 -0
  580. data/template-min/extjs/resources/themes/images/default/tree/elbow-minus.gif +0 -0
  581. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus-nl.gif +0 -0
  582. data/template-min/extjs/resources/themes/images/default/tree/elbow-plus.gif +0 -0
  583. data/template-min/extjs/resources/themes/images/default/tree/elbow.gif +0 -0
  584. data/template-min/extjs/resources/themes/images/default/tree/folder-open.gif +0 -0
  585. data/template-min/extjs/resources/themes/images/default/tree/folder.gif +0 -0
  586. data/template-min/extjs/resources/themes/images/default/tree/leaf.gif +0 -0
  587. data/template-min/extjs/resources/themes/images/default/tree/loading.gif +0 -0
  588. data/template-min/extjs/resources/themes/images/default/tree/s.gif +0 -0
  589. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-bottom.gif +0 -0
  590. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-left.gif +0 -0
  591. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-right.gif +0 -0
  592. data/template-min/extjs/resources/themes/images/default/util/splitter/mini-top.gif +0 -0
  593. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-corners.gif +0 -0
  594. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-bottom-sides.gif +0 -0
  595. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-bottom-corners.gif +0 -0
  596. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-bottom-sides.gif +0 -0
  597. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-left-corners.gif +0 -0
  598. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-left-sides.gif +0 -0
  599. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-right-corners.gif +0 -0
  600. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-right-sides.gif +0 -0
  601. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-top-corners.gif +0 -0
  602. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-collapsed-top-sides.gif +0 -0
  603. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-corners.gif +0 -0
  604. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-left-sides.gif +0 -0
  605. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-corners.gif +0 -0
  606. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-right-sides.gif +0 -0
  607. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-corners.gif +0 -0
  608. data/template-min/extjs/resources/themes/images/default/window-header/window-header-default-top-sides.gif +0 -0
  609. data/template-min/extjs/resources/themes/images/default/window/window-default-corners.gif +0 -0
  610. data/template-min/extjs/resources/themes/images/default/window/window-default-sides.gif +0 -0
  611. data/template-min/favicon.ico +0 -0
  612. data/template-min/index-template.html +35 -0
  613. data/template-min/index.php +95 -0
  614. data/template-min/mobile-redirect.js +1 -0
  615. data/template-min/print-template.html +52 -0
  616. data/template-min/resources/css/app-de670120f43fdad3091a0cc2c10daadb.css +1 -0
  617. data/template-min/resources/images/ajax-loader.gif +0 -0
  618. data/template-min/resources/images/arrows.png +0 -0
  619. data/template-min/resources/images/comment-bubble.png +0 -0
  620. data/template-min/resources/images/comment.png +0 -0
  621. data/template-min/resources/images/default-guide.png +0 -0
  622. data/template-min/resources/images/doc-m.png +0 -0
  623. data/template-min/resources/images/down-arr.png +0 -0
  624. data/template-min/resources/images/elbow-end.gif +0 -0
  625. data/template-min/resources/images/example-icons.png +0 -0
  626. data/template-min/resources/images/expandcollapse.png +0 -0
  627. data/template-min/resources/images/group-expand-sprite.gif +0 -0
  628. data/template-min/resources/images/header.png +0 -0
  629. data/template-min/resources/images/hero-extjs4-alt.png +0 -0
  630. data/template-min/resources/images/icons.png +0 -0
  631. data/template-min/resources/images/icons.xcf +0 -0
  632. data/template-min/resources/images/link-green-standard-over.png +0 -0
  633. data/template-min/resources/images/link-green-standard.png +0 -0
  634. data/template-min/resources/images/loading.gif +0 -0
  635. data/template-min/resources/images/logo-screen-noglow.png +0 -0
  636. data/template-min/resources/images/logo.png +0 -0
  637. data/template-min/resources/images/member-collapsed.gif +0 -0
  638. data/template-min/resources/images/member-expanded.gif +0 -0
  639. data/template-min/resources/images/member-hover.gif +0 -0
  640. data/template-min/resources/images/more.png +0 -0
  641. data/template-min/resources/images/phone-l.jpg +0 -0
  642. data/template-min/resources/images/phone-p.jpg +0 -0
  643. data/template-min/resources/images/phone-small-l.jpg +0 -0
  644. data/template-min/resources/images/phone-small-p.jpg +0 -0
  645. data/template-min/resources/images/print.png +0 -0
  646. data/template-min/resources/images/sample-over.gif +0 -0
  647. data/template-min/resources/images/search-box.png +0 -0
  648. data/template-min/resources/images/tablet-l.jpg +0 -0
  649. data/template-min/resources/images/tablet-p.jpg +0 -0
  650. data/template-min/resources/images/tabs.png +0 -0
  651. data/template-min/resources/images/text-bg.gif +0 -0
  652. data/template-min/resources/images/vote-arrows.png +0 -0
  653. data/template-min/resources/images/welcome-bg-js4.gif +0 -0
  654. data/template-min/resources/images/x.png +0 -0
  655. data/template-min/resources/images/x12.png +0 -0
  656. data/template-min/resources/prettify/prettify.css +1 -0
  657. data/template-min/resources/prettify/prettify.js +30 -0
  658. data/template-min/template.html +44 -0
  659. metadata +828 -0
@@ -0,0 +1,111 @@
1
+ require 'optparse'
2
+
3
+ module JsDuck
4
+ module Options
5
+
6
+ # JSDuck version of OptionParser
7
+ #
8
+ # Enhanced with ability to output options help in two ways:
9
+ #
10
+ # - short list of all options (with the built-in #help method)
11
+ # - long description of one option (with the added #help_single method)
12
+ #
13
+ class HelpfulParser < ::OptionParser
14
+ def initialize
15
+ @full_options_index = {}
16
+ super
17
+ end
18
+
19
+ # Override the #on method to do some pre-processing on its
20
+ # parameters before passing them to the original #on method.
21
+ #
22
+ # Options are defined as usual:
23
+ #
24
+ # opts.on("-v", "--version", Type, "First line of description.",
25
+ # "Second line of description.",
26
+ # "Third line of description.")
27
+ #
28
+ # But only the first line of description will be passed to
29
+ # original #on method - meaning that #help method will also only
30
+ # list this first line.
31
+ #
32
+ # The remaining lines are saved to a separate place and can be
33
+ # retrieved through asking for full docs for an option with
34
+ # #help_single method.
35
+ #
36
+ def on(*opts, &block)
37
+ core = []
38
+ keys = []
39
+ desc = []
40
+
41
+ desc_started = false
42
+ opts.each do |o|
43
+ if desc_started
44
+ desc << o
45
+ elsif String === o
46
+ if o =~ /^-/
47
+ core << o
48
+ keys << o
49
+ else
50
+ core << o
51
+ desc << o
52
+ desc_started = true
53
+ end
54
+ else
55
+ core << o
56
+ end
57
+ end
58
+
59
+ full = {:keys => keys, :desc => desc}
60
+
61
+ keys.each do |op|
62
+ each_index_key(op) {|k| @full_options_index[k] = full }
63
+ end
64
+
65
+ super(*core, &block)
66
+ end
67
+
68
+ # Helper that turns option name like --images=PATH into list of
69
+ # keys by which we index the options:
70
+ #
71
+ # "--images=PATH" --> ["--images", "images"]
72
+ #
73
+ # For options containing "[no-]" all the alternative forms are expanded:
74
+ #
75
+ # "--[no-]seo" --> ["--[no-]seo", "[no-]seo", "--seo", "seo", "--no-seo", "no-seo"]
76
+ #
77
+ def each_index_key(option_name)
78
+ key = option_name.sub(/\[?=.*/, '')
79
+ plain_key = key.sub(/^-*/, '')
80
+ [key, plain_key].each do |k|
81
+ yield k
82
+ if k =~ /\[no-\]/
83
+ yield k.sub(/\[no-\]/, '')
84
+ yield k.sub(/\[no-\]/, 'no-')
85
+ end
86
+ end
87
+ end
88
+
89
+ # Returns long help text for a single option.
90
+ def help_single(option_name)
91
+ o = @full_options_index[option_name] || {:keys => [option_name], :desc => ["No such option. See --help=help"]}
92
+
93
+ r = []
94
+
95
+ r << ""
96
+ r << " " + o[:keys].join(", ")
97
+ r << ""
98
+
99
+ o[:desc].each do |line|
100
+ r << " " + line
101
+ end
102
+
103
+ r << ""
104
+ r << ""
105
+
106
+ return r.join("\n")
107
+ end
108
+ end
109
+
110
+ end
111
+ end
@@ -0,0 +1,60 @@
1
+ require 'jsduck/options/jsb'
2
+ require 'jsduck/logger'
3
+
4
+ module JsDuck
5
+ module Options
6
+
7
+ # Finalizes the list of input files.
8
+ class InputFiles
9
+ def initialize(opts)
10
+ @opts = opts
11
+ end
12
+
13
+ # Expands opts.input_files (modifying its contents):
14
+ #
15
+ # - When file is a directory, scans all JS, SCSS files in there.
16
+ # - When file is a .jsb3 file, extracts list of files from it.
17
+ # - Otherwise returns array with this same input filename.
18
+ #
19
+ # Then excludes the files and dirs listed in opts.exclude.
20
+ def expand!
21
+ @opts.input_files = expand_files(@opts.input_files)
22
+ exclude_files!(@opts.input_files, @opts.exclude)
23
+ end
24
+
25
+ private
26
+
27
+ def expand_files(unexpanded_files)
28
+ unexpanded_files.map {|fname| expand_filename(fname) }.flatten
29
+ end
30
+
31
+ def expand_filename(fname)
32
+ files = []
33
+
34
+ if File.exists?(fname)
35
+ if File.directory?(fname)
36
+ Dir[fname+"/**/*.{js,scss}"].each {|f| files << f }
37
+ elsif fname =~ /\.jsb3$/
38
+ Options::Jsb.read(fname).each {|fn| read_filenames(fn) }
39
+ else
40
+ files << fname
41
+ end
42
+ else
43
+ Logger.warn(nil, "File not found", {:filename => fname})
44
+ end
45
+
46
+ files
47
+ end
48
+
49
+ # Removes the files matching exclude_paths from list of files
50
+ def exclude_files!(files, exclude_paths)
51
+ exclude_paths.each do |exclude_path|
52
+ exclude_re = Regexp.new('\A' + Regexp.escape(exclude_path))
53
+ files.reject! {|f| f =~ exclude_re }
54
+ end
55
+ end
56
+
57
+ end
58
+
59
+ end
60
+ end
@@ -0,0 +1,25 @@
1
+ require 'jsduck/util/json'
2
+
3
+ module JsDuck
4
+ module Options
5
+
6
+ # Handles reading of JSB3 files.
7
+ class Jsb
8
+
9
+ # Extracts files of first build in JSB3 file.
10
+ def self.read(filename)
11
+ json = Util::Json.read(filename)
12
+ basedir = File.dirname(filename)
13
+
14
+ return json["builds"][0]["packages"].map do |package_id|
15
+ package = json["packages"].find {|p| p["id"] == package_id }
16
+ (package ? package["files"] : []).map do |file|
17
+ File.expand_path(basedir + "/" + file["path"] + file["name"])
18
+ end
19
+ end.flatten
20
+ end
21
+
22
+ end
23
+
24
+ end
25
+ end
@@ -0,0 +1,968 @@
1
+ require 'jsduck/options/helpful_parser'
2
+ require 'jsduck/options/record'
3
+ require 'jsduck/options/config'
4
+ require 'jsduck/warning/parser'
5
+ require 'jsduck/warning/warn_exception'
6
+ require 'jsduck/logger'
7
+ require 'jsduck/util/io'
8
+ require 'jsduck/version'
9
+
10
+ module JsDuck
11
+ module Options
12
+
13
+ # Performs parsing of JSDuck options.
14
+ class Parser
15
+
16
+ def initialize(file_class=File, config_class=Options::Config)
17
+ @file = file_class
18
+ @config = config_class
19
+
20
+ @opts = Options::Record.new
21
+ @defaults = {}
22
+
23
+ @root_dir = @file.dirname(@file.dirname(@file.dirname(@file.dirname(__FILE__))))
24
+
25
+ @optparser = Options::HelpfulParser.new
26
+ init_parser
27
+ end
28
+
29
+ # Parses array of command line options, returning
30
+ # Options::Record object containing all the options.
31
+ def parse(argv)
32
+ init_defaults
33
+ parse_options(argv)
34
+ auto_detect_config_file unless @opts.config
35
+ @opts
36
+ end
37
+
38
+ private
39
+
40
+ def init_parser
41
+ banner "Usage: jsduck [options] files/dirs..."
42
+
43
+ separator ""
44
+ separator "For example:"
45
+ separator ""
46
+ separator " # Documentation for builtin JavaScript classes like Array and String"
47
+ separator " jsduck --output output/dir --builtin-classes"
48
+ separator ""
49
+ separator " # Documentation for your own JavaScript"
50
+ separator " jsduck --output output/dir input-file.js some/input/dir"
51
+ separator ""
52
+ separator "The main options:"
53
+ separator ""
54
+
55
+ attribute :input_files, []
56
+ validator :input_files do
57
+ if @opts.input_files.empty? && !@opts.welcome && !@opts.guides && !@opts.videos && !@opts.examples
58
+ "Please specify some input files, otherwise there's nothing I can do :("
59
+ end
60
+ end
61
+
62
+ attribute :output
63
+ option('-o', '--output=PATH',
64
+ "Directory to write all this documentation.",
65
+ "",
66
+ "This option is REQUIRED. When the directory exists,",
67
+ "it will be overwritten. Give dash '-' as argument",
68
+ "to write docs to STDOUT (works only with --export).") do |path|
69
+ if path == "-"
70
+ @opts.output = :stdout
71
+ else
72
+ @opts.output = canonical(path)
73
+ @opts.cache_dir = @opts.output + "/.cache" unless @opts.cache_dir
74
+ end
75
+ end
76
+ validator :output do
77
+ if @opts.output == :stdout
78
+ # No output dir needed for export
79
+ if !@opts.export
80
+ "Output to STDOUT only works when using --export option"
81
+ end
82
+ elsif !@opts.output
83
+ "Please specify an output directory, where to write all this amazing documentation"
84
+ elsif @file.exists?(@opts.output) && !@file.directory?(@opts.output)
85
+ "The output directory is not really a directory at all :("
86
+ elsif !@file.exists?(@file.dirname(@opts.output))
87
+ "The parent directory for #{@opts.output} doesn't exist"
88
+ end
89
+ end
90
+
91
+ attribute :export
92
+ option('--export=full/examples',
93
+ "Exports docs in JSON.",
94
+ "",
95
+ "For each JavaScript class a JSON file gets written,",
96
+ "the contents of which are as follows:",
97
+ "",
98
+ "- full - docs and metadata for class and its members.",
99
+ "- examples - inline examples from classes and guides.") do |format|
100
+ @opts.export = format.to_sym
101
+ end
102
+ validator :export do
103
+ if ![nil, :full, :examples].include?(@opts.export)
104
+ "Unknown export format: #{@opts.export}"
105
+ end
106
+ end
107
+
108
+ option('--builtin-classes',
109
+ "Includes docs for JavaScript builtins.",
110
+ "",
111
+ "Docs for the following classes are included:",
112
+ "",
113
+ "- Array",
114
+ "- Boolean",
115
+ "- Date",
116
+ "- Function",
117
+ "- Number",
118
+ "- Object",
119
+ "- RegExp",
120
+ "- String") do
121
+ @opts.input_files << @root_dir + "/js-classes"
122
+ end
123
+
124
+ attribute :seo, false
125
+ option('--[no-]seo', "Enables SEO-friendly print version. (OFF)",
126
+ "",
127
+ "Instead of index.html creates index.php that will serve",
128
+ "the regular docs, print-friendly docs, and search-engine-",
129
+ "friendly docs (the latter two are pretty much the same).",
130
+ "",
131
+ "Disabled by default.") do |on|
132
+ @opts.seo = on
133
+ end
134
+
135
+ attribute :config
136
+ option('--config=PATH',
137
+ "Loads config options from JSON file.",
138
+ "",
139
+ "An alternative to listing all options on command line.",
140
+ "",
141
+ "When the current directory contains jsduck.json file",
142
+ "then options are automatically read from there.",
143
+ "",
144
+ "See also: https://github.com/senchalabs/jsduck/wiki/Config-file") do |path|
145
+ path = canonical(path)
146
+ if @file.exists?(path)
147
+ config = read_json_config(path)
148
+ else
149
+ Logger.fatal("The config file #{path} doesn't exist")
150
+ exit(1)
151
+ end
152
+ # treat paths inside JSON config relative to the location of
153
+ # config file. When done, switch back to current working dir.
154
+ @working_dir = @file.dirname(path)
155
+ parse_options(config)
156
+ @working_dir = nil
157
+ @opts.config = path
158
+ end
159
+
160
+ attribute :encoding
161
+ option('--encoding=NAME', "Input encoding (defaults to UTF-8).") do |encoding|
162
+ @opts.encoding = encoding
163
+ end
164
+
165
+ attribute :exclude, []
166
+ option('--exclude=PATH1,PATH2', Array, "Exclude input file or directory.",
167
+ "",
168
+ "For example to include all the subdirs of",
169
+ "/app/js except /app/js/new, run JSDuck with:",
170
+ "",
171
+ " jsduck /app/js --exclude /app/js/new") do |paths|
172
+ @opts.exclude += paths.map {|p| canonical(p) }
173
+ end
174
+
175
+ separator ""
176
+ separator "Customizing output:"
177
+ separator ""
178
+
179
+ attribute :title, "Documentation - JSDuck"
180
+ option('--title=TEXT',
181
+ "Custom title text for the documentation.",
182
+ "",
183
+ "Defaults to 'Documentation - JSDuck'",
184
+ "",
185
+ "The title will be used both inside <title> and in",
186
+ "the header of the page. Inside page header the left",
187
+ "part (from ' - ' separator) will be shown in bold.") do |text|
188
+ @opts.title = text
189
+ end
190
+
191
+ attribute :footer, "Generated on {DATE} by {JSDUCK} {VERSION}."
192
+ option('--footer=TEXT',
193
+ "Custom footer text for the documentation.",
194
+ "",
195
+ "The text can contain various placeholders:",
196
+ "",
197
+ " {DATE} - current date and time.",
198
+ " {JSDUCK} - link to JSDuck homepage.",
199
+ " {VERSION} - JSDuck version number.",
200
+ "",
201
+ "Defaults to: 'Generated on {DATE} by {JSDUCK} {VERSION}.'") do |text|
202
+ @opts.footer = text
203
+ end
204
+
205
+ attribute :head_html, ""
206
+ option('--head-html=HTML',
207
+ "HTML for the <head> section of index.html.",
208
+ "",
209
+ "Useful for adding extra <style> and other tags.",
210
+ "",
211
+ "Also a name of an HTML file can be passed.",
212
+ "Then the contents of that file will be read in.",
213
+ "",
214
+ "This option can be used repeatedly to append several",
215
+ "things to the header.") do |html|
216
+ @opts.head_html += maybe_file(html)
217
+ end
218
+
219
+ attribute :body_html, ""
220
+ option('--body-html=HTML',
221
+ "HTML for the <body> section of index.html.",
222
+ "",
223
+ "Useful for adding extra markup to the page.",
224
+ "",
225
+ "Also a name of an HTML file can be passed.",
226
+ "Then the contents of that file will be read in.",
227
+ "",
228
+ "This option can be used repeatedly to append several",
229
+ "things to the body.") do |html|
230
+ @opts.body_html += maybe_file(html)
231
+ end
232
+
233
+ attribute :css, ""
234
+ option('--css=CSS',
235
+ "Extra CSS rules to include to the page.",
236
+ "",
237
+ "Also a name of a CSS file can be passed.",
238
+ "Then the contents of that file will be read in.",
239
+ "",
240
+ "This option can be used repeatedly to append multiple",
241
+ "chunks of CSS.") do |css|
242
+ @opts.css += maybe_file(css)
243
+ end
244
+
245
+ attribute :message, ""
246
+ option('--message=HTML',
247
+ "(Warning) message to show prominently.",
248
+ "",
249
+ "Useful for warning users that they are viewing an old",
250
+ "version of the docs, and prividing a link to the new",
251
+ "version.") do |html|
252
+ @opts.message += html
253
+ end
254
+
255
+ attribute :welcome
256
+ option('--welcome=PATH',
257
+ "File with content for welcome page.",
258
+ "",
259
+ "Either HTML or Markdown file with content for welcome page.",
260
+ "HTML file must only contain the <body> part of the page.",
261
+ "Markdown file must have a .md or .markdown extension.",
262
+ "",
263
+ "See also: https://github.com/senchalabs/jsduck/wiki/Welcome-page") do |path|
264
+ @opts.welcome = canonical(path)
265
+ end
266
+
267
+ attribute :guides
268
+ option('--guides=PATH',
269
+ "JSON file describing the guides.",
270
+ "",
271
+ "The file should be in a dir containing the actual guides.",
272
+ "A guide is a dir containing README.md, icon.png, and",
273
+ "other images referenced by the README.md file.",
274
+ "",
275
+ "See also: https://github.com/senchalabs/jsduck/wiki/Guides") do |path|
276
+ @opts.guides = canonical(path)
277
+ end
278
+
279
+ attribute :guides_toc_level, 2
280
+ option('--guides-toc-level=LEVEL',
281
+ "Max heading level for guides' tables of contents.",
282
+ "",
283
+ "Values between 1 and 6 define the maximum level of a heading",
284
+ "to be included into guides' Table of Contents:",
285
+ "",
286
+ "1 - Hides the table of contents.",
287
+ "2 - <H2> headings are included.",
288
+ "3 - <H2>,<H3> headings are included.",
289
+ "4 - <H2>,<H3>,<H4> headings are included.",
290
+ "5 - <H2>,<H3>,<H4>,<H5> headings are included.",
291
+ "6 - <H2>,<H3>,<H4>,<H5>,<H6> headings are included.") do |level|
292
+ @opts.guides_toc_level = level.to_i
293
+ end
294
+ validator :guides_toc_level do
295
+ if !(1..6).include?(@opts.guides_toc_level)
296
+ "Unsupported --guides-toc-level: '#{@opts.guides_toc_level}'"
297
+ end
298
+ end
299
+
300
+ attribute :videos
301
+ option('--videos=PATH',
302
+ "JSON file describing the videos.",
303
+ "",
304
+ "See also: https://github.com/senchalabs/jsduck/wiki/Videos") do |path|
305
+ @opts.videos = canonical(path)
306
+ end
307
+
308
+ attribute :examples
309
+ option('--examples=PATH',
310
+ "JSON file describing the examples.",
311
+ "",
312
+ "See also: https://github.com/senchalabs/jsduck/wiki/Examples") do |path|
313
+ @opts.examples = canonical(path)
314
+ end
315
+
316
+ attribute :categories
317
+ option('--categories=PATH',
318
+ "JSON file defining categories for classes.",
319
+ "",
320
+ "Without this option the classes will be categorized",
321
+ "based on how they are namespaced.",
322
+ "",
323
+ "See also: https://github.com/senchalabs/jsduck/wiki/Categories") do |path|
324
+ @opts.categories = canonical(path)
325
+ end
326
+
327
+ attribute :source, true
328
+ option('--[no-]source',
329
+ "Enables output of source files. (ON)",
330
+ "",
331
+ "Enabled by default.") do |on|
332
+ @opts.source = on
333
+ end
334
+
335
+ attribute :images, []
336
+ option('--images=PATH1,PATH2', Array,
337
+ "Paths for images referenced by {@img} tag.",
338
+ "",
339
+ "This option only applies to {@img} tags used in",
340
+ "API (classes/members) documentation. Images used",
341
+ "in guides must be located inside the directory of",
342
+ "the specific guide.") do |paths|
343
+ @opts.images += paths.map {|p| canonical(p) }
344
+ end
345
+
346
+ attribute :tests, false
347
+ option('--[no-]tests',
348
+ "Creates page for testing inline examples. (OFF)",
349
+ "",
350
+ "Disabled by default.") do |on|
351
+ @opts.tests = on
352
+ end
353
+
354
+ attribute :import, []
355
+ option('--import=VERSION:PATH',
356
+ "Imports exported docs generating @since & @new.",
357
+ "",
358
+ "First one should generate JSDuck export of some",
359
+ "older versions of his software:",
360
+ "",
361
+ " $ jsduck app/1.0/src --export=full -o exports/1.0",
362
+ " $ jsduck app/2.0/src --export=full -o exports/2.0",
363
+ "",
364
+ "And then this exported data can be supplied for",
365
+ "--import to generate versioning data:",
366
+ "",
367
+ " --import='1.0:exports/1.0'",
368
+ " --import='2.0:exports/2.0'",
369
+ " --import='3.0'",
370
+ "",
371
+ "Several versions can be imported using the option multiple",
372
+ "times. The last version must always be the current one",
373
+ "without the :PATH portion.",
374
+ "",
375
+ "JSDuck will then check in which version every class/member",
376
+ "first appears in and tag it with an appropriate @since tag.",
377
+ "Things appearing only in the latest version will also get",
378
+ "a @new tag (unless --new-since option is used).",
379
+ "",
380
+ "See also: https://github.com/senchalabs/jsduck/wiki/@since") do |v|
381
+ if v =~ /\A(.*?):(.*)\z/
382
+ @opts.import << {:version => $1, :path => canonical($2)}
383
+ else
384
+ @opts.import << {:version => v}
385
+ end
386
+ end
387
+
388
+ attribute :new_since
389
+ option('--new-since=VERSION',
390
+ "Since when to label items with @new tag.",
391
+ "",
392
+ "The VERSION must be one of the version names defined",
393
+ "with --import option.",
394
+ "",
395
+ "Defaults to the last version listed by --import.") do |v|
396
+ @opts.new_since = v
397
+ end
398
+
399
+ attribute :comments_url
400
+ option('--comments-url=URL',
401
+ "Address of comments server.",
402
+ "",
403
+ "For example: http://projects.sencha.com/auth",
404
+ "",
405
+ "Must be used together with --comments-domain option.") do |url|
406
+ @opts.comments_url = url
407
+ end
408
+
409
+ attribute :comments_domain
410
+ option('--comments-domain=STRING',
411
+ "A name identifying the subset of comments.",
412
+ "",
413
+ "A string consisting of <name>/<version>.",
414
+ "",
415
+ "For example: ext-js/4",
416
+ "",
417
+ "Must be used together with --comments-url option.") do |domain|
418
+ @opts.comments_domain = domain
419
+ end
420
+
421
+ attribute :search, {}
422
+ option('--search-url=URL',
423
+ "Address of guides search server.",
424
+ "",
425
+ "When supplied, the search for guides is performed through this",
426
+ "external service and the results merged together with API search.",
427
+ "The search server must respond to JSONP requests.",
428
+ "",
429
+ "For example: http://sencha.com/docsearch",
430
+ "",
431
+ "Must be used together with --search-domain option.",
432
+ "",
433
+ "This option is EXPERIMENTAL.") do |url|
434
+ @opts.search[:url] = url
435
+ end
436
+
437
+ option('--search-domain=STRING',
438
+ "A name identifying the subset to search from.",
439
+ "",
440
+ "A string consisting of <name>/<version>.",
441
+ "",
442
+ "Tells the search engine which product and version",
443
+ "to include into search.",
444
+ "",
445
+ "For example: Ext JS/4.2.0",
446
+ "",
447
+ "Must be used together with --search-url option.",
448
+ "",
449
+ "This option is EXPERIMENTAL.") do |domain|
450
+ @opts.search[:product], @opts.search[:version] = domain.split(/\//)
451
+ end
452
+
453
+ separator ""
454
+ separator "Tweaking:"
455
+ separator ""
456
+
457
+ attribute :tags, []
458
+ option('--tags=PATH1,PATH2', Array,
459
+ "Paths to custom tag implementations.",
460
+ "",
461
+ "Paths can point to specific Ruby files or to a directory,",
462
+ "in which case all ruby files in that directory are loaded.",
463
+ "",
464
+ "See also: https://github.com/senchalabs/jsduck/wiki/Custom-tags") do |paths|
465
+ @opts.tags += paths.map {|p| canonical(p) }
466
+ end
467
+
468
+ attribute :ignore_global, false
469
+ option('--[no-]ignore-global',
470
+ "Turns off the creation of 'global' class. (OFF)",
471
+ "",
472
+ "The 'global' class gets created when members that",
473
+ "don't belong to any class are found - all these",
474
+ "members will be placed into the 'global' class.",
475
+ "",
476
+ "Using this option won't suppress the warning that's",
477
+ "given when global members are found. For that you",
478
+ "need to additionally use --warnings=-global",
479
+ "",
480
+ "Disabled by default.") do |on|
481
+ @opts.ignore_global = on
482
+ end
483
+
484
+ attribute :external, [
485
+ # JavaScript builtins
486
+ "Object",
487
+ "String",
488
+ "Number",
489
+ "Boolean",
490
+ "RegExp",
491
+ "Function",
492
+ "Array",
493
+ "Arguments",
494
+ "Date",
495
+ # JavaScript builtin error classes
496
+ # https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Error
497
+ "Error",
498
+ "EvalError",
499
+ "RangeError",
500
+ "ReferenceError",
501
+ "SyntaxError",
502
+ "TypeError",
503
+ "URIError",
504
+ # Special anything-goes type
505
+ "Mixed",
506
+ ]
507
+ option('--external=Foo,Bar,Baz', Array,
508
+ "Declares list of external classes.",
509
+ "",
510
+ "These classes will then no more generate warnings",
511
+ "when used in type definitions or inherited from.",
512
+ "",
513
+ "Multiple classes can be given in comma-separated list,",
514
+ "or by using the option repeatedly.",
515
+ "",
516
+ "The wildcard '*' can be used to match a set of classes",
517
+ "e.g. to ignore all classes of a particular namespace:",
518
+ "",
519
+ " --external='Foo.*'",
520
+ "",
521
+ "The special keyword '@browser' includes a slew of standard",
522
+ "browser API classes like HTMLElement and XMLHttpRequest:",
523
+ "",
524
+ " --external='@browser'",
525
+ "",
526
+ "The list of these classes comes from Mozilla docs, not",
527
+ "including experimental, non-standard or obsolete APIs:",
528
+ "https://developer.mozilla.org/en-US/docs/Web/API",
529
+ "",
530
+ "NB! If you only need to reference a few of these classes",
531
+ "in your docs, it's better to define these explicitly, as",
532
+ "using '@browser' will bring along a slew of names like",
533
+ "Node, Attr, Blob, CSS, Range, Element, which you might",
534
+ "mistakenly use in your docs by writing Node instead of",
535
+ "MyNamespace.Node and JSDuck won't warn you about it.") do |classes|
536
+ @opts.external += classes
537
+ end
538
+
539
+ attribute :ext4_events
540
+ option('--[no-]ext4-events',
541
+ "Forces Ext4 options param on events. (AUTO)",
542
+ "",
543
+ "In Ext JS 4 and Sencha Touch 2 all event handlers are",
544
+ "passed an additional options object at the end of the",
545
+ "parameters list. This options object is skipped in the",
546
+ "documentation of Ext4/Touch2 events, so it needs to be",
547
+ "appended by JSDuck.",
548
+ "",
549
+ "The default is to auto-detect if we're using Ext JS 4",
550
+ "or Sencha Touch 2 based on whether the code defines",
551
+ "classes using Ext.define(), and only then append the",
552
+ "options parameter. This should work most of the time.",
553
+ "",
554
+ "Use this option to override the auto-detection.") do |on|
555
+ @opts.ext4_events = on
556
+ end
557
+
558
+ attribute :examples_base_url
559
+ option('--examples-base-url=URL',
560
+ "Base URL for examples with relative URL-s.",
561
+ " ",
562
+ "Defaults to: 'extjs-build/examples/'") do |path|
563
+ @opts.examples_base_url = path
564
+ end
565
+
566
+ attribute :link, '<a href="#!/api/%c%-%m" rel="%c%-%m" class="docClass">%a</a>'
567
+ option('--link=TPL',
568
+ "HTML template for replacing {@link}.",
569
+ "",
570
+ "Possible placeholders:",
571
+ "",
572
+ "%c - full class name (e.g. 'Ext.Panel')",
573
+ "%m - class member name prefixed with member type",
574
+ " (e.g. 'method-urlEncode')",
575
+ "%# - inserts '#' if member name present",
576
+ "%- - inserts '-' if member name present",
577
+ "%a - anchor text for link",
578
+ "",
579
+ "Defaults to: '<a href=\"#!/api/%c%-%m\" rel=\"%c%-%m\" class=\"docClass\">%a</a>'") do |tpl|
580
+ @opts.link = tpl
581
+ end
582
+
583
+ attribute :img, '<p><img src="%u" alt="%a" width="%w" height="%h"></p>'
584
+ option('--img=TPL',
585
+ "HTML template for replacing {@img}.",
586
+ "",
587
+ "Possible placeholders:",
588
+ "",
589
+ "%u - URL from @img tag (e.g. 'some/path.png')",
590
+ "%a - alt text for image",
591
+ "%w - width of image",
592
+ "%h - height of image",
593
+ "",
594
+ "Defaults to: '<p><img src=\"%u\" alt=\"%a\" width=\"%w\" height=\"%h\"></p>'") do |tpl|
595
+ @opts.img = tpl
596
+ end
597
+
598
+ attribute :eg_iframe
599
+ option('--eg-iframe=PATH',
600
+ "HTML file used to display inline examples.",
601
+ "",
602
+ "The file will be used inside <iframe> that renders the",
603
+ "example. Not just any HTML file will work - it needs to",
604
+ "define loadInlineExample function that will be called",
605
+ "with the example code.",
606
+ "",
607
+ "See also: https://github.com/senchalabs/jsduck/wiki/Inline-examples") do |path|
608
+ @opts.eg_iframe = canonical(path)
609
+ end
610
+
611
+ attribute :ext_namespaces
612
+ option('--ext-namespaces=Ext,Foo', Array,
613
+ "Additional Ext JS namespaces to recognize.",
614
+ "",
615
+ "Defaults to 'Ext'",
616
+ "",
617
+ "Useful when using Ext JS in sandbox mode where instead",
618
+ "of Ext.define() your code contains YourNs.define().",
619
+ "In such case pass --ext-namespaces=Ext,YourNS option",
620
+ "and JSDuck will recognize both Ext.define() and",
621
+ "YourNs.define() plus few other things that depend on",
622
+ "Ext namespace like Ext.emptyFn.") do |namespaces|
623
+ @opts.ext_namespaces = namespaces
624
+ end
625
+
626
+ attribute :touch_examples_ui, false
627
+ option('--[no-]touch-examples-ui',
628
+ "Turns on phone/tablet UI for examples. (OFF)",
629
+ "",
630
+ "This is a very Sencha Touch 2 docs specific option.",
631
+ "Effects both normal- and inline-examples.",
632
+ "",
633
+ "Disabled by default") do |on|
634
+ @opts.touch_examples_ui = on
635
+ end
636
+
637
+ attribute :ignore_html, {}
638
+ option('--ignore-html=TAG1,TAG2', Array,
639
+ "Ignore a particular unclosed HTML tag.",
640
+ "",
641
+ "Normally all tags like <foo> that aren't followed at some",
642
+ "point with </foo> will get automatically closed by JSDuck",
643
+ "and a warning will be generated. Except standard void tags",
644
+ "like <img> and <br>. Use this option to specify additional",
645
+ "tags not requirering a closing tag.",
646
+ "",
647
+ "Useful for ignoring the ExtJS preprocessor directives",
648
+ "<locale> and <debug> which would otherwise be reported",
649
+ "as unclosed tags.") do |tags|
650
+ tags.each do |tag|
651
+ @opts.ignore_html[tag] = true
652
+ end
653
+ end
654
+
655
+ separator ""
656
+ separator "Performance:"
657
+ separator ""
658
+
659
+ attribute :processes
660
+ option('-p', '--processes=COUNT',
661
+ "The number of parallel processes to use.",
662
+ "",
663
+ "Defaults to the number of processors/cores.",
664
+ "",
665
+ "Set to 0 to disable parallel processing completely.",
666
+ "This is often useful in debugging to get deterministic",
667
+ "results.",
668
+ "",
669
+ "In Windows this option is disabled.") do |count|
670
+ @opts.processes = count.to_i
671
+ end
672
+ validator :processes do
673
+ if @opts.processes.to_i < 0
674
+ "Number of processes must be a positive number."
675
+ end
676
+ end
677
+
678
+ attribute :cache, false
679
+ option('--[no-]cache',
680
+ "Turns parser cache on/off. (OFF)",
681
+ "",
682
+ "When enabled, the results of parsing source files is saved",
683
+ "inside the JSDuck output directory. Next time JSDuck runs,",
684
+ "only the files that have changed are parsed again, others",
685
+ "are read from the cache.",
686
+ "",
687
+ "Note that switching between Ruby and/or JSDuck versions",
688
+ "invalidates the whole cache. But changes in custom tags",
689
+ "don't invalidate the cache, so avoid caching when developing",
690
+ "your custom tags.",
691
+ "",
692
+ "To change the cache directory location, use --cache-dir.",
693
+ "",
694
+ "Disabled by default.") do |on|
695
+ @opts.cache = on
696
+ end
697
+
698
+ attribute :cache_dir
699
+ option('--cache-dir=PATH',
700
+ "Directory where to cache the parsed source.",
701
+ "",
702
+ "Defaults to: <output-dir>/.cache",
703
+ "",
704
+ "Each project needs to have a separate cache directory.",
705
+ "Instead of writing the cache into the output directory,",
706
+ "one might consider keeping it together with the source",
707
+ "files.",
708
+ "",
709
+ "Note that JSDuck ensures that the <output-dir>/.cache",
710
+ "dir is preserved when the rest of the <output-dir> gets",
711
+ "wiped clean during the docs generation. If you specify",
712
+ "cache dir like <output-dir>/.mycache, then this will also",
713
+ "be cleaned up during docs generation, and the caching",
714
+ "won't work.",
715
+ "",
716
+ "This option only has an effect when --cache is also used.") do |path|
717
+ @opts.cache_dir = path
718
+ end
719
+
720
+ separator ""
721
+ separator "Debugging:"
722
+ separator ""
723
+
724
+ attribute :verbose, false
725
+ option('-v', '--verbose',
726
+ "Turns on excessive logging.",
727
+ "",
728
+ "Log messages are written to STDERR.") do
729
+ @opts.verbose = true
730
+ end
731
+
732
+ attribute :warnings, []
733
+ option('--warnings=+A,-B,+C',
734
+ "Turns warnings selectively on/off.",
735
+ "",
736
+ " +all - to turn on all warnings.",
737
+ " -all - to turn off all warnings.",
738
+ "",
739
+ "Additionally a pattern can be specified to only apply the",
740
+ "setting for a particular set of files. (The pattern is just",
741
+ "a string against which the the full path of each filename",
742
+ "gets matched - attempting to use a pattern like '../foo' will",
743
+ "fail.) For example to turn off all warnings related to chart",
744
+ "classes:",
745
+ "",
746
+ " -all:extjs/src/chart",
747
+ "",
748
+ "Note, that the order of the rules matters. When you first",
749
+ "say +link and then -all, the result will be that all warnings",
750
+ "get disabled.",
751
+ "",
752
+ "List of all available warning types:",
753
+ "(Those with '+' in front of them default to on)",
754
+ "",
755
+ *Logger.doc_warnings) do |warnings|
756
+ begin
757
+ @opts.warnings += Warning::Parser.new(warnings).parse
758
+ rescue Warning::WarnException => e
759
+ Logger.warn(nil, e.message)
760
+ end
761
+ end
762
+
763
+ attribute :warnings_exit_nonzero, false
764
+ option('--[no-]warnings-exit-nonzero',
765
+ "Exits with non-zero exit code on warnings. (OFF)",
766
+ "",
767
+ "By default JSDuck only exits with non-zero exit code",
768
+ "when a fatal error is encountered (code 1).",
769
+ "",
770
+ "With this option the exit code will be 2 when any warning",
771
+ "gets printed.") do |on|
772
+ @opts.warnings_exit_nonzero = on
773
+ end
774
+
775
+ attribute :color
776
+ option('--[no-]color',
777
+ "Turn on/off colorized terminal output. (AUTO)",
778
+ "",
779
+ "By default the colored output is on, but gets disabled",
780
+ "automatically when output is not an interactive terminal",
781
+ "(or when running on Windows system).") do |on|
782
+ @opts.color = on
783
+ end
784
+
785
+ attribute :pretty_json
786
+ option('--[no-]pretty-json',
787
+ "Turns on pretty-printing of JSON. (OFF)",
788
+ "",
789
+ "This is useful when studying the JSON files generated",
790
+ "by --export option. But the option effects any JSON",
791
+ "that gets generated, so it's also useful when debugging",
792
+ "the resource files generated for the docs app.") do |on|
793
+ @opts.pretty_json = on
794
+ end
795
+
796
+ attribute :template, @root_dir + "/template-min"
797
+ option('--template=PATH',
798
+ "Dir containing the UI template files.",
799
+ "",
800
+ "Useful when developing the template files.") do |path|
801
+ @opts.template = canonical(path)
802
+ end
803
+ validator :template do
804
+ if @opts.export
805
+ # Don't check these things when exporting
806
+ elsif !@file.exists?(@opts.template + "/extjs")
807
+ [
808
+ "Oh noes! The template directory does not contain extjs/ directory :(",
809
+ "Please copy ExtJS over to template/extjs or create symlink.",
810
+ "For example:",
811
+ " $ cp -r /path/to/ext-4.0.0 " + @opts.template + "/extjs",
812
+ ]
813
+ elsif !@file.exists?(@opts.template + "/resources/css")
814
+ [
815
+ "Oh noes! CSS files for custom ExtJS theme missing :(",
816
+ "Please compile SASS files in template/resources/sass with compass.",
817
+ "For example:",
818
+ " $ compass compile " + @opts.template + "/resources/sass",
819
+ ]
820
+ end
821
+ end
822
+
823
+ attribute :template_links, false
824
+ option('--[no-]template-links',
825
+ "Creates symlinks to UI template files. (OFF)",
826
+ "",
827
+ "Useful for template files development.",
828
+ "Only works on platforms supporting symbolic links.") do |on|
829
+ @opts.template_links = on
830
+ end
831
+
832
+ option('-d', '--debug',
833
+ "Same as --template=template --template-links.",
834
+ "",
835
+ "Useful shorthand during development.") do
836
+ @opts.template = canonical("template")
837
+ @opts.template_links = true
838
+ end
839
+
840
+ attribute :extjs_path, "extjs/ext-all.js"
841
+ option('--extjs-path=PATH',
842
+ "Path for main ExtJS JavaScript file.",
843
+ "",
844
+ "This is the ExtJS file that's used by the docs app UI.",
845
+ "",
846
+ "Defaults to extjs/ext-all.js",
847
+ "",
848
+ "Useful for switching to extjs/ext-all-debug.js in development.") do |path|
849
+ @opts.extjs_path = path # NB! must be relative path
850
+ end
851
+
852
+ attribute :local_storage_db, "docs"
853
+ option('--local-storage-db=NAME',
854
+ "Prefix for LocalStorage database names.",
855
+ "",
856
+ "Defaults to 'docs'") do |name|
857
+ @opts.local_storage_db = name
858
+ end
859
+
860
+ option('-h', '--help[=--some-option]',
861
+ "Use --help=--option for help on option.",
862
+ "",
863
+ "For example To get help on --processes option any of the",
864
+ "following will work:",
865
+ "",
866
+ " --help=--processes",
867
+ " --help=processes",
868
+ " --help=-p",
869
+ " --help=p") do |v|
870
+ if v
871
+ puts @optparser.help_single(v)
872
+ else
873
+ puts @optparser.help
874
+ end
875
+ exit
876
+ end
877
+
878
+ option('--version', "Prints JSDuck version") do
879
+ puts "JSDuck " + JsDuck::VERSION + " (Ruby #{RUBY_VERSION})"
880
+ exit
881
+ end
882
+ end
883
+
884
+ # A little language for describing the options.
885
+ # Simple delegetions to @optparser and @opts.
886
+
887
+ def banner(txt)
888
+ @optparser.banner = txt
889
+ end
890
+
891
+ def separator(txt)
892
+ @optparser.separator(txt)
893
+ end
894
+
895
+ def option(*params, &block)
896
+ @optparser.on(*params, &block)
897
+ end
898
+
899
+ def attribute(name, value=nil)
900
+ @opts.attribute(name, value)
901
+ @defaults[name] = value
902
+ end
903
+
904
+ def validator(name, &block)
905
+ @opts.validator(name, &block)
906
+ end
907
+
908
+ # Initializes attributes with default values. This is needed to
909
+ # be able to run the most tests without re-instantiating this
910
+ # class every time.
911
+ def init_defaults
912
+ @defaults.each_pair do |name, value|
913
+ @opts.send(:"#{name}=", clone(value))
914
+ end
915
+ end
916
+
917
+ # clones hashes and arrays.
918
+ def clone(obj)
919
+ (obj.is_a?(Array) || obj.is_a?(Hash)) ? obj.clone : obj
920
+ end
921
+
922
+ # Parses the given command line options
923
+ # (could have also been read from config file)
924
+ def parse_options(options)
925
+ @optparser.parse!(options).each do |fname|
926
+ @opts.input_files << canonical(fname)
927
+ end
928
+ end
929
+
930
+ # Reads jsduck.json file in current directory
931
+ def auto_detect_config_file
932
+ fname = Dir.pwd + "/jsduck.json"
933
+ if @file.exists?(fname)
934
+ Logger.log("Auto-detected config file", fname)
935
+ parse_options(read_json_config(fname))
936
+ end
937
+ end
938
+
939
+ # Reads JSON configuration from file and returns an array of
940
+ # config options that can be feeded into optparser.
941
+ def read_json_config(filename)
942
+ @config.read(filename)
943
+ end
944
+
945
+ # When given string is a file, returns the contents of the file.
946
+ # Otherwise returns the string unchanged.
947
+ def maybe_file(str)
948
+ path = canonical(str)
949
+ if @file.exists?(path)
950
+ Util::IO.read(path)
951
+ else
952
+ str
953
+ end
954
+ end
955
+
956
+ # Converts relative path to full path
957
+ #
958
+ # Especially important for running on Windows where C:\foo\bar
959
+ # pathnames are converted to C:/foo/bar which ruby can work on
960
+ # more easily.
961
+ def canonical(path)
962
+ @file.expand_path(path, @working_dir)
963
+ end
964
+
965
+ end
966
+
967
+ end
968
+ end