| /* |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you 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 = { |
| id: "blackberry10", |
| bootstrap: function() { |
| var cordova = require('cordova'), |
| channel = require('cordova/channel'), |
| addDocumentEventListener = document.addEventListener, |
| webworksReady = false, |
| alreadyFired = false, |
| listenerRegistered = false; |
| |
| //override to pass online/offline events to window |
| document.addEventListener = function (type) { |
| if (type === "online" || type === "offline") { |
| window.addEventListener.apply(window, arguments); |
| } else { |
| addDocumentEventListener.apply(document, arguments); |
| //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 |
| if (type.toLowerCase() === 'webworksready') { |
| listenerRegistered = true; |
| fireWebworksReadyEvent(); |
| } |
| } |
| }; |
| |
| channel.onDOMContentLoaded.subscribe(function () { |
| document.addEventListener("webworksready", function () { |
| channel.onNativeReady.fire(); |
| }); |
| }); |
| |
| channel.onPluginsReady.subscribe(function () { |
| webworksReady = true; |
| fireWebworksReadyEvent(); |
| }); |
| |
| |
| //Only fire the webworks event when both webworks is ready and a listener is registered |
| function fireWebworksReadyEvent() { |
| var evt; |
| if (listenerRegistered && webworksReady && !alreadyFired) { |
| alreadyFired = true; |
| evt = document.createEvent('Events'); |
| evt.initEvent('webworksready', true, true); |
| document.dispatchEvent(evt); |
| } |
| } |
| |
| function RemoteFunctionCall(functionUri) { |
| var params = {}; |
| |
| function composeUri() { |
| return "http://localhost:8472/" + functionUri; |
| } |
| |
| function createXhrRequest(uri, isAsync) { |
| var request = new XMLHttpRequest(); |
| request.open("POST", uri, isAsync); |
| request.setRequestHeader("Content-Type", "application/json"); |
| 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(JSON.stringify(params)); |
| response = JSON.parse(decodeURIComponent(request.responseText) || "null"); |
| return response; |
| }; |
| } |
| |
| window.webworks = { |
| exec: function (success, fail, service, action, args) { |
| var uri = service + "/" + action, |
| request = new RemoteFunctionCall(uri), |
| callbackId = service + cordova.callbackId++, |
| response, |
| name, |
| didSucceed; |
| |
| for (name in args) { |
| if (Object.hasOwnProperty.call(args, name)) { |
| request.addParam(name, args[name]); |
| } |
| } |
| |
| cordova.callbacks[callbackId] = {success:success, fail:fail}; |
| request.addParam("callbackId", callbackId); |
| |
| response = request.makeSyncCall(); |
| |
| //Old WebWorks Extension success |
| if (response.code === 42) { |
| if (success) { |
| success(response.data, response); |
| } |
| delete cordova.callbacks[callbackId]; |
| } else if (response.code < 0) { |
| if (fail) { |
| fail(response.msg, response); |
| } |
| delete cordova.callbacks[callbackId]; |
| } else { |
| didSucceed = response.code === cordova.callbackStatus.OK || response.code === cordova.callbackStatus.NO_RESULT; |
| cordova.callbackFromNative(callbackId, didSucceed, response.code, [ didSucceed ? response.data : response.msg ], !!response.keepCallback); |
| } |
| }, |
| defineReadOnlyField: function (obj, field, value) { |
| Object.defineProperty(obj, field, { |
| "value": value, |
| "writable": false |
| }); |
| } |
| }; |
| } |
| }; |