Updated Branches: refs/heads/master 1420a0cf0 -> 0d2daab33
BlackBerry 10 InAppBrowser Support - updated javascript with support for InAppBrowser on BlackBerry 10 (see cordova-js repo for details) - added cordova custom plugin - added plugin method to get if a URL is whitelisted or not Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/0d2daab3 Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/0d2daab3 Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/0d2daab3 Branch: refs/heads/master Commit: 0d2daab33f6f2acb2399fcfcc88449015f6c4bd4 Parents: 1420a0c Author: Gord Tanner <[email protected]> Authored: Tue Jan 8 01:15:11 2013 -0500 Committer: Gord Tanner <[email protected]> Committed: Wed Jan 9 12:10:32 2013 -0500 ---------------------------------------------------------------------- framework/ext-qnx/org.apache.cordova/client.js | 16 ++ framework/ext-qnx/org.apache.cordova/index.js | 34 +++ framework/ext-qnx/org.apache.cordova/manifest.json | 5 + javascript/cordova.blackberry.js | 199 ++++++++++++--- 4 files changed, 213 insertions(+), 41 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/0d2daab3/framework/ext-qnx/org.apache.cordova/client.js ---------------------------------------------------------------------- diff --git a/framework/ext-qnx/org.apache.cordova/client.js b/framework/ext-qnx/org.apache.cordova/client.js new file mode 100644 index 0000000..f8308b8 --- /dev/null +++ b/framework/ext-qnx/org.apache.cordova/client.js @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2011 Research In Motion Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/0d2daab3/framework/ext-qnx/org.apache.cordova/index.js ---------------------------------------------------------------------- diff --git a/framework/ext-qnx/org.apache.cordova/index.js b/framework/ext-qnx/org.apache.cordova/index.js new file mode 100644 index 0000000..4a60b93 --- /dev/null +++ b/framework/ext-qnx/org.apache.cordova/index.js @@ -0,0 +1,34 @@ +/* + * Copyright 2010-2011 Research In Motion Limited. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var Whitelist = require("../../lib/policy/whitelist").Whitelist, + whitelist = new Whitelist(), + noop = function () {}; + +module.exports = { + isWhitelisted: function (success, fail, args) { + var url = JSON.parse(decodeURIComponent(args[0])), + success = success || noop, + fail = fail || noop; + + if (url) { + success(whitelist.isAccessAllowed(url)); + } + else { + error("please provide an url"); + } + } +}; http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/0d2daab3/framework/ext-qnx/org.apache.cordova/manifest.json ---------------------------------------------------------------------- diff --git a/framework/ext-qnx/org.apache.cordova/manifest.json b/framework/ext-qnx/org.apache.cordova/manifest.json new file mode 100644 index 0000000..9efdda2 --- /dev/null +++ b/framework/ext-qnx/org.apache.cordova/manifest.json @@ -0,0 +1,5 @@ +{ + "global": false, + "namespace": "org.apache.cordova", + "dependencies": [] +} http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/0d2daab3/javascript/cordova.blackberry.js ---------------------------------------------------------------------- diff --git a/javascript/cordova.blackberry.js b/javascript/cordova.blackberry.js index 3637ee3..a2accd5 100644 --- a/javascript/cordova.blackberry.js +++ b/javascript/cordova.blackberry.js @@ -1,6 +1,6 @@ -// commit 24d65ab645742e8360c3dd16d7a36411cc3383e0 +// commit d240deab4eaf707dab2e32d15fbdca00a0c9c4e9 -// File generated at :: Thu Jan 03 2013 11:11:25 GMT-0800 (PST) +// File generated at :: Wed Jan 09 2013 12:05:41 GMT-0500 (EST) /* Licensed to the Apache Software Foundation (ASF) under one @@ -2198,8 +2198,46 @@ var File = function(name, fullPath, type, lastModifiedDate, size){ this.type = type || null; this.lastModifiedDate = lastModifiedDate || null; this.size = size || 0; + + // These store the absolute start and end for slicing the file. + this.start = 0; + this.end = this.size; }; +/** + * Returns a "slice" of the file. Since Cordova Files don't contain the actual + * content, this really returns a File with adjusted start and end. + * Slices of slices are supported. + * start {Number} The index at which to start the slice (inclusive). + * end {Number} The index at which to end the slice (exclusive). + */ +File.prototype.slice = function(start, end) { + var size = this.end - this.start; + var newStart = 0; + var newEnd = size; + if (arguments.length) { + if (start < 0) { + newStart = Math.max(size + start, 0); + } else { + newStart = Math.min(size, start); + } + } + + if (arguments.length >= 2) { + if (end < 0) { + newEnd = Math.max(size + end, 0); + } else { + newEnd = Math.min(end, size); + } + } + + var newFile = new File(this.name, this.fullPath, this.type, this.lastModifiedData, this.size); + newFile.start = this.start + newStart; + newFile.end = this.start + newEnd; + return newFile; +}; + + module.exports = File; }); @@ -2399,6 +2437,15 @@ FileReader.prototype.readAsText = function(file, encoding) { var me = this; + var execArgs = [this.fileName, enc]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + // Read file exec( // Success callback @@ -2449,7 +2496,7 @@ FileReader.prototype.readAsText = function(file, encoding) { if (typeof me.onloadend === "function") { me.onloadend(new ProgressEvent("loadend", {target:me})); } - }, "File", "readAsText", [this.fileName, enc]); + }, "File", "readAsText", execArgs); }; @@ -2483,6 +2530,15 @@ FileReader.prototype.readAsDataURL = function(file) { var me = this; + var execArgs = [this.fileName]; + + // Maybe add slice parameters. + if (file.end < file.size) { + execArgs.push(file.start, file.end); + } else if (file.start > 0) { + execArgs.push(file.start); + } + // Read file exec( // Success callback @@ -2532,7 +2588,7 @@ FileReader.prototype.readAsDataURL = function(file) { if (typeof me.onloadend === "function") { me.onloadend(new ProgressEvent("loadend", {target:me})); } - }, "File", "readAsDataURL", [this.fileName]); + }, "File", "readAsDataURL", execArgs); }; /** @@ -3091,55 +3147,48 @@ module.exports = GlobalizationError; define("cordova/plugin/InAppBrowser", function(require, exports, module) { var exec = require('cordova/exec'); +var channel = require('cordova/channel'); -function InAppBrowser() -{ - var _channel = require('cordova/channel'); +function InAppBrowser() { this.channels = { - 'loadstart': _channel.create('loadstart'), - 'loadstop' : _channel.create('loadstop'), - 'exit' : _channel.create('exit') + 'loadstart': channel.create('loadstart'), + 'loadstop' : channel.create('loadstop'), + 'exit' : channel.create('exit') }; } -InAppBrowser.prototype._eventHandler = function(event) -{ - if (event.type in this.channels) { - this.channels[event.type].fire(event); +InAppBrowser.prototype = { + _eventHandler: function (event) { + if (event.type in this.channels) { + this.channels[event.type].fire(event); + } + }, + close: function (eventname) { + exec(null, null, "InAppBrowser", "close", []); + }, + addEventListener: function (eventname,f) { + if (eventname in this.channels) { + this.channels[eventname].subscribe(f); + } + }, + removeEventListener: function(eventname, f) { + if (eventname in this.channels) { + this.channels[eventname].unsubscribe(f); + } } -} +}; -InAppBrowser.open = function(strUrl, strWindowName, strWindowFeatures) -{ +module.exports = function(strUrl, strWindowName, strWindowFeatures) { var iab = new InAppBrowser(); var cb = function(eventname) { iab._eventHandler(eventname); - } + }; exec(cb, null, "InAppBrowser", "open", [strUrl, strWindowName, strWindowFeatures]); return iab; -} - -InAppBrowser.prototype.close = function(eventname, f) -{ - exec(null, null, "InAppBrowser", "close", []); -} - -InAppBrowser.prototype.addEventListener = function(eventname, f) -{ - if (eventname in this.channels) { - this.channels[eventname].subscribe(f); - } -} - -InAppBrowser.prototype.removeEventListener = function(eventname, f) -{ - if (eventname in this.channels) { - this.channels[eventname].unsubscribe(f); - } -} - -module.exports = InAppBrowser.open; +}; +//Export the original open so it can be used if needed +module.exports._orig = window.open; }); @@ -8668,6 +8717,68 @@ module.exports = { }); +// file: lib/blackberry/plugin/qnx/InAppBrowser.js +define("cordova/plugin/qnx/InAppBrowser", function(require, exports, module) { + +var cordova = require('cordova'), + core = require('cordova/plugin/InAppBrowser'); + +var navigate = { + "_blank": function (url, whitelisted) { + core._orig.apply(null, [url, "_blank"]); + }, + + "_self": function (url, whitelisted) { + if (whitelisted) { + window.location.href = url; + } + else { + core._orig.apply(null, [url, "_blank"]); + } + }, + + "_system": function (url, whitelisted) { + blackberry.invoke.invoke({ + target: "sys.browser", + uri: url + }, function () {}, function () {}); + } +}; + + +module.exports = { + open: function (args, win, fail) { + var url = args[0], + target = args[1] || '_self', + a = document.createElement('a'); + + //Make all URLs absolute + a.href = url; + url = a.href; + + switch (target) { + case '_self': + case '_system': + case '_blank': + break; + default: + target = '_blank'; + break; + } + + webworks.exec(function (whitelisted) { + navigate[target](url, whitelisted); + }, fail, "org.apache.cordova", "isWhitelisted", [url], true); + + return { "status" : cordova.callbackStatus.NO_RESULT, "message" : "" }; + }, + close: function (args, win, fail) { + return { "status" : cordova.callbackStatus.OK, "message" : "" }; + } +}; + +}); + // file: lib/blackberry/plugin/qnx/battery.js define("cordova/plugin/qnx/battery", function(require, exports, module) { @@ -9430,6 +9541,7 @@ var cordova = require('cordova'), 'Notification' : require('cordova/plugin/webworks/notification'), 'Media': require('cordova/plugin/webworks/media'), 'File' : require('cordova/plugin/qnx/file'), + 'InAppBrowser' : require('cordova/plugin/qnx/InAppBrowser'), 'FileTransfer': require('cordova/plugin/qnx/fileTransfer') }; @@ -9496,6 +9608,11 @@ module.exports = { }); }); }, + clobbers: { + open: { + path: "cordova/plugin/InAppBrowser" + } + }, merges: { navigator: { children: { @@ -10106,7 +10223,7 @@ window.cordova = require('cordova'); // Replace navigator before any modules are required(), to ensure it happens as soon as possible. // We replace it so that properties that can't be clobbered can instead be overridden. if (context.navigator) { - function CordovaNavigator() {} + var CordovaNavigator = function() {}; CordovaNavigator.prototype = context.navigator; context.navigator = new CordovaNavigator(); }
