evergreen 0.3.0 → 0.4.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.
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>