jasmine 1.0.1.1 → 1.0.2.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 (116) hide show
  1. data/.gitignore +11 -0
  2. data/.gitmodules +3 -0
  3. data/Gemfile +5 -0
  4. data/HOW_TO_TEST.markdown +11 -0
  5. data/README.markdown +42 -14
  6. data/RELEASE.markdown +22 -0
  7. data/Rakefile +76 -0
  8. data/generators/jasmine/jasmine_generator.rb +15 -13
  9. data/generators/jasmine/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  10. data/install.rb +2 -0
  11. data/jasmine.gemspec +52 -0
  12. data/jasmine/Gemfile +6 -0
  13. data/jasmine/MIT.LICENSE +20 -0
  14. data/jasmine/README.markdown +28 -0
  15. data/jasmine/Rakefile +182 -0
  16. data/jasmine/cruise_config.rb +21 -0
  17. data/jasmine/example/spec/PlayerSpec.js +58 -0
  18. data/jasmine/example/spec/SpecHelper.js +9 -0
  19. data/jasmine/example/src/Player.js +22 -0
  20. data/jasmine/example/src/Song.js +7 -0
  21. data/jasmine/images/fail-16.png +0 -0
  22. data/jasmine/images/fail.png +0 -0
  23. data/jasmine/images/go-16.png +0 -0
  24. data/jasmine/images/go.png +0 -0
  25. data/jasmine/images/pending-16.png +0 -0
  26. data/jasmine/images/pending.png +0 -0
  27. data/jasmine/images/question-bk.png +0 -0
  28. data/jasmine/images/questionbk-16.png +0 -0
  29. data/jasmine/images/spinner.gif +0 -0
  30. data/jasmine/jsdoc-template/allclasses.tmpl +17 -0
  31. data/jasmine/jsdoc-template/allfiles.tmpl +56 -0
  32. data/jasmine/jsdoc-template/class.tmpl +646 -0
  33. data/jasmine/jsdoc-template/index.tmpl +39 -0
  34. data/jasmine/jsdoc-template/publish.js +184 -0
  35. data/jasmine/jsdoc-template/static/default.css +162 -0
  36. data/jasmine/jsdoc-template/static/header.html +2 -0
  37. data/jasmine/jsdoc-template/static/index.html +19 -0
  38. data/jasmine/jsdoc-template/symbol.tmpl +35 -0
  39. data/jasmine/spec/runner.html +80 -0
  40. data/jasmine/spec/suites/BaseSpec.js +27 -0
  41. data/jasmine/spec/suites/CustomMatchersSpec.js +97 -0
  42. data/jasmine/spec/suites/EnvSpec.js +158 -0
  43. data/jasmine/spec/suites/ExceptionsSpec.js +107 -0
  44. data/jasmine/spec/suites/JsApiReporterSpec.js +103 -0
  45. data/jasmine/spec/suites/MatchersSpec.js +795 -0
  46. data/jasmine/spec/suites/MockClockSpec.js +38 -0
  47. data/jasmine/spec/suites/MultiReporterSpec.js +45 -0
  48. data/jasmine/spec/suites/NestedResultsSpec.js +54 -0
  49. data/jasmine/spec/suites/PrettyPrintSpec.js +93 -0
  50. data/jasmine/spec/suites/QueueSpec.js +23 -0
  51. data/jasmine/spec/suites/ReporterSpec.js +56 -0
  52. data/jasmine/spec/suites/RunnerSpec.js +267 -0
  53. data/jasmine/spec/suites/SpecRunningSpec.js +1253 -0
  54. data/jasmine/spec/suites/SpecSpec.js +124 -0
  55. data/jasmine/spec/suites/SpySpec.js +201 -0
  56. data/jasmine/spec/suites/SuiteSpec.js +120 -0
  57. data/jasmine/spec/suites/TrivialReporterSpec.js +238 -0
  58. data/jasmine/spec/suites/UtilSpec.js +40 -0
  59. data/jasmine/spec/suites/WaitsForBlockSpec.js +87 -0
  60. data/jasmine/src/Block.js +22 -0
  61. data/jasmine/src/Env.js +264 -0
  62. data/jasmine/src/JsApiReporter.js +102 -0
  63. data/jasmine/src/Matchers.js +354 -0
  64. data/jasmine/src/MultiReporter.js +35 -0
  65. data/jasmine/src/NestedResults.js +80 -0
  66. data/jasmine/src/PrettyPrinter.js +122 -0
  67. data/jasmine/src/Queue.js +99 -0
  68. data/jasmine/src/Reporter.js +31 -0
  69. data/jasmine/src/Runner.js +77 -0
  70. data/jasmine/src/Spec.js +242 -0
  71. data/jasmine/src/Suite.js +82 -0
  72. data/jasmine/src/WaitsBlock.js +13 -0
  73. data/jasmine/src/WaitsForBlock.js +52 -0
  74. data/jasmine/src/base.js +589 -0
  75. data/jasmine/src/html/TrivialReporter.js +188 -0
  76. data/jasmine/src/html/jasmine.css +166 -0
  77. data/jasmine/src/mock-timeout.js +183 -0
  78. data/jasmine/src/util.js +67 -0
  79. data/jasmine/src/version.json +5 -0
  80. data/lib/generators/jasmine/examples/USAGE +11 -0
  81. data/lib/generators/jasmine/examples/examples_generator.rb +19 -0
  82. data/lib/generators/jasmine/examples/templates/public/javascripts/jasmine_examples/Player.js +22 -0
  83. data/lib/generators/jasmine/examples/templates/public/javascripts/jasmine_examples/Song.js +7 -0
  84. data/lib/generators/jasmine/examples/templates/spec/javascripts/helpers/SpecHelper.js +9 -0
  85. data/lib/generators/jasmine/examples/templates/spec/javascripts/jasmine_examples/PlayerSpec.js +58 -0
  86. data/lib/generators/jasmine/install/USAGE +11 -0
  87. data/lib/generators/jasmine/install/install_generator.rb +18 -0
  88. data/lib/generators/jasmine/install/templates/spec/javascripts/helpers/.gitkeep +0 -0
  89. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine.yml +81 -0
  90. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  91. data/lib/generators/jasmine/install/templates/spec/javascripts/support/jasmine_runner.rb +20 -0
  92. data/lib/generators/jasmine/jasmine_generator.rb +32 -0
  93. data/lib/generators/jasmine/templates/INSTALL +9 -0
  94. data/lib/generators/jasmine/templates/lib/tasks/jasmine.rake +2 -0
  95. data/lib/generators/jasmine/templates/spec/javascripts/support/jasmine-rails.yml +81 -0
  96. data/lib/generators/jasmine/templates/spec/javascripts/support/jasmine.yml +73 -0
  97. data/lib/generators/jasmine/templates/spec/javascripts/support/jasmine_config.rb +23 -0
  98. data/lib/generators/jasmine/templates/spec/javascripts/support/jasmine_runner.rb +32 -0
  99. data/lib/jasmine.rb +31 -6
  100. data/lib/jasmine/command_line_tool.rb +1 -0
  101. data/lib/jasmine/config.rb +16 -44
  102. data/lib/jasmine/generator.rb +9 -0
  103. data/lib/jasmine/selenium_driver.rb +18 -18
  104. data/lib/jasmine/server.rb +0 -24
  105. data/lib/jasmine/spec_builder.rb +4 -4
  106. data/lib/jasmine/tasks/jasmine.rake +2 -2
  107. data/lib/jasmine/version.rb +3 -0
  108. data/spec/config_spec.rb +174 -123
  109. data/spec/fixture/jasmine.erb.yml +4 -0
  110. data/spec/jasmine_pojs_spec.rb +51 -0
  111. data/spec/jasmine_rails2_spec.rb +93 -0
  112. data/spec/jasmine_rails3_spec.rb +71 -0
  113. data/spec/spec_helper.rb +8 -2
  114. metadata +215 -65
  115. data/spec/bug_fixes_spec.rb +0 -32
  116. data/spec/rails_generator_spec.rb +0 -31
