| @ -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> | |||||