| @ -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.] | |||
| @ -1 +1,2 @@ | |||
| # monster-ui-registrations | |||
| Registrations application for Monster-UI | |||
| @ -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; | |||
| }); | |||
| @ -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" | |||
| } | |||
| } | |||
| } | |||
| @ -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" | |||
| } | |||
| } | |||
| } | |||
| @ -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" | |||
| } | |||
| } | |||
| } | |||
| @ -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": "Кол-во на странице" | |||
| } | |||
| } | |||
| } | |||
| @ -0,0 +1,38 @@ | |||
| { | |||
| "name": "registrations", | |||
| "i18n": { | |||
| "ru-RU": { | |||
| "label": "Registrations", | |||
| "description": "Приложение, позволяющее следить за регистрациями." | |||
| }, | |||
| "en-US": { | |||
| "label": "Registrations", | |||
| "description": "Registrations allows you to monitor the registration logs." | |||
| }, | |||
| "en-EN": { | |||
| "label": "Registrations", | |||
| "description": "Registrations allows you to monitor the registration logs." | |||
| } | |||
| }, | |||
| "tags": [ | |||
| "developer" | |||
| ], | |||
| "icon": "registrations.png", | |||
| "api_url": "", | |||
| "author": "SIPLABS LLC", | |||
| "version": "1.0", | |||
| "license": "-", | |||
| "price": 0, | |||
| "screenshots": [ | |||
| "registrations1.png", | |||
| "registrations2.png", | |||
| "registrations3.png", | |||
| "registrations4.png", | |||
| "registrations5.png" | |||
| ], | |||
| "urls": { | |||
| "documentation": "{documentation_url}", | |||
| "howto": "{howto_video_url}" | |||
| }, | |||
| "pvt_type": "app" | |||
| } | |||
| @ -0,0 +1,393 @@ | |||
| .appcont { | |||
| width: 90%; | |||
| margin: 0 auto; | |||
| padding-top: 20px; | |||
| font-size: 115%; | |||
| color: #333; | |||
| font-family: 'Source Sans Pro', Helvetica, sans-serif; | |||
| box-sizing: border-box; | |||
| } | |||
| .appcont__left { | |||
| position: relative; | |||
| float: left; | |||
| width: 19%; | |||
| min-width: 180px; | |||
| box-sizing: border-box; | |||
| } | |||
| .appcont__right { | |||
| overflow: hidden; | |||
| padding-left: 2%; | |||
| box-sizing: border-box; | |||
| } | |||
| .appcont__content { | |||
| box-sizing: border-box; | |||
| } | |||
| .search { | |||
| font-size: 1em; | |||
| border: 1px solid #dcdcdc; | |||
| border-radius: 2px; | |||
| overflow: hidden; | |||
| box-sizing: border-box; | |||
| } | |||
| .search__text { | |||
| width: 100%; | |||
| display: inline-block; | |||
| line-height: 2em; | |||
| height: 2em; | |||
| outline: none; | |||
| padding: 0 12px; | |||
| font-size: 1.2em; | |||
| color: #555; | |||
| border: none; | |||
| border-bottom: 1px solid #dcdcdc; | |||
| box-sizing: border-box; | |||
| } | |||
| .search__text:focus { | |||
| box-shadow: 0px 0px 8px -2px #2255ff inset; | |||
| } | |||
| .search__icon { | |||
| position: absolute; | |||
| color: #aaa; | |||
| right: 14px; | |||
| font-size: 14px; | |||
| margin-top: 12px; | |||
| box-sizing: border-box; | |||
| } | |||
| .search__result { | |||
| box-sizing: border-box; | |||
| } | |||
| .search__item, | |||
| .showall { | |||
| position: relative; | |||
| padding: 2px 12px; | |||
| color: #333; | |||
| cursor: pointer; | |||
| background-color: #f1f3f4; | |||
| border: none; | |||
| border-bottom: 1px solid #bbbbbb; | |||
| display: block; | |||
| line-height: 1.8em; | |||
| } | |||
| .search__item:last-child { | |||
| border-bottom: none; | |||
| } | |||
| .search__item-active { | |||
| box-shadow: 0px 0px 8px -2px #2255ff inset; | |||
| } | |||
| .search__user { | |||
| position: absolute; | |||
| right: 12px; | |||
| top: 0.3em; | |||
| text-align: right; | |||
| border: none; | |||
| padding: 0; | |||
| width: 110px; | |||
| overflow: hidden; | |||
| text-overflow: ellipsis; | |||
| white-space: nowrap; | |||
| font-size: 0.8em; | |||
| color: #666; | |||
| } | |||
| .showall { | |||
| font-weight: bold; | |||
| display: none; | |||
| } | |||
| .registrations .table { | |||
| border: 1px solid #999; | |||
| border-radius: 8px; | |||
| overflow: hidden; | |||
| box-sizing: border-box; | |||
| margin: 0; | |||
| } | |||
| .registrations .table__head { | |||
| font-size: 1.2em; | |||
| line-height: 2em; | |||
| text-align: center; | |||
| border-bottom: 1px solid #999; | |||
| box-sizing: border-box; | |||
| top: 0; | |||
| } | |||
| .registrations .table__th { | |||
| position: relative; | |||
| width: 18%; | |||
| display: inline; | |||
| display: inline-block; | |||
| text-overflow: ellipsis; | |||
| white-space: nowrap; | |||
| cursor: pointer; | |||
| background-image: linear-gradient(#d6d6d6 0%, #f5f5f5 100%); | |||
| box-sizing: border-box; | |||
| } | |||
| .registrations .table__th-hover, | |||
| .registrations .table__th-active { | |||
| color: #25f; | |||
| } | |||
| .registrations .table__th:after { | |||
| position: absolute; | |||
| right: 4px; | |||
| top: 45%; | |||
| content: ""; | |||
| border: .3em solid transparent; | |||
| border-top: 0.4em solid rgba(0, 0, 0, 0.6); | |||
| } | |||
| .registrations .table__th-hover:after, | |||
| .registrations .table__th-active:after { | |||
| border-top-color: #25f; | |||
| } | |||
| .registrations .table__th-details:after { | |||
| display: none; | |||
| } | |||
| .registrations .table__th-check:after { | |||
| display: none; | |||
| } | |||
| .registrations .table__th-reverse:after { | |||
| top: 30%; | |||
| border: .3em solid transparent; | |||
| border-bottom: 0.4em solid #25f; | |||
| } | |||
| .registrations .table__th-check { | |||
| width: 5%; | |||
| } | |||
| .registrations .table__th-type { | |||
| width: 12%; | |||
| } | |||
| .registrations .table__th-details { | |||
| width: 11%; | |||
| } | |||
| .registrations .table__body { | |||
| line-height: 1.8em; | |||
| box-sizing: border-box; | |||
| } | |||
| .registrations .table__tr { | |||
| border-bottom: 1px solid #999; | |||
| box-sizing: border-box; | |||
| } | |||
| .registrations .table__td { | |||
| width: 18%; | |||
| display: inline; | |||
| display: inline-block; | |||
| text-overflow: ellipsis; | |||
| background-color: #cacfda; | |||
| white-space: nowrap; | |||
| padding-left: 12px; | |||
| padding-bottom: 4px; | |||
| border-right: 1px solid #999; | |||
| box-sizing: border-box; | |||
| } | |||
| .registrations .table__td-check { | |||
| width: 5%; | |||
| text-align: center; | |||
| padding-left: 0; | |||
| } | |||
| .input-check { | |||
| outline: none !important; | |||
| } | |||
| .registrations .table__td-port { | |||
| width: 8%; | |||
| } | |||
| .registrations .table__td-type { | |||
| width: 12%; | |||
| text-align: center; | |||
| padding-left: 0; | |||
| } | |||
| .registrations .table__td-details { | |||
| width: 11%; | |||
| text-align: center; | |||
| padding-left: 0; | |||
| border-right: none; | |||
| } | |||
| .registrations .table__tr:nth-last-child(1) { | |||
| border-bottom: 0px; | |||
| } | |||
| .registrations .table__tr:nth-last-child(2) { | |||
| border-bottom-width: 0px; | |||
| } | |||
| .registrations .table__tr:nth-child(2n) .table__td { | |||
| background-color: #f1f3f4; | |||
| } | |||
| .registrations .table__tr .table__td-name { | |||
| color: #e24; | |||
| } | |||
| .registrations .table__tr-enabled .table__td-name { | |||
| color: #2b4; | |||
| } | |||
| .details { | |||
| display: none; | |||
| width: 100%; | |||
| max-height: 320px; | |||
| overflow-y: scroll; | |||
| overflow-x: hidden; | |||
| padding: 12px 20px; | |||
| -moz-tab-size: 30; | |||
| -o-tab-size: 30; | |||
| tab-size: 30; | |||
| border: none; | |||
| border-width: 0px; | |||
| margin: 0 !important; | |||
| background-color: #f1f3f4; | |||
| box-sizing: border-box; | |||
| } | |||
| .details__item { | |||
| margin-bottom: 6px; | |||
| display: inline-block; | |||
| line-height: 1em; | |||
| } | |||
| .ui-dialog .details { | |||
| display: block; | |||
| } | |||
| .btn-details { | |||
| margin: auto; | |||
| padding: 0; | |||
| width: 84%; | |||
| } | |||
| .btn-restart { | |||
| margin: auto; | |||
| padding: 4px 1rem; | |||
| font-size: 1rem; | |||
| } | |||
| .table__tr-restart { | |||
| display: none; | |||
| text-align: center; | |||
| padding: 8px 16px 10px; | |||
| } | |||
| .restart-message { | |||
| position: absolute; | |||
| padding: 2px 1rem; | |||
| background-color: rgba(0, 0, 0, 0.6); | |||
| border-radius: 4px; | |||
| font-size: 1rem; | |||
| color: #eee; | |||
| display: none; | |||
| } | |||
| .paginate { | |||
| width: 100%; | |||
| position: relative; | |||
| height: 34px; | |||
| padding: 4px 0; | |||
| margin-top: 16px; | |||
| margin-bottom: 60px; | |||
| border: 1px solid #b2b2b2; | |||
| text-align: center; | |||
| color: #fff; | |||
| background-color: #999; | |||
| background-image: -moz-linear-gradient(top, #b2b2b2, #d2d2d2); | |||
| background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b2b2b2), to(#d2d2d2)); | |||
| background-image: -webkit-linear-gradient(top, #b2b2b2, #d2d2d2); | |||
| background-image: -o-linear-gradient(top, #b2b2b2, #d2d2d2); | |||
| background-image: linear-gradient(to bottom, #b2b2b2, #d2d2d2); | |||
| background-repeat: repeat-x; | |||
| filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffb2b2b2', endColorstr='#ffd2d2d2', GradientType=0); | |||
| filter: progid:DXImageTransform.Microsoft.gradient(enabled=false); | |||
| -webkit-border-radius: 4px; | |||
| border-radius: 4px; | |||
| box-shadow: none; | |||
| -webkit-box-sizing: border-box; | |||
| -moz-box-sizing: border-box; | |||
| box-sizing: border-box; | |||
| } | |||
| .paginate__item { | |||
| display: inline-block; | |||
| cursor: pointer; | |||
| font-size: 1.2em; | |||
| -webkit-border-radius: 4px; | |||
| border-radius: 4px; | |||
| margin: 0 0.1em; | |||
| padding: 0 0.6em; | |||
| line-height: 20px; | |||
| height: 26px; | |||
| border: 2px solid transparent; | |||
| text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); | |||
| -webkit-box-sizing: border-box; | |||
| -moz-box-sizing: border-box; | |||
| box-sizing: border-box; | |||
| } | |||
| .paginate__left:active, | |||
| .paginate__right:active, | |||
| .paginate__item:active, | |||
| .paginate__item-current { | |||
| border-color: #adadad; | |||
| border-top-width: 1px; | |||
| padding-top: 1px; | |||
| } | |||
| .paginate__left:hover, | |||
| .paginate__right:hover, | |||
| .paginate__item:not(.paginate__item-current):hover { | |||
| border-color: #c2c2c2; | |||
| } | |||
| .paginate__left, | |||
| .paginate__right { | |||
| position: absolute; | |||
| display: inline-block; | |||
| font-size: 1.4em; | |||
| padding: 0 0.6em; | |||
| line-height: 20px; | |||
| height: 26px; | |||
| border: 2px solid transparent; | |||
| margin-top: auto; | |||
| margin-bottom: auto; | |||
| text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.3); | |||
| -webkit-border-radius: 4px; | |||
| border-radius: 4px; | |||
| cursor: pointer; | |||
| -webkit-box-sizing: border-box; | |||
| -moz-box-sizing: border-box; | |||
| box-sizing: border-box; | |||
| } | |||
| .paginate__left { | |||
| left: 4px; | |||
| } | |||
| .paginate__right { | |||
| right: 4px; | |||
| } | |||
| .buffer { | |||
| position: relative; | |||
| height: 34px; | |||
| margin-top: 16px; | |||
| } | |||
| .boxbtn { | |||
| width: 100%; | |||
| max-width: 100%; | |||
| position: static; | |||
| clear: both; | |||
| top: 16px; | |||
| } | |||
| .boxbtn__item { | |||
| width: 45%; | |||
| padding-top: 8px; | |||
| padding-bottom: 8px; | |||
| border: 1px solid #dcdcdc; | |||
| color: #444; | |||
| display: inline-block; | |||
| -webkit-box-sizing: border-box; | |||
| -moz-box-sizing: border-box; | |||
| box-sizing: border-box; | |||
| } | |||
| .config { | |||
| margin-right: 10%; | |||
| } | |||
| .boxconfig { | |||
| width: 100%; | |||
| padding: 20px 30px; | |||
| font-size: 16px; | |||
| -webkit-box-sizing: border-box; | |||
| -moz-box-sizing: border-box; | |||
| box-sizing: border-box; | |||
| } | |||
| .boxconfig__label { | |||
| font-size: 18px; | |||
| font-weight: 500; | |||
| } | |||
| .boxconfig__save { | |||
| display: block; | |||
| width: 120px; | |||
| margin: 24px auto 0px; | |||
| } | |||
| .boxconfig__item { | |||
| vertical-align: top; | |||
| margin-left: 10px !important; | |||
| margin-top: 5px !important; | |||
| outline: none !important; | |||
| } | |||
| .boxconfig__item-text { | |||
| width: 100px; | |||
| } | |||
| @ -0,0 +1 @@ | |||
| {"version":3,"sources":["app.css"],"names":[],"mappings":"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","file":"app.css"} | |||
| @ -0,0 +1,39 @@ | |||
| <div id="registrations" class="clearfix appcont registrations"> | |||
| <div class="appcont__left"> | |||
| <div class="search"> | |||
| <input id="search__text" class="search__text" tabindex="1" maxlength="20" placeholder="{{i18n.main.search_block}}" /> | |||
| <i class="fa fa-search search__icon"></i> | |||
| <div class="search__result"></div> | |||
| </div> | |||
| <div class="buffer"> | |||
| <div class="boxbtn"> | |||
| <div class="boxbtn__item config btn fa fa-cog"></div> | |||
| <div class="boxbtn__item up btn fa fa-chevron-up"></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| <div class="appcont__right"> | |||
| <div class="appcont__content"> | |||
| <div class="table"> | |||
| <div class="table__head"> | |||
| <div title="Click for change all" class="table__th table__th-check"> | |||
| <input id="all_checked" class="input-check" type="checkbox" /> | |||
| </div> | |||
| <div title="Click for sorting" data-sort="type" class="table__th table__th-type">{{i18n.main.header.type}}</div> | |||
| <div title="Click for sorting" data-sort="name" class="table__th">{{i18n.main.header.name}}</div> | |||
| <div title="Click for sorting" data-sort="username" class="table__th">{{i18n.main.header.username}}</div> | |||
| <div title="Click for sorting" data-sort="last_registration" class="table__th">{{i18n.main.header.last_reg}}</div> | |||
| <div title="Click for sorting" data-sort="initial_registration" class="table__th">{{i18n.main.header.date}}</div> | |||
| <div class="table__th table__th-details">{{i18n.main.header.details}}</div> | |||
| </div> | |||
| <div class="table__body"></div> | |||
| </div> | |||
| <div class="paginate"></div> | |||
| </div> | |||
| </div> | |||
| </div> | |||
| @ -0,0 +1,13 @@ | |||
| <div class="boxconfig"> | |||
| {{#if this.animation}} | |||
| <label class="boxconfig__label" for="boxconfig__animation">{{animation.label}}: | |||
| <input type="checkbox" id="boxconfig__animation" class="boxconfig__item" {{animation.animation_checked}} /> | |||
| </label> | |||
| {{/if}} | |||
| {{#if this.pagination}} | |||
| <label class="boxconfig__label" for="boxconfig__pagination">{{pagination.label}}: | |||
| <input type="number" placeholder="{{pagination.label}}" id="boxconfig__pagination" class="boxconfig__item boxconfig__item-text" value="{{pagination.default_count}}" /> | |||
| </label> | |||
| {{/if}} | |||
| <div class="btn btn-success boxconfig__save">{{i18n.main.save_config}}</div> | |||
| </div> | |||
| @ -0,0 +1,7 @@ | |||
| <div class="paginate__left fa fa-angle-double-left"></div> | |||
| {{#each this}} | |||
| {{#if page}} | |||
| <div class="paginate__item{{#if current}} paginate__item-current{{/if}}" data-page="{{page}}">{{page}}</div> | |||
| {{/if}} | |||
| {{/each}} | |||
| <div class="paginate__right fa fa-angle-double-right"></div> | |||
| @ -0,0 +1,6 @@ | |||
| <div class="showall">{{i18n.main.show_all}}</div> | |||
| {{#each this}} | |||
| {{#if date}} | |||
| <div class="search__item" data-callid="{{call_id}}">{{date}}<div class="search__user">{{username}}</div></div> | |||
| {{/if}} | |||
| {{/each}} | |||
| @ -0,0 +1,41 @@ | |||
| {{#each this}} | |||
| {{#if from_user}} | |||
| <div class="table__tr {{#if enabled}}table__tr-enabled{{/if}}" data-id="{{id}}" data-callid="{{call_id}}"> | |||
| <div class="table__td table__td-check"> | |||
| <input class="input-check" type="checkbox" /> | |||
| </div> | |||
| <div class="table__td table__td-type" title="Type: {{type}}" data-type="{{type}}"></div> | |||
| <div class="table__td table__td-name" title="{{name}} is {{#if enabled}}enabled{{else}}disabled{{/if}}"> | |||
| {{#if name}}{{name}}{{else}}Device not found{{/if}} | |||
| </div> | |||
| <div class="table__td table__td-username"> | |||
| {{username}} | |||
| </div> | |||
| <div class="table__td table__td-last_reg"> | |||
| {{datetime_last_registration}} | |||
| </div> | |||
| <div class="table__td table__td-date"> | |||
| {{datetime}} | |||
| </div> | |||
| <div class="table__td table__td-details"> | |||
| <span class="btn btn-details btn-info"></span> | |||
| <pre class="details"> | |||
| {{#each this}} | |||
| <span class="details__item">{{@key}}:	{{#if this}}{{this}}{{else}}false{{/if}}</span><br/> | |||
| {{/each}} | |||
| </pre> | |||
| </div> | |||
| </div> | |||
| {{/if}} | |||
| {{/each}} | |||
| <div class="table__tr table__tr-restart"> | |||
| <div class="restart-message">{{i18n.main.restart.message_ok}}</div> | |||
| <span class="btn btn-restart btn-info">{{i18n.main.restart.btn}}</span> | |||
| </div> | |||