321 lines
7.5 KiB
JavaScript
321 lines
7.5 KiB
JavaScript
|
status.command({
|
||
|
name: "location",
|
||
|
description: "Send location",
|
||
|
color: "#9a5dcf",
|
||
|
preview: function (params) {
|
||
|
var text = status.components.text(
|
||
|
{
|
||
|
style: {
|
||
|
marginTop: 5,
|
||
|
marginHorizontal: 0,
|
||
|
fontSize: 14,
|
||
|
fontFamily: "font",
|
||
|
color: "black"
|
||
|
}
|
||
|
}, params.value);
|
||
|
var uri = "https://maps.googleapis.com/maps/api/staticmap?center="
|
||
|
+ params.value
|
||
|
+ "&size=100x100&maptype=roadmap&key=AIzaSyBNsj1qoQEYPb3IllmWMAscuXW0eeuYqAA&language=en"
|
||
|
+ "&markers=size:mid%7Ccolor:0xff0000%7Clabel:%7C"
|
||
|
+ params.value;
|
||
|
|
||
|
var image = status.components.image(
|
||
|
{
|
||
|
source: {uri: uri},
|
||
|
style: {
|
||
|
width: 100,
|
||
|
height: 100
|
||
|
}
|
||
|
}
|
||
|
);
|
||
|
|
||
|
return status.components.view({}, [text, image]);
|
||
|
}
|
||
|
}).param({
|
||
|
name: "address",
|
||
|
type: status.types.TEXT,
|
||
|
placeholder: "Address"
|
||
|
});
|
||
|
|
||
|
var phones = [
|
||
|
{
|
||
|
number: "89171111111",
|
||
|
description: "Number format 1"
|
||
|
},
|
||
|
{
|
||
|
number: "89371111111",
|
||
|
description: "Number format 1"
|
||
|
},
|
||
|
{
|
||
|
number: "+79171111111",
|
||
|
description: "Number format 2"
|
||
|
},
|
||
|
{
|
||
|
number: "9171111111",
|
||
|
description: "Number format 3"
|
||
|
}
|
||
|
];
|
||
|
|
||
|
function suggestionsContainerStyle(suggestionsCount) {
|
||
|
return {
|
||
|
marginVertical: 1,
|
||
|
marginHorizontal: 0,
|
||
|
height: Math.min(150, (56 * suggestionsCount)),
|
||
|
backgroundColor: "white",
|
||
|
borderRadius: 5
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var suggestionContainerStyle = {
|
||
|
paddingLeft: 16,
|
||
|
backgroundColor: "white"
|
||
|
};
|
||
|
|
||
|
var suggestionSubContainerStyle = {
|
||
|
height: 56,
|
||
|
borderBottomWidth: 1,
|
||
|
borderBottomColor: "#0000001f"
|
||
|
};
|
||
|
|
||
|
var valueStyle = {
|
||
|
marginTop: 9,
|
||
|
fontSize: 14,
|
||
|
fontFamily: "font",
|
||
|
color: "#000000de"
|
||
|
};
|
||
|
|
||
|
var descriptionStyle = {
|
||
|
marginTop: 1.5,
|
||
|
fontSize: 14,
|
||
|
fontFamily: "font",
|
||
|
color: "#838c93de"
|
||
|
};
|
||
|
|
||
|
function startsWith(str1, str2) {
|
||
|
// String.startsWith(...) doesn't work in otto
|
||
|
return str1.lastIndexOf(str2, 0) == 0 && str1 != str2;
|
||
|
}
|
||
|
|
||
|
function phoneSuggestions(params) {
|
||
|
var ph, suggestions;
|
||
|
if (!params.value || params.value == "") {
|
||
|
ph = phones;
|
||
|
} else {
|
||
|
ph = phones.filter(function (phone) {
|
||
|
return startsWith(phone.number, params.value);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
if (ph.length == 0) {
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
suggestions = ph.map(function (phone) {
|
||
|
return status.components.touchable(
|
||
|
{onPress: [status.events.SET_VALUE, phone.number]},
|
||
|
status.components.view(suggestionContainerStyle,
|
||
|
[status.components.view(suggestionSubContainerStyle,
|
||
|
[
|
||
|
status.components.text(
|
||
|
{style: valueStyle},
|
||
|
phone.number
|
||
|
),
|
||
|
status.components.text(
|
||
|
{style: descriptionStyle},
|
||
|
phone.description
|
||
|
)
|
||
|
])])
|
||
|
);
|
||
|
});
|
||
|
|
||
|
var view = status.components.scrollView(
|
||
|
suggestionsContainerStyle(ph.length),
|
||
|
suggestions
|
||
|
);
|
||
|
|
||
|
return {markup: view};
|
||
|
}
|
||
|
|
||
|
var phoneConfig = {
|
||
|
name: "phone",
|
||
|
description: "Send phone number",
|
||
|
color: "#5fc48d",
|
||
|
validator: function (params) {
|
||
|
return {
|
||
|
validationHandler: "phone",
|
||
|
parameters: [params.value]
|
||
|
};
|
||
|
},
|
||
|
params: [{
|
||
|
name: "phone",
|
||
|
type: status.types.PHONE,
|
||
|
suggestions: phoneSuggestions,
|
||
|
placeholder: "Phone number"
|
||
|
}],
|
||
|
handler: function (params) {
|
||
|
return {
|
||
|
event: "sign-up",
|
||
|
params: [params.value]
|
||
|
};
|
||
|
}
|
||
|
};
|
||
|
status.response(phoneConfig);
|
||
|
status.command(phoneConfig);
|
||
|
|
||
|
status.command({
|
||
|
name: "help",
|
||
|
description: "Help",
|
||
|
color: "#7099e6",
|
||
|
/* Validator example
|
||
|
validator: function (params) {
|
||
|
if (params.value != "3") {
|
||
|
var error = status.components.view(
|
||
|
{backgroundColor: "red"},
|
||
|
[status.components.text({}, "ooops :(")]
|
||
|
);
|
||
|
return {errors: [error]}
|
||
|
}
|
||
|
},*/
|
||
|
params: [{
|
||
|
name: "query",
|
||
|
type: status.types.TEXT
|
||
|
}]
|
||
|
});
|
||
|
|
||
|
status.response({
|
||
|
name: "confirmation-code",
|
||
|
color: "#7099e6",
|
||
|
description: "Confirmation code",
|
||
|
params: [{
|
||
|
name: "code",
|
||
|
type: status.types.NUMBER
|
||
|
}],
|
||
|
handler: function (params) {
|
||
|
return {
|
||
|
event: "confirm-sign-up",
|
||
|
params: [params.value]
|
||
|
};
|
||
|
},
|
||
|
validator: function(params){
|
||
|
if(!/^[\d]{4}$/.test(params.value)){
|
||
|
var error = status.components.validationMessage(
|
||
|
"Confirmation code",
|
||
|
"Wrong format"
|
||
|
);
|
||
|
|
||
|
return {errors: [error]}
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
status.response({
|
||
|
name: "keypair",
|
||
|
color: "#7099e6",
|
||
|
description: "Keypair password",
|
||
|
icon: "icon_lock_white",
|
||
|
params: [{
|
||
|
name: "password",
|
||
|
type: status.types.PASSWORD
|
||
|
}],
|
||
|
handler: function (params) {
|
||
|
return {
|
||
|
event: "save-password",
|
||
|
params: [params.value]
|
||
|
};
|
||
|
},
|
||
|
preview: function (params) {
|
||
|
return status.components.text(
|
||
|
{
|
||
|
style: {
|
||
|
marginTop: 5,
|
||
|
marginHorizontal: 0,
|
||
|
fontSize: 14,
|
||
|
fontFamily: "font",
|
||
|
color: "black"
|
||
|
}
|
||
|
}, "*****");
|
||
|
}
|
||
|
});
|
||
|
|
||
|
function walletView(params) {
|
||
|
if (params.value != "") {
|
||
|
var url = params.value;
|
||
|
if (!/^[a-zA-Z-_]+:/.test(url)) {
|
||
|
url = 'http://' + url;
|
||
|
}
|
||
|
|
||
|
return {webViewUrl: url};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
status.command({
|
||
|
name: "browse",
|
||
|
description: "browser",
|
||
|
color: "#ffa500",
|
||
|
fullscreen: true,
|
||
|
suggestionsTrigger: 'on-send',
|
||
|
params: [{
|
||
|
name: "webpage",
|
||
|
suggestions: walletView,
|
||
|
type: status.types.TEXT
|
||
|
}]
|
||
|
});
|
||
|
|
||
|
function validateBalance(params) {
|
||
|
try {
|
||
|
var val = web3.toWei(params.value, "ether");
|
||
|
} catch (err) {
|
||
|
return {
|
||
|
errors: [
|
||
|
status.components.validationMessage(
|
||
|
"Amount",
|
||
|
"Amount is not valid number"//err.message
|
||
|
)
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
var balance = web3.eth.getBalance(params.command.address);
|
||
|
if (bn(val).greaterThan(bn(balance))) {
|
||
|
return {
|
||
|
errors: [
|
||
|
status.components.validationMessage(
|
||
|
"Amount",
|
||
|
"Not enough ETH on balance ("
|
||
|
+ web3.fromWei(balance, "ether")
|
||
|
+ " ETH)"
|
||
|
)
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function sendTransaction(params) {
|
||
|
var data = {
|
||
|
from: params.command.from,
|
||
|
to: params.command.to,
|
||
|
value: web3.toWei(params.value, "ether")
|
||
|
};
|
||
|
var hash = web3.eth.sendTransaction(data);
|
||
|
|
||
|
return {"transaction-hash": hash};
|
||
|
}
|
||
|
|
||
|
status.command({
|
||
|
name: "send",
|
||
|
color: "#5fc48d",
|
||
|
description: "Send transaction",
|
||
|
params: [{
|
||
|
name: "amount",
|
||
|
type: status.types.NUMBER
|
||
|
}],
|
||
|
preview: function (params) {
|
||
|
return status.components.text(
|
||
|
{},
|
||
|
params.value + " ETH"
|
||
|
);
|
||
|
},
|
||
|
handler: sendTransaction,
|
||
|
validator: validateBalance
|
||
|
});
|