mirror of
https://github.com/lalbornoz/roar.git
synced 2024-11-27 01:06:38 +00:00
Bump to v1.0.5.
This commit is contained in:
parent
a7f26952c0
commit
57a11b7a4f
@ -1,5 +1,5 @@
|
|||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<widget id="com.lalbornoz.asciiblaster" version="1.0.4" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
<widget id="com.lalbornoz.asciiblaster" version="1.0.5" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
|
||||||
<author email="lucio@lucioillanes.de" href="https://github.com/lalbornoz/asciiblaster#readme">
|
<author email="lucio@lucioillanes.de" href="https://github.com/lalbornoz/asciiblaster#readme">
|
||||||
Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>, based on work by JOLLO NET NA
|
Lucio Andrés Illanes Albornoz <lucio@lucioillanes.de>, based on work by JOLLO NET NA
|
||||||
</author>
|
</author>
|
||||||
|
2
asciiblaster-cordoba/package-lock.json
generated
2
asciiblaster-cordoba/package-lock.json
generated
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "asciiblaster-cordoba",
|
"name": "asciiblaster-cordoba",
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"lockfileVersion": 1,
|
"lockfileVersion": 1,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
@ -30,5 +30,5 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"version": "1.0.4"
|
"version": "1.0.5"
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,57 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
|
||||||
|
RELEASE_DEPS="rsync sed";
|
||||||
|
|
||||||
|
rc() {
|
||||||
|
local _cmd="${1}"; shift;
|
||||||
|
printf "%s >>> %s %s\n" "$(date +"%d-%^b-%Y %H:%M:%S")" "${_cmd}" "${*}";
|
||||||
|
"${_cmd}" "${@}";
|
||||||
|
};
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
echo "usage: ${0} [-h] old_version new_version" >&2;
|
||||||
|
echo " -h.........: show this screen" >&2;
|
||||||
|
};
|
||||||
|
|
||||||
|
main() {
|
||||||
|
local _opt="" _version_new="" _version_old="";
|
||||||
|
while getopts hv _opt; do
|
||||||
|
case "${_opt}" in
|
||||||
|
h) usage; exit 0; ;;
|
||||||
|
*) usage; exit 1; ;;
|
||||||
|
esac; done;
|
||||||
|
shift $((${OPTIND}-1));
|
||||||
|
if [ -z "${1}" ]; then
|
||||||
|
echo "error: empty or missing old version number argument" >&2; usage; exit 1;
|
||||||
|
elif [ -z "${2}" ]; then
|
||||||
|
echo "error: empty or missing new version number argument" >&2; usage; exit 1;
|
||||||
|
else
|
||||||
|
_version_old="${1}"; _version_new="${2}";
|
||||||
|
fi;
|
||||||
|
for _cmd in ${RELEASE_DEPS_CMD}; do
|
||||||
|
if ! which "${_cmd}" >/dev/null; then
|
||||||
|
echo "error: missing prerequisite command \`${_cmd}'";
|
||||||
|
exit 1;
|
||||||
|
fi;
|
||||||
|
done;
|
||||||
|
rc sed -i"" '/"version":/s/\("version":\s*\)"'"${_version_old}"'"/\1"'"${_version_new}"'"/' \
|
||||||
|
asciiblaster-cordoba/package.json \
|
||||||
|
asciiblaster-cordoba/package-lock.json \
|
||||||
|
asciiblaster-nw/package.json \
|
||||||
|
asciiblaster-nw/package-lock.json;
|
||||||
|
rc sed -i"" '/version="/s/\(version=\)"'"${_version_old}"'"/\1"'"${_version_new}"'"/' \
|
||||||
|
asciiblaster-cordoba/config.xml;
|
||||||
|
rc sed -i"" '/<title>[^<]\+ v/s/\(<title>[^<]\+ v\)'"${_version_old}"'\(<\)/\1'"${_version_new}"'\2/' \
|
||||||
|
index.html;
|
||||||
|
rc rsync -aiLPv --delete \
|
||||||
|
asciiblaster-cordoba/www/ \
|
||||||
|
asciiblaster-cordoba/platforms/android/app/src/main/assets/www/;
|
||||||
|
rc git add asciiblaster-cordoba/platforms/android/app/src/main/assets/www;
|
||||||
|
rc git commit -avm "Bump to v${_version_new}.";
|
||||||
|
};
|
||||||
|
|
||||||
|
set -o errexit -o noglob;
|
||||||
|
main "${@}";
|
||||||
|
|
||||||
|
# vim:foldmethod=marker sw=8 ts=8 tw=120
|
@ -1,36 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exports the ExposedJsApi.java object if available, otherwise exports the PromptBasedNativeApi.
|
|
||||||
*/
|
|
||||||
|
|
||||||
var nativeApi = this._cordovaNative || require('cordova/android/promptbasednativeapi');
|
|
||||||
var currentApi = nativeApi;
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
get: function() { return currentApi; },
|
|
||||||
setPreferPrompt: function(value) {
|
|
||||||
currentApi = value ? require('cordova/android/promptbasednativeapi') : nativeApi;
|
|
||||||
},
|
|
||||||
// Used only by tests.
|
|
||||||
set: function(value) {
|
|
||||||
currentApi = value;
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,35 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements the API of ExposedJsApi.java, but uses prompt() to communicate.
|
|
||||||
* This is used pre-JellyBean, where addJavascriptInterface() is disabled.
|
|
||||||
*/
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
exec: function(bridgeSecret, service, action, callbackId, argsJson) {
|
|
||||||
return prompt(argsJson, 'gap:'+JSON.stringify([bridgeSecret, service, action, callbackId]));
|
|
||||||
},
|
|
||||||
setNativeToJsBridgeMode: function(bridgeSecret, value) {
|
|
||||||
prompt(value, 'gap_bridge_mode:' + bridgeSecret);
|
|
||||||
},
|
|
||||||
retrieveJsMessages: function(bridgeSecret, fromOnlineEvent) {
|
|
||||||
return prompt(+fromOnlineEvent, 'gap_poll:' + bridgeSecret);
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,286 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Execute a cordova command. It is up to the native side whether this action
|
|
||||||
* is synchronous or asynchronous. The native side can return:
|
|
||||||
* Synchronous: PluginResult object as a JSON string
|
|
||||||
* Asynchronous: Empty string ""
|
|
||||||
* If async, the native side will cordova.callbackSuccess or cordova.callbackError,
|
|
||||||
* depending upon the result of the action.
|
|
||||||
*
|
|
||||||
* @param {Function} success The success callback
|
|
||||||
* @param {Function} fail The fail callback
|
|
||||||
* @param {String} service The name of the service to use
|
|
||||||
* @param {String} action Action to be run in cordova
|
|
||||||
* @param {String[]} [args] Zero or more arguments to pass to the method
|
|
||||||
*/
|
|
||||||
var cordova = require('cordova'),
|
|
||||||
nativeApiProvider = require('cordova/android/nativeapiprovider'),
|
|
||||||
utils = require('cordova/utils'),
|
|
||||||
base64 = require('cordova/base64'),
|
|
||||||
channel = require('cordova/channel'),
|
|
||||||
jsToNativeModes = {
|
|
||||||
PROMPT: 0,
|
|
||||||
JS_OBJECT: 1
|
|
||||||
},
|
|
||||||
nativeToJsModes = {
|
|
||||||
// Polls for messages using the JS->Native bridge.
|
|
||||||
POLLING: 0,
|
|
||||||
// For LOAD_URL to be viable, it would need to have a work-around for
|
|
||||||
// the bug where the soft-keyboard gets dismissed when a message is sent.
|
|
||||||
LOAD_URL: 1,
|
|
||||||
// For the ONLINE_EVENT to be viable, it would need to intercept all event
|
|
||||||
// listeners (both through addEventListener and window.ononline) as well
|
|
||||||
// as set the navigator property itself.
|
|
||||||
ONLINE_EVENT: 2,
|
|
||||||
EVAL_BRIDGE: 3
|
|
||||||
},
|
|
||||||
jsToNativeBridgeMode, // Set lazily.
|
|
||||||
nativeToJsBridgeMode = nativeToJsModes.EVAL_BRIDGE,
|
|
||||||
pollEnabled = false,
|
|
||||||
bridgeSecret = -1;
|
|
||||||
|
|
||||||
var messagesFromNative = [];
|
|
||||||
var isProcessing = false;
|
|
||||||
var resolvedPromise = typeof Promise == 'undefined' ? null : Promise.resolve();
|
|
||||||
var nextTick = resolvedPromise ? function(fn) { resolvedPromise.then(fn); } : function(fn) { setTimeout(fn); };
|
|
||||||
|
|
||||||
function androidExec(success, fail, service, action, args) {
|
|
||||||
if (bridgeSecret < 0) {
|
|
||||||
// If we ever catch this firing, we'll need to queue up exec()s
|
|
||||||
// and fire them once we get a secret. For now, I don't think
|
|
||||||
// it's possible for exec() to be called since plugins are parsed but
|
|
||||||
// not run until until after onNativeReady.
|
|
||||||
throw new Error('exec() called without bridgeSecret');
|
|
||||||
}
|
|
||||||
// Set default bridge modes if they have not already been set.
|
|
||||||
// By default, we use the failsafe, since addJavascriptInterface breaks too often
|
|
||||||
if (jsToNativeBridgeMode === undefined) {
|
|
||||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If args is not provided, default to an empty array
|
|
||||||
args = args || [];
|
|
||||||
|
|
||||||
// Process any ArrayBuffers in the args into a string.
|
|
||||||
for (var i = 0; i < args.length; i++) {
|
|
||||||
if (utils.typeName(args[i]) == 'ArrayBuffer') {
|
|
||||||
args[i] = base64.fromArrayBuffer(args[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var callbackId = service + cordova.callbackId++,
|
|
||||||
argsJson = JSON.stringify(args);
|
|
||||||
if (success || fail) {
|
|
||||||
cordova.callbacks[callbackId] = {success:success, fail:fail};
|
|
||||||
}
|
|
||||||
|
|
||||||
var msgs = nativeApiProvider.get().exec(bridgeSecret, service, action, callbackId, argsJson);
|
|
||||||
// If argsJson was received by Java as null, try again with the PROMPT bridge mode.
|
|
||||||
// This happens in rare circumstances, such as when certain Unicode characters are passed over the bridge on a Galaxy S2. See CB-2666.
|
|
||||||
if (jsToNativeBridgeMode == jsToNativeModes.JS_OBJECT && msgs === "@Null arguments.") {
|
|
||||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.PROMPT);
|
|
||||||
androidExec(success, fail, service, action, args);
|
|
||||||
androidExec.setJsToNativeBridgeMode(jsToNativeModes.JS_OBJECT);
|
|
||||||
} else if (msgs) {
|
|
||||||
messagesFromNative.push(msgs);
|
|
||||||
// Always process async to avoid exceptions messing up stack.
|
|
||||||
nextTick(processMessages);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
androidExec.init = function() {
|
|
||||||
bridgeSecret = +prompt('', 'gap_init:' + nativeToJsBridgeMode);
|
|
||||||
channel.onNativeReady.fire();
|
|
||||||
};
|
|
||||||
|
|
||||||
function pollOnceFromOnlineEvent() {
|
|
||||||
pollOnce(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
function pollOnce(opt_fromOnlineEvent) {
|
|
||||||
if (bridgeSecret < 0) {
|
|
||||||
// This can happen when the NativeToJsMessageQueue resets the online state on page transitions.
|
|
||||||
// We know there's nothing to retrieve, so no need to poll.
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var msgs = nativeApiProvider.get().retrieveJsMessages(bridgeSecret, !!opt_fromOnlineEvent);
|
|
||||||
if (msgs) {
|
|
||||||
messagesFromNative.push(msgs);
|
|
||||||
// Process sync since we know we're already top-of-stack.
|
|
||||||
processMessages();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function pollingTimerFunc() {
|
|
||||||
if (pollEnabled) {
|
|
||||||
pollOnce();
|
|
||||||
setTimeout(pollingTimerFunc, 50);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function hookOnlineApis() {
|
|
||||||
function proxyEvent(e) {
|
|
||||||
cordova.fireWindowEvent(e.type);
|
|
||||||
}
|
|
||||||
// The network module takes care of firing online and offline events.
|
|
||||||
// It currently fires them only on document though, so we bridge them
|
|
||||||
// to window here (while first listening for exec()-releated online/offline
|
|
||||||
// events).
|
|
||||||
window.addEventListener('online', pollOnceFromOnlineEvent, false);
|
|
||||||
window.addEventListener('offline', pollOnceFromOnlineEvent, false);
|
|
||||||
cordova.addWindowEventHandler('online');
|
|
||||||
cordova.addWindowEventHandler('offline');
|
|
||||||
document.addEventListener('online', proxyEvent, false);
|
|
||||||
document.addEventListener('offline', proxyEvent, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
hookOnlineApis();
|
|
||||||
|
|
||||||
androidExec.jsToNativeModes = jsToNativeModes;
|
|
||||||
androidExec.nativeToJsModes = nativeToJsModes;
|
|
||||||
|
|
||||||
androidExec.setJsToNativeBridgeMode = function(mode) {
|
|
||||||
if (mode == jsToNativeModes.JS_OBJECT && !window._cordovaNative) {
|
|
||||||
mode = jsToNativeModes.PROMPT;
|
|
||||||
}
|
|
||||||
nativeApiProvider.setPreferPrompt(mode == jsToNativeModes.PROMPT);
|
|
||||||
jsToNativeBridgeMode = mode;
|
|
||||||
};
|
|
||||||
|
|
||||||
androidExec.setNativeToJsBridgeMode = function(mode) {
|
|
||||||
if (mode == nativeToJsBridgeMode) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (nativeToJsBridgeMode == nativeToJsModes.POLLING) {
|
|
||||||
pollEnabled = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
nativeToJsBridgeMode = mode;
|
|
||||||
// Tell the native side to switch modes.
|
|
||||||
// Otherwise, it will be set by androidExec.init()
|
|
||||||
if (bridgeSecret >= 0) {
|
|
||||||
nativeApiProvider.get().setNativeToJsBridgeMode(bridgeSecret, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == nativeToJsModes.POLLING) {
|
|
||||||
pollEnabled = true;
|
|
||||||
setTimeout(pollingTimerFunc, 1);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function buildPayload(payload, message) {
|
|
||||||
var payloadKind = message.charAt(0);
|
|
||||||
if (payloadKind == 's') {
|
|
||||||
payload.push(message.slice(1));
|
|
||||||
} else if (payloadKind == 't') {
|
|
||||||
payload.push(true);
|
|
||||||
} else if (payloadKind == 'f') {
|
|
||||||
payload.push(false);
|
|
||||||
} else if (payloadKind == 'N') {
|
|
||||||
payload.push(null);
|
|
||||||
} else if (payloadKind == 'n') {
|
|
||||||
payload.push(+message.slice(1));
|
|
||||||
} else if (payloadKind == 'A') {
|
|
||||||
var data = message.slice(1);
|
|
||||||
payload.push(base64.toArrayBuffer(data));
|
|
||||||
} else if (payloadKind == 'S') {
|
|
||||||
payload.push(window.atob(message.slice(1)));
|
|
||||||
} else if (payloadKind == 'M') {
|
|
||||||
var multipartMessages = message.slice(1);
|
|
||||||
while (multipartMessages !== "") {
|
|
||||||
var spaceIdx = multipartMessages.indexOf(' ');
|
|
||||||
var msgLen = +multipartMessages.slice(0, spaceIdx);
|
|
||||||
var multipartMessage = multipartMessages.substr(spaceIdx + 1, msgLen);
|
|
||||||
multipartMessages = multipartMessages.slice(spaceIdx + msgLen + 1);
|
|
||||||
buildPayload(payload, multipartMessage);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
payload.push(JSON.parse(message));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Processes a single message, as encoded by NativeToJsMessageQueue.java.
|
|
||||||
function processMessage(message) {
|
|
||||||
var firstChar = message.charAt(0);
|
|
||||||
if (firstChar == 'J') {
|
|
||||||
// This is deprecated on the .java side. It doesn't work with CSP enabled.
|
|
||||||
eval(message.slice(1));
|
|
||||||
} else if (firstChar == 'S' || firstChar == 'F') {
|
|
||||||
var success = firstChar == 'S';
|
|
||||||
var keepCallback = message.charAt(1) == '1';
|
|
||||||
var spaceIdx = message.indexOf(' ', 2);
|
|
||||||
var status = +message.slice(2, spaceIdx);
|
|
||||||
var nextSpaceIdx = message.indexOf(' ', spaceIdx + 1);
|
|
||||||
var callbackId = message.slice(spaceIdx + 1, nextSpaceIdx);
|
|
||||||
var payloadMessage = message.slice(nextSpaceIdx + 1);
|
|
||||||
var payload = [];
|
|
||||||
buildPayload(payload, payloadMessage);
|
|
||||||
cordova.callbackFromNative(callbackId, success, status, payload, keepCallback);
|
|
||||||
} else {
|
|
||||||
console.log("processMessage failed: invalid message: " + JSON.stringify(message));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function processMessages() {
|
|
||||||
// Check for the reentrant case.
|
|
||||||
if (isProcessing) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (messagesFromNative.length === 0) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
isProcessing = true;
|
|
||||||
try {
|
|
||||||
var msg = popMessageFromQueue();
|
|
||||||
// The Java side can send a * message to indicate that it
|
|
||||||
// still has messages waiting to be retrieved.
|
|
||||||
if (msg == '*' && messagesFromNative.length === 0) {
|
|
||||||
nextTick(pollOnce);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
processMessage(msg);
|
|
||||||
} finally {
|
|
||||||
isProcessing = false;
|
|
||||||
if (messagesFromNative.length > 0) {
|
|
||||||
nextTick(processMessages);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function popMessageFromQueue() {
|
|
||||||
var messageBatch = messagesFromNative.shift();
|
|
||||||
if (messageBatch == '*') {
|
|
||||||
return '*';
|
|
||||||
}
|
|
||||||
|
|
||||||
var spaceIdx = messageBatch.indexOf(' ');
|
|
||||||
var msgLen = +messageBatch.slice(0, spaceIdx);
|
|
||||||
var message = messageBatch.substr(spaceIdx + 1, msgLen);
|
|
||||||
messageBatch = messageBatch.slice(spaceIdx + msgLen + 1);
|
|
||||||
if (messageBatch) {
|
|
||||||
messagesFromNative.unshift(messageBatch);
|
|
||||||
}
|
|
||||||
return message;
|
|
||||||
}
|
|
||||||
|
|
||||||
module.exports = androidExec;
|
|
@ -1,125 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
// The last resume event that was received that had the result of a plugin call.
|
|
||||||
var lastResumeEvent = null;
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
id: 'android',
|
|
||||||
bootstrap: function() {
|
|
||||||
var channel = require('cordova/channel'),
|
|
||||||
cordova = require('cordova'),
|
|
||||||
exec = require('cordova/exec'),
|
|
||||||
modulemapper = require('cordova/modulemapper');
|
|
||||||
|
|
||||||
// Get the shared secret needed to use the bridge.
|
|
||||||
exec.init();
|
|
||||||
|
|
||||||
// TODO: Extract this as a proper plugin.
|
|
||||||
modulemapper.clobbers('cordova/plugin/android/app', 'navigator.app');
|
|
||||||
|
|
||||||
var APP_PLUGIN_NAME = Number(cordova.platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
|
||||||
|
|
||||||
// Inject a listener for the backbutton on the document.
|
|
||||||
var backButtonChannel = cordova.addDocumentEventHandler('backbutton');
|
|
||||||
backButtonChannel.onHasSubscribersChange = function() {
|
|
||||||
// If we just attached the first handler or detached the last handler,
|
|
||||||
// let native know we need to override the back button.
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [this.numHandlers == 1]);
|
|
||||||
};
|
|
||||||
|
|
||||||
// Add hardware MENU and SEARCH button handlers
|
|
||||||
cordova.addDocumentEventHandler('menubutton');
|
|
||||||
cordova.addDocumentEventHandler('searchbutton');
|
|
||||||
|
|
||||||
function bindButtonChannel(buttonName) {
|
|
||||||
// generic button bind used for volumeup/volumedown buttons
|
|
||||||
var volumeButtonChannel = cordova.addDocumentEventHandler(buttonName + 'button');
|
|
||||||
volumeButtonChannel.onHasSubscribersChange = function() {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [buttonName, this.numHandlers == 1]);
|
|
||||||
};
|
|
||||||
}
|
|
||||||
// Inject a listener for the volume buttons on the document.
|
|
||||||
bindButtonChannel('volumeup');
|
|
||||||
bindButtonChannel('volumedown');
|
|
||||||
|
|
||||||
// The resume event is not "sticky", but it is possible that the event
|
|
||||||
// will contain the result of a plugin call. We need to ensure that the
|
|
||||||
// plugin result is delivered even after the event is fired (CB-10498)
|
|
||||||
var cordovaAddEventListener = document.addEventListener;
|
|
||||||
|
|
||||||
document.addEventListener = function(evt, handler, capture) {
|
|
||||||
cordovaAddEventListener(evt, handler, capture);
|
|
||||||
|
|
||||||
if (evt === 'resume' && lastResumeEvent) {
|
|
||||||
handler(lastResumeEvent);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
// Let native code know we are all done on the JS side.
|
|
||||||
// Native code will then un-hide the WebView.
|
|
||||||
channel.onCordovaReady.subscribe(function() {
|
|
||||||
exec(onMessageFromNative, null, APP_PLUGIN_NAME, 'messageChannel', []);
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "show", []);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
function onMessageFromNative(msg) {
|
|
||||||
var cordova = require('cordova');
|
|
||||||
var action = msg.action;
|
|
||||||
|
|
||||||
switch (action)
|
|
||||||
{
|
|
||||||
// Button events
|
|
||||||
case 'backbutton':
|
|
||||||
case 'menubutton':
|
|
||||||
case 'searchbutton':
|
|
||||||
// App life cycle events
|
|
||||||
case 'pause':
|
|
||||||
// Volume events
|
|
||||||
case 'volumedownbutton':
|
|
||||||
case 'volumeupbutton':
|
|
||||||
cordova.fireDocumentEvent(action);
|
|
||||||
break;
|
|
||||||
case 'resume':
|
|
||||||
if(arguments.length > 1 && msg.pendingResult) {
|
|
||||||
if(arguments.length === 2) {
|
|
||||||
msg.pendingResult.result = arguments[1];
|
|
||||||
} else {
|
|
||||||
// The plugin returned a multipart message
|
|
||||||
var res = [];
|
|
||||||
for(var i = 1; i < arguments.length; i++) {
|
|
||||||
res.push(arguments[i]);
|
|
||||||
}
|
|
||||||
msg.pendingResult.result = res;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Save the plugin result so that it can be delivered to the js
|
|
||||||
// even if they miss the initial firing of the event
|
|
||||||
lastResumeEvent = msg;
|
|
||||||
}
|
|
||||||
cordova.fireDocumentEvent(action, msg);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
throw new Error('Unknown event action ' + action);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
/*
|
|
||||||
*
|
|
||||||
* 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.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
var exec = require('cordova/exec');
|
|
||||||
var APP_PLUGIN_NAME = Number(require('cordova').platformVersion.split('.')[0]) >= 4 ? 'CoreAndroid' : 'App';
|
|
||||||
|
|
||||||
module.exports = {
|
|
||||||
/**
|
|
||||||
* Clear the resource cache.
|
|
||||||
*/
|
|
||||||
clearCache:function() {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "clearCache", []);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load the url into the webview or into new browser instance.
|
|
||||||
*
|
|
||||||
* @param url The URL to load
|
|
||||||
* @param props Properties that can be passed in to the activity:
|
|
||||||
* wait: int => wait msec before loading URL
|
|
||||||
* loadingDialog: "Title,Message" => display a native loading dialog
|
|
||||||
* loadUrlTimeoutValue: int => time in msec to wait before triggering a timeout error
|
|
||||||
* clearHistory: boolean => clear webview history (default=false)
|
|
||||||
* openExternal: boolean => open in a new browser (default=false)
|
|
||||||
*
|
|
||||||
* Example:
|
|
||||||
* navigator.app.loadUrl("http://server/myapp/index.html", {wait:2000, loadingDialog:"Wait,Loading App", loadUrlTimeoutValue: 60000});
|
|
||||||
*/
|
|
||||||
loadUrl:function(url, props) {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "loadUrl", [url, props]);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Cancel loadUrl that is waiting to be loaded.
|
|
||||||
*/
|
|
||||||
cancelLoadUrl:function() {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "cancelLoadUrl", []);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Clear web history in this web view.
|
|
||||||
* Instead of BACK button loading the previous web page, it will exit the app.
|
|
||||||
*/
|
|
||||||
clearHistory:function() {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "clearHistory", []);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Go to previous page displayed.
|
|
||||||
* This is the same as pressing the backbutton on Android device.
|
|
||||||
*/
|
|
||||||
backHistory:function() {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "backHistory", []);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override the default behavior of the Android back button.
|
|
||||||
* If overridden, when the back button is pressed, the "backKeyDown" JavaScript event will be fired.
|
|
||||||
*
|
|
||||||
* Note: The user should not have to call this method. Instead, when the user
|
|
||||||
* registers for the "backbutton" event, this is automatically done.
|
|
||||||
*
|
|
||||||
* @param override T=override, F=cancel override
|
|
||||||
*/
|
|
||||||
overrideBackbutton:function(override) {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "overrideBackbutton", [override]);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override the default behavior of the Android volume button.
|
|
||||||
* If overridden, when the volume button is pressed, the "volume[up|down]button"
|
|
||||||
* JavaScript event will be fired.
|
|
||||||
*
|
|
||||||
* Note: The user should not have to call this method. Instead, when the user
|
|
||||||
* registers for the "volume[up|down]button" event, this is automatically done.
|
|
||||||
*
|
|
||||||
* @param button volumeup, volumedown
|
|
||||||
* @param override T=override, F=cancel override
|
|
||||||
*/
|
|
||||||
overrideButton:function(button, override) {
|
|
||||||
exec(null, null, APP_PLUGIN_NAME, "overrideButton", [button, override]);
|
|
||||||
},
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Exit and terminate the application.
|
|
||||||
*/
|
|
||||||
exitApp:function() {
|
|
||||||
return exec(null, null, APP_PLUGIN_NAME, "exitApp", []);
|
|
||||||
}
|
|
||||||
};
|
|
File diff suppressed because it is too large
Load Diff
@ -1,9 +0,0 @@
|
|||||||
cordova.define('cordova/plugin_list', function(require, exports, module) {
|
|
||||||
module.exports = [];
|
|
||||||
module.exports.metadata =
|
|
||||||
// TOP OF METADATA
|
|
||||||
{
|
|
||||||
"cordova-plugin-whitelist": "1.3.3"
|
|
||||||
};
|
|
||||||
// BOTTOM OF METADATA
|
|
||||||
});
|
|
@ -2,7 +2,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>asciiblaster v1.0.4</title>
|
<title>asciiblaster v1.0.5</title>
|
||||||
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes" />
|
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes" />
|
||||||
<link rel="stylesheet" href="assets/css/sally.css" type="text/css" charset="utf-8" />
|
<link rel="stylesheet" href="assets/css/sally.css" type="text/css" charset="utf-8" />
|
||||||
<link rel="stylesheet" href="assets/css/ak.css" type="text/css" charset="utf-8" />
|
<link rel="stylesheet" href="assets/css/ak.css" type="text/css" charset="utf-8" />
|
||||||
|
2
asciiblaster-nw/package-lock.json
generated
2
asciiblaster-nw/package-lock.json
generated
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "asciiblaster",
|
"name": "asciiblaster",
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"lockfileVersion": 1
|
"lockfileVersion": 1
|
||||||
}
|
}
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
},
|
},
|
||||||
"version": "1.0.4",
|
"version": "1.0.5",
|
||||||
"window": {
|
"window": {
|
||||||
"title": "asciiblaster (standalone NW app)",
|
"title": "asciiblaster (standalone NW app)",
|
||||||
"toolbar": true,
|
"toolbar": true,
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>asciiblaster v1.0.4</title>
|
<title>asciiblaster v1.0.5</title>
|
||||||
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes" />
|
<meta name="viewport" content="width=device-width, maximum-scale=1.0, user-scalable=yes" />
|
||||||
<link rel="stylesheet" href="assets/css/sally.css" type="text/css" charset="utf-8" />
|
<link rel="stylesheet" href="assets/css/sally.css" type="text/css" charset="utf-8" />
|
||||||
<link rel="stylesheet" href="assets/css/ak.css" type="text/css" charset="utf-8" />
|
<link rel="stylesheet" href="assets/css/ak.css" type="text/css" charset="utf-8" />
|
||||||
|
Loading…
Reference in New Issue
Block a user