You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ti...@apache.org on 2012/08/29 23:18:01 UTC

[2/4] webworks commit: get rid of bundled webworks.js

get rid of bundled webworks.js


Project: http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/commit/8e1b9bad
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/tree/8e1b9bad
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/diff/8e1b9bad

Branch: refs/heads/master
Commit: 8e1b9bad4cf98f2a9a441eacbfe718869fa3a7d1
Parents: b811557
Author: Gord Tanner <gt...@gmail.com>
Authored: Tue Aug 28 13:26:38 2012 -0400
Committer: Tim Kim <ti...@nitobi.com>
Committed: Wed Aug 29 14:17:35 2012 -0700

----------------------------------------------------------------------
 bin/templates/project/www/js/webworks-1.0.1.8.js | 1240 -----------------
 1 files changed, 0 insertions(+), 1240 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cordova-blackberry-webworks/blob/8e1b9bad/bin/templates/project/www/js/webworks-1.0.1.8.js
----------------------------------------------------------------------
diff --git a/bin/templates/project/www/js/webworks-1.0.1.8.js b/bin/templates/project/www/js/webworks-1.0.1.8.js
deleted file mode 100755
index 52d5da8..0000000
--- a/bin/templates/project/www/js/webworks-1.0.1.8.js
+++ /dev/null
@@ -1,1240 +0,0 @@
-/*
- *  Copyright 2012 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.
- */
-
-(function () { 
-/*
- *  Copyright 2012 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 define,
-    require;
-
-(function () {
-    var unpreparedModules = {},
-        readyModules = {},
-        ACCEPTABLE_EXTENSIONS = [".js", ".json"],
-        DEFAULT_EXTENSION = ".js";
-
-    function hasValidExtension(moduleName) {
-        return ACCEPTABLE_EXTENSIONS.some(function (element, index, array) {
-            return moduleName.match("\\" + element + "$");
-        });
-    }
-
-
-    function normalizeName(originalName, baseName) {
-        var nameParts,
-            name = originalName.slice(0);
-        //remove ^local:// (if it exists) and .js$
-        //This will not work for local:// without a trailing js
-        name = name.replace(/(?:^local:\/\/)/, "");
-        if (name.charAt(0) === '.' && baseName) {
-            //Split the baseName and remove the final part (the module name)
-            nameParts = baseName.split('/');
-            nameParts.pop();
-            nameParts = nameParts.concat(name.split('/'));
-            
-            name = nameParts.reduce(function (previous, current,  index, array) {
-                var returnValue,
-                    slashIndex;
-
-                //If previous is a dot, ignore it
-                //If previous is ever just .. we're screwed anyway
-                if (previous !== '.') {
-                    returnValue = previous;
-                }
-                
-                //If we have a .. then remove a chunk of previous
-                if (current === "..") {
-                    slashIndex = previous.lastIndexOf('/');
-                    //If there's no slash we're either screwed or we remove the final token
-                    if (slashIndex !== -1) {
-                        returnValue = previous.slice(0, previous.lastIndexOf('/'));
-                    } else {
-                        returnValue = "";
-                    }
-                } else if (current !== '.') {
-                    //Otherwise simply append anything not a .
-                    //Only append a slash if we're not empty
-                    if (returnValue.length) {
-                        returnValue += "/";
-                    }
-                    returnValue += current;
-                }
-
-                return returnValue;
-            });
-
-        }
-        
-        //If there is no acceptable extension tack on a .js
-        if (!hasValidExtension(name)) {
-            name = name + DEFAULT_EXTENSION;
-        }
-
-        return name;
-    }
-
-    function buildModule(name, dependencies, factory) {
-        var module = {exports: {}},
-            localRequire = function (moduleName) {
-                return require(moduleName, name);
-            },
-            args = [];
-        localRequire.toUrl = function (moduleName, baseName) {
-            return require.toUrl(moduleName, baseName || name);
-        };
-        dependencies.forEach(function (dependency) {
-            if (dependency === 'require') {
-                args.push(localRequire);
-            } else if (dependency === 'exports') {
-                args.push(module.exports);
-            } else if (dependency === 'module') {
-                args.push(module);
-            } else {
-                //This is because jshint cannot handle out of order functions
-                /*global loadModule:false */
-                args.push(loadModule(dependency));
-                /*global loadModule:true */
-            }
-        });
-
-        //No need to process dependencies, webworks only has require, exports, module
-        factory.apply(this, args);
-
-        //For full AMD we would need logic to also check the return value
-        return module.exports;
-
-    }
-
-    function getDefineString(moduleName, body) {
-        var evalString = 'define("' + moduleName + '", function (require, exports, module) {',
-            isJson = /\.json$/.test(moduleName);
-
-        evalString += isJson ? ' module.exports = ' : '';
-        evalString += body.replace(/^\s+|\s+$/g, '');
-        evalString += isJson ? ' ;' : '';
-        evalString += '});';
-
-        return evalString;
-    }
-
-    function loadModule(name, baseName) {
-        var normalizedName = normalizeName(name, baseName),
-            url,
-            xhr,
-            loadResult;
-        //Always check undefined first, this allows the user to redefine modules
-        //(Not used in WebWorks, although it is used in our unit tests)
-        if (unpreparedModules[normalizedName]) {
-            readyModules[normalizedName] = buildModule(normalizedName, unpreparedModules[normalizedName].dependencies, unpreparedModules[normalizedName].factory);
-            delete unpreparedModules[normalizedName];
-        }
-
-        //If the module does not exist, load the module from external source
-        //Webworks currently only loads APIs from across bridge
-        if (!readyModules[normalizedName]) {
-            //If the module to be loaded ends in .js then we will define it
-            //Also if baseName exists than we have a local require situation
-            if (hasValidExtension(name) || baseName) {
-                xhr = new XMLHttpRequest();
-                url = name;
-                //If the module to be loaded starts with local:// go over the bridge
-                //Else If the module to be loaded is a relative load it may not have .js extension which is needed
-                if (/^local:\/\//.test(name)) {
-                    url = "http://localhost:8472/extensions/load/" + normalizedName.replace(/(?:^ext\/)(.+)(?:\/client.js$)/, "$1");
-
-                    xhr.open("GET", url, false);
-                    xhr.send(null);
-                    try {
-                        loadResult = JSON.parse(xhr.responseText);
-
-                        loadResult.dependencies.forEach(function (dep) {
-                            /*jshint evil:true */
-                            eval(getDefineString(dep.moduleName, dep.body));
-                            /*jshint evil:false */
-                        });
-
-                        //Trimming responseText to remove EOF chars
-                        /*jshint evil:true */
-                        eval(getDefineString(normalizedName, loadResult.client));
-                        /*jshint evil:false */
-                    } catch (err1) {
-                        err1.message += ' in ' + url;
-                        throw err1;
-                    }
-                } else {
-                    if (baseName) {
-                        url = normalizedName;
-                    }
-
-                    xhr.open("GET", url, false);
-                    xhr.send(null);
-                    try {
-                        //Trimming responseText to remove EOF chars
-                        /*jshint evil:true */
-                        eval(getDefineString(normalizedName, xhr.responseText));
-                        /*jshint evil:false */
-                    } catch (err) {
-                        err.message += ' in ' + url;
-                        throw err;
-                    }
-                }
-
-                if (unpreparedModules[normalizedName]) {
-                    readyModules[normalizedName] = buildModule(normalizedName, unpreparedModules[normalizedName].dependencies, unpreparedModules[normalizedName].factory);
-                    delete unpreparedModules[normalizedName];
-                }
-            } else {
-                throw "module " + name + " cannot be found";
-            }
-
-        }
-
-        return readyModules[normalizedName];
-
-    }
-
-    //Use the AMD signature incase we ever want to change.
-    //For now we will only be using (name, baseName)
-    require = function (dependencies, callback) {
-        if (typeof dependencies === "string") {
-            //dependencies is the module name and callback is the relName
-            //relName is not part of the AMDJS spec, but we use it from localRequire
-            return loadModule(dependencies, callback);
-        } else if (Array.isArray(dependencies) && typeof callback === 'function') {
-            //Call it Asynchronously
-            setTimeout(function () {
-                buildModule(undefined, dependencies, callback);
-            }, 0);
-        }
-    }; 
-
-    require.toUrl = function (originalName, baseName) {
-        return normalizeName(originalName, baseName);
-    };
-
-    //Use the AMD signature incase we ever want to change.
-    //For now webworks will only be using (name, factory) signature.
-    define = function (name, dependencies, factory) {
-        if (typeof name === "string" && typeof dependencies === 'function') {
-            factory = dependencies;
-            dependencies = ['require', 'exports', 'module'];
-        }
-
-        //According to the AMDJS spec we should parse out the require statments 
-        //from factory.toString and add those to the list of dependencies
-
-        //Normalize the name. Remove local:// and .js
-        name = normalizeName(name);
-        unpreparedModules[name] = {
-            dependencies: dependencies,
-            factory: factory
-        }; 
-    };
-}());
-
-//Export for use in node for unit tests
-if (typeof module === "object" && typeof require === "function") {
-    module.exports = {
-        require: require,
-        define: define
-    };
-}
-
-define('builder', function (require, exports, module) {
-/*
- * 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 utils = require(!!require.resolve ? "../utils" : "lib/utils");
-
-function buildNamespace(currentNamespace, namespaceParts, featureProperties) {
-    var featureId,
-        nextPart;
-
-    if (namespaceParts.length === 1) {
-        //base case, feature properties go here
-        featureId = namespaceParts[0];
-        if (currentNamespace[featureId] === undefined) {
-            currentNamespace[featureId] = {};
-        }
-
-        currentNamespace = utils.mixin(featureProperties, currentNamespace[featureId]);
-        return currentNamespace;
-    }
-    else {
-        nextPart = namespaceParts.shift();
-        if (currentNamespace[nextPart] === undefined) {
-            currentNamespace[nextPart] = {};
-        }
-
-        return buildNamespace(currentNamespace[nextPart], namespaceParts, featureProperties);
-    }
-}
-
-function include(parent, featureIdList) {
-    var featureId,
-        featureProperties,
-        localUrl,
-        i;
-
-    for (i = 0; i < featureIdList.length; i++) {
-        featureId = featureIdList[i];
-
-        localUrl = "local://ext/" + featureId + "/client.js";
-        featureProperties = utils.loadModule(localUrl);
-
-        buildNamespace(parent, featureId.split("."), featureProperties);
-    }
-}
-
-var _self = {
-    build: function (featureIdList) {
-        return {
-            into: function (target) {
-                include(target, featureIdList);
-            }
-        };
-    }
-};
-
-module.exports = _self;
-
-});
-
-define('window', function (require, exports, module) {
-/*
- * 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.
- */
-
-// HACK have to live with differentiating node from browser for now
-module.exports = {
-    "window": function () {
-        return !!require.resolve ? null : window;
-    }
-};
-});
-
-define('event', function (require, exports, module) {
-/*
-* 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 _handlers = {};
-
-function _add(featureId, name, cb, success, fail, once) {
-    var handler;
-    if (featureId && name && typeof cb === "function") {
-        handler = {
-            func: cb,
-            once: !!once
-        };
-        //If this is the first time we are adding a cb
-        if (!_handlers.hasOwnProperty(name)) {
-            _handlers[name] = [handler];
-            //Do not call exec for once because its not necessary
-            if (!once) {
-                window.webworks.exec(success, fail, featureId, "add", {"eventName": name});
-            }
-        } else if (_handlers[name].some(function (element, index, array) { 
-            return element.func !== cb;
-        })) {
-            //Only add unique callbacks
-            _handlers[name].push(handler);
-        }
-    }
-}
-
-module.exports = {
-    add: function (featureId, name, cb, success, fail) {
-        _add(featureId, name, cb, success, fail, false);
-    },
-    
-    once: function (featureId, name, cb, success, fail) {
-        _add(featureId, name, cb, success, fail, true);
-    },
-    
-    isOn: function (name) {
-        return !!_handlers[name];
-    },
-
-    remove: function (featureId, name, cb, success, fail) {
-        if (featureId && name && typeof cb === "function") {
-            if (_handlers.hasOwnProperty(name)) {
-                _handlers[name] = _handlers[name].filter(function (element, index, array) {
-                    return element.func !== cb || element.once;
-                });
-                
-                if (_handlers[name].length === 0) {
-                    delete _handlers[name];
-                    window.webworks.exec(success, fail, featureId, "remove", {"eventName": name});
-                }
-            }
-        }
-    },
-
-    trigger: function (name, args) {
-        var parsedArgs;
-        if (_handlers.hasOwnProperty(name)) {
-            if (args && args !== "undefined") {
-                parsedArgs = JSON.parse(args);
-            }
-            //Call the handlers
-            _handlers[name].forEach(function (handler) {
-                if (handler) {
-                    //args should be an array of arguments
-                    handler.func.apply(undefined, parsedArgs);
-                }
-            });
-            //Remove the once listeners
-            _handlers[name] = _handlers[name].filter(function (handler) {
-                return !handler.once;
-            });
-            //Clean up the array if it is empty
-            if (_handlers[name].length === 0) {
-                delete _handlers[name];
-                //No need to call remove since this would only be for callbacks
-            }
-        }
-    }
-};
-
-});
-
-define('lib/utils', function (require, exports, module) {
-/*
- *  Copyright 2012 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 self,
-    exception = require('./exception');
-
-self = module.exports = {
-    validateNumberOfArguments: function (lowerBound, upperBound, numberOfArguments, customExceptionType, customExceptionMessage, customExceptionObject) {
-
-        customExceptionMessage = customExceptionMessage || "";
-
-        if (arguments.length < 3 || arguments.length > 6) {
-            exception.raise(exception.types.Argument, "Wrong number of arguments when calling: validateNumberOfArguments()");
-        }
-
-        if (isNaN(lowerBound) && isNaN(upperBound) && isNaN(numberOfArguments)) {
-            exception.raise(exception.types.ArgumentType, "(validateNumberOfArguments) Arguments are not numbers");
-        }
-
-        lowerBound = parseInt(lowerBound, 10);
-        upperBound = parseInt(upperBound, 10);
-        numberOfArguments = parseInt(numberOfArguments, 10);
-
-        if (numberOfArguments < lowerBound || numberOfArguments > upperBound) {
-            exception.raise((customExceptionType || exception.types.ArgumentLength), (customExceptionMessage + "\n\nWrong number of arguments"), customExceptionObject);
-        }
-
-    },
-
-    validateArgumentType: function (arg, argType, customExceptionType, customExceptionMessage, customExceptionObject) {
-        var invalidArg = false,
-            msg;
-
-        switch (argType) {
-        case "array":
-            if (!arg instanceof Array) {
-                invalidArg = true;
-            }
-            break;
-        case "date":
-            if (!arg instanceof Date) {
-                invalidArg = true;
-            }
-            break;
-        case "integer":
-            if (typeof arg === "number") {
-                if (arg !== Math.floor(arg)) {
-                    invalidArg = true;
-                }
-            }
-            else {
-                invalidArg = true;
-            }
-            break;
-        default:
-            if (typeof arg !== argType) {
-                invalidArg = true;
-            }
-            break;
-        }
-
-        if (invalidArg) {
-            msg = customExceptionMessage +  ("\n\nInvalid Argument type. argument: " + arg + " ==> was expected to be of type: " + argType);
-            exception.raise((customExceptionType || exception.types.ArgumentType), msg, customExceptionObject);
-        }
-    },
-
-    validateMultipleArgumentTypes: function (argArray, argTypeArray, customExceptionType, customExceptionMessage, customExceptionObject) {
-        for (var i = 0; i < argArray.length; i++) {
-            this.validateArgumentType(argArray[i], argTypeArray[i], customExceptionType, customExceptionMessage, customExceptionObject);
-        }
-    },
-
-    arrayContains: function (array, obj) {
-        var i = array.length;
-        while (i--) {
-            if (array[i] === obj) {
-                return true;
-            }
-        }
-        return false;
-    },
-
-    some: function (obj, predicate, scope) {
-        if (obj instanceof Array) {
-            return obj.some(predicate, scope);
-        }
-        else {
-            var values = self.map(obj, predicate, scope);
-
-            return self.reduce(values, function (some, value) {
-                return value ? value : some;
-            }, false);
-        }
-    },
-
-    count: function (obj) {
-        return self.sum(obj, function (total) {
-            return 1;
-        });
-    },
-
-    sum: function (obj, selector, scope) {
-        var values = self.map(obj, selector, scope);
-        return self.reduce(values, function (total, value) {
-            return total + value;
-        });
-    },
-
-    max: function (obj, selector, scope) {
-        var values = self.map(obj, selector, scope);
-        return self.reduce(values, function (max, value) {
-            return max < value ? value : max;
-        }, Number.MIN_VALUE);
-    },
-
-    min: function (obj, selector, scope) {
-        var values = self.map(obj, selector, scope);
-        return self.reduce(values, function (min, value) {
-            return min > value ? value : min;
-        }, Number.MAX_VALUE);
-    },
-
-    forEach: function (obj, action, scope) {
-        if (obj instanceof Array) {
-            return obj.forEach(action, scope);
-        }
-        else {
-            self.map(obj, action, scope);
-        }
-    },
-
-    filter: function (obj, predicate, scope) {
-        if (obj instanceof Array) {
-            return obj.filter(predicate, scope);
-        }
-        else {
-            var result = [];
-            self.forEach(obj, function (value, index) {
-                if (predicate.apply(scope, [value, index])) {
-                    result.push(value);
-                }
-
-            }, scope);
-
-            return result;
-        }
-    },
-
-    reduce: function (obj, func, init, scope) {
-        var i,
-            initial = init === undefined ? 0 : init,
-            result = initial;
-
-
-        if (obj instanceof Array) {
-            return obj.reduce(func, initial);
-        }
-        else if (obj instanceof NamedNodeMap) {
-            for (i = 0; i < obj.length; i++) {
-                result = func.apply(scope, [result, obj[i], i]);
-            }
-        }
-        else {
-            for (i in obj) {
-                if (obj.hasOwnProperty(i)) {
-                    result = func.apply(scope, [result, obj[i], i]);
-                }
-            }
-        }
-
-        return result;
-
-    },
-
-    map: function (obj, func, scope) {
-        var i,
-            returnVal = null,
-            result = [];
-
-        if (obj instanceof Array) {
-            return obj.map(func, scope);
-        }
-        else if (obj instanceof NamedNodeMap) {
-            for (i = 0; i < obj.length; i++) {
-                returnVal = func.apply(scope, [obj[i], i]);
-                result.push(returnVal);
-            }
-        }
-        else {
-            for (i in obj) {
-                if (obj.hasOwnProperty(i)) {
-                    returnVal = func.apply(scope, [obj[i], i]);
-                    result.push(returnVal);
-                }
-            }
-        }
-
-        return result;
-    },
-
-    regexSanitize: function (regexString) {
-        return regexString.replace("^", "\\^")
-                    .replace("$", "\\$")
-                    .replace("(", "\\(")
-                    .replace(")", "\\)")
-                    .replace("<", "\\<")
-                    .replace("[", "\\[")
-                    .replace("{", "\\{")
-                    .replace(/\\/, "\\\\")
-                    .replace("|", "\\|")
-                    .replace(">", "\\>")
-                    .replace(".", "\\.")
-                    .replace("*", "\\*")
-                    .replace("+", "\\+")
-                    .replace("?", "\\?");
-    },
-
-    find: function (comparison, collection, startInx, endInx, callback) {
-        var results = [],
-            compare = function (s, pattern) {
-
-                if (typeof(s) !== "string" || pattern === null) {
-                    return s === pattern;
-                }
-
-                var regex = pattern.replace(/\./g, "\\.")
-                                   .replace(/\^/g, "\\^")
-                                   .replace(/\*/g, ".*")
-                                   .replace(/\\\.\*/g, "\\*");
-
-                regex = "^".concat(regex, "$");
-
-                return !!s.match(new RegExp(regex, "i"));
-            };
-
-        self.forEach(collection, function (c) {
-            var match,
-                fail = false;
-
-            self.forEach(comparison, function (value, key) {
-                if (!fail && value !== undefined) {
-
-                    if (compare(c[key], value)) {
-                        match = c;
-                    }
-                    else {
-                        fail = true;
-                        match = null;
-                    }
-                }
-            });
-
-            if (match) {
-                results.push(match);
-            }
-        });
-
-        if (callback) {
-            if (startInx === undefined) {
-                startInx = 0;
-            }
-            if (endInx === undefined) {
-                endInx = results.length;
-            }
-            if (startInx === endInx) {
-                endInx = startInx + 1;
-            }
-
-            callback.apply(null, [results.slice(startInx, endInx)]);
-        }
-    },
-
-    mixin: function (mixin, to) {
-        Object.getOwnPropertyNames(mixin).forEach(function (prop) {
-            if (Object.hasOwnProperty.call(mixin, prop)) {
-                Object.defineProperty(to, prop, Object.getOwnPropertyDescriptor(mixin, prop));
-            }
-        });
-        return to;
-    },
-
-    copy: function (obj) {
-        var i,
-            newObj = (obj === null ? false : global.toString.call(obj) === "[object Array]") ? [] : {};
-
-        if (typeof obj === 'number' ||
-            typeof obj === 'string' ||
-            typeof obj === 'boolean' ||
-            obj === null ||
-            obj === undefined) {
-            return obj;
-        }
-
-        if (obj instanceof Date) {
-            return new Date(obj);
-        }
-
-        if (obj instanceof RegExp) {
-            return new RegExp(obj);
-        }
-
-        for (i in obj) {
-            if (obj.hasOwnProperty(i)) {
-                if (obj[i] && typeof obj[i] === "object") {
-                    if (obj[i] instanceof Date) {
-                        newObj[i] = obj[i];
-                    }
-                    else {
-                        newObj[i] = self.copy(obj[i]);
-                    }
-                }
-                else {
-                    newObj[i] = obj[i];
-                }
-            }
-        }
-
-        return newObj;
-    },
-
-    startsWith : function (str, substr) {
-        return str.indexOf(substr) === 0;
-    },
-
-    endsWith : function (str, substr) {
-        return str.indexOf(substr, str.length - substr.length) !== -1;
-    },
-
-    parseUri : function (str) {
-        var i, uri = {},
-            key = [ "source", "scheme", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor" ],
-            matcher = /^(?:([^:\/?#]+):)?(?:\/\/((?:(([^:@]*)(?::([^:@]*))?)?@)?([^:\/?#]*)(?::(\d*))?))?((((?:[^?#\/]*\/)*)([^?#]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(str);
-
-        for (i = key.length - 1; i >= 0; i--) {
-            uri[key[i]] = matcher[i] || "";
-        }
-
-        return uri;
-    },
-
-    // uri - output from parseUri
-    isAbsoluteURI : function (uri) {
-        if (uri && uri.source) {
-            return uri.relative !== uri.source;
-        }
-
-        return false;
-    },
-
-    fileNameToImageMIME : function (fileName) {
-
-        var extensionsToMIME = {},
-            ext;
-
-        extensionsToMIME.png = 'image/png';
-        extensionsToMIME.jpg = 'image/jpeg';
-        extensionsToMIME.jpe = 'image/jpeg';
-        extensionsToMIME.jpeg = 'image/jpeg';
-        extensionsToMIME.gif = 'image/gif';
-        extensionsToMIME.bmp = 'image/bmp';
-        extensionsToMIME.bm = 'image/bmp';
-        extensionsToMIME.svg = 'image/svg+xml';
-        extensionsToMIME.tif = 'image/tiff';
-        extensionsToMIME.tiff = 'image/tiff';
-
-        ext = fileName.split('.').pop();
-        return extensionsToMIME[ext];
-    },
-
-    isLocalURI : function (uri) {
-        return uri && uri.scheme && "local:///".indexOf(uri.scheme.toLowerCase()) !== -1;
-    },
-
-    isFileURI : function (uri) {
-        return uri && uri.scheme && "file://".indexOf(uri.scheme.toLowerCase()) !== -1;
-    },
-
-    isHttpURI : function (uri) {
-        return uri && uri.scheme && "http://".indexOf(uri.scheme.toLowerCase()) !== -1;
-    },
-
-    isHttpsURI : function (uri) {
-        return uri && uri.scheme && "https://".indexOf(uri.scheme.toLowerCase()) !== -1;
-    },
-
-    // Checks if the specified uri starts with 'data:'
-    isDataURI : function (uri) {
-        return uri && uri.scheme && "data:".indexOf(uri.scheme.toLowerCase()) !== -1;
-    },
-
-    performExec : function (featureId, property, args) {
-        var result;
-
-        window.webworks.exec(function (data, response) {
-            result = data;
-        }, function (data, response) {
-            throw data;
-        }, featureId, property, args, true);
-
-        return result;
-    },
-
-    inNode : function () {
-        return !!require.resolve;
-    },
-
-    requireWebview : function () {
-        return require("./webview");
-    },
-    convertDataToBinary : function (data, dataEncoding) {
-        var rawData,
-            uint8Array,
-            i;
-
-        if (data) {
-            if (dataEncoding.toLowerCase() === "base64") {
-                rawData = window.atob(data);
-            }
-            else {
-                rawData = data;
-            }
-
-            uint8Array = new Uint8Array(new ArrayBuffer(rawData.length));
-
-            for (i = 0; i < uint8Array.length; i++) {
-                uint8Array[i] = rawData.charCodeAt(i);
-            }
-
-            return uint8Array.buffer;
-        }
-    },
-    getBlobWithArrayBufferAsData : function (data, dataEncoding) {
-        var rawData,
-            blobBuilderObj = new window.WebKitBlobBuilder();
-        rawData = this.convertDataToBinary(data, dataEncoding);
-        blobBuilderObj.append(rawData);
-
-        return blobBuilderObj.getBlob("arraybuffer");
-    },
-    loadModule: function (module) {
-        return require(module);
-    },
-    loadExtensionModule: function (extBasename, path) {
-        var ext = require("./manifest")[extBasename];
-
-        if (ext) {
-            return require("../ext/" + ext.namespace + "/" + path);
-        } else {
-            return null;
-        }
-    }
-};
-
-});
-
-define('lib/exception', function (require, exports, module) {
-/*
- *  Copyright 2012 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.
- */
-
-module.exports = {
-
-    types: {
-        Application: "Application",
-        ArgumentLength: "ArgumentLength",
-        ArgumentType: "ArgumentType",
-        Argument: "Argument",
-        NotificationType: "NotificationType",
-        NotificationStateType: "NotificationStateType",
-        DomObjectNotFound: "DomObjectNotFound",
-        MethodNotImplemented: "MethodNotImplemented",
-        InvalidState: "InvalidState",
-        ApplicationState: "ApplicationState"
-    },
-
-    handle: function handle(exception, reThrow) {
-        reThrow = reThrow || false;
-
-        var eMsg = exception.message || "exception caught!",
-        msg = eMsg + "\n\n" + (exception.stack || "*no stack provided*") + "\n\n";
-
-        console.error(msg);
-
-        if (reThrow) {
-            throw exception;
-        }
-    },
-
-    raise: function raise(exceptionType, message, customExceptionObject) {
-        var obj = customExceptionObject || {
-                type: "",
-                message: "",
-
-                toString: function () {
-                    var result = this.name + ': "' + this.message + '"';
-
-                    if (this.stack) {
-                        result += "\n" + this.stack;
-                    }
-                    return result;
-                }
-            };
-
-        message = message || "";
-
-        obj.name = exceptionType;
-        obj.type = exceptionType;
-        // TODO: include the exception objects original message if exists
-        obj.message = message;
-
-        throw obj;
-    }
-};
-
-});
-define('lib/webworks-info', function (require, exports, module) {
-module.exports = {
-	hash: "f1d993c3aa16da2ba0def7a42b11b75b",
-	version: "1.0.1.8"
-};
-});
-/*
-* Copyright 2010-2012 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.
-*/
-(function () {
-    var _d = document.addEventListener,
-        _webworksReady = false,
-        _alreadyFired = false,
-        _listenerRegistered = false;
-
-    //Only fire the webworks event when both webworks is ready and a listener is registered
-    function fireWebworksReadyEvent() {
-        if (_listenerRegistered && _webworksReady && !_alreadyFired) {
-            _alreadyFired = true;
-            var evt = document.createEvent("Events");
-            evt.initEvent("webworksready", true, true);
-            document.dispatchEvent(evt);
-        }
-    }
-
-    //Trapping when users add listeners to the webworks ready event
-    //This way we can make sure not to fire the event before there is a listener
-    document.addEventListener = function (event, callback, capture) {
-        _d.call(document, event, callback, capture);
-        if (event.toLowerCase() === "webworksready") {
-            _listenerRegistered = true;
-            fireWebworksReadyEvent();
-        }
-    };
-
-
-    function createWebworksReady() {
-        function RemoteFunctionCall(functionUri) {
-            var paramString = "",
-                params = {},
-                isPost = false;
-
-            function composeUri() {
-                return "http://localhost:8472/" + functionUri;
-            }
-
-            function createXhrRequest(uri, isAsync) {
-                var request = new XMLHttpRequest(),
-                    paramCount = 1,
-                    param;
-
-                for (param in params) {
-                    if (params.hasOwnProperty(param)) {
-                        paramString += param + "=" + params[param] + "&";
-                        paramCount++;
-                    }
-                }
-
-                paramString = paramString.replace(/\&$/, "");
-
-                if (!isPost && paramString) {
-                    uri += "?" + paramString;
-                }
-
-                // TODO: make get/post
-                request.open("GET", uri, isAsync);
-                request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
-
-                return request;
-            }
-
-            this.addParam = function (name, value) {
-                params[name] = encodeURIComponent(JSON.stringify(value));
-            };
-
-            this.makeSyncCall = function (success, error) {
-                var requestUri = composeUri(),
-                    request = createXhrRequest(requestUri, false),
-                    response, 
-                    errored, 
-                    cb, 
-                    data;
-
-                request.send(isPost ? paramString : null);
-
-                response = JSON.parse(decodeURIComponent(request.responseText) || "null");
-                errored = response.code < 0;
-                cb = errored ? error : success;
-                data = errored ? response.msg : response.data;
-
-                if (cb) {
-                    cb(data, response);
-                }
-                else if (errored) {
-                    throw data;
-                }
-
-                return data;
-            };
-
-            this.makeAsyncCall = function (success, error) {
-                var requestUri = composeUri(),
-                    request = createXhrRequest(requestUri, true);
-
-                request.onreadystatechange = function () {
-                    if (request.readyState === 4 && request.status === 200) {
-                        var response = JSON.parse(decodeURIComponent(request.responseText) || "null"),
-                        cb = response.code < 0 ? error : success,
-                        data = response.code < 0 ? response.msg : response.data;
-
-                        return cb && cb(data, response);
-                    }
-                };
-
-                request.send(isPost ? paramString : null);
-            };
-        }
-
-        var builder,
-            request,
-            resp,
-            execFunc,
-            wwInfo = require('lib/webworks-info');
-        
-        //For users who wish to have a single source project across BB7 -> PB -> BB10 they will need to use webworks.js
-        //To aid in this, we will fire the webworksready event on these platforms as well
-        //If blackberry object already exists then we are in an older version of webworks
-        if (window.blackberry) {
-            _webworksReady = true;
-            fireWebworksReadyEvent();
-            return;
-        }
-
-        // Build out the blackberry namespace based on the APIs desired in the config.xml
-        builder = require('builder');
-        
-        request = new XMLHttpRequest();
-        request.open("GET", "http://localhost:8472/extensions/get/?hash=" + wwInfo.hash + "&version=" + wwInfo.version, true);
-
-        request.onreadystatechange = function () {
-            if (request.readyState === 4) {
-                if (request.status === 412) {
-                    //Application Webworks.js does not match framework, display error to user.
-                    resp = JSON.parse(request.responseText);
-                    alert(resp.msg);
-                } else if (request.status === 200) {
-                    resp = JSON.parse(decodeURIComponent(request.responseText));
-                    builder.build(resp.data).into(window);
-                    //At this point all of the APIs should be built into the window object
-                    //Fire the webworks ready event
-                    _webworksReady = true;
-                    fireWebworksReadyEvent();
-                }
-            }
-        };
-        request.send(null);
-
-        execFunc = function (success, fail, service, action, args, sync) {
-            var uri = service + "/" + action,
-                request = new RemoteFunctionCall(uri),
-                name;
-
-            for (name in args) {
-                if (Object.hasOwnProperty.call(args, name)) {
-                    request.addParam(name, args[name]);
-                }
-            }
-
-            request[sync ? "makeSyncCall" : "makeAsyncCall"](success, fail);
-        };
-
-        window.webworks = {
-            exec: execFunc,
-            execSync: function (service, action, args) {
-                var result;
-
-                execFunc(function (data, response) {
-                    result = data;
-                }, function (data, response) {
-                    throw data;
-                }, service, action, args, true);
-
-                return result;
-            },
-            execAsync: function (service, action, args) {
-                var result;
-
-                execFunc(function (data, response) {
-                    result = data;
-                }, function (data, response) {
-                    throw data;
-                }, service, action, args, false);
-
-                return result;
-            },
-            successCallback: function (id, args) {
-                //HACK: this will live later
-                throw "not implemented";
-            },
-            errorCallback: function (id, args) {
-                //HACK: this will live later
-                throw "not implemented";
-            },
-            defineReadOnlyField: function (obj, field, value) {
-                Object.defineProperty(obj, field, {
-                    "value": value,
-                    "writable": false
-                });
-            },
-            event: require("event")
-        };
-    }
-    //Only start building window.webworks once the DOMContent is loaded
-    document.addEventListener('DOMContentLoaded', createWebworksReady, false);
-    //If the DOM Content has already been loaded then create window.webworks immediately
-    if (document.readyState === 'complete') {
-        createWebworksReady();
-    } 
-}());
-
-
-}());
\ No newline at end of file