evergreen 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (64) hide show
  1. data/README.rdoc +30 -4
  2. data/config/routes.rb +1 -1
  3. data/lib/evergreen.rb +14 -50
  4. data/lib/evergreen/application.rb +46 -0
  5. data/lib/evergreen/cli.rb +2 -2
  6. data/lib/evergreen/rails.rb +4 -0
  7. data/lib/evergreen/resources/evergreen.css +3 -1
  8. data/lib/evergreen/resources/evergreen.js +3 -0
  9. data/lib/evergreen/runner.rb +124 -36
  10. data/lib/evergreen/server.rb +9 -18
  11. data/lib/evergreen/spec.rb +26 -14
  12. data/lib/evergreen/suite.rb +44 -0
  13. data/lib/evergreen/tasks.rb +6 -0
  14. data/lib/evergreen/template.rb +7 -10
  15. data/lib/evergreen/version.rb +1 -1
  16. data/lib/evergreen/views/layout.erb +1 -0
  17. data/lib/evergreen/views/list.erb +2 -2
  18. data/lib/evergreen/views/spec.erb +18 -10
  19. data/lib/jasmine/Gemfile +6 -0
  20. data/lib/jasmine/MIT.LICENSE +2 -2
  21. data/lib/jasmine/README.markdown +5 -459
  22. data/lib/jasmine/Rakefile +22 -16
  23. data/lib/jasmine/example/SpecRunner.html +1 -1
  24. data/lib/jasmine/jsdoc-template/allclasses.tmpl +17 -0
  25. data/lib/jasmine/jsdoc-template/allfiles.tmpl +56 -0
  26. data/lib/jasmine/jsdoc-template/class.tmpl +646 -0
  27. data/lib/jasmine/jsdoc-template/index.tmpl +39 -0
  28. data/lib/jasmine/jsdoc-template/publish.js +184 -0
  29. data/lib/jasmine/jsdoc-template/static/default.css +162 -0
  30. data/lib/jasmine/jsdoc-template/static/header.html +2 -0
  31. data/lib/jasmine/jsdoc-template/static/index.html +19 -0
  32. data/lib/jasmine/jsdoc-template/symbol.tmpl +35 -0
  33. data/lib/jasmine/lib/jasmine-html.js +12 -6
  34. data/lib/jasmine/lib/jasmine.js +122 -44
  35. data/lib/jasmine/spec/runner.html +0 -1
  36. data/lib/jasmine/spec/suites/CustomMatchersSpec.js +18 -9
  37. data/lib/jasmine/spec/suites/MatchersSpec.js +241 -162
  38. data/lib/jasmine/spec/suites/SpecRunningSpec.js +120 -62
  39. data/lib/jasmine/spec/suites/TrivialReporterSpec.js +3 -0
  40. data/lib/jasmine/spec/suites/WaitsForBlockSpec.js +9 -9
  41. data/lib/jasmine/src/Env.js +1 -0
  42. data/lib/jasmine/src/Matchers.js +35 -17
  43. data/lib/jasmine/src/Queue.js +6 -1
  44. data/lib/jasmine/src/Spec.js +34 -2
  45. data/lib/jasmine/src/WaitsForBlock.js +28 -13
  46. data/lib/jasmine/src/base.js +15 -8
  47. data/lib/jasmine/src/html/TrivialReporter.js +12 -6
  48. data/lib/jasmine/src/version.json +2 -2
  49. data/lib/tasks/evergreen.rake +1 -1
  50. data/spec/meta_spec.rb +21 -2
  51. data/spec/runner_spec.rb +16 -18
  52. data/spec/spec_helper.rb +12 -4
  53. data/spec/spec_spec.rb +4 -11
  54. data/spec/suite1/spec/javascripts/invalid_coffee_spec.coffee +1 -0
  55. data/spec/suite1/spec/javascripts/spec_helper.coffee +1 -1
  56. data/spec/suite2/config/evergreen.rb +5 -0
  57. data/spec/suite2/public_html/foo.js +1 -0
  58. data/spec/suite2/spec/awesome_spec.js +12 -0
  59. data/spec/suite2/spec/failing_spec.js +5 -0
  60. data/spec/suite2/templates/foo.html +1 -0
  61. data/spec/suite_spec.rb +26 -0
  62. data/spec/template_spec.rb +3 -9
  63. metadata +52 -20
  64. data/lib/jasmine/lib/consolex.js +0 -28
@@ -22,6 +22,7 @@ task :default => 'jasmine:dist'
22
22
  def substitute_jasmine_version(filename)
23
23
  contents = File.read(filename)
