diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..87f4e7c --- /dev/null +++ b/LICENSE @@ -0,0 +1,471 @@ + MOZILLA PUBLIC LICENSE + Version 1.1 + + --------------- + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the + Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to + the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original + Code, prior Modifications used by a Contributor, and the Modifications + made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the + combination of the Original Code and Modifications, in each case + including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally + accepted in the software development community for the electronic + transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source + Code. + + 1.6. "Initial Developer" means the individual or entity identified + as the Initial Developer in the Source Code notice required by Exhibit + A. + + 1.7. "Larger Work" means a work which combines Covered Code or + portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum + extent possible, whether at the time of the initial grant or + subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the + substance or structure of either the Original Code or any previous + Modifications. When Covered Code is released as a series of files, a + Modification is: + A. Any addition to or deletion from the contents of a file + containing Original Code or previous Modifications. + + B. Any new file that contains any part of the Original Code or + previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code + which is described in the Source Code notice required by Exhibit A as + Original Code, and which, at the time of its release under this + License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or + hereafter acquired, including without limitation, method, process, + and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for + making modifications to it, including all modules it contains, plus + any associated interface definition files, scripts used to control + compilation and installation of an Executable, or source code + differential comparisons against either the Original Code or another + well known, available Covered Code of the Contributor's choice. The + Source Code can be in a compressed or archival form, provided the + appropriate decompression or de-archiving software is widely available + for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity + exercising rights under, and complying with all of the terms of, this + License or a future version of this License issued under Section 6.1. + For legal entities, "You" includes any entity which controls, is + controlled by, or is under common control with You. For purposes of + this definition, "control" means (a) the power, direct or indirect, + to cause the direction or management of such entity, whether by + contract or otherwise, or (b) ownership of more than fifty percent + (50%) of the outstanding shares or beneficial ownership of such + entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. + The Initial Developer hereby grants You a world-wide, royalty-free, + non-exclusive license, subject to third party intellectual property + claims: + (a) under intellectual property rights (other than patent or + trademark) Licensable by Initial Developer to use, reproduce, + modify, display, perform, sublicense and distribute the Original + Code (or portions thereof) with or without Modifications, and/or + as part of a Larger Work; and + + (b) under Patents Claims infringed by the making, using or + selling of Original Code, to make, have made, use, practice, + sell, and offer for sale, and/or otherwise dispose of the + Original Code (or portions thereof). + + (c) the licenses granted in this Section 2.1(a) and (b) are + effective on the date Initial Developer first distributes + Original Code under the terms of this License. + + (d) Notwithstanding Section 2.1(b) above, no patent license is + granted: 1) for code that You delete from the Original Code; 2) + separate from the Original Code; or 3) for infringements caused + by: i) the modification of the Original Code or ii) the + combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. + Subject to third party intellectual property claims, each Contributor + hereby grants You a world-wide, royalty-free, non-exclusive license + + (a) under intellectual property rights (other than patent or + trademark) Licensable by Contributor, to use, reproduce, modify, + display, perform, sublicense and distribute the Modifications + created by such Contributor (or portions thereof) either on an + unmodified basis, with other Modifications, as Covered Code + and/or as part of a Larger Work; and + + (b) under Patent Claims infringed by the making, using, or + selling of Modifications made by that Contributor either alone + and/or in combination with its Contributor Version (or portions + of such combination), to make, use, sell, offer for sale, have + made, and/or otherwise dispose of: 1) Modifications made by that + Contributor (or portions thereof); and 2) the combination of + Modifications made by that Contributor with its Contributor + Version (or portions of such combination). + + (c) the licenses granted in Sections 2.2(a) and 2.2(b) are + effective on the date Contributor first makes Commercial Use of + the Covered Code. + + (d) Notwithstanding Section 2.2(b) above, no patent license is + granted: 1) for any code that Contributor has deleted from the + Contributor Version; 2) separate from the Contributor Version; + 3) for infringements caused by: i) third party modifications of + Contributor Version or ii) the combination of Modifications made + by that Contributor with other software (except as part of the + Contributor Version) or other devices; or 4) under Patent Claims + infringed by Covered Code in the absence of Modifications made by + that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. + The Modifications which You create or to which You contribute are + governed by the terms of this License, including without limitation + Section 2.2. The Source Code version of Covered Code may be + distributed only under the terms of this License or a future version + of this License released under Section 6.1, and You must include a + copy of this License with every copy of the Source Code You + distribute. You may not offer or impose any terms on any Source Code + version that alters or restricts the applicable version of this + License or the recipients' rights hereunder. However, You may include + an additional document offering the additional rights described in + Section 3.5. + + 3.2. Availability of Source Code. + Any Modification which You create or to which You contribute must be + made available in Source Code form under the terms of this License + either on the same media as an Executable version or via an accepted + Electronic Distribution Mechanism to anyone to whom you made an + Executable version available; and if made available via Electronic + Distribution Mechanism, must remain available for at least twelve (12) + months after the date it initially became available, or at least six + (6) months after a subsequent version of that particular Modification + has been made available to such recipients. You are responsible for + ensuring that the Source Code version remains available even if the + Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. + You must cause all Covered Code to which You contribute to contain a + file documenting the changes You made to create that Covered Code and + the date of any change. You must include a prominent statement that + the Modification is derived, directly or indirectly, from Original + Code provided by the Initial Developer and including the name of the + Initial Developer in (a) the Source Code, and (b) in any notice in an + Executable version or related documentation in which You describe the + origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + (a) Third Party Claims. + If Contributor has knowledge that a license under a third party's + intellectual property rights is required to exercise the rights + granted by such Contributor under Sections 2.1 or 2.2, + Contributor must include a text file with the Source Code + distribution titled "LEGAL" which describes the claim and the + party making the claim in sufficient detail that a recipient will + know whom to contact. If Contributor obtains such knowledge after + the Modification is made available as described in Section 3.2, + Contributor shall promptly modify the LEGAL file in all copies + Contributor makes available thereafter and shall take other steps + (such as notifying appropriate mailing lists or newsgroups) + reasonably calculated to inform those who received the Covered + Code that new knowledge has been obtained. + + (b) Contributor APIs. + If Contributor's Modifications include an application programming + interface and Contributor has knowledge of patent licenses which + are reasonably necessary to implement that API, Contributor must + also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to + Section 3.4(a) above, Contributor believes that Contributor's + Modifications are Contributor's original creation(s) and/or + Contributor has sufficient rights to grant the rights conveyed by + this License. + + 3.5. Required Notices. + You must duplicate the notice in Exhibit A in each file of the Source + Code. If it is not possible to put such notice in a particular Source + Code file due to its structure, then You must include such notice in a + location (such as a relevant directory) where a user would be likely + to look for such a notice. If You created one or more Modification(s) + You may add your name as a Contributor to the notice described in + Exhibit A. You must also duplicate this License in any documentation + for the Source Code where You describe recipients' rights or ownership + rights relating to Covered Code. You may choose to offer, and to + charge a fee for, warranty, support, indemnity or liability + obligations to one or more recipients of Covered Code. However, You + may do so only on Your own behalf, and not on behalf of the Initial + Developer or any Contributor. You must make it absolutely clear than + any such warranty, support, indemnity or liability obligation is + offered by You alone, and You hereby agree to indemnify the Initial + Developer and every Contributor for any liability incurred by the + Initial Developer or such Contributor as a result of warranty, + support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. + You may distribute Covered Code in Executable form only if the + requirements of Section 3.1-3.5 have been met for that Covered Code, + and if You include a notice stating that the Source Code version of + the Covered Code is available under the terms of this License, + including a description of how and where You have fulfilled the + obligations of Section 3.2. The notice must be conspicuously included + in any notice in an Executable version, related documentation or + collateral in which You describe recipients' rights relating to the + Covered Code. You may distribute the Executable version of Covered + Code or ownership rights under a license of Your choice, which may + contain terms different from this License, provided that You are in + compliance with the terms of this License and that the license for the + Executable version does not attempt to limit or alter the recipient's + rights in the Source Code version from the rights set forth in this + License. If You distribute the Executable version under a different + license You must make it absolutely clear that any terms which differ + from this License are offered by You alone, not by the Initial + Developer or any Contributor. You hereby agree to indemnify the + Initial Developer and every Contributor for any liability incurred by + the Initial Developer or such Contributor as a result of any such + terms You offer. + + 3.7. Larger Works. + You may create a Larger Work by combining Covered Code with other code + not governed by the terms of this License and distribute the Larger + Work as a single product. In such a case, You must make sure the + requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Code due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description + must be included in the LEGAL file described in Section 3.4 and must + be included with all distributions of the Source Code. Except to the + extent prohibited by statute or regulation, such description must be + sufficiently detailed for a recipient of ordinary skill to be able to + understand it. + +5. Application of this License. + + This License applies to code to which the Initial Developer has + attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions. + Netscape Communications Corporation ("Netscape") may publish revised + and/or new versions of the License from time to time. Each version + will be given a distinguishing version number. + + 6.2. Effect of New Versions. + Once Covered Code has been published under a particular version of the + License, You may always continue to use it under the terms of that + version. You may also choose to use such Covered Code under the terms + of any subsequent version of the License published by Netscape. No one + other than Netscape has the right to modify the terms applicable to + Covered Code created under this License. + + 6.3. Derivative Works. + If You create or use a modified version of this License (which you may + only do in order to apply it to code which is not already Covered Code + governed by this License), You must (a) rename Your license so that + the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", + "MPL", "NPL" or any confusingly similar phrase do not appear in your + license (except to note that your license differs from this License) + and (b) otherwise make it clear that Your version of the license + contains terms which differ from the Mozilla Public License and + Netscape Public License. (Filling in the name of the Initial + Developer, Original Code or Contributor in the notice described in + Exhibit A shall not of themselves be deemed to be modifications of + this License.) + +7. DISCLAIMER OF WARRANTY. + + COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF + DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. + THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE + IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, + YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE + COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER + OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF + ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. TERMINATION. + + 8.1. This License and the rights granted hereunder will terminate + automatically if You fail to comply with terms herein and fail to cure + such breach within 30 days of becoming aware of the breach. All + sublicenses to the Covered Code which are properly granted shall + survive any termination of this License. Provisions which, by their + nature, must remain in effect beyond the termination of this License + shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement + claim (excluding declatory judgment actions) against Initial Developer + or a Contributor (the Initial Developer or Contributor against whom + You file such action is referred to as "Participant") alleging that: + + (a) such Participant's Contributor Version directly or indirectly + infringes any patent, then any and all rights granted by such + Participant to You under Sections 2.1 and/or 2.2 of this License + shall, upon 60 days notice from Participant terminate prospectively, + unless if within 60 days after receipt of notice You either: (i) + agree in writing to pay Participant a mutually agreeable reasonable + royalty for Your past and future use of Modifications made by such + Participant, or (ii) withdraw Your litigation claim with respect to + the Contributor Version against such Participant. If within 60 days + of notice, a reasonable royalty and payment arrangement are not + mutually agreed upon in writing by the parties or the litigation claim + is not withdrawn, the rights granted by Participant to You under + Sections 2.1 and/or 2.2 automatically terminate at the expiration of + the 60 day notice period specified above. + + (b) any software, hardware, or device, other than such Participant's + Contributor Version, directly or indirectly infringes any patent, then + any rights granted to You by such Participant under Sections 2.1(b) + and 2.2(b) are revoked effective as of the date You first made, used, + sold, distributed, or had made, Modifications made by that + Participant. + + 8.3. If You assert a patent infringement claim against Participant + alleging that such Participant's Contributor Version directly or + indirectly infringes any patent where such claim is resolved (such as + by license or settlement) prior to the initiation of patent + infringement litigation, then the reasonable value of the licenses + granted by such Participant under Sections 2.1 or 2.2 shall be taken + into account in determining the amount or value of any payment or + license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, + all end user license agreements (excluding distributors and resellers) + which have been validly granted by You or any distributor hereunder + prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY. + + UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT + (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL + DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, + OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR + ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY + CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, + WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER + COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN + INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF + LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY + RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW + PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE + EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO + THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. GOVERNMENT END USERS. + + The Covered Code is a "commercial item," as that term is defined in + 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer + software" and "commercial computer software documentation," as such + terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 + C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), + all U.S. Government End Users acquire Covered Code with only those + rights set forth herein. + +11. MISCELLANEOUS. + + This License represents the complete agreement concerning subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. This License shall be governed by + California law provisions (except to the extent applicable law, if + any, provides otherwise), excluding its conflict-of-law provisions. + With respect to disputes in which at least one party is a citizen of, + or an entity chartered or registered to do business in the United + States of America, any litigation relating to this License shall be + subject to the jurisdiction of the Federal Courts of the Northern + District of California, with venue lying in Santa Clara County, + California, with the losing party responsible for costs, including + without limitation, court costs and reasonable attorneys' fees and + expenses. The application of the United Nations Convention on + Contracts for the International Sale of Goods is expressly excluded. + Any law or regulation which provides that the language of a contract + shall be construed against the drafter shall not apply to this + License. + +12. RESPONSIBILITY FOR CLAIMS. + + As between Initial Developer and the Contributors, each party is + responsible for claims and damages arising, directly or indirectly, + out of its utilization of rights under this License and You agree to + work with Initial Developer and Contributors to distribute such + responsibility on an equitable basis. Nothing herein is intended or + shall be deemed to constitute any admission of liability. + +13. MULTIPLE-LICENSED CODE. + + Initial Developer may designate portions of the Covered Code as + "Multiple-Licensed". "Multiple-Licensed" means that the Initial + Developer permits you to utilize portions of the Covered Code under + Your choice of the NPL or the alternative licenses, if any, specified + by the Initial Developer in the file described in Exhibit A. + +EXHIBIT A -Mozilla Public License. + + ``The contents of this file are subject to the Mozilla Public License + Version 1.1 (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.mozilla.org/MPL/ + + Software distributed under the License is distributed on an "AS IS" + basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + License for the specific language governing rights and limitations + under the License. + + The Original Code is ___Monster_____________________________. + + The Initial Developer of the Original Code is ___VoIP INC___. + Portions created by ______________________ are Copyright (C) _2015_ + _______________________. All Rights Reserved. + + Contributor(s): __Jean-Roch Maitre____________________________. + __Maxime Roux______________________________. + __Joris Tirado______________________________. + + Alternatively, the contents of this file may be used under the terms + of the _____ license (the "[___] License"), in which case the + provisions of [______] License are applicable instead of those + above. If you wish to allow use of your version of this file only + under the terms of the [____] License and not to allow others to use + your version of this file under the MPL, indicate your decision by + deleting the provisions above and replace them with the notice and + other provisions required by the [___] License. If you do not delete + the provisions above, a recipient may use your version of this file + under either the MPL or the [___] License." + + [NOTE: The text of this Exhibit A may differ slightly from the text of + the notices in the Source Code files of the Original Code. You should + use the text of this Exhibit A rather than the text found in the + Original Code Source Code for Your Modifications.] diff --git a/README.md b/README.md index 8dced0d..7b4b7ff 100644 --- a/README.md +++ b/README.md @@ -1 +1,2 @@ -# monster-ui-registrations +Registrations application for Monster-UI + diff --git a/app.js b/app.js new file mode 100644 index 0000000..11050d8 --- /dev/null +++ b/app.js @@ -0,0 +1,580 @@ +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; +}); \ No newline at end of file diff --git a/i18n/en-US.json b/i18n/en-US.json new file mode 100644 index 0000000..20957f3 --- /dev/null +++ b/i18n/en-US.json @@ -0,0 +1,27 @@ +{ + "main": { + "search_block": "Search", + "btndetails": "Details", + "show_all": "Show All", + "save_config": "Save", + "title_config": "Options", + "header": { + "username": "Username", + "ip": "IP", + "port": "Port", + "date": "First reg", + "details": "Details", + "name": "Device", + "type": "Type", + "last_reg": "Last reg" + }, + "restart": { + "btn": "Restart selected devices", + "message_ok": "Selected devices has been restarting" + }, + "config_params": { + "animation": "Animation", + "pagination": "Count on the page" + } + } +} \ No newline at end of file diff --git a/i18n/es-ES.json b/i18n/es-ES.json new file mode 100644 index 0000000..20957f3 --- /dev/null +++ b/i18n/es-ES.json @@ -0,0 +1,27 @@ +{ + "main": { + "search_block": "Search", + "btndetails": "Details", + "show_all": "Show All", + "save_config": "Save", + "title_config": "Options", + "header": { + "username": "Username", + "ip": "IP", + "port": "Port", + "date": "First reg", + "details": "Details", + "name": "Device", + "type": "Type", + "last_reg": "Last reg" + }, + "restart": { + "btn": "Restart selected devices", + "message_ok": "Selected devices has been restarting" + }, + "config_params": { + "animation": "Animation", + "pagination": "Count on the page" + } + } +} \ No newline at end of file diff --git a/i18n/fr-FR.json b/i18n/fr-FR.json new file mode 100644 index 0000000..662722c --- /dev/null +++ b/i18n/fr-FR.json @@ -0,0 +1,27 @@ +{ + "main": { + "search_block": "Chercher", + "btndetails": "Détails", + "show_all": "Montrer Tous", + "save_config": "Сonserver", + "title_config": "Options", + "header": { + "username": "Usager", + "ip": "IP", + "port": "Port", + "date": "First reg", + "details": "Détails", + "name": "Dispositif", + "type": "Type", + "last_reg": "Last reg" + }, + "restart": { + "btn": "Redémarrez les périphériques sélectionnés", + "message_ok": "Dispositif sélectionné a été redémarrage" + }, + "config_params": { + "animation": "Animation", + "pagination": "Compter sur la page" + } + } +} \ No newline at end of file diff --git a/i18n/ru-RU.json b/i18n/ru-RU.json new file mode 100644 index 0000000..6814508 --- /dev/null +++ b/i18n/ru-RU.json @@ -0,0 +1,27 @@ +{ + "main": { + "search_block": "Поиск", + "btndetails": "Детали", + "show_all": "Показать все", + "save_config": "Сохранить", + "title_config": "Опции", + "header": { + "username": "Пользователь", + "ip": "IP", + "port": "Порт", + "date": "Первая Регистрация", + "details": "Детали", + "name": "Устройство", + "type": "Тип", + "last_reg": "Последняя регистрация" + }, + "restart": { + "btn": "Перезагрузить выбранные устройства", + "message_ok": "Выбранные устройства перезагружены" + }, + "config_params": { + "animation": "Анимация", + "pagination": "Кол-во на странице" + } + } +} \ No newline at end of file diff --git a/img/lock.png b/img/lock.png new file mode 100644 index 0000000..2d08a75 Binary files /dev/null and b/img/lock.png differ diff --git a/img/unlock.png b/img/unlock.png new file mode 100644 index 0000000..defbf7f Binary files /dev/null and b/img/unlock.png differ diff --git a/lib/clipboard.min.js b/lib/clipboard.min.js new file mode 100644 index 0000000..db23278 --- /dev/null +++ b/lib/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v1.5.9 + * https://zenorocha.github.io/clipboard.js + * + * Licensed MIT © Zeno Rocha + */ +!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else {var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Clipboard=t()}}(function(){var t,e,n;return function t(e,n,o){function r(c,s){if(!n[c]){if(!e[c]){var a="function"==typeof require&&require;if(!s&&a)return a(c,!0);if(i)return i(c,!0);var l=new Error("Cannot find module '"+c+"'");throw l.code="MODULE_NOT_FOUND",l}var u=n[c]={exports:{}};e[c][0].call(u.exports,function(t){var n=e[c][1][t];return r(n?n:t)},u,u.exports,t,e,n,o)}return n[c].exports}for(var i="function"==typeof require&&require,c=0;co;o++)n[o].fn.apply(n[o].ctx,e);return this},off:function(t,e){var n=this.e||(this.e={}),o=n[t],r=[];if(o&&e)for(var i=0,c=o.length;c>i;i++)o[i].fn!==e&&o[i].fn._!==e&&r.push(o[i]);return r.length?n[t]=r:delete n[t],this}},e.exports=o},{}],8:[function(e,n,o){!function(r,i){if("function"==typeof t&&t.amd)t(["module","select"],i);else if("undefined"!=typeof o)i(n,e("select"));else{var c={exports:{}};i(c,r.select),r.clipboardAction=c.exports}}(this,function(t,e){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}var r=n(e),i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol?"symbol":typeof t},c=function(){function t(t,e){for(var n=0;n +
+ + +
+
+
+
+
+
+
+ +
+
+
+
+
+ +
+
{{i18n.main.header.type}}
+
{{i18n.main.header.name}}
+
{{i18n.main.header.username}}
+
{{i18n.main.header.last_reg}}
+
{{i18n.main.header.date}}
+
{{i18n.main.header.details}}
+
+ +
+
+ +
+
+
+ \ No newline at end of file diff --git a/views/config-params.html b/views/config-params.html new file mode 100644 index 0000000..b05ff2f --- /dev/null +++ b/views/config-params.html @@ -0,0 +1,13 @@ +
+ {{#if this.animation}} + + {{/if}} + {{#if this.pagination}} + + {{/if}} +
{{i18n.main.save_config}}
+
\ No newline at end of file diff --git a/views/paginate.html b/views/paginate.html new file mode 100644 index 0000000..f11a85d --- /dev/null +++ b/views/paginate.html @@ -0,0 +1,7 @@ +
+{{#each this}} + {{#if page}} +
{{page}}
+ {{/if}} +{{/each}} +
\ No newline at end of file diff --git a/views/search-result.html b/views/search-result.html new file mode 100644 index 0000000..de82359 --- /dev/null +++ b/views/search-result.html @@ -0,0 +1,6 @@ +
{{i18n.main.show_all}}
+{{#each this}} + {{#if date}} +
{{date}}
{{username}}
+ {{/if}} +{{/each}} \ No newline at end of file diff --git a/views/table-body.html b/views/table-body.html new file mode 100644 index 0000000..38c6045 --- /dev/null +++ b/views/table-body.html @@ -0,0 +1,41 @@ +{{#each this}} + {{#if from_user}} +
+
+ +
+ +
+ +
+ {{#if name}}{{name}}{{else}}Device not found{{/if}} +
+ +
+ {{username}} +
+ +
+ {{datetime_last_registration}} +
+ +
+ {{datetime}} +
+ +
+ + +
+					{{#each this}}
+						{{@key}}:	{{#if this}}{{this}}{{else}}false{{/if}}
+ {{/each}} +
+
+
+ {{/if}} +{{/each}} +
+
{{i18n.main.restart.message_ok}}
+ {{i18n.main.restart.btn}} +
\ No newline at end of file