jsduck 4.9.0 → 4.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +6 -0
- data/jsduck.gemspec +1 -1
- data/lib/jsduck/app_data.rb +2 -1
- data/lib/jsduck/guide_anchors.rb +32 -0
- data/lib/jsduck/guide_toc.rb +49 -0
- data/lib/jsduck/guides.rb +5 -32
- data/lib/jsduck/options.rb +36 -1
- data/lib/jsduck/search_data.rb +3 -2
- metadata +6 -4
data/Rakefile
CHANGED
@@ -159,6 +159,11 @@ class JsDuckRunner
|
|
159
159
|
add_options("--comments-domain", db_name+"/"+version)
|
160
160
|
end
|
161
161
|
|
162
|
+
def add_search(product, version)
|
163
|
+
add_options("--search-url", "http://support-test.sencha.com:8080/docsearch/search")
|
164
|
+
add_options("--search-domain", product+"/"+version)
|
165
|
+
end
|
166
|
+
|
162
167
|
def add_ext4
|
163
168
|
@options += [
|
164
169
|
"--title", "Sencha Docs - Ext JS 4.0",
|
@@ -261,6 +266,7 @@ task :sdk => :sass do
|
|
261
266
|
)
|
262
267
|
runner.add_debug
|
263
268
|
runner.add_comments('ext-js', '4')
|
269
|
+
runner.add_search('Ext JS', '4.2.0')
|
264
270
|
runner.run
|
265
271
|
|
266
272
|
system("ln -s #{EXT_BUILD} #{OUT_DIR}/extjs-build")
|
data/jsduck.gemspec
CHANGED
@@ -2,7 +2,7 @@ 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.
|
5
|
+
s.version = '4.10.0'
|
6
6
|
s.date = Time.new.strftime('%Y-%m-%d')
|
7
7
|
s.summary = "Simple JavaScript Duckumentation generator"
|
8
8
|
s.description = "Documentation generator for Sencha JS frameworks"
|
data/lib/jsduck/app_data.rb
CHANGED
@@ -21,7 +21,8 @@ module JsDuck
|
|
21
21
|
:guides => @assets.guides.to_array,
|
22
22
|
:videos => @assets.videos.to_array,
|
23
23
|
:examples => @assets.examples.to_array,
|
24
|
-
:search => SearchData.new.create(@relations.classes, @assets),
|
24
|
+
:search => SearchData.new.create(@relations.classes, @assets, @opts),
|
25
|
+
:guideSearch => @opts.search,
|
25
26
|
:tests => @opts.tests,
|
26
27
|
:signatures => MetaTagRegistry.instance.signatures,
|
27
28
|
:localStorageDb => @opts.local_storage_db,
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module JsDuck
|
2
|
+
|
3
|
+
# Transforms in-page links so they won't break docs app #!-navigation.
|
4
|
+
#
|
5
|
+
# For example a link to "#automation" in testing guide will be
|
6
|
+
# replaced with "#!/guide/testing-section-automation" and the link
|
7
|
+
# target ID will be transformed into "testing-section-automation".
|
8
|
+
class GuideAnchors
|
9
|
+
|
10
|
+
def self.transform(html, guide_name)
|
11
|
+
html.gsub(/(<a\s+(?:[^<>]*\s+)?href=['"]#)([^!].*?)(['"])/i) do |m|
|
12
|
+
"#{$1}!/guide/#{guide_name}-section-#{$2}#{$3}"
|
13
|
+
|
14
|
+
end.gsub(/(<a\s+(?:[^<>]*\s+)?name=['"])(.*?)(['"])/i) do |m|
|
15
|
+
$1 + transform_id($2, guide_name) + $3
|
16
|
+
|
17
|
+
end.gsub(/(<\w+\s+(?:[^<>]*\s+)?id=['"])(.*?)(['"])/i) do |m|
|
18
|
+
$1 + transform_id($2, guide_name) + $3
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.transform_id(id, guide_name)
|
23
|
+
if id =~ /^#{guide_name}-section-/
|
24
|
+
id
|
25
|
+
else
|
26
|
+
"#{guide_name}-section-#{id}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'jsduck/util/html'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
# Adds Table of Contents section to guide HTML.
|
6
|
+
class GuideToc
|
7
|
+
|
8
|
+
# Inserts table of contents at the top of guide HTML by looking
|
9
|
+
# for <h2> elements.
|
10
|
+
def self.inject(html, guide_name)
|
11
|
+
toc = []
|
12
|
+
new_html = []
|
13
|
+
|
14
|
+
html.each_line do |line|
|
15
|
+
if line =~ /^\s*<(h[1-6])>(.*?)<\/h[1-6]>$/
|
16
|
+
tag = $1
|
17
|
+
text = Util::HTML.strip_tags($2)
|
18
|
+
id = guide_name + "-section-" + title_to_id(text)
|
19
|
+
if tag == "h2"
|
20
|
+
toc << "<li><a href='#!/guide/#{id}'>#{text}</a></li>\n"
|
21
|
+
end
|
22
|
+
new_html << "<#{tag} id='#{id}'>#{text}</#{tag}>\n"
|
23
|
+
else
|
24
|
+
new_html << line
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# Inject TOC below first heading if at least 2 items in TOC
|
29
|
+
if toc.length >= 2
|
30
|
+
new_html.insert(1, [
|
31
|
+
"<div class='toc'>\n",
|
32
|
+
"<p><strong>Contents</strong></p>\n",
|
33
|
+
"<ol>\n",
|
34
|
+
toc,
|
35
|
+
"</ol>\n",
|
36
|
+
"</div>\n",
|
37
|
+
])
|
38
|
+
end
|
39
|
+
|
40
|
+
new_html.flatten.join
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.title_to_id(title)
|
44
|
+
title.downcase.gsub(/[^\w]+/, "-")
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/lib/jsduck/guides.rb
CHANGED
@@ -4,7 +4,8 @@ require 'jsduck/util/io'
|
|
4
4
|
require 'jsduck/util/null_object'
|
5
5
|
require 'jsduck/logger'
|
6
6
|
require 'jsduck/grouped_asset'
|
7
|
-
require 'jsduck/
|
7
|
+
require 'jsduck/guide_toc'
|
8
|
+
require 'jsduck/guide_anchors'
|
8
9
|
require 'jsduck/img/dir'
|
9
10
|
require 'fileutils'
|
10
11
|
|
@@ -67,7 +68,9 @@ module JsDuck
|
|
67
68
|
def format_guide(guide)
|
68
69
|
@formatter.doc_context = {:filename => guide[:filename], :linenr => 0}
|
69
70
|
@formatter.images = Img::Dir.new(guide["url"], "guides/#{guide["name"]}")
|
70
|
-
html =
|
71
|
+
html = @formatter.format(Util::IO.read(guide[:filename]))
|
72
|
+
html = GuideToc.inject(html, guide['name'])
|
73
|
+
html = GuideAnchors.transform(html, guide['name'])
|
71
74
|
|
72
75
|
# Report unused images (but ignore the icon files)
|
73
76
|
@formatter.images.get("icon.png")
|
@@ -115,36 +118,6 @@ module JsDuck
|
|
115
118
|
end
|
116
119
|
end
|
117
120
|
|
118
|
-
# Creates table of contents at the top of guide by looking for <h2> elements in HTML.
|
119
|
-
def add_toc(guide, html)
|
120
|
-
toc = [
|
121
|
-
"<div class='toc'>\n",
|
122
|
-
"<p><strong>Contents</strong></p>\n",
|
123
|
-
"<ol>\n",
|
124
|
-
]
|
125
|
-
new_html = []
|
126
|
-
i = 0
|
127
|
-
html.each_line do |line|
|
128
|
-
if line =~ /^<h2>(.*)<\/h2>$/
|
129
|
-
i += 1
|
130
|
-
text = Util::HTML.strip_tags($1)
|
131
|
-
toc << "<li><a href='#!/guide/#{guide['name']}-section-#{i}'>#{text}</a></li>\n"
|
132
|
-
new_html << "<h2 id='#{guide['name']}-section-#{i}'>#{text}</h2>\n"
|
133
|
-
else
|
134
|
-
new_html << line
|
135
|
-
end
|
136
|
-
end
|
137
|
-
toc << "</ol>\n"
|
138
|
-
toc << "</div>\n"
|
139
|
-
# Inject TOC at below first heading if at least 2 items in TOC
|
140
|
-
if i >= 2
|
141
|
-
new_html.insert(1, toc)
|
142
|
-
new_html.flatten.join
|
143
|
-
else
|
144
|
-
html
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
121
|
# Returns HTML listing of guides
|
149
122
|
def to_html(style="")
|
150
123
|
html = @groups.map do |group|
|
data/lib/jsduck/options.rb
CHANGED
@@ -40,6 +40,7 @@ module JsDuck
|
|
40
40
|
attr_accessor :tests
|
41
41
|
attr_accessor :comments_url
|
42
42
|
attr_accessor :comments_domain
|
43
|
+
attr_accessor :search
|
43
44
|
attr_accessor :ignore_html
|
44
45
|
|
45
46
|
# Debugging
|
@@ -93,7 +94,7 @@ module JsDuck
|
|
93
94
|
@ext4_events = nil
|
94
95
|
@meta_tag_paths = []
|
95
96
|
|
96
|
-
@version = "4.
|
97
|
+
@version = "4.10.0"
|
97
98
|
|
98
99
|
# Customizing output
|
99
100
|
@title = "Documentation - JSDuck"
|
@@ -120,6 +121,7 @@ module JsDuck
|
|
120
121
|
@tests = false
|
121
122
|
@comments_url = nil
|
122
123
|
@comments_domain = nil
|
124
|
+
@search = {}
|
123
125
|
@ignore_html = {}
|
124
126
|
|
125
127
|
# Debugging
|
@@ -426,6 +428,8 @@ module JsDuck
|
|
426
428
|
end
|
427
429
|
|
428
430
|
opts.on('--comments-domain=STRING',
|
431
|
+
"A name identifying the subset of comments.",
|
432
|
+
"",
|
429
433
|
"A string consisting of <name>/<version>.",
|
430
434
|
"",
|
431
435
|
"For example: ext-js/4",
|
@@ -434,6 +438,37 @@ module JsDuck
|
|
434
438
|
@comments_domain = domain
|
435
439
|
end
|
436
440
|
|
441
|
+
opts.on('--search-url=URL',
|
442
|
+
"Address of guides search server.",
|
443
|
+
"",
|
444
|
+
"When supplied, the search for guides is performed through this",
|
445
|
+
"external service and the results merged together with API search.",
|
446
|
+
"The search server must respond to JSONP requests.",
|
447
|
+
"",
|
448
|
+
"For example: http://sencha.com/docsearch",
|
449
|
+
"",
|
450
|
+
"Must be used together with --search-domain option.",
|
451
|
+
"",
|
452
|
+
"This option is EXPERIMENTAL.") do |url|
|
453
|
+
@search[:url] = url
|
454
|
+
end
|
455
|
+
|
456
|
+
opts.on('--search-domain=STRING',
|
457
|
+
"A name identifying the subset to search from.",
|
458
|
+
"",
|
459
|
+
"A string consisting of <name>/<version>.",
|
460
|
+
"",
|
461
|
+
"Tells the search engine which product and version",
|
462
|
+
"to include into search.",
|
463
|
+
"",
|
464
|
+
"For example: Ext JS/4.2.0",
|
465
|
+
"",
|
466
|
+
"Must be used together with --search-url option.",
|
467
|
+
"",
|
468
|
+
"This option is EXPERIMENTAL.") do |domain|
|
469
|
+
@search[:product], @search[:version] = domain.split(/\//)
|
470
|
+
end
|
471
|
+
|
437
472
|
opts.separator ""
|
438
473
|
opts.separator "Tweaking:"
|
439
474
|
opts.separator ""
|
data/lib/jsduck/search_data.rb
CHANGED
@@ -8,7 +8,7 @@ module JsDuck
|
|
8
8
|
class SearchData
|
9
9
|
# Given list of classes and other assets, returns an array of
|
10
10
|
# hashes describing the search data.
|
11
|
-
def create(classes, assets)
|
11
|
+
def create(classes, assets, opts)
|
12
12
|
list = []
|
13
13
|
|
14
14
|
classes.each do |cls|
|
@@ -30,7 +30,8 @@ module JsDuck
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
|
33
|
+
# Don't include guides data when separate guides search engine is provided
|
34
|
+
assets.guides.each_item {|g| list << guide_node(g) } unless opts.search[:url]
|
34
35
|
|
35
36
|
assets.videos.each_item {|v| list << video_node(v) }
|
36
37
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsduck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.10.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-05-
|
13
|
+
date: 2013-05-10 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdiscount
|
@@ -224,6 +224,8 @@ files:
|
|
224
224
|
- lib/jsduck/file_categories.rb
|
225
225
|
- lib/jsduck/function_ast.rb
|
226
226
|
- lib/jsduck/grouped_asset.rb
|
227
|
+
- lib/jsduck/guide_anchors.rb
|
228
|
+
- lib/jsduck/guide_toc.rb
|
227
229
|
- lib/jsduck/guide_writer.rb
|
228
230
|
- lib/jsduck/guides.rb
|
229
231
|
- lib/jsduck/html_stack.rb
|
@@ -673,10 +675,10 @@ files:
|
|
673
675
|
- template-min/extjs/resources/themes/images/default/btn-group/btn-group-default-framed-sides.gif
|
674
676
|
- template-min/index-template.html
|
675
677
|
- template-min/README.md
|
678
|
+
- template-min/app-0b00cb36fe5624b12d5a495c4289e5d9.js
|
676
679
|
- template-min/eg-iframe.html
|
677
|
-
- template-min/app-baf1b533a51447e178d66adecf5e85d4.js
|
678
680
|
- template-min/index.php
|
679
|
-
- template-min/resources/css/app-
|
681
|
+
- template-min/resources/css/app-c8e1f59f40e720cb5379f7041379119a.css
|
680
682
|
- template-min/resources/images/link-green-standard.png
|
681
683
|
- template-min/resources/images/class-m.png
|
682
684
|
- template-min/resources/images/singleton-m.png
|