jsduck 3.10.0 → 3.10.1
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -0
- data/Rakefile +10 -7
- data/jsduck.gemspec +7 -3
- data/lib/jsduck/doc_formatter.rb +4 -7
- data/lib/jsduck/guides.rb +5 -3
- data/lib/jsduck/html.rb +25 -0
- data/lib/jsduck/inline_examples.rb +2 -5
- data/lib/jsduck/inline_img.rb +2 -2
- data/lib/jsduck/inline_video.rb +2 -2
- data/lib/jsduck/options.rb +1 -1
- data/lib/jsduck/renderer.rb +3 -3
- data/lib/jsduck/source_file.rb +2 -2
- metadata +52 -10
- data/opt/aside.png +0 -0
- data/opt/comments-server-side/.gitignore +0 -2
- data/opt/comments-server-side/ForumUser.js +0 -80
- data/opt/comments-server-side/app.js +0 -366
- data/opt/comments-server-side/database.js +0 -53
- data/opt/comments-server-side/package.json +0 -19
- data/opt/comments-server-side/util.js +0 -396
- data/opt/example.js +0 -149
data/Gemfile
ADDED
data/Rakefile
CHANGED
@@ -1,13 +1,16 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake'
|
3
|
-
require 'json'
|
4
3
|
|
5
4
|
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
6
5
|
|
6
|
+
def os_is_windows?
|
7
|
+
RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
|
8
|
+
end
|
9
|
+
|
7
10
|
require 'rspec'
|
8
11
|
require 'rspec/core/rake_task'
|
9
12
|
RSpec::Core::RakeTask.new(:spec) do |spec|
|
10
|
-
spec.rspec_opts = ["--color"]
|
13
|
+
spec.rspec_opts = ["--color"] unless os_is_windows?
|
11
14
|
spec.pattern = "spec/**/*_spec.rb"
|
12
15
|
end
|
13
16
|
|
@@ -176,11 +179,11 @@ class JsDuckRunner
|
|
176
179
|
end
|
177
180
|
|
178
181
|
def add_debug
|
179
|
-
|
182
|
+
add_options(
|
180
183
|
"--extjs-path", "extjs/ext-all-debug.js",
|
181
|
-
"--template-links",
|
182
184
|
"--template", "template",
|
183
|
-
|
185
|
+
)
|
186
|
+
add_options("--template-links") unless os_is_windows?
|
184
187
|
end
|
185
188
|
|
186
189
|
def run
|
@@ -246,7 +249,7 @@ task :touch2 => :sass do
|
|
246
249
|
runner.add_options(
|
247
250
|
"--output", OUT_DIR,
|
248
251
|
"--config", "#{SDK_DIR}/touch/docs/config.json",
|
249
|
-
"--examples-base-url", "touch/examples/production/",
|
252
|
+
"--examples-base-url", "touch-build/examples/production/",
|
250
253
|
"--seo",
|
251
254
|
"--tests"
|
252
255
|
)
|
@@ -255,7 +258,7 @@ task :touch2 => :sass do
|
|
255
258
|
runner.add_comments('touch', '2')
|
256
259
|
runner.run
|
257
260
|
|
258
|
-
system("cp -r #{TOUCH_BUILD} #{OUT_DIR}/touch")
|
261
|
+
system("cp -r #{TOUCH_BUILD} #{OUT_DIR}/touch-build")
|
259
262
|
end
|
260
263
|
|
261
264
|
task :default => :spec
|
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 = '3.10.
|
6
|
-
s.date = '2012-05-
|
5
|
+
s.version = '3.10.1'
|
6
|
+
s.date = '2012-05-11'
|
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"
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.rubyforge_project = s.name
|
13
13
|
|
14
14
|
s.files = `git ls-files`.split("\n").find_all do |file|
|
15
|
-
file !~ /spec.rb$/ && file !~ /benchmark/ && file !~ /template\//
|
15
|
+
file !~ /spec.rb$/ && file !~ /benchmark/ && file !~ /template\// && file !~ /opt\//
|
16
16
|
end
|
17
17
|
# Add files not in git
|
18
18
|
s.files += Dir['template-min/**/*']
|
@@ -23,5 +23,9 @@ Gem::Specification.new do |s|
|
|
23
23
|
s.add_dependency 'json'
|
24
24
|
s.add_dependency 'parallel'
|
25
25
|
|
26
|
+
s.add_development_dependency 'rspec'
|
27
|
+
s.add_development_dependency 'rake'
|
28
|
+
s.add_development_dependency 'compass'
|
29
|
+
|
26
30
|
s.require_path = 'lib'
|
27
31
|
end
|
data/lib/jsduck/doc_formatter.rb
CHANGED
@@ -2,10 +2,10 @@
|
|
2
2
|
require 'rubygems'
|
3
3
|
require 'rdiscount'
|
4
4
|
require 'strscan'
|
5
|
-
require 'cgi'
|
6
5
|
require 'jsduck/logger'
|
7
6
|
require 'jsduck/inline_img'
|
8
7
|
require 'jsduck/inline_video'
|
8
|
+
require 'jsduck/html'
|
9
9
|
|
10
10
|
module JsDuck
|
11
11
|
|
@@ -274,7 +274,7 @@ module JsDuck
|
|
274
274
|
when '%-'
|
275
275
|
member ? "-" : ""
|
276
276
|
when '%a'
|
277
|
-
|
277
|
+
HTML.escape(anchor_text||"")
|
278
278
|
else
|
279
279
|
$1
|
280
280
|
end
|
@@ -327,7 +327,7 @@ module JsDuck
|
|
327
327
|
# Blah blah blah some text.
|
328
328
|
#
|
329
329
|
def shorten(input)
|
330
|
-
sent = first_sentence(strip_tags(input))
|
330
|
+
sent = first_sentence(HTML.strip_tags(input).strip)
|
331
331
|
# Use u-modifier to correctly count multi-byte characters
|
332
332
|
chars = sent.scan(/./mu)
|
333
333
|
if chars.length > @max_length
|
@@ -343,15 +343,12 @@ module JsDuck
|
|
343
343
|
|
344
344
|
# Returns true when input should get shortened.
|
345
345
|
def too_long?(input)
|
346
|
-
stripped = strip_tags(input)
|
346
|
+
stripped = HTML.strip_tags(input).strip
|
347
347
|
# for sentence v/s full - compare byte length
|
348
348
|
# for full v/s max - compare char length
|
349
349
|
first_sentence(stripped).length < stripped.length || stripped.scan(/./mu).length > @max_length
|
350
350
|
end
|
351
351
|
|
352
|
-
def strip_tags(str)
|
353
|
-
str.gsub(/<.*?>/, "").strip
|
354
|
-
end
|
355
352
|
end
|
356
353
|
|
357
354
|
end
|
data/lib/jsduck/guides.rb
CHANGED
@@ -4,6 +4,7 @@ require 'jsduck/io'
|
|
4
4
|
require 'jsduck/null_object'
|
5
5
|
require 'jsduck/logger'
|
6
6
|
require 'jsduck/grouped_asset'
|
7
|
+
require 'jsduck/html'
|
7
8
|
require 'fileutils'
|
8
9
|
|
9
10
|
module JsDuck
|
@@ -51,7 +52,7 @@ module JsDuck
|
|
51
52
|
@groups.map do |group|
|
52
53
|
{
|
53
54
|
"title" => group["title"],
|
54
|
-
"items" => group["items"].map {|g| g.select {|k, v| k != :html } }
|
55
|
+
"items" => group["items"].map {|g| Hash[g.select {|k, v| k != :html }] }
|
55
56
|
}
|
56
57
|
end
|
57
58
|
end
|
@@ -111,8 +112,9 @@ module JsDuck
|
|
111
112
|
html.each_line do |line|
|
112
113
|
if line =~ /^<h2>(.*)<\/h2>$/
|
113
114
|
i += 1
|
114
|
-
|
115
|
-
|
115
|
+
text = HTML.strip_tags($1)
|
116
|
+
toc << "<li><a href='#!/guide/#{guide['name']}-section-#{i}'>#{text}</a></li>\n"
|
117
|
+
new_html << "<h2 id='#{guide['name']}-section-#{i}'>#{text}</h2>\n"
|
116
118
|
else
|
117
119
|
new_html << line
|
118
120
|
end
|
data/lib/jsduck/html.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'cgi'
|
2
|
+
|
3
|
+
module JsDuck
|
4
|
+
|
5
|
+
# Helpers for dealing with HTML
|
6
|
+
class HTML
|
7
|
+
|
8
|
+
# Strips tags from HTML text
|
9
|
+
def self.strip_tags(html)
|
10
|
+
html.gsub(/<.*?>/, "")
|
11
|
+
end
|
12
|
+
|
13
|
+
# Escapes HTML, replacing < with < ...
|
14
|
+
def self.escape(html)
|
15
|
+
CGI.escapeHTML(html)
|
16
|
+
end
|
17
|
+
|
18
|
+
# Unescapes HTML, replacing < with < ...
|
19
|
+
def self.unescape(html)
|
20
|
+
CGI.unescapeHTML(html)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'jsduck/json_duck'
|
2
|
-
require '
|
2
|
+
require 'jsduck/html'
|
3
3
|
|
4
4
|
module JsDuck
|
5
5
|
|
@@ -65,7 +65,7 @@ module JsDuck
|
|
65
65
|
ex = s.scan_until(@end_example_re).sub(@end_example_re, '')
|
66
66
|
|
67
67
|
examples << {
|
68
|
-
:code =>
|
68
|
+
:code => HTML.unescape(HTML.strip_tags(ex)),
|
69
69
|
:options => options,
|
70
70
|
}
|
71
71
|
else
|
@@ -89,9 +89,6 @@ module JsDuck
|
|
89
89
|
hash
|
90
90
|
end
|
91
91
|
|
92
|
-
def strip_tags(str)
|
93
|
-
str.gsub(/<.*?>/, "")
|
94
|
-
end
|
95
92
|
end
|
96
93
|
|
97
94
|
end
|
data/lib/jsduck/inline_img.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'jsduck/html'
|
2
2
|
require 'jsduck/logger'
|
3
3
|
|
4
4
|
module JsDuck
|
@@ -42,7 +42,7 @@ module JsDuck
|
|
42
42
|
when '%u'
|
43
43
|
@base_path ? (@base_path + "/" + url) : url
|
44
44
|
when '%a'
|
45
|
-
|
45
|
+
HTML.escape(alt_text||"")
|
46
46
|
else
|
47
47
|
$1
|
48
48
|
end
|
data/lib/jsduck/inline_video.rb
CHANGED
data/lib/jsduck/options.rb
CHANGED
data/lib/jsduck/renderer.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'jsduck/meta_tag_registry'
|
2
|
-
require '
|
2
|
+
require 'jsduck/html'
|
3
3
|
|
4
4
|
module JsDuck
|
5
5
|
|
@@ -267,7 +267,7 @@ module JsDuck
|
|
267
267
|
doc << m[:doc]
|
268
268
|
|
269
269
|
if m[:default] && m[:default] != "undefined"
|
270
|
-
doc << "<p>Defaults to: <code>" +
|
270
|
+
doc << "<p>Defaults to: <code>" + HTML.escape(m[:default]) + "</code></p>"
|
271
271
|
end
|
272
272
|
|
273
273
|
doc << render_meta_data(m[:html_meta], :bottom)
|
@@ -329,7 +329,7 @@ module JsDuck
|
|
329
329
|
p[:optional] ? " (optional)" : "",
|
330
330
|
"<div class='sub-desc'>",
|
331
331
|
p[:doc],
|
332
|
-
p[:default] ? "<p>Defaults to: <code>#{
|
332
|
+
p[:default] ? "<p>Defaults to: <code>#{HTML.escape(p[:default])}</code></p>" : "",
|
333
333
|
p[:properties] && p[:properties].length > 0 ? render_params_and_return(p) : "",
|
334
334
|
"</div>",
|
335
335
|
"</li>",
|
data/lib/jsduck/source_file.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'jsduck/js_parser'
|
2
2
|
require 'jsduck/css_parser'
|
3
3
|
require 'jsduck/merger'
|
4
|
-
require
|
4
|
+
require 'jsduck/html'
|
5
5
|
|
6
6
|
module JsDuck
|
7
7
|
|
@@ -54,7 +54,7 @@ module JsDuck
|
|
54
54
|
# Use #each_line instead of #lines to support Ruby 1.6
|
55
55
|
@contents.each_line do |line|
|
56
56
|
linenr += 1;
|
57
|
-
line =
|
57
|
+
line = HTML.escape(line)
|
58
58
|
# wrap the line in as many spans as there are links to this line number.
|
59
59
|
if @links[linenr]
|
60
60
|
@links[linenr].each do |link|
|
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: 3.10.
|
4
|
+
version: 3.10.1
|
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: 2012-05-
|
13
|
+
date: 2012-05-11 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rdiscount
|
@@ -60,6 +60,54 @@ dependencies:
|
|
60
60
|
- - ! '>='
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
requirement: !ruby/object:Gem::Requirement
|
66
|
+
none: false
|
67
|
+
requirements:
|
68
|
+
- - ! '>='
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
type: :development
|
72
|
+
prerelease: false
|
73
|
+
version_requirements: !ruby/object:Gem::Requirement
|
74
|
+
none: false
|
75
|
+
requirements:
|
76
|
+
- - ! '>='
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '0'
|
79
|
+
- !ruby/object:Gem::Dependency
|
80
|
+
name: rake
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
type: :development
|
88
|
+
prerelease: false
|
89
|
+
version_requirements: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
91
|
+
requirements:
|
92
|
+
- - ! '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
- !ruby/object:Gem::Dependency
|
96
|
+
name: compass
|
97
|
+
requirement: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
none: false
|
107
|
+
requirements:
|
108
|
+
- - ! '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
63
111
|
description: Documentation generator for Sencha JS frameworks
|
64
112
|
email: rene.saarsoo@sencha.com
|
65
113
|
executables:
|
@@ -69,6 +117,7 @@ extra_rdoc_files: []
|
|
69
117
|
files:
|
70
118
|
- .gitignore
|
71
119
|
- COPYING
|
120
|
+
- Gemfile
|
72
121
|
- README.md
|
73
122
|
- Rakefile
|
74
123
|
- bin/compare
|
@@ -104,6 +153,7 @@ files:
|
|
104
153
|
- lib/jsduck/grouped_asset.rb
|
105
154
|
- lib/jsduck/guide_writer.rb
|
106
155
|
- lib/jsduck/guides.rb
|
156
|
+
- lib/jsduck/html.rb
|
107
157
|
- lib/jsduck/icons.rb
|
108
158
|
- lib/jsduck/images.rb
|
109
159
|
- lib/jsduck/index_html.rb
|
@@ -154,14 +204,6 @@ files:
|
|
154
204
|
- lib/jsduck/type_parser.rb
|
155
205
|
- lib/jsduck/videos.rb
|
156
206
|
- lib/jsduck/welcome.rb
|
157
|
-
- opt/aside.png
|
158
|
-
- opt/comments-server-side/.gitignore
|
159
|
-
- opt/comments-server-side/ForumUser.js
|
160
|
-
- opt/comments-server-side/app.js
|
161
|
-
- opt/comments-server-side/database.js
|
162
|
-
- opt/comments-server-side/package.json
|
163
|
-
- opt/comments-server-side/util.js
|
164
|
-
- opt/example.js
|
165
207
|
- template-min/README.md
|
166
208
|
- template-min/template.html
|
167
209
|
- template-min/eg-iframe.html
|
data/opt/aside.png
DELETED
Binary file
|
@@ -1,80 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* Authentication with a vBulletin user database
|
3
|
-
*/
|
4
|
-
|
5
|
-
var crypto = require('crypto'),
|
6
|
-
_ = require('underscore');
|
7
|
-
|
8
|
-
var ForumUser = exports.ForumUser = function(client) {
|
9
|
-
this.client = client;
|
10
|
-
};
|
11
|
-
|
12
|
-
ForumUser.prototype = {
|
13
|
-
|
14
|
-
login: function(username, password, callback) {
|
15
|
-
|
16
|
-
var sql = "SELECT userid, usergroupid, membergroupids, email, username, password, salt FROM user WHERE username = ?",
|
17
|
-
self = this;
|
18
|
-
|
19
|
-
this.client.query(sql, [username],
|
20
|
-
|
21
|
-
function selectCb(err, results, fields) {
|
22
|
-
if (err) {
|
23
|
-
callback(err);
|
24
|
-
return;
|
25
|
-
}
|
26
|
-
|
27
|
-
if (results.length == 0) {
|
28
|
-
callback("No such user");
|
29
|
-
return;
|
30
|
-
}
|
31
|
-
|
32
|
-
if (!self.checkPassword(password, results[0].salt, results[0].password)) {
|
33
|
-
callback("Invalid password");
|
34
|
-
return;
|
35
|
-
}
|
36
|
-
|
37
|
-
var user = self.getUserFromResult(results[0]);
|
38
|
-
|
39
|
-
callback(null, user);
|
40
|
-
}
|
41
|
-
);
|
42
|
-
},
|
43
|
-
|
44
|
-
clientUser: function(user) {
|
45
|
-
|
46
|
-
crypto.createHash('md5').update(user.email).digest("hex");
|
47
|
-
|
48
|
-
return {
|
49
|
-
emailHash: user.email,
|
50
|
-
userName: user.username,
|
51
|
-
userId: user.userid,
|
52
|
-
mod: _.include(user.membergroupids, 7)
|
53
|
-
};
|
54
|
-
},
|
55
|
-
|
56
|
-
checkPassword: function(password, salt, saltedPassword) {
|
57
|
-
|
58
|
-
password = crypto.createHash('md5').update(password).digest("hex") + salt;
|
59
|
-
password = crypto.createHash('md5').update(password).digest("hex");
|
60
|
-
|
61
|
-
return password == saltedPassword;
|
62
|
-
},
|
63
|
-
|
64
|
-
getUserFromResult: function(result) {
|
65
|
-
|
66
|
-
var ids, id;
|
67
|
-
|
68
|
-
if (result.membergroupids) {
|
69
|
-
ids = result.membergroupids.split(',');
|
70
|
-
result.membergroupids = [];
|
71
|
-
for (id in ids) {
|
72
|
-
result.membergroupids.push(Number(ids[id]));
|
73
|
-
}
|
74
|
-
}
|
75
|
-
|
76
|
-
result.moderator = _.include(result.membergroupids, 7);
|
77
|
-
|
78
|
-
return result;
|
79
|
-
}
|
80
|
-
};
|