solvas-jsduck 6.0.0.beta.1888

Sign up to get free protection for your applications and to get access to all the features.
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