You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

255 lines
8.9 KiB
JavaScript

/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
var playerProfile = [];
var messages = null;
function loadHomePage(callback) {
callAPI("getprofile", {
username: localStorage.getItem("username"),
password: localStorage.getItem("password")
}, function (data) {
playerProfile = data.profile;
setupProfile();
initChat();
refreshChat();
setInterval(refreshChat, 1000 * 15);
// Refresh health bar
setInterval(function () {
callAPI("getprofile", {
username: localStorage.getItem("username"),
password: localStorage.getItem("password")
}, function (data) {
playerProfile = data.profile;
setupProfile();
});
}, 1000 * 30);
callback();
});
}
function setupProfile() {
$(".player-nickname").text(playerProfile.name);
$("#player-level-badge").html("<i class=\"" + SETTINGS["teams"][playerProfile.teamid]["icon"] + "\"></i> &nbsp; Lv. " + playerProfile.level * 1);
$("#player-level-badge").addClass("bg-color-" + SETTINGS["teams"][playerProfile.teamid]["color"]);
$("#player-level-badge").addClass("text-color-" + SETTINGS["teams"][playerProfile.teamid]["textcolor"]);
app.progressbar.set($("#player-healthbar"), (playerProfile.energy / playerProfile.maxenergy) * 100, 500);
}
function scanCode() {
if (platform_type != "cordova") {
app.dialog.alert("You can't scan barcodes with this device.", "Sorry!");
}
cordova.plugins.barcodeScanner.scan(
function (result) {
if (!result.cancelled) {
callAPI("code", {
username: localStorage.getItem("username"),
password: localStorage.getItem("password"),
code: result.text
}, function (resp) {
if (resp.item == "" && resp.munzee == "") {
app.dialog.alert("You didn't find anything new.", "");
} else {
if (resp.item == "") {
$("#founditem-block").addClass("display-none");
} else {
$("#founditem-name").text(resp.item);
$("#founditem-block").removeClass("display-none");
}
if (resp.munzee == "") {
$("#foundmunzee-block").addClass("display-none");
} else {
$("#foundmunzee-name").text(resp.munzee);
$("#foundmunzee-block").removeClass("display-none");
}
app.popup.open("#founditem-popup");
}
}, function (msg) {
app.dialog.alert(msg, "Error");
});
}
},
function (error) {
app.dialog.alert(error, "Scan Error");
},
{
showTorchButton: true,
prompt: "Find a code",
resultDisplayDuration: 0,
disableSuccessBeep: true
}
);
}
function initChat() {
messages = app.messages.create({
el: '.messages',
pageContentEl: '#messagebar',
// First message rule
firstMessageRule: function (message, previousMessage, nextMessage) {
// Skip if title
if (message.isTitle)
return false;
/* if:
- there is no previous message
- or previous message type (send/received) is different
- or previous message sender name is different
*/
if (!previousMessage || previousMessage.type !== message.type || previousMessage.name !== message.name)
return true;
return false;
},
// Last message rule
lastMessageRule: function (message, previousMessage, nextMessage) {
// Skip if title
if (message.isTitle)
return false;
/* if:
- there is no next message
- or next message type (send/received) is different
- or next message sender name is different
*/
if (!nextMessage || nextMessage.type !== message.type || nextMessage.name !== message.name)
return true;
return false;
},
// Last message rule
tailMessageRule: function (message, previousMessage, nextMessage) {
// Skip if title
if (message.isTitle)
return false;
/* if (bascially same as lastMessageRule):
- there is no next message
- or next message type (send/received) is different
- or next message sender name is different
*/
if (!nextMessage || nextMessage.type !== message.type || nextMessage.name !== message.name)
return true;
return false;
}
});
}
function scrollToBottom(id) {
var div = document.getElementById(id);
$('#' + id).animate({
scrollTop: div.scrollHeight - div.clientHeight
}, 500);
}
function refreshChat(forcescroll) {
if (typeof forcescroll == 'undefined') {
forcescroll = false;
}
var vars = {
username: localStorage.getItem("username"),
password: localStorage.getItem("password")
};
if (!(map.getCenter().lng == 0 && Math.abs(map.getCenter().lat) > 0.000001)) {
vars["latitude"] = map.getCenter().lat;
vars["longitude"] = map.getCenter().lng;
}
// https://stackoverflow.com/a/21067431
var out = document.getElementById("messages-content");
// allow 1px inaccuracy by adding 1
var isScrolledToBottom = out.scrollHeight - out.clientHeight <= out.scrollTop + 1;
var messagebox = messages;
callAPI("getchat", vars, function (success) {
for (var i = 0; i < success.messages.length; i++) {
var msg = success.messages[i];
if ($(".message[data-id=" + msg.id + "]").length > 0) {
continue;
}
if (msg.me) {
messagebox.addMessage({
text: msg.message,
attrs: {
'data-id': msg.id
}
});
} else {
messagebox.addMessage({
text: msg.message,
type: 'received',
name: msg.nickname,
attrs: {
'data-id': msg.id
}
});
}
}
if (isScrolledToBottom || forcescroll) {
scrollToBottom("messages-content");
}
}, function (error) {});
}
function sendChat() {
var message = $("#chatbox").val().trim();
var chatfailure = function (error, message) {
$("#chatbox").prop("disabled", true);
$("#chatbox").val(error);
$("#chatbox").addClass("text-color-red");
setTimeout(function () {
$("#chatbox").prop("disabled", false);
$("#chatbox").val(message);
$("#chatbox").removeClass("text-color-red");
}, 1000 * 2);
}
if (message == "") {
chatfailure("Message empty.", "");
return false;
}
if (map.getCenter().lng == 0 && Math.abs(map.getCenter().lat) < 0.000001) {
chatfailure("Can't chat without valid location.", message);
return false;
}
callAPI("sendchat", {
username: localStorage.getItem("username"),
password: localStorage.getItem("password"),
latitude: map.getCenter().lat,
longitude: map.getCenter().lng,
message: message
}, function (success) {
$("#chatbox").val("");
refreshChat(true);
}, function (error) {
chatfailure(error, message);
});
}
var messagebar = app.messagebar.create({
el: '#messagebar',
textareaEl: '#chatbox'
});
$('a.toggle-messages').on('click', function () {
var contentbox = $("#messagebar #messages-content");
if (contentbox.hasClass("display-none")) {
$("#chattoggle-closed").addClass("display-none");
$("#chattoggle-opened").removeClass("display-none");
contentbox.removeClass("display-none");
} else {
$("#chattoggle-opened").addClass("display-none");
$("#chattoggle-closed").removeClass("display-none");
contentbox.addClass("display-none");
}
});
$("#sendmsgbtn").click(function () {
sendChat();
});
$("#chatbox").on("keyup", function (evt) {
if (evt.keyCode == 13) {
sendChat();
}
})