jsduck 4.6.1 → 4.6.2
Sign up to get free protection for your applications and to get access to all the features.
- data/.travis.yml +2 -1
- data/README.md +6 -12
- data/Rakefile +1 -1
- data/js-classes/Date.js +19 -18
- data/jsduck.gemspec +3 -2
- data/lib/jsduck/assets.rb +5 -5
- data/lib/jsduck/ast.rb +2 -2
- data/lib/jsduck/batch_formatter.rb +11 -5
- data/lib/jsduck/class_formatter.rb +1 -1
- data/lib/jsduck/doc_formatter.rb +19 -21
- data/lib/jsduck/doc_parser.rb +1 -1
- data/lib/jsduck/guides.rb +17 -8
- data/lib/jsduck/html_stack.rb +46 -32
- data/lib/jsduck/img/dir.rb +94 -0
- data/lib/jsduck/img/dir_set.rb +39 -0
- data/lib/jsduck/img/writer.rb +23 -0
- data/lib/jsduck/inline/auto_link.rb +106 -0
- data/lib/jsduck/inline/img.rb +19 -11
- data/lib/jsduck/inline/link.rb +6 -132
- data/lib/jsduck/inline/link_renderer.rb +69 -0
- data/lib/jsduck/options.rb +5 -3
- metadata +420 -396
- data/lib/jsduck/images.rb +0 -72
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -11,8 +11,8 @@ the old [ext-doc][] was. It is used by Sencha to document [Ext JS
|
|
11
11
|
products.
|
12
12
|
|
13
13
|
The highlights of JSDuck are [Markdown][] support and keeping you DRY
|
14
|
-
by inferring a lot of information from code. Read the
|
15
|
-
full overview.
|
14
|
+
by inferring a lot of information from code. Read the
|
15
|
+
[documentation][] for full overview.
|
16
16
|
|
17
17
|
**New to JSDuck?** Watch [introductory talk by Nick Poulden][video]:
|
18
18
|
|
@@ -23,8 +23,8 @@ full overview.
|
|
23
23
|
[Markdown]: http://daringfireball.net/projects/markdown/
|
24
24
|
[ext4-docs]: http://docs.sencha.com/ext-js/4-0/
|
25
25
|
[touch2-docs]: http://docs.sencha.com/touch/2-0/
|
26
|
-
[other-docs]: http://docs.sencha.com/
|
27
|
-
[
|
26
|
+
[other-docs]: http://docs.sencha.com/
|
27
|
+
[documentation]: https://github.com/senchalabs/jsduck/wiki
|
28
28
|
[video]: http://vimeo.com/33465319
|
29
29
|
|
30
30
|
Getting it
|
@@ -112,21 +112,15 @@ directories:
|
|
112
112
|
Note that the resulting documentation will only contain the API
|
113
113
|
documentation. Guides, videos and examples will not be present.
|
114
114
|
These can be added using more command line options as explained in the
|
115
|
-
[
|
116
|
-
|
117
|
-
[adv]: https://github.com/senchalabs/jsduck/wiki/Advanced-Usage
|
115
|
+
[documentation][].
|
118
116
|
|
119
117
|
|
120
118
|
Documenting your code
|
121
119
|
---------------------
|
122
120
|
|
123
|
-
|
124
|
-
Follow links in the guide to digg into the details.
|
125
|
-
|
126
|
-
Looking for specific @tag? Take a look at the [whole list of supported tags][tags].
|
121
|
+
Read the [documentation][] and take a look at [example.js][example].
|
127
122
|
|
128
123
|
[example]: https://github.com/senchalabs/jsduck/blob/master/opt/example.js
|
129
|
-
[tags]: https://github.com/senchalabs/jsduck/wiki/Tags
|
130
124
|
|
131
125
|
|
132
126
|
Hacking it
|
data/Rakefile
CHANGED
@@ -104,7 +104,7 @@ def compress
|
|
104
104
|
dir = "template-min"
|
105
105
|
|
106
106
|
# Create JSB3 file for Docs app
|
107
|
-
system("sencha", "create", "jsb", "-a", "http://localhost/docs/", "-p", "#{dir}/app.jsb3")
|
107
|
+
system("sencha", "create", "jsb", "-a", "http://localhost/~renesaarsoo/docs/", "-p", "#{dir}/app.jsb3")
|
108
108
|
# Concatenate files listed in JSB3 file
|
109
109
|
system("sencha", "build", "-p", "#{dir}/app.jsb3", "-d", dir)
|
110
110
|
|
data/js-classes/Date.js
CHANGED
@@ -234,7 +234,7 @@
|
|
234
234
|
|
235
235
|
/**
|
236
236
|
* @method getDate
|
237
|
-
* Returns the
|
237
|
+
* Returns the day of the month for the specified date according to local time.
|
238
238
|
*
|
239
239
|
* The second statement below assigns the value 25 to the variable `day`, based on the value of the
|
240
240
|
* `Date` object `Xmas95`.
|
@@ -247,7 +247,7 @@
|
|
247
247
|
|
248
248
|
/**
|
249
249
|
* @method getDay
|
250
|
-
* Returns the
|
250
|
+
* Returns the day of the week for the specified date according to local time.
|
251
251
|
*
|
252
252
|
* The value returned by `getDay` is an integer corresponding to the day of the week: 0 for Sunday, 1
|
253
253
|
* for Monday, 2 for Tuesday, and so on.
|
@@ -264,7 +264,7 @@
|
|
264
264
|
|
265
265
|
/**
|
266
266
|
* @method getFullYear
|
267
|
-
* Returns the
|
267
|
+
* Returns the year of the specified date according to local time.
|
268
268
|
*
|
269
269
|
* The value returned by `getFullYear` is an absolute number. For dates between the years 1000 and
|
270
270
|
* 9999, `getFullYear` returns a four-digit number, for example, 1995. Use this function to make sure
|
@@ -282,7 +282,7 @@
|
|
282
282
|
|
283
283
|
/**
|
284
284
|
* @method getHours
|
285
|
-
* Returns the
|
285
|
+
* Returns the hour for the specified date according to local time.
|
286
286
|
*
|
287
287
|
* The second statement below assigns the value 23 to the variable `hours`, based on the value of the
|
288
288
|
* `Date` object `Xmas95`.
|
@@ -295,7 +295,7 @@
|
|
295
295
|
|
296
296
|
/**
|
297
297
|
* @method getMilliseconds
|
298
|
-
* Returns the
|
298
|
+
* Returns the milliseconds in the specified date according to local time.
|
299
299
|
*
|
300
300
|
* The following example assigns the milliseconds portion of the current time to the variable ms.
|
301
301
|
*
|
@@ -308,7 +308,7 @@
|
|
308
308
|
|
309
309
|
/**
|
310
310
|
* @method getMinutes
|
311
|
-
* Returns the
|
311
|
+
* Returns the minutes in the specified date according to local time.
|
312
312
|
*
|
313
313
|
* The second statement below assigns the value 15 to the variable `minutes`, based on the value of
|
314
314
|
* the `Date` object `Xmas95`.
|
@@ -321,7 +321,7 @@
|
|
321
321
|
|
322
322
|
/**
|
323
323
|
* @method getMonth
|
324
|
-
* Returns the
|
324
|
+
* Returns the month in the specified date according to local time.
|
325
325
|
*
|
326
326
|
* The second statement below assigns the value 11 to the variable `month`, based on the value of the
|
327
327
|
* `Date` object `Xmas95`.
|
@@ -334,7 +334,7 @@
|
|
334
334
|
|
335
335
|
/**
|
336
336
|
* @method getSeconds
|
337
|
-
* Returns the
|
337
|
+
* Returns the seconds in the specified date according to local time.
|
338
338
|
*
|
339
339
|
* The second statement below assigns the value 30 to the variable `secs`, based on the value of the
|
340
340
|
* `Date` object `Xmas95`.
|
@@ -347,7 +347,8 @@
|
|
347
347
|
|
348
348
|
/**
|
349
349
|
* @method getTime
|
350
|
-
* Returns the numeric value corresponding to the
|
350
|
+
* Returns the numeric value corresponding to the time for the specified date according to
|
351
|
+
* universal time.
|
351
352
|
*
|
352
353
|
* The value returned by the `getTime` method is the number of milliseconds since 1 January 1970
|
353
354
|
* 00:00:00 UTC. You can use this method to help assign a date and time to another `Date` object.
|
@@ -381,7 +382,7 @@
|
|
381
382
|
|
382
383
|
/**
|
383
384
|
* @method getTimezoneOffset
|
384
|
-
* Returns the
|
385
|
+
* Returns the time-zone offset from UTC, in minutes, for the current locale.
|
385
386
|
*
|
386
387
|
* The time-zone offset is the difference, in minutes, between UTC and local time. Note that this
|
387
388
|
* means that the offset is positive if the local timezone is behind UTC and negative if it is ahead.
|
@@ -396,7 +397,7 @@
|
|
396
397
|
|
397
398
|
/**
|
398
399
|
* @method getUTCDate
|
399
|
-
* Returns the
|
400
|
+
* Returns the day (date) of the month in the specified date according to universal time.
|
400
401
|
*
|
401
402
|
* The following example assigns the day portion of the current date to the variable `d`.
|
402
403
|
*
|
@@ -409,7 +410,7 @@
|
|
409
410
|
|
410
411
|
/**
|
411
412
|
* @method getUTCDay
|
412
|
-
* Returns the
|
413
|
+
* Returns the day of the week in the specified date according to universal time.
|
413
414
|
*
|
414
415
|
* The following example assigns the weekday portion of the current date to the variable `weekday`.
|
415
416
|
*
|
@@ -423,7 +424,7 @@
|
|
423
424
|
|
424
425
|
/**
|
425
426
|
* @method getUTCFullYear
|
426
|
-
* Returns the
|
427
|
+
* Returns the year in the specified date according to universal time.
|
427
428
|
*
|
428
429
|
* The following example assigns the four-digit value of the current year to the variable `yr`.
|
429
430
|
*
|
@@ -436,7 +437,7 @@
|
|
436
437
|
|
437
438
|
/**
|
438
439
|
* @method getUTCHours
|
439
|
-
* Returns the
|
440
|
+
* Returns the hours in the specified date according to universal time.
|
440
441
|
*
|
441
442
|
* The following example assigns the hours portion of the current time to the variable `hrs`.
|
442
443
|
*
|
@@ -449,7 +450,7 @@
|
|
449
450
|
|
450
451
|
/**
|
451
452
|
* @method getUTCMilliseconds
|
452
|
-
* Returns the
|
453
|
+
* Returns the milliseconds in the specified date according to universal time.
|
453
454
|
*
|
454
455
|
* The following example assigns the milliseconds portion of the current time to the variable `ms`.
|
455
456
|
*
|
@@ -462,7 +463,7 @@
|
|
462
463
|
|
463
464
|
/**
|
464
465
|
* @method getUTCMinutes
|
465
|
-
* Returns the
|
466
|
+
* Returns the minutes in the specified date according to universal time.
|
466
467
|
*
|
467
468
|
* The following example assigns the minutes portion of the current time to the variable `min`.
|
468
469
|
*
|
@@ -475,7 +476,7 @@
|
|
475
476
|
|
476
477
|
/**
|
477
478
|
* @method getUTCMonth
|
478
|
-
* Returns the
|
479
|
+
* Returns the month of the specified date according to universal time.
|
479
480
|
*
|
480
481
|
* The following example assigns the month portion of the current date to the variable `mon`.
|
481
482
|
*
|
@@ -488,7 +489,7 @@
|
|
488
489
|
|
489
490
|
/**
|
490
491
|
* @method getUTCSeconds
|
491
|
-
* Returns the
|
492
|
+
* Returns the seconds in the specified date according to universal time.
|
492
493
|
*
|
493
494
|
* The following example assigns the seconds portion of the current time to the variable `sec`.
|
494
495
|
*
|
data/jsduck.gemspec
CHANGED
@@ -2,8 +2,8 @@ Gem::Specification.new do |s|
|
|
2
2
|
s.required_rubygems_version = ">= 1.3.5"
|
3
3
|
|
4
4
|
s.name = 'jsduck'
|
5
|
-
s.version = '4.6.
|
6
|
-
s.date = '2013-
|
5
|
+
s.version = '4.6.2'
|
6
|
+
s.date = '2013-02-25'
|
7
7
|
s.summary = "Simple JavaScript Duckumentation generator"
|
8
8
|
s.description = "Documentation generator for Sencha JS frameworks"
|
9
9
|
s.homepage = "https://github.com/senchalabs/jsduck"
|
@@ -23,6 +23,7 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'json'
|
24
24
|
s.add_dependency 'parallel'
|
25
25
|
s.add_dependency 'therubyracer', '>= 0.10.0', '< 0.11.0'
|
26
|
+
s.add_dependency 'dimensions'
|
26
27
|
|
27
28
|
s.add_development_dependency 'rspec'
|
28
29
|
s.add_development_dependency 'rake'
|
data/lib/jsduck/assets.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
|
-
require 'jsduck/
|
1
|
+
require 'jsduck/img/dir_set'
|
2
|
+
require 'jsduck/img/writer'
|
2
3
|
require 'jsduck/welcome'
|
3
4
|
require 'jsduck/guides'
|
4
5
|
require 'jsduck/videos'
|
@@ -26,10 +27,9 @@ module JsDuck
|
|
26
27
|
@relations = relations
|
27
28
|
@opts = opts
|
28
29
|
|
29
|
-
doc_formatter = DocFormatter.new(@opts)
|
30
|
-
doc_formatter.relations = @relations
|
30
|
+
doc_formatter = DocFormatter.new(@relations, @opts)
|
31
31
|
|
32
|
-
@images =
|
32
|
+
@images = Img::DirSet.new(@opts.images, "images")
|
33
33
|
@welcome = Welcome.create(@opts.welcome, doc_formatter)
|
34
34
|
@guides = Guides.create(@opts.guides, doc_formatter, @opts)
|
35
35
|
@videos = Videos.create(@opts.videos)
|
@@ -43,7 +43,7 @@ module JsDuck
|
|
43
43
|
# Welcome page and categories are written in JsDuck::IndexHtml
|
44
44
|
def write
|
45
45
|
@guides.write(@opts.output_dir+"/guides")
|
46
|
-
|
46
|
+
Img::Writer.copy(@images.all_used, @opts.output_dir+"/images")
|
47
47
|
end
|
48
48
|
|
49
49
|
end
|
data/lib/jsduck/ast.rb
CHANGED
@@ -79,7 +79,7 @@ module JsDuck
|
|
79
79
|
make_class(to_s(var["id"]), var["right"])
|
80
80
|
|
81
81
|
# function Foo() {}
|
82
|
-
elsif function?(ast) && class_name?(to_s(ast["id"]))
|
82
|
+
elsif function?(ast) && ast["id"] && class_name?(to_s(ast["id"]))
|
83
83
|
make_class(to_s(ast["id"]))
|
84
84
|
|
85
85
|
# { ... }
|
@@ -88,7 +88,7 @@ module JsDuck
|
|
88
88
|
|
89
89
|
# function foo() {}
|
90
90
|
elsif function?(ast)
|
91
|
-
make_method(to_s(ast["id"]), ast)
|
91
|
+
make_method(ast["id"] ? to_s(ast["id"]) : "", ast)
|
92
92
|
|
93
93
|
# foo = function() {}
|
94
94
|
elsif exp && assignment?(exp) && function?(exp["right"])
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'jsduck/util/parallel'
|
2
2
|
require 'jsduck/class_formatter'
|
3
3
|
require 'jsduck/doc_formatter'
|
4
|
+
require 'jsduck/img/dir_set'
|
4
5
|
require 'jsduck/logger'
|
5
6
|
|
6
7
|
module JsDuck
|
@@ -21,7 +22,7 @@ module JsDuck
|
|
21
22
|
begin
|
22
23
|
{
|
23
24
|
:doc => formatter.format(cls.internal_doc),
|
24
|
-
:images => formatter.images
|
25
|
+
:images => formatter.images.all_used
|
25
26
|
}
|
26
27
|
rescue
|
27
28
|
Logger.fatal_backtrace("Error while formatting #{cls[:name]} #{files}", $!)
|
@@ -32,15 +33,20 @@ module JsDuck
|
|
32
33
|
# Then merge the data back to classes sequentially
|
33
34
|
formatted_classes.each do |cls|
|
34
35
|
relations[cls[:doc][:name]].internal_doc = cls[:doc]
|
35
|
-
|
36
|
+
# Perform lookup of all the images again. We're really doing
|
37
|
+
# this work twice now, but as we usually don't have excessive
|
38
|
+
# amounts of images, the performance penalty should be minimal.
|
39
|
+
cls[:images].each {|img| assets.images.get(img[:filename]) }
|
36
40
|
end
|
41
|
+
|
42
|
+
# Print warnings for unused images
|
43
|
+
assets.images.report_unused
|
37
44
|
end
|
38
45
|
|
39
46
|
# Factory method to create new ClassFormatter instances.
|
40
47
|
def self.create_class_formatter(relations, opts)
|
41
|
-
doc_formatter = DocFormatter.new(opts)
|
42
|
-
doc_formatter.
|
43
|
-
doc_formatter.img_path = "images"
|
48
|
+
doc_formatter = DocFormatter.new(relations, opts)
|
49
|
+
doc_formatter.images = Img::DirSet.new(opts.images, "images")
|
44
50
|
|
45
51
|
class_formatter = ClassFormatter.new(relations, doc_formatter)
|
46
52
|
# Don't format types when exporting
|
data/lib/jsduck/doc_formatter.rb
CHANGED
@@ -3,6 +3,8 @@ require 'strscan'
|
|
3
3
|
require 'rdiscount'
|
4
4
|
require 'jsduck/html_stack'
|
5
5
|
require 'jsduck/inline/link'
|
6
|
+
require 'jsduck/inline/auto_link'
|
7
|
+
require 'jsduck/inline/link_renderer'
|
6
8
|
require 'jsduck/inline/img'
|
7
9
|
require 'jsduck/inline/video'
|
8
10
|
require 'jsduck/inline/example'
|
@@ -15,21 +17,21 @@ module JsDuck
|
|
15
17
|
# Creates a formatter configured with options originating from
|
16
18
|
# command line. For the actual effect of the options see
|
17
19
|
# Inline::* classes.
|
18
|
-
def initialize(opts={})
|
20
|
+
def initialize(relations={}, opts={})
|
19
21
|
@opts = opts
|
20
|
-
@
|
22
|
+
@link_renderer = Inline::LinkRenderer.new(relations, opts)
|
23
|
+
@inline_link = Inline::Link.new(@link_renderer)
|
24
|
+
@auto_link = Inline::AutoLink.new(@link_renderer)
|
21
25
|
@inline_img = Inline::Img.new(opts)
|
22
26
|
@inline_video = Inline::Video.new(opts)
|
23
27
|
@inline_example = Inline::Example.new(opts)
|
24
28
|
@doc_context = {}
|
25
29
|
end
|
26
30
|
|
27
|
-
#
|
28
|
-
def
|
29
|
-
@inline_img.
|
31
|
+
# Accessors to the images attribute of Inline::Img
|
32
|
+
def images=(images)
|
33
|
+
@inline_img.images = images
|
30
34
|
end
|
31
|
-
|
32
|
-
# Returns list of all image paths gathered from {@img} tags.
|
33
35
|
def images
|
34
36
|
@inline_img.images
|
35
37
|
end
|
@@ -39,6 +41,7 @@ module JsDuck
|
|
39
41
|
# Context#blah is meant.
|
40
42
|
def class_context=(cls)
|
41
43
|
@inline_link.class_context = cls
|
44
|
+
@auto_link.class_context = cls
|
42
45
|
end
|
43
46
|
|
44
47
|
# Sets up instance to work in context of particular doc object.
|
@@ -47,6 +50,8 @@ module JsDuck
|
|
47
50
|
@doc_context = doc
|
48
51
|
@inline_video.doc_context = doc
|
49
52
|
@inline_link.doc_context = doc
|
53
|
+
@auto_link.doc_context = doc
|
54
|
+
@inline_img.doc_context = doc
|
50
55
|
end
|
51
56
|
|
52
57
|
# Returns the current documentation context
|
@@ -54,15 +59,6 @@ module JsDuck
|
|
54
59
|
@doc_context
|
55
60
|
end
|
56
61
|
|
57
|
-
# JsDuck::Relations for looking up class names.
|
58
|
-
#
|
59
|
-
# When auto-creating class links from CamelCased names found from
|
60
|
-
# text, we check the relations object to see if a class with that
|
61
|
-
# name actually exists.
|
62
|
-
def relations=(relations)
|
63
|
-
@inline_link.relations = relations
|
64
|
-
end
|
65
|
-
|
66
62
|
# Formats doc-comment for placement into HTML.
|
67
63
|
# Renders it with Markdown-formatter and replaces @link-s.
|
68
64
|
def format(input)
|
@@ -114,13 +110,15 @@ module JsDuck
|
|
114
110
|
# There might still be "{" that doesn't begin {@link} or {@img} - ignore it
|
115
111
|
out += s.scan(/[{]/)
|
116
112
|
elsif substitute = @inline_example.replace(s)
|
113
|
+
tags.push_tag("pre")
|
114
|
+
tags.push_tag("code")
|
117
115
|
out += substitute
|
118
116
|
elsif s.check(/<\w/)
|
119
117
|
# Open HTML tag
|
120
|
-
out +=
|
118
|
+
out += tags.open(s)
|
121
119
|
elsif s.check(/<\/\w+>/)
|
122
120
|
# Close HTML tag
|
123
|
-
out +=
|
121
|
+
out += tags.close(s)
|
124
122
|
elsif s.check(/</)
|
125
123
|
# Ignore plain '<' char.
|
126
124
|
out += s.scan(/</)
|
@@ -128,16 +126,16 @@ module JsDuck
|
|
128
126
|
# Replace class names in the following text up to next "<" or "{"
|
129
127
|
# but only when we're not inside <a>...</a>
|
130
128
|
text = s.scan(/[^{<]+/)
|
131
|
-
out += tags.open?("a") ? text : @
|
129
|
+
out += tags.open?("a") ? text : @auto_link.replace(text)
|
132
130
|
end
|
133
131
|
end
|
134
132
|
|
135
|
-
out
|
133
|
+
out
|
136
134
|
end
|
137
135
|
|
138
136
|
# Creates a link based on the link template.
|
139
137
|
def link(cls, member, anchor_text, type=nil, static=nil)
|
140
|
-
@
|
138
|
+
@link_renderer.link(cls, member, anchor_text, type, static)
|
141
139
|
end
|
142
140
|
|
143
141
|
end
|