middleman 2.0.9.pre.2-x86-mingw32 → 2.0.9.pre.3-x86-mingw32

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 (105) hide show
  1. data/CHANGELOG +9 -0
  2. data/features/builder.feature +6 -0
  3. data/features/data.feature +16 -1
  4. data/features/fonts.feature +11 -0
  5. data/features/relative_assets.feature +8 -2
  6. data/features/step_definitions/middleman_steps.rb +9 -2
  7. data/fixtures/data-app/config.rb +3 -0
  8. data/fixtures/data-app/data/pages.yml +6 -0
  9. data/fixtures/data-app/source/index.html.haml +1 -0
  10. data/fixtures/data-app/source/layout.haml +3 -0
  11. data/fixtures/fonts-app/config.rb +0 -0
  12. data/fixtures/fonts-app/source/fonts/StMarie-Thin.otf +0 -0
  13. data/fixtures/fonts-app/source/stylesheets/fonts.css.sass +3 -0
  14. data/fixtures/glob-app/config.rb +1 -0
  15. data/fixtures/glob-app/source/index.html.haml +6 -0
  16. data/fixtures/glob-app/source/stylesheets/site.css.sass +1 -0
  17. data/fixtures/test-app/config.rb +1 -0
  18. data/fixtures/test-app/data/test2.json +4 -0
  19. data/fixtures/test-app/source/data3.html.erb +1 -0
  20. data/lib/middleman/base.rb +8 -3
  21. data/lib/middleman/builder.rb +61 -22
  22. data/lib/middleman/cli.rb +2 -1
  23. data/lib/middleman/core_extensions/assets.rb +1 -1
  24. data/lib/middleman/core_extensions/compass.rb +6 -2
  25. data/lib/middleman/core_extensions/data.rb +20 -3
  26. data/lib/middleman/templates/html5.rb +1 -0
  27. data/lib/middleman/templates/mobile.rb +17 -0
  28. data/lib/middleman/templates/mobile/source/404.html +38 -0
  29. data/lib/middleman/templates/mobile/source/README.markdown +64 -0
  30. data/lib/middleman/templates/mobile/source/crossdomain.xml +25 -0
  31. data/lib/middleman/templates/mobile/source/css/style.css +236 -0
  32. data/lib/middleman/templates/mobile/source/default.appcache +17 -0
  33. data/lib/middleman/templates/mobile/source/humans.txt +43 -0
  34. data/lib/middleman/templates/mobile/source/img/h/apple-touch-icon.png +0 -0
  35. data/lib/middleman/templates/mobile/source/img/h/splash.png +0 -0
  36. data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon-precomposed.png +0 -0
  37. data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon.png +0 -0
  38. data/lib/middleman/templates/mobile/source/img/l/splash.png +0 -0
  39. data/lib/middleman/templates/mobile/source/img/m/apple-touch-icon.png +0 -0
  40. data/lib/middleman/templates/mobile/source/index.html +95 -0
  41. data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.js +8316 -0
  42. data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.min.js +16 -0
  43. data/lib/middleman/templates/mobile/source/js/libs/modernizr-custom.js +14 -0
  44. data/lib/middleman/templates/mobile/source/js/libs/respond.min.js +7 -0
  45. data/lib/middleman/templates/mobile/source/js/mylibs/helper.js +147 -0
  46. data/lib/middleman/templates/mobile/source/js/script.js +0 -0
  47. data/lib/middleman/templates/mobile/source/robots.txt +5 -0
  48. data/lib/middleman/templates/mobile/source/sitemap.xml +10 -0
  49. data/lib/middleman/templates/mobile/source/test/index.html +31 -0
  50. data/lib/middleman/templates/mobile/source/test/qunit/qunit.css +148 -0
  51. data/lib/middleman/templates/mobile/source/test/qunit/qunit.js +1265 -0
  52. data/lib/middleman/templates/mobile/source/test/tests.js +26 -0
  53. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/Readme.PDF +0 -0
  54. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx1.snippet +31 -0
  55. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx2.snippet +2 -0
  56. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/ga.aspx +195 -0
  57. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/sample.aspx +44 -0
  58. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/ga.jsp +225 -0
  59. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp1.snippet +35 -0
  60. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp2.snippet +2 -0
  61. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/sample.jsp +51 -0
  62. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/ga.php +176 -0
  63. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php1.snippet +30 -0
  64. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php2.snippet +4 -0
  65. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/sample.php +44 -0
  66. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/ga.pl +195 -0
  67. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl1.snippet +27 -0
  68. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl2.snippet +1 -0
  69. data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/sample.pl +38 -0
  70. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/COPYING +202 -0
  71. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/bookmark_bubble.js +559 -0
  72. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.html +43 -0
  73. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.js +57 -0
  74. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/arrow.png +0 -0
  75. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/close.png +0 -0
  76. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/generate_base64_images +33 -0
  77. data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/icon_calendar.png +0 -0
  78. data/lib/middleman/templates/mobile/source/tools/wspl/README +27 -0
  79. data/lib/middleman/templates/mobile/source/tools/wspl/databasefactory.js +45 -0
  80. data/lib/middleman/templates/mobile/source/tools/wspl/dbworker.js +324 -0
  81. data/lib/middleman/templates/mobile/source/tools/wspl/dbworker_test.html +393 -0
  82. data/lib/middleman/templates/mobile/source/tools/wspl/dbworkerstarter.js +32 -0
  83. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears.js +595 -0
  84. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears_test.html +404 -0
  85. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5.js +203 -0
  86. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5_test.html +468 -0
  87. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi.js +202 -0
  88. data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi_test.html +51 -0
  89. data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset.js +71 -0
  90. data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset_test.html +86 -0
  91. data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction.js +196 -0
  92. data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction_test.html +221 -0
  93. data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils.js +94 -0
  94. data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils_test.html +84 -0
  95. data/lib/middleman/templates/mobile/source/tools/wspl/global_functions.js +72 -0
  96. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/index.html +347 -0
  97. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/simplenotes.js +503 -0
  98. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/styles.css +66 -0
  99. data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/template.js +75 -0
  100. data/lib/middleman/version.rb +1 -1
  101. data/middleman-x86-mingw32.gemspec +0 -1
  102. data/middleman.gemspec +3 -2
  103. metadata +103 -6
  104. data/lib/middleman/config.ru +0 -2
  105. data/lib/middleman/features/tiny_src.rb +0 -11
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
2
+ "http://www.w3.org/TR/html4/strict.dtd">
3
+
4
+ <!--
5
+ Copyright 2010 Google Inc.
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+ -->
19
+
20
+ <html>
21
+ <head>
22
+ <title>Sample</title>
23
+ <meta name="viewport"
24
+ content="width=device-width,minimum-scale=1.0,maximum-scale=1.0" />
25
+ <meta name="apple-mobile-web-app-capable" content="yes" />
26
+ <link rel="apple-touch-icon-precomposed" href="../images/icon_calendar.png" />
27
+ <script type="text/javascript" src="../bookmark_bubble.js"></script>
28
+ <script type="text/javascript" src="example.js"></script>
29
+ </head>
30
+ <body style="height: 3000px;">
31
+ <p>The bookmark bubble will show after a second, if:</p>
32
+ <ul>
33
+ <li>It has not been previously dismissed too often</li>
34
+ <li>The application is not running in full screen mode</li>
35
+ <li>The bookmark bubble hash token is not present</li>
36
+ </ul>
37
+ <p>Supported browsers:</p>
38
+ <ul>
39
+ <li>iPhone / iPod / iPad Mobile Safari 3.0+</li>
40
+ </ul>
41
+ </body>
42
+ </html>
43
+
@@ -0,0 +1,57 @@
1
+ /*
2
+ Copyright 2010 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ /** @fileoverview Example of how to use the bookmark bubble. */
18
+
19
+ window.addEventListener('load', function() {
20
+ window.setTimeout(function() {
21
+ var bubble = new google.bookmarkbubble.Bubble();
22
+
23
+ var parameter = 'bmb=1';
24
+
25
+ bubble.hasHashParameter = function() {
26
+ return window.location.hash.indexOf(parameter) != -1;
27
+ };
28
+
29
+ bubble.setHashParameter = function() {
30
+ if (!this.hasHashParameter()) {
31
+ window.location.hash += parameter;
32
+ }
33
+ };
34
+
35
+ bubble.getViewportHeight = function() {
36
+ window.console.log('Example of how to override getViewportHeight.');
37
+ return window.innerHeight;
38
+ };
39
+
40
+ bubble.getViewportScrollY = function() {
41
+ window.console.log('Example of how to override getViewportScrollY.');
42
+ return window.pageYOffset;
43
+ };
44
+
45
+ bubble.registerScrollHandler = function(handler) {
46
+ window.console.log('Example of how to override registerScrollHandler.');
47
+ window.addEventListener('scroll', handler, false);
48
+ };
49
+
50
+ bubble.deregisterScrollHandler = function(handler) {
51
+ window.console.log('Example of how to override deregisterScrollHandler.');
52
+ window.removeEventListener('scroll', handler, false);
53
+ };
54
+
55
+ bubble.showIfAllowed();
56
+ }, 1000);
57
+ }, false);
@@ -0,0 +1,33 @@
1
+ #!/bin/bash
2
+
3
+ # Copyright 2010 Google Inc.
4
+ #
5
+ # Licensed under the Apache License, Version 2.0 (the "License");
6
+ # you may not use this file except in compliance with the License.
7
+ # You may obtain a copy of the License at
8
+ #
9
+ # http://www.apache.org/licenses/LICENSE-2.0
10
+ #
11
+ # Unless required by applicable law or agreed to in writing, software
12
+ # distributed under the License is distributed on an "AS IS" BASIS,
13
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ # See the License for the specific language governing permissions and
15
+ # limitations under the License.
16
+
17
+ # Generates base64 versions of images so they can be inlined using the 'data:'
18
+ # URI scheme.
19
+
20
+ declare -ra IMAGE_FILES=( close.png arrow.png )
21
+
22
+ for image in ${IMAGE_FILES[@]}; do
23
+ OUT="$image.base64"
24
+ cat "$image" \
25
+ | uuencode -m ignore-this \
26
+ | grep -v begin-base64 \
27
+ | grep -v "====" \
28
+ | xargs echo \
29
+ | sed -e 's/ //g' \
30
+ | xargs echo -n \
31
+ > $OUT
32
+ ls -l $OUT
33
+ done
@@ -0,0 +1,27 @@
1
+ How to run the tests:
2
+
3
+ * The tests themselves assume that jsunit is in a sibling directory
4
+ to the one containing the distrbution. If this is not so, it is sufficient
5
+ to edit the paths in the test files. (On UNIX, symlinks may be your
6
+ friend if this is not convenient.)
7
+
8
+ * jsmock.js (available from http://jsmock.sourceforge.net/) should
9
+ be placed in the distribution directory.
10
+
11
+ * Specify the test files via a URL parameter. (This might be an issue
12
+ with jsunit: http://digitalmihailo.blogspot.com/2008/06/make-jsunit-work-in-firefox-30.html)
13
+
14
+ For example, if the root of your downloaded of the distribution is /mypath:
15
+
16
+ file:///mypath/jsunit/testRunner.html?testpage=mypath/webstorageportabilitylayer/dbwrapper_gears_test.html
17
+ file:///mypath/jsunit/testRunner.html?testpage=mypath/webstorageportabilitylayer/dbwrapper_html5_test.html
18
+ file:///mypath/jsunit/testRunner.html?testpage=mypath/webstorageportabilitylayer/dbwrapperapi_test.html
19
+
20
+ NB: the leading / in a UNIX path is not included in mypath so setting
21
+ it via pwd will not deliver the desired effect.
22
+
23
+
24
+
25
+
26
+
27
+
@@ -0,0 +1,45 @@
1
+ /*
2
+ Copyright 2009 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ // Namespace.
18
+ google.wspl.DatabaseFactory = google.wspl.DatabaseFactory || {};
19
+
20
+ /**
21
+ * Factory function to build databases in a cross-API manner.
22
+ * @param {string} dbName of the database
23
+ * @param {string} dbworkerUrl the URL for Gears worker.
24
+ * @return {google.wspl.Database} The database object.
25
+ */
26
+ google.wspl.DatabaseFactory.createDatabase = function(dbName, dbworkerUrl) {
27
+ var dbms;
28
+ if (window.openDatabase) {
29
+ // We have HTML5 functionality.
30
+ dbms = new google.wspl.html5.Database(dbName);
31
+ } else {
32
+ // Try to use Google Gears.
33
+ var gearsDb = goog.gears.getFactory().create('beta.database');
34
+ var wp = goog.gears.getFactory().create('beta.workerpool');
35
+
36
+ // Note that Gears will not allow file based URLs when creating a worker.
37
+ dbms = new wireless.db.gears.Database();
38
+ dbms.openDatabase('', dbName, gearsDb);
39
+ wp.onmessage = google.bind(dbms.onMessage_, dbms);
40
+
41
+ // Comment this line out to use the synchronous database.
42
+ dbms.startWorker(wp, dbworkerUrl, 0);
43
+ }
44
+ return dbms;
45
+ };
@@ -0,0 +1,324 @@
1
+ /*
2
+ Copyright 2009 Google Inc.
3
+
4
+ Licensed under the Apache License, Version 2.0 (the "License");
5
+ you may not use this file except in compliance with the License.
6
+ You may obtain a copy of the License at
7
+
8
+ http://www.apache.org/licenses/LICENSE-2.0
9
+
10
+ Unless required by applicable law or agreed to in writing, software
11
+ distributed under the License is distributed on an "AS IS" BASIS,
12
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ See the License for the specific language governing permissions and
14
+ limitations under the License.
15
+ */
16
+
17
+ /**
18
+ * @fileoverview A worker thread that performs synchronous queries against a
19
+ * Gears database on behalf of an asynchronous calling client.
20
+ *
21
+ * The worker replies to the sender with messages to pass results, errors, and
22
+ * notifications about completed transactions. The type field of the message
23
+ * body specifies the message type. For each successful statement, a RESULT
24
+ * message is sent with a result attribute containing the Gears result set. For
25
+ * the first unsuccessful statement, an ERROR message will be sent with details
26
+ * stored in the error field. After the transaction has been committed, a COMMIT
27
+ * message is sent. If the transaction is rolled back, a ROLLBACK message is
28
+ * sent.
29
+ *
30
+ * NB: The worker must be served over http. Further, to operate successfully,
31
+ * it requires the inclusion of global_functions.js and gearsutils.js.
32
+ */
33
+
34
+
35
+ /**
36
+ * Creates a DbWorker to handle incoming messages, execute queries, and return
37
+ * results to the main thread.
38
+ *
39
+ * @param {GearsWorkerPool} wp The gears worker pool.
40
+ * @constructor
41
+ */
42
+ google.wspl.gears.DbWorker = function(wp) {
43
+
44
+ /**
45
+ * An array of transaction ids representing the transactions that are open on
46
+ * the database.
47
+ * @type {Array.<number>}
48
+ * @private
49
+ */
50
+ this.transactions_ = [];
51
+
52
+ /**
53
+ * The gears worker pool.
54
+ * @type {GearsWorkerPool}
55
+ * @private
56
+ */
57
+ this.wp_ = wp;
58
+
59
+ this.wp_.onmessage = google.bind(this.onMessage_, this);
60
+
61
+ this.sendMessageToWorker_({
62
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.STARTED
63
+ });
64
+ };
65
+
66
+ /**
67
+ * The gears database that this worker thread will interact with.
68
+ * @type {GearsDatabase}
69
+ * @private
70
+ */
71
+ google.wspl.gears.DbWorker.prototype.db_;
72
+
73
+ /**
74
+ * A singleton instance of DbWorker.
75
+ * @type {google.wspl.gears.DbWorker?}
76
+ * @private
77
+ */
78
+ google.wspl.gears.DbWorker.instance_;
79
+
80
+ /**
81
+ * The sender ID of the incomming messages. Default to 0 for workerpool ID.
82
+ * @type {number}
83
+ * @private
84
+ */
85
+ google.wspl.gears.DbWorker.prototype.senderId_ = 0;
86
+
87
+ /**
88
+ * Message type constants for worker command messages.
89
+ * @enum {number}
90
+ */
91
+ google.wspl.gears.DbWorker.CommandTypes = {
92
+ OPEN: 1,
93
+ BEGIN: 2,
94
+ EXECUTE: 3,
95
+ COMMIT: 4,
96
+ ROLLBACK: 5
97
+ };
98
+
99
+ /**
100
+ * Message type constants for worker reply messages.
101
+ * @enum {number}
102
+ */
103
+ google.wspl.gears.DbWorker.ReplyTypes = {
104
+ RESULT: 1,
105
+ FAILURE: 2,
106
+ COMMIT: 3,
107
+ ROLLBACK: 4,
108
+ STARTED: 5,
109
+ OPEN_SUCCESSFUL: 6,
110
+ OPEN_FAILED: 7,
111
+ LOG: 8
112
+ };
113
+
114
+ /**
115
+ * Starts the DbWorker.
116
+ */
117
+ google.wspl.gears.DbWorker.start = function() {
118
+ var wp = google.gears.workerPool;
119
+ google.wspl.gears.DbWorker.instance_ = new google.wspl.gears.DbWorker(wp);
120
+ };
121
+
122
+ /**
123
+ * Handles an OPEN command from the main thread.
124
+ *
125
+ * @param {string} userId The user to which the database belongs.
126
+ * @param {string} name The database's name.
127
+ */
128
+ google.wspl.gears.DbWorker.prototype.handleOpen_ = function(userId, name) {
129
+ this.log_('Attempting to create Gears database: userId=' + userId + ', name='
130
+ + name);
131
+ try {
132
+ this.db_ = google.gears.factory.create('beta.database', '1.0');
133
+ google.wspl.GearsUtils.openDatabase(userId, name, this.db_, this.log_);
134
+ this.sendMessageToWorker_({
135
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.OPEN_SUCCESSFUL
136
+ });
137
+ } catch (ex) {
138
+ this.sendMessageToWorker_({
139
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.OPEN_FAILED,
140
+ 'error': ex
141
+ });
142
+ }
143
+ };
144
+
145
+ /**
146
+ * Handles a EXECUTE command from the main thread.
147
+ *
148
+ * @param {!Array.<google.wspl.Statement>} statements The statements to execute.
149
+ * @param {number} callbackId The callback to invoke after each execution.
150
+ * @param {number} transactionId The transaction that the statements belong to.
151
+ * @private
152
+ */
153
+ google.wspl.gears.DbWorker.prototype.handleExecute_ =
154
+ function(statements, callbackId, transactionId) {
155
+ var self = this;
156
+ try {
157
+ this.executeAll_(statements, function(results) {
158
+ self.sendMessageToWorker_(/** @type {string} */({
159
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.RESULT,
160
+ 'results': results,
161
+ 'callbackId': callbackId,
162
+ 'transactionId': transactionId
163
+ }));
164
+ });
165
+ } catch (e) {
166
+ this.sendMessageToWorker_({
167
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.FAILURE,
168
+ 'error': e,
169
+ 'callbackId': callbackId,
170
+ 'transactionId': transactionId
171
+ });
172
+ }
173
+ };
174
+
175
+ /**
176
+ * Executes all of the statements on the Gears database. The callback is
177
+ * invoked with the query results after each successful query execution.
178
+ *
179
+ * @param {!Array.<Object>} statements The statements to execute.
180
+ * @param {Function} callback The callback to invoke with query results.
181
+ * @private
182
+ */
183
+ google.wspl.gears.DbWorker.prototype.executeAll_ =
184
+ function(statements, callback) {
185
+ var results = [];
186
+ for (var i = 0; i < statements.length; i++) {
187
+ var resultset = this.db_.execute(statements[i]['sql'],
188
+ statements[i]['params']);
189
+ var result = google.wspl.GearsUtils.resultSetToObjectArray(resultset);
190
+ results.push(result);
191
+ }
192
+ callback(results);
193
+ };
194
+
195
+ /**
196
+ * Handles a BEGIN command from the main thread.
197
+ *
198
+ * @param {number} transactionId The transaction that the statements belong to.
199
+ * @private
200
+ */
201
+ google.wspl.gears.DbWorker.prototype.handleBegin_ = function(transactionId) {
202
+ this.transactions_.push(transactionId);
203
+ this.db_.execute('BEGIN IMMEDIATE');
204
+ };
205
+
206
+ /**
207
+ * Handles a COMMIT command from the main thread.
208
+ *
209
+ * @param {number} transactionId The transaction that the statements belong to.
210
+ * @private
211
+ */
212
+ google.wspl.gears.DbWorker.prototype.handleCommit_ = function(transactionId) {
213
+ this.db_.execute('COMMIT');
214
+ this.postCommit_();
215
+ };
216
+
217
+ /**
218
+ * Handles a ROLLBACK command from the main thread.
219
+ *
220
+ * @param {number} transactionId The transaction that the statements belong to.
221
+ * @private
222
+ */
223
+ google.wspl.gears.DbWorker.prototype.handleRollback_ = function(transactionId) {
224
+ this.db_.execute('ROLLBACK');
225
+ this.postRollback_();
226
+ };
227
+
228
+ /**
229
+ * Sends a COMMIT reply to the main thread for each transaction that was
230
+ * committed.
231
+ *
232
+ * @private
233
+ */
234
+ google.wspl.gears.DbWorker.prototype.postCommit_ = function() {
235
+ for (var i = this.transactions_.length - 1; i >= 0; i--) {
236
+ this.sendMessageToWorker_({
237
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.COMMIT,
238
+ 'transactionId': this.transactions_[i]
239
+ });
240
+ }
241
+ this.transactions_ = [];
242
+ };
243
+
244
+ /**
245
+ * Sends a ROLLBACK reply to the main thread for each transaction that was
246
+ * rolled back.
247
+ *
248
+ * @private
249
+ */
250
+ google.wspl.gears.DbWorker.prototype.postRollback_ = function() {
251
+ for (var i = this.transactions_.length - 1; i >= 0; i --) {
252
+ this.sendMessageToWorker_({
253
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.ROLLBACK,
254
+ 'transactionId': this.transactions_[i]
255
+ });
256
+ }
257
+ this.transactions_ = [];
258
+ };
259
+
260
+ /**
261
+ * Handles incomming messages.
262
+ * @param {string} a Deprecated.
263
+ * @param {number} b Deprecated.
264
+ * @param {Object} messageObject The message object.
265
+ * @private
266
+ */
267
+ google.wspl.gears.DbWorker.prototype.onMessage_ =
268
+ function(a, b, messageObject) {
269
+ this.senderId_ = messageObject.sender;
270
+ var message = messageObject.body;
271
+ var type = message['type'];
272
+ var name = message['name'];
273
+ var statements = message['statements'];
274
+ var callbackId = message['callbackId'];
275
+ var transactionId = message['transactionId'];
276
+ var userId = message['userId'];
277
+
278
+ try {
279
+ switch(type) {
280
+ case google.wspl.gears.DbWorker.CommandTypes.OPEN:
281
+ this.handleOpen_(userId, name);
282
+ break;
283
+
284
+ case google.wspl.gears.DbWorker.CommandTypes.EXECUTE:
285
+ this.handleExecute_(statements, callbackId, transactionId);
286
+ break;
287
+
288
+ case google.wspl.gears.DbWorker.CommandTypes.BEGIN:
289
+ this.handleBegin_(transactionId);
290
+ break;
291
+
292
+ case google.wspl.gears.DbWorker.CommandTypes.COMMIT:
293
+ this.handleCommit_(transactionId);
294
+ break;
295
+
296
+ case google.wspl.gears.DbWorker.CommandTypes.ROLLBACK:
297
+ this.handleRollback_(transactionId);
298
+ break;
299
+ }
300
+ } catch (ex) {
301
+ this.log_('Database worker failed: ' + ex.message);
302
+ }
303
+ };
304
+
305
+ /**
306
+ * Sends a log message to the main thread to be logged.
307
+ * @param {string} msg The message to log.
308
+ * @private
309
+ */
310
+ google.wspl.gears.DbWorker.prototype.log_ = function(msg) {
311
+ this.sendMessageToWorker_({
312
+ 'type': google.wspl.gears.DbWorker.ReplyTypes.LOG,
313
+ 'msg': msg
314
+ });
315
+ };
316
+
317
+ /**
318
+ * Sends a message to the main worker thread.
319
+ * @param {Object} msg The message object to send.
320
+ * @private
321
+ */
322
+ google.wspl.gears.DbWorker.prototype.sendMessageToWorker_ = function(msg) {
323
+ this.wp_.sendMessage(msg, this.senderId_);
324
+ };