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.
- data/CHANGELOG +9 -0
- data/features/builder.feature +6 -0
- data/features/data.feature +16 -1
- data/features/fonts.feature +11 -0
- data/features/relative_assets.feature +8 -2
- data/features/step_definitions/middleman_steps.rb +9 -2
- data/fixtures/data-app/config.rb +3 -0
- data/fixtures/data-app/data/pages.yml +6 -0
- data/fixtures/data-app/source/index.html.haml +1 -0
- data/fixtures/data-app/source/layout.haml +3 -0
- data/fixtures/fonts-app/config.rb +0 -0
- data/fixtures/fonts-app/source/fonts/StMarie-Thin.otf +0 -0
- data/fixtures/fonts-app/source/stylesheets/fonts.css.sass +3 -0
- data/fixtures/glob-app/config.rb +1 -0
- data/fixtures/glob-app/source/index.html.haml +6 -0
- data/fixtures/glob-app/source/stylesheets/site.css.sass +1 -0
- data/fixtures/test-app/config.rb +1 -0
- data/fixtures/test-app/data/test2.json +4 -0
- data/fixtures/test-app/source/data3.html.erb +1 -0
- data/lib/middleman/base.rb +8 -3
- data/lib/middleman/builder.rb +61 -22
- data/lib/middleman/cli.rb +2 -1
- data/lib/middleman/core_extensions/assets.rb +1 -1
- data/lib/middleman/core_extensions/compass.rb +6 -2
- data/lib/middleman/core_extensions/data.rb +20 -3
- data/lib/middleman/templates/html5.rb +1 -0
- data/lib/middleman/templates/mobile.rb +17 -0
- data/lib/middleman/templates/mobile/source/404.html +38 -0
- data/lib/middleman/templates/mobile/source/README.markdown +64 -0
- data/lib/middleman/templates/mobile/source/crossdomain.xml +25 -0
- data/lib/middleman/templates/mobile/source/css/style.css +236 -0
- data/lib/middleman/templates/mobile/source/default.appcache +17 -0
- data/lib/middleman/templates/mobile/source/humans.txt +43 -0
- data/lib/middleman/templates/mobile/source/img/h/apple-touch-icon.png +0 -0
- data/lib/middleman/templates/mobile/source/img/h/splash.png +0 -0
- data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon-precomposed.png +0 -0
- data/lib/middleman/templates/mobile/source/img/l/apple-touch-icon.png +0 -0
- data/lib/middleman/templates/mobile/source/img/l/splash.png +0 -0
- data/lib/middleman/templates/mobile/source/img/m/apple-touch-icon.png +0 -0
- data/lib/middleman/templates/mobile/source/index.html +95 -0
- data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.js +8316 -0
- data/lib/middleman/templates/mobile/source/js/libs/jquery-1.5.1.min.js +16 -0
- data/lib/middleman/templates/mobile/source/js/libs/modernizr-custom.js +14 -0
- data/lib/middleman/templates/mobile/source/js/libs/respond.min.js +7 -0
- data/lib/middleman/templates/mobile/source/js/mylibs/helper.js +147 -0
- data/lib/middleman/templates/mobile/source/js/script.js +0 -0
- data/lib/middleman/templates/mobile/source/robots.txt +5 -0
- data/lib/middleman/templates/mobile/source/sitemap.xml +10 -0
- data/lib/middleman/templates/mobile/source/test/index.html +31 -0
- data/lib/middleman/templates/mobile/source/test/qunit/qunit.css +148 -0
- data/lib/middleman/templates/mobile/source/test/qunit/qunit.js +1265 -0
- data/lib/middleman/templates/mobile/source/test/tests.js +26 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/Readme.PDF +0 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx1.snippet +31 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/aspx2.snippet +2 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/ga.aspx +195 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/aspx/sample.aspx +44 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/ga.jsp +225 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp1.snippet +35 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/jsp2.snippet +2 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/jsp/sample.jsp +51 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/ga.php +176 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php1.snippet +30 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/php2.snippet +4 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/php/sample.php +44 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/ga.pl +195 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl1.snippet +27 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/perl2.snippet +1 -0
- data/lib/middleman/templates/mobile/source/tools/googleanalyticsformobile/pl/sample.pl +38 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/COPYING +202 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/bookmark_bubble.js +559 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.html +43 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/example/example.js +57 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/arrow.png +0 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/close.png +0 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/generate_base64_images +33 -0
- data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/icon_calendar.png +0 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/README +27 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/databasefactory.js +45 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbworker.js +324 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbworker_test.html +393 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbworkerstarter.js +32 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears.js +595 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_gears_test.html +404 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5.js +203 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapper_html5_test.html +468 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi.js +202 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/dbwrapperapi_test.html +51 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset.js +71 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gears_resultset_test.html +86 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction.js +196 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gears_transaction_test.html +221 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils.js +94 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/gearsutils_test.html +84 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/global_functions.js +72 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/index.html +347 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/simplenotes.js +503 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/styles.css +66 -0
- data/lib/middleman/templates/mobile/source/tools/wspl/simplenotes/template.js +75 -0
- data/lib/middleman/version.rb +1 -1
- data/middleman-x86-mingw32.gemspec +0 -1
- data/middleman.gemspec +3 -2
- metadata +103 -6
- data/lib/middleman/config.ru +0 -2
- 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);
|
Binary file
|
Binary file
|
@@ -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
|
data/lib/middleman/templates/mobile/source/tools/mobile-bookmark-bubble/images/icon_calendar.png
ADDED
Binary file
|
@@ -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
|
+
};
|