jsduck 0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/COPYING +674 -0
- data/README.md +197 -0
- data/Rakefile +23 -0
- data/bin/jsduck +63 -0
- data/jsduck.gemspec +21 -0
- data/lib/jsduck/aggregator.rb +104 -0
- data/lib/jsduck/app.rb +89 -0
- data/lib/jsduck/cfg_table.rb +21 -0
- data/lib/jsduck/class.rb +116 -0
- data/lib/jsduck/doc_formatter.rb +69 -0
- data/lib/jsduck/doc_parser.rb +277 -0
- data/lib/jsduck/event_table.rb +33 -0
- data/lib/jsduck/lexer.rb +193 -0
- data/lib/jsduck/long_params.rb +31 -0
- data/lib/jsduck/merger.rb +286 -0
- data/lib/jsduck/method_table.rb +45 -0
- data/lib/jsduck/page.rb +56 -0
- data/lib/jsduck/parser.rb +195 -0
- data/lib/jsduck/property_table.rb +21 -0
- data/lib/jsduck/short_params.rb +28 -0
- data/lib/jsduck/table.rb +109 -0
- data/lib/jsduck/tree.rb +104 -0
- data/lib/jsduck/tree_icons.rb +19 -0
- data/template/index.html +45 -0
- data/template/resources/TabCloseMenu.js +150 -0
- data/template/resources/block-bottom.gif +0 -0
- data/template/resources/block-top.gif +0 -0
- data/template/resources/class.gif +0 -0
- data/template/resources/cmp.gif +0 -0
- data/template/resources/collapse-all.gif +0 -0
- data/template/resources/config.gif +0 -0
- data/template/resources/css/ext-all.css +6789 -0
- data/template/resources/css/xtheme-gray.css +1654 -0
- data/template/resources/docs.css +359 -0
- data/template/resources/docs.gif +0 -0
- data/template/resources/docs.js +672 -0
- data/template/resources/event.gif +0 -0
- data/template/resources/expand-all.gif +0 -0
- data/template/resources/expand-bg-over.gif +0 -0
- data/template/resources/expand-bg.gif +0 -0
- data/template/resources/expand-members.gif +0 -0
- data/template/resources/ext-all.js +11 -0
- data/template/resources/ext-base.js +7 -0
- data/template/resources/extanim32.gif +0 -0
- data/template/resources/fav.gif +0 -0
- data/template/resources/favicon.ico +0 -0
- data/template/resources/hd-bg.png +0 -0
- data/template/resources/hide-inherited.gif +0 -0
- data/template/resources/images/default/box/corners-blue.gif +0 -0
- data/template/resources/images/default/box/corners.gif +0 -0
- data/template/resources/images/default/box/l-blue.gif +0 -0
- data/template/resources/images/default/box/l.gif +0 -0
- data/template/resources/images/default/box/r-blue.gif +0 -0
- data/template/resources/images/default/box/r.gif +0 -0
- data/template/resources/images/default/box/tb-blue.gif +0 -0
- data/template/resources/images/default/box/tb.gif +0 -0
- data/template/resources/images/default/button/arrow.gif +0 -0
- data/template/resources/images/default/button/btn.gif +0 -0
- data/template/resources/images/default/button/group-cs.gif +0 -0
- data/template/resources/images/default/button/group-lr.gif +0 -0
- data/template/resources/images/default/button/group-tb.gif +0 -0
- data/template/resources/images/default/button/s-arrow-b-noline.gif +0 -0
- data/template/resources/images/default/button/s-arrow-b.gif +0 -0
- data/template/resources/images/default/button/s-arrow-bo.gif +0 -0
- data/template/resources/images/default/button/s-arrow-noline.gif +0 -0
- data/template/resources/images/default/button/s-arrow-o.gif +0 -0
- data/template/resources/images/default/button/s-arrow.gif +0 -0
- data/template/resources/images/default/dd/drop-add.gif +0 -0
- data/template/resources/images/default/dd/drop-no.gif +0 -0
- data/template/resources/images/default/dd/drop-yes.gif +0 -0
- data/template/resources/images/default/editor/tb-sprite.gif +0 -0
- data/template/resources/images/default/form/checkbox.gif +0 -0
- data/template/resources/images/default/form/clear-trigger.gif +0 -0
- data/template/resources/images/default/form/clear-trigger.psd +0 -0
- data/template/resources/images/default/form/date-trigger.gif +0 -0
- data/template/resources/images/default/form/date-trigger.psd +0 -0
- data/template/resources/images/default/form/error-tip-corners.gif +0 -0
- data/template/resources/images/default/form/exclamation.gif +0 -0
- data/template/resources/images/default/form/radio.gif +0 -0
- data/template/resources/images/default/form/search-trigger.gif +0 -0
- data/template/resources/images/default/form/search-trigger.psd +0 -0
- data/template/resources/images/default/form/text-bg.gif +0 -0
- data/template/resources/images/default/form/trigger-square.gif +0 -0
- data/template/resources/images/default/form/trigger-square.psd +0 -0
- data/template/resources/images/default/form/trigger-tpl.gif +0 -0
- data/template/resources/images/default/form/trigger.gif +0 -0
- data/template/resources/images/default/form/trigger.psd +0 -0
- data/template/resources/images/default/gradient-bg.gif +0 -0
- data/template/resources/images/default/grid/arrow-left-white.gif +0 -0
- data/template/resources/images/default/grid/arrow-right-white.gif +0 -0
- data/template/resources/images/default/grid/col-move-bottom.gif +0 -0
- data/template/resources/images/default/grid/col-move-top.gif +0 -0
- data/template/resources/images/default/grid/columns.gif +0 -0
- data/template/resources/images/default/grid/dirty.gif +0 -0
- data/template/resources/images/default/grid/done.gif +0 -0
- data/template/resources/images/default/grid/drop-no.gif +0 -0
- data/template/resources/images/default/grid/drop-yes.gif +0 -0
- data/template/resources/images/default/grid/footer-bg.gif +0 -0
- data/template/resources/images/default/grid/grid-blue-hd.gif +0 -0
- data/template/resources/images/default/grid/grid-blue-split.gif +0 -0
- data/template/resources/images/default/grid/grid-hrow.gif +0 -0
- data/template/resources/images/default/grid/grid-loading.gif +0 -0
- data/template/resources/images/default/grid/grid-split.gif +0 -0
- data/template/resources/images/default/grid/grid-vista-hd.gif +0 -0
- data/template/resources/images/default/grid/grid3-hd-btn.gif +0 -0
- data/template/resources/images/default/grid/grid3-hrow-over.gif +0 -0
- data/template/resources/images/default/grid/grid3-hrow.gif +0 -0
- data/template/resources/images/default/grid/grid3-special-col-bg.gif +0 -0
- data/template/resources/images/default/grid/grid3-special-col-sel-bg.gif +0 -0
- data/template/resources/images/default/grid/group-by.gif +0 -0
- data/template/resources/images/default/grid/group-collapse.gif +0 -0
- data/template/resources/images/default/grid/group-expand-sprite.gif +0 -0
- data/template/resources/images/default/grid/group-expand.gif +0 -0
- data/template/resources/images/default/grid/hd-pop.gif +0 -0
- data/template/resources/images/default/grid/hmenu-asc.gif +0 -0
- data/template/resources/images/default/grid/hmenu-desc.gif +0 -0
- data/template/resources/images/default/grid/hmenu-lock.gif +0 -0
- data/template/resources/images/default/grid/hmenu-lock.png +0 -0
- data/template/resources/images/default/grid/hmenu-unlock.gif +0 -0
- data/template/resources/images/default/grid/hmenu-unlock.png +0 -0
- data/template/resources/images/default/grid/invalid_line.gif +0 -0
- data/template/resources/images/default/grid/loading.gif +0 -0
- data/template/resources/images/default/grid/mso-hd.gif +0 -0
- data/template/resources/images/default/grid/nowait.gif +0 -0
- data/template/resources/images/default/grid/page-first-disabled.gif +0 -0
- data/template/resources/images/default/grid/page-first.gif +0 -0
- data/template/resources/images/default/grid/page-last-disabled.gif +0 -0
- data/template/resources/images/default/grid/page-last.gif +0 -0
- data/template/resources/images/default/grid/page-next-disabled.gif +0 -0
- data/template/resources/images/default/grid/page-next.gif +0 -0
- data/template/resources/images/default/grid/page-prev-disabled.gif +0 -0
- data/template/resources/images/default/grid/page-prev.gif +0 -0
- data/template/resources/images/default/grid/pick-button.gif +0 -0
- data/template/resources/images/default/grid/refresh.gif +0 -0
- data/template/resources/images/default/grid/row-check-sprite.gif +0 -0
- data/template/resources/images/default/grid/row-expand-sprite.gif +0 -0
- data/template/resources/images/default/grid/row-over.gif +0 -0
- data/template/resources/images/default/grid/row-sel.gif +0 -0
- data/template/resources/images/default/grid/sort-hd.gif +0 -0
- data/template/resources/images/default/grid/sort_asc.gif +0 -0
- data/template/resources/images/default/grid/sort_desc.gif +0 -0
- data/template/resources/images/default/grid/wait.gif +0 -0
- data/template/resources/images/default/layout/collapse.gif +0 -0
- data/template/resources/images/default/layout/expand.gif +0 -0
- data/template/resources/images/default/layout/gradient-bg.gif +0 -0
- data/template/resources/images/default/layout/mini-bottom.gif +0 -0
- data/template/resources/images/default/layout/mini-left.gif +0 -0
- data/template/resources/images/default/layout/mini-right.gif +0 -0
- data/template/resources/images/default/layout/mini-top.gif +0 -0
- data/template/resources/images/default/layout/ns-collapse.gif +0 -0
- data/template/resources/images/default/layout/ns-expand.gif +0 -0
- data/template/resources/images/default/layout/panel-close.gif +0 -0
- data/template/resources/images/default/layout/panel-title-bg.gif +0 -0
- data/template/resources/images/default/layout/panel-title-light-bg.gif +0 -0
- data/template/resources/images/default/layout/stick.gif +0 -0
- data/template/resources/images/default/layout/stuck.gif +0 -0
- data/template/resources/images/default/layout/tab-close-on.gif +0 -0
- data/template/resources/images/default/layout/tab-close.gif +0 -0
- data/template/resources/images/default/menu/checked.gif +0 -0
- data/template/resources/images/default/menu/group-checked.gif +0 -0
- data/template/resources/images/default/menu/item-over.gif +0 -0
- data/template/resources/images/default/menu/menu-parent.gif +0 -0
- data/template/resources/images/default/menu/menu.gif +0 -0
- data/template/resources/images/default/menu/unchecked.gif +0 -0
- data/template/resources/images/default/panel/corners-sprite.gif +0 -0
- data/template/resources/images/default/panel/left-right.gif +0 -0
- data/template/resources/images/default/panel/light-hd.gif +0 -0
- data/template/resources/images/default/panel/tool-sprite-tpl.gif +0 -0
- data/template/resources/images/default/panel/tool-sprites.gif +0 -0
- data/template/resources/images/default/panel/tools-sprites-trans.gif +0 -0
- data/template/resources/images/default/panel/top-bottom.gif +0 -0
- data/template/resources/images/default/panel/top-bottom.png +0 -0
- data/template/resources/images/default/panel/white-corners-sprite.gif +0 -0
- data/template/resources/images/default/panel/white-left-right.gif +0 -0
- data/template/resources/images/default/panel/white-top-bottom.gif +0 -0
- data/template/resources/images/default/progress/progress-bg.gif +0 -0
- data/template/resources/images/default/qtip/bg.gif +0 -0
- data/template/resources/images/default/qtip/close.gif +0 -0
- data/template/resources/images/default/qtip/tip-anchor-sprite.gif +0 -0
- data/template/resources/images/default/qtip/tip-sprite.gif +0 -0
- data/template/resources/images/default/s.gif +0 -0
- data/template/resources/images/default/shadow-c.png +0 -0
- data/template/resources/images/default/shadow-lr.png +0 -0
- data/template/resources/images/default/shadow.png +0 -0
- data/template/resources/images/default/shared/blue-loading.gif +0 -0
- data/template/resources/images/default/shared/calendar.gif +0 -0
- data/template/resources/images/default/shared/glass-bg.gif +0 -0
- data/template/resources/images/default/shared/hd-sprite.gif +0 -0
- data/template/resources/images/default/shared/large-loading.gif +0 -0
- data/template/resources/images/default/shared/left-btn.gif +0 -0
- data/template/resources/images/default/shared/loading-balls.gif +0 -0
- data/template/resources/images/default/shared/right-btn.gif +0 -0
- data/template/resources/images/default/shared/warning.gif +0 -0
- data/template/resources/images/default/sizer/e-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/e-handle.gif +0 -0
- data/template/resources/images/default/sizer/ne-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/ne-handle.gif +0 -0
- data/template/resources/images/default/sizer/nw-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/nw-handle.gif +0 -0
- data/template/resources/images/default/sizer/s-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/s-handle.gif +0 -0
- data/template/resources/images/default/sizer/se-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/se-handle.gif +0 -0
- data/template/resources/images/default/sizer/square.gif +0 -0
- data/template/resources/images/default/sizer/sw-handle-dark.gif +0 -0
- data/template/resources/images/default/sizer/sw-handle.gif +0 -0
- data/template/resources/images/default/slider/slider-bg.png +0 -0
- data/template/resources/images/default/slider/slider-thumb.png +0 -0
- data/template/resources/images/default/slider/slider-v-bg.png +0 -0
- data/template/resources/images/default/slider/slider-v-thumb.png +0 -0
- data/template/resources/images/default/tabs/scroll-left.gif +0 -0
- data/template/resources/images/default/tabs/scroll-right.gif +0 -0
- data/template/resources/images/default/tabs/scroller-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-inactive-left-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-inactive-right-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-left-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-over-left-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-over-right-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-btm-right-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-close.gif +0 -0
- data/template/resources/images/default/tabs/tab-strip-bg.gif +0 -0
- data/template/resources/images/default/tabs/tab-strip-bg.png +0 -0
- data/template/resources/images/default/tabs/tab-strip-btm-bg.gif +0 -0
- data/template/resources/images/default/tabs/tabs-sprite.gif +0 -0
- data/template/resources/images/default/toolbar/bg.gif +0 -0
- data/template/resources/images/default/toolbar/btn-arrow-light.gif +0 -0
- data/template/resources/images/default/toolbar/btn-arrow.gif +0 -0
- data/template/resources/images/default/toolbar/btn-over-bg.gif +0 -0
- data/template/resources/images/default/toolbar/gray-bg.gif +0 -0
- data/template/resources/images/default/toolbar/more.gif +0 -0
- data/template/resources/images/default/toolbar/tb-bg.gif +0 -0
- data/template/resources/images/default/toolbar/tb-btn-sprite.gif +0 -0
- data/template/resources/images/default/toolbar/tb-xl-btn-sprite.gif +0 -0
- data/template/resources/images/default/toolbar/tb-xl-sep.gif +0 -0
- data/template/resources/images/default/tree/arrows.gif +0 -0
- data/template/resources/images/default/tree/drop-add.gif +0 -0
- data/template/resources/images/default/tree/drop-between.gif +0 -0
- data/template/resources/images/default/tree/drop-no.gif +0 -0
- data/template/resources/images/default/tree/drop-over.gif +0 -0
- data/template/resources/images/default/tree/drop-under.gif +0 -0
- data/template/resources/images/default/tree/drop-yes.gif +0 -0
- data/template/resources/images/default/tree/elbow-end-minus-nl.gif +0 -0
- data/template/resources/images/default/tree/elbow-end-minus.gif +0 -0
- data/template/resources/images/default/tree/elbow-end-plus-nl.gif +0 -0
- data/template/resources/images/default/tree/elbow-end-plus.gif +0 -0
- data/template/resources/images/default/tree/elbow-end.gif +0 -0
- data/template/resources/images/default/tree/elbow-line.gif +0 -0
- data/template/resources/images/default/tree/elbow-minus-nl.gif +0 -0
- data/template/resources/images/default/tree/elbow-minus.gif +0 -0
- data/template/resources/images/default/tree/elbow-plus-nl.gif +0 -0
- data/template/resources/images/default/tree/elbow-plus.gif +0 -0
- data/template/resources/images/default/tree/elbow.gif +0 -0
- data/template/resources/images/default/tree/folder-open.gif +0 -0
- data/template/resources/images/default/tree/folder.gif +0 -0
- data/template/resources/images/default/tree/leaf.gif +0 -0
- data/template/resources/images/default/tree/loading.gif +0 -0
- data/template/resources/images/default/tree/s.gif +0 -0
- data/template/resources/images/default/window/icon-error.gif +0 -0
- data/template/resources/images/default/window/icon-info.gif +0 -0
- data/template/resources/images/default/window/icon-question.gif +0 -0
- data/template/resources/images/default/window/icon-warning.gif +0 -0
- data/template/resources/images/default/window/left-corners.png +0 -0
- data/template/resources/images/default/window/left-corners.psd +0 -0
- data/template/resources/images/default/window/left-right.png +0 -0
- data/template/resources/images/default/window/left-right.psd +0 -0
- data/template/resources/images/default/window/right-corners.png +0 -0
- data/template/resources/images/default/window/right-corners.psd +0 -0
- data/template/resources/images/default/window/top-bottom.png +0 -0
- data/template/resources/images/default/window/top-bottom.psd +0 -0
- data/template/resources/images/gray/button/btn-arrow.gif +0 -0
- data/template/resources/images/gray/button/btn-sprite.gif +0 -0
- data/template/resources/images/gray/button/btn.gif +0 -0
- data/template/resources/images/gray/button/group-cs.gif +0 -0
- data/template/resources/images/gray/button/group-lr.gif +0 -0
- data/template/resources/images/gray/button/group-tb.gif +0 -0
- data/template/resources/images/gray/button/s-arrow-bo.gif +0 -0
- data/template/resources/images/gray/button/s-arrow-o.gif +0 -0
- data/template/resources/images/gray/form/clear-trigger.gif +0 -0
- data/template/resources/images/gray/form/date-trigger.gif +0 -0
- data/template/resources/images/gray/form/search-trigger.gif +0 -0
- data/template/resources/images/gray/form/trigger-square.gif +0 -0
- data/template/resources/images/gray/form/trigger.gif +0 -0
- data/template/resources/images/gray/gradient-bg.gif +0 -0
- data/template/resources/images/gray/grid/col-move-bottom.gif +0 -0
- data/template/resources/images/gray/grid/col-move-top.gif +0 -0
- data/template/resources/images/gray/grid/grid3-hd-btn.gif +0 -0
- data/template/resources/images/gray/grid/grid3-hrow-over.gif +0 -0
- data/template/resources/images/gray/grid/grid3-hrow-over2.gif +0 -0
- data/template/resources/images/gray/grid/grid3-hrow.gif +0 -0
- data/template/resources/images/gray/grid/grid3-hrow2.gif +0 -0
- data/template/resources/images/gray/grid/grid3-special-col-bg.gif +0 -0
- data/template/resources/images/gray/grid/grid3-special-col-bg2.gif +0 -0
- data/template/resources/images/gray/grid/grid3-special-col-sel-bg.gif +0 -0
- data/template/resources/images/gray/grid/group-collapse.gif +0 -0
- data/template/resources/images/gray/grid/group-expand-sprite.gif +0 -0
- data/template/resources/images/gray/grid/group-expand.gif +0 -0
- data/template/resources/images/gray/grid/page-first.gif +0 -0
- data/template/resources/images/gray/grid/page-last.gif +0 -0
- data/template/resources/images/gray/grid/page-next.gif +0 -0
- data/template/resources/images/gray/grid/page-prev.gif +0 -0
- data/template/resources/images/gray/grid/refresh.gif +0 -0
- data/template/resources/images/gray/grid/row-expand-sprite.gif +0 -0
- data/template/resources/images/gray/grid/sort_asc.gif +0 -0
- data/template/resources/images/gray/grid/sort_desc.gif +0 -0
- data/template/resources/images/gray/menu/group-checked.gif +0 -0
- data/template/resources/images/gray/menu/item-over-disabled.gif +0 -0
- data/template/resources/images/gray/menu/item-over.gif +0 -0
- data/template/resources/images/gray/menu/menu-parent.gif +0 -0
- data/template/resources/images/gray/panel/corners-sprite.gif +0 -0
- data/template/resources/images/gray/panel/left-right.gif +0 -0
- data/template/resources/images/gray/panel/light-hd.gif +0 -0
- data/template/resources/images/gray/panel/tool-sprite-tpl.gif +0 -0
- data/template/resources/images/gray/panel/tool-sprites.gif +0 -0
- data/template/resources/images/gray/panel/tools-sprites-trans.gif +0 -0
- data/template/resources/images/gray/panel/top-bottom.gif +0 -0
- data/template/resources/images/gray/panel/top-bottom.png +0 -0
- data/template/resources/images/gray/panel/white-corners-sprite.gif +0 -0
- data/template/resources/images/gray/panel/white-left-right.gif +0 -0
- data/template/resources/images/gray/panel/white-top-bottom.gif +0 -0
- data/template/resources/images/gray/progress/progress-bg.gif +0 -0
- data/template/resources/images/gray/qtip/bg.gif +0 -0
- data/template/resources/images/gray/qtip/close.gif +0 -0
- data/template/resources/images/gray/qtip/tip-anchor-sprite.gif +0 -0
- data/template/resources/images/gray/qtip/tip-sprite.gif +0 -0
- data/template/resources/images/gray/s.gif +0 -0
- data/template/resources/images/gray/shared/hd-sprite.gif +0 -0
- data/template/resources/images/gray/shared/left-btn.gif +0 -0
- data/template/resources/images/gray/shared/right-btn.gif +0 -0
- data/template/resources/images/gray/sizer/e-handle.gif +0 -0
- data/template/resources/images/gray/sizer/ne-handle.gif +0 -0
- data/template/resources/images/gray/sizer/nw-handle.gif +0 -0
- data/template/resources/images/gray/sizer/s-handle.gif +0 -0
- data/template/resources/images/gray/sizer/se-handle.gif +0 -0
- data/template/resources/images/gray/sizer/square.gif +0 -0
- data/template/resources/images/gray/sizer/sw-handle.gif +0 -0
- data/template/resources/images/gray/slider/slider-thumb.png +0 -0
- data/template/resources/images/gray/slider/slider-v-thumb.png +0 -0
- data/template/resources/images/gray/tabs/scroll-left.gif +0 -0
- data/template/resources/images/gray/tabs/scroll-right.gif +0 -0
- data/template/resources/images/gray/tabs/scroller-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-inactive-left-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-inactive-right-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-left-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-over-left-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-over-right-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-btm-right-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-close.gif +0 -0
- data/template/resources/images/gray/tabs/tab-strip-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tab-strip-bg.png +0 -0
- data/template/resources/images/gray/tabs/tab-strip-btm-bg.gif +0 -0
- data/template/resources/images/gray/tabs/tabs-sprite.gif +0 -0
- data/template/resources/images/gray/toolbar/bg.gif +0 -0
- data/template/resources/images/gray/toolbar/btn-arrow-light.gif +0 -0
- data/template/resources/images/gray/toolbar/btn-arrow.gif +0 -0
- data/template/resources/images/gray/toolbar/btn-over-bg.gif +0 -0
- data/template/resources/images/gray/toolbar/gray-bg.gif +0 -0
- data/template/resources/images/gray/toolbar/more.gif +0 -0
- data/template/resources/images/gray/toolbar/tb-bg.gif +0 -0
- data/template/resources/images/gray/toolbar/tb-btn-sprite.gif +0 -0
- data/template/resources/images/gray/tree/arrows.gif +0 -0
- data/template/resources/images/gray/tree/elbow-end-minus-nl.gif +0 -0
- data/template/resources/images/gray/tree/elbow-end-minus.gif +0 -0
- data/template/resources/images/gray/tree/elbow-end-plus-nl.gif +0 -0
- data/template/resources/images/gray/tree/elbow-end-plus.gif +0 -0
- data/template/resources/images/gray/window/icon-error.gif +0 -0
- data/template/resources/images/gray/window/icon-info.gif +0 -0
- data/template/resources/images/gray/window/icon-question.gif +0 -0
- data/template/resources/images/gray/window/icon-warning.gif +0 -0
- data/template/resources/images/gray/window/left-corners.png +0 -0
- data/template/resources/images/gray/window/left-corners.pspimage +0 -0
- data/template/resources/images/gray/window/left-right.png +0 -0
- data/template/resources/images/gray/window/right-corners.png +0 -0
- data/template/resources/images/gray/window/top-bottom.png +0 -0
- data/template/resources/inherited.gif +0 -0
- data/template/resources/member-collapsed.gif +0 -0
- data/template/resources/member-expanded.gif +0 -0
- data/template/resources/member-hover.gif +0 -0
- data/template/resources/method.gif +0 -0
- data/template/resources/pkg-closed.gif +0 -0
- data/template/resources/pkg-open.gif +0 -0
- data/template/resources/pkg.gif +0 -0
- data/template/resources/prop.gif +0 -0
- data/template/resources/s.gif +0 -0
- data/template/resources/static.gif +0 -0
- data/template/resources/style.css +302 -0
- data/template/welcome.html +45 -0
- metadata +481 -0
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'jsduck/table'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
class CfgTable < Table
|
6
|
+
def initialize(cls)
|
7
|
+
super(cls)
|
8
|
+
@type = :cfg
|
9
|
+
@id = @cls.full_name + "-configs"
|
10
|
+
@title = "Config Options"
|
11
|
+
@column_title = "Config Options"
|
12
|
+
@row_class = "config-row"
|
13
|
+
end
|
14
|
+
|
15
|
+
def signature_suffix(item)
|
16
|
+
" : " + item[:type]
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/lib/jsduck/class.rb
ADDED
@@ -0,0 +1,116 @@
|
|
1
|
+
module JsDuck
|
2
|
+
|
3
|
+
# Encapsulates class documentation and provides some commonly needed
|
4
|
+
# methods on it. Otherwise it acts like Hash, providing the []
|
5
|
+
# method.
|
6
|
+
class Class
|
7
|
+
def initialize(doc, classes={})
|
8
|
+
@doc = doc
|
9
|
+
@classes = classes
|
10
|
+
end
|
11
|
+
|
12
|
+
def [](key)
|
13
|
+
@doc[key]
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns instance of parent class, or nil if there is none
|
17
|
+
def parent
|
18
|
+
@doc[:extends] ? @classes[@doc[:extends]] : nil
|
19
|
+
end
|
20
|
+
|
21
|
+
# Returns true when this class inherits from the specified class.
|
22
|
+
# Also returns true when the class itself is the one we are asking about.
|
23
|
+
def inherits_from?(class_name)
|
24
|
+
return full_name == class_name || (parent ? parent.inherits_from?(class_name) : false)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Returns array of all public members of particular type in a class,
|
28
|
+
# sorted by name.
|
29
|
+
#
|
30
|
+
# For methods the the constructor is listed as first method having
|
31
|
+
# the same name as class itself.
|
32
|
+
#
|
33
|
+
# See members_hash for details.
|
34
|
+
def members(type)
|
35
|
+
ms = members_hash(type).values.sort {|a,b| a[:name] <=> b[:name] }
|
36
|
+
type == :method ? constructor_first(ms) : ms
|
37
|
+
end
|
38
|
+
|
39
|
+
# If methods list contains constructor, rename it with class name
|
40
|
+
# and move into beginning of methods list.
|
41
|
+
def constructor_first(ms)
|
42
|
+
constr = ms.find {|m| m[:name] == "constructor" }
|
43
|
+
if constr
|
44
|
+
ms.delete(constr)
|
45
|
+
# Clone it. Otherwise the search for "constructor" from this
|
46
|
+
# class will return nothing as we have renamed it.
|
47
|
+
constr2 = constr.clone
|
48
|
+
constr2[:name] = short_name
|
49
|
+
ms.unshift(constr2)
|
50
|
+
end
|
51
|
+
ms
|
52
|
+
end
|
53
|
+
|
54
|
+
# Returns hash of public members of class (and parent classes).
|
55
|
+
# Members are methods, properties, cfgs, events (member type
|
56
|
+
# is speified through 'type' parameter).
|
57
|
+
#
|
58
|
+
# When parent and child have members with same name,
|
59
|
+
# member from child overrides tha parent member.
|
60
|
+
#
|
61
|
+
# We also set :member property to each member to the full class
|
62
|
+
# name where it belongs, so one can tell them apart afterwards.
|
63
|
+
def members_hash(type)
|
64
|
+
parent_members = parent ? parent.members_hash(type) : {}
|
65
|
+
@doc[type].each do |m|
|
66
|
+
parent_members[m[:name]] = m if !m[:private]
|
67
|
+
end
|
68
|
+
parent_members
|
69
|
+
end
|
70
|
+
|
71
|
+
# A way to access full class name with similar syntax to
|
72
|
+
# package_name and short_name
|
73
|
+
def full_name
|
74
|
+
@doc[:name]
|
75
|
+
end
|
76
|
+
|
77
|
+
# Returns package name of the class.
|
78
|
+
#
|
79
|
+
# That is the namespace part of full class name.
|
80
|
+
#
|
81
|
+
# For example "My.package" is package_name of "My.package.Class"
|
82
|
+
def package_name
|
83
|
+
Class.package_name(@doc[:name])
|
84
|
+
end
|
85
|
+
|
86
|
+
# Returns last part of full class name
|
87
|
+
#
|
88
|
+
# For example for "My.package.Class" it is "Class"
|
89
|
+
def short_name
|
90
|
+
Class.short_name(@doc[:name])
|
91
|
+
end
|
92
|
+
|
93
|
+
# Static methods
|
94
|
+
|
95
|
+
# Utility method that given a package or class name finds the name
|
96
|
+
# of its parent package.
|
97
|
+
def self.package_name(name)
|
98
|
+
name.slice(0, name.length - self.short_name(name).length - 1) || ""
|
99
|
+
end
|
100
|
+
|
101
|
+
# Utility method that given full package or class name extracts
|
102
|
+
# the "class"-part of the name.
|
103
|
+
#
|
104
|
+
# Because we try to emulate ext-doc, it's not as simple as just
|
105
|
+
# taking the last part. See class_spec.rb for details.
|
106
|
+
def self.short_name(name)
|
107
|
+
parts = name.split(/\./)
|
108
|
+
short = parts.pop
|
109
|
+
while parts.length > 1 && parts.last =~ /^[A-Z]/
|
110
|
+
short = parts.pop + "." + short
|
111
|
+
end
|
112
|
+
short
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rdiscount'
|
3
|
+
|
4
|
+
module JsDuck
|
5
|
+
|
6
|
+
# Formats doc-comments
|
7
|
+
class DocFormatter
|
8
|
+
# Initializes instance to work in context of particular class, so
|
9
|
+
# that when {@link #blah} is encountered it knows that
|
10
|
+
# Context#blah is meant.
|
11
|
+
def initialize(context)
|
12
|
+
@context = context
|
13
|
+
end
|
14
|
+
|
15
|
+
# Replaces {@link Class#member link text} in given string with
|
16
|
+
# HTML links pointing to documentation. In addition to the href
|
17
|
+
# attribute links will also contain ext:cls and ext:member
|
18
|
+
# attributes.
|
19
|
+
def replace(input)
|
20
|
+
input.gsub(/\{@link +(\S*?)(?: +(.+?))?\}/) do
|
21
|
+
target = $1
|
22
|
+
text = $2
|
23
|
+
if target =~ /^(.*)#(.*)$/
|
24
|
+
cls = $1.empty? ? @context : $1
|
25
|
+
member = $2
|
26
|
+
else
|
27
|
+
cls = target
|
28
|
+
member = false
|
29
|
+
end
|
30
|
+
|
31
|
+
# Construct link attributes
|
32
|
+
href = " href=\"output/#{cls}.html" + (member ? "#" + cls + "-" + member : "") + '"'
|
33
|
+
ext_cls = ' ext:cls="' + cls + '"'
|
34
|
+
ext_member = member ? ' ext:member="' + member + '"' : ""
|
35
|
+
|
36
|
+
# Construct link text
|
37
|
+
if text
|
38
|
+
text = text
|
39
|
+
elsif member
|
40
|
+
text = (cls == @context) ? member : (cls + "." + member)
|
41
|
+
else
|
42
|
+
text = cls
|
43
|
+
end
|
44
|
+
|
45
|
+
"<a" + href + ext_cls + ext_member + ">" + text + "</a>"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
# Formats doc-comment for placement into HTML.
|
50
|
+
# Renders it with Markdown-formatter and replaces @link-s.
|
51
|
+
def format(input)
|
52
|
+
# In ExtJS source "<pre>" is often at the end of paragraph, not
|
53
|
+
# on its own line. But in that case RDiscount doesn't recognize
|
54
|
+
# it as the beginning of <pre>-block and goes on parsing it as
|
55
|
+
# normal Markdown, which often causes nested <pre>-blocks.
|
56
|
+
#
|
57
|
+
# To prevent this, we always add extra newline before <pre>.
|
58
|
+
input.gsub!(/([^\n])<pre>/, "\\1\n<pre>")
|
59
|
+
|
60
|
+
# But we remove trailing newline after <pre> to prevent
|
61
|
+
# code-blocks beginning with empty line.
|
62
|
+
input.gsub!(/<pre>(<code>)?\n?/, "<pre>\\1")
|
63
|
+
|
64
|
+
replace(RDiscount.new(input).to_html)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
end
|
@@ -0,0 +1,277 @@
|
|
1
|
+
require 'strscan'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
# Parses doc-comment into array of @tags
|
6
|
+
#
|
7
|
+
# For each @tag it produces Hash like the following:
|
8
|
+
#
|
9
|
+
# {
|
10
|
+
# :tagname => :cfg/:property/:type/:extends/...,
|
11
|
+
# :doc => "Some documentation for this tag",
|
12
|
+
# ...@tag specific stuff like :name, :type, and so on...
|
13
|
+
# }
|
14
|
+
#
|
15
|
+
# When doc-comment begins with comment, not preceded by @tag, then
|
16
|
+
# the comment will be placed into Hash with :tagname => :default.
|
17
|
+
#
|
18
|
+
# Unrecognized @tags are left as is into documentation as if they
|
19
|
+
# were normal text.
|
20
|
+
#
|
21
|
+
# @see and {@link} are parsed separately in JsDuck::DocFormatter.
|
22
|
+
#
|
23
|
+
class DocParser
|
24
|
+
def parse(input)
|
25
|
+
@tags = []
|
26
|
+
@input = StringScanner.new(purify(input))
|
27
|
+
parse_loop
|
28
|
+
# The parsing process can leave whitespace at the ends of
|
29
|
+
# doc-strings, here we get rid of it. Additionally null all empty docs
|
30
|
+
@tags.each do |tag|
|
31
|
+
tag[:doc].strip!
|
32
|
+
tag[:doc] = nil if tag[:doc] == ""
|
33
|
+
end
|
34
|
+
# Get rid of empty default tag
|
35
|
+
if @tags.first && @tags.first[:tagname] == :default && !@tags.first[:doc]
|
36
|
+
@tags.shift
|
37
|
+
end
|
38
|
+
@tags
|
39
|
+
end
|
40
|
+
|
41
|
+
# Extracts content inside /** ... */
|
42
|
+
def purify(input)
|
43
|
+
result = []
|
44
|
+
# Remove the beginning /** and end */
|
45
|
+
input = input.sub(/\A\/\*\* ?/, "").sub(/ ?\*\/\Z/, "")
|
46
|
+
# Now we are left with only two types of lines:
|
47
|
+
# - those beginning with *
|
48
|
+
# - and those without it
|
49
|
+
input.each_line do |line|
|
50
|
+
line.chomp!
|
51
|
+
if line =~ /\A\s*\*\s?(.*)\Z/ then
|
52
|
+
result << $1
|
53
|
+
else
|
54
|
+
result << line
|
55
|
+
end
|
56
|
+
end
|
57
|
+
return result.join("\n")
|
58
|
+
end
|
59
|
+
|
60
|
+
def add_tag(tag)
|
61
|
+
@tags << @current_tag = {:tagname => tag, :doc => ""}
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_loop
|
65
|
+
add_tag(:default)
|
66
|
+
while !@input.eos? do
|
67
|
+
if look(/@class\b/) then
|
68
|
+
at_class
|
69
|
+
elsif look(/@extends\b/) then
|
70
|
+
at_extends
|
71
|
+
elsif look(/@singleton\b/) then
|
72
|
+
boolean_at_tag(/@singleton/, :singleton)
|
73
|
+
elsif look(/@event\b/) then
|
74
|
+
at_event
|
75
|
+
elsif look(/@method\b/) then
|
76
|
+
at_method
|
77
|
+
elsif look(/@constructor\b/) then
|
78
|
+
boolean_at_tag(/@constructor/, :constructor)
|
79
|
+
elsif look(/@param\b/) then
|
80
|
+
at_param
|
81
|
+
elsif look(/@returns?\b/) then
|
82
|
+
at_return
|
83
|
+
elsif look(/@cfg\b/) then
|
84
|
+
at_cfg
|
85
|
+
elsif look(/@property\b/) then
|
86
|
+
at_property
|
87
|
+
elsif look(/@type\b/) then
|
88
|
+
at_type
|
89
|
+
elsif look(/@xtype\b/) then
|
90
|
+
at_xtype
|
91
|
+
elsif look(/@member\b/) then
|
92
|
+
at_member
|
93
|
+
elsif look(/@static\b/) then
|
94
|
+
boolean_at_tag(/@static/, :static)
|
95
|
+
elsif look(/@(private|ignore|hide|protected)\b/) then
|
96
|
+
boolean_at_tag(/@(private|ignore|hide|protected)/, :private)
|
97
|
+
elsif look(/@/) then
|
98
|
+
@current_tag[:doc] += @input.scan(/@/)
|
99
|
+
elsif look(/[^@]/) then
|
100
|
+
@current_tag[:doc] += @input.scan(/[^@]+/)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# matches @class name ...
|
106
|
+
def at_class
|
107
|
+
match(/@class/)
|
108
|
+
add_tag(:class)
|
109
|
+
maybe_ident_chain(:name)
|
110
|
+
skip_white
|
111
|
+
end
|
112
|
+
|
113
|
+
# matches @extends name ...
|
114
|
+
def at_extends
|
115
|
+
match(/@extends/)
|
116
|
+
add_tag(:extends)
|
117
|
+
maybe_ident_chain(:extends)
|
118
|
+
skip_white
|
119
|
+
end
|
120
|
+
|
121
|
+
# matches @event name ...
|
122
|
+
def at_event
|
123
|
+
match(/@event/)
|
124
|
+
add_tag(:event)
|
125
|
+
maybe_name
|
126
|
+
skip_white
|
127
|
+
end
|
128
|
+
|
129
|
+
# matches @method name ...
|
130
|
+
def at_method
|
131
|
+
match(/@method/)
|
132
|
+
add_tag(:method)
|
133
|
+
maybe_name
|
134
|
+
skip_white
|
135
|
+
end
|
136
|
+
|
137
|
+
# matches @param {type} variable ...
|
138
|
+
def at_param
|
139
|
+
match(/@param/)
|
140
|
+
add_tag(:param)
|
141
|
+
maybe_type
|
142
|
+
maybe_name
|
143
|
+
skip_white
|
144
|
+
end
|
145
|
+
|
146
|
+
# matches @return {type} ...
|
147
|
+
def at_return
|
148
|
+
match(/@returns?/)
|
149
|
+
add_tag(:return)
|
150
|
+
maybe_type
|
151
|
+
skip_white
|
152
|
+
end
|
153
|
+
|
154
|
+
# matches @cfg {type} name ...
|
155
|
+
def at_cfg
|
156
|
+
match(/@cfg/)
|
157
|
+
add_tag(:cfg)
|
158
|
+
maybe_type
|
159
|
+
maybe_name
|
160
|
+
skip_white
|
161
|
+
end
|
162
|
+
|
163
|
+
# matches @property {type} name ...
|
164
|
+
#
|
165
|
+
# ext-doc doesn't support {type} and name for @property - name is
|
166
|
+
# inferred from source and @type is required to specify type,
|
167
|
+
# jsdoc-toolkit on the other hand follows the sensible route, and
|
168
|
+
# so do we.
|
169
|
+
def at_property
|
170
|
+
match(/@property/)
|
171
|
+
add_tag(:property)
|
172
|
+
maybe_type
|
173
|
+
maybe_name
|
174
|
+
skip_white
|
175
|
+
end
|
176
|
+
|
177
|
+
# matches @type {type} or @type type
|
178
|
+
#
|
179
|
+
# The presence of @type implies that we are dealing with property.
|
180
|
+
# ext-doc allows type name to be either inside curly braces or
|
181
|
+
# without them at all.
|
182
|
+
def at_type
|
183
|
+
match(/@type/)
|
184
|
+
add_tag(:type)
|
185
|
+
skip_horiz_white
|
186
|
+
if look(/\{/) then
|
187
|
+
@current_tag[:type] = typedef
|
188
|
+
elsif look(/\S/) then
|
189
|
+
@current_tag[:type] = @input.scan(/\S+/)
|
190
|
+
end
|
191
|
+
skip_white
|
192
|
+
end
|
193
|
+
|
194
|
+
# matches @xtype name
|
195
|
+
def at_xtype
|
196
|
+
match(/@xtype/)
|
197
|
+
add_tag(:xtype)
|
198
|
+
maybe_name
|
199
|
+
skip_white
|
200
|
+
end
|
201
|
+
|
202
|
+
# matches @member name ...
|
203
|
+
def at_member
|
204
|
+
match(/@member/)
|
205
|
+
add_tag(:member)
|
206
|
+
maybe_ident_chain(:member)
|
207
|
+
skip_white
|
208
|
+
end
|
209
|
+
|
210
|
+
# Used to match @private, @ignore, @hide, ...
|
211
|
+
def boolean_at_tag(regex, propname)
|
212
|
+
match(regex)
|
213
|
+
add_tag(propname)
|
214
|
+
skip_white
|
215
|
+
end
|
216
|
+
|
217
|
+
# matches {type} if possible and sets it on @current_tag
|
218
|
+
def maybe_type
|
219
|
+
skip_horiz_white
|
220
|
+
if look(/\{/) then
|
221
|
+
@current_tag[:type] = typedef
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
# matches identifier name if possible and sets it on @current_tag
|
226
|
+
def maybe_name
|
227
|
+
skip_horiz_white
|
228
|
+
if look(/\w/) then
|
229
|
+
@current_tag[:name] = ident
|
230
|
+
end
|
231
|
+
end
|
232
|
+
|
233
|
+
# matches ident.chain if possible and sets it on @current_tag
|
234
|
+
def maybe_ident_chain(propname)
|
235
|
+
skip_horiz_white
|
236
|
+
if look(/\w/) then
|
237
|
+
@current_tag[propname] = ident_chain
|
238
|
+
end
|
239
|
+
end
|
240
|
+
|
241
|
+
# matches {...} and returns text inside brackets
|
242
|
+
def typedef
|
243
|
+
match(/\{/)
|
244
|
+
name = @input.scan(/[^}]+/)
|
245
|
+
match(/\}/)
|
246
|
+
return name
|
247
|
+
end
|
248
|
+
|
249
|
+
# matches chained.identifier.name and returns it
|
250
|
+
def ident_chain
|
251
|
+
@input.scan(/[\w.]+/)
|
252
|
+
end
|
253
|
+
|
254
|
+
# matches identifier and returns its name
|
255
|
+
def ident
|
256
|
+
@input.scan(/\w+/)
|
257
|
+
end
|
258
|
+
|
259
|
+
def look(re)
|
260
|
+
@input.check(re)
|
261
|
+
end
|
262
|
+
|
263
|
+
def match(re)
|
264
|
+
@input.scan(re)
|
265
|
+
end
|
266
|
+
|
267
|
+
def skip_white
|
268
|
+
@input.scan(/\s+/)
|
269
|
+
end
|
270
|
+
|
271
|
+
# skips horizontal whitespace (tabs and spaces)
|
272
|
+
def skip_horiz_white
|
273
|
+
@input.scan(/[ \t]+/)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
|
277
|
+
end
|