"use strict";
[Link] = false;
function CheckLocation() {
var start = "#go_to_message";
var hash = [Link];
if ([Link](0, [Link]) == start) {
var messageId = parseInt([Link]([Link]));
if (messageId) {
GoToMessage(messageId);
}
} else if (hash == "#allow_back") {
[Link] = true;
}
}
function ShowToast(text) {
var container = [Link]("div");
[Link] = "toast_container";
var inner = [Link]([Link]("div"));
[Link] = "toast_body";
[Link]([Link](text));
var appended = [Link](container);
setTimeout(function () {
AddClass(appended, "toast_shown");
setTimeout(function () {
RemoveClass(appended, "toast_shown");
setTimeout(function () {
[Link](appended);
}, 3000);
}, 3000);
}, 0);
}
function ShowHashtag(tag) {
ShowToast("This is a hashtag '#" + tag + "' link.");
return false;
}
function ShowCashtag(tag) {
ShowToast("This is a cashtag '$" + tag + "' link.");
return false;
}
function ShowBotCommand(command) {
ShowToast("This is a bot command '/" + command + "' link.");
return false;
}
function ShowMentionName() {
ShowToast("This is a link to a user mentioned by name.");
return false;
}
function ShowNotLoadedEmoji() {
ShowToast("This custom emoji is not included, change data exporting settings to
download.");
return false;
}
function ShowNotAvailableEmoji() {
ShowToast("This custom emoji is not available.");
return false;
}
function ShowSpoiler(target) {
if ([Link]("hidden")) {
[Link]("hidden");
}
}
function AddClass(element, name) {
var current = [Link];
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', 'g');
if ([Link](current)) {
return;
}
[Link] = current + ' ' + name;
}
function RemoveClass(element, name) {
var current = [Link];
var expression = new RegExp('(^|\\s)' + name + '(\\s|$)', '');
var match = [Link](current);
while ((match = [Link](current)) != null) {
if (match[1].length > 0 && match[2].length > 0) {
current = [Link](0, [Link] + match[1].length)
+ [Link]([Link] + match[0].length);
} else {
current = [Link](0, [Link])
+ [Link]([Link] + match[0].length);
}
}
[Link] = current;
}
function EaseOutQuad(t) {
return t * t;
}
function EaseInOutQuad(t) {
return (t < 0.5) ? (2 * t * t) : ((4 - 2 * t) * t - 1);
}
function ScrollHeight() {
if ("innerHeight" in window) {
return [Link];
} else if ([Link]) {
return [Link];
}
return [Link];
}
function ScrollTo(top, callback) {
var html = [Link];
var current = [Link];
var delta = top - current;
var finish = function () {
[Link] = top;
if (callback) {
callback();
}
};
if (![Link] || delta == 0) {
finish();
return;
}
var transition = EaseOutQuad;
var max = 300;
if (delta < -max) {
current = top + max;
delta = -max;
} else if (delta > max) {
current = top - max;
delta = max;
} else {
transition = EaseInOutQuad;
}
var duration = 150;
var interval = 7;
var time = [Link]();
var animate = function () {
var now = [Link]();
if (now >= time + duration) {
finish();
return;
}
var dt = (now - time) / duration;
[Link] = [Link](current + delta * transition(dt));
setTimeout(animate, interval);
};
setTimeout(animate, interval);
}
function ScrollToElement(element, callback) {
var header = [Link]("page_header")[0];
var headerHeight = [Link];
var html = [Link];
var scrollHeight = ScrollHeight();
var available = scrollHeight - headerHeight;
var padding = 10;
var top = [Link];
var height = [Link];
var desired = top
- [Link]((available - height) / 2, padding)
- headerHeight;
var scrollTopMax = [Link] - scrollHeight;
ScrollTo([Link](desired, scrollTopMax), callback);
}
function GoToMessage(messageId) {
var element = [Link]("message" + messageId);
if (element) {
var hash = "#go_to_message" + messageId;
if ([Link] != hash) {
[Link] = hash;
}
ScrollToElement(element, function () {
AddClass(element, "selected");
setTimeout(function () {
RemoveClass(element, "selected");
}, 1000);
});
} else {
ShowToast("This message was not exported. Maybe it was deleted.");
}
return false;
}
function GoBack(anchor) {
if (![Link]) {
return true;
}
[Link]();
if (!anchor || ![Link]) {
return true;
}
var destination = [Link]("href");
if (!destination) {
return true;
}
setTimeout(function () {
[Link] = destination;
}, 100);
return false;
}