@@ -0,0 +1,21 @@
1
+ # Project-specific configuration for CruiseControl.rb
2
+ Project.configure do |project|
3
+
4
+ # Send email notifications about broken and fixed builds to email1@your.site, email2@your.site (default: send to nobody)
5
+ # project.email_notifier.emails = ['email1@your.site', 'email2@your.site']
6
+
7
+ # Set email 'from' field to john@doe.com:
8
+ # project.email_notifier.from = 'john@doe.com'
9
+
10
+ # Build the project by invoking rake task 'custom'
11
+ project.rake_task = 'jasmine:test:ci:saucelabs'
12
+
13
+ # Build the project by invoking shell script "build_my_app.sh". Keep in mind that when the script is invoked,
14
+ # current working directory is <em>[cruise&nbsp;data]</em>/projects/your_project/work, so if you do not keep build_my_app.sh
15
+ # in version control, it should be '../build_my_app.sh' instead
16
+ #project.build_command = 'cp ../saucelabs.yml .'
17
+
18
+ # Ping Subversion for new revisions every 5 minutes (default: 30 seconds)
19
+ # project.scheduler.polling_interval = 5.minutes
20
+
21
+ end
@@ -0,0 +1,58 @@
1
+ describe("Player", function() {
2
+ var player;
3
+ var song;
4
+
5
+ beforeEach(function() {
6
+ player = new Player();
7
+ song = new Song();
8
+ });
9
+
10
+ it("should be able to play a Song", function() {
11
+ player.play(song);
12
+ expect(player.currentlyPlayingSong).toEqual(song);
13
+
14
+ //demonstrates use of custom matcher
15
+ expect(player).toBePlaying(song);
16
+ });
17
+
18
+ describe("when song has been paused", function() {
19
+ beforeEach(function() {
20
+ player.play(song);
21
+ player.pause();
22
+ });
23
+
24
+ it("should indicate that the song is currently paused", function() {
25
+ expect(player.isPlaying).toBeFalsy();
26
+
27
+ // demonstrates use of 'not' with a custom matcher
28
+ expect(player).not.toBePlaying(song);
29
+ });
30
+
31
+ it("should be possible to resume", function() {
32
+ player.resume();
33
+ expect(player.isPlaying).toBeTruthy();
34
+ expect(player.currentlyPlayingSong).toEqual(song);
35
+ });
36
+ });
37
+
38
+ // demonstrates use of spies to intercept and test method calls
39
+ it("tells the current song if the user has made it a favorite", function() {
40
+ spyOn(song, 'persistFavoriteStatus');
41
+
42
+ player.play(song);
43
+ player.makeFavorite();
44
+
45
+ expect(song.persistFavoriteStatus).toHaveBeenCalledWith(true);
46
+ });
47
+
48
+ //demonstrates use of expected exceptions
49
+ describe("#resume", function() {
50
+ it("should throw an exception if song is already playing", function() {
51
+ player.play(song);
52
+
53
+ expect(function() {
54
+ player.resume();
55
+ }).toThrow("song is already playing");
56
+ });
57
+ });
58
+ });
@@ -0,0 +1,9 @@
1
+ beforeEach(function() {
2
+ this.addMatchers({
3
+ toBePlaying: function(expectedSong) {
4
+ var player = this.actual;
5
+ return player.currentlyPlayingSong === expectedSong
6
+ && player.isPlaying;
7
+ }
8
+ })
9
+ });
@@ -0,0 +1,22 @@
1
+ function Player() {
2
+ }
3
+ Player.prototype.play = function(song) {
4
+ this.currentlyPlayingSong = song;
5
+ this.isPlaying = true;
6
+ };
7
+
8
+ Player.prototype.pause = function() {
9
+ this.isPlaying = false;
10
+ };
11
+
12
+ Player.prototype.resume = function() {
13
+ if (this.isPlaying) {
14
+ throw new Error("song is already playing");
15
+ }
16
+
17
+ this.isPlaying = true;
18
+ };
19
+
20
+ Player.prototype.makeFavorite = function() {
21
+ this.currentlyPlayingSong.persistFavoriteStatus(true);
22
+ };
@@ -0,0 +1,7 @@
1
+ function Song() {
2
+ }
3
+
4
+ Song.prototype.persistFavoriteStatus = function(value) {
5
+ // something complicated
6
+ throw new Error("not yet implemented");
7
+ };
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -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>