define(function(require){
|
|
var $ = require("jquery"),
|
|
monster = require("monster"),
|
|
animation = true,
|
|
globalData = {},
|
|
dataSize = 0,
|
|
dataCount = 10,
|
|
page = 1;
|
|
|
|
String.prototype.capitalize = function() {
|
|
return this.charAt(0).toUpperCase() + this.slice(1);
|
|
}
|
|
|
|
var app = {
|
|
name: "registrations",
|
|
|
|
css: [ "app" ],
|
|
|
|
i18n: {
|
|
"en-US": { customCss: false },
|
|
"fr-FR": { customCss: false },
|
|
"ru-RU": { customCss: false },
|
|
"es-ES": { customCss: false }
|
|
},
|
|
|
|
requests: {},
|
|
subscribe: {},
|
|
|
|
load: function(callback) {
|
|
var self = this;
|
|
|
|
self.initApp(function() {
|
|
callback && callback(self);
|
|
});
|
|
},
|
|
|
|
initApp: function(callback) {
|
|
var self = this;
|
|
|
|
self.getAnimationFlag();
|
|
self.getCountPage();
|
|
|
|
monster.pub("auth.initApp", {
|
|
app: self,
|
|
callback: callback
|
|
});
|
|
},
|
|
|
|
render: function(container) {
|
|
var self = this, parent = container || $("#monster-content"), template;
|
|
|
|
self.getRegistrations(function(data) {
|
|
$.each(data, function(i, elem) {
|
|
elem.datetime = self.getDateInit(elem.initial_registration);
|
|
elem.datetime_last_registration = self.getDateInit(elem.last_registration);
|
|
date = elem.datetime.split(" ");
|
|
elem.date = date[0];
|
|
});
|
|
|
|
globalData = data;
|
|
dataSize = Object.keys(globalData).length;
|
|
|
|
self.paginate(function(data) {
|
|
template = $(monster.template(self, "app", data));
|
|
|
|
self.renderLeft(template, data);
|
|
self.renderBody(template, data);
|
|
self.renderPaginate(template);
|
|
|
|
self.bindEvents(template, parent, data, function() {
|
|
parent.empty().append(template);
|
|
});
|
|
});
|
|
});
|
|
},
|
|
|
|
renderLeft: function(template, data) {
|
|
var date = "-", searchResult;
|
|
searchResult = $(monster.template(this, "search-result", data));
|
|
template.find(".search__result").empty().append(searchResult);
|
|
},
|
|
|
|
renderBody: function(template, data) {
|
|
var self = this, tableBody = $(monster.template(this, "table-body", data)), type;
|
|
if (self.currentBrowser() === "ie") {
|
|
console.log("IE destroy our world...");
|
|
tableBody.find(".details__item").each(function(i, item) {
|
|
if ($(this).text().substr(0, $(this).text().indexOf(":")).length < 6) {
|
|
$(this).text($(this).text().replace("\t", "\t\t\t\t"));
|
|
} else if ($(this).text().substr(0, $(this).text().indexOf(":")).length < 15) {
|
|
$(this).text($(this).text().replace("\t", "\t\t\t"));
|
|
} else if ($(this).text().substr(0, $(this).text().indexOf(":")).length < 23) {
|
|
$(this).text($(this).text().replace("\t", "\t\t"));
|
|
}
|
|
});
|
|
}
|
|
tableBody.find(".btn-details").text(this.i18n.active().main.btndetails);
|
|
tableBody.find(".table__td-type").each(function(i, item) {
|
|
type = $(item).attr("data-type");
|
|
$(item).html(type.capitalize().replace(/_/g, " "));
|
|
});
|
|
template.find(".table__body").empty().append(tableBody);
|
|
},
|
|
|
|
renderPaginate: function(template) {
|
|
var data = [], len = Math.ceil(dataSize / dataCount);
|
|
|
|
for (var i = 0; i < len; i++) {
|
|
if ((i + 1) == page) {
|
|
data[i] = {page: i + 1, current: true};
|
|
} else {
|
|
data[i] = {page: i + 1};
|
|
}
|
|
}
|
|
|
|
var paginate = $(monster.template(this, "paginate", data));
|
|
template.find(".paginate").empty().append(paginate);
|
|
|
|
if (page > 1) {
|
|
template.find(".paginate__left").css("display", "inline-block")
|
|
} else {
|
|
template.find(".paginate__left").css("display", "none")
|
|
}
|
|
|
|
if (page < len) {
|
|
template.find(".paginate__right").css("display", "inline-block")
|
|
} else {
|
|
template.find(".paginate__right").css("display", "none")
|
|
}
|
|
},
|
|
|
|
paginate: function(callback) {
|
|
var newData = [], j = 0,
|
|
n = (page - 1) * dataCount,
|
|
m = page * dataCount;
|
|
|
|
$.each(globalData, function(i, elem) {
|
|
if (j >= n) {
|
|
if (j >= m) return false;
|
|
newData[i] = elem;
|
|
}
|
|
|
|
j++;
|
|
});
|
|
|
|
callback && callback(newData);
|
|
},
|
|
|
|
renderUpdate: function(template, parent) {
|
|
var self = this;
|
|
self.paginate(function(data) {
|
|
template = $(monster.template(self, "app", data));
|
|
|
|
self.renderLeft(template, data);
|
|
self.renderBody(template, data);
|
|
self.renderPaginate(template);
|
|
|
|
self.bindEvents(template, parent, data, function() {
|
|
parent.empty().append(template);
|
|
});
|
|
});
|
|
},
|
|
|
|
bindEvents: function(template, parent, data, callback) {
|
|
var self = this, firstClick = true, timeoutID, textSearch = "", kostScroll = true,
|
|
scroll = 0, dataLen = Object.keys(data).length, inputCheck, btnRest;
|
|
|
|
template.on("click", ".btn-details", function() {
|
|
var html = $(this).parent().find(".details");
|
|
|
|
$.each($(html).find(".details__item"), function(i, elem) {
|
|
$(this).text($(this).text()
|
|
.replace(/_/g, " ")
|
|
.replace("fs path", "fs_path")
|
|
.replace("user ", "user_")
|
|
.replace("user_agent", "user agent")
|
|
.capitalize());
|
|
});
|
|
|
|
monster.ui.dialog($(html[0].outerHTML), {
|
|
title: self.i18n.active().main.header.details,
|
|
width: "680px"
|
|
});
|
|
});
|
|
|
|
template.on("mouseover", ".table__th", function() {
|
|
$(this).addClass("table__th-hover");
|
|
});
|
|
|
|
template.on("mouseleave", ".table__th", function() {
|
|
$(this).removeClass("table__th-hover");
|
|
});
|
|
|
|
template.on("change", "#all_checked", function() {
|
|
$(".registrations .table__td-check .input-check").prop('checked', $(this).is(":checked"));
|
|
});
|
|
|
|
template.on("change", ".input-check", function() {
|
|
if ($(".input-check").filter(function() {return $(this).is(":checked")}).size() === 0) {
|
|
self.toggleAnim($(".registrations .table__tr-restart"), false);
|
|
$(".table__tr:nth-last-child(2)").css("border-bottom-width", "0");
|
|
} else {
|
|
self.toggleAnim($(".registrations .table__tr-restart"), true);
|
|
$(".table__tr:nth-last-child(2)").css("border-bottom-width", "1px");
|
|
}
|
|
});
|
|
|
|
template.on("click", ".btn-restart", function() {
|
|
btnRest = this;
|
|
$(btnRest).css({
|
|
background: "#ccc!important",
|
|
border: "#999!inportant"
|
|
});
|
|
|
|
inputCheck = $(".registrations .table__td-check .input-check").filter(function() {
|
|
return $(this).is(":checked");
|
|
});
|
|
|
|
$(inputCheck).each(function(i, item) {
|
|
self.callApi({
|
|
resource: "device.restart",
|
|
data: {
|
|
accountId: self.accountId,
|
|
deviceId: $(item).closest(".table__tr").attr("data-id")
|
|
},
|
|
success: function(data) {
|
|
if (i === $(inputCheck).size() - 1) {
|
|
$(btnRest).css({
|
|
background: "",
|
|
border: ""
|
|
});
|
|
self.toggleAnim($(".restart-message"), true);
|
|
setTimeout(function() {
|
|
self.toggleAnim($(".restart-message"), false);
|
|
}, 3000);
|
|
}
|
|
}
|
|
});
|
|
});
|
|
});
|
|
|
|
template.on("click", ".table__th", function() {
|
|
if (!$(this).hasClass("table__th-check") && !$(this).hasClass("table__th-details")) {
|
|
if ($(this).hasClass("table__th-active")) {
|
|
firstClick = false;
|
|
|
|
if(!$(this).hasClass("table__th-reverse")) {
|
|
$(this).addClass("table__th-reverse");
|
|
} else {
|
|
$(this).removeClass("table__th-reverse");
|
|
}
|
|
} else {
|
|
firstClick = true;
|
|
}
|
|
|
|
$(".table__th:not(.table__th-details, .table__th-check)").not(this).removeClass("table__th-reverse").removeClass("table__th-active");
|
|
$(this).addClass("table__th-active");
|
|
|
|
self.sortData(data, $(this).attr("data-sort"), firstClick, function(data) {
|
|
self.renderLeft(template, data);
|
|
self.renderBody(template, data);
|
|
});
|
|
}
|
|
});
|
|
|
|
template.on("click", ".showall", function(e) {
|
|
self.toggleAnim($(this), false);
|
|
$(".search__text").val("");
|
|
$(".search__item").removeClass("search__item-active");
|
|
self.toggleAnim(template.find(".table__tr:not(.table__tr-restart), .search__item"), true);
|
|
});
|
|
|
|
template.on("focus", ".search__text", function(e) {
|
|
$(".search__item").removeClass("search__item-active");
|
|
});
|
|
|
|
template.on("keyup", ".search__text", function(e) {
|
|
clearTimeout(timeoutID);
|
|
|
|
if ($(this).val() != "") {
|
|
timeoutID = setTimeout(function () {
|
|
textSearch = $(".search__text").val().toLowerCase();
|
|
|
|
$.each(template.find(".table__tr:not(.table__tr-restart)"), function (i, elem) {
|
|
if ($(this).find(".table__td:not(.table__td-details)").text().toLowerCase().indexOf(textSearch) == -1) {
|
|
self.toggleAnim(template.find(".search__item[data-callid='" + $(this).attr("data-callid") + "']"), false);
|
|
self.toggleAnim($(this), false);
|
|
} else {
|
|
self.toggleAnim(template.find(".search__item[data-callid='" + $(this).attr("data-callid") + "']").add($(this)), true);
|
|
}
|
|
});
|
|
|
|
setTimeout(function() {
|
|
if (template.find(".table__tr:not(.table__tr-restart)").filter(function() {return $(this).css("display") != "none"}).size() != dataLen) {
|
|
self.toggleAnim(template.find(".showall"), true);
|
|
} else {
|
|
self.toggleAnim(template.find(".showall"), false);
|
|
}
|
|
}, 350);
|
|
}, 500);
|
|
} else {
|
|
self.toggleAnim(template.find(".table__tr:not(.table__tr-restart), .search__item"), true);
|
|
self.toggleAnim(template.find(".showall"), false);
|
|
}
|
|
});
|
|
|
|
template.on("click", ".search__item", function() {
|
|
$(".search__item").removeClass("search__item-active");
|
|
$(this).addClass("search__item-active");
|
|
|
|
setTimeout(function() {
|
|
self.toggleAnim(template.find(".showall"), true);
|
|
}, 350);
|
|
|
|
self.toggleAnim(template.find(".table__tr:not(.table__tr-restart)[data-callid!='" + $(this).attr("data-callid") + "']"), false);
|
|
self.toggleAnim(template.find(".table__tr:not(.table__tr-restart)[data-callid='" + $(this).attr("data-callid") + "']"), true);
|
|
});
|
|
|
|
$(window).on("scroll", function () {
|
|
if (kostScroll) {
|
|
$(".table__head").width($(".table").width() + 1);
|
|
$(".boxbtn").width($(".boxbtn").parent().width());
|
|
kostScroll = false;
|
|
}
|
|
scroll = pageYOffset || (document.documentElement.clientHeight ? document.documentElement.scrollTop : document.body.scrollTop);
|
|
if (scroll > $(".appcont__left").height() + 34) {
|
|
$(".boxbtn").css("position", "fixed");
|
|
} else {
|
|
$(".boxbtn").css("position", "static");
|
|
}
|
|
if (scroll > $(".registrations .table").offset().top) {
|
|
$(".registrations .table__head").css("position", "fixed");
|
|
$(".registrations .table__body").css("margin-top", $(".registrations .table__head").height());
|
|
} else {
|
|
$(".registrations .table__head").css("position", "relative");
|
|
$(".registrations .table__body").css("margin-top", "0");
|
|
}
|
|
});
|
|
|
|
template.on("click", ".up", function () {
|
|
$("body, html").animate({scrollTop: 0}, 600);
|
|
});
|
|
|
|
template.on("click", ".paginate__item:not(.paginate__item-current)", function() {
|
|
page = $(this).attr("data-page");
|
|
self.renderUpdate(template, parent);
|
|
});
|
|
|
|
template.on("click", ".paginate__left", function() {
|
|
if (page > 1) {
|
|
page--;
|
|
self.renderUpdate(template, parent);
|
|
}
|
|
});
|
|
|
|
template.on("click", ".paginate__right", function() {
|
|
if (page < dataSize) {
|
|
page++;
|
|
self.renderUpdate(template, parent);
|
|
}
|
|
});
|
|
|
|
self.bindConfig(template);
|
|
|
|
callback && callback();
|
|
},
|
|
|
|
bindConfig: function(template) {
|
|
var self = this, config_template;
|
|
|
|
self.getConfigParams(function(params) {
|
|
template.on("click", ".config", function () {
|
|
config_template = $(monster.template(self, "config-params", params));
|
|
|
|
config_template.on("click", ".boxconfig__save", function () {
|
|
localStorage.animation = "" + $("#boxconfig__animation").prop('checked');
|
|
localStorage.dataCount = $("#boxconfig__pagination").val();
|
|
|
|
window.location.reload();
|
|
});
|
|
|
|
monster.ui.dialog(config_template, {
|
|
title: self.i18n.active().main.title_config,
|
|
width: '480px'
|
|
});
|
|
});
|
|
});
|
|
},
|
|
|
|
getConfigParams: function(callback) {
|
|
var self = this, params = {},
|
|
params_label = self.i18n.active().main.config_params;
|
|
|
|
params.animation = {
|
|
label: params_label.animation,
|
|
animation_checked: (localStorage.animation == "true") ? "checked" : ""
|
|
};
|
|
params.pagination = {
|
|
label: params_label.pagination,
|
|
default_count: dataCount
|
|
};
|
|
|
|
callback && callback(params);
|
|
},
|
|
|
|
getRegistrations: function(callback) {
|
|
var self = this;
|
|
|
|
self.callApi({
|
|
resource: "registrations.list",
|
|
data: {
|
|
accountId: self.accountId
|
|
},
|
|
success: function(registrations) {
|
|
self.getDevices(registrations.data, function(data) {
|
|
callback && callback(data);
|
|
});
|
|
}
|
|
});
|
|
},
|
|
|
|
getDevices: function(regs, callback) {
|
|
var self = this, kost = false;
|
|
|
|
self.callApi({
|
|
resource: "device.list",
|
|
data: {
|
|
accountId: self.accountId
|
|
},
|
|
success: function(devices) {
|
|
$.each(regs, function(i, item) {
|
|
kost = false;
|
|
$.each(devices.data, function(j, device) {
|
|
if (regs[i].authorizing_id === device.id) {
|
|
item.name = device.name;
|
|
item.type = device.device_type;
|
|
item.enabled = device.enabled;
|
|
item.id = device.id;
|
|
|
|
self.getDevice(device.id, function(data) {
|
|
if (data.sip.username) {
|
|
item.username = data.sip.username;
|
|
}
|
|
kost = true;
|
|
});
|
|
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
|
|
var interval = setInterval(function() {
|
|
if (kost) {
|
|
callback && callback(regs);
|
|
clearInterval(interval);
|
|
}
|
|
}, 5);
|
|
}
|
|
});
|
|
},
|
|
|
|
getDevice: function(id, callback) {
|
|
var self = this;
|
|
|
|
self.callApi({
|
|
resource: "device.get",
|
|
data: {
|
|
accountId: self.accountId,
|
|
deviceId: id
|
|
},
|
|
success: function(device) {
|
|
callback && callback(device.data);
|
|
}
|
|
});
|
|
},
|
|
|
|
getDateInit: function(timestamp) {
|
|
var self = this, datetime = "-";
|
|
|
|
if (timestamp) {
|
|
var time = new Date((timestamp - 62167219200) * 1000),
|
|
month = self.addZero(time.getMonth() + 1),
|
|
year = time.getFullYear(),
|
|
day = self.addZero(time.getDate()),
|
|
date = day + "/" + month + "/" + year,
|
|
localTime = time.toLocaleTimeString();
|
|
datetime = date + " " + localTime;
|
|
}
|
|
|
|
return datetime;
|
|
},
|
|
|
|
addZero: function(num) {
|
|
return (num < 10) ? "0" + num : num;
|
|
},
|
|
|
|
sortData: function(data, sortBy, firstClick, callback) {
|
|
if (firstClick && data) {
|
|
if (sortBy == "event_timestamp" || sortBy == "initial_registration" || sortBy == "last_registration") {
|
|
data.sort(function(elem1, elem2) {
|
|
return elem1[sortBy] - elem2[sortBy];
|
|
});
|
|
} else {
|
|
data.sort(function(elem1, elem2) {
|
|
if (elem1[sortBy] > elem2[sortBy]) return 1;
|
|
if (elem1[sortBy] < elem2[sortBy]) return -1;
|
|
return 0;
|
|
});
|
|
}
|
|
} else {
|
|
data.reverse();
|
|
}
|
|
|
|
callback && callback(data);
|
|
},
|
|
|
|
getAnimationFlag: function() {
|
|
if (localStorage.getItem("animation") === "true" ||
|
|
(localStorage.getItem("animation") !== "false" && monster.config.developerFlags.animation === true)) {
|
|
animation = true;
|
|
} else {
|
|
animation = false;
|
|
}
|
|
},
|
|
|
|
getCountPage: function() {
|
|
if (typeof localStorage.getItem("dataCount") !== "undefined" && localStorage.getItem("dataCount") > 0 ||
|
|
(typeof localStorage.getItem("dataCount") === "undefined" && typeof monster.config.developerFlags.dataCount !== "undefined" &&
|
|
monster.config.developerFlags.dataCount > 0)) {
|
|
dataCount = localStorage.getItem("dataCount") || monster.config.developerFlags.dataCount;
|
|
} else {
|
|
dataCount = 10;
|
|
}
|
|
},
|
|
|
|
toggleAnim: function(elems, visible) {
|
|
elems = $(elems).filter(function() {
|
|
if (visible) {
|
|
return $(this).css("display") == "none";
|
|
} else {
|
|
return $(this).css("display") != "none";
|
|
}
|
|
});
|
|
|
|
if (animation) {
|
|
$(elems).toggle(200, "linear");
|
|
} else {
|
|
$(elems).toggle(visible);
|
|
}
|
|
},
|
|
|
|
currentBrowser: function() {
|
|
var ua = navigator.userAgent, bName, version;
|
|
|
|
if (ua.search(/Konqueror/) > -1) bName = "konqueror";
|
|
if (ua.search(/Iceweasel/) > -1) bName = "iceweasel";
|
|
if (ua.search(/SeaMonkey/) > -1) bName = "seamonkey";
|
|
if (ua.search(/Safari/) > -1) bName = "safari";
|
|
if (ua.search(/Trident/) > -1 || ua.search(/MSIE/) > -1) bName = "ie";
|
|
if (ua.search(/Opera/) > -1) bName = "opera";
|
|
if (ua.search(/Chrome/) > -1) bName = "chrome";
|
|
if (ua.search(/Firefox/) > -1) bName = "firefox";
|
|
|
|
switch (bName) {
|
|
case "ie": version = (ua.split("rv:")[1]).split(";")[0]; break;
|
|
case "firefox": version = ua.split("Firefox/")[1]; break;
|
|
case "opera": version = ua.split("Version/")[1]; break;
|
|
case "chrome": version = (ua.split("Chrome/")[1]).split(" ")[0]; break;
|
|
case "safari": version = (this.defElem((ua.split("Version/")[1]))) ? ua.split("Version/")[1].split(" ")[0] : ""; break;
|
|
case "konqueror": version = this.defElem((ua.split("KHTML/")[1])).split(" ")[0]; break;
|
|
case "iceweasel": version = this.defElem((ua.split("Iceweasel/")[1])).split(" ")[0]; break;
|
|
case "seamonkey": version = ua.split("SeaMonkey/")[1]; break;
|
|
}
|
|
|
|
return bName;
|
|
}
|
|
};
|
|
|
|
return app;
|
|
});
|