jsduck 2.0.pre → 2.0.pre2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  JsDuck
2
2
  ======
3
3
 
4
- Simple JavaScript Duckumentation generator.
4
+ API documentation generator for ExtJS 4.
5
5
 
6
6
  ,~~.
7
7
  ( 6 )-_,
@@ -10,46 +10,16 @@ Simple JavaScript Duckumentation generator.
10
10
  \ `-' / hjw
11
11
  ~'`~'`~'`~'`~
12
12
 
13
- JsDuck aims to be a better documentation generator for [ExtJS][].
14
- While it tries to do everything that [ext-doc][] does, it isn't
15
- satisfied with it and aims to make your life much easier.
13
+ JsDuck aims to be a better documentation generator for [ExtJS][] than
14
+ the old [ext-doc][] was.
16
15
 
17
- Basically JsDuck thinks that the following doc-comment really sucks:
16
+ The standard way to give some structure to the JavaDoc-style code
17
+ documentation is to use HTML in doc-comments. Although the resulting
18
+ documentation will look pretty, this is often achieved by sacrificing
19
+ the readability of comments - HTML can get quite ugly.
18
20
 
19
- /**
20
- * @class Ext.form.TextField
21
- * @extends Ext.form.Field
22
- * <p>Basic text field. Can be used as a direct replacement for traditional
23
- * text inputs, or as the base class for more sophisticated input controls
24
- * (like {@link Ext.form.TextArea} and {@link Ext.form.ComboBox}).</p>
25
- * <p><b><u>Validation</u></b></p>
26
- * <p>The validation procedure is described in the documentation for
27
- * {@link #validateValue}.</p>
28
- * <p><b><u>Alter Validation Behavior</u></b></p>
29
- * <p>Validation behavior for each field can be configured:</p>
30
- * <div class="mdetail-params"><ul>
31
- * <li><code>{@link Ext.form.TextField#invalidText invalidText}</code> :
32
- * the default validation message to show if any validation step above does
33
- * not provide a message when invalid</li>
34
- * <li><code>{@link Ext.form.TextField#maskRe maskRe}</code> :
35
- * filter out keystrokes before any validation occurs</li>
36
- * <li><code>{@link Ext.form.TextField#stripCharsRe stripCharsRe}</code> :
37
- * filter characters after being typed in, but before being validated</li>
38
- * </ul></div>
39
- *
40
- * @constructor Creates a new TextField
41
- * @param {Object} config Configuration options
42
- *
43
- * @xtype textfield
44
- */
45
- Ext.form.TextField = Ext.extend(Ext.form.Field, {
46
-
47
- Not quite so readable is it? The source of ExtJS is filled with
48
- comments just like that, and when you use ext-doc, you too are forced
49
- to write such comments.
50
-
51
- JsDuck does not like it. Although it can handle comments like this,
52
- it would like that you wrote comments like that instead:
21
+ JsDuck does not like it. Although it can handle comments written in
22
+ HTML, it prefers a friendlier [Markdown][] syntax:
53
23
 
54
24
  /**
55
25
  * Basic text field. Can be used as a direct replacement for traditional
@@ -77,16 +47,12 @@ it would like that you wrote comments like that instead:
77
47
  *
78
48
  * @xtype textfield
79
49
  */
80
- Ext.form.TextField = Ext.extend(Ext.form.Field, {
50
+ Ext.define('Ext.form.field.Text', {
51
+ extend: 'Ext.form.field.Base',
81
52
 
82
- As you can see, JsDuck supports formatting comments with friendly
83
- [Markdown][] syntax. And it can infer several things from the code
84
- (like @class and @extends in this case), so you don't have to repeat
85
- yourself. Also the constructor documentation is inherited from parent
86
- class - so you don't have to restate that it takes a config object
87
- again.
88
-
89
- That's basically it. Have fun.
53
+ As you can see, JsDuck can infer several things from the code (like
54
+ `@class` and `@extends` in this case), so you don't have to repeat
55
+ yourself.
90
56
 
91
57
  [ExtJS]: http://www.sencha.com/products/js/
92
58
  [ext-doc]: http://ext-doc.org/
@@ -96,18 +62,27 @@ That's basically it. Have fun.
96
62
  Getting it
97
63
  ----------
98
64
 
99
- Standard rubygems install should do:
65
+ Standard rubygems install should do (use the `--pre` switch to get the
66
+ latest 2.0 version which this README documents, otherwise you will get
67
+ the stable but quite old [0.6][v0.6] version):
100
68
 
101
- $ [sudo] gem install jsduck
69
+ $ [sudo] gem install --pre jsduck
102
70
 
103
- For hacking fork it from github.
71
+ For hacking fork it from github:
104
72
 
105
73
  $ git clone git://github.com/senchalabs/jsduck.git
106
74
  $ cd jsduck
107
75
  $ rake --tasks
108
76
 
109
- JsDuck depends on [json][], [RDiscount][], and [parallel][] plus [RSpec][] for tests.
77
+ JsDuck depends on [json][], [RDiscount][], and [parallel][]; plus
78
+ [RSpec][] for tests.
79
+
80
+ If you encounter errors during gem installation, you may need to
81
+ install the header files for compiling extension modules for ruby 1.8.
82
+ For Debian systems you'll need the `ruby1.8-dev` package. For Red Hat
83
+ / CentOS / Fedora use the `ruby-devel` package.
110
84
 
85
+ [v0.6]: https://github.com/senchalabs/jsduck/tree/v0.6
111
86
  [json]: http://flori.github.com/json/
112
87
  [RDiscount]: https://github.com/rtomayko/rdiscount
113
88
  [parallel]: https://github.com/grosser/parallel
@@ -120,37 +95,39 @@ Usage
120
95
  Just call it from command line with output directory and a directory
121
96
  containing your JavaScript files:
122
97
 
123
- $ jsduck --verbose --output some/dir your/project/js
98
+ $ jsduck your/project/js --verbose --output your/docs
124
99
 
125
100
  The `--verbose` flag creates a lot of output, but at least you will
126
101
  see that something is happening.
127
102
 
128
- You pass in both directories and JavaScript files. For example to
129
- generate docs for ExtJS 3, the simplest way is the following:
130
103
 
131
- $ jsduck -v -o output/ ext-3.3.1/src/
104
+ ## Generating Docs for ExtJS 4
132
105
 
133
- But this will give you a bunch of warnings, so you should better
134
- create a script that takes just the files really needed and passes
135
- them through `xargs` to `jsduck`:
106
+ For the simplest test-run just pass in the src/ dir of ExtJS 4. But
107
+ to get more similar result to the [official ExtJS 4
108
+ documentation][official], you should pass in some extra options and
109
+ copy over the doc-resources directory, which contains the images
110
+ referenced by the documentation:
136
111
 
137
- $ find ext-3.3.1/src/ -name '*.js' | egrep -v 'locale/|test/|adapter/' | xargs jsduck -v -o output/
112
+ $ jsduck ext-4.0.2a/src --output your/docs --ignore-global --exclude Error
113
+ $ cp -r ext-4.0.2a/docs/doc-resources your/docs/doc-resources
138
114
 
139
- Here's how the resulting documentation will look (ExtJS 3.3.1):
115
+ The `--ignore-global` will avoid the creation of a `global` class.
116
+ The `--exclude Error` will ignore references to the `Error` class,
117
+ which would otherwise result in several warnings.
140
118
 
141
- * [JsDuck generated documentation](http://triin.net/temp/jsduck/)
142
- * [Official ExtJS documentation](http://dev.sencha.com/deploy/dev/docs/) (for comparison)
119
+ Still, running JSDuck with the current ext-4.0.2a release is expected
120
+ to generate a lot of warnings. These should be fixed in some later
121
+ releases.
143
122
 
144
- Here's the same for ExtJS 4:
123
+ [official]: http://docs.sencha.com/ext-js/4-0/
145
124
 
146
- * [JsDuck generated documentation](http://triin.net/temp/jsduck4/)
147
- * [Official ExtJS documentation](http://docs.sencha.com/ext-js/4-0/api) (for comparison)
148
125
 
126
+ Documenting your code with JSDuck
127
+ ---------------------------------
149
128
 
150
- Documentation
151
- -------------
152
-
153
- Overview of documenting your code with JsDuck:
129
+ Here's an overview of [all the available @tags][tags], and how to use
130
+ them:
154
131
 
155
132
  * [Class](https://github.com/senchalabs/jsduck/wiki/Class)
156
133
  * [Constructor](https://github.com/senchalabs/jsduck/wiki/Constructor)
@@ -159,75 +136,36 @@ Overview of documenting your code with JsDuck:
159
136
  * [Methods](https://github.com/senchalabs/jsduck/wiki/Method)
160
137
  * [Events](https://github.com/senchalabs/jsduck/wiki/Event)
161
138
 
162
- More details:
163
-
164
- * [List of supported @tags][tags]
165
- * [List of doc-comment errors(?) found in ExtJS source][errors]
166
-
167
139
  [tags]: https://github.com/senchalabs/jsduck/wiki/List-of-supported-@tags
168
- [errors]: https://github.com/senchalabs/jsduck/wiki/List-of-doc-comment-errors(%3F)-found-in-ExtJS-source
169
-
170
-
171
- Features and differences from ext-doc
172
- -------------------------------------
173
-
174
- JsDuck has some strong opinions, so some things are intentionally
175
- missing.
176
-
177
- * Support for Markdown in comments
178
- * More things inferred from the code
179
- * No XML configuration file, just command line options
180
- * Class documentation header doesn't separately list Package and Class -
181
- these are IMHO redundant.
182
- * Class documentation header doesn't duplicate toolbar buttons -
183
- another redundancy
184
- * Ext.Component has a component icon too, not only its descendants
185
-
186
-
187
- Missing features and TODO
188
- -------------------------
189
-
190
- * Support for custom @tags. Ext-doc supports this, I personally have
191
- never used this feature, so I'm thinking it's not really needed.
192
140
 
193
141
 
194
142
  Copying
195
143
  -------
196
144
 
197
- JsDuck is distributed under the terms of the GNU General Public License version 3.
145
+ JsDuck is distributed under the terms of the GNU General Public
146
+ License version 3.
198
147
 
199
148
  JsDuck was developed by [Rene Saarsoo](http://triin.net),
200
- with contributions from [Ondřej Jirman](https://github.com/megous)
201
- and [Nick Poulden](https://github.com/nick).
149
+ with many contributions from [Nick Poulden](https://github.com/nick).
150
+
151
+ Thanks to [Ondřej Jirman](https://github.com/megous),
152
+ [Thomas Aylott](https://github.com/subtleGradient),
153
+ [johnnywengluu](https://github.com/johnnywengluu),
154
+ [gevik](https://github.com/gevik),
155
+ [ligaard](https://github.com/ligaard), and many-many others who
156
+ reported bugs, submitted patches, and provided a lot of useful input.
202
157
 
203
158
 
204
159
  Changelog
205
160
  ---------
206
161
 
207
- * 2.0.pre - Prerelease of the Ext4-themed version. Generates docs in
208
- exactly the same style as the official ExtJS4 docs. Lots and lots
209
- of changes. But also possibly several bugs. Use the --pre option
210
- to install:
211
-
212
- $ gem install --pre jsduck
162
+ * 2.0.pre2 - Fixes for the previous pre-release.
163
+ * New --stdout command line option.
164
+ * Fix opening links in new tabs.
165
+ * Few other small bugfixes and enhancements.
213
166
 
214
- To run it on ExtJS4:
215
-
216
- $ jsduck --output your/docs/ ext-4.0.2a/src --ignore-global
217
-
218
- This will generate a lot of warnings. Those should be fixed in some
219
- upcoming release of ExtJS4. You can disable them with `--no-warnings`.
220
- Additionally you will need to copy over the images:
221
-
222
- $ cp -r ext-4.0.2a/docs/doc-resources your/docs/doc-resources
223
-
224
- You can also get the class-listing to the main page by downloading
225
- [overviewData.json][] and passing it to JSDuck with:
226
-
227
- --categories overviewData.json
228
-
229
- This file should in the future be found inside the ExtJS4 release,
230
- along with the source code for guides.
167
+ * 2.0.pre - Completely overhauled Ext4-themed version.
168
+ * Currently in a pre-release state.
231
169
 
232
170
  * 0.6 - JsDuck is now used for creating the official ExtJS4 documentation.
233
171
  * Automatic linking of class names found in comments. Instead of writing
@@ -285,5 +223,3 @@ Changelog
285
223
  * List of subclasses
286
224
 
287
225
  * 0.1 - initial version.
288
-
289
- [overviewData.json]: https://raw.github.com/senchalabs/jsduck/3ee0653554da1ddc54576e7df442d08c9a6d22fd/template/overviewData.json
data/Rakefile CHANGED
@@ -74,7 +74,7 @@ def run_jsduck_export(extra_options, ext_dir)
74
74
 
75
75
  run_jsduck([
76
76
  "--title", "Ext JS 4.0.2a API Documentation",
77
- "--footer", "ExtJS 4.0.2a Documentation from Sencha. Generated with <a href='https://github.com/nene/jsduck'>JSDuck</a> revison #{rev}",
77
+ "--footer", "ExtJS 4.0.2a Documentation from Sencha. Generated with <a href='https://github.com/senchalabs/jsduck'>JSDuck</a> revison #{rev}",
78
78
  "#{SDK_DIR}/extjs/src",
79
79
  "#{SDK_DIR}/platform/src",
80
80
  "#{SDK_DIR}/platform/core/src",
data/bin/jsduck CHANGED
@@ -121,6 +121,10 @@ opts = OptionParser.new do | opts |
121
121
  app.export = :json
122
122
  end
123
123
 
124
+ opts.on('--stdout', "Writes JSON export to STDOUT instead of writing to the filesystem", " ") do
125
+ app.export = :stdout
126
+ end
127
+
124
128
  opts.separator "Debugging:"
125
129
  opts.separator ""
126
130
 
@@ -167,7 +171,7 @@ opts.parse!(ARGV).each do |fname|
167
171
  js_files << fname
168
172
  end
169
173
  else
170
- puts "Warning: File #{fname} not found"
174
+ $stderr.puts "Warning: File #{fname} not found"
171
175
  end
172
176
  end
173
177
  app.input_files = js_files
@@ -175,27 +179,29 @@ app.input_files = js_files
175
179
  if app.input_files.length == 0
176
180
  puts "You should specify some input files, otherwise there's nothing I can do :("
177
181
  exit(1)
178
- elsif !app.output_dir
179
- puts "You should also specify an output directory, where I could write all this amazing documentation."
180
- exit(1)
181
- elsif File.exists?(app.output_dir) && !File.directory?(app.output_dir)
182
- puts "Oh noes! The output directory is not really a directory at all :("
183
- exit(1)
184
- elsif !File.exists?(File.dirname(app.output_dir))
185
- puts "Oh noes! The parent directory for #{app.output_dir} doesn't exist."
186
- exit(1)
187
- elsif !File.exists?(app.template_dir + "/extjs")
188
- puts "Oh noes! The template directory does not contain extjs/ directory :("
189
- puts "Please copy ExtJS over to template/extjs or create symlink."
190
- puts "For example:"
191
- puts " $ cp -r /path/to/ext-4.0.0 " + app.template_dir + "/extjs"
192
- exit(1)
193
- elsif !File.exists?(app.template_dir + "/resources/css")
194
- puts "Oh noes! CSS files for custom ExtJS theme missing :("
195
- puts "Please compile SASS files in template/resources/sass with compass."
196
- puts "For example:"
197
- puts " $ compass compile " + app.template_dir + "/resources/sass"
198
- exit(1)
182
+ elsif app.export != :stdout
183
+ if !app.output_dir
184
+ puts "You should also specify an output directory, where I could write all this amazing documentation."
185
+ exit(1)
186
+ elsif File.exists?(app.output_dir) && !File.directory?(app.output_dir)
187
+ puts "Oh noes! The output directory is not really a directory at all :("
188
+ exit(1)
189
+ elsif !File.exists?(File.dirname(app.output_dir))
190
+ puts "Oh noes! The parent directory for #{app.output_dir} doesn't exist."
191
+ exit(1)
192
+ elsif !File.exists?(app.template_dir + "/extjs")
193
+ puts "Oh noes! The template directory does not contain extjs/ directory :("
194
+ puts "Please copy ExtJS over to template/extjs or create symlink."
195
+ puts "For example:"
196
+ puts " $ cp -r /path/to/ext-4.0.0 " + app.template_dir + "/extjs"
197
+ exit(1)
198
+ elsif !File.exists?(app.template_dir + "/resources/css")
199
+ puts "Oh noes! CSS files for custom ExtJS theme missing :("
200
+ puts "Please compile SASS files in template/resources/sass with compass."
201
+ puts "For example:"
202
+ puts " $ compass compile " + app.template_dir + "/resources/sass"
203
+ exit(1)
204
+ end
199
205
  end
200
206
 
201
207
  app.run()
data/jsduck.gemspec CHANGED
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
2
2
  s.required_rubygems_version = ">= 1.3.7"
3
3
 
4
4
  s.name = 'jsduck'
5
- s.version = '2.0.pre'
6
- s.date = '2011-06-30'
5
+ s.version = '2.0.pre2'
6
+ s.date = '2011-07-06'
7
7
  s.summary = "Simple JavaScript Duckumentation generator"
8
8
  s.description = "Documentation generator for ExtJS 4"
9
9
  s.homepage = "https://github.com/senchalabs/jsduck"
@@ -1,3 +1,5 @@
1
+ require 'jsduck/logger'
2
+
1
3
  module JsDuck
2
4
 
3
5
  class Aliases
@@ -27,12 +29,24 @@ module JsDuck
27
29
  # If the original also happens to be an alias, continue recursively.
28
30
  def find_original(al)
29
31
  al_def = al[:alias]
30
- orig = @relations[al_def[:cls]].get_member(al_def[:member], al_def[:type] || al[:tagname])
32
+
33
+ orig = @relations[al_def[:cls]]
34
+ unless orig
35
+ Logger.instance.warn("Class #{al_def[:cls]} not found in #{al[:filename]} line #{al[:linenr]}")
36
+ return al
37
+ end
38
+ orig = orig.get_member(al_def[:member], al_def[:type] || al[:tagname])
39
+ unless orig
40
+ Logger.instance.warn("Member #{al_def[:cls]}##{al_def[:member]} not found in #{al[:filename]} line #{al[:linenr]}")
41
+ return al
42
+ end
43
+
31
44
  if orig[:alias]
32
45
  find_original(orig)
33
46
  else
34
47
  orig
35
48
  end
49
+
36
50
  end
37
51
  end
38
52
 
data/lib/jsduck/app.rb CHANGED
@@ -109,8 +109,10 @@ module JsDuck
109
109
  end
110
110
  end
111
111
 
112
- clear_dir(@output_dir)
113
- if @export == :json
112
+ clear_dir(@output_dir) unless @export == :stdout
113
+ if @export == :stdout
114
+ @timer.time(:generating) { puts JSON.generate(relations.classes) }
115
+ elsif @export == :json
114
116
  FileUtils.mkdir(@output_dir)
115
117
  init_output_dirs(@output_dir)
116
118
  @timer.time(:generating) { write_src(@output_dir+"/source", parsed_files) }
data/lib/jsduck/class.rb CHANGED
@@ -61,6 +61,10 @@ module JsDuck
61
61
  @doc.clone
62
62
  end
63
63
 
64
+ def to_json(*a)
65
+ to_hash.to_json(*a)
66
+ end
67
+
64
68
  # Returns true when this class inherits from the specified class.
65
69
  # Also returns true when the class itself is the one we are asking about.
66
70
  def inherits_from?(class_name)
data/lib/jsduck/guides.rb CHANGED
@@ -63,9 +63,8 @@ module JsDuck
63
63
  @guides.each do |guide|
64
64
  out_dir = dir+"/"+guide[:name]
65
65
  FileUtils.cp_r(guide[:dir], out_dir)
66
- # Write the JsonP file and remove the original Markdown file
66
+ # Write the JsonP file
67
67
  JsonP.write(out_dir+"/README.js", guide[:name], {:guide => guide[:html]})
68
- FileUtils.rm(out_dir + "/README.md")
69
68
  end
70
69
  end
71
70
 
@@ -76,6 +76,8 @@ module JsDuck
76
76
  var_declaration
77
77
  elsif look("Ext", ".", "define", "(", :string)
78
78
  ext_define
79
+ elsif look("Ext", ".", "ClassManager", ".", "create", "(", :string)
80
+ ext_define
79
81
  elsif look(:ident, ":") || look(:string, ":")
80
82
  property_literal
81
83
  elsif look(",", :ident, ":") || look(",", :string, ":")
@@ -178,9 +180,11 @@ module JsDuck
178
180
  }
179
181
  end
180
182
 
181
- # <ext-define> := "Ext" "." "define" "(" <string> "," <ext-define-cfg>
183
+ # <ext-define> := "Ext" "." ["define" | "ClassManager" "." "create" ] "(" <string> "," <ext-define-cfg>
182
184
  def ext_define
183
- name = match("Ext", ".", "define", "(", :string)
185
+ match("Ext", ".");
186
+ look("define") ? match("define") : match("ClassManager", ".", "create");
187
+ name = match("(", :string)
184
188
 
185
189
  if look(",", "{")
186
190
  match(",")
data/lib/jsduck/logger.rb CHANGED
@@ -27,7 +27,7 @@ module JsDuck
27
27
  # warnings greatly also when run multiple processes.
28
28
  def warn(msg)
29
29
  if @warnings && !@shown_warnings[msg]
30
- puts "Warning: " + msg
30
+ $stderr.puts "Warning: " + msg
31
31
  @shown_warnings[msg] = true
32
32
  end
33
33
  end
@@ -133,7 +133,7 @@ Ext.define('Docs.controller.Classes', {
133
133
  url = url.replace(/.*#/, "");
134
134
 
135
135
  if (this.opensNewWindow(event)) {
136
- window.open(url);
136
+ window.open("#"+url);
137
137
  view && view.selectUrl(this.activeUrl ? this.activeUrl : "");
138
138
  }
139
139
  else {
@@ -26,7 +26,7 @@ Ext.define('Docs.view.cls.Overview', {
26
26
  var scrollOffset = el.getY() - (isMember ? 145 : 135);
27
27
  var docContent = this.getEl().down('.x-panel-body');
28
28
  var currentScroll = docContent.getScroll()['top'];
29
- docContent.scrollTo('top', currentScroll + scrollOffset, true);
29
+ docContent.scrollTo('top', currentScroll + scrollOffset);
30
30
 
31
31
  if (isMember && el.down(".expandable")) {
32
32
  el.addCls('open');
@@ -8,7 +8,7 @@ Ext.define('Docs.view.index.Container', {
8
8
  cls: 'class-list',
9
9
 
10
10
  initComponent: function() {
11
- var tpl = new Ext.XTemplate(
11
+ this.tpl = new Ext.XTemplate(
12
12
  '<h1 class="top">{title}</h1>',
13
13
  '<tpl if="notice">',
14
14
  '<div class="notice">{notice}</div>',
@@ -34,8 +34,7 @@ Ext.define('Docs.view.index.Container', {
34
34
  '</tpl>',
35
35
  '{categories}'
36
36
  );
37
-
38
- this.html = tpl.apply(this.extractData());
37
+ this.data = this.extractData();
39
38
 
40
39
  this.callParent(arguments);
41
40
  },
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsduck
3
3
  version: !ruby/object:Gem::Version
4
- hash: 961915908
4
+ hash: -1876988255
5
5
  prerelease: true
6
6
  segments:
7
7
  - 2
8
8
  - 0
9
- - pre
10
- version: 2.0.pre
9
+ - pre2
10
+ version: 2.0.pre2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Rene Saarsoo
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-06-30 00:00:00 +03:00
19
+ date: 2011-07-06 00:00:00 +03:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency
@@ -160,11 +160,11 @@ files:
160
160
  - template/resources/images/x.png
161
161
  - template/resources/images/x12.png
162
162
  - template/extjs/ext-all.js
163
- - template/resources/css/style.css
163
+ - template/resources/css/docs-ext.css
164
164
  - template/resources/css/scrollbars.css
165
- - template/resources/css/viewport.css
166
165
  - template/resources/css/reset.css
167
- - template/resources/css/docs-ext.css
166
+ - template/resources/css/style.css
167
+ - template/resources/css/viewport.css
168
168
  has_rdoc: true
169
169
  homepage: https://github.com/senchalabs/jsduck
170
170
  licenses: []