24
24
  contents = contents.gsub(/##JASMINE_VERSION##/, (jasmine_version))
25
+ contents = contents.gsub(/[^\n]*REMOVE_THIS_LINE_FROM_BUILD[^\n]*/, '')
25
26
  File.open(filename, 'w') { |f| f.write(contents) }
26
27
  end
27
28
 
@@ -73,9 +74,9 @@ namespace :jasmine do
73
74
 
74
75
  jasmine.puts %{
75
76
  jasmine.version_= {
76
- "major": #{version['major']},
77
- "minor": #{version['minor']},
78
- "build": #{version['build']},
77
+ "major": #{version['major'].to_json},
78
+ "minor": #{version['minor'].to_json},
79
+ "build": #{version['build'].to_json},
79
80
  "revision": #{Time.now.to_i}
80
81
  };
81
82
  }
@@ -90,8 +91,9 @@ jasmine.version_= {
90
91
  FileUtils.cp("src/html/jasmine.css", "lib/jasmine.css")
91
92
  end
92
93
 
94
+ downloads_file = 'pages/download.html.md'
93
95
  task :need_pages_submodule do
94
- unless File.exists?('pages/index.html')
96
+ unless File.exists?(downloads_file)
95
97
  raise "Jasmine pages submodule isn't present. Run git submodule update --init"
96
98
  end
97
99
  end
@@ -100,7 +102,6 @@ jasmine.version_= {
100
102
  task :doc => :need_pages_submodule do
101
103
  puts 'Creating Jasmine Documentation'
102
104
  require 'rubygems'
103
- #sudo gem install ragaskar-jsdoc_helper
104
105
  require 'jsdoc_helper'
105
106
 
106
107
  FileUtils.rm_r "pages/jsdoc", :force => true
@@ -109,6 +110,8 @@ jasmine.version_= {
109
110
  t[:files] = jasmine_sources << jasmine_html_sources
110
111
  t[:options] = "-a"
111
112
  t[:out] = "pages/jsdoc"
113
+ # JsdocHelper bug: template must be relative to the JsdocHelper gem, ick
114
+ t[:template] = File.join("../".*(100), Dir::getwd, "jsdoc-template")
112
115
  end
113
116
  Rake::Task[:lambda_jsdoc].invoke
114
117
  end
@@ -131,7 +134,8 @@ jasmine.version_= {
131
134
  {
132
135
  "lib/jasmine.js" => "jasmine.js",
133
136
  "lib/jasmine-html.js" => "jasmine-html.js",
134
- "src/html/jasmine.css" => "jasmine.css"
137
+ "src/html/jasmine.css" => "jasmine.css",
138
+ "MIT.LICENSE" => "MIT.LICENSE"
135
139
  }.each_pair do |src, dest|
136
140
  FileUtils.cp(File.join(root, src), File.join(lib_dir, dest))
137
141
  end
@@ -151,24 +155,26 @@ jasmine.version_= {
151
155
  require 'digest/sha1'
152
156
 
153
157
  download_html = "<!-- START_DOWNLOADS -->\n"
154
- download_html += "<table>\n<tr><th/><th>Version</th><th>Size</th><th>Date</th><th>SHA1</th></tr>\n"
155
158
  Dir.glob('pages/downloads/*.zip').sort.reverse.each do |f|
156
159
  sha1 = Digest::SHA1.hexdigest File.read(f)
157
160
 
158
161
  fn = f.sub(/^pages\//, '')
159
162
  version = /jasmine-standalone-(.*).zip/.match(f)[1]
160
- download_html += "<td><a href='#{fn}'>#{fn.sub(/downloads\//, '')}</a></td>"
161
- download_html += "<td>#{version}</td>\n"
162
- download_html += "<td>#{File.size(f) / 1024}k</td>\n"
163
- download_html += "<td>#{File.mtime(f).strftime("%Y/%m/%d %H:%M:%S")}</td>\n"
164
- download_html += "<td>#{sha1}</td>\n"
163
+ prerelease = /\.rc/.match(f)
164
+ download_html += prerelease ? "<tr class=\"rc\">\n" : "<tr>\n"
165
+ download_html += " <td class=\"link\"><a href=\"#{fn}\">#{fn.sub(/downloads\//, '')}</a></td>\n"
166
+ download_html += " <td class=\"version\">#{version}</td>\n"
167
+ download_html += " <td class=\"size\">#{File.size(f) / 1024}k</td>\n"
168
+ download_html += " <td class=\"date\">#{File.mtime(f).strftime("%Y/%m/%d %H:%M:%S %Z")}</td>\n"
169
+ download_html += " <td class=\"sha\">#{sha1}</td>\n"
170
+ download_html += "</tr>\n"
165
171
  end
166
- download_html += "</table>\n<!-- END_DOWNLOADS -->"
172
+ download_html += "<!-- END_DOWNLOADS -->"
167
173
 
168
- index_page = File.read('pages/index.html')
174
+ downloads_page = File.read(downloads_file)
169
175
  matcher = /<!-- START_DOWNLOADS -->.*<!-- END_DOWNLOADS -->/m
170
- index_page = index_page.sub(matcher, download_html)
171
- File.open('pages/index.html', 'w') {|f| f.write(index_page)}
176
+ downloads_page = downloads_page.sub(matcher, download_html)
177
+ File.open(downloads_file, 'w') {|f| f.write(downloads_page)}
172
178
  puts "rewrote that file"
173
179
  end
174
180
  end
@@ -17,6 +17,7 @@
17
17
 
18
18
  </head>
19
19
  <body>
20
+ <div id="REMOVE_THIS_LINE_FROM_BUILD"><p>You must be trying to look at examples in the Jasmine source tree.</p><p>Please download a distribution version of Jasmine at <a href="http://pivotal.github.com/jasmine/">http://pivotal.github.com/jasmine/</a>.</p></div>
20
21
  <script type="text/javascript">
21
22
  jasmine.getEnv().addReporter(new jasmine.TrivialReporter());
22
23
  jasmine.getEnv().execute();
@@ -24,4 +25,3 @@
24
25
 
25
26
  </body>
26
27
  </html>
27
-
@@ -0,0 +1,17 @@
1
+ <div align="center">{+new Link().toFile("index.html").withText("Class Index")+}
2
+ | {+new Link().toFile("files.html").withText("File Index")+}</div>
3
+ <hr />
4
+ <h2>Classes</h2>
5
+ <ul class="classList">
6
+ <for each="thisClass" in="data">
7
+ <li>{!
8
+ if (thisClass.alias == "_global_") {
9
+ output += "<i>"+new Link().toClass(thisClass.alias)+"</i>";
10
+ }
11
+ else {
12
+ output += new Link().toClass(thisClass.alias);
13
+ }
14
+ !}</li>
15
+ </for>
16
+ </ul>
17
+ <hr />
@@ -0,0 +1,56 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}"" />
6
+ {! Link.base = ""; /* all generated links will be relative to this */ !}
7
+ <title>JsDoc Reference - File Index</title>
8
+ <meta name="generator" content="JsDoc Toolkit" />
9
+
10
+ <style type="text/css">
11
+ {+include("static/default.css")+}
12
+ </style>
13
+ </head>
14
+
15
+ <body>
16
+ {+include("static/header.html")+}
17
+
18
+ <div id="index">
19
+ {+publish.classesIndex+}
20
+ </div>
21
+
22
+ <div id="content">
23
+ <h1 class="classTitle">File Index</h1>
24
+
25
+ <for each="item" in="data">
26
+ <div>
27
+ <h2>{+new Link().toSrc(item.alias).withText(item.name)+}</h2>
28
+ <if test="item.desc">{+resolveLinks(summarize(item.desc))+}</if>
29
+ <dl>
30
+ <if test="item.author">
31
+ <dt class="heading">Author:</dt>
32
+ <dd>{+item.author+}</dd>
33
+ </if>
34
+ <if test="item.version">
35
+ <dt class="heading">Version:</dt>
36
+ <dd>{+item.version+}</dd>
37
+ </if>
38
+ {! var locations = item.comment.getTag('location').map(function($){return $.toString().replace(/(^\$ ?| ?\$$)/g, '').replace(/^HeadURL: https:/g, 'http:');}) !}
39
+ <if test="locations.length">
40
+ <dt class="heading">Location:</dt>
41
+ <for each="location" in="locations">
42
+ <dd><a href="{+location+}">{+location+}</a></dd>
43
+ </for>
44
+ </if>
45
+ </dl>
46
+ </div>
47
+ <hr />
48
+ </for>
49
+
50
+ </div>
51
+ <div class="fineprint" style="clear:both">
52
+ <if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
53
+ Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blankt">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
54
+ </div>
55
+ </body>
56
+ </html>
@@ -0,0 +1,646 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
2
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
3
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
4
+ <head>
5
+ <meta http-equiv="content-type" content="text/html; charset={+IO.encoding+}" />
6
+ <meta name="generator" content="JsDoc Toolkit" />
7
+ {! Link.base = "../"; /* all generated links will be relative to this */ !}
8
+ <title>JsDoc Reference - {+data.alias+}</title>
9
+
10
+ <style type="text/css">
11
+ {+include("static/default.css")+}
12
+ </style>
13
+ </head>
14
+
15
+ <body>
16
+ <!-- ============================== header ================================= -->
17
+ <!-- begin static/header.html -->
18
+ {+include("static/header.html")+}
19
+ <!-- end static/header.html -->
20
+
21
+ <!-- ============================== classes index ============================ -->
22
+ <div id="index">
23
+ <!-- begin publish.classesIndex -->
24
+ {+publish.classesIndex+}
25
+ <!-- end publish.classesIndex -->
26
+ </div>
27
+
28
+ <div id="content">
29
+ <!-- ============================== class title ============================ -->
30
+ <h1 class="classTitle">
31
+ {!
32
+ var classType = "";
33
+
34
+ if (data.isBuiltin()) {
35
+ classType += "Built-In ";
36
+ }
37
+
38
+ if (data.isNamespace) {
39
+ if (data.is('FUNCTION')) {
40
+ classType += "Function ";
41
+ }
42
+ classType += "Namespace ";
43
+ }
44
+ else {
45
+ classType += "Class ";
46
+ }
47
+ !}
48
+ {+classType+}{+data.alias+}
49
+ </h1>
50
+
51
+ <!-- ============================== class summary ========================== -->
52
+ <p class="description">
53
+ <if test="data.augments.length"><br />Extends
54
+ {+
55
+ data.augments
56
+ .sort()
57
+ .map(
58
+ function($) { return new Link().toSymbol($); }
59
+ )
60
+ .join(", ")
61
+ +}.<br />
62
+ </if>
63
+
64
+ {+resolveLinks(data.classDesc)+}
65
+
66
+ <if test="!data.isBuiltin()">{# isn't defined in any file #}
67
+ <br /><i>Defined in: </i> {+new Link().toSrc(data.srcFile)+}.
68
+ </if>
69
+ </p>
70
+
71
+ <!-- ============================== constructor summary ==================== -->
72
+ <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
73
+ <table class="summaryTable" cellspacing="0" summary="A summary of the constructor documented in the class {+data.alias+}.">
74
+ <caption>{+classType+}Summary</caption>
75
+ <thead>
76
+ <tr>
77
+ <th scope="col">Constructor Attributes</th>
78
+ <th scope="col">Constructor Name and Description</th>
79
+ </tr>
80
+ </thead>
81
+ <tbody>
82
+ <tr>
83
+ <td class="attributes">{!
84
+ if (data.isPrivate) output += "&lt;private&gt; ";
85
+ if (data.isInner) output += "&lt;inner&gt; ";
86
+ !}&nbsp;</td>
87
+ <td class="nameDescription" {!if (data.comment.getTag("hilited").length){output += 'style="color: red"'}!}>
88
+ <div class="fixedFont">
89
+ <b>{+ new Link().toSymbol(data.alias).inner('constructor')+}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
90
+ </div>
91
+ <div class="description">{+resolveLinks(summarize(data.desc))+}</div>
92
+ </td>
93
+ </tr>
94
+ </tbody>
95
+ </table>
96
+ </if>
97
+
98
+ <!-- ============================== properties summary ===================== -->
99
+ <if test="data.properties.length">
100
+ {! var ownProperties = data.properties.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
101
+ <if test="ownProperties.length">
102
+ <table class="summaryTable" cellspacing="0" summary="A summary of the fields documented in the class {+data.alias+}.">
103
+ <caption>Field Summary</caption>
104
+ <thead>
105
+ <tr>
106
+ <th scope="col">Field Attributes</th>
107
+ <th scope="col">Field Name and Description</th>
108
+ </tr>
109
+ </thead>
110
+ <tbody>
111
+ <for each="member" in="ownProperties">
112
+ <tr>
113
+ <td class="attributes">{!
114
+ if (member.isPrivate) output += "&lt;private&gt; ";
115
+ if (member.isInner) output += "&lt;inner&gt; ";
116
+ if (member.isStatic) output += "&lt;static&gt; ";
117
+ if (member.isConstant) output += "&lt;constant&gt; ";
118
+ !}&nbsp;</td>
119
+ <td class="nameDescription">
120
+ <div class="fixedFont">
121
+ <if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>
122
+ </div>
123
+ <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
124
+ </td>
125
+ </tr>
126
+ </for>
127
+ </tbody>
128
+ </table>
129
+ </if>
130
+
131
+ <if test="data.inheritsFrom.length">
132
+ <dl class="inheritsList">
133
+ {!
134
+ var borrowedMembers = data.properties.filter(function($) {return $.memberOf != data.alias});
135
+
136
+ var contributers = [];
137
+ borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
138
+ for (var i = 0, l = contributers.length; i < l; i++) {
139
+ output +=
140
+ "<dt>Fields borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
141
+ +
142
+ "<dd>" +
143
+ borrowedMembers
144
+ .filter(
145
+ function($) { return $.memberOf == contributers[i] }
146
+ )
147
+ .sort(makeSortby("name"))
148
+ .map(
149
+ function($) { return new Link().toSymbol($.alias).withText($.name) }
150
+ )
151
+ .join(", ")
152
+ +
153
+ "</dd>";
154
+ }
155
+ !}
156
+ </dl>
157
+ </if>
158
+ </if>
159
+
160
+ <!-- ============================== methods summary ======================== -->
161
+ <if test="data.methods.length">
162
+ {! var ownMethods = data.methods.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
163
+ <if test="ownMethods.length">
164
+ <table class="summaryTable" cellspacing="0" summary="A summary of the methods documented in the class {+data.alias+}.">
165
+ <caption>Method Summary</caption>
166
+ <thead>
167
+ <tr>
168
+ <th scope="col">Method Attributes</th>
169
+ <th scope="col">Method Name and Description</th>
170
+ </tr>
171
+ </thead>
172
+ <tbody>
173
+ <for each="member" in="ownMethods">
174
+ <tr>
175
+ <td class="attributes">{!
176
+ if (member.isPrivate) output += "&lt;private&gt; ";
177
+ if (member.isInner) output += "&lt;inner&gt; ";
178
+ if (member.isStatic) output += "&lt;static&gt; ";
179
+ !}&nbsp;</td>
180
+ <td class="nameDescription">
181
+ <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
182
+ </div>
183
+ <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
184
+ </td>
185
+ </tr>
186
+ </for>
187
+ </tbody>
188
+ </table>
189
+ </if>
190
+
191
+ <if test="data.inheritsFrom.length">
192
+ <dl class="inheritsList">
193
+ {!
194
+ var borrowedMembers = data.methods.filter(function($) {return $.memberOf != data.alias});
195
+ var contributers = [];
196
+ borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
197
+ for (var i = 0, l = contributers.length; i < l; i++) {
198
+ output +=
199
+ "<dt>Methods borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
200
+ +
201
+ "<dd>" +
202
+ borrowedMembers
203
+ .filter(
204
+ function($) { return $.memberOf == contributers[i] }
205
+ )
206
+ .sort(makeSortby("name"))
207
+ .map(
208
+ function($) { return new Link().toSymbol($.alias).withText($.name) }
209
+ )
210
+ .join(", ")
211
+ +
212
+ "</dd>";
213
+ }
214
+
215
+ !}
216
+ </dl>
217
+ </if>
218
+ </if>
219
+ <!-- ============================== events summary ======================== -->
220
+ <if test="data.events.length">
221
+ {! var ownEvents = data.events.filter(function($){return $.memberOf == data.alias && !$.isNamespace}).sort(makeSortby("name")); !}
222
+ <if test="ownEvents.length">
223
+ <table class="summaryTable" cellspacing="0" summary="A summary of the events documented in the class {+data.alias+}.">
224
+ <caption>Event Summary</caption>
225
+ <thead>
226
+ <tr>
227
+ <th scope="col">Event Attributes</th>
228
+ <th scope="col">Event Name and Description</th>
229
+ </tr>
230
+ </thead>
231
+ <tbody>
232
+ <for each="member" in="ownEvents">
233
+ <tr>
234
+ <td class="attributes">{!
235
+ if (member.isPrivate) output += "&lt;private&gt; ";
236
+ if (member.isInner) output += "&lt;inner&gt; ";
237
+ if (member.isStatic) output += "&lt;static&gt; ";
238
+ !}&nbsp;</td>
239
+ <td class="nameDescription">
240
+ <div class="fixedFont"><if test="member.isStatic && member.memberOf != '_global_'">{+member.memberOf+}.</if><b>{+new Link().toSymbol(member.alias).withText(member.name)+}</b>{+makeSignature(member.params)+}
241
+ </div>
242
+ <div class="description">{+resolveLinks(summarize(member.desc))+}</div>
243
+ </td>
244
+ </tr>
245
+ </for>
246
+ </tbody>
247
+ </table>
248
+ </if>
249
+
250
+ <if test="data.inheritsFrom.length">
251
+ <dl class="inheritsList">
252
+ {!
253
+ var borrowedMembers = data.events.filter(function($) {return $.memberOf != data.alias});
254
+ var contributers = [];
255
+ borrowedMembers.map(function($) {if (contributers.indexOf($.memberOf) < 0) contributers.push($.memberOf)});
256
+ for (var i = 0, l = contributers.length; i < l; i++) {
257
+ output +=
258
+ "<dt>Events borrowed from class "+new Link().toSymbol(contributers[i])+": </dt>"
259
+ +
260
+ "<dd>" +
261
+ borrowedMembers
262
+ .filter(
263
+ function($) { return $.memberOf == contributers[i] }
264
+ )
265
+ .sort(makeSortby("name"))
266
+ .map(
267
+ function($) { return new Link().toSymbol($.alias).withText($.name) }
268
+ )
269
+ .join(", ")
270
+ +
271
+ "</dd>";
272
+ }
273
+
274
+ !}
275
+ </dl>
276
+ </if>
277
+ </if>
278
+
279
+ <!-- ============================== constructor details ==================== -->
280
+ <if test="!data.isBuiltin() && (data.isNamespace || data.is('CONSTRUCTOR'))">
281
+ <div class="details"><a name="constructor"> </a>
282
+ <div class="sectionTitle">
283
+ {+classType+}Detail
284
+ </div>
285
+
286
+ <div class="fixedFont">{!
287
+ if (data.isPrivate) output += "&lt;private&gt; ";
288
+ if (data.isInner) output += "&lt;inner&gt; ";
289
+ !}
290
+ <b>{+ data.alias +}</b><if test="classType != 'Namespace '">{+ makeSignature(data.params) +}</if>
291
+ </div>
292
+
293
+ <div class="description">
294
+ {+resolveLinks(data.desc)+}
295
+ <if test="data.author"><br /><i>Author: </i>{+data.author+}.</if>
296
+ </div>
297
+
298
+ <if test="data.example.length">
299
+ <for each="example" in="data.example">
300
+ <pre class="code">{+example+}</pre>
301
+ </for>
302
+ </if>
303
+
304
+
305
+ <if test="data.params.length">
306
+ <dl class="detailList">
307
+ <dt class="heading">Parameters:</dt>
308
+ <for each="item" in="data.params">
309
+ <dt>
310
+ {+((item.type)?""+("<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type)+"}</span> ")) : "")+} <b>{+item.name+}</b>
311
+ <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
312
+ </dt>
313
+ <dd>{+resolveLinks(item.desc)+}</dd>
314
+ </for>
315
+ </dl>
316
+ </if>
317
+ <if test="data.deprecated">
318
+ <dl class="detailList">
319
+ <dt class="heading">Deprecated:</dt>
320
+ <dt>
321
+ {+resolveLinks(data.deprecated)+}
322
+ </dt>
323
+ </dl>
324
+ </if>
325
+ <if test="data.since">
326
+ <dl class="detailList">
327
+ <dt class="heading">Since:</dt>
328
+ <dd>{+ data.since +}</dd>
329
+ </dl>
330
+ </if>
331
+ <if test="data.exceptions.length">
332
+ <dl class="detailList">
333
+ <dt class="heading">Throws:</dt>
334
+ <for each="item" in="data.exceptions">
335
+ <dt>
336
+ {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
337
+ </dt>
338
+ <dd>{+resolveLinks(item.desc)+}</dd>
339
+ </for>
340
+ </dl>
341
+ </if>
342
+ <if test="data.returns.length">
343
+ <dl class="detailList">
344
+ <dt class="heading">Returns:</dt>
345
+ <for each="item" in="data.returns">
346
+ <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
347
+ </for>
348
+ </dl>
349
+ </if>
350
+ <if test="data.requires.length">
351
+ <dl class="detailList">
352
+ <dt class="heading">Requires:</dt>
353
+ <for each="item" in="data.requires">
354
+ <dd>{+ resolveLinks(item) +}</dd>
355
+ </for>
356
+ </dl>
357
+ </if>
358
+ <if test="data.see.length">
359
+ <dl class="detailList">
360
+ <dt class="heading">See:</dt>
361
+ <for each="item" in="data.see">
362
+ <dd>{+ new Link().toSymbol(item) +}</dd>
363
+ </for>
364
+ </dl>
365
+ </if>
366
+
367
+ </div>
368
+ </if>
369
+
370
+ <!-- ============================== field details ========================== -->
371
+ <if test="defined(ownProperties) && ownProperties.length">
372
+ <div class="sectionTitle">
373
+ Field Detail
374
+ </div>
375
+ <for each="member" in="ownProperties">
376
+ <a name="{+Link.symbolNameToLinkName(member)+}"> </a>
377
+ <div class="fixedFont">{!
378
+ if (member.isPrivate) output += "&lt;private&gt; ";
379
+ if (member.isInner) output += "&lt;inner&gt; ";
380
+ if (member.isStatic) output += "&lt;static&gt; ";
381
+ if (member.isConstant) output += "&lt;constant&gt; ";
382
+ !}
383
+
384
+ <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
385
+ <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>
386
+
387
+ </div>
388
+ <div class="description">
389
+ {+resolveLinks(member.desc)+}
390
+ <if test="member.srcFile != data.srcFile">
391
+ <br />
392
+ <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
393
+ </if>
394
+ <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
395
+ </div>
396
+
397
+ <if test="member.example.length">
398
+ <for each="example" in="member.example">
399
+ <pre class="code">{+example+}</pre>
400
+ </for>
401
+ </if>
402
+
403
+ <if test="member.deprecated">
404
+ <dl class="detailList">
405
+ <dt class="heading">Deprecated:</dt>
406
+ <dt>
407
+ {+ member.deprecated +}
408
+ </dt>
409
+ </dl>
410
+ </if>
411
+ <if test="member.since">
412
+ <dl class="detailList">
413
+ <dt class="heading">Since:</dt>
414
+ <dd>{+ member.since +}</dd>
415
+ </dl>
416
+ </if>
417
+ <if test="member.see.length">
418
+ <dl class="detailList">
419
+ <dt class="heading">See:</dt>
420
+ <for each="item" in="member.see">
421
+ <dd>{+ new Link().toSymbol(item) +}</dd>
422
+ </for>
423
+ </dl>
424
+ </if>
425
+ <if test="member.defaultValue">
426
+ <dl class="detailList">
427
+ <dt class="heading">Default Value:</dt>
428
+ <dd>
429
+ {+resolveLinks(member.defaultValue)+}
430
+ </dd>
431
+ </dl>
432
+ </if>
433
+
434
+ <if test="!$member_last"><hr /></if>
435
+ </for>
436
+ </if>
437
+
438
+ <!-- ============================== method details ========================= -->
439
+ <if test="defined(ownMethods) && ownMethods.length">
440
+ <div class="sectionTitle">
441
+ Method Detail
442
+ </div>
443
+ <for each="member" in="ownMethods">
444
+ <a name="{+Link.symbolNameToLinkName(member)+}"> </a>
445
+ <div class="fixedFont">{!
446
+ if (member.isPrivate) output += "&lt;private&gt; ";
447
+ if (member.isInner) output += "&lt;inner&gt; ";
448
+ if (member.isStatic) output += "&lt;static&gt; ";
449
+ !}
450
+
451
+ <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
452
+ <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+}
453
+
454
+ </div>
455
+ <div class="description">
456
+ {+resolveLinks(member.desc)+}
457
+ <if test="member.srcFile != data.srcFile">
458
+ <br />
459
+ <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
460
+ </if>
461
+ <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
462
+ </div>
463
+
464
+ <if test="member.example.length">
465
+ <for each="example" in="member.example">
466
+ <pre class="code">{+example+}</pre>
467
+ </for>
468
+ </if>
469
+
470
+ <if test="member.params.length">
471
+ <dl class="detailList">
472
+ <dt class="heading">Parameters:</dt>
473
+ <for each="item" in="member.params">
474
+ <dt>
475
+ {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
476
+ <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
477
+ </dt>
478
+ <dd>{+resolveLinks(item.desc)+}</dd>
479
+ </for>
480
+ </dl>
481
+ </if>
482
+ <if test="member.deprecated">
483
+ <dl class="detailList">
484
+ <dt class="heading">Deprecated:</dt>
485
+ <dt>
486
+ {+member.deprecated+}
487
+ </dt>
488
+ </dl>
489
+ </if>
490
+ <if test="member.since">
491
+ <dl class="detailList">
492
+ <dt class="heading">Since:</dt>
493
+ <dd>{+ member.since +}</dd>
494
+ </dl>
495
+ </dl>
496
+ </if>
497
+ <if test="member.exceptions.length">
498
+ <dl class="detailList">
499
+ <dt class="heading">Throws:</dt>
500
+ <for each="item" in="member.exceptions">
501
+ <dt>
502
+ {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
503
+ </dt>
504
+ <dd>{+resolveLinks(item.desc)+}</dd>
505
+ </for>
506
+ </dl>
507
+ </if>
508
+ <if test="member.returns.length">
509
+ <dl class="detailList">
510
+ <dt class="heading">Returns:</dt>
511
+ <for each="item" in="member.returns">
512
+ <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
513
+ </for>
514
+ </dl>
515
+ </if>
516
+ <if test="member.requires.length">
517
+ <dl class="detailList">
518
+ <dt class="heading">Requires:</dt>
519
+ <for each="item" in="member.requires">
520
+ <dd>{+ resolveLinks(item) +}</dd>
521
+ </for>
522
+ </dl>
523
+ </if>
524
+ <if test="member.see.length">
525
+ <dl class="detailList">
526
+ <dt class="heading">See:</dt>
527
+ <for each="item" in="member.see">
528
+ <dd>{+ new Link().toSymbol(item) +}</dd>
529
+ </for>
530
+ </dl>
531
+ </if>
532
+
533
+ <if test="!$member_last"><hr /></if>
534
+ </for>
535
+ </if>
536
+
537
+ <!-- ============================== event details ========================= -->
538
+ <if test="defined(ownEvents) && ownEvents.length">
539
+ <div class="sectionTitle">
540
+ Event Detail
541
+ </div>
542
+ <for each="member" in="ownEvents">
543
+ <a name="event:{+Link.symbolNameToLinkName(member)+}"> </a>
544
+ <div class="fixedFont">{!
545
+ if (member.isPrivate) output += "&lt;private&gt; ";
546
+ if (member.isInner) output += "&lt;inner&gt; ";
547
+ if (member.isStatic) output += "&lt;static&gt; ";
548
+ !}
549
+
550
+ <if test="member.type"><span class="light">{{+new Link().toSymbol(member.type)+}}</span></if>
551
+ <if test="member.isStatic && member.memberOf != '_global_'"><span class="light">{+member.memberOf+}.</span></if><b>{+member.name+}</b>{+makeSignature(member.params)+}
552
+
553
+ </div>
554
+ <div class="description">
555
+ {+resolveLinks(member.desc)+}
556
+ <if test="member.srcFile != data.srcFile">
557
+ <br />
558
+ <i>Defined in: </i> {+new Link().toSrc(member.srcFile)+}.
559
+ </if>
560
+ <if test="member.author"><br /><i>Author: </i>{+member.author+}.</if>
561
+ </div>
562
+
563
+ <if test="member.example.length">
564
+ <for each="example" in="member.example">
565
+ <pre class="code">{+example+}</pre>
566
+ </for>
567
+ </if>
568
+
569
+ <if test="member.params.length">
570
+ <dl class="detailList">
571
+ <dt class="heading">Parameters:</dt>
572
+ <for each="item" in="member.params">
573
+ <dt>
574
+ {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}<b>{+item.name+}</b>
575
+ <if test="item.isOptional"><i>Optional<if test="item.defaultValue">, Default: {+item.defaultValue+}</if></i></if>
576
+ </dt>
577
+ <dd>{+resolveLinks(item.desc)+}</dd>
578
+ </for>
579
+ </dl>
580
+ </if>
581
+ <if test="member.deprecated">
582
+ <dl class="detailList">
583
+ <dt class="heading">Deprecated:</dt>
584
+ <dt>
585
+ {+member.deprecated+}
586
+ </dt>
587
+ </dl>
588
+ </if>
589
+ <if test="member.since">
590
+ <dl class="detailList">
591
+ <dt class="heading">Since:</dt>
592
+ <dd>{+ member.since +}</dd>
593
+ </dl>
594
+ </dl>
595
+ </if>
596
+ <if test="member.exceptions.length">
597
+ <dl class="detailList">
598
+ <dt class="heading">Throws:</dt>
599
+ <for each="item" in="member.exceptions">
600
+ <dt>
601
+ {+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+} <b>{+item.name+}</b>
602
+ </dt>
603
+ <dd>{+resolveLinks(item.desc)+}</dd>
604
+ </for>
605
+ </dl>
606
+ </if>
607
+ <if test="member.returns.length">
608
+ <dl class="detailList">
609
+ <dt class="heading">Returns:</dt>
610
+ <for each="item" in="member.returns">
611
+ <dd>{+((item.type)?"<span class=\"light fixedFont\">{"+(new Link().toSymbol(item.type))+"}</span> " : "")+}{+resolveLinks(item.desc)+}</dd>
612
+ </for>
613
+ </dl>
614
+ </if>
615
+ <if test="member.requires.length">
616
+ <dl class="detailList">
617
+ <dt class="heading">Requires:</dt>
618
+ <for each="item" in="member.requires">
619
+ <dd>{+ resolveLinks(item) +}</dd>
620
+ </for>
621
+ </dl>
622
+ </if>
623
+ <if test="member.see.length">
624
+ <dl class="detailList">
625
+ <dt class="heading">See:</dt>
626
+ <for each="item" in="member.see">
627
+ <dd>{+ new Link().toSymbol(item) +}</dd>
628
+ </for>
629
+ </dl>
630
+ </if>
631
+
632
+ <if test="!$member_last"><hr /></if>
633
+ </for>
634
+ </if>
635
+
636
+ <hr />
637
+ </div>
638
+
639
+
640
+ <!-- ============================== footer ================================= -->
641
+ <div class="fineprint" style="clear:both">
642
+ <if test="JSDOC.opt.D.copyright">&copy;{+JSDOC.opt.D.copyright+}<br /></if>
643
+ Documentation generated by <a href="http://www.jsdoctoolkit.org/" target="_blank">JsDoc Toolkit</a> {+JSDOC.VERSION+} on {+new Date()+}
644
+ </div>
645
+ </body>
646
+ </html>