commit 0fab2c8049713a6b6c55793a324781ab39153912 Author: Marcos Elias Rios Nuñez Date: Sat Oct 26 21:50:44 2019 -0300 Initial commit 26/10/2019 diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..7bb92e5 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,24 @@ +EMA Libre Ronsoco nace en el 2018 de la formulación de un proyecto de Investigación, +y es parte de un conjunto de tres sistema EMA Libre Carpincho, EMA Libre Center +y EMA Liber Visor. + +Desarrollado por el Laboratorio de Investigación Gugler perteneciente a la Facultad +de Ciencia y Tecnología de la Universidad Autónoma de Entre Ríos. A continuación +se detalla la lista de colaboradores y desarrolladores: + + Exequiel Aramburu . + Mario Martin Sbarbaro . + José Luis Mengarelli . + Lic. Federico Bonnet . + Alexis Sostersich . + Marcos Elias Rios Nuñez . + +Se agradece a la Facultad de Ciencia y Tecnología de la Universidad Autónoma de Entre Ríos +por permitir la conformación de este equipo interdisciplinario de profesionales y alumnos +colaboradores. Para llevar acabo una investigación de esta magnitud, permitiendo mostrar +las cualidades y bondades del Software Libre. + +Finalmente, no se solicito declaración de renuncia de copyright a la facultad, ya que por Medio +de la Resolución CS Nº 063/18, el Consejo Directivo de la Facultad de Ciencia y Tecnología +de la Universidad Autónoma de Entre Ríos, aprueba el proyecto Investigación, el cual especifica +que el software utilizara una licencia libre. diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..4d76368 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,43 @@ +** Versión 1.5: (Septiembre 7, 2019) + ++ Se adecuan los máximos y mínimos. ++ Se incorporan la seleccion automatica de estaciones, si se encuentra fuera de linea. ++ Se agrega la posibilidad de descargar Carpincho Web. ++ Cambios visuales varios. + +** Versión 1.4: (Mayo 7, 2019) + ++ Se incorporan los máximos y mínimos. ++ Se incorporan la humedad y temperatura con nuevo div. ++ Se modifica la pagina principal. ++ Se modifica el pie de pagina que indicado la version de EMA Visor. ++ Se incorpora CHANGELOG (cambios), AUTHORS (Autores) y COPYING (licencia). ++ Se incorpora el pie de pagina que indicado la version de EMA Visor. + +** Versión 1.3: (Abril 19, 2019) + ++ Modificaciones en el contenido del menu de descargas. ++ Modificaciones en el contenido del menu de red. ++ Modificaciones en el contenido del menu de Acerca de. + +** Versión 1.2: (Marzo 20, 2019) + ++ Añadimos Datatable para observaciones meteorológicas de datos en periodos ++ Añadimos descargar copy y csv ++ Añadimos seleccion de estaciones diferentes ++ Añadimos fuentes (Fonts) nuevas + +** Versión 1.1: (Febrero 19, 2019) + ++ Presentacion del diseño del visor ++ Añadimos graficos a los datos mostrados ++ Añadimos busqueda por geolocalizacion de estaciones cercanas ++ Modificacion de vistas para celulares y tablets + +** Versión 1.0: (Julio 18, 2018) + ++ Primera lectura de datos (API) ++ Revelación del diseño preliminar de Visor + + + diff --git a/COPYING b/COPYING new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100755 index 0000000..5eaefbc --- /dev/null +++ b/README.md @@ -0,0 +1,76 @@ +# Ema Libre - Visor (Ronsoco) + +[![N|Solid](https://ema.gugler.com.ar/imgs/icono_inicio.png)](https://ema.gugler.com.ar/) + +[![Build Status](https://travis-ci.org/joemccann/dillinger.svg?branch=master)](https://travis-ci.org/joemccann/dillinger) + +> EMA Libre es un proyecto de software libre mantenido y desarrollado por el Laboratorio de Investigación GUGLER perteneciente a la Facultad de Ciencia y Tecnología de la Universidad Autónoma de Entre Ríos, además participan colaboradores y becados pertenecientes a la misma universidad, como así también asesores externos. +Este proyecto consiste en el desarrollo de un conjunto de sistemas o módulos libres, que decidimos licenciar bajo la licencia GPLv3. Cada uno de estos módulos resuelven los tres aspectos fundamentales: la captura y envió de datos meteorológicos de estaciones automáticas, el almacenamiento y validación de los mencionados datos y por último el procesamiento y publicación. Los tres sistemas están complementados entre sí, haciendo que cada parte de este proyecto sea igual de importante. + + - EMA Center (Capibara): tiene como objetivo validar, catalogar y almacenar en una base de datos información meteorológica recibida por cualquier software que implemente su API REST publica, permitiendo de esta forma crear una Red EMA Libre (Red de Estaciones Meteorológicas Automáticas Libre). Es importante destacar que Ema Center almacena datos que son enviados principalmente por nuestro software oficial cliente “Ema Libre Carpincho”, pero nada le impide a una aplicación de un tercero utilizar esta API REST para enviarle información a EMA Center, ya que esta API es publica y libre. + + - EMA Cliente (Carpincho): tiene el objetivo de recolectar, registrar y publicar información meteorológica. Los datos son obtenidos a través de los diferentes sensores de una estación USB compatible, para así enviarlos a “Capibara” para ser validados y almacenados. Carpincho puede operar en modo "Recolector", realizando la tarea antes descripta, u operar en modo "Visor", sin la necesidad de contar con una estación meteorológica, donde se convierte un visualizador de información meteorológica obtenida desde una estación de Ema Center a través de una llave de lectura. + + - EMA Visor (Ronsoco): Es la actual página web. Se denomina visor, ya que en ella podremos visualizar datos de cualquier estación y sus registro en tiempo real, de una manera agradable y ágil, solamente se configura en Ronsoco la Url/IP de un servidor EMA Libre Center, del cual obtendrá la información. + +# Nuevas caracteristicas ! + ++ Se incorporan los maximos y minimos. ++ Se incorporan la humedad y temperatura con nuevo div. ++ Se modifica la pagina principal. ++ Se modifica el pie de pagina que indicado la version de EMA Visor. ++ Se incorpora CHANGELOG (cambios), AUTHORS (Autores) y COPYING (licencia). ++ Se incorpora el pie de pagina que indicado la version de EMA Visor. + +## Versión actual 1.4 : (Mayo 7, 2019) +#### ¿Porque iniciamos el proyecto? +>Decidimos encarar este proyecto, por diversas razones, una de ellas es que la información meteorológica en la actualidad es una de las herramientas más importantes para la toma de decisiones, tanto en las actividades agropecuarias, turísticas, de transporte y hasta la protección de la salud se ven beneficiadas con la misma, entre otras tantas aplicaciones. +Pero, la principal motivación y justificación para el desarrollo de este proyecto es que en la actualidad no se cuenta con un software integral que permita no solo recolectar, sino almacenar y visualizar eficientemente los datos recabados por múltiples estaciones meteorológicas, y que la licencia del software no posea restricciones de uso, distribución, modificación y análisis. +Por ello, es que decimos adaptar y desarrollar software, con licencias libres y crear EMA Libre, así cualquier persona u organismo pueda descargar y hacer uso, y si quisiera podría modificar el modo de operar EMA o proveer alguna nueva funcionalidad que le de valor agregado al producto ya definido. + +#### Equipo de Desarrollo: +##### A continuación se detalla la lista de colaboradores y desarrolladores: +|Integrante del Equipo|Email Contacto| +| ------ | ------ | +|Exequiel Aramburu|exequiel@gugler.com.ar +|Mario Martin Sbarbaro|martin@gugler.com.ar +|Federico Bonnet|federico@gugler.com.ar +|José Luis Mengarelli |jlmenga@gugler.com.ar +|Alexis Sostersich |alexis@gugler.com.ar +|Marcos Elias Rios Nuñez |marcos@gugler.com.ar + +#### Agradecimientos +>Se agradece a la Facultad de Ciencia y Tecnología de la Universidad Autónoma de Entre Ríos por permitir la conformación de este equipo interdisciplinario de profesionales y alumnos colaboradores, y llevar a cabo una investigación de esta magnitud, permitiendo mostrar las cualidades y bondades del Software Libre. +Finalmente, no se solicito declaración de renuncia de copyright a la facultad, ya que por Medio +de la Resolución CS Nº 063/18, el Consejo Directivo de la Facultad de Ciencia y Tecnología +de la Universidad Autónoma de Entre Ríos, aprueba el proyecto Investigación, el cual especifica +que el software utilizara una licencia libre. + +### Contactanos +>Si deseas realizar consultas, sugerencias o simplemente tenes alguna duda sobre nuestros productos/servicios, podes comunicarte con nosotros a través de los siguientes medios oficiales: + Telefono: (+54 343) - 4975044 - Interno 119 + Correo Electronico: contacto@gugler.com.ar + Sitio Oficial: https://www.gugler.com.ar + +| Fremworks/Tecnología | Versión |Licencia| +| ------ | ------ |-------------------| +| Font Awesome Free| 5.6.1|MIT +| Animate.css | 3.7.0 |MIT +| Axios |0.18.0|MIT +| Bootstrap|4.0.0 |MIT +| DataTables |1.10.18 |MIT +| Easy-autocomplete |1.3.5 |MIT +| Gauge|2.1.5|MIT +| jQuery|3.3.1|MIT +| Notify.js|3.1.3|MIT +| Popper|1|MIT +| Vue.js|2.5.18|MIT + +## URLs del proyecto + +* [Servidor/Recolector de datos](https://emacenter.gugler.com.ar/ "EmaCenter") +* [Visor de datos via web](https://ema.gugler.com.ar/ "EmaVisor") + + +[![N|Solid](https://ema.gugler.com.ar/imgs/LogoLGPLv3-mobile.png)](https://www.gnu.org/licenses/gpl-3.0.en.html) +[![N|Solid](https://ema.gugler.com.ar/imgs/logo_gugler_lab-mobile.png)](https://www.gugler.com.ar)[![N|Solid](https://ema.gugler.com.ar/imgs/logo_uader_mini-mobile.png)](http://fcyt.uader.edu.ar/web/) \ No newline at end of file diff --git a/css/all.css b/css/all.css new file mode 100644 index 0000000..ed9d553 --- /dev/null +++ b/css/all.css @@ -0,0 +1,4224 @@ +/*! + * Font Awesome Free 5.6.1 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa, +.fab, +.fal, +.far, +.fas { + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + display: inline-block; + font-style: normal; + font-variant: normal; + text-rendering: auto; + line-height: 1; +} +.fa-lg { + font-size: 1.33333em; + line-height: 0.75em; + vertical-align: -0.0667em; +} +.fa-xs { + font-size: 0.75em; +} +.fa-sm { + font-size: 0.875em; +} +.fa-1x { + font-size: 1em; +} +.fa-2x { + font-size: 2em; +} +.fa-3x { + font-size: 3em; +} +.fa-4x { + font-size: 4em; +} +.fa-5x { + font-size: 5em; +} +.fa-6x { + font-size: 6em; +} +.fa-7x { + font-size: 7em; +} +.fa-8x { + font-size: 8em; +} +.fa-9x { + font-size: 9em; +} +.fa-10x { + font-size: 10em; +} +.fa-fw { + text-align: center; + width: 1.25em; +} +.fa-ul { + list-style-type: none; + margin-left: 2.5em; + padding-left: 0; +} +.fa-ul > li { + position: relative; +} +.fa-li { + left: -2em; + position: absolute; + text-align: center; + width: 2em; + line-height: inherit; +} +.fa-border { + border: 0.08em solid #eee; + border-radius: 0.1em; + padding: 0.2em 0.25em 0.15em; +} +.fa-pull-left { + float: left; +} +.fa-pull-right { + float: right; +} +.fa.fa-pull-left, +.fab.fa-pull-left, +.fal.fa-pull-left, +.far.fa-pull-left, +.fas.fa-pull-left { + margin-right: 0.3em; +} +.fa.fa-pull-right, +.fab.fa-pull-right, +.fal.fa-pull-right, +.far.fa-pull-right, +.fas.fa-pull-right { + margin-left: 0.3em; +} +.fa-spin { + animation: fa-spin 2s infinite linear; +} +.fa-pulse { + animation: fa-spin 1s infinite steps(8); +} +@keyframes fa-spin { + 0% { + transform: rotate(0deg); + } + to { + transform: rotate(1turn); + } +} +.fa-rotate-90 { + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=1)'; + transform: rotate(90deg); +} +.fa-rotate-180 { + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2)'; + transform: rotate(180deg); +} +.fa-rotate-270 { + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=3)'; + transform: rotate(270deg); +} +.fa-flip-horizontal { + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)'; + transform: scaleX(-1); +} +.fa-flip-vertical { + transform: scaleY(-1); +} +.fa-flip-horizontal.fa-flip-vertical, +.fa-flip-vertical { + -ms-filter: 'progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)'; +} +.fa-flip-horizontal.fa-flip-vertical { + transform: scale(-1); +} +:root .fa-flip-horizontal, +:root .fa-flip-vertical, +:root .fa-rotate-90, +:root .fa-rotate-180, +:root .fa-rotate-270 { + filter: none; +} +.fa-stack { + display: inline-block; + height: 2em; + line-height: 2em; + position: relative; + vertical-align: middle; + width: 2.5em; +} +.fa-stack-1x, +.fa-stack-2x { + left: 0; + position: absolute; + text-align: center; + width: 100%; +} +.fa-stack-1x { + line-height: inherit; +} +.fa-stack-2x { + font-size: 2em; +} +.fa-inverse { + color: #fff; +} +.fa-500px:before { + content: '\f26e'; +} +.fa-accessible-icon:before { + content: '\f368'; +} +.fa-accusoft:before { + content: '\f369'; +} +.fa-acquisitions-incorporated:before { + content: '\f6af'; +} +.fa-ad:before { + content: '\f641'; +} +.fa-address-book:before { + content: '\f2b9'; +} +.fa-address-card:before { + content: '\f2bb'; +} +.fa-adjust:before { + content: '\f042'; +} +.fa-adn:before { + content: '\f170'; +} +.fa-adobe:before { + content: '\f778'; +} +.fa-adversal:before { + content: '\f36a'; +} +.fa-affiliatetheme:before { + content: '\f36b'; +} +.fa-air-freshener:before { + content: '\f5d0'; +} +.fa-algolia:before { + content: '\f36c'; +} +.fa-align-center:before { + content: '\f037'; +} +.fa-align-justify:before { + content: '\f039'; +} +.fa-align-left:before { + content: '\f036'; +} +.fa-align-right:before { + content: '\f038'; +} +.fa-alipay:before { + content: '\f642'; +} +.fa-allergies:before { + content: '\f461'; +} +.fa-amazon:before { + content: '\f270'; +} +.fa-amazon-pay:before { + content: '\f42c'; +} +.fa-ambulance:before { + content: '\f0f9'; +} +.fa-american-sign-language-interpreting:before { + content: '\f2a3'; +} +.fa-amilia:before { + content: '\f36d'; +} +.fa-anchor:before { + content: '\f13d'; +} +.fa-android:before { + content: '\f17b'; +} +.fa-angellist:before { + content: '\f209'; +} +.fa-angle-double-down:before { + content: '\f103'; +} +.fa-angle-double-left:before { + content: '\f100'; +} +.fa-angle-double-right:before { + content: '\f101'; +} +.fa-angle-double-up:before { + content: '\f102'; +} +.fa-angle-down:before { + content: '\f107'; +} +.fa-angle-left:before { + content: '\f104'; +} +.fa-angle-right:before { + content: '\f105'; +} +.fa-angle-up:before { + content: '\f106'; +} +.fa-angry:before { + content: '\f556'; +} +.fa-angrycreative:before { + content: '\f36e'; +} +.fa-angular:before { + content: '\f420'; +} +.fa-ankh:before { + content: '\f644'; +} +.fa-app-store:before { + content: '\f36f'; +} +.fa-app-store-ios:before { + content: '\f370'; +} +.fa-apper:before { + content: '\f371'; +} +.fa-apple:before { + content: '\f179'; +} +.fa-apple-alt:before { + content: '\f5d1'; +} +.fa-apple-pay:before { + content: '\f415'; +} +.fa-archive:before { + content: '\f187'; +} +.fa-archway:before { + content: '\f557'; +} +.fa-arrow-alt-circle-down:before { + content: '\f358'; +} +.fa-arrow-alt-circle-left:before { + content: '\f359'; +} +.fa-arrow-alt-circle-right:before { + content: '\f35a'; +} +.fa-arrow-alt-circle-up:before { + content: '\f35b'; +} +.fa-arrow-circle-down:before { + content: '\f0ab'; +} +.fa-arrow-circle-left:before { + content: '\f0a8'; +} +.fa-arrow-circle-right:before { + content: '\f0a9'; +} +.fa-arrow-circle-up:before { + content: '\f0aa'; +} +.fa-arrow-down:before { + content: '\f063'; +} +.fa-arrow-left:before { + content: '\f060'; +} +.fa-arrow-right:before { + content: '\f061'; +} +.fa-arrow-up:before { + content: '\f062'; +} +.fa-arrows-alt:before { + content: '\f0b2'; +} +.fa-arrows-alt-h:before { + content: '\f337'; +} +.fa-arrows-alt-v:before { + content: '\f338'; +} +.fa-artstation:before { + content: '\f77a'; +} +.fa-assistive-listening-systems:before { + content: '\f2a2'; +} +.fa-asterisk:before { + content: '\f069'; +} +.fa-asymmetrik:before { + content: '\f372'; +} +.fa-at:before { + content: '\f1fa'; +} +.fa-atlas:before { + content: '\f558'; +} +.fa-atlassian:before { + content: '\f77b'; +} +.fa-atom:before { + content: '\f5d2'; +} +.fa-audible:before { + content: '\f373'; +} +.fa-audio-description:before { + content: '\f29e'; +} +.fa-autoprefixer:before { + content: '\f41c'; +} +.fa-avianex:before { + content: '\f374'; +} +.fa-aviato:before { + content: '\f421'; +} +.fa-award:before { + content: '\f559'; +} +.fa-aws:before { + content: '\f375'; +} +.fa-baby:before { + content: '\f77c'; +} +.fa-baby-carriage:before { + content: '\f77d'; +} +.fa-backspace:before { + content: '\f55a'; +} +.fa-backward:before { + content: '\f04a'; +} +.fa-balance-scale:before { + content: '\f24e'; +} +.fa-ban:before { + content: '\f05e'; +} +.fa-band-aid:before { + content: '\f462'; +} +.fa-bandcamp:before { + content: '\f2d5'; +} +.fa-barcode:before { + content: '\f02a'; +} +.fa-bars:before { + content: '\f0c9'; +} +.fa-baseball-ball:before { + content: '\f433'; +} +.fa-basketball-ball:before { + content: '\f434'; +} +.fa-bath:before { + content: '\f2cd'; +} +.fa-battery-empty:before { + content: '\f244'; +} +.fa-battery-full:before { + content: '\f240'; +} +.fa-battery-half:before { + content: '\f242'; +} +.fa-battery-quarter:before { + content: '\f243'; +} +.fa-battery-three-quarters:before { + content: '\f241'; +} +.fa-bed:before { + content: '\f236'; +} +.fa-beer:before { + content: '\f0fc'; +} +.fa-behance:before { + content: '\f1b4'; +} +.fa-behance-square:before { + content: '\f1b5'; +} +.fa-bell:before { + content: '\f0f3'; +} +.fa-bell-slash:before { + content: '\f1f6'; +} +.fa-bezier-curve:before { + content: '\f55b'; +} +.fa-bible:before { + content: '\f647'; +} +.fa-bicycle:before { + content: '\f206'; +} +.fa-bimobject:before { + content: '\f378'; +} +.fa-binoculars:before { + content: '\f1e5'; +} +.fa-biohazard:before { + content: '\f780'; +} +.fa-birthday-cake:before { + content: '\f1fd'; +} +.fa-bitbucket:before { + content: '\f171'; +} +.fa-bitcoin:before { + content: '\f379'; +} +.fa-bity:before { + content: '\f37a'; +} +.fa-black-tie:before { + content: '\f27e'; +} +.fa-blackberry:before { + content: '\f37b'; +} +.fa-blender:before { + content: '\f517'; +} +.fa-blender-phone:before { + content: '\f6b6'; +} +.fa-blind:before { + content: '\f29d'; +} +.fa-blog:before { + content: '\f781'; +} +.fa-blogger:before { + content: '\f37c'; +} +.fa-blogger-b:before { + content: '\f37d'; +} +.fa-bluetooth:before { + content: '\f293'; +} +.fa-bluetooth-b:before { + content: '\f294'; +} +.fa-bold:before { + content: '\f032'; +} +.fa-bolt:before { + content: '\f0e7'; +} +.fa-bomb:before { + content: '\f1e2'; +} +.fa-bone:before { + content: '\f5d7'; +} +.fa-bong:before { + content: '\f55c'; +} +.fa-book:before { + content: '\f02d'; +} +.fa-book-dead:before { + content: '\f6b7'; +} +.fa-book-open:before { + content: '\f518'; +} +.fa-book-reader:before { + content: '\f5da'; +} +.fa-bookmark:before { + content: '\f02e'; +} +.fa-bowling-ball:before { + content: '\f436'; +} +.fa-box:before { + content: '\f466'; +} +.fa-box-open:before { + content: '\f49e'; +} +.fa-boxes:before { + content: '\f468'; +} +.fa-braille:before { + content: '\f2a1'; +} +.fa-brain:before { + content: '\f5dc'; +} +.fa-briefcase:before { + content: '\f0b1'; +} +.fa-briefcase-medical:before { + content: '\f469'; +} +.fa-broadcast-tower:before { + content: '\f519'; +} +.fa-broom:before { + content: '\f51a'; +} +.fa-brush:before { + content: '\f55d'; +} +.fa-btc:before { + content: '\f15a'; +} +.fa-bug:before { + content: '\f188'; +} +.fa-building:before { + content: '\f1ad'; +} +.fa-bullhorn:before { + content: '\f0a1'; +} +.fa-bullseye:before { + content: '\f140'; +} +.fa-burn:before { + content: '\f46a'; +} +.fa-buromobelexperte:before { + content: '\f37f'; +} +.fa-bus:before { + content: '\f207'; +} +.fa-bus-alt:before { + content: '\f55e'; +} +.fa-business-time:before { + content: '\f64a'; +} +.fa-buysellads:before { + content: '\f20d'; +} +.fa-calculator:before { + content: '\f1ec'; +} +.fa-calendar:before { + content: '\f133'; +} +.fa-calendar-alt:before { + content: '\f073'; +} +.fa-calendar-check:before { + content: '\f274'; +} +.fa-calendar-day:before { + content: '\f783'; +} +.fa-calendar-minus:before { + content: '\f272'; +} +.fa-calendar-plus:before { + content: '\f271'; +} +.fa-calendar-times:before { + content: '\f273'; +} +.fa-calendar-week:before { + content: '\f784'; +} +.fa-camera:before { + content: '\f030'; +} +.fa-camera-retro:before { + content: '\f083'; +} +.fa-campground:before { + content: '\f6bb'; +} +.fa-canadian-maple-leaf:before { + content: '\f785'; +} +.fa-candy-cane:before { + content: '\f786'; +} +.fa-cannabis:before { + content: '\f55f'; +} +.fa-capsules:before { + content: '\f46b'; +} +.fa-car:before { + content: '\f1b9'; +} +.fa-car-alt:before { + content: '\f5de'; +} +.fa-car-battery:before { + content: '\f5df'; +} +.fa-car-crash:before { + content: '\f5e1'; +} +.fa-car-side:before { + content: '\f5e4'; +} +.fa-caret-down:before { + content: '\f0d7'; +} +.fa-caret-left:before { + content: '\f0d9'; +} +.fa-caret-right:before { + content: '\f0da'; +} +.fa-caret-square-down:before { + content: '\f150'; +} +.fa-caret-square-left:before { + content: '\f191'; +} +.fa-caret-square-right:before { + content: '\f152'; +} +.fa-caret-square-up:before { + content: '\f151'; +} +.fa-caret-up:before { + content: '\f0d8'; +} +.fa-carrot:before { + content: '\f787'; +} +.fa-cart-arrow-down:before { + content: '\f218'; +} +.fa-cart-plus:before { + content: '\f217'; +} +.fa-cash-register:before { + content: '\f788'; +} +.fa-cat:before { + content: '\f6be'; +} +.fa-cc-amazon-pay:before { + content: '\f42d'; +} +.fa-cc-amex:before { + content: '\f1f3'; +} +.fa-cc-apple-pay:before { + content: '\f416'; +} +.fa-cc-diners-club:before { + content: '\f24c'; +} +.fa-cc-discover:before { + content: '\f1f2'; +} +.fa-cc-jcb:before { + content: '\f24b'; +} +.fa-cc-mastercard:before { + content: '\f1f1'; +} +.fa-cc-paypal:before { + content: '\f1f4'; +} +.fa-cc-stripe:before { + content: '\f1f5'; +} +.fa-cc-visa:before { + content: '\f1f0'; +} +.fa-centercode:before { + content: '\f380'; +} +.fa-centos:before { + content: '\f789'; +} +.fa-certificate:before { + content: '\f0a3'; +} +.fa-chair:before { + content: '\f6c0'; +} +.fa-chalkboard:before { + content: '\f51b'; +} +.fa-chalkboard-teacher:before { + content: '\f51c'; +} +.fa-charging-station:before { + content: '\f5e7'; +} +.fa-chart-area:before { + content: '\f1fe'; +} +.fa-chart-bar:before { + content: '\f080'; +} +.fa-chart-line:before { + content: '\f201'; +} +.fa-chart-pie:before { + content: '\f200'; +} +.fa-check:before { + content: '\f00c'; +} +.fa-check-circle:before { + content: '\f058'; +} +.fa-check-double:before { + content: '\f560'; +} +.fa-check-square:before { + content: '\f14a'; +} +.fa-chess:before { + content: '\f439'; +} +.fa-chess-bishop:before { + content: '\f43a'; +} +.fa-chess-board:before { + content: '\f43c'; +} +.fa-chess-king:before { + content: '\f43f'; +} +.fa-chess-knight:before { + content: '\f441'; +} +.fa-chess-pawn:before { + content: '\f443'; +} +.fa-chess-queen:before { + content: '\f445'; +} +.fa-chess-rook:before { + content: '\f447'; +} +.fa-chevron-circle-down:before { + content: '\f13a'; +} +.fa-chevron-circle-left:before { + content: '\f137'; +} +.fa-chevron-circle-right:before { + content: '\f138'; +} +.fa-chevron-circle-up:before { + content: '\f139'; +} +.fa-chevron-down:before { + content: '\f078'; +} +.fa-chevron-left:before { + content: '\f053'; +} +.fa-chevron-right:before { + content: '\f054'; +} +.fa-chevron-up:before { + content: '\f077'; +} +.fa-child:before { + content: '\f1ae'; +} +.fa-chrome:before { + content: '\f268'; +} +.fa-church:before { + content: '\f51d'; +} +.fa-circle:before { + content: '\f111'; +} +.fa-circle-notch:before { + content: '\f1ce'; +} +.fa-city:before { + content: '\f64f'; +} +.fa-clipboard:before { + content: '\f328'; +} +.fa-clipboard-check:before { + content: '\f46c'; +} +.fa-clipboard-list:before { + content: '\f46d'; +} +.fa-clock:before { + content: '\f017'; +} +.fa-clone:before { + content: '\f24d'; +} +.fa-closed-captioning:before { + content: '\f20a'; +} +.fa-cloud:before { + content: '\f0c2'; +} +.fa-cloud-download-alt:before { + content: '\f381'; +} +.fa-cloud-meatball:before { + content: '\f73b'; +} +.fa-cloud-moon:before { + content: '\f6c3'; +} +.fa-cloud-moon-rain:before { + content: '\f73c'; +} +.fa-cloud-rain:before { + content: '\f73d'; +} +.fa-cloud-showers-heavy:before { + content: '\f740'; +} +.fa-cloud-sun:before { + content: '\f6c4'; +} +.fa-cloud-sun-rain:before { + content: '\f743'; +} +.fa-cloud-upload-alt:before { + content: '\f382'; +} +.fa-cloudscale:before { + content: '\f383'; +} +.fa-cloudsmith:before { + content: '\f384'; +} +.fa-cloudversify:before { + content: '\f385'; +} +.fa-cocktail:before { + content: '\f561'; +} +.fa-code:before { + content: '\f121'; +} +.fa-code-branch:before { + content: '\f126'; +} +.fa-codepen:before { + content: '\f1cb'; +} +.fa-codiepie:before { + content: '\f284'; +} +.fa-coffee:before { + content: '\f0f4'; +} +.fa-cog:before { + content: '\f013'; +} +.fa-cogs:before { + content: '\f085'; +} +.fa-coins:before { + content: '\f51e'; +} +.fa-columns:before { + content: '\f0db'; +} +.fa-comment:before { + content: '\f075'; +} +.fa-comment-alt:before { + content: '\f27a'; +} +.fa-comment-dollar:before { + content: '\f651'; +} +.fa-comment-dots:before { + content: '\f4ad'; +} +.fa-comment-slash:before { + content: '\f4b3'; +} +.fa-comments:before { + content: '\f086'; +} +.fa-comments-dollar:before { + content: '\f653'; +} +.fa-compact-disc:before { + content: '\f51f'; +} +.fa-compass:before { + content: '\f14e'; +} +.fa-compress:before { + content: '\f066'; +} +.fa-compress-arrows-alt:before { + content: '\f78c'; +} +.fa-concierge-bell:before { + content: '\f562'; +} +.fa-confluence:before { + content: '\f78d'; +} +.fa-connectdevelop:before { + content: '\f20e'; +} +.fa-contao:before { + content: '\f26d'; +} +.fa-cookie:before { + content: '\f563'; +} +.fa-cookie-bite:before { + content: '\f564'; +} +.fa-copy:before { + content: '\f0c5'; +} +.fa-copyright:before { + content: '\f1f9'; +} +.fa-couch:before { + content: '\f4b8'; +} +.fa-cpanel:before { + content: '\f388'; +} +.fa-creative-commons:before { + content: '\f25e'; +} +.fa-creative-commons-by:before { + content: '\f4e7'; +} +.fa-creative-commons-nc:before { + content: '\f4e8'; +} +.fa-creative-commons-nc-eu:before { + content: '\f4e9'; +} +.fa-creative-commons-nc-jp:before { + content: '\f4ea'; +} +.fa-creative-commons-nd:before { + content: '\f4eb'; +} +.fa-creative-commons-pd:before { + content: '\f4ec'; +} +.fa-creative-commons-pd-alt:before { + content: '\f4ed'; +} +.fa-creative-commons-remix:before { + content: '\f4ee'; +} +.fa-creative-commons-sa:before { + content: '\f4ef'; +} +.fa-creative-commons-sampling:before { + content: '\f4f0'; +} +.fa-creative-commons-sampling-plus:before { + content: '\f4f1'; +} +.fa-creative-commons-share:before { + content: '\f4f2'; +} +.fa-creative-commons-zero:before { + content: '\f4f3'; +} +.fa-credit-card:before { + content: '\f09d'; +} +.fa-critical-role:before { + content: '\f6c9'; +} +.fa-crop:before { + content: '\f125'; +} +.fa-crop-alt:before { + content: '\f565'; +} +.fa-cross:before { + content: '\f654'; +} +.fa-crosshairs:before { + content: '\f05b'; +} +.fa-crow:before { + content: '\f520'; +} +.fa-crown:before { + content: '\f521'; +} +.fa-css3:before { + content: '\f13c'; +} +.fa-css3-alt:before { + content: '\f38b'; +} +.fa-cube:before { + content: '\f1b2'; +} +.fa-cubes:before { + content: '\f1b3'; +} +.fa-cut:before { + content: '\f0c4'; +} +.fa-cuttlefish:before { + content: '\f38c'; +} +.fa-d-and-d:before { + content: '\f38d'; +} +.fa-d-and-d-beyond:before { + content: '\f6ca'; +} +.fa-dashcube:before { + content: '\f210'; +} +.fa-database:before { + content: '\f1c0'; +} +.fa-deaf:before { + content: '\f2a4'; +} +.fa-delicious:before { + content: '\f1a5'; +} +.fa-democrat:before { + content: '\f747'; +} +.fa-deploydog:before { + content: '\f38e'; +} +.fa-deskpro:before { + content: '\f38f'; +} +.fa-desktop:before { + content: '\f108'; +} +.fa-dev:before { + content: '\f6cc'; +} +.fa-deviantart:before { + content: '\f1bd'; +} +.fa-dharmachakra:before { + content: '\f655'; +} +.fa-dhl:before { + content: '\f790'; +} +.fa-diagnoses:before { + content: '\f470'; +} +.fa-diaspora:before { + content: '\f791'; +} +.fa-dice:before { + content: '\f522'; +} +.fa-dice-d20:before { + content: '\f6cf'; +} +.fa-dice-d6:before { + content: '\f6d1'; +} +.fa-dice-five:before { + content: '\f523'; +} +.fa-dice-four:before { + content: '\f524'; +} +.fa-dice-one:before { + content: '\f525'; +} +.fa-dice-six:before { + content: '\f526'; +} +.fa-dice-three:before { + content: '\f527'; +} +.fa-dice-two:before { + content: '\f528'; +} +.fa-digg:before { + content: '\f1a6'; +} +.fa-digital-ocean:before { + content: '\f391'; +} +.fa-digital-tachograph:before { + content: '\f566'; +} +.fa-directions:before { + content: '\f5eb'; +} +.fa-discord:before { + content: '\f392'; +} +.fa-discourse:before { + content: '\f393'; +} +.fa-divide:before { + content: '\f529'; +} +.fa-dizzy:before { + content: '\f567'; +} +.fa-dna:before { + content: '\f471'; +} +.fa-dochub:before { + content: '\f394'; +} +.fa-docker:before { + content: '\f395'; +} +.fa-dog:before { + content: '\f6d3'; +} +.fa-dollar-sign:before { + content: '\f155'; +} +.fa-dolly:before { + content: '\f472'; +} +.fa-dolly-flatbed:before { + content: '\f474'; +} +.fa-donate:before { + content: '\f4b9'; +} +.fa-door-closed:before { + content: '\f52a'; +} +.fa-door-open:before { + content: '\f52b'; +} +.fa-dot-circle:before { + content: '\f192'; +} +.fa-dove:before { + content: '\f4ba'; +} +.fa-download:before { + content: '\f019'; +} +.fa-draft2digital:before { + content: '\f396'; +} +.fa-drafting-compass:before { + content: '\f568'; +} +.fa-dragon:before { + content: '\f6d5'; +} +.fa-draw-polygon:before { + content: '\f5ee'; +} +.fa-dribbble:before { + content: '\f17d'; +} +.fa-dribbble-square:before { + content: '\f397'; +} +.fa-dropbox:before { + content: '\f16b'; +} +.fa-drum:before { + content: '\f569'; +} +.fa-drum-steelpan:before { + content: '\f56a'; +} +.fa-drumstick-bite:before { + content: '\f6d7'; +} +.fa-drupal:before { + content: '\f1a9'; +} +.fa-dumbbell:before { + content: '\f44b'; +} +.fa-dumpster:before { + content: '\f793'; +} +.fa-dumpster-fire:before { + content: '\f794'; +} +.fa-dungeon:before { + content: '\f6d9'; +} +.fa-dyalog:before { + content: '\f399'; +} +.fa-earlybirds:before { + content: '\f39a'; +} +.fa-ebay:before { + content: '\f4f4'; +} +.fa-edge:before { + content: '\f282'; +} +.fa-edit:before { + content: '\f044'; +} +.fa-eject:before { + content: '\f052'; +} +.fa-elementor:before { + content: '\f430'; +} +.fa-ellipsis-h:before { + content: '\f141'; +} +.fa-ellipsis-v:before { + content: '\f142'; +} +.fa-ello:before { + content: '\f5f1'; +} +.fa-ember:before { + content: '\f423'; +} +.fa-empire:before { + content: '\f1d1'; +} +.fa-envelope:before { + content: '\f0e0'; +} +.fa-envelope-open:before { + content: '\f2b6'; +} +.fa-envelope-open-text:before { + content: '\f658'; +} +.fa-envelope-square:before { + content: '\f199'; +} +.fa-envira:before { + content: '\f299'; +} +.fa-equals:before { + content: '\f52c'; +} +.fa-eraser:before { + content: '\f12d'; +} +.fa-erlang:before { + content: '\f39d'; +} +.fa-ethereum:before { + content: '\f42e'; +} +.fa-ethernet:before { + content: '\f796'; +} +.fa-etsy:before { + content: '\f2d7'; +} +.fa-euro-sign:before { + content: '\f153'; +} +.fa-exchange-alt:before { + content: '\f362'; +} +.fa-exclamation:before { + content: '\f12a'; +} +.fa-exclamation-circle:before { + content: '\f06a'; +} +.fa-exclamation-triangle:before { + content: '\f071'; +} +.fa-expand:before { + content: '\f065'; +} +.fa-expand-arrows-alt:before { + content: '\f31e'; +} +.fa-expeditedssl:before { + content: '\f23e'; +} +.fa-external-link-alt:before { + content: '\f35d'; +} +.fa-external-link-square-alt:before { + content: '\f360'; +} +.fa-eye:before { + content: '\f06e'; +} +.fa-eye-dropper:before { + content: '\f1fb'; +} +.fa-eye-slash:before { + content: '\f070'; +} +.fa-facebook:before { + content: '\f09a'; +} +.fa-facebook-f:before { + content: '\f39e'; +} +.fa-facebook-messenger:before { + content: '\f39f'; +} +.fa-facebook-square:before { + content: '\f082'; +} +.fa-fantasy-flight-games:before { + content: '\f6dc'; +} +.fa-fast-backward:before { + content: '\f049'; +} +.fa-fast-forward:before { + content: '\f050'; +} +.fa-fax:before { + content: '\f1ac'; +} +.fa-feather:before { + content: '\f52d'; +} +.fa-feather-alt:before { + content: '\f56b'; +} +.fa-fedex:before { + content: '\f797'; +} +.fa-fedora:before { + content: '\f798'; +} +.fa-female:before { + content: '\f182'; +} +.fa-fighter-jet:before { + content: '\f0fb'; +} +.fa-figma:before { + content: '\f799'; +} +.fa-file:before { + content: '\f15b'; +} +.fa-file-alt:before { + content: '\f15c'; +} +.fa-file-archive:before { + content: '\f1c6'; +} +.fa-file-audio:before { + content: '\f1c7'; +} +.fa-file-code:before { + content: '\f1c9'; +} +.fa-file-contract:before { + content: '\f56c'; +} +.fa-file-csv:before { + content: '\f6dd'; +} +.fa-file-download:before { + content: '\f56d'; +} +.fa-file-excel:before { + content: '\f1c3'; +} +.fa-file-export:before { + content: '\f56e'; +} +.fa-file-image:before { + content: '\f1c5'; +} +.fa-file-import:before { + content: '\f56f'; +} +.fa-file-invoice:before { + content: '\f570'; +} +.fa-file-invoice-dollar:before { + content: '\f571'; +} +.fa-file-medical:before { + content: '\f477'; +} +.fa-file-medical-alt:before { + content: '\f478'; +} +.fa-file-pdf:before { + content: '\f1c1'; +} +.fa-file-powerpoint:before { + content: '\f1c4'; +} +.fa-file-prescription:before { + content: '\f572'; +} +.fa-file-signature:before { + content: '\f573'; +} +.fa-file-upload:before { + content: '\f574'; +} +.fa-file-video:before { + content: '\f1c8'; +} +.fa-file-word:before { + content: '\f1c2'; +} +.fa-fill:before { + content: '\f575'; +} +.fa-fill-drip:before { + content: '\f576'; +} +.fa-film:before { + content: '\f008'; +} +.fa-filter:before { + content: '\f0b0'; +} +.fa-fingerprint:before { + content: '\f577'; +} +.fa-fire:before { + content: '\f06d'; +} +.fa-fire-extinguisher:before { + content: '\f134'; +} +.fa-firefox:before { + content: '\f269'; +} +.fa-first-aid:before { + content: '\f479'; +} +.fa-first-order:before { + content: '\f2b0'; +} +.fa-first-order-alt:before { + content: '\f50a'; +} +.fa-firstdraft:before { + content: '\f3a1'; +} +.fa-fish:before { + content: '\f578'; +} +.fa-fist-raised:before { + content: '\f6de'; +} +.fa-flag:before { + content: '\f024'; +} +.fa-flag-checkered:before { + content: '\f11e'; +} +.fa-flag-usa:before { + content: '\f74d'; +} +.fa-flask:before { + content: '\f0c3'; +} +.fa-flickr:before { + content: '\f16e'; +} +.fa-flipboard:before { + content: '\f44d'; +} +.fa-flushed:before { + content: '\f579'; +} +.fa-fly:before { + content: '\f417'; +} +.fa-folder:before { + content: '\f07b'; +} +.fa-folder-minus:before { + content: '\f65d'; +} +.fa-folder-open:before { + content: '\f07c'; +} +.fa-folder-plus:before { + content: '\f65e'; +} +.fa-font:before { + content: '\f031'; +} +.fa-font-awesome:before { + content: '\f2b4'; +} +.fa-font-awesome-alt:before { + content: '\f35c'; +} +.fa-font-awesome-flag:before { + content: '\f425'; +} +.fa-font-awesome-logo-full:before { + content: '\f4e6'; +} +.fa-fonticons:before { + content: '\f280'; +} +.fa-fonticons-fi:before { + content: '\f3a2'; +} +.fa-football-ball:before { + content: '\f44e'; +} +.fa-fort-awesome:before { + content: '\f286'; +} +.fa-fort-awesome-alt:before { + content: '\f3a3'; +} +.fa-forumbee:before { + content: '\f211'; +} +.fa-forward:before { + content: '\f04e'; +} +.fa-foursquare:before { + content: '\f180'; +} +.fa-free-code-camp:before { + content: '\f2c5'; +} +.fa-freebsd:before { + content: '\f3a4'; +} +.fa-frog:before { + content: '\f52e'; +} +.fa-frown:before { + content: '\f119'; +} +.fa-frown-open:before { + content: '\f57a'; +} +.fa-fulcrum:before { + content: '\f50b'; +} +.fa-funnel-dollar:before { + content: '\f662'; +} +.fa-futbol:before { + content: '\f1e3'; +} +.fa-galactic-republic:before { + content: '\f50c'; +} +.fa-galactic-senate:before { + content: '\f50d'; +} +.fa-gamepad:before { + content: '\f11b'; +} +.fa-gas-pump:before { + content: '\f52f'; +} +.fa-gavel:before { + content: '\f0e3'; +} +.fa-gem:before { + content: '\f3a5'; +} +.fa-genderless:before { + content: '\f22d'; +} +.fa-get-pocket:before { + content: '\f265'; +} +.fa-gg:before { + content: '\f260'; +} +.fa-gg-circle:before { + content: '\f261'; +} +.fa-ghost:before { + content: '\f6e2'; +} +.fa-gift:before { + content: '\f06b'; +} +.fa-gifts:before { + content: '\f79c'; +} +.fa-git:before { + content: '\f1d3'; +} +.fa-git-square:before { + content: '\f1d2'; +} +.fa-github:before { + content: '\f09b'; +} +.fa-github-alt:before { + content: '\f113'; +} +.fa-github-square:before { + content: '\f092'; +} +.fa-gitkraken:before { + content: '\f3a6'; +} +.fa-gitlab:before { + content: '\f296'; +} +.fa-gitter:before { + content: '\f426'; +} +.fa-glass-cheers:before { + content: '\f79f'; +} +.fa-glass-martini:before { + content: '\f000'; +} +.fa-glass-martini-alt:before { + content: '\f57b'; +} +.fa-glass-whiskey:before { + content: '\f7a0'; +} +.fa-glasses:before { + content: '\f530'; +} +.fa-glide:before { + content: '\f2a5'; +} +.fa-glide-g:before { + content: '\f2a6'; +} +.fa-globe:before { + content: '\f0ac'; +} +.fa-globe-africa:before { + content: '\f57c'; +} +.fa-globe-americas:before { + content: '\f57d'; +} +.fa-globe-asia:before { + content: '\f57e'; +} +.fa-globe-europe:before { + content: '\f7a2'; +} +.fa-gofore:before { + content: '\f3a7'; +} +.fa-golf-ball:before { + content: '\f450'; +} +.fa-goodreads:before { + content: '\f3a8'; +} +.fa-goodreads-g:before { + content: '\f3a9'; +} +.fa-google:before { + content: '\f1a0'; +} +.fa-google-drive:before { + content: '\f3aa'; +} +.fa-google-play:before { + content: '\f3ab'; +} +.fa-google-plus:before { + content: '\f2b3'; +} +.fa-google-plus-g:before { + content: '\f0d5'; +} +.fa-google-plus-square:before { + content: '\f0d4'; +} +.fa-google-wallet:before { + content: '\f1ee'; +} +.fa-gopuram:before { + content: '\f664'; +} +.fa-graduation-cap:before { + content: '\f19d'; +} +.fa-gratipay:before { + content: '\f184'; +} +.fa-grav:before { + content: '\f2d6'; +} +.fa-greater-than:before { + content: '\f531'; +} +.fa-greater-than-equal:before { + content: '\f532'; +} +.fa-grimace:before { + content: '\f57f'; +} +.fa-grin:before { + content: '\f580'; +} +.fa-grin-alt:before { + content: '\f581'; +} +.fa-grin-beam:before { + content: '\f582'; +} +.fa-grin-beam-sweat:before { + content: '\f583'; +} +.fa-grin-hearts:before { + content: '\f584'; +} +.fa-grin-squint:before { + content: '\f585'; +} +.fa-grin-squint-tears:before { + content: '\f586'; +} +.fa-grin-stars:before { + content: '\f587'; +} +.fa-grin-tears:before { + content: '\f588'; +} +.fa-grin-tongue:before { + content: '\f589'; +} +.fa-grin-tongue-squint:before { + content: '\f58a'; +} +.fa-grin-tongue-wink:before { + content: '\f58b'; +} +.fa-grin-wink:before { + content: '\f58c'; +} +.fa-grip-horizontal:before { + content: '\f58d'; +} +.fa-grip-lines:before { + content: '\f7a4'; +} +.fa-grip-lines-vertical:before { + content: '\f7a5'; +} +.fa-grip-vertical:before { + content: '\f58e'; +} +.fa-gripfire:before { + content: '\f3ac'; +} +.fa-grunt:before { + content: '\f3ad'; +} +.fa-guitar:before { + content: '\f7a6'; +} +.fa-gulp:before { + content: '\f3ae'; +} +.fa-h-square:before { + content: '\f0fd'; +} +.fa-hacker-news:before { + content: '\f1d4'; +} +.fa-hacker-news-square:before { + content: '\f3af'; +} +.fa-hackerrank:before { + content: '\f5f7'; +} +.fa-hammer:before { + content: '\f6e3'; +} +.fa-hamsa:before { + content: '\f665'; +} +.fa-hand-holding:before { + content: '\f4bd'; +} +.fa-hand-holding-heart:before { + content: '\f4be'; +} +.fa-hand-holding-usd:before { + content: '\f4c0'; +} +.fa-hand-lizard:before { + content: '\f258'; +} +.fa-hand-paper:before { + content: '\f256'; +} +.fa-hand-peace:before { + content: '\f25b'; +} +.fa-hand-point-down:before { + content: '\f0a7'; +} +.fa-hand-point-left:before { + content: '\f0a5'; +} +.fa-hand-point-right:before { + content: '\f0a4'; +} +.fa-hand-point-up:before { + content: '\f0a6'; +} +.fa-hand-pointer:before { + content: '\f25a'; +} +.fa-hand-rock:before { + content: '\f255'; +} +.fa-hand-scissors:before { + content: '\f257'; +} +.fa-hand-spock:before { + content: '\f259'; +} +.fa-hands:before { + content: '\f4c2'; +} +.fa-hands-helping:before { + content: '\f4c4'; +} +.fa-handshake:before { + content: '\f2b5'; +} +.fa-hanukiah:before { + content: '\f6e6'; +} +.fa-hashtag:before { + content: '\f292'; +} +.fa-hat-wizard:before { + content: '\f6e8'; +} +.fa-haykal:before { + content: '\f666'; +} +.fa-hdd:before { + content: '\f0a0'; +} +.fa-heading:before { + content: '\f1dc'; +} +.fa-headphones:before { + content: '\f025'; +} +.fa-headphones-alt:before { + content: '\f58f'; +} +.fa-headset:before { + content: '\f590'; +} +.fa-heart:before { + content: '\f004'; +} +.fa-heart-broken:before { + content: '\f7a9'; +} +.fa-heartbeat:before { + content: '\f21e'; +} +.fa-helicopter:before { + content: '\f533'; +} +.fa-highlighter:before { + content: '\f591'; +} +.fa-hiking:before { + content: '\f6ec'; +} +.fa-hippo:before { + content: '\f6ed'; +} +.fa-hips:before { + content: '\f452'; +} +.fa-hire-a-helper:before { + content: '\f3b0'; +} +.fa-history:before { + content: '\f1da'; +} +.fa-hockey-puck:before { + content: '\f453'; +} +.fa-holly-berry:before { + content: '\f7aa'; +} +.fa-home:before { + content: '\f015'; +} +.fa-hooli:before { + content: '\f427'; +} +.fa-hornbill:before { + content: '\f592'; +} +.fa-horse:before { + content: '\f6f0'; +} +.fa-horse-head:before { + content: '\f7ab'; +} +.fa-hospital:before { + content: '\f0f8'; +} +.fa-hospital-alt:before { + content: '\f47d'; +} +.fa-hospital-symbol:before { + content: '\f47e'; +} +.fa-hot-tub:before { + content: '\f593'; +} +.fa-hotel:before { + content: '\f594'; +} +.fa-hotjar:before { + content: '\f3b1'; +} +.fa-hourglass:before { + content: '\f254'; +} +.fa-hourglass-end:before { + content: '\f253'; +} +.fa-hourglass-half:before { + content: '\f252'; +} +.fa-hourglass-start:before { + content: '\f251'; +} +.fa-house-damage:before { + content: '\f6f1'; +} +.fa-houzz:before { + content: '\f27c'; +} +.fa-hryvnia:before { + content: '\f6f2'; +} +.fa-html5:before { + content: '\f13b'; +} +.fa-hubspot:before { + content: '\f3b2'; +} +.fa-i-cursor:before { + content: '\f246'; +} +.fa-icicles:before { + content: '\f7ad'; +} +.fa-id-badge:before { + content: '\f2c1'; +} +.fa-id-card:before { + content: '\f2c2'; +} +.fa-id-card-alt:before { + content: '\f47f'; +} +.fa-igloo:before { + content: '\f7ae'; +} +.fa-image:before { + content: '\f03e'; +} +.fa-images:before { + content: '\f302'; +} +.fa-imdb:before { + content: '\f2d8'; +} +.fa-inbox:before { + content: '\f01c'; +} +.fa-indent:before { + content: '\f03c'; +} +.fa-industry:before { + content: '\f275'; +} +.fa-infinity:before { + content: '\f534'; +} +.fa-info:before { + content: '\f129'; +} +.fa-info-circle:before { + content: '\f05a'; +} +.fa-instagram:before { + content: '\f16d'; +} +.fa-intercom:before { + content: '\f7af'; +} +.fa-internet-explorer:before { + content: '\f26b'; +} +.fa-invision:before { + content: '\f7b0'; +} +.fa-ioxhost:before { + content: '\f208'; +} +.fa-italic:before { + content: '\f033'; +} +.fa-itunes:before { + content: '\f3b4'; +} +.fa-itunes-note:before { + content: '\f3b5'; +} +.fa-java:before { + content: '\f4e4'; +} +.fa-jedi:before { + content: '\f669'; +} +.fa-jedi-order:before { + content: '\f50e'; +} +.fa-jenkins:before { + content: '\f3b6'; +} +.fa-jira:before { + content: '\f7b1'; +} +.fa-joget:before { + content: '\f3b7'; +} +.fa-joint:before { + content: '\f595'; +} +.fa-joomla:before { + content: '\f1aa'; +} +.fa-journal-whills:before { + content: '\f66a'; +} +.fa-js:before { + content: '\f3b8'; +} +.fa-js-square:before { + content: '\f3b9'; +} +.fa-jsfiddle:before { + content: '\f1cc'; +} +.fa-kaaba:before { + content: '\f66b'; +} +.fa-kaggle:before { + content: '\f5fa'; +} +.fa-key:before { + content: '\f084'; +} +.fa-keybase:before { + content: '\f4f5'; +} +.fa-keyboard:before { + content: '\f11c'; +} +.fa-keycdn:before { + content: '\f3ba'; +} +.fa-khanda:before { + content: '\f66d'; +} +.fa-kickstarter:before { + content: '\f3bb'; +} +.fa-kickstarter-k:before { + content: '\f3bc'; +} +.fa-kiss:before { + content: '\f596'; +} +.fa-kiss-beam:before { + content: '\f597'; +} +.fa-kiss-wink-heart:before { + content: '\f598'; +} +.fa-kiwi-bird:before { + content: '\f535'; +} +.fa-korvue:before { + content: '\f42f'; +} +.fa-landmark:before { + content: '\f66f'; +} +.fa-language:before { + content: '\f1ab'; +} +.fa-laptop:before { + content: '\f109'; +} +.fa-laptop-code:before { + content: '\f5fc'; +} +.fa-laravel:before { + content: '\f3bd'; +} +.fa-lastfm:before { + content: '\f202'; +} +.fa-lastfm-square:before { + content: '\f203'; +} +.fa-laugh:before { + content: '\f599'; +} +.fa-laugh-beam:before { + content: '\f59a'; +} +.fa-laugh-squint:before { + content: '\f59b'; +} +.fa-laugh-wink:before { + content: '\f59c'; +} +.fa-layer-group:before { + content: '\f5fd'; +} +.fa-leaf:before { + content: '\f06c'; +} +.fa-leanpub:before { + content: '\f212'; +} +.fa-lemon:before { + content: '\f094'; +} +.fa-less:before { + content: '\f41d'; +} +.fa-less-than:before { + content: '\f536'; +} +.fa-less-than-equal:before { + content: '\f537'; +} +.fa-level-down-alt:before { + content: '\f3be'; +} +.fa-level-up-alt:before { + content: '\f3bf'; +} +.fa-life-ring:before { + content: '\f1cd'; +} +.fa-lightbulb:before { + content: '\f0eb'; +} +.fa-line:before { + content: '\f3c0'; +} +.fa-link:before { + content: '\f0c1'; +} +.fa-linkedin:before { + content: '\f08c'; +} +.fa-linkedin-in:before { + content: '\f0e1'; +} +.fa-linode:before { + content: '\f2b8'; +} +.fa-linux:before { + content: '\f17c'; +} +.fa-lira-sign:before { + content: '\f195'; +} +.fa-list:before { + content: '\f03a'; +} +.fa-list-alt:before { + content: '\f022'; +} +.fa-list-ol:before { + content: '\f0cb'; +} +.fa-list-ul:before { + content: '\f0ca'; +} +.fa-location-arrow:before { + content: '\f124'; +} +.fa-lock:before { + content: '\f023'; +} +.fa-lock-open:before { + content: '\f3c1'; +} +.fa-long-arrow-alt-down:before { + content: '\f309'; +} +.fa-long-arrow-alt-left:before { + content: '\f30a'; +} +.fa-long-arrow-alt-right:before { + content: '\f30b'; +} +.fa-long-arrow-alt-up:before { + content: '\f30c'; +} +.fa-low-vision:before { + content: '\f2a8'; +} +.fa-luggage-cart:before { + content: '\f59d'; +} +.fa-lyft:before { + content: '\f3c3'; +} +.fa-magento:before { + content: '\f3c4'; +} +.fa-magic:before { + content: '\f0d0'; +} +.fa-magnet:before { + content: '\f076'; +} +.fa-mail-bulk:before { + content: '\f674'; +} +.fa-mailchimp:before { + content: '\f59e'; +} +.fa-male:before { + content: '\f183'; +} +.fa-mandalorian:before { + content: '\f50f'; +} +.fa-map:before { + content: '\f279'; +} +.fa-map-marked:before { + content: '\f59f'; +} +.fa-map-marked-alt:before { + content: '\f5a0'; +} +.fa-map-marker:before { + content: '\f041'; +} +.fa-map-marker-alt:before { + content: '\f3c5'; +} +.fa-map-pin:before { + content: '\f276'; +} +.fa-map-signs:before { + content: '\f277'; +} +.fa-markdown:before { + content: '\f60f'; +} +.fa-marker:before { + content: '\f5a1'; +} +.fa-mars:before { + content: '\f222'; +} +.fa-mars-double:before { + content: '\f227'; +} +.fa-mars-stroke:before { + content: '\f229'; +} +.fa-mars-stroke-h:before { + content: '\f22b'; +} +.fa-mars-stroke-v:before { + content: '\f22a'; +} +.fa-mask:before { + content: '\f6fa'; +} +.fa-mastodon:before { + content: '\f4f6'; +} +.fa-maxcdn:before { + content: '\f136'; +} +.fa-medal:before { + content: '\f5a2'; +} +.fa-medapps:before { + content: '\f3c6'; +} +.fa-medium:before { + content: '\f23a'; +} +.fa-medium-m:before { + content: '\f3c7'; +} +.fa-medkit:before { + content: '\f0fa'; +} +.fa-medrt:before { + content: '\f3c8'; +} +.fa-meetup:before { + content: '\f2e0'; +} +.fa-megaport:before { + content: '\f5a3'; +} +.fa-meh:before { + content: '\f11a'; +} +.fa-meh-blank:before { + content: '\f5a4'; +} +.fa-meh-rolling-eyes:before { + content: '\f5a5'; +} +.fa-memory:before { + content: '\f538'; +} +.fa-mendeley:before { + content: '\f7b3'; +} +.fa-menorah:before { + content: '\f676'; +} +.fa-mercury:before { + content: '\f223'; +} +.fa-meteor:before { + content: '\f753'; +} +.fa-microchip:before { + content: '\f2db'; +} +.fa-microphone:before { + content: '\f130'; +} +.fa-microphone-alt:before { + content: '\f3c9'; +} +.fa-microphone-alt-slash:before { + content: '\f539'; +} +.fa-microphone-slash:before { + content: '\f131'; +} +.fa-microscope:before { + content: '\f610'; +} +.fa-microsoft:before { + content: '\f3ca'; +} +.fa-minus:before { + content: '\f068'; +} +.fa-minus-circle:before { + content: '\f056'; +} +.fa-minus-square:before { + content: '\f146'; +} +.fa-mitten:before { + content: '\f7b5'; +} +.fa-mix:before { + content: '\f3cb'; +} +.fa-mixcloud:before { + content: '\f289'; +} +.fa-mizuni:before { + content: '\f3cc'; +} +.fa-mobile:before { + content: '\f10b'; +} +.fa-mobile-alt:before { + content: '\f3cd'; +} +.fa-modx:before { + content: '\f285'; +} +.fa-monero:before { + content: '\f3d0'; +} +.fa-money-bill:before { + content: '\f0d6'; +} +.fa-money-bill-alt:before { + content: '\f3d1'; +} +.fa-money-bill-wave:before { + content: '\f53a'; +} +.fa-money-bill-wave-alt:before { + content: '\f53b'; +} +.fa-money-check:before { + content: '\f53c'; +} +.fa-money-check-alt:before { + content: '\f53d'; +} +.fa-monument:before { + content: '\f5a6'; +} +.fa-moon:before { + content: '\f186'; +} +.fa-mortar-pestle:before { + content: '\f5a7'; +} +.fa-mosque:before { + content: '\f678'; +} +.fa-motorcycle:before { + content: '\f21c'; +} +.fa-mountain:before { + content: '\f6fc'; +} +.fa-mouse-pointer:before { + content: '\f245'; +} +.fa-mug-hot:before { + content: '\f7b6'; +} +.fa-music:before { + content: '\f001'; +} +.fa-napster:before { + content: '\f3d2'; +} +.fa-neos:before { + content: '\f612'; +} +.fa-network-wired:before { + content: '\f6ff'; +} +.fa-neuter:before { + content: '\f22c'; +} +.fa-newspaper:before { + content: '\f1ea'; +} +.fa-nimblr:before { + content: '\f5a8'; +} +.fa-nintendo-switch:before { + content: '\f418'; +} +.fa-node:before { + content: '\f419'; +} +.fa-node-js:before { + content: '\f3d3'; +} +.fa-not-equal:before { + content: '\f53e'; +} +.fa-notes-medical:before { + content: '\f481'; +} +.fa-npm:before { + content: '\f3d4'; +} +.fa-ns8:before { + content: '\f3d5'; +} +.fa-nutritionix:before { + content: '\f3d6'; +} +.fa-object-group:before { + content: '\f247'; +} +.fa-object-ungroup:before { + content: '\f248'; +} +.fa-odnoklassniki:before { + content: '\f263'; +} +.fa-odnoklassniki-square:before { + content: '\f264'; +} +.fa-oil-can:before { + content: '\f613'; +} +.fa-old-republic:before { + content: '\f510'; +} +.fa-om:before { + content: '\f679'; +} +.fa-opencart:before { + content: '\f23d'; +} +.fa-openid:before { + content: '\f19b'; +} +.fa-opera:before { + content: '\f26a'; +} +.fa-optin-monster:before { + content: '\f23c'; +} +.fa-osi:before { + content: '\f41a'; +} +.fa-otter:before { + content: '\f700'; +} +.fa-outdent:before { + content: '\f03b'; +} +.fa-page4:before { + content: '\f3d7'; +} +.fa-pagelines:before { + content: '\f18c'; +} +.fa-paint-brush:before { + content: '\f1fc'; +} +.fa-paint-roller:before { + content: '\f5aa'; +} +.fa-palette:before { + content: '\f53f'; +} +.fa-palfed:before { + content: '\f3d8'; +} +.fa-pallet:before { + content: '\f482'; +} +.fa-paper-plane:before { + content: '\f1d8'; +} +.fa-paperclip:before { + content: '\f0c6'; +} +.fa-parachute-box:before { + content: '\f4cd'; +} +.fa-paragraph:before { + content: '\f1dd'; +} +.fa-parking:before { + content: '\f540'; +} +.fa-passport:before { + content: '\f5ab'; +} +.fa-pastafarianism:before { + content: '\f67b'; +} +.fa-paste:before { + content: '\f0ea'; +} +.fa-patreon:before { + content: '\f3d9'; +} +.fa-pause:before { + content: '\f04c'; +} +.fa-pause-circle:before { + content: '\f28b'; +} +.fa-paw:before { + content: '\f1b0'; +} +.fa-paypal:before { + content: '\f1ed'; +} +.fa-peace:before { + content: '\f67c'; +} +.fa-pen:before { + content: '\f304'; +} +.fa-pen-alt:before { + content: '\f305'; +} +.fa-pen-fancy:before { + content: '\f5ac'; +} +.fa-pen-nib:before { + content: '\f5ad'; +} +.fa-pen-square:before { + content: '\f14b'; +} +.fa-pencil-alt:before { + content: '\f303'; +} +.fa-pencil-ruler:before { + content: '\f5ae'; +} +.fa-penny-arcade:before { + content: '\f704'; +} +.fa-people-carry:before { + content: '\f4ce'; +} +.fa-percent:before { + content: '\f295'; +} +.fa-percentage:before { + content: '\f541'; +} +.fa-periscope:before { + content: '\f3da'; +} +.fa-person-booth:before { + content: '\f756'; +} +.fa-phabricator:before { + content: '\f3db'; +} +.fa-phoenix-framework:before { + content: '\f3dc'; +} +.fa-phoenix-squadron:before { + content: '\f511'; +} +.fa-phone:before { + content: '\f095'; +} +.fa-phone-slash:before { + content: '\f3dd'; +} +.fa-phone-square:before { + content: '\f098'; +} +.fa-phone-volume:before { + content: '\f2a0'; +} +.fa-php:before { + content: '\f457'; +} +.fa-pied-piper:before { + content: '\f2ae'; +} +.fa-pied-piper-alt:before { + content: '\f1a8'; +} +.fa-pied-piper-hat:before { + content: '\f4e5'; +} +.fa-pied-piper-pp:before { + content: '\f1a7'; +} +.fa-piggy-bank:before { + content: '\f4d3'; +} +.fa-pills:before { + content: '\f484'; +} +.fa-pinterest:before { + content: '\f0d2'; +} +.fa-pinterest-p:before { + content: '\f231'; +} +.fa-pinterest-square:before { + content: '\f0d3'; +} +.fa-place-of-worship:before { + content: '\f67f'; +} +.fa-plane:before { + content: '\f072'; +} +.fa-plane-arrival:before { + content: '\f5af'; +} +.fa-plane-departure:before { + content: '\f5b0'; +} +.fa-play:before { + content: '\f04b'; +} +.fa-play-circle:before { + content: '\f144'; +} +.fa-playstation:before { + content: '\f3df'; +} +.fa-plug:before { + content: '\f1e6'; +} +.fa-plus:before { + content: '\f067'; +} +.fa-plus-circle:before { + content: '\f055'; +} +.fa-plus-square:before { + content: '\f0fe'; +} +.fa-podcast:before { + content: '\f2ce'; +} +.fa-poll:before { + content: '\f681'; +} +.fa-poll-h:before { + content: '\f682'; +} +.fa-poo:before { + content: '\f2fe'; +} +.fa-poo-storm:before { + content: '\f75a'; +} +.fa-poop:before { + content: '\f619'; +} +.fa-portrait:before { + content: '\f3e0'; +} +.fa-pound-sign:before { + content: '\f154'; +} +.fa-power-off:before { + content: '\f011'; +} +.fa-pray:before { + content: '\f683'; +} +.fa-praying-hands:before { + content: '\f684'; +} +.fa-prescription:before { + content: '\f5b1'; +} +.fa-prescription-bottle:before { + content: '\f485'; +} +.fa-prescription-bottle-alt:before { + content: '\f486'; +} +.fa-print:before { + content: '\f02f'; +} +.fa-procedures:before { + content: '\f487'; +} +.fa-product-hunt:before { + content: '\f288'; +} +.fa-project-diagram:before { + content: '\f542'; +} +.fa-pushed:before { + content: '\f3e1'; +} +.fa-puzzle-piece:before { + content: '\f12e'; +} +.fa-python:before { + content: '\f3e2'; +} +.fa-qq:before { + content: '\f1d6'; +} +.fa-qrcode:before { + content: '\f029'; +} +.fa-question:before { + content: '\f128'; +} +.fa-question-circle:before { + content: '\f059'; +} +.fa-quidditch:before { + content: '\f458'; +} +.fa-quinscape:before { + content: '\f459'; +} +.fa-quora:before { + content: '\f2c4'; +} +.fa-quote-left:before { + content: '\f10d'; +} +.fa-quote-right:before { + content: '\f10e'; +} +.fa-quran:before { + content: '\f687'; +} +.fa-r-project:before { + content: '\f4f7'; +} +.fa-radiation:before { + content: '\f7b9'; +} +.fa-radiation-alt:before { + content: '\f7ba'; +} +.fa-rainbow:before { + content: '\f75b'; +} +.fa-random:before { + content: '\f074'; +} +.fa-raspberry-pi:before { + content: '\f7bb'; +} +.fa-ravelry:before { + content: '\f2d9'; +} +.fa-react:before { + content: '\f41b'; +} +.fa-reacteurope:before { + content: '\f75d'; +} +.fa-readme:before { + content: '\f4d5'; +} +.fa-rebel:before { + content: '\f1d0'; +} +.fa-receipt:before { + content: '\f543'; +} +.fa-recycle:before { + content: '\f1b8'; +} +.fa-red-river:before { + content: '\f3e3'; +} +.fa-reddit:before { + content: '\f1a1'; +} +.fa-reddit-alien:before { + content: '\f281'; +} +.fa-reddit-square:before { + content: '\f1a2'; +} +.fa-redhat:before { + content: '\f7bc'; +} +.fa-redo:before { + content: '\f01e'; +} +.fa-redo-alt:before { + content: '\f2f9'; +} +.fa-registered:before { + content: '\f25d'; +} +.fa-renren:before { + content: '\f18b'; +} +.fa-reply:before { + content: '\f3e5'; +} +.fa-reply-all:before { + content: '\f122'; +} +.fa-replyd:before { + content: '\f3e6'; +} +.fa-republican:before { + content: '\f75e'; +} +.fa-researchgate:before { + content: '\f4f8'; +} +.fa-resolving:before { + content: '\f3e7'; +} +.fa-restroom:before { + content: '\f7bd'; +} +.fa-retweet:before { + content: '\f079'; +} +.fa-rev:before { + content: '\f5b2'; +} +.fa-ribbon:before { + content: '\f4d6'; +} +.fa-ring:before { + content: '\f70b'; +} +.fa-road:before { + content: '\f018'; +} +.fa-robot:before { + content: '\f544'; +} +.fa-rocket:before { + content: '\f135'; +} +.fa-rocketchat:before { + content: '\f3e8'; +} +.fa-rockrms:before { + content: '\f3e9'; +} +.fa-route:before { + content: '\f4d7'; +} +.fa-rss:before { + content: '\f09e'; +} +.fa-rss-square:before { + content: '\f143'; +} +.fa-ruble-sign:before { + content: '\f158'; +} +.fa-ruler:before { + content: '\f545'; +} +.fa-ruler-combined:before { + content: '\f546'; +} +.fa-ruler-horizontal:before { + content: '\f547'; +} +.fa-ruler-vertical:before { + content: '\f548'; +} +.fa-running:before { + content: '\f70c'; +} +.fa-rupee-sign:before { + content: '\f156'; +} +.fa-sad-cry:before { + content: '\f5b3'; +} +.fa-sad-tear:before { + content: '\f5b4'; +} +.fa-safari:before { + content: '\f267'; +} +.fa-sass:before { + content: '\f41e'; +} +.fa-satellite:before { + content: '\f7bf'; +} +.fa-satellite-dish:before { + content: '\f7c0'; +} +.fa-save:before { + content: '\f0c7'; +} +.fa-schlix:before { + content: '\f3ea'; +} +.fa-school:before { + content: '\f549'; +} +.fa-screwdriver:before { + content: '\f54a'; +} +.fa-scribd:before { + content: '\f28a'; +} +.fa-scroll:before { + content: '\f70e'; +} +.fa-sd-card:before { + content: '\f7c2'; +} +.fa-search:before { + content: '\f002'; +} +.fa-search-dollar:before { + content: '\f688'; +} +.fa-search-location:before { + content: '\f689'; +} +.fa-search-minus:before { + content: '\f010'; +} +.fa-search-plus:before { + content: '\f00e'; +} +.fa-searchengin:before { + content: '\f3eb'; +} +.fa-seedling:before { + content: '\f4d8'; +} +.fa-sellcast:before { + content: '\f2da'; +} +.fa-sellsy:before { + content: '\f213'; +} +.fa-server:before { + content: '\f233'; +} +.fa-servicestack:before { + content: '\f3ec'; +} +.fa-shapes:before { + content: '\f61f'; +} +.fa-share:before { + content: '\f064'; +} +.fa-share-alt:before { + content: '\f1e0'; +} +.fa-share-alt-square:before { + content: '\f1e1'; +} +.fa-share-square:before { + content: '\f14d'; +} +.fa-shekel-sign:before { + content: '\f20b'; +} +.fa-shield-alt:before { + content: '\f3ed'; +} +.fa-ship:before { + content: '\f21a'; +} +.fa-shipping-fast:before { + content: '\f48b'; +} +.fa-shirtsinbulk:before { + content: '\f214'; +} +.fa-shoe-prints:before { + content: '\f54b'; +} +.fa-shopping-bag:before { + content: '\f290'; +} +.fa-shopping-basket:before { + content: '\f291'; +} +.fa-shopping-cart:before { + content: '\f07a'; +} +.fa-shopware:before { + content: '\f5b5'; +} +.fa-shower:before { + content: '\f2cc'; +} +.fa-shuttle-van:before { + content: '\f5b6'; +} +.fa-sign:before { + content: '\f4d9'; +} +.fa-sign-in-alt:before { + content: '\f2f6'; +} +.fa-sign-language:before { + content: '\f2a7'; +} +.fa-sign-out-alt:before { + content: '\f2f5'; +} +.fa-signal:before { + content: '\f012'; +} +.fa-signature:before { + content: '\f5b7'; +} +.fa-sim-card:before { + content: '\f7c4'; +} +.fa-simplybuilt:before { + content: '\f215'; +} +.fa-sistrix:before { + content: '\f3ee'; +} +.fa-sitemap:before { + content: '\f0e8'; +} +.fa-sith:before { + content: '\f512'; +} +.fa-skating:before { + content: '\f7c5'; +} +.fa-sketch:before { + content: '\f7c6'; +} +.fa-skiing:before { + content: '\f7c9'; +} +.fa-skiing-nordic:before { + content: '\f7ca'; +} +.fa-skull:before { + content: '\f54c'; +} +.fa-skull-crossbones:before { + content: '\f714'; +} +.fa-skyatlas:before { + content: '\f216'; +} +.fa-skype:before { + content: '\f17e'; +} +.fa-slack:before { + content: '\f198'; +} +.fa-slack-hash:before { + content: '\f3ef'; +} +.fa-slash:before { + content: '\f715'; +} +.fa-sleigh:before { + content: '\f7cc'; +} +.fa-sliders-h:before { + content: '\f1de'; +} +.fa-slideshare:before { + content: '\f1e7'; +} +.fa-smile:before { + content: '\f118'; +} +.fa-smile-beam:before { + content: '\f5b8'; +} +.fa-smile-wink:before { + content: '\f4da'; +} +.fa-smog:before { + content: '\f75f'; +} +.fa-smoking:before { + content: '\f48d'; +} +.fa-smoking-ban:before { + content: '\f54d'; +} +.fa-sms:before { + content: '\f7cd'; +} +.fa-snapchat:before { + content: '\f2ab'; +} +.fa-snapchat-ghost:before { + content: '\f2ac'; +} +.fa-snapchat-square:before { + content: '\f2ad'; +} +.fa-snowboarding:before { + content: '\f7ce'; +} +.fa-snowflake:before { + content: '\f2dc'; +} +.fa-snowman:before { + content: '\f7d0'; +} +.fa-snowplow:before { + content: '\f7d2'; +} +.fa-socks:before { + content: '\f696'; +} +.fa-solar-panel:before { + content: '\f5ba'; +} +.fa-sort:before { + content: '\f0dc'; +} +.fa-sort-alpha-down:before { + content: '\f15d'; +} +.fa-sort-alpha-up:before { + content: '\f15e'; +} +.fa-sort-amount-down:before { + content: '\f160'; +} +.fa-sort-amount-up:before { + content: '\f161'; +} +.fa-sort-down:before { + content: '\f0dd'; +} +.fa-sort-numeric-down:before { + content: '\f162'; +} +.fa-sort-numeric-up:before { + content: '\f163'; +} +.fa-sort-up:before { + content: '\f0de'; +} +.fa-soundcloud:before { + content: '\f1be'; +} +.fa-sourcetree:before { + content: '\f7d3'; +} +.fa-spa:before { + content: '\f5bb'; +} +.fa-space-shuttle:before { + content: '\f197'; +} +.fa-speakap:before { + content: '\f3f3'; +} +.fa-spider:before { + content: '\f717'; +} +.fa-spinner:before { + content: '\f110'; +} +.fa-splotch:before { + content: '\f5bc'; +} +.fa-spotify:before { + content: '\f1bc'; +} +.fa-spray-can:before { + content: '\f5bd'; +} +.fa-square:before { + content: '\f0c8'; +} +.fa-square-full:before { + content: '\f45c'; +} +.fa-square-root-alt:before { + content: '\f698'; +} +.fa-squarespace:before { + content: '\f5be'; +} +.fa-stack-exchange:before { + content: '\f18d'; +} +.fa-stack-overflow:before { + content: '\f16c'; +} +.fa-stamp:before { + content: '\f5bf'; +} +.fa-star:before { + content: '\f005'; +} +.fa-star-and-crescent:before { + content: '\f699'; +} +.fa-star-half:before { + content: '\f089'; +} +.fa-star-half-alt:before { + content: '\f5c0'; +} +.fa-star-of-david:before { + content: '\f69a'; +} +.fa-star-of-life:before { + content: '\f621'; +} +.fa-staylinked:before { + content: '\f3f5'; +} +.fa-steam:before { + content: '\f1b6'; +} +.fa-steam-square:before { + content: '\f1b7'; +} +.fa-steam-symbol:before { + content: '\f3f6'; +} +.fa-step-backward:before { + content: '\f048'; +} +.fa-step-forward:before { + content: '\f051'; +} +.fa-stethoscope:before { + content: '\f0f1'; +} +.fa-sticker-mule:before { + content: '\f3f7'; +} +.fa-sticky-note:before { + content: '\f249'; +} +.fa-stop:before { + content: '\f04d'; +} +.fa-stop-circle:before { + content: '\f28d'; +} +.fa-stopwatch:before { + content: '\f2f2'; +} +.fa-store:before { + content: '\f54e'; +} +.fa-store-alt:before { + content: '\f54f'; +} +.fa-strava:before { + content: '\f428'; +} +.fa-stream:before { + content: '\f550'; +} +.fa-street-view:before { + content: '\f21d'; +} +.fa-strikethrough:before { + content: '\f0cc'; +} +.fa-stripe:before { + content: '\f429'; +} +.fa-stripe-s:before { + content: '\f42a'; +} +.fa-stroopwafel:before { + content: '\f551'; +} +.fa-studiovinari:before { + content: '\f3f8'; +} +.fa-stumbleupon:before { + content: '\f1a4'; +} +.fa-stumbleupon-circle:before { + content: '\f1a3'; +} +.fa-subscript:before { + content: '\f12c'; +} +.fa-subway:before { + content: '\f239'; +} +.fa-suitcase:before { + content: '\f0f2'; +} +.fa-suitcase-rolling:before { + content: '\f5c1'; +} +.fa-sun:before { + content: '\f185'; +} +.fa-superpowers:before { + content: '\f2dd'; +} +.fa-superscript:before { + content: '\f12b'; +} +.fa-supple:before { + content: '\f3f9'; +} +.fa-surprise:before { + content: '\f5c2'; +} +.fa-suse:before { + content: '\f7d6'; +} +.fa-swatchbook:before { + content: '\f5c3'; +} +.fa-swimmer:before { + content: '\f5c4'; +} +.fa-swimming-pool:before { + content: '\f5c5'; +} +.fa-synagogue:before { + content: '\f69b'; +} +.fa-sync:before { + content: '\f021'; +} +.fa-sync-alt:before { + content: '\f2f1'; +} +.fa-syringe:before { + content: '\f48e'; +} +.fa-table:before { + content: '\f0ce'; +} +.fa-table-tennis:before { + content: '\f45d'; +} +.fa-tablet:before { + content: '\f10a'; +} +.fa-tablet-alt:before { + content: '\f3fa'; +} +.fa-tablets:before { + content: '\f490'; +} +.fa-tachometer-alt:before { + content: '\f3fd'; +} +.fa-tag:before { + content: '\f02b'; +} +.fa-tags:before { + content: '\f02c'; +} +.fa-tape:before { + content: '\f4db'; +} +.fa-tasks:before { + content: '\f0ae'; +} +.fa-taxi:before { + content: '\f1ba'; +} +.fa-teamspeak:before { + content: '\f4f9'; +} +.fa-teeth:before { + content: '\f62e'; +} +.fa-teeth-open:before { + content: '\f62f'; +} +.fa-telegram:before { + content: '\f2c6'; +} +.fa-telegram-plane:before { + content: '\f3fe'; +} +.fa-temperature-high:before { + content: '\f769'; +} +.fa-temperature-low:before { + content: '\f76b'; +} +.fa-tencent-weibo:before { + content: '\f1d5'; +} +.fa-tenge:before { + content: '\f7d7'; +} +.fa-terminal:before { + content: '\f120'; +} +.fa-text-height:before { + content: '\f034'; +} +.fa-text-width:before { + content: '\f035'; +} +.fa-th:before { + content: '\f00a'; +} +.fa-th-large:before { + content: '\f009'; +} +.fa-th-list:before { + content: '\f00b'; +} +.fa-the-red-yeti:before { + content: '\f69d'; +} +.fa-theater-masks:before { + content: '\f630'; +} +.fa-themeco:before { + content: '\f5c6'; +} +.fa-themeisle:before { + content: '\f2b2'; +} +.fa-thermometer:before { + content: '\f491'; +} +.fa-thermometer-empty:before { + content: '\f2cb'; +} +.fa-thermometer-full:before { + content: '\f2c7'; +} +.fa-thermometer-half:before { + content: '\f2c9'; +} +.fa-thermometer-quarter:before { + content: '\f2ca'; +} +.fa-thermometer-three-quarters:before { + content: '\f2c8'; +} +.fa-think-peaks:before { + content: '\f731'; +} +.fa-thumbs-down:before { + content: '\f165'; +} +.fa-thumbs-up:before { + content: '\f164'; +} +.fa-thumbtack:before { + content: '\f08d'; +} +.fa-ticket-alt:before { + content: '\f3ff'; +} +.fa-times:before { + content: '\f00d'; +} +.fa-times-circle:before { + content: '\f057'; +} +.fa-tint:before { + content: '\f043'; +} +.fa-tint-slash:before { + content: '\f5c7'; +} +.fa-tired:before { + content: '\f5c8'; +} +.fa-toggle-off:before { + content: '\f204'; +} +.fa-toggle-on:before { + content: '\f205'; +} +.fa-toilet:before { + content: '\f7d8'; +} +.fa-toilet-paper:before { + content: '\f71e'; +} +.fa-toolbox:before { + content: '\f552'; +} +.fa-tools:before { + content: '\f7d9'; +} +.fa-tooth:before { + content: '\f5c9'; +} +.fa-torah:before { + content: '\f6a0'; +} +.fa-torii-gate:before { + content: '\f6a1'; +} +.fa-tractor:before { + content: '\f722'; +} +.fa-trade-federation:before { + content: '\f513'; +} +.fa-trademark:before { + content: '\f25c'; +} +.fa-traffic-light:before { + content: '\f637'; +} +.fa-train:before { + content: '\f238'; +} +.fa-tram:before { + content: '\f7da'; +} +.fa-transgender:before { + content: '\f224'; +} +.fa-transgender-alt:before { + content: '\f225'; +} +.fa-trash:before { + content: '\f1f8'; +} +.fa-trash-alt:before { + content: '\f2ed'; +} +.fa-tree:before { + content: '\f1bb'; +} +.fa-trello:before { + content: '\f181'; +} +.fa-tripadvisor:before { + content: '\f262'; +} +.fa-trophy:before { + content: '\f091'; +} +.fa-truck:before { + content: '\f0d1'; +} +.fa-truck-loading:before { + content: '\f4de'; +} +.fa-truck-monster:before { + content: '\f63b'; +} +.fa-truck-moving:before { + content: '\f4df'; +} +.fa-truck-pickup:before { + content: '\f63c'; +} +.fa-tshirt:before { + content: '\f553'; +} +.fa-tty:before { + content: '\f1e4'; +} +.fa-tumblr:before { + content: '\f173'; +} +.fa-tumblr-square:before { + content: '\f174'; +} +.fa-tv:before { + content: '\f26c'; +} +.fa-twitch:before { + content: '\f1e8'; +} +.fa-twitter:before { + content: '\f099'; +} +.fa-twitter-square:before { + content: '\f081'; +} +.fa-typo3:before { + content: '\f42b'; +} +.fa-uber:before { + content: '\f402'; +} +.fa-ubuntu:before { + content: '\f7df'; +} +.fa-uikit:before { + content: '\f403'; +} +.fa-umbrella:before { + content: '\f0e9'; +} +.fa-umbrella-beach:before { + content: '\f5ca'; +} +.fa-underline:before { + content: '\f0cd'; +} +.fa-undo:before { + content: '\f0e2'; +} +.fa-undo-alt:before { + content: '\f2ea'; +} +.fa-uniregistry:before { + content: '\f404'; +} +.fa-universal-access:before { + content: '\f29a'; +} +.fa-university:before { + content: '\f19c'; +} +.fa-unlink:before { + content: '\f127'; +} +.fa-unlock:before { + content: '\f09c'; +} +.fa-unlock-alt:before { + content: '\f13e'; +} +.fa-untappd:before { + content: '\f405'; +} +.fa-upload:before { + content: '\f093'; +} +.fa-ups:before { + content: '\f7e0'; +} +.fa-usb:before { + content: '\f287'; +} +.fa-user:before { + content: '\f007'; +} +.fa-user-alt:before { + content: '\f406'; +} +.fa-user-alt-slash:before { + content: '\f4fa'; +} +.fa-user-astronaut:before { + content: '\f4fb'; +} +.fa-user-check:before { + content: '\f4fc'; +} +.fa-user-circle:before { + content: '\f2bd'; +} +.fa-user-clock:before { + content: '\f4fd'; +} +.fa-user-cog:before { + content: '\f4fe'; +} +.fa-user-edit:before { + content: '\f4ff'; +} +.fa-user-friends:before { + content: '\f500'; +} +.fa-user-graduate:before { + content: '\f501'; +} +.fa-user-injured:before { + content: '\f728'; +} +.fa-user-lock:before { + content: '\f502'; +} +.fa-user-md:before { + content: '\f0f0'; +} +.fa-user-minus:before { + content: '\f503'; +} +.fa-user-ninja:before { + content: '\f504'; +} +.fa-user-plus:before { + content: '\f234'; +} +.fa-user-secret:before { + content: '\f21b'; +} +.fa-user-shield:before { + content: '\f505'; +} +.fa-user-slash:before { + content: '\f506'; +} +.fa-user-tag:before { + content: '\f507'; +} +.fa-user-tie:before { + content: '\f508'; +} +.fa-user-times:before { + content: '\f235'; +} +.fa-users:before { + content: '\f0c0'; +} +.fa-users-cog:before { + content: '\f509'; +} +.fa-usps:before { + content: '\f7e1'; +} +.fa-ussunnah:before { + content: '\f407'; +} +.fa-utensil-spoon:before { + content: '\f2e5'; +} +.fa-utensils:before { + content: '\f2e7'; +} +.fa-vaadin:before { + content: '\f408'; +} +.fa-vector-square:before { + content: '\f5cb'; +} +.fa-venus:before { + content: '\f221'; +} +.fa-venus-double:before { + content: '\f226'; +} +.fa-venus-mars:before { + content: '\f228'; +} +.fa-viacoin:before { + content: '\f237'; +} +.fa-viadeo:before { + content: '\f2a9'; +} +.fa-viadeo-square:before { + content: '\f2aa'; +} +.fa-vial:before { + content: '\f492'; +} +.fa-vials:before { + content: '\f493'; +} +.fa-viber:before { + content: '\f409'; +} +.fa-video:before { + content: '\f03d'; +} +.fa-video-slash:before { + content: '\f4e2'; +} +.fa-vihara:before { + content: '\f6a7'; +} +.fa-vimeo:before { + content: '\f40a'; +} +.fa-vimeo-square:before { + content: '\f194'; +} +.fa-vimeo-v:before { + content: '\f27d'; +} +.fa-vine:before { + content: '\f1ca'; +} +.fa-vk:before { + content: '\f189'; +} +.fa-vnv:before { + content: '\f40b'; +} +.fa-volleyball-ball:before { + content: '\f45f'; +} +.fa-volume-down:before { + content: '\f027'; +} +.fa-volume-mute:before { + content: '\f6a9'; +} +.fa-volume-off:before { + content: '\f026'; +} +.fa-volume-up:before { + content: '\f028'; +} +.fa-vote-yea:before { + content: '\f772'; +} +.fa-vr-cardboard:before { + content: '\f729'; +} +.fa-vuejs:before { + content: '\f41f'; +} +.fa-walking:before { + content: '\f554'; +} +.fa-wallet:before { + content: '\f555'; +} +.fa-warehouse:before { + content: '\f494'; +} +.fa-water:before { + content: '\f773'; +} +.fa-weebly:before { + content: '\f5cc'; +} +.fa-weibo:before { + content: '\f18a'; +} +.fa-weight:before { + content: '\f496'; +} +.fa-weight-hanging:before { + content: '\f5cd'; +} +.fa-weixin:before { + content: '\f1d7'; +} +.fa-whatsapp:before { + content: '\f232'; +} +.fa-whatsapp-square:before { + content: '\f40c'; +} +.fa-wheelchair:before { + content: '\f193'; +} +.fa-whmcs:before { + content: '\f40d'; +} +.fa-wifi:before { + content: '\f1eb'; +} +.fa-wikipedia-w:before { + content: '\f266'; +} +.fa-wind:before { + content: '\f72e'; +} +.fa-window-close:before { + content: '\f410'; +} +.fa-window-maximize:before { + content: '\f2d0'; +} +.fa-window-minimize:before { + content: '\f2d1'; +} +.fa-window-restore:before { + content: '\f2d2'; +} +.fa-windows:before { + content: '\f17a'; +} +.fa-wine-bottle:before { + content: '\f72f'; +} +.fa-wine-glass:before { + content: '\f4e3'; +} +.fa-wine-glass-alt:before { + content: '\f5ce'; +} +.fa-wix:before { + content: '\f5cf'; +} +.fa-wizards-of-the-coast:before { + content: '\f730'; +} +.fa-wolf-pack-battalion:before { + content: '\f514'; +} +.fa-won-sign:before { + content: '\f159'; +} +.fa-wordpress:before { + content: '\f19a'; +} +.fa-wordpress-simple:before { + content: '\f411'; +} +.fa-wpbeginner:before { + content: '\f297'; +} +.fa-wpexplorer:before { + content: '\f2de'; +} +.fa-wpforms:before { + content: '\f298'; +} +.fa-wpressr:before { + content: '\f3e4'; +} +.fa-wrench:before { + content: '\f0ad'; +} +.fa-x-ray:before { + content: '\f497'; +} +.fa-xbox:before { + content: '\f412'; +} +.fa-xing:before { + content: '\f168'; +} +.fa-xing-square:before { + content: '\f169'; +} +.fa-y-combinator:before { + content: '\f23b'; +} +.fa-yahoo:before { + content: '\f19e'; +} +.fa-yandex:before { + content: '\f413'; +} +.fa-yandex-international:before { + content: '\f414'; +} +.fa-yarn:before { + content: '\f7e3'; +} +.fa-yelp:before { + content: '\f1e9'; +} +.fa-yen-sign:before { + content: '\f157'; +} +.fa-yin-yang:before { + content: '\f6ad'; +} +.fa-yoast:before { + content: '\f2b1'; +} +.fa-youtube:before { + content: '\f167'; +} +.fa-youtube-square:before { + content: '\f431'; +} +.fa-zhihu:before { + content: '\f63f'; +} +.sr-only { + border: 0; + clip: rect(0, 0, 0, 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} +.sr-only-focusable:active, +.sr-only-focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} +@font-face { + font-family: 'Font Awesome 5 Brands'; + font-style: normal; + font-weight: normal; + src: url(../webfonts/fa-brands-400.eot); + src: url(../webfonts/fa-brands-400.eot?#iefix) format('embedded-opentype'), + url(../webfonts/fa-brands-400.woff2) format('woff2'), url(../webfonts/fa-brands-400.woff) format('woff'), + url(../webfonts/fa-brands-400.ttf) format('truetype'), + url(../webfonts/fa-brands-400.svg#fontawesome) format('svg'); +} +.fab { + font-family: 'Font Awesome 5 Brands'; +} +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 400; + src: url(../webfonts/fa-regular-400.eot); + src: url(../webfonts/fa-regular-400.eot?#iefix) format('embedded-opentype'), + url(../webfonts/fa-regular-400.woff2) format('woff2'), url(../webfonts/fa-regular-400.woff) format('woff'), + url(../webfonts/fa-regular-400.ttf) format('truetype'), + url(../webfonts/fa-regular-400.svg#fontawesome) format('svg'); +} +.far { + font-weight: 400; +} +@font-face { + font-family: 'Font Awesome 5 Free'; + font-style: normal; + font-weight: 900; + src: url(../webfonts/fa-solid-900.eot); + src: url(../webfonts/fa-solid-900.eot?#iefix) format('embedded-opentype'), + url(../webfonts/fa-solid-900.woff2) format('woff2'), url(../webfonts/fa-solid-900.woff) format('woff'), + url(../webfonts/fa-solid-900.ttf) format('truetype'), + url(../webfonts/fa-solid-900.svg#fontawesome) format('svg'); +} +.fa, +.far, +.fas { + font-family: 'Font Awesome 5 Free'; +} +.fa, +.fas { + font-weight: 900; +} diff --git a/css/animate.css b/css/animate.css new file mode 100644 index 0000000..dd6df89 --- /dev/null +++ b/css/animate.css @@ -0,0 +1,3606 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.7.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + */ + +@-webkit-keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +@keyframes bounce { + from, + 20%, + 53%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 40%, + 43% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -30px, 0); + transform: translate3d(0, -30px, 0); + } + + 70% { + -webkit-animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + animation-timing-function: cubic-bezier(0.755, 0.05, 0.855, 0.06); + -webkit-transform: translate3d(0, -15px, 0); + transform: translate3d(0, -15px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -4px, 0); + transform: translate3d(0, -4px, 0); + } +} + +.bounce { + -webkit-animation-name: bounce; + animation-name: bounce; + -webkit-transform-origin: center bottom; + transform-origin: center bottom; +} + +@-webkit-keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +@keyframes flash { + from, + 50%, + to { + opacity: 1; + } + + 25%, + 75% { + opacity: 0; + } +} + +.flash { + -webkit-animation-name: flash; + animation-name: flash; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes pulse { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 50% { + -webkit-transform: scale3d(1.05, 1.05, 1.05); + transform: scale3d(1.05, 1.05, 1.05); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.pulse { + -webkit-animation-name: pulse; + animation-name: pulse; +} + +@-webkit-keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes rubberBand { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 30% { + -webkit-transform: scale3d(1.25, 0.75, 1); + transform: scale3d(1.25, 0.75, 1); + } + + 40% { + -webkit-transform: scale3d(0.75, 1.25, 1); + transform: scale3d(0.75, 1.25, 1); + } + + 50% { + -webkit-transform: scale3d(1.15, 0.85, 1); + transform: scale3d(1.15, 0.85, 1); + } + + 65% { + -webkit-transform: scale3d(0.95, 1.05, 1); + transform: scale3d(0.95, 1.05, 1); + } + + 75% { + -webkit-transform: scale3d(1.05, 0.95, 1); + transform: scale3d(1.05, 0.95, 1); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.rubberBand { + -webkit-animation-name: rubberBand; + animation-name: rubberBand; +} + +@-webkit-keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +@keyframes shake { + from, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 10%, + 30%, + 50%, + 70%, + 90% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 20%, + 40%, + 60%, + 80% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } +} + +.shake { + -webkit-animation-name: shake; + animation-name: shake; +} + +@-webkit-keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +@keyframes headShake { + 0% { + -webkit-transform: translateX(0); + transform: translateX(0); + } + + 6.5% { + -webkit-transform: translateX(-6px) rotateY(-9deg); + transform: translateX(-6px) rotateY(-9deg); + } + + 18.5% { + -webkit-transform: translateX(5px) rotateY(7deg); + transform: translateX(5px) rotateY(7deg); + } + + 31.5% { + -webkit-transform: translateX(-3px) rotateY(-5deg); + transform: translateX(-3px) rotateY(-5deg); + } + + 43.5% { + -webkit-transform: translateX(2px) rotateY(3deg); + transform: translateX(2px) rotateY(3deg); + } + + 50% { + -webkit-transform: translateX(0); + transform: translateX(0); + } +} + +.headShake { + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + -webkit-animation-name: headShake; + animation-name: headShake; +} + +@-webkit-keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +@keyframes swing { + 20% { + -webkit-transform: rotate3d(0, 0, 1, 15deg); + transform: rotate3d(0, 0, 1, 15deg); + } + + 40% { + -webkit-transform: rotate3d(0, 0, 1, -10deg); + transform: rotate3d(0, 0, 1, -10deg); + } + + 60% { + -webkit-transform: rotate3d(0, 0, 1, 5deg); + transform: rotate3d(0, 0, 1, 5deg); + } + + 80% { + -webkit-transform: rotate3d(0, 0, 1, -5deg); + transform: rotate3d(0, 0, 1, -5deg); + } + + to { + -webkit-transform: rotate3d(0, 0, 1, 0deg); + transform: rotate3d(0, 0, 1, 0deg); + } +} + +.swing { + -webkit-transform-origin: top center; + transform-origin: top center; + -webkit-animation-name: swing; + animation-name: swing; +} + +@-webkit-keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes tada { + from { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } + + 10%, + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + transform: scale3d(0.9, 0.9, 0.9) rotate3d(0, 0, 1, -3deg); + } + + 30%, + 50%, + 70%, + 90% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg); + } + + 40%, + 60%, + 80% { + -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg); + } + + to { + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.tada { + -webkit-animation-name: tada; + animation-name: tada; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes wobble { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 15% { + -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg); + } + + 30% { + -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg); + } + + 45% { + -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg); + } + + 60% { + -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg); + } + + 75% { + -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.wobble { + -webkit-animation-name: wobble; + animation-name: wobble; +} + +@-webkit-keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +@keyframes jello { + from, + 11.1%, + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + 22.2% { + -webkit-transform: skewX(-12.5deg) skewY(-12.5deg); + transform: skewX(-12.5deg) skewY(-12.5deg); + } + + 33.3% { + -webkit-transform: skewX(6.25deg) skewY(6.25deg); + transform: skewX(6.25deg) skewY(6.25deg); + } + + 44.4% { + -webkit-transform: skewX(-3.125deg) skewY(-3.125deg); + transform: skewX(-3.125deg) skewY(-3.125deg); + } + + 55.5% { + -webkit-transform: skewX(1.5625deg) skewY(1.5625deg); + transform: skewX(1.5625deg) skewY(1.5625deg); + } + + 66.6% { + -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg); + transform: skewX(-0.78125deg) skewY(-0.78125deg); + } + + 77.7% { + -webkit-transform: skewX(0.390625deg) skewY(0.390625deg); + transform: skewX(0.390625deg) skewY(0.390625deg); + } + + 88.8% { + -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + transform: skewX(-0.1953125deg) skewY(-0.1953125deg); + } +} + +.jello { + -webkit-animation-name: jello; + animation-name: jello; + -webkit-transform-origin: center; + transform-origin: center; +} + +@-webkit-keyframes heartBeat { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 14% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 28% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 42% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 70% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes heartBeat { + 0% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 14% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 28% { + -webkit-transform: scale(1); + transform: scale(1); + } + + 42% { + -webkit-transform: scale(1.3); + transform: scale(1.3); + } + + 70% { + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.heartBeat { + -webkit-animation-name: heartBeat; + animation-name: heartBeat; + -webkit-animation-duration: 1.3s; + animation-duration: 1.3s; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; +} + +@-webkit-keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +@keyframes bounceIn { + from, + 20%, + 40%, + 60%, + 80%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 20% { + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + 40% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(1.03, 1.03, 1.03); + transform: scale3d(1.03, 1.03, 1.03); + } + + 80% { + -webkit-transform: scale3d(0.97, 0.97, 0.97); + transform: scale3d(0.97, 0.97, 0.97); + } + + to { + opacity: 1; + -webkit-transform: scale3d(1, 1, 1); + transform: scale3d(1, 1, 1); + } +} + +.bounceIn { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceIn; + animation-name: bounceIn; +} + +@-webkit-keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInDown { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(0, -3000px, 0); + transform: translate3d(0, -3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, 25px, 0); + transform: translate3d(0, 25px, 0); + } + + 75% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, 5px, 0); + transform: translate3d(0, 5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInDown { + -webkit-animation-name: bounceInDown; + animation-name: bounceInDown; +} + +@-webkit-keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInLeft { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + 0% { + opacity: 0; + -webkit-transform: translate3d(-3000px, 0, 0); + transform: translate3d(-3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(25px, 0, 0); + transform: translate3d(25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(-10px, 0, 0); + transform: translate3d(-10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(5px, 0, 0); + transform: translate3d(5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInLeft { + -webkit-animation-name: bounceInLeft; + animation-name: bounceInLeft; +} + +@-webkit-keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInRight { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(3000px, 0, 0); + transform: translate3d(3000px, 0, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(-25px, 0, 0); + transform: translate3d(-25px, 0, 0); + } + + 75% { + -webkit-transform: translate3d(10px, 0, 0); + transform: translate3d(10px, 0, 0); + } + + 90% { + -webkit-transform: translate3d(-5px, 0, 0); + transform: translate3d(-5px, 0, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInRight { + -webkit-animation-name: bounceInRight; + animation-name: bounceInRight; +} + +@-webkit-keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes bounceInUp { + from, + 60%, + 75%, + 90%, + to { + -webkit-animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + animation-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); + } + + from { + opacity: 0; + -webkit-transform: translate3d(0, 3000px, 0); + transform: translate3d(0, 3000px, 0); + } + + 60% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + 75% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 90% { + -webkit-transform: translate3d(0, -5px, 0); + transform: translate3d(0, -5px, 0); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.bounceInUp { + -webkit-animation-name: bounceInUp; + animation-name: bounceInUp; +} + +@-webkit-keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +@keyframes bounceOut { + 20% { + -webkit-transform: scale3d(0.9, 0.9, 0.9); + transform: scale3d(0.9, 0.9, 0.9); + } + + 50%, + 55% { + opacity: 1; + -webkit-transform: scale3d(1.1, 1.1, 1.1); + transform: scale3d(1.1, 1.1, 1.1); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } +} + +.bounceOut { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: bounceOut; + animation-name: bounceOut; +} + +@-webkit-keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes bounceOutDown { + 20% { + -webkit-transform: translate3d(0, 10px, 0); + transform: translate3d(0, 10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, -20px, 0); + transform: translate3d(0, -20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.bounceOutDown { + -webkit-animation-name: bounceOutDown; + animation-name: bounceOutDown; +} + +@-webkit-keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes bounceOutLeft { + 20% { + opacity: 1; + -webkit-transform: translate3d(20px, 0, 0); + transform: translate3d(20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.bounceOutLeft { + -webkit-animation-name: bounceOutLeft; + animation-name: bounceOutLeft; +} + +@-webkit-keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes bounceOutRight { + 20% { + opacity: 1; + -webkit-transform: translate3d(-20px, 0, 0); + transform: translate3d(-20px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.bounceOutRight { + -webkit-animation-name: bounceOutRight; + animation-name: bounceOutRight; +} + +@-webkit-keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes bounceOutUp { + 20% { + -webkit-transform: translate3d(0, -10px, 0); + transform: translate3d(0, -10px, 0); + } + + 40%, + 45% { + opacity: 1; + -webkit-transform: translate3d(0, 20px, 0); + transform: translate3d(0, 20px, 0); + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.bounceOutUp { + -webkit-animation-name: bounceOutUp; + animation-name: bounceOutUp; +} + +@-webkit-keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +@keyframes fadeIn { + from { + opacity: 0; + } + + to { + opacity: 1; + } +} + +.fadeIn { + -webkit-animation-name: fadeIn; + animation-name: fadeIn; +} + +@-webkit-keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDown { + from { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDown { + -webkit-animation-name: fadeInDown; + animation-name: fadeInDown; +} + +@-webkit-keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInDownBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInDownBig { + -webkit-animation-name: fadeInDownBig; + animation-name: fadeInDownBig; +} + +@-webkit-keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeft { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeft { + -webkit-animation-name: fadeInLeft; + animation-name: fadeInLeft; +} + +@-webkit-keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInLeftBig { + from { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInLeftBig { + -webkit-animation-name: fadeInLeftBig; + animation-name: fadeInLeftBig; +} + +@-webkit-keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRight { + from { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRight { + -webkit-animation-name: fadeInRight; + animation-name: fadeInRight; +} + +@-webkit-keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInRightBig { + from { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInRightBig { + -webkit-animation-name: fadeInRightBig; + animation-name: fadeInRightBig; +} + +@-webkit-keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUp { + from { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUp { + -webkit-animation-name: fadeInUp; + animation-name: fadeInUp; +} + +@-webkit-keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes fadeInUpBig { + from { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.fadeInUpBig { + -webkit-animation-name: fadeInUpBig; + animation-name: fadeInUpBig; +} + +@-webkit-keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +@keyframes fadeOut { + from { + opacity: 1; + } + + to { + opacity: 0; + } +} + +.fadeOut { + -webkit-animation-name: fadeOut; + animation-name: fadeOut; +} + +@-webkit-keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes fadeOutDown { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.fadeOutDown { + -webkit-animation-name: fadeOutDown; + animation-name: fadeOutDown; +} + +@-webkit-keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +@keyframes fadeOutDownBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, 2000px, 0); + transform: translate3d(0, 2000px, 0); + } +} + +.fadeOutDownBig { + -webkit-animation-name: fadeOutDownBig; + animation-name: fadeOutDownBig; +} + +@-webkit-keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes fadeOutLeft { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.fadeOutLeft { + -webkit-animation-name: fadeOutLeft; + animation-name: fadeOutLeft; +} + +@-webkit-keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +@keyframes fadeOutLeftBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(-2000px, 0, 0); + transform: translate3d(-2000px, 0, 0); + } +} + +.fadeOutLeftBig { + -webkit-animation-name: fadeOutLeftBig; + animation-name: fadeOutLeftBig; +} + +@-webkit-keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes fadeOutRight { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.fadeOutRight { + -webkit-animation-name: fadeOutRight; + animation-name: fadeOutRight; +} + +@-webkit-keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +@keyframes fadeOutRightBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(2000px, 0, 0); + transform: translate3d(2000px, 0, 0); + } +} + +.fadeOutRightBig { + -webkit-animation-name: fadeOutRightBig; + animation-name: fadeOutRightBig; +} + +@-webkit-keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes fadeOutUp { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.fadeOutUp { + -webkit-animation-name: fadeOutUp; + animation-name: fadeOutUp; +} + +@-webkit-keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +@keyframes fadeOutUpBig { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(0, -2000px, 0); + transform: translate3d(0, -2000px, 0); + } +} + +.fadeOutUpBig { + -webkit-animation-name: fadeOutUpBig; + animation-name: fadeOutUpBig; +} + +@-webkit-keyframes flip { + from { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +@keyframes flip { + from { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, -360deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 40% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg); + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; + } + + 50% { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 80% { + -webkit-transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(0.95, 0.95, 0.95) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + to { + -webkit-transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + transform: perspective(400px) scale3d(1, 1, 1) translate3d(0, 0, 0) rotate3d(0, 1, 0, 0deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } +} + +.animated.flip { + -webkit-backface-visibility: visible; + backface-visibility: visible; + -webkit-animation-name: flip; + animation-name: flip; +} + +@-webkit-keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInX { + from { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + transform: perspective(400px) rotate3d(1, 0, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + transform: perspective(400px) rotate3d(1, 0, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInX { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInX; + animation-name: flipInX; +} + +@-webkit-keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +@keyframes flipInY { + from { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + opacity: 0; + } + + 40% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + transform: perspective(400px) rotate3d(0, 1, 0, -20deg); + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; + } + + 60% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + transform: perspective(400px) rotate3d(0, 1, 0, 10deg); + opacity: 1; + } + + 80% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + transform: perspective(400px) rotate3d(0, 1, 0, -5deg); + } + + to { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } +} + +.flipInY { + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipInY; + animation-name: flipInY; +} + +@-webkit-keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutX { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + transform: perspective(400px) rotate3d(1, 0, 0, -20deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + transform: perspective(400px) rotate3d(1, 0, 0, 90deg); + opacity: 0; + } +} + +.flipOutX { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-animation-name: flipOutX; + animation-name: flipOutX; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; +} + +@-webkit-keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +@keyframes flipOutY { + from { + -webkit-transform: perspective(400px); + transform: perspective(400px); + } + + 30% { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + transform: perspective(400px) rotate3d(0, 1, 0, -15deg); + opacity: 1; + } + + to { + -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + transform: perspective(400px) rotate3d(0, 1, 0, 90deg); + opacity: 0; + } +} + +.flipOutY { + -webkit-animation-duration: 0.75s; + animation-duration: 0.75s; + -webkit-backface-visibility: visible !important; + backface-visibility: visible !important; + -webkit-animation-name: flipOutY; + animation-name: flipOutY; +} + +@-webkit-keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes lightSpeedIn { + from { + -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg); + transform: translate3d(100%, 0, 0) skewX(-30deg); + opacity: 0; + } + + 60% { + -webkit-transform: skewX(20deg); + transform: skewX(20deg); + opacity: 1; + } + + 80% { + -webkit-transform: skewX(-5deg); + transform: skewX(-5deg); + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.lightSpeedIn { + -webkit-animation-name: lightSpeedIn; + animation-name: lightSpeedIn; + -webkit-animation-timing-function: ease-out; + animation-timing-function: ease-out; +} + +@-webkit-keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +@keyframes lightSpeedOut { + from { + opacity: 1; + } + + to { + -webkit-transform: translate3d(100%, 0, 0) skewX(30deg); + transform: translate3d(100%, 0, 0) skewX(30deg); + opacity: 0; + } +} + +.lightSpeedOut { + -webkit-animation-name: lightSpeedOut; + animation-name: lightSpeedOut; + -webkit-animation-timing-function: ease-in; + animation-timing-function: ease-in; +} + +@-webkit-keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateIn { + from { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, -200deg); + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateIn { + -webkit-animation-name: rotateIn; + animation-name: rotateIn; +} + +@-webkit-keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownLeft { + -webkit-animation-name: rotateInDownLeft; + animation-name: rotateInDownLeft; +} + +@-webkit-keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInDownRight { + -webkit-animation-name: rotateInDownRight; + animation-name: rotateInDownRight; +} + +@-webkit-keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpLeft { + -webkit-animation-name: rotateInUpLeft; + animation-name: rotateInUpLeft; +} + +@-webkit-keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +@keyframes rotateInUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -90deg); + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + opacity: 1; + } +} + +.rotateInUpRight { + -webkit-animation-name: rotateInUpRight; + animation-name: rotateInUpRight; +} + +@-webkit-keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +@keyframes rotateOut { + from { + -webkit-transform-origin: center; + transform-origin: center; + opacity: 1; + } + + to { + -webkit-transform-origin: center; + transform-origin: center; + -webkit-transform: rotate3d(0, 0, 1, 200deg); + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} + +.rotateOut { + -webkit-animation-name: rotateOut; + animation-name: rotateOut; +} + +@-webkit-keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, 45deg); + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} + +.rotateOutDownLeft { + -webkit-animation-name: rotateOutDownLeft; + animation-name: rotateOutDownLeft; +} + +@-webkit-keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutDownRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutDownRight { + -webkit-animation-name: rotateOutDownRight; + animation-name: rotateOutDownRight; +} + +@-webkit-keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +@keyframes rotateOutUpLeft { + from { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: left bottom; + transform-origin: left bottom; + -webkit-transform: rotate3d(0, 0, 1, -45deg); + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} + +.rotateOutUpLeft { + -webkit-animation-name: rotateOutUpLeft; + animation-name: rotateOutUpLeft; +} + +@-webkit-keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +@keyframes rotateOutUpRight { + from { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + opacity: 1; + } + + to { + -webkit-transform-origin: right bottom; + transform-origin: right bottom; + -webkit-transform: rotate3d(0, 0, 1, 90deg); + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} + +.rotateOutUpRight { + -webkit-animation-name: rotateOutUpRight; + animation-name: rotateOutUpRight; +} + +@-webkit-keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +@keyframes hinge { + 0% { + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 20%, + 60% { + -webkit-transform: rotate3d(0, 0, 1, 80deg); + transform: rotate3d(0, 0, 1, 80deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + } + + 40%, + 80% { + -webkit-transform: rotate3d(0, 0, 1, 60deg); + transform: rotate3d(0, 0, 1, 60deg); + -webkit-transform-origin: top left; + transform-origin: top left; + -webkit-animation-timing-function: ease-in-out; + animation-timing-function: ease-in-out; + opacity: 1; + } + + to { + -webkit-transform: translate3d(0, 700px, 0); + transform: translate3d(0, 700px, 0); + opacity: 0; + } +} + +.hinge { + -webkit-animation-duration: 2s; + animation-duration: 2s; + -webkit-animation-name: hinge; + animation-name: hinge; +} + +@-webkit-keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +@keyframes jackInTheBox { + from { + opacity: 0; + -webkit-transform: scale(0.1) rotate(30deg); + transform: scale(0.1) rotate(30deg); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + } + + 50% { + -webkit-transform: rotate(-10deg); + transform: rotate(-10deg); + } + + 70% { + -webkit-transform: rotate(3deg); + transform: rotate(3deg); + } + + to { + opacity: 1; + -webkit-transform: scale(1); + transform: scale(1); + } +} + +.jackInTheBox { + -webkit-animation-name: jackInTheBox; + animation-name: jackInTheBox; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes rollIn { + from { + opacity: 0; + -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg); + } + + to { + opacity: 1; + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.rollIn { + -webkit-animation-name: rollIn; + animation-name: rollIn; +} + +/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */ + +@-webkit-keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +@keyframes rollOut { + from { + opacity: 1; + } + + to { + opacity: 0; + -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg); + } +} + +.rollOut { + -webkit-animation-name: rollOut; + animation-name: rollOut; +} + +@-webkit-keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +@keyframes zoomIn { + from { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + 50% { + opacity: 1; + } +} + +.zoomIn { + -webkit-animation-name: zoomIn; + animation-name: zoomIn; +} + +@-webkit-keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInDown { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInDown { + -webkit-animation-name: zoomInDown; + animation-name: zoomInDown; +} + +@-webkit-keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInLeft { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(-1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInLeft { + -webkit-animation-name: zoomInLeft; + animation-name: zoomInLeft; +} + +@-webkit-keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInRight { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(1000px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-10px, 0, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInRight { + -webkit-animation-name: zoomInRight; + animation-name: zoomInRight; +} + +@-webkit-keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomInUp { + from { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 1000px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + 60% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomInUp { + -webkit-animation-name: zoomInUp; + animation-name: zoomInUp; +} + +@-webkit-keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +@keyframes zoomOut { + from { + opacity: 1; + } + + 50% { + opacity: 0; + -webkit-transform: scale3d(0.3, 0.3, 0.3); + transform: scale3d(0.3, 0.3, 0.3); + } + + to { + opacity: 0; + } +} + +.zoomOut { + -webkit-animation-name: zoomOut; + animation-name: zoomOut; +} + +@-webkit-keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutDown { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, -60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, 2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutDown { + -webkit-animation-name: zoomOutDown; + animation-name: zoomOutDown; +} + +@-webkit-keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +@keyframes zoomOutLeft { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(-2000px, 0, 0); + transform: scale(0.1) translate3d(-2000px, 0, 0); + -webkit-transform-origin: left center; + transform-origin: left center; + } +} + +.zoomOutLeft { + -webkit-animation-name: zoomOutLeft; + animation-name: zoomOutLeft; +} + +@-webkit-keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +@keyframes zoomOutRight { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(-42px, 0, 0); + } + + to { + opacity: 0; + -webkit-transform: scale(0.1) translate3d(2000px, 0, 0); + transform: scale(0.1) translate3d(2000px, 0, 0); + -webkit-transform-origin: right center; + transform-origin: right center; + } +} + +.zoomOutRight { + -webkit-animation-name: zoomOutRight; + animation-name: zoomOutRight; +} + +@-webkit-keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +@keyframes zoomOutUp { + 40% { + opacity: 1; + -webkit-transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + transform: scale3d(0.475, 0.475, 0.475) translate3d(0, 60px, 0); + -webkit-animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + animation-timing-function: cubic-bezier(0.55, 0.055, 0.675, 0.19); + } + + to { + opacity: 0; + -webkit-transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + transform: scale3d(0.1, 0.1, 0.1) translate3d(0, -2000px, 0); + -webkit-transform-origin: center bottom; + transform-origin: center bottom; + -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + animation-timing-function: cubic-bezier(0.175, 0.885, 0.32, 1); + } +} + +.zoomOutUp { + -webkit-animation-name: zoomOutUp; + animation-name: zoomOutUp; +} + +@-webkit-keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInDown { + from { + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInDown { + -webkit-animation-name: slideInDown; + animation-name: slideInDown; +} + +@-webkit-keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInLeft { + from { + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInLeft { + -webkit-animation-name: slideInLeft; + animation-name: slideInLeft; +} + +@-webkit-keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInRight { + from { + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInRight { + -webkit-animation-name: slideInRight; + animation-name: slideInRight; +} + +@-webkit-keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +@keyframes slideInUp { + from { + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + visibility: visible; + } + + to { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } +} + +.slideInUp { + -webkit-animation-name: slideInUp; + animation-name: slideInUp; +} + +@-webkit-keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +@keyframes slideOutDown { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, 100%, 0); + transform: translate3d(0, 100%, 0); + } +} + +.slideOutDown { + -webkit-animation-name: slideOutDown; + animation-name: slideOutDown; +} + +@-webkit-keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +@keyframes slideOutLeft { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(-100%, 0, 0); + transform: translate3d(-100%, 0, 0); + } +} + +.slideOutLeft { + -webkit-animation-name: slideOutLeft; + animation-name: slideOutLeft; +} + +@-webkit-keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +@keyframes slideOutRight { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(100%, 0, 0); + transform: translate3d(100%, 0, 0); + } +} + +.slideOutRight { + -webkit-animation-name: slideOutRight; + animation-name: slideOutRight; +} + +@-webkit-keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +@keyframes slideOutUp { + from { + -webkit-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + } + + to { + visibility: hidden; + -webkit-transform: translate3d(0, -100%, 0); + transform: translate3d(0, -100%, 0); + } +} + +.slideOutUp { + -webkit-animation-name: slideOutUp; + animation-name: slideOutUp; +} + +.animated { + -webkit-animation-duration: 1s; + animation-duration: 1s; + -webkit-animation-fill-mode: both; + animation-fill-mode: both; +} + +.animated.infinite { + -webkit-animation-iteration-count: infinite; + animation-iteration-count: infinite; +} + +.animated.delay-1s { + -webkit-animation-delay: 1s; + animation-delay: 1s; +} + +.animated.delay-2s { + -webkit-animation-delay: 2s; + animation-delay: 2s; +} + +.animated.delay-3s { + -webkit-animation-delay: 3s; + animation-delay: 3s; +} + +.animated.delay-4s { + -webkit-animation-delay: 4s; + animation-delay: 4s; +} + +.animated.delay-5s { + -webkit-animation-delay: 5s; + animation-delay: 5s; +} + +.animated.fast { + -webkit-animation-duration: 800ms; + animation-duration: 800ms; +} + +.animated.faster { + -webkit-animation-duration: 500ms; + animation-duration: 500ms; +} + +.animated.slow { + -webkit-animation-duration: 2s; + animation-duration: 2s; +} + +.animated.slower { + -webkit-animation-duration: 3s; + animation-duration: 3s; +} + +@media (print), (prefers-reduced-motion) { + .animated { + -webkit-animation: unset !important; + animation: unset !important; + -webkit-transition: none !important; + transition: none !important; + } +} diff --git a/css/estilo.css b/css/estilo.css new file mode 100644 index 0000000..46be33b --- /dev/null +++ b/css/estilo.css @@ -0,0 +1,282 @@ +@charset "UTF-8"; + +body { + margin: 0 0 0 0; + /* background-color: #2f4050; */ + overflow-x: hidden; + /* background-color: #cccccc; */ + height: 800px; + background-position: center; + background-repeat: repeat; +} +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #000000 !important; + background-color: #e9ecef !important; + cursor: grabbing !important; +} +.nav-link:hover { + cursor: pointer !important; +} +/* Buscador Estaciones */ + +.easy-autocomplete.eac-square input { + min-width: 400px !important; +} +/* inicio barra navegación */ +.top-navbar { + font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + margin: 0 0 0 0; + padding: 0 0 0 0; +} + +.nav > li > a { + color: #808080; + font-size: 13px; + font-weight: 600; + padding: 14px 30px 14px 30px; + text-decoration: none; + letter-spacing: 0.1em; +} + +.nav > li.active > a { + color: #7e293b; + font-weight: 601; +} +.nav > li > a:hover, +.nav > li > a:focus { + color: #7e293b; + font-weight: 601; +} + +.navbar { + border: 0; +} +.navbar-brand { + background: #7e293b; + padding: 5px 25px; +} +.navbar-brand span { + color: white; + letter-spacing: 0.2em; +} +.navbar-brand:hover, +.navbar-brand:focus { + color: white; + background: #891e35; + text-decoration: none; +} + +.navbar-toggler { + background-color: #891e35; + padding: 6px 12px; + font-size: 14px; +} + +/* fin barra navegación */ + +.bloque { + margin-bottom: 40px; + margin-top: 10px; + padding: 20px 25px 5px; +} +.wrapper-content { + padding: 20px 10px 40px; +} + +.ibox { + clear: both; + margin-bottom: 50px; + margin-top: 0; + padding: 0; +} +.float-e-margins .btn { + margin-bottom: 5px; +} + +.ibox-title { + -moz-border-bottom-colors: none; + -moz-border-left-colors: none; + -moz-border-right-colors: none; + -moz-border-top-colors: none; + background-color: #ffffff; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 3px 0 0; + color: inherit; + margin-bottom: 0; + padding: 14px 15px 7px; + min-height: 48px; +} +.ibox-title h5 { + display: inline-block; + font-size: 14px; + margin: 0 0 7px; + padding: 0; + text-overflow: ellipsis; + /*float: left;*/ +} +.ibox-content { + background-color: #ffffff; + color: inherit; + padding: 15px 20px 20px 20px; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 1px 0; +} + +.ibox-content-bloques { + background-color: #ffffff; + color: inherit; + padding: 15px 0px 20px 0px; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 1px 0; +} + +.ibox-content img { + float: right !important; +} +.ibox-content-Descarga { + background-color: #ffffff; + color: inherit; + padding: 15px 20px 20px 20px; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 1px 0; +} +.label-estacion-on { + background-color: green; +} +.label-estacion-off { + background-color: red; +} +.label { + color: white; + font-family: "Open Sans"; + font-size: 11px; + letter-spacing: 0.3em; + font-weight: 600; + padding: 3px 8px; + text-shadow: none; + border-radius: 0.25em; +} +.label-temperatura { + background-color: #660000; +} +.label-lluvia { + background-color: blue; +} +.label-humedad { + background-color: #f8ac59; +} +.label-viento { + background-color: #aa3333; +} +.label-luminancia { + background-color: #afaf256e; + color: black; +} +.label-viento-vel { + background-color: #945f4b; +} +.label-uv { + background-color: #744a99; +} + +.ibox-content span, +.ibox-content h5, +.ibox-title h1 { + margin-top: 5px; + color: #808080; +} +.ibox-title h5 { + margin-top: 5px; + color: #808080; + font-weight: bold; +} + +h1, +h5 { + font-weight: 120; +} +h5 { + font-size: 12px; +} +h6 { + font-size: 10px; +} +input:focus { + background-color: #660000; + color: white; +} +a { + margin: 1em; + text-decoration: none; +} +/* Inicio Datatables */ +.table-datatable { + font-family: "open sans", "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 11px; +} +/* Fin Datatables */ + +.center { + text-align: center; +} +.img-left { + float: left; + width: 48px; +} +.pull-right { + float: right !important; +} + +/* FONDOS */ + +.gray-bg { + background-color: #f3f3f4; +} +.white-bg { + background-color: #fff; +} + +/* MAXIMAS Y MINIMAS */ + +.maximo { + font-size: 16px !important; + color: white !important; + width: 100% !important; +} + +.minimo { + font-size: 16px !important; + color: white !important; + width: 100% !important; +} + +/* ACERCA DE */ + +.ibox-content-acerca { + background-color: #ffffff; + color: inherit; + padding: 15px 20px 20px 20px; + border-color: #e7eaec; + border-image: none; + border-style: solid solid none; + border-width: 1px 0; +} +.img-responsive { + max-width: 100%; + height: auto; +} +.pie_pagina { + display: table; + text-align: center !important; + margin-left: auto; + margin-right: auto; +} \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000..5c2fbe8 Binary files /dev/null and b/favicon.ico differ diff --git a/imgs/Estacion-Carpincho.png b/imgs/Estacion-Carpincho.png new file mode 100644 index 0000000..113f6a1 Binary files /dev/null and b/imgs/Estacion-Carpincho.png differ diff --git a/imgs/Estacion-Carpincho_blanco.png b/imgs/Estacion-Carpincho_blanco.png new file mode 100644 index 0000000..afe664e Binary files /dev/null and b/imgs/Estacion-Carpincho_blanco.png differ diff --git a/imgs/Logo-Linux.png b/imgs/Logo-Linux.png new file mode 100644 index 0000000..54864dc Binary files /dev/null and b/imgs/Logo-Linux.png differ diff --git a/imgs/LogoLGPLv3-mobile.png b/imgs/LogoLGPLv3-mobile.png new file mode 100644 index 0000000..2ba3e9c Binary files /dev/null and b/imgs/LogoLGPLv3-mobile.png differ diff --git a/imgs/LogoLGPLv3.png b/imgs/LogoLGPLv3.png new file mode 100644 index 0000000..b7dc74d Binary files /dev/null and b/imgs/LogoLGPLv3.png differ diff --git a/imgs/Pna.jpg b/imgs/Pna.jpg new file mode 100755 index 0000000..c660a6e Binary files /dev/null and b/imgs/Pna.jpg differ diff --git a/imgs/Pna2.jpg b/imgs/Pna2.jpg new file mode 100755 index 0000000..a8b6703 Binary files /dev/null and b/imgs/Pna2.jpg differ diff --git a/imgs/Pna3.jpg b/imgs/Pna3.jpg new file mode 100755 index 0000000..04d0bcb Binary files /dev/null and b/imgs/Pna3.jpg differ diff --git a/imgs/Raspberry-Pi-Logo.png b/imgs/Raspberry-Pi-Logo.png new file mode 100644 index 0000000..8c2cc4f Binary files /dev/null and b/imgs/Raspberry-Pi-Logo.png differ diff --git a/imgs/Red-Ema-Libre.png b/imgs/Red-Ema-Libre.png new file mode 100644 index 0000000..f05526e Binary files /dev/null and b/imgs/Red-Ema-Libre.png differ diff --git a/imgs/Ronsoco-Logo-EmaLibre.png b/imgs/Ronsoco-Logo-EmaLibre.png new file mode 100644 index 0000000..24a36c9 Binary files /dev/null and b/imgs/Ronsoco-Logo-EmaLibre.png differ diff --git a/imgs/Servidor.png b/imgs/Servidor.png new file mode 100644 index 0000000..797624c Binary files /dev/null and b/imgs/Servidor.png differ diff --git a/imgs/capibara-Logo-EMALibre.png b/imgs/capibara-Logo-EMALibre.png new file mode 100644 index 0000000..2a5fe0e Binary files /dev/null and b/imgs/capibara-Logo-EMALibre.png differ diff --git a/imgs/carpincho-Logo-EMALibre.png b/imgs/carpincho-Logo-EMALibre.png new file mode 100644 index 0000000..6aef791 Binary files /dev/null and b/imgs/carpincho-Logo-EMALibre.png differ diff --git a/imgs/deb.png b/imgs/deb.png new file mode 100644 index 0000000..fc49bbd Binary files /dev/null and b/imgs/deb.png differ diff --git a/imgs/download.png b/imgs/download.png new file mode 100644 index 0000000..97a1a07 Binary files /dev/null and b/imgs/download.png differ diff --git a/imgs/estacion.png b/imgs/estacion.png new file mode 100644 index 0000000..19b7a07 Binary files /dev/null and b/imgs/estacion.png differ diff --git a/imgs/favicon.ico b/imgs/favicon.ico new file mode 100644 index 0000000..09355a8 Binary files /dev/null and b/imgs/favicon.ico differ diff --git a/imgs/gnu_linux.png b/imgs/gnu_linux.png new file mode 100644 index 0000000..6969c07 Binary files /dev/null and b/imgs/gnu_linux.png differ diff --git a/imgs/icono_inicio.png b/imgs/icono_inicio.png new file mode 100644 index 0000000..2017b2c Binary files /dev/null and b/imgs/icono_inicio.png differ diff --git a/imgs/info-circle-solid.png b/imgs/info-circle-solid.png new file mode 100755 index 0000000..0e2b2c7 Binary files /dev/null and b/imgs/info-circle-solid.png differ diff --git a/imgs/lluvia.png b/imgs/lluvia.png new file mode 100644 index 0000000..bc7357d Binary files /dev/null and b/imgs/lluvia.png differ diff --git a/imgs/logo_gugler_lab-mobile.png b/imgs/logo_gugler_lab-mobile.png new file mode 100644 index 0000000..58ddb9d Binary files /dev/null and b/imgs/logo_gugler_lab-mobile.png differ diff --git a/imgs/logo_gugler_lab.png b/imgs/logo_gugler_lab.png new file mode 100644 index 0000000..e75c878 Binary files /dev/null and b/imgs/logo_gugler_lab.png differ diff --git a/imgs/logo_uader_mini-mobile.png b/imgs/logo_uader_mini-mobile.png new file mode 100644 index 0000000..26bf979 Binary files /dev/null and b/imgs/logo_uader_mini-mobile.png differ diff --git a/imgs/logo_uader_mini.png b/imgs/logo_uader_mini.png new file mode 100644 index 0000000..f628ac3 Binary files /dev/null and b/imgs/logo_uader_mini.png differ diff --git a/imgs/nube-sol.png b/imgs/nube-sol.png new file mode 100644 index 0000000..7596188 Binary files /dev/null and b/imgs/nube-sol.png differ diff --git a/imgs/nublado.png b/imgs/nublado.png new file mode 100644 index 0000000..7793db8 Binary files /dev/null and b/imgs/nublado.png differ diff --git a/imgs/ok.png b/imgs/ok.png new file mode 100644 index 0000000..0cc4840 Binary files /dev/null and b/imgs/ok.png differ diff --git a/imgs/pws.png b/imgs/pws.png new file mode 100644 index 0000000..ffb0188 Binary files /dev/null and b/imgs/pws.png differ diff --git a/imgs/reload.gif b/imgs/reload.gif new file mode 100644 index 0000000..d45c663 Binary files /dev/null and b/imgs/reload.gif differ diff --git a/imgs/soleado.png b/imgs/soleado.png new file mode 100644 index 0000000..d4ca919 Binary files /dev/null and b/imgs/soleado.png differ diff --git a/imgs/wg.jpg b/imgs/wg.jpg new file mode 100644 index 0000000..1486cbd Binary files /dev/null and b/imgs/wg.jpg differ diff --git a/imgs/wg.png b/imgs/wg.png new file mode 100644 index 0000000..0dd4d53 Binary files /dev/null and b/imgs/wg.png differ diff --git a/imgs/windows-logo.png b/imgs/windows-logo.png new file mode 100644 index 0000000..621ecd0 Binary files /dev/null and b/imgs/windows-logo.png differ diff --git a/imgs/windows.svg b/imgs/windows.svg new file mode 100644 index 0000000..da162d4 --- /dev/null +++ b/imgs/windows.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/imgs/wu.png b/imgs/wu.png new file mode 100644 index 0000000..0a723f5 Binary files /dev/null and b/imgs/wu.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..bbc306f --- /dev/null +++ b/index.html @@ -0,0 +1,154 @@ + + + + + + GUGLER | EMA Libre + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + +
+ + + +
+
+ + + + +
+ EMA Libre Visor v1.5 (Ronsoco) - Licencia GPLv3 - Laboratorio de + Investigación Gugler. +
+
+ ADVERTENCIA: La información presentada puede sufrir alteraciones o estar + desactualizada por fallas en los dispositivos de captura y transmisión o + por problemas con el ISP o servidor remoto. + +
+ Nunca usar la información provista en este sitio para proteger vidas y/o + propiedades. +
\ No newline at end of file diff --git a/js/Metodos.js b/js/Metodos.js new file mode 100644 index 0000000..6d22375 --- /dev/null +++ b/js/Metodos.js @@ -0,0 +1,859 @@ +var Grafico; +var G_viento; +var G_vientoKm; +var G_presion; +var G_uv; +var G_iluminancia; +//PERMISOS DEL NAVEGADOR ACTUALES SOBRE GEOLOCALIZACION +function Obtener_Permisos_del_Navegador_GPS() { + try { + navigator.permissions.query({ name: "geolocation" }).then(function (result) { + switch (result.state) { + case "granted": + console.log("Geolocalizacion permitida."); + ObtenerGPS_Navegador(); + break; + case "prompt": + console.log("Geolocalizacion en preguntar. Se lanza modal."); + $("#ventanaModalGps").modal("show"); + break; + case "denied": + console.log("Geolocalizacion denegada."); + var mesg = " Su geolocalización esta denegada!."; + API_EMA.LeerRegistroEstacion(API_EMA.estaciones[0].id_estacion, true); + $("#modal_titulo").html("Permiso de Geolocalizacion Denegada"); + $("#modal_cuerpo").html( + "Su Navegador tiene el permiso de Geolocalizacion denegado para este sitio.
Si lo activa, podemos brindarle una mejor experiencia, en caso que no lo desee, tambien lo entendemos y le sugerimos que ignore esta advertencia." + ); + $("#modal_botones").html(""); + $.notify("Geolocalización del navegador denegada!.", { + position: "right bottom", + className: "warn", + autoHideDelay: 5000, + autoHide: true, + clickToHide: true + }); + $(document).on("click", ".notifyjs-corner", function () { + //RESPONDE NO + $("#ventanaModalGps").modal("show"); + $(this).trigger("notify-hide"); + }); + break; + default: + ObtenerGPS_Navegador(); + } + }); + } catch (error) { + console.log("No pudo consultar los permisos"); + ErrorObtiendoGPS("Imposible"); + } +} + +//POSICION ACTUAL DEL NAVEGADOR +function ObtenerGPS_Navegador() { + if (getCookie("estacion_seleccionada") == null) { + console.log("No hay seleccionada en cookie. Busca la mas cercana en linea."); + navigator.geolocation.getCurrentPosition( + Estacion_Mas_Cercana_GeoDistancia, + ErrorObtiendoGPS, + { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 } + ); + } else { + if(getCookie("estado_estacion")=="En línea"){ + console.log("Estacion registrada en cookie y en linea."); + API_EMA.distancia = getCookie("estacion_distancia"); + API_EMA.LeerRegistroEstacion(getCookie("estacion_seleccionada"), true); + } + else{ + // que busque la mas cercana en linea + + console.log("Estacion en cookie Fuera de linea. Busca la mas cercana en linea..."); + $.notify("Buscamos la mas cercana a ella!.", { + position: "right bottom", + className: "success", + autoHideDelay: 5000, + autoHide: true, + clickToHide: true + }); + $.notify("La estación preseleccionada se encuentra OFFLINE :(.", { + position: "right bottom", + className: "info", + autoHideDelay: 5000, + autoHide: true, + clickToHide: true + }); + + + navigator.geolocation.getCurrentPosition( + Estacion_Mas_Cercana_GeoDistancia, + ErrorObtiendoGPS, + { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 } + ); + } + } +} + +//DISTANCIA ENTRE LAS ESTACIONES GEOPOSICIONES +function Una_Estacion_GeoDistancia(position) { + console.log("Selecciono una estacion del Menu, busca distancia."); + var estacionMenuId = getCookie("MenuEstacionSeleccion"); + Latitud_navegador = position.coords.latitude; + Longitud_navegador = position.coords.longitude; + //console.log("GPS_Navegador: "+ Latitud_navegador +","+Longitud_navegador ); + var Bandera = false; + var lon2; + var lat2; + var Estacion; + var R; + var dLat; + var dLong; + var a; + var c; + var dist; + API_EMA.estaciones.forEach(function (registro) { + if (registro.id_estacion == estacionMenuId) + { Bandera = true; + Estado=registro.estado; + lon2 = registro.longitud; + lat2 = registro.latitud; + Estacion = registro.id_estacion; + rad = function (x) {return (x * Math.PI) / 180;}; + R = 6378.137; //Radio de la tierra en km + dLat = rad(lat2 - Latitud_navegador); + dLong = rad(lon2 - Longitud_navegador); + a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(rad(Latitud_navegador)) * + Math.cos(rad(lat2)) * + Math.sin(dLong / 2) * + Math.sin(dLong / 2); + c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + dist = R * c; + dist = dist.toFixed(1); //Retorna un decimales + // console.log("Distancia: "+dist); + API_EMA.distancia = dist; + setCookie("estacion_seleccionada", Estacion); + setCookie("estacion_distancia", dist); + setCookie("estado_estacion", Estado); + API_EMA.LeerRegistroEstacion(Estacion, true); + } + }); + if(!Bandera){console.log("No encontro la distancia, de la estacion seleccionada."); + setCookie("estacion_distancia", " - "); + setCookie("estado_estacion", "S/D"); + setCookie("estacion_seleccionada", estacionMenuId); + API_EMA.distancia = " - "; + API_EMA.LeerRegistroEstacion(estacionMenuId, true); + } + } + +//DISTANCIA ENTRE LAS ESTACIONES GEOPOSICIONES +function Estacion_Mas_Cercana_GeoDistancia(position) { + Latitud_navegador = position.coords.latitude; + Longitud_navegador = position.coords.longitude; + var DistanciaMenor = 9999999; + var Bandera = false; + var EstacionMasCercana; + var EstadoMenor; + var Estado; + var lon2; + var lat2; + var Estacion; + var R; + var dLat; + var dLong; + var a; + var c; + var dist; + API_EMA.estaciones.forEach(function (registro) { + lon2 = registro.longitud; + lat2 = registro.latitud; + Estacion = registro.id_estacion; + Estado = registro.estado; + /*En línea*/ + if (Estado=="En línea") { + Bandera = true; + if (Latitud_navegador != 0 && Longitud_navegador != 0) { + if (Latitud_navegador == lat2 && Longitud_navegador == lon2) { + DistanciaMenor = 0; + EstacionMasCercana = Estacion; + } else { + rad = function (x) { + return (x * Math.PI) / 180; + }; + R = 6378.137; //Radio de la tierra en km + dLat = rad(lat2 - Latitud_navegador); + dLong = rad(lon2 - Longitud_navegador); + a = + Math.sin(dLat / 2) * Math.sin(dLat / 2) + + Math.cos(rad(Latitud_navegador)) * + Math.cos(rad(lat2)) * + Math.sin(dLong / 2) * + Math.sin(dLong / 2); + c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a)); + dist = R * c; + dist = dist.toFixed(1); //Retorna un decimales + dist = parseFloat(dist); + if (DistanciaMenor > dist) { + DistanciaMenor = dist; + EstacionMasCercana = Estacion; + EstadoMenor = Estado; + } + } + } + } + }); + + if(!Bandera) + { // Si no encuentra ninguna en linea, cercana. + console.log("No hay estaciones en linea en el sistema. Se pone la primera."); + setCookie("estacion_distancia", " - "); + setCookie("estado_estacion", API_EMA.estaciones[0].estado); + setCookie("estacion_seleccionada", API_EMA.estaciones[0].id_estacion); + API_EMA.distancia = " - "; + API_EMA.LeerRegistroEstacion(API_EMA.estaciones[0].id_estacion, true); + }else{ + // En linea, mas cercana. + API_EMA.distancia = DistanciaMenor; + setCookie("estacion_seleccionada", EstacionMasCercana); + setCookie("estacion_distancia", DistanciaMenor); + setCookie("estado_estacion", EstadoMenor); + API_EMA.LeerRegistroEstacion(EstacionMasCercana, true); + } + } + +function ErrorObtiendoGPS(err) { + $("#myModal").modal("show"); + if(getCookie("MenuEstacionSeleccion") != null){ + API_EMA.estaciones.forEach(function (registro) { + if (registro.id_estacion == getCookie("MenuEstacionSeleccion")) + { + console.log("Sin Geolocalización y por menu seleccionada."); + setCookie("estacion_distancia", "S/D"); + setCookie("estado_estacion", registro.estado); + setCookie("estacion_seleccionada", registro.id_estacion); + API_EMA.distancia = " - "; + API_EMA.LeerRegistroEstacion(registro.id_estacion, true); + } + }); + }else{ + console.log(err.message); + console.log("Se carga una por defecto: " + API_EMA.estaciones[0].id_estacion); + API_EMA.LeerRegistroEstacion(API_EMA.estaciones[0].id_estacion, true); + } +} + +// GRAFICO VIENTOS +function ActualizarGraficos() { + G_viento.value = API_EMA.observaciones[0].viento_direccion; + G_vientoKm.value = API_EMA.observaciones[0].viento_rafagas; + G_presion.value = API_EMA.observaciones[0].presion_absoluta; + G_uv.value = API_EMA.observaciones[0].luxer_uv; + G_iluminancia.value = + parseFloat(API_EMA.observaciones[0].luxer_intencidad) / 1000; +} +// GRAFICO PRINCIPAL +function Mostrar_Graficos() { + API_EMA.grafico = false; + // GRAFICO DEL TIEMPO CHARTJS + //Se genera el grafico + var labels = API_EMA.estadisticas.map(function (e) { + return moment(e.hora).format("DD/MM/YYYY H") + ":00"; + }); + var humedadMax = API_EMA.estadisticas.map(function (e) { + return e.humedad_externa_max; + }); + var humedadMin = API_EMA.estadisticas.map(function (e) { + return e.humedad_externa_min; + }); + var TempMax = API_EMA.estadisticas.map(function (e) { + return e.temperatura_externa_max; + }); + var TemMin = API_EMA.estadisticas.map(function (e) { + return e.temperatura_externa_min; + }); + var LluviaMax = API_EMA.estadisticas.map(function (e) { + return e.lluvia_acumulado_hora_max; + }); + var VientoMax = API_EMA.estadisticas.map(function (e) { + return e.viento_velocidad_max; + }); + var LuxerMax = API_EMA.estadisticas.map(function (e) { + return e.luxer_intencidad_max || 0; + }); + var LuxerMin = API_EMA.estadisticas.map(function (e) { + return e.luxer_intencidad_min || 0; + }); + var UVMax = API_EMA.estadisticas.map(function (e) { + return e.luxer_uv_max || 0; + }); + var UVMin = API_EMA.estadisticas.map(function (e) { + return e.luxer_uv_min || 0; + }); + var VientoR_Max = API_EMA.estadisticas.map(function (e) { + return e.viento_rafagas_max || 0; + }); + var PresionA_Max = API_EMA.estadisticas.map(function (e) { + return e.presion_absoluta_max || 0; + }); + labels.reverse(); + humedadMax.reverse(); + humedadMin.reverse(); + TempMax.reverse(); + TemMin.reverse(); + LluviaMax.reverse(); + VientoMax.reverse(); + LuxerMax.reverse(); + LuxerMin.reverse(); + UVMax.reverse(); + UVMin.reverse(); + VientoR_Max.reverse(); + PresionA_Max.reverse(); + //console.log(API_EMA.estadisticas); + var ctx = document.getElementById("graph"); + if (Grafico != undefined) { + //console.log("borro grafico"); + Grafico.destroy(); + } + Grafico = new Chart(ctx, { + type: "line", + data: { + labels: labels, + datasets: [ + { + label: "Humedad_Max", + data: humedadMax, + pointRadius: 1, + backgroundColor: ["rgba(200, 0, 0, 0.2)"], + borderColor: ["rgba(200,0,0,1)"], + borderWidth: 1 + }, + { + label: "Humedad_Min", + data: humedadMin, + pointRadius: 1, + backgroundColor: ["rgba(100,0,0, 0.6)"], + borderColor: ["rgba(100,0,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "Lluvia", + data: LluviaMax, + pointRadius: 1, + backgroundColor: ["rgba(100,100,100, 0.6)"], + borderColor: ["rgba(100,100,100,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "VientoMax", + data: VientoMax, + pointRadius: 1, + backgroundColor: ["rgba(100,180,0, 0.7)"], + borderColor: ["rgba(100,190,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "RafagasMax", + data: VientoR_Max, + pointRadius: 1, + backgroundColor: ["rgba(100,80,0, 0.7)"], + borderColor: ["rgba(100,80,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "Presion_Max", + data: PresionA_Max, + pointRadius: 1, + backgroundColor: ["rgba(10,8,0, 0.2)"], + borderColor: ["rgba(10,9,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "Temperatura_Max", + data: TempMax, + pointRadius: 1, + backgroundColor: ["rgba(100,80,0, 0.2)"], + borderColor: ["rgba(100,90,0,1)"], + borderWidth: 1 + }, + { + label: "Temperatura_Min", + data: TemMin, + pointRadius: 1, + backgroundColor: ["rgba(100,80,0, 0.7)"], + borderColor: ["rgba(100,90,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "UV_Max", + data: UVMax, + pointRadius: 1, + backgroundColor: ["rgba(100,80,200, 0.2)"], + borderColor: ["rgba(100,90,200,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "UV_Min", + data: UVMin, + pointRadius: 1, + backgroundColor: ["rgba(100,80,200, 0.7)"], + borderColor: ["rgba(100,90,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "Luxer_Max", + data: LuxerMax, + pointRadius: 1, + backgroundColor: ["rgba(100,80,100, 0.2)"], + borderColor: ["rgba(100,90,0,1)"], + borderWidth: 1, + hidden: true + }, + { + label: "Luxer_Min", + data: LuxerMin, + pointRadius: 1, + backgroundColor: ["rgba(100,80,100, 0.7)"], + borderColor: ["rgba(100,90,0,1)"], + borderWidth: 1, + hidden: true + } + ] + }, + options: { + elements: { point: { hitRadius: 10, hoverRadius: 10 } }, + scales: { + yAxes: [ + { + ticks: { + beginAtZero: true + } + } + ] + } + } + }); + + // GRAFICO VIENTO DIRECCION + + G_viento = new RadialGauge({ + renderTo: "grafico_vientos", + minValue: 0, + maxValue: 360, + majorTicks: ["N", "NE", "E", "SE", "S", "SW", "W", "NW", "N"], + minorTicks: 22, + ticksAngle: 360, + startAngle: 180, + strokeTicks: false, + highlights: false, + colorPlate: "#a33", + colorMajorTicks: "#f5f5f5", + colorMinorTicks: "#ddd", + colorNumbers: "#ccc", + colorNeedle: "rgba(240, 128, 128, 1)", + colorNeedleEnd: "rgba(255, 160, 122, .9)", + valueBox: false, + valueTextShadow: false, + colorCircleInner: "#fff", + colorNeedleCircleOuter: "#ccc", + needleCircleSize: 15, + needleCircleOuter: false, + animationRule: "linear", + needleType: "arrow", + needleStart: -10, + needleEnd: 80, + needleWidth: 4, + borders: true, + borderInnerWidth: 0, + borderMiddleWidth: 0, + borderOuterWidth: 10, + colorBorderOuter: "#ccc", + colorBorderOuterEnd: "#ccc", + colorNeedleShadowDown: "#222", + borderShadowWidth: 0, + animationDuration: 2500 + }).draw(); + + // GRAFICO VIENTO KILOMETROS + + G_vientoKm = new RadialGauge({ + renderTo: "grafico_vientos_km", + units: "Rafagas", + minValue: 0, + maxValue: 220, + valueTextShadow: false, + valueInt: 1, + valueDec: 2, + colorValueBoxBackground: "#cccccc", + colorValueBoxShadow: true, + colorValueTextShadow: true, + majorTicks: [ + "0", + "20", + "40", + "60", + "80", + "100", + "120", + "140", + "160", + "180", + "200", + "220" + ], + minorTicks: 10, + strokeTicks: true, + highlights: [ + { + from: 40, + to: 80, + color: "rgba(255, 0, 0, .10)" + }, + { + from: 80, + to: 120, + color: "rgba(255, 0, 0, .35)" + }, + { + from: 120, + to: 160, + color: "rgba(255, 0, 0, .75)" + }, + { + from: 160, + to: 220, + color: "rgba(255, 0, 0, .95)" + } + ], + colorPlate: "#fff", + borderShadowWidth: 0, + borders: false, + needleType: "arrow", + needleWidth: 2, + needleCircleSize: 7, + needleCircleOuter: true, + needleCircleInner: false, + animationDuration: 1500, + animationRule: "linear" + }).draw(); + + // GRAFICO PRESION ATMOSFERICA + + G_presion = new RadialGauge({ + renderTo: "grafico_presion", + units: "Hpa", + minValue: 970, + maxValue: 1050, + majorTicks: [ + "970", + "980", + "990", + "1000", + "1010", + "1020", + "1030", + "1040", + "1050" + ], + minorTicks: 10, + strokeTicks: true, + highlights: [ + { + from: 1015, + to: 1050, + color: "rgba(200, 50, 50, .75)" + } + ], + colorPlate: "#fff", + borderShadowWidth: 0, + borders: false, + valueBox: false, + needleType: "arrow", + needleWidth: 2, + needleCircleSize: 7, + needleCircleOuter: true, + needleCircleInner: false, + animationDuration: 1500, + animationRule: "linear" + }).draw(); + + // GRAFICO RAYOS UV + + G_uv = new RadialGauge({ + renderTo: "grafico_uv", + units: "UV", + minValue: 0, + maxValue: 11, + majorTicks: ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11"], + minorTicks: 1, + strokeTicks: true, + highlights: [ + { + from: 0, + to: 2, + color: "rgba(57, 162, 1, 1)" + }, + { + from: 2, + to: 5, + color: "rgba(57, 102, 1, 1)" + }, + { + from: 5, + to: 7, + color: "rgba(200, 50, 50, 1)" + }, + { + from: 7, + to: 9, + color: "rgba(255, 0, 0, 1)" + }, + { + from: 9, + to: 11, + color: "rgba(92, 43, 136, 1)" + } + ], + colorPlate: "#fff", + borderShadowWidth: 0, + borders: false, + valueBox: false, + needleType: "arrow", + needleWidth: 2, + needleCircleSize: 7, + needleCircleOuter: true, + needleCircleInner: false, + animationDuration: 1500, + animationRule: "linear" + }).draw(); + + // GRAFICO DE Iluminacia + + G_iluminancia = new RadialGauge({ + renderTo: "grafico_iluminancia", + units: "Klux", + minValue: 0, + maxValue: 300, + majorTicks: [ + "0", + "20", + "40", + "60", + "80", + "100", + "120", + "140", + "160", + "180", + "200", + "220", + "240", + "260", + "280", + "300" + ], + minorTicks: 5, + strokeTicks: true, + highlights: [ + { + from: 0, + to: 40, + color: "rgba(255, 255, 0, .15)" + }, + { + from: 40, + to: 80, + color: "rgba(255, 255, 0, .35)" + }, + { + from: 80, + to: 120, + color: "rgba(255, 255, 0, .45)" + }, + { + from: 120, + to: 160, + color: "rgba(255, 255, 112, 1)" + }, + { + from: 160, + to: 300, + color: "rgba(255, 255, 0, 1)" + } + ], + colorPlate: "#fff", + borderShadowWidth: 0, + borders: false, + valueBox: false, + needleType: "arrow", + needleWidth: 2, + needleCircleSize: 7, + needleCircleOuter: true, + needleCircleInner: false, + animationDuration: 1500, + animationRule: "linear" + }).draw(); + // Se setea la variable que ya se crearon los graficos + API_EMA.grafico = true; +} + +//BUSCADOR DE ESTACIONES - MENU SUPERIOR +function MenuBuqueda (DatosEstaciones) { + var options = { + data: DatosEstaciones, + + getValue: function (element) { + return element.ciudad + ", " + element.pais; + }, + template: { + type: "custom", + method: function (value, item) { + var Estadospan='danger'; + if (item.estado=="En línea") {Estadospan = 'success';} + return " "+item.estado+"
"+item.ciudad + ", " + item.pais + "
Estación: "+item.nombre+"
"; + } + }, + + list: { + onClickEvent: function () { + var id = $("#buscador").getSelectedItemData().id_estacion; + API_EMA.observaciones = []; + API_EMA.grafico = false; + API_EMA.tabla = false; + setCookie("MenuEstacionSeleccion",id); + navigator.geolocation.getCurrentPosition( + Una_Estacion_GeoDistancia, + ErrorObtiendoGPS, + { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 }); + }, + onKeyEnterEvent: function () { + var id = $("#buscador").getSelectedItemData().id_estacion; + API_EMA.observaciones = []; + API_EMA.grafico = false; + API_EMA.tabla = false; + setCookie("MenuEstacionSeleccion",id); + navigator.geolocation.getCurrentPosition( + Una_Estacion_GeoDistancia, + ErrorObtiendoGPS, + { enableHighAccuracy: true, timeout: 5000, maximumAge: 0 } ); + }, + match: { + enabled: true + }, + maxNumberOfElements: 6, + showAnimation: { + type: "slide", + time: 300 + }, + hideAnimation: { + type: "slide", + time: 300 + } + }, + theme: "round" + }; + + //$("#buscador").easyAutocomplete(options); + + $("#buscador").easyAutocomplete(options).click(function(){ + $(this).triggerHandler(jQuery.Event("keyup", { keyCode: 65, which: 65})) +}); + +} + + +//ARMAR DATATABLE +function ArmarDatatable() { + API_EMA.tabla = false; + $("#dt_principal").DataTable({ + dom: "Bfrtip", + buttons: ["copy", "csv"], + scrollX: true, + scrollCollapse: true, + //processing: true, + //deferLoading: 57, + ordering: true, + destroy: true, + order: [[0, "asc"]], + language: { + decimal: "", + emptyTable: "No datos disponibles.", + info: + "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros", + infoEmpty: "Mostrando registros del 0 al 0 de un total 0 registros", + infoFiltered: "(filtrados de _MAX_ total registros)", + infoPostFix: "", + thousands: ",", + lengthMenu: "Mostrando _MENU_ registros", + loadingRecords: "Cargando...", + processing: "Procesando...", + search: "Buscar:", + zeroRecords: "No hay datos encontrados en el filtro.", + paginate: { + first: "Primero", + last: "Ultimo", + next: "Prox", + previous: "Ant" + }, + aria: { + sortAscending: ": activate to sort column ascending", + sortDescending: ": activate to sort column descending" + } + } + }); + API_EMA.tabla = true; +} +// METODOS PARA GET Y SET COOKIE +function setCookie(key, value) { + var expires = new Date(); + expires.setTime(expires.getTime() + 1 * 24 * 60 * 60 * 1000); + document.cookie = key + "=" + value + ";expires=" + expires.toUTCString(); +} + +function getCookie(key) { + var keyValue = document.cookie.match("(^|;) ?" + key + "=([^;]*)(;|$)"); + return keyValue ? keyValue[2] : null; +} + +function getMax(arr, prop) { + var max; + for (var i = 0; i < arr.length; i++) { + if (!max || parseFloat(arr[i][prop]) > parseFloat(max)) max = arr[i][prop]; + } + //console.log(max); + if (typeof max === "undefined" || max === null) { + max = "SD"; + } + return max; +} +function getMin(arr, prop) { + var min; + for (var i = 0; i < arr.length; i++) { + if (!min || parseFloat(arr[i][prop]) < parseFloat(min)) min = arr[i][prop]; + } + if (typeof min === "undefined" || min === null) { + min = "SD"; + } + return min; +} + +function CambiarFondo(intensidad){ + // console.log(intensidad) + if(intensidad>5){ + $('#cuerpo').css("background-image", "url(./imgs/Pna.jpg)"); + } + if(intensidad <=35){ + $('#cuerpo').css("background-image", "url(./imgs/Pna2.jpg)"); + } + if(intensidad<5 && intensidad>-1){ + $('#cuerpo').css("background-image", "url(./imgs/Pna3.jpg)"); + } +} diff --git a/js/MetodosVue.js b/js/MetodosVue.js new file mode 100644 index 0000000..ba53282 --- /dev/null +++ b/js/MetodosVue.js @@ -0,0 +1,98 @@ +// METODOS DE LECTURA DE LA API DE EMACENTER - (VUE) + +function Cargar_API_VUE() { + //Si no esta cargada se carga. + const Url = "https://emacenter.gugler.com.ar/api/station/"; + var intensidad=0; + API_EMA = new Vue( + { + el: '#app', + data() { + return { + servidor_estado: false, + servidor_error: false, + tiempo_enlinea: 0, + grafico: false, + tabla: false, + observaciones: [], + datatable:[], + estadisticas: [], + estaciones: [], + nombre: "", + modelo: "", + pais: "", + ciudad: "", + calle: "", + latitud: "", + longitud: "", + altura: "", + fecha_ultimo_registro: "", + uptime: "", + distancia: "", + software: "", + cargando: false, + estacion_selecionada: false, + } + }, + methods: { + // API - Lectura Estaciones de emacenter + ObtenerEstaciones() { + console.log('Buscando estaciones...'); + axios + .get(Url) + .then(response => ( + this.estaciones = response.data, + this.servidor_estado = true, + this.servidor_error = false, + MenuBuqueda(API_EMA.estaciones), //Carga el Menu Superior de Busqueda Con las Estaciones + Obtener_Permisos_del_Navegador_GPS() // Busca la mas cercana y si no hay acceso al GPS, pone por default + )) + .catch(e => { this.servidor_estado = false, this.servidor_error = true }); + }, + // API - Lectura Registros de una estacion especifica. + LeerRegistroEstacion(estacion, mostrar_grafico) { + this.uptime = "Obteniendo datos.."; + console.log(estacion); + this.cargando = true; + axios + .get(Url + estacion + '/', { + param: { + 'estacion': estacion + } + }) + .then(response => (moment.locale('es'), + this.nombre = response.data.nombre, + this.modelo = response.data.modelo, + this.pais = response.data.pais, + this.ciudad = response.data.ciudad, + this.calle = response.data.calle, + this.latitud = response.data.latitud, + this.longitud = response.data.longitud, + this.altura = Number(response.data.altura).toFixed(2), + this.fecha_ultimo_registro = moment(response.data.fecha_ultimo_registro).format('DD/MM/YYYY H:mm:ss'), + this.software = response.data.registros[0].software, + this.observaciones = response.data.registros, + intensidad = response.data.registros[0].luxer_intencidad, + this.datatable = response.data.registros, + this.estadisticas = response.data.estadisticas, + this.uptime = moment(this.fecha_ultimo_registro, "DD/MM/YYYY h:mm:ss a").fromNow(), + this.cargando = false, + this.tiempo_enlinea = moment(moment(), "DD/MM/YYYY HH:mm:ss").diff(moment(this.fecha_ultimo_registro, "DD/MM/YYYY HH:mm:ss")) / 60000 + )) + .catch(e => { console.log(e) }) + .then(function () { + if (mostrar_grafico) Mostrar_Graficos(); + ActualizarGraficos() + ArmarDatatable() + console.log(intensidad) + CambiarFondo(intensidad) + }) + } + }, + created() { + //Lectura Continua de una estacion desde la cookie + console.log('API Cagarda.'); + setInterval(function () { this.LeerRegistroEstacion(getCookie('estacion_seleccionada'), false); }.bind(this), 30000); + }, + }) +} \ No newline at end of file diff --git a/js/inicial.js b/js/inicial.js new file mode 100644 index 0000000..fdcb004 --- /dev/null +++ b/js/inicial.js @@ -0,0 +1,55 @@ +//Cargar Inicial de la APP +window.onload = function () { + const MenuDefault = 'Inicio'; + // MENU SUPERIOR - ACCIONES + function MenuGUI(elemento) { + try { + var seleccion = document.getElementById('app'); + $(seleccion).empty(); + $(seleccion).load('./view/modelo_' + elemento + '.html', function (datos_archivo) { + switch (elemento) { + case 'Inicio': + console.log('Inicio'); + Cargar_API_VUE(); + API_EMA.ObtenerEstaciones(); + break; + case 'Acerca': + console.log('Acerca'); + break; + case 'Descargas': + console.log('Descargas'); + break; + case 'Pronostico': + console.log('Pronostico'); + break; + case 'Estaciones': + console.log('Estaciones'); + break; + default: + console.log('No existe el menu seleccionado: ' + elemento); + MenuGUI(MenuDefault); + } + }); + } catch (e) { + //Si falla se informa en consola + console.log('Ups, problemas en la carga'); + } + } + + //CARGADOR DEL MENU + + $('.nav-link').on('click', function (evnt) { + var obj = $(evnt.target); + $('#' + obj.attr('aria-controls')).empty(); + MenuGUI(obj.attr('aria-controls')); + obj = null; + }); + + // AUTOLOAD DEL MENU POR DEFAULT + MenuGUI(MenuDefault); + + //Tooltip + $(document).ready(function(){ + $('[data-toggle="tooltip"]').tooltip(); + }); +}; diff --git a/libs/EasyAutocomplete/easy-autocomplete.css b/libs/EasyAutocomplete/easy-autocomplete.css new file mode 100644 index 0000000..3351771 --- /dev/null +++ b/libs/EasyAutocomplete/easy-autocomplete.css @@ -0,0 +1,320 @@ +/* + * easy-autocomplete + * jQuery plugin for autocompletion + * + * @author Łukasz Pawełczak (http://github.com/pawelczak) + * @version 1.3.5 + * Copyright License: + */ + +.easy-autocomplete { + position: relative; +} +.easy-autocomplete input { + border-color: #ccc; + border-radius: 4px; + border-style: solid; + border-width: 1px; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset; + color: #555; + float: none; + padding: 6px 12px; +} +.easy-autocomplete input:hover, .easy-autocomplete input:focus { + box-shadow: none; +} +.easy-autocomplete a { + display: block; +} +.easy-autocomplete.eac-blue-light input:hover, .easy-autocomplete.eac-blue-light input:focus { + border-color: #66afe9; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(102, 175, 233, 0.6); +} +.easy-autocomplete.eac-blue-light ul { + border-color: #66afe9; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(102, 175, 233, 0.6); +} +.easy-autocomplete.eac-blue-light ul li, .easy-autocomplete.eac-blue-light ul .eac-category { + border-color: #66afe9; +} +.easy-autocomplete.eac-blue-light ul li.selected, .easy-autocomplete.eac-blue-light ul .eac-category.selected { + background-color: #ecf5fc; +} +.easy-autocomplete.eac-green-light input:hover, .easy-autocomplete.eac-green-light input:focus { + border-color: #41DB00; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(146, 237, 107, 0.6); +} +.easy-autocomplete.eac-green-light ul { + border-color: #41DB00; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(146, 237, 107, 0.6); +} +.easy-autocomplete.eac-green-light ul li, .easy-autocomplete.eac-green-light ul .eac-category { + border-color: #41DB00; +} +.easy-autocomplete.eac-green-light ul li.selected, .easy-autocomplete.eac-green-light ul .eac-category.selected { + background-color: #9eff75; +} +.easy-autocomplete.eac-red-light input:hover, .easy-autocomplete.eac-red-light input:focus { + border-color: #ff5b5b; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(255, 90, 90, 0.6); +} +.easy-autocomplete.eac-red-light ul { + border-color: #ff5b5b; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(255, 90, 90, 0.6); +} +.easy-autocomplete.eac-red-light ul li, .easy-autocomplete.eac-red-light ul .eac-category { + border-color: #ff5b5b; +} +.easy-autocomplete.eac-red-light ul li.selected, .easy-autocomplete.eac-red-light ul .eac-category.selected { + background-color: #ff8e8e; +} +.easy-autocomplete.eac-yellow-light input:hover, .easy-autocomplete.eac-yellow-light input:focus { + border-color: #ffdb00; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(255, 231, 84, 0.6); +} +.easy-autocomplete.eac-yellow-light ul { + border-color: #ffdb00; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(255, 231, 84, 0.6); +} +.easy-autocomplete.eac-yellow-light ul li, .easy-autocomplete.eac-yellow-light ul .eac-category { + border-color: #ffdb00; +} +.easy-autocomplete.eac-yellow-light ul li.selected, .easy-autocomplete.eac-yellow-light ul .eac-category.selected { + background-color: #ffe233; +} +.easy-autocomplete.eac-dark-light input:hover, .easy-autocomplete.eac-dark-light input:focus { + border-color: #333; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(55, 55, 55, 0.6); +} +.easy-autocomplete.eac-dark-light ul { + border-color: #333; + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075) inset, 0 0 8px rgba(55, 55, 55, 0.6); +} +.easy-autocomplete.eac-dark-light ul li, .easy-autocomplete.eac-dark-light ul .eac-category { + border-color: #333; +} +.easy-autocomplete.eac-dark-light ul li.selected, .easy-autocomplete.eac-dark-light ul .eac-category.selected { + background-color: #4d4d4d; + color: #fff; +} +.easy-autocomplete.eac-dark { + color: #fff; +} +.easy-autocomplete.eac-dark input { + background-color: #404040; + border-radius: 4px; + box-shadow: 0; + color: #f6f6f6; +} +.easy-autocomplete.eac-dark input:hover, .easy-autocomplete.eac-dark input:focus { + border-color: #333; + box-shadow: 0; +} +.easy-autocomplete.eac-dark ul { + border-color: #333; +} +.easy-autocomplete.eac-dark ul li, .easy-autocomplete.eac-dark ul .eac-category { + background-color: #404040; + border-color: #333; +} +.easy-autocomplete.eac-dark ul li.selected, .easy-autocomplete.eac-dark ul .eac-category.selected { + background-color: #737373; + color: #f6f6f6; +} +.easy-autocomplete.eac-dark-glass { + color: #fff; +} +.easy-autocomplete.eac-dark-glass input { + background-color: rgba(0, 0, 0, 0.8); + border-radius: 4px; + box-shadow: 0; + color: #f6f6f6; +} +.easy-autocomplete.eac-dark-glass input:hover, .easy-autocomplete.eac-dark-glass input:focus { + border-color: rgba(0, 0, 0, 0.8); + box-shadow: 0; +} +.easy-autocomplete.eac-dark-glass ul { + border-color: rgba(0, 0, 0, 0.8); +} +.easy-autocomplete.eac-dark-glass ul li, .easy-autocomplete.eac-dark-glass ul .eac-category { + background-color: rgba(0, 0, 0, 0.8); + border-color: rgba(0, 0, 0, 0.8); +} +.easy-autocomplete.eac-dark-glass ul li.selected, .easy-autocomplete.eac-dark-glass ul .eac-category.selected { + background-color: rgba(64, 64, 64, 0.8); + color: #f6f6f6; +} +.easy-autocomplete.eac-dark-glass ul li:last-child, .easy-autocomplete.eac-dark-glass ul .eac-category:last-child { + border-radius: 0 0 4px 4px; +} +.easy-autocomplete.eac-blue { + color: #fff; +} +.easy-autocomplete.eac-blue input { + background-color: #6d9ed1; + border-radius: 4px; + box-shadow: 0; + color: #f6f6f6; +} +.easy-autocomplete.eac-blue input::-webkit-input-placeholder { + color: #f6f6f6; +} +.easy-autocomplete.eac-blue input:-moz-placeholder { + color: #f6f6f6; +} +.easy-autocomplete.eac-blue input::-moz-placeholder { + color: #f6f6f6; +} +.easy-autocomplete.eac-blue input:-ms-input-placeholder { + color: #f6f6f6; +} +.easy-autocomplete.eac-blue input:hover, .easy-autocomplete.eac-blue input:focus { + border-color: #5A91CB; + box-shadow: 0; +} +.easy-autocomplete.eac-blue ul { + border-color: #5A91CB; +} +.easy-autocomplete.eac-blue ul li, .easy-autocomplete.eac-blue ul .eac-category { + background-color: #6d9ed1; + border-color: #5A91CB; +} +.easy-autocomplete.eac-blue ul li.selected, .easy-autocomplete.eac-blue ul .eac-category.selected { + background-color: #94b8dd; + color: #f6f6f6; +} +.easy-autocomplete.eac-yellow { + color: #333; +} +.easy-autocomplete.eac-yellow input { + background-color: #ffdb7e; + border-color: #333; + border-radius: 4px; + box-shadow: 0; + color: #333; +} +.easy-autocomplete.eac-yellow input:hover, .easy-autocomplete.eac-yellow input:focus { + border-color: #333; + box-shadow: 0; +} +.easy-autocomplete.eac-yellow ul { + border-color: #333; +} +.easy-autocomplete.eac-yellow ul li, .easy-autocomplete.eac-yellow ul .eac-category { + background-color: #ffdb7e; + border-color: #333; +} +.easy-autocomplete.eac-yellow ul li.selected, .easy-autocomplete.eac-yellow ul .eac-category.selected { + background-color: #ffe9b1; + color: #333; +} +.easy-autocomplete.eac-purple { + color: #333; +} +.easy-autocomplete.eac-purple input { + background-color: #d6d1e7; + border-color: #b8afd5; + box-shadow: 0; + color: #333; +} +.easy-autocomplete.eac-purple input:hover, .easy-autocomplete.eac-purple input:focus { + border-color: #333; + box-shadow: 0; +} +.easy-autocomplete.eac-purple ul { + border-color: #333; +} +.easy-autocomplete.eac-purple ul li, .easy-autocomplete.eac-purple ul .eac-category { + background-color: #d6d1e7; + border-color: #333; +} +.easy-autocomplete.eac-purple ul li.selected, .easy-autocomplete.eac-purple ul .eac-category.selected { + background-color: #ebe8f3; + color: #333; +} +.easy-autocomplete.eac-bootstrap input { + border-color: #ccc; + border-radius: 4px; + border-style: solid; + border-width: 1px; + color: #555; + padding: 6px 12px; +} + +.easy-autocomplete-container { + left: 0; + position: absolute; + width: 100%; + z-index: 2; +} +.easy-autocomplete-container ul { + background: none repeat scroll 0 0 #ffffff; + border-top: 1px dotted #ccc; + display: none; + margin-top: 0; + padding-bottom: 0; + padding-left: 0; + position: relative; + top: -1px; +} +.easy-autocomplete-container ul li, .easy-autocomplete-container ul .eac-category { + background: inherit; + border-color: #ccc; + border-image: none; + border-style: solid; + border-width: 0 1px; + display: block; + font-size: 14px; + font-weight: normal; + padding: 4px 12px; +} +.easy-autocomplete-container ul li:last-child { + border-radius: 0 0 2px 2px; + border-width: 0 1px 1px; +} +.easy-autocomplete-container ul li.selected { + background: none repeat scroll 0 0 #ebebeb; + cursor: pointer; +} +.easy-autocomplete-container ul li.selected div { + font-weight: normal; +} +.easy-autocomplete-container ul li div { + display: block; + font-weight: normal; + word-break: break-all; +} +.easy-autocomplete-container ul li b { + font-weight: bold; +} +.easy-autocomplete-container ul .eac-category { + font-color: #aaa; + font-style: italic; +} + +.eac-description .eac-item span { + color: #aaa; + font-style: italic; + font-size: 0.9em; +} + +.eac-icon-left .eac-item img { + margin-right: 4px; + max-height: 30px; +} + +.eac-icon-right .eac-item { + margin-top: 8px; + min-height: 24px; + position: relative; +} +.eac-icon-right .eac-item img { + margin-left: 4px; + max-height: 30px; + position: absolute; + right: -4px; + top: -8px; +} + +/*# sourceMappingURL=easy-autocomplete.css.map */ diff --git a/libs/EasyAutocomplete/easy-autocomplete.min.css b/libs/EasyAutocomplete/easy-autocomplete.min.css new file mode 100644 index 0000000..b5c0875 --- /dev/null +++ b/libs/EasyAutocomplete/easy-autocomplete.min.css @@ -0,0 +1,11 @@ +/* + * easy-autocomplete + * jQuery plugin for autocompletion + * + * @author Łukasz Pawełczak (http://github.com/pawelczak) + * @version 1.3.5 + * Copyright License: + */ + +.easy-autocomplete{position:relative}.easy-autocomplete input{border-color:#ccc;border-radius:4px;border-style:solid;border-width:1px;box-shadow:0 1px 2px rgba(0,0,0,0.1) inset;color:#555;float:none;padding:6px 12px}.easy-autocomplete input:hover,.easy-autocomplete input:focus{box-shadow:none}.easy-autocomplete a{display:block}.easy-autocomplete.eac-blue-light input:hover,.easy-autocomplete.eac-blue-light input:focus{border-color:#66afe9;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(102,175,233,0.6)}.easy-autocomplete.eac-blue-light ul{border-color:#66afe9;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(102,175,233,0.6)}.easy-autocomplete.eac-blue-light ul li,.easy-autocomplete.eac-blue-light ul .eac-category{border-color:#66afe9}.easy-autocomplete.eac-blue-light ul li.selected,.easy-autocomplete.eac-blue-light ul .eac-category.selected{background-color:#ecf5fc}.easy-autocomplete.eac-green-light input:hover,.easy-autocomplete.eac-green-light input:focus{border-color:#41DB00;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(146,237,107,0.6)}.easy-autocomplete.eac-green-light ul{border-color:#41DB00;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(146,237,107,0.6)}.easy-autocomplete.eac-green-light ul li,.easy-autocomplete.eac-green-light ul .eac-category{border-color:#41DB00}.easy-autocomplete.eac-green-light ul li.selected,.easy-autocomplete.eac-green-light ul .eac-category.selected{background-color:#9eff75}.easy-autocomplete.eac-red-light input:hover,.easy-autocomplete.eac-red-light input:focus{border-color:#ff5b5b;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(255,90,90,0.6)}.easy-autocomplete.eac-red-light ul{border-color:#ff5b5b;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(255,90,90,0.6)}.easy-autocomplete.eac-red-light ul li,.easy-autocomplete.eac-red-light ul .eac-category{border-color:#ff5b5b}.easy-autocomplete.eac-red-light ul li.selected,.easy-autocomplete.eac-red-light ul .eac-category.selected{background-color:#ff8e8e}.easy-autocomplete.eac-yellow-light input:hover,.easy-autocomplete.eac-yellow-light input:focus{border-color:#ffdb00;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(255,231,84,0.6)}.easy-autocomplete.eac-yellow-light ul{border-color:#ffdb00;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(255,231,84,0.6)}.easy-autocomplete.eac-yellow-light ul li,.easy-autocomplete.eac-yellow-light ul .eac-category{border-color:#ffdb00}.easy-autocomplete.eac-yellow-light ul li.selected,.easy-autocomplete.eac-yellow-light ul .eac-category.selected{background-color:#ffe233}.easy-autocomplete.eac-dark-light input:hover,.easy-autocomplete.eac-dark-light input:focus{border-color:#333;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(55,55,55,0.6)}.easy-autocomplete.eac-dark-light ul{border-color:#333;box-shadow:0 1px 1px rgba(0,0,0,0.075) inset,0 0 8px rgba(55,55,55,0.6)}.easy-autocomplete.eac-dark-light ul li,.easy-autocomplete.eac-dark-light ul .eac-category{border-color:#333}.easy-autocomplete.eac-dark-light ul li.selected,.easy-autocomplete.eac-dark-light ul .eac-category.selected{background-color:#4d4d4d;color:#fff}.easy-autocomplete.eac-dark{color:#fff}.easy-autocomplete.eac-dark input{background-color:#404040;border-radius:4px;box-shadow:0;color:#f6f6f6}.easy-autocomplete.eac-dark input:hover,.easy-autocomplete.eac-dark input:focus{border-color:#333;box-shadow:0}.easy-autocomplete.eac-dark ul{border-color:#333}.easy-autocomplete.eac-dark ul li,.easy-autocomplete.eac-dark ul .eac-category{background-color:#404040;border-color:#333}.easy-autocomplete.eac-dark ul li.selected,.easy-autocomplete.eac-dark ul .eac-category.selected{background-color:#737373;color:#f6f6f6}.easy-autocomplete.eac-dark-glass{color:#fff}.easy-autocomplete.eac-dark-glass input{background-color:rgba(0,0,0,0.8);border-radius:4px;box-shadow:0;color:#f6f6f6}.easy-autocomplete.eac-dark-glass input:hover,.easy-autocomplete.eac-dark-glass input:focus{border-color:rgba(0,0,0,0.8);box-shadow:0}.easy-autocomplete.eac-dark-glass ul{border-color:rgba(0,0,0,0.8)}.easy-autocomplete.eac-dark-glass ul li,.easy-autocomplete.eac-dark-glass ul .eac-category{background-color:rgba(0,0,0,0.8);border-color:rgba(0,0,0,0.8)}.easy-autocomplete.eac-dark-glass ul li.selected,.easy-autocomplete.eac-dark-glass ul .eac-category.selected{background-color:rgba(64,64,64,0.8);color:#f6f6f6}.easy-autocomplete.eac-dark-glass ul li:last-child,.easy-autocomplete.eac-dark-glass ul .eac-category:last-child{border-radius:0 0 4px 4px}.easy-autocomplete.eac-blue{color:#fff}.easy-autocomplete.eac-blue input{background-color:#6d9ed1;border-radius:4px;box-shadow:0;color:#f6f6f6}.easy-autocomplete.eac-blue input::-webkit-input-placeholder{color:#f6f6f6}.easy-autocomplete.eac-blue input:-moz-placeholder{color:#f6f6f6}.easy-autocomplete.eac-blue input::-moz-placeholder{color:#f6f6f6}.easy-autocomplete.eac-blue input:-ms-input-placeholder{color:#f6f6f6}.easy-autocomplete.eac-blue input:hover,.easy-autocomplete.eac-blue input:focus{border-color:#5A91CB;box-shadow:0}.easy-autocomplete.eac-blue ul{border-color:#5A91CB}.easy-autocomplete.eac-blue ul li,.easy-autocomplete.eac-blue ul .eac-category{background-color:#6d9ed1;border-color:#5A91CB}.easy-autocomplete.eac-blue ul li.selected,.easy-autocomplete.eac-blue ul .eac-category.selected{background-color:#94b8dd;color:#f6f6f6}.easy-autocomplete.eac-yellow{color:#333}.easy-autocomplete.eac-yellow input{background-color:#ffdb7e;border-color:#333;border-radius:4px;box-shadow:0;color:#333}.easy-autocomplete.eac-yellow input:hover,.easy-autocomplete.eac-yellow input:focus{border-color:#333;box-shadow:0}.easy-autocomplete.eac-yellow ul{border-color:#333}.easy-autocomplete.eac-yellow ul li,.easy-autocomplete.eac-yellow ul .eac-category{background-color:#ffdb7e;border-color:#333}.easy-autocomplete.eac-yellow ul li.selected,.easy-autocomplete.eac-yellow ul .eac-category.selected{background-color:#ffe9b1;color:#333}.easy-autocomplete.eac-purple{color:#333}.easy-autocomplete.eac-purple input{background-color:#d6d1e7;border-color:#b8afd5;box-shadow:0;color:#333}.easy-autocomplete.eac-purple input:hover,.easy-autocomplete.eac-purple input:focus{border-color:#333;box-shadow:0}.easy-autocomplete.eac-purple ul{border-color:#333}.easy-autocomplete.eac-purple ul li,.easy-autocomplete.eac-purple ul .eac-category{background-color:#d6d1e7;border-color:#333}.easy-autocomplete.eac-purple ul li.selected,.easy-autocomplete.eac-purple ul .eac-category.selected{background-color:#ebe8f3;color:#333}.easy-autocomplete.eac-bootstrap input{border-color:#ccc;border-radius:4px;border-style:solid;border-width:1px;color:#555;padding:6px 12px}.easy-autocomplete-container{left:0;position:absolute;width:100%;z-index:2}.easy-autocomplete-container ul{background:none repeat scroll 0 0 #ffffff;border-top:1px dotted #ccc;display:none;margin-top:0;padding-bottom:0;padding-left:0;position:relative;top:-1px}.easy-autocomplete-container ul li,.easy-autocomplete-container ul .eac-category{background:inherit;border-color:#ccc;border-image:none;border-style:solid;border-width:0 1px;display:block;font-size:14px;font-weight:normal;padding:4px 12px}.easy-autocomplete-container ul li:last-child{border-radius:0 0 2px 2px;border-width:0 1px 1px}.easy-autocomplete-container ul li.selected{background:none repeat scroll 0 0 #ebebeb;cursor:pointer}.easy-autocomplete-container ul li.selected div{font-weight:normal}.easy-autocomplete-container ul li div{display:block;font-weight:normal;word-break:break-all}.easy-autocomplete-container ul li b{font-weight:bold}.easy-autocomplete-container ul .eac-category{font-color:#aaa;font-style:italic}.eac-description .eac-item span{color:#aaa;font-style:italic;font-size:0.9em}.eac-icon-left .eac-item img{margin-right:4px;max-height:30px}.eac-icon-right .eac-item{margin-top:8px;min-height:24px;position:relative}.eac-icon-right .eac-item img{margin-left:4px;max-height:30px;position:absolute;right:-4px;top:-8px} +/*# sourceMappingURL=easy-autocomplete.min.css.map */ diff --git a/libs/EasyAutocomplete/easy-autocomplete.themes.css b/libs/EasyAutocomplete/easy-autocomplete.themes.css new file mode 100644 index 0000000..e005d7a --- /dev/null +++ b/libs/EasyAutocomplete/easy-autocomplete.themes.css @@ -0,0 +1,208 @@ +/* + * easy-autocomplete + * jQuery plugin for autocompletion + * + * @author Łukasz Pawełczak (http://github.com/pawelczak) + * @version 1.3.5 + * Copyright License: + */ + +.easy-autocomplete { + /* Theme Square */ + /* Round */ + /* Funky */ + /* Solid */ + /* Plate */ +} +.easy-autocomplete.eac-square { + font-family: "Roboto", "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.easy-autocomplete.eac-square input { + border: 1px solid #7f8c8d; + border-radius: 0; + color: #7f8c8d; + font-family: inherit; + font-size: 18px; + font-style: italic; + font-weight: 300; + margin: 0; + min-width: 350px; + padding: 12px 43px 12px 15px; +} +.easy-autocomplete.eac-square ul { + border-color: #7f8c8d; + border-top: 0; + box-shadow: none; + top: 0; +} +.easy-autocomplete.eac-square ul li, .easy-autocomplete.eac-square ul .eac-category { + border-color: #7f8c8d; + font-family: inherit; + font-size: 16px; + font-weight: 300; + padding: 6px 12px; + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-square ul li *, .easy-autocomplete.eac-square ul .eac-category * { + font-weight: 300; +} +.easy-autocomplete.eac-square ul li.selected, .easy-autocomplete.eac-square ul .eac-category.selected { + background-color: #f1f1f1; + font-weight: 300; +} +.easy-autocomplete.eac-square ul li b, .easy-autocomplete.eac-square ul .eac-category b { + font-weight: 600; +} +.easy-autocomplete.eac-round { + font-family: "Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.easy-autocomplete.eac-round input { + border: 2px solid #888; + border-radius: 10px; + color: #888; + font-family: inherit; + font-size: 16px; + font-weight: 400; + margin: 0; + min-width: 300px; + padding: 10px; +} +.easy-autocomplete.eac-round input:hover, .easy-autocomplete.eac-round input:focus { + border-color: #3079ed; +} +.easy-autocomplete.eac-round ul { + background: none; + border-color: #888; + border-width: 0; + box-shadow: none; + min-width: 300px; + top: 20px; +} +.easy-autocomplete.eac-round ul li, .easy-autocomplete.eac-round ul .eac-category { + background: #fff; + border-color: #3079ed; + border-width: 0 2px; + font-size: 14px; + padding: 8px 12px; + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-round ul li.selected, .easy-autocomplete.eac-round ul .eac-category.selected { + background-color: #d4e3fb; +} +.easy-autocomplete.eac-round ul li:first-child, .easy-autocomplete.eac-round ul .eac-category:first-child { + border-radius: 10px 10px 0 0; + border-width: 2px 2px 0; +} +.easy-autocomplete.eac-round ul li:last-child, .easy-autocomplete.eac-round ul .eac-category:last-child { + border-radius: 0 0 10px 10px; + border-width: 0 2px 2px; +} +.easy-autocomplete.eac-round ul li b, .easy-autocomplete.eac-round ul .eac-category b { + font-weight: 700; +} +.easy-autocomplete.eac-funky { + font-family: "Inconsolata", "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.easy-autocomplete.eac-funky input { + background: #07ED89; + border: 0; + border-radius: 0; + color: #ED076B; + font-family: inherit; + font-size: 18px; + min-width: 240px; + padding: 12px; +} +.easy-autocomplete.eac-funky ul { + background: transparent; + border: 0; +} +.easy-autocomplete.eac-funky ul li, .easy-autocomplete.eac-funky ul .eac-category { + background: transparent; + border: 0; + color: #ED076B; + font-size: 18px; + padding: 4px 12px; + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-funky ul li.selected, .easy-autocomplete.eac-funky ul .eac-category.selected { + color: #8907ED; +} +.easy-autocomplete.eac-solid input { + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15) inset; + border-color: #ddd; + color: #666; + font-size: 13px; + min-height: 0; + padding: 6px 12px; +} +.easy-autocomplete.eac-solid ul li, .easy-autocomplete.eac-solid ul .eac-category { + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-solid ul li.selected, .easy-autocomplete.eac-solid ul .eac-category.selected { + background-color: #f2f2f2; +} +.easy-autocomplete.eac-plate { + font-family: "Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.easy-autocomplete.eac-plate input { + font-size: 13px; + padding: 6px 12px; +} +.easy-autocomplete.eac-plate ul { + background: #b5b5b5; + border-radius: 6px; + border-width: 0; + top: 10px; +} +.easy-autocomplete.eac-plate ul li, .easy-autocomplete.eac-plate ul .eac-category { + background: #b5b5b5; + color: #FAFAFA; + font-size: 12px; + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-plate ul li b, .easy-autocomplete.eac-plate ul .eac-category b { + color: #ffd464; +} +.easy-autocomplete.eac-plate ul li.selected, .easy-autocomplete.eac-plate ul .eac-category.selected { + background: #656565; +} +.easy-autocomplete.eac-plate ul li:first-child, .easy-autocomplete.eac-plate ul .eac-category:first-child { + border-radius: 6px 6px 0 0; +} +.easy-autocomplete.eac-plate ul li:last-child, .easy-autocomplete.eac-plate ul .eac-category:last-child { + border-radius: 0 0 6px 6px; +} +.easy-autocomplete.eac-plate-dark { + font-family: "Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif; +} +.easy-autocomplete.eac-plate-dark input { + font-size: 13px; + padding: 6px 12px; +} +.easy-autocomplete.eac-plate-dark ul { + background: #212121; + border-radius: 6px; + border-width: 0; + top: 10px; +} +.easy-autocomplete.eac-plate-dark ul li, .easy-autocomplete.eac-plate-dark ul .eac-category { + background: #212121; + color: #FAFAFA; + font-size: 12px; + transition: all 0.4s ease 0s; +} +.easy-autocomplete.eac-plate-dark ul li b, .easy-autocomplete.eac-plate-dark ul .eac-category b { + color: #ffd464; +} +.easy-autocomplete.eac-plate-dark ul li.selected, .easy-autocomplete.eac-plate-dark ul .eac-category.selected { + background: #656565; +} +.easy-autocomplete.eac-plate-dark ul li:first-child, .easy-autocomplete.eac-plate-dark ul .eac-category:first-child { + border-radius: 6px 6px 0 0; +} +.easy-autocomplete.eac-plate-dark ul li:last-child, .easy-autocomplete.eac-plate-dark ul .eac-category:last-child { + border-radius: 0 0 6px 6px; +} + +/*# sourceMappingURL=easy-autocomplete.themes.css.map */ diff --git a/libs/EasyAutocomplete/easy-autocomplete.themes.min.css b/libs/EasyAutocomplete/easy-autocomplete.themes.min.css new file mode 100644 index 0000000..37ac693 --- /dev/null +++ b/libs/EasyAutocomplete/easy-autocomplete.themes.min.css @@ -0,0 +1,11 @@ +/* + * easy-autocomplete + * jQuery plugin for autocompletion + * + * @author Łukasz Pawełczak (http://github.com/pawelczak) + * @version 1.3.5 + * Copyright License: + */ + +.easy-autocomplete.eac-square{font-family:"Roboto", "Helvetica Neue",Helvetica,Arial,sans-serif}.easy-autocomplete.eac-square input{border:1px solid #7f8c8d;border-radius:0;color:#7f8c8d;font-family:inherit;font-size:18px;font-style:italic;font-weight:300;margin:0;min-width:350px;padding:12px 43px 12px 15px}.easy-autocomplete.eac-square ul{border-color:#7f8c8d;border-top:0;box-shadow:none;top:0}.easy-autocomplete.eac-square ul li,.easy-autocomplete.eac-square ul .eac-category{border-color:#7f8c8d;font-family:inherit;font-size:16px;font-weight:300;padding:6px 12px;transition:all 0.4s ease 0s}.easy-autocomplete.eac-square ul li *,.easy-autocomplete.eac-square ul .eac-category *{font-weight:300}.easy-autocomplete.eac-square ul li.selected,.easy-autocomplete.eac-square ul .eac-category.selected{background-color:#f1f1f1;font-weight:300}.easy-autocomplete.eac-square ul li b,.easy-autocomplete.eac-square ul .eac-category b{font-weight:600}.easy-autocomplete.eac-round{font-family:"Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif}.easy-autocomplete.eac-round input{border:2px solid #888;border-radius:10px;color:#888;font-family:inherit;font-size:16px;font-weight:400;margin:0;min-width:300px;padding:10px}.easy-autocomplete.eac-round input:hover,.easy-autocomplete.eac-round input:focus{border-color:#3079ed}.easy-autocomplete.eac-round ul{background:none;border-color:#888;border-width:0;box-shadow:none;min-width:300px;top:20px}.easy-autocomplete.eac-round ul li,.easy-autocomplete.eac-round ul .eac-category{background:#fff;border-color:#3079ed;border-width:0 2px;font-size:14px;padding:8px 12px;transition:all 0.4s ease 0s}.easy-autocomplete.eac-round ul li.selected,.easy-autocomplete.eac-round ul .eac-category.selected{background-color:#d4e3fb}.easy-autocomplete.eac-round ul li:first-child,.easy-autocomplete.eac-round ul .eac-category:first-child{border-radius:10px 10px 0 0;border-width:2px 2px 0}.easy-autocomplete.eac-round ul li:last-child,.easy-autocomplete.eac-round ul .eac-category:last-child{border-radius:0 0 10px 10px;border-width:0 2px 2px}.easy-autocomplete.eac-round ul li b,.easy-autocomplete.eac-round ul .eac-category b{font-weight:700}.easy-autocomplete.eac-funky{font-family:"Inconsolata", "Helvetica Neue",Helvetica,Arial,sans-serif}.easy-autocomplete.eac-funky input{background:#07ED89;border:0;border-radius:0;color:#ED076B;font-family:inherit;font-size:18px;min-width:240px;padding:12px}.easy-autocomplete.eac-funky ul{background:transparent;border:0}.easy-autocomplete.eac-funky ul li,.easy-autocomplete.eac-funky ul .eac-category{background:transparent;border:0;color:#ED076B;font-size:18px;padding:4px 12px;transition:all 0.4s ease 0s}.easy-autocomplete.eac-funky ul li.selected,.easy-autocomplete.eac-funky ul .eac-category.selected{color:#8907ED}.easy-autocomplete.eac-solid input{box-shadow:0 1px 2px rgba(0,0,0,0.15) inset;border-color:#ddd;color:#666;font-size:13px;min-height:0;padding:6px 12px}.easy-autocomplete.eac-solid ul li,.easy-autocomplete.eac-solid ul .eac-category{transition:all 0.4s ease 0s}.easy-autocomplete.eac-solid ul li.selected,.easy-autocomplete.eac-solid ul .eac-category.selected{background-color:#f2f2f2}.easy-autocomplete.eac-plate{font-family:"Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif}.easy-autocomplete.eac-plate input{font-size:13px;padding:6px 12px}.easy-autocomplete.eac-plate ul{background:#b5b5b5;border-radius:6px;border-width:0;top:10px}.easy-autocomplete.eac-plate ul li,.easy-autocomplete.eac-plate ul .eac-category{background:#b5b5b5;color:#FAFAFA;font-size:12px;transition:all 0.4s ease 0s}.easy-autocomplete.eac-plate ul li b,.easy-autocomplete.eac-plate ul .eac-category b{color:#ffd464}.easy-autocomplete.eac-plate ul li.selected,.easy-autocomplete.eac-plate ul .eac-category.selected{background:#656565}.easy-autocomplete.eac-plate ul li:first-child,.easy-autocomplete.eac-plate ul .eac-category:first-child{border-radius:6px 6px 0 0}.easy-autocomplete.eac-plate ul li:last-child,.easy-autocomplete.eac-plate ul .eac-category:last-child{border-radius:0 0 6px 6px}.easy-autocomplete.eac-plate-dark{font-family:"Open Sans", "Helvetica Neue",Helvetica,Arial,sans-serif}.easy-autocomplete.eac-plate-dark input{font-size:13px;padding:6px 12px}.easy-autocomplete.eac-plate-dark ul{background:#212121;border-radius:6px;border-width:0;top:10px}.easy-autocomplete.eac-plate-dark ul li,.easy-autocomplete.eac-plate-dark ul .eac-category{background:#212121;color:#FAFAFA;font-size:12px;transition:all 0.4s ease 0s}.easy-autocomplete.eac-plate-dark ul li b,.easy-autocomplete.eac-plate-dark ul .eac-category b{color:#ffd464}.easy-autocomplete.eac-plate-dark ul li.selected,.easy-autocomplete.eac-plate-dark ul .eac-category.selected{background:#656565}.easy-autocomplete.eac-plate-dark ul li:first-child,.easy-autocomplete.eac-plate-dark ul .eac-category:first-child{border-radius:6px 6px 0 0}.easy-autocomplete.eac-plate-dark ul li:last-child,.easy-autocomplete.eac-plate-dark ul .eac-category:last-child{border-radius:0 0 6px 6px} +/*# sourceMappingURL=easy-autocomplete.themes.min.css.map */ diff --git a/libs/EasyAutocomplete/jquery.easy-autocomplete.js b/libs/EasyAutocomplete/jquery.easy-autocomplete.js new file mode 100644 index 0000000..c582c0f --- /dev/null +++ b/libs/EasyAutocomplete/jquery.easy-autocomplete.js @@ -0,0 +1,1623 @@ +/* + * easy-autocomplete + * jQuery plugin for autocompletion + * + * @author Łukasz Pawełczak (http://github.com/pawelczak) + * @version 1.3.5 + * Copyright License: + */ + +/* + * EasyAutocomplete - Configuration + */ +var EasyAutocomplete = (function(scope){ + + scope.Configuration = function Configuration(options) { + var defaults = { + data: "list-required", + url: "list-required", + dataType: "json", + + listLocation: function(data) { + return data; + }, + + xmlElementName: "", + + getValue: function(element) { + return element; + }, + + autocompleteOff: true, + + placeholder: false, + + ajaxCallback: function() {}, + + matchResponseProperty: false, + + list: { + sort: { + enabled: false, + method: function(a, b) { + a = defaults.getValue(a); + b = defaults.getValue(b); + if (a < b) { + return -1; + } + if (a > b) { + return 1; + } + return 0; + } + }, + + maxNumberOfElements: 6, + + hideOnEmptyPhrase: true, + + match: { + enabled: false, + caseSensitive: false, + method: function(element, phrase) { + + if (element.search(phrase) > -1) { + return true; + } else { + return false; + } + } + }, + + showAnimation: { + type: "normal", //normal|slide|fade + time: 400, + callback: function() {} + }, + + hideAnimation: { + type: "normal", + time: 400, + callback: function() {} + }, + + /* Events */ + onClickEvent: function() {}, + onSelectItemEvent: function() {}, + onLoadEvent: function() {}, + onChooseEvent: function() {}, + onKeyEnterEvent: function() {}, + onMouseOverEvent: function() {}, + onMouseOutEvent: function() {}, + onShowListEvent: function() {}, + onHideListEvent: function() {} + }, + + highlightPhrase: true, + + theme: "", + + cssClasses: "", + + minCharNumber: 0, + + requestDelay: 0, + + adjustWidth: true, + + ajaxSettings: {}, + + preparePostData: function(data, inputPhrase) {return data;}, + + loggerEnabled: true, + + template: "", + + categoriesAssigned: false, + + categories: [{ + maxNumberOfElements: 4 + }] + + }; + + var externalObjects = ["ajaxSettings", "template"]; + + this.get = function(propertyName) { + return defaults[propertyName]; + }; + + this.equals = function(name, value) { + if (isAssigned(name)) { + if (defaults[name] === value) { + return true; + } + } + + return false; + }; + + this.checkDataUrlProperties = function() { + if (defaults.url === "list-required" && defaults.data === "list-required") { + return false; + } + return true; + }; + this.checkRequiredProperties = function() { + for (var propertyName in defaults) { + if (defaults[propertyName] === "required") { + logger.error("Option " + propertyName + " must be defined"); + return false; + } + } + return true; + }; + + this.printPropertiesThatDoesntExist = function(consol, optionsToCheck) { + printPropertiesThatDoesntExist(consol, optionsToCheck); + }; + + + prepareDefaults(); + + mergeOptions(); + + if (defaults.loggerEnabled === true) { + printPropertiesThatDoesntExist(console, options); + } + + addAjaxSettings(); + + processAfterMerge(); + function prepareDefaults() { + + if (options.dataType === "xml") { + + if (!options.getValue) { + + options.getValue = function(element) { + return $(element).text(); + }; + } + + + if (!options.list) { + + options.list = {}; + } + + if (!options.list.sort) { + options.list.sort = {}; + } + + + options.list.sort.method = function(a, b) { + a = options.getValue(a); + b = options.getValue(b); + if (a < b) { + return -1; + } + if (a > b) { + return 1; + } + return 0; + }; + + if (!options.list.match) { + options.list.match = {}; + } + + options.list.match.method = function(element, phrase) { + + if (element.search(phrase) > -1) { + return true; + } else { + return false; + } + }; + + } + if (options.categories !== undefined && options.categories instanceof Array) { + + var categories = []; + + for (var i = 0, length = options.categories.length; i < length; i += 1) { + + var category = options.categories[i]; + + for (var property in defaults.categories[0]) { + + if (category[property] === undefined) { + category[property] = defaults.categories[0][property]; + } + } + + categories.push(category); + } + + options.categories = categories; + } + } + + function mergeOptions() { + + defaults = mergeObjects(defaults, options); + + function mergeObjects(source, target) { + var mergedObject = source || {}; + + for (var propertyName in source) { + if (target[propertyName] !== undefined && target[propertyName] !== null) { + + if (typeof target[propertyName] !== "object" || + target[propertyName] instanceof Array) { + mergedObject[propertyName] = target[propertyName]; + } else { + mergeObjects(source[propertyName], target[propertyName]); + } + } + } + + /* If data is an object */ + if (target.data !== undefined && target.data !== null && typeof target.data === "object") { + mergedObject.data = target.data; + } + + return mergedObject; + } + } + + + function processAfterMerge() { + + if (defaults.url !== "list-required" && typeof defaults.url !== "function") { + var defaultUrl = defaults.url; + defaults.url = function() { + return defaultUrl; + }; + } + + if (defaults.ajaxSettings.url !== undefined && typeof defaults.ajaxSettings.url !== "function") { + var defaultUrl = defaults.ajaxSettings.url; + defaults.ajaxSettings.url = function() { + return defaultUrl; + }; + } + + if (typeof defaults.listLocation === "string") { + var defaultlistLocation = defaults.listLocation; + + if (defaults.dataType.toUpperCase() === "XML") { + defaults.listLocation = function(data) { + return $(data).find(defaultlistLocation); + }; + } else { + defaults.listLocation = function(data) { + return data[defaultlistLocation]; + }; + } + } + + if (typeof defaults.getValue === "string") { + var defaultsGetValue = defaults.getValue; + defaults.getValue = function(element) { + return element[defaultsGetValue]; + }; + } + + if (options.categories !== undefined) { + defaults.categoriesAssigned = true; + } + + } + + function addAjaxSettings() { + + if (options.ajaxSettings !== undefined && typeof options.ajaxSettings === "object") { + defaults.ajaxSettings = options.ajaxSettings; + } else { + defaults.ajaxSettings = {}; + } + + } + + function isAssigned(name) { + if (defaults[name] !== undefined && defaults[name] !== null) { + return true; + } else { + return false; + } + } + function printPropertiesThatDoesntExist(consol, optionsToCheck) { + + checkPropertiesIfExist(defaults, optionsToCheck); + + function checkPropertiesIfExist(source, target) { + for(var property in target) { + if (source[property] === undefined) { + consol.log("Property '" + property + "' does not exist in EasyAutocomplete options API."); + } + + if (typeof source[property] === "object" && $.inArray(property, externalObjects) === -1) { + checkPropertiesIfExist(source[property], target[property]); + } + } + } + } + }; + + return scope; + +})(EasyAutocomplete || {}); + + +/* + * EasyAutocomplete - Logger + */ +var EasyAutocomplete = (function(scope){ + + scope.Logger = function Logger() { + + this.error = function(message) { + console.log("ERROR: " + message); + }; + + this.warning = function(message) { + console.log("WARNING: " + message); + }; + }; + + return scope; + +})(EasyAutocomplete || {}); + + +/* + * EasyAutocomplete - Constans + */ +var EasyAutocomplete = (function(scope){ + + scope.Constans = function Constans() { + var constants = { + CONTAINER_CLASS: "easy-autocomplete-container", + CONTAINER_ID: "eac-container-", + + WRAPPER_CSS_CLASS: "easy-autocomplete" + }; + + this.getValue = function(propertyName) { + return constants[propertyName]; + }; + + }; + + return scope; + +})(EasyAutocomplete || {}); + +/* + * EasyAutocomplete - ListBuilderService + * + * @author Łukasz Pawełczak + * + */ +var EasyAutocomplete = (function(scope) { + + scope.ListBuilderService = function ListBuilderService(configuration, proccessResponseData) { + + + this.init = function(data) { + var listBuilder = [], + builder = {}; + + builder.data = configuration.get("listLocation")(data); + builder.getValue = configuration.get("getValue"); + builder.maxListSize = configuration.get("list").maxNumberOfElements; + + + listBuilder.push(builder); + + return listBuilder; + }; + + this.updateCategories = function(listBuilder, data) { + + if (configuration.get("categoriesAssigned")) { + + listBuilder = []; + + for(var i = 0; i < configuration.get("categories").length; i += 1) { + + var builder = convertToListBuilder(configuration.get("categories")[i], data); + + listBuilder.push(builder); + } + + } + + return listBuilder; + }; + + this.convertXml = function(listBuilder) { + if(configuration.get("dataType").toUpperCase() === "XML") { + + for(var i = 0; i < listBuilder.length; i += 1) { + listBuilder[i].data = convertXmlToList(listBuilder[i]); + } + } + + return listBuilder; + }; + + this.processData = function(listBuilder, inputPhrase) { + + for(var i = 0, length = listBuilder.length; i < length; i+=1) { + listBuilder[i].data = proccessResponseData(configuration, listBuilder[i], inputPhrase); + } + + return listBuilder; + }; + + this.checkIfDataExists = function(listBuilders) { + + for(var i = 0, length = listBuilders.length; i < length; i += 1) { + + if (listBuilders[i].data !== undefined && listBuilders[i].data instanceof Array) { + if (listBuilders[i].data.length > 0) { + return true; + } + } + } + + return false; + }; + + + function convertToListBuilder(category, data) { + + var builder = {}; + + if(configuration.get("dataType").toUpperCase() === "XML") { + + builder = convertXmlToListBuilder(); + } else { + + builder = convertDataToListBuilder(); + } + + + if (category.header !== undefined) { + builder.header = category.header; + } + + if (category.maxNumberOfElements !== undefined) { + builder.maxNumberOfElements = category.maxNumberOfElements; + } + + if (configuration.get("list").maxNumberOfElements !== undefined) { + + builder.maxListSize = configuration.get("list").maxNumberOfElements; + } + + if (category.getValue !== undefined) { + + if (typeof category.getValue === "string") { + var defaultsGetValue = category.getValue; + builder.getValue = function(element) { + return element[defaultsGetValue]; + }; + } else if (typeof category.getValue === "function") { + builder.getValue = category.getValue; + } + + } else { + builder.getValue = configuration.get("getValue"); + } + + + return builder; + + + function convertXmlToListBuilder() { + + var builder = {}, + listLocation; + + if (category.xmlElementName !== undefined) { + builder.xmlElementName = category.xmlElementName; + } + + if (category.listLocation !== undefined) { + + listLocation = category.listLocation; + } else if (configuration.get("listLocation") !== undefined) { + + listLocation = configuration.get("listLocation"); + } + + if (listLocation !== undefined) { + if (typeof listLocation === "string") { + builder.data = $(data).find(listLocation); + } else if (typeof listLocation === "function") { + + builder.data = listLocation(data); + } + } else { + + builder.data = data; + } + + return builder; + } + + + function convertDataToListBuilder() { + + var builder = {}; + + if (category.listLocation !== undefined) { + + if (typeof category.listLocation === "string") { + builder.data = data[category.listLocation]; + } else if (typeof category.listLocation === "function") { + builder.data = category.listLocation(data); + } + } else { + builder.data = data; + } + + return builder; + } + } + + function convertXmlToList(builder) { + var simpleList = []; + + if (builder.xmlElementName === undefined) { + builder.xmlElementName = configuration.get("xmlElementName"); + } + + + $(builder.data).find(builder.xmlElementName).each(function() { + simpleList.push(this); + }); + + return simpleList; + } + + }; + + return scope; + +})(EasyAutocomplete || {}); + + +/* + * EasyAutocomplete - Data proccess module + * + * Process list to display: + * - sort + * - decrease number to specific number + * - show only matching list + * + */ +var EasyAutocomplete = (function(scope) { + + scope.proccess = function proccessData(config, listBuilder, phrase) { + + scope.proccess.match = match; + + var list = listBuilder.data, + inputPhrase = phrase;//TODO REFACTOR + + list = findMatch(list, inputPhrase); + list = reduceElementsInList(list); + list = sort(list); + + return list; + + + function findMatch(list, phrase) { + var preparedList = [], + value = ""; + + if (config.get("list").match.enabled) { + + for(var i = 0, length = list.length; i < length; i += 1) { + + value = config.get("getValue")(list[i]); + + if (match(value, phrase)) { + preparedList.push(list[i]); + } + + } + + } else { + preparedList = list; + } + + return preparedList; + } + + function match(value, phrase) { + + if (!config.get("list").match.caseSensitive) { + + if (typeof value === "string") { + value = value.toLowerCase(); + } + + phrase = phrase.toLowerCase(); + } + if (config.get("list").match.method(value, phrase)) { + return true; + } else { + return false; + } + } + + function reduceElementsInList(list) { + if (listBuilder.maxNumberOfElements !== undefined && list.length > listBuilder.maxNumberOfElements) { + list = list.slice(0, listBuilder.maxNumberOfElements); + } + + return list; + } + + function sort(list) { + if (config.get("list").sort.enabled) { + list.sort(config.get("list").sort.method); + } + + return list; + } + + }; + + + return scope; + + +})(EasyAutocomplete || {}); + + +/* + * EasyAutocomplete - Template + * + * + * + */ +var EasyAutocomplete = (function(scope){ + + scope.Template = function Template(options) { + + + var genericTemplates = { + basic: { + type: "basic", + method: function(element) { return element; }, + cssClass: "" + }, + description: { + type: "description", + fields: { + description: "description" + }, + method: function(element) { return element + " - description"; }, + cssClass: "eac-description" + }, + iconLeft: { + type: "iconLeft", + fields: { + icon: "" + }, + method: function(element) { + return element; + }, + cssClass: "eac-icon-left" + }, + iconRight: { + type: "iconRight", + fields: { + iconSrc: "" + }, + method: function(element) { + return element; + }, + cssClass: "eac-icon-right" + }, + links: { + type: "links", + fields: { + link: "" + }, + method: function(element) { + return element; + }, + cssClass: "" + }, + custom: { + type: "custom", + method: function() {}, + cssClass: "" + } + }, + + + + /* + * Converts method with {{text}} to function + */ + convertTemplateToMethod = function(template) { + + + var _fields = template.fields, + buildMethod; + + if (template.type === "description") { + + buildMethod = genericTemplates.description.method; + + if (typeof _fields.description === "string") { + buildMethod = function(elementValue, element) { + return elementValue + " - " + element[_fields.description] + ""; + }; + } else if (typeof _fields.description === "function") { + buildMethod = function(elementValue, element) { + return elementValue + " - " + _fields.description(element) + ""; + }; + } + + return buildMethod; + } + + if (template.type === "iconRight") { + + if (typeof _fields.iconSrc === "string") { + buildMethod = function(elementValue, element) { + return elementValue + "" ; + }; + } else if (typeof _fields.iconSrc === "function") { + buildMethod = function(elementValue, element) { + return elementValue + "" ; + }; + } + + return buildMethod; + } + + + if (template.type === "iconLeft") { + + if (typeof _fields.iconSrc === "string") { + buildMethod = function(elementValue, element) { + return "" + elementValue; + }; + } else if (typeof _fields.iconSrc === "function") { + buildMethod = function(elementValue, element) { + return "" + elementValue; + }; + } + + return buildMethod; + } + + if(template.type === "links") { + + if (typeof _fields.link === "string") { + buildMethod = function(elementValue, element) { + return "" + elementValue + ""; + }; + } else if (typeof _fields.link === "function") { + buildMethod = function(elementValue, element) { + return "" + elementValue + ""; + }; + } + + return buildMethod; + } + + + if (template.type === "custom") { + + return template.method; + } + + return genericTemplates.basic.method; + + }, + + + prepareBuildMethod = function(options) { + if (!options || !options.type) { + + return genericTemplates.basic.method; + } + + if (options.type && genericTemplates[options.type]) { + + return convertTemplateToMethod(options); + } else { + + return genericTemplates.basic.method; + } + + }, + + templateClass = function(options) { + var emptyStringFunction = function() {return "";}; + + if (!options || !options.type) { + + return emptyStringFunction; + } + + if (options.type && genericTemplates[options.type]) { + return (function () { + var _cssClass = genericTemplates[options.type].cssClass; + return function() { return _cssClass;}; + })(); + } else { + return emptyStringFunction; + } + }; + + + this.getTemplateClass = templateClass(options); + + this.build = prepareBuildMethod(options); + + + }; + + return scope; + +})(EasyAutocomplete || {}); + + +/* + * EasyAutocomplete - jQuery plugin for autocompletion + * + */ +var EasyAutocomplete = (function(scope) { + + + scope.main = function Core($input, options) { + + var module = { + name: "EasyAutocomplete", + shortcut: "eac" + }; + + var consts = new scope.Constans(), + config = new scope.Configuration(options), + logger = new scope.Logger(), + template = new scope.Template(options.template), + listBuilderService = new scope.ListBuilderService(config, scope.proccess), + checkParam = config.equals, + + $field = $input, + $container = "", + elementsList = [], + selectedElement = -1, + requestDelayTimeoutId; + + scope.consts = consts; + + this.getConstants = function() { + return consts; + }; + + this.getConfiguration = function() { + return config; + }; + + this.getContainer = function() { + return $container; + }; + + this.getSelectedItemIndex = function() { + return selectedElement; + }; + + this.getItems = function () { + return elementsList; + }; + + this.getItemData = function(index) { + + if (elementsList.length < index || elementsList[index] === undefined) { + return -1; + } else { + return elementsList[index]; + } + }; + + this.getSelectedItemData = function() { + return this.getItemData(selectedElement); + }; + + this.build = function() { + prepareField(); + }; + + this.init = function() { + init(); + }; + function init() { + + if ($field.length === 0) { + logger.error("Input field doesn't exist."); + return; + } + + if (!config.checkDataUrlProperties()) { + logger.error("One of options variables 'data' or 'url' must be defined."); + return; + } + + if (!config.checkRequiredProperties()) { + logger.error("Will not work without mentioned properties."); + return; + } + + + prepareField(); + bindEvents(); + + } + function prepareField() { + + + if ($field.parent().hasClass(consts.getValue("WRAPPER_CSS_CLASS"))) { + removeContainer(); + removeWrapper(); + } + + createWrapper(); + createContainer(); + + $container = $("#" + getContainerId()); + if (config.get("placeholder")) { + $field.attr("placeholder", config.get("placeholder")); + } + + + function createWrapper() { + var $wrapper = $("
"), + classes = consts.getValue("WRAPPER_CSS_CLASS"); + + + if (config.get("theme") && config.get("theme") !== "") { + classes += " eac-" + config.get("theme"); + } + + if (config.get("cssClasses") && config.get("cssClasses") !== "") { + classes += " " + config.get("cssClasses"); + } + + if (template.getTemplateClass() !== "") { + classes += " " + template.getTemplateClass(); + } + + + $wrapper + .addClass(classes); + $field.wrap($wrapper); + + + if (config.get("adjustWidth") === true) { + adjustWrapperWidth(); + } + + + } + + function adjustWrapperWidth() { + var fieldWidth = $field.outerWidth(); + + $field.parent().css("width", fieldWidth); + } + + function removeWrapper() { + $field.unwrap(); + } + + function createContainer() { + var $elements_container = $("
").addClass(consts.getValue("CONTAINER_CLASS")); + + $elements_container + .attr("id", getContainerId()) + .prepend($(""),e.join("")},legend:{labels:{generateLabels:function(t){var e=t.data;return e.labels.length&&e.datasets.length?e.labels.map(function(i,n){var a=t.getDatasetMeta(0),r=e.datasets[0],s=a.data[n].custom||{},l=o.valueAtIndexOrDefault,u=t.options.elements.arc;return{text:i,fillStyle:s.backgroundColor?s.backgroundColor:l(r.backgroundColor,n,u.backgroundColor),strokeStyle:s.borderColor?s.borderColor:l(r.borderColor,n,u.borderColor),lineWidth:s.borderWidth?s.borderWidth:l(r.borderWidth,n,u.borderWidth),hidden:isNaN(r.data[n])||a.data[n].hidden,index:n}}):[]}},onClick:function(t,e){var i,n,a,o=e.index,r=this.chart;for(i=0,n=(r.data.datasets||[]).length;i0&&!isNaN(t)?2*Math.PI/e:0}})}},{25:25,40:40,45:45}],20:[function(t,e,i){"use strict";var n=t(25),a=t(40),o=t(45);n._set("radar",{scale:{type:"radialLinear"},elements:{line:{tension:0}}}),e.exports=function(t){t.controllers.radar=t.DatasetController.extend({datasetElementType:a.Line,dataElementType:a.Point,linkScales:o.noop,update:function(t){var e=this,i=e.getMeta(),n=i.dataset,a=i.data,r=n.custom||{},s=e.getDataset(),l=e.chart.options.elements.line,u=e.chart.scale;void 0!==s.tension&&void 0===s.lineTension&&(s.lineTension=s.tension),o.extend(i.dataset,{_datasetIndex:e.index,_scale:u,_children:a,_loop:!0,_model:{tension:r.tension?r.tension:o.valueOrDefault(s.lineTension,l.tension),backgroundColor:r.backgroundColor?r.backgroundColor:s.backgroundColor||l.backgroundColor,borderWidth:r.borderWidth?r.borderWidth:s.borderWidth||l.borderWidth,borderColor:r.borderColor?r.borderColor:s.borderColor||l.borderColor,fill:r.fill?r.fill:void 0!==s.fill?s.fill:l.fill,borderCapStyle:r.borderCapStyle?r.borderCapStyle:s.borderCapStyle||l.borderCapStyle,borderDash:r.borderDash?r.borderDash:s.borderDash||l.borderDash,borderDashOffset:r.borderDashOffset?r.borderDashOffset:s.borderDashOffset||l.borderDashOffset,borderJoinStyle:r.borderJoinStyle?r.borderJoinStyle:s.borderJoinStyle||l.borderJoinStyle}}),i.dataset.pivot(),o.each(a,function(i,n){e.updateElement(i,n,t)},e),e.updateBezierControlPoints()},updateElement:function(t,e,i){var n=this,a=t.custom||{},r=n.getDataset(),s=n.chart.scale,l=n.chart.options.elements.point,u=s.getPointPositionForValue(e,r.data[e]);void 0!==r.radius&&void 0===r.pointRadius&&(r.pointRadius=r.radius),void 0!==r.hitRadius&&void 0===r.pointHitRadius&&(r.pointHitRadius=r.hitRadius),o.extend(t,{_datasetIndex:n.index,_index:e,_scale:s,_model:{x:i?s.xCenter:u.x,y:i?s.yCenter:u.y,tension:a.tension?a.tension:o.valueOrDefault(r.lineTension,n.chart.options.elements.line.tension),radius:a.radius?a.radius:o.valueAtIndexOrDefault(r.pointRadius,e,l.radius),backgroundColor:a.backgroundColor?a.backgroundColor:o.valueAtIndexOrDefault(r.pointBackgroundColor,e,l.backgroundColor),borderColor:a.borderColor?a.borderColor:o.valueAtIndexOrDefault(r.pointBorderColor,e,l.borderColor),borderWidth:a.borderWidth?a.borderWidth:o.valueAtIndexOrDefault(r.pointBorderWidth,e,l.borderWidth),pointStyle:a.pointStyle?a.pointStyle:o.valueAtIndexOrDefault(r.pointStyle,e,l.pointStyle),hitRadius:a.hitRadius?a.hitRadius:o.valueAtIndexOrDefault(r.pointHitRadius,e,l.hitRadius)}}),t._model.skip=a.skip?a.skip:isNaN(t._model.x)||isNaN(t._model.y)},updateBezierControlPoints:function(){var t=this.chart.chartArea,e=this.getMeta();o.each(e.data,function(i,n){var a=i._model,r=o.splineCurve(o.previousItem(e.data,n,!0)._model,a,o.nextItem(e.data,n,!0)._model,a.tension);a.controlPointPreviousX=Math.max(Math.min(r.previous.x,t.right),t.left),a.controlPointPreviousY=Math.max(Math.min(r.previous.y,t.bottom),t.top),a.controlPointNextX=Math.max(Math.min(r.next.x,t.right),t.left),a.controlPointNextY=Math.max(Math.min(r.next.y,t.bottom),t.top),i.pivot()})},setHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model;a.radius=i.hoverRadius?i.hoverRadius:o.valueAtIndexOrDefault(e.pointHoverRadius,n,this.chart.options.elements.point.hoverRadius),a.backgroundColor=i.hoverBackgroundColor?i.hoverBackgroundColor:o.valueAtIndexOrDefault(e.pointHoverBackgroundColor,n,o.getHoverColor(a.backgroundColor)),a.borderColor=i.hoverBorderColor?i.hoverBorderColor:o.valueAtIndexOrDefault(e.pointHoverBorderColor,n,o.getHoverColor(a.borderColor)),a.borderWidth=i.hoverBorderWidth?i.hoverBorderWidth:o.valueAtIndexOrDefault(e.pointHoverBorderWidth,n,a.borderWidth)},removeHoverStyle:function(t){var e=this.chart.data.datasets[t._datasetIndex],i=t.custom||{},n=t._index,a=t._model,r=this.chart.options.elements.point;a.radius=i.radius?i.radius:o.valueAtIndexOrDefault(e.pointRadius,n,r.radius),a.backgroundColor=i.backgroundColor?i.backgroundColor:o.valueAtIndexOrDefault(e.pointBackgroundColor,n,r.backgroundColor),a.borderColor=i.borderColor?i.borderColor:o.valueAtIndexOrDefault(e.pointBorderColor,n,r.borderColor),a.borderWidth=i.borderWidth?i.borderWidth:o.valueAtIndexOrDefault(e.pointBorderWidth,n,r.borderWidth)}})}},{25:25,40:40,45:45}],21:[function(t,e,i){"use strict";t(25)._set("scatter",{hover:{mode:"single"},scales:{xAxes:[{id:"x-axis-1",type:"linear",position:"bottom"}],yAxes:[{id:"y-axis-1",type:"linear",position:"left"}]},showLines:!1,tooltips:{callbacks:{title:function(){return""},label:function(t){return"("+t.xLabel+", "+t.yLabel+")"}}}}),e.exports=function(t){t.controllers.scatter=t.controllers.line}},{25:25}],22:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45);n._set("global",{animation:{duration:1e3,easing:"easeOutQuart",onProgress:o.noop,onComplete:o.noop}}),e.exports=function(t){t.Animation=a.extend({chart:null,currentStep:0,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null}),t.animationService={frameDuration:17,animations:[],dropFrames:0,request:null,addAnimation:function(t,e,i,n){var a,o,r=this.animations;for(e.chart=t,n||(t.animating=!0),a=0,o=r.length;a1&&(i=Math.floor(t.dropFrames),t.dropFrames=t.dropFrames%1),t.advance(1+i);var n=Date.now();t.dropFrames+=(n-e)/t.frameDuration,t.animations.length>0&&t.requestAnimationFrame()},advance:function(t){for(var e,i,n=this.animations,a=0;a=e.numSteps?(o.callback(e.onAnimationComplete,[e],i),i.animating=!1,n.splice(a,1)):++a}},Object.defineProperty(t.Animation.prototype,"animationObject",{get:function(){return this}}),Object.defineProperty(t.Animation.prototype,"chartInstance",{get:function(){return this.chart},set:function(t){this.chart=t}})}},{25:25,26:26,45:45}],23:[function(t,e,i){"use strict";var n=t(25),a=t(45),o=t(28),r=t(30),s=t(48),l=t(31);e.exports=function(t){function e(t){return"top"===t||"bottom"===t}t.types={},t.instances={},t.controllers={},a.extend(t.prototype,{construct:function(e,i){var o,r,l=this;(r=(o=(o=i)||{}).data=o.data||{}).datasets=r.datasets||[],r.labels=r.labels||[],o.options=a.configMerge(n.global,n[o.type],o.options||{}),i=o;var u=s.acquireContext(e,i),d=u&&u.canvas,c=d&&d.height,h=d&&d.width;l.id=a.uid(),l.ctx=u,l.canvas=d,l.config=i,l.width=h,l.height=c,l.aspectRatio=c?h/c:null,l.options=i.options,l._bufferedRender=!1,l.chart=l,l.controller=l,t.instances[l.id]=l,Object.defineProperty(l,"data",{get:function(){return l.config.data},set:function(t){l.config.data=t}}),u&&d?(l.initialize(),l.update()):console.error("Failed to create chart: can't acquire context from the given item")},initialize:function(){var t=this;return l.notify(t,"beforeInit"),a.retinaScale(t,t.options.devicePixelRatio),t.bindEvents(),t.options.responsive&&t.resize(!0),t.ensureScalesHaveIDs(),t.buildOrUpdateScales(),t.initToolTip(),l.notify(t,"afterInit"),t},clear:function(){return a.canvas.clear(this),this},stop:function(){return t.animationService.cancelAnimation(this),this},resize:function(t){var e=this,i=e.options,n=e.canvas,o=i.maintainAspectRatio&&e.aspectRatio||null,r=Math.max(0,Math.floor(a.getMaximumWidth(n))),s=Math.max(0,Math.floor(o?r/o:a.getMaximumHeight(n)));if((e.width!==r||e.height!==s)&&(n.width=e.width=r,n.height=e.height=s,n.style.width=r+"px",n.style.height=s+"px",a.retinaScale(e,i.devicePixelRatio),!t)){var u={width:r,height:s};l.notify(e,"resize",[u]),e.options.onResize&&e.options.onResize(e,u),e.stop(),e.update(e.options.responsiveAnimationDuration)}},ensureScalesHaveIDs:function(){var t=this.options,e=t.scales||{},i=t.scale;a.each(e.xAxes,function(t,e){t.id=t.id||"x-axis-"+e}),a.each(e.yAxes,function(t,e){t.id=t.id||"y-axis-"+e}),i&&(i.id=i.id||"scale")},buildOrUpdateScales:function(){var i=this,n=i.options,o=i.scales||{},r=[],s=Object.keys(o).reduce(function(t,e){return t[e]=!1,t},{});n.scales&&(r=r.concat((n.scales.xAxes||[]).map(function(t){return{options:t,dtype:"category",dposition:"bottom"}}),(n.scales.yAxes||[]).map(function(t){return{options:t,dtype:"linear",dposition:"left"}}))),n.scale&&r.push({options:n.scale,dtype:"radialLinear",isDefault:!0,dposition:"chartArea"}),a.each(r,function(n){var r=n.options,l=r.id,u=a.valueOrDefault(r.type,n.dtype);e(r.position)!==e(n.dposition)&&(r.position=n.dposition),s[l]=!0;var d=null;if(l in o&&o[l].type===u)(d=o[l]).options=r,d.ctx=i.ctx,d.chart=i;else{var c=t.scaleService.getScaleConstructor(u);if(!c)return;d=new c({id:l,type:u,options:r,ctx:i.ctx,chart:i}),o[d.id]=d}d.mergeTicksOptions(),n.isDefault&&(i.scale=d)}),a.each(s,function(t,e){t||delete o[e]}),i.scales=o,t.scaleService.addScalesToLayout(this)},buildOrUpdateControllers:function(){var e=this,i=[],n=[];return a.each(e.data.datasets,function(a,o){var r=e.getDatasetMeta(o),s=a.type||e.config.type;if(r.type&&r.type!==s&&(e.destroyDatasetMeta(o),r=e.getDatasetMeta(o)),r.type=s,i.push(r.type),r.controller)r.controller.updateIndex(o),r.controller.linkScales();else{var l=t.controllers[r.type];if(void 0===l)throw new Error('"'+r.type+'" is not a chart type.');r.controller=new l(e,o),n.push(r.controller)}},e),n},resetElements:function(){var t=this;a.each(t.data.datasets,function(e,i){t.getDatasetMeta(i).controller.reset()},t)},reset:function(){this.resetElements(),this.tooltip.initialize()},update:function(e){var i,n,o=this;if(e&&"object"==typeof e||(e={duration:e,lazy:arguments[1]}),n=(i=o).options,a.each(i.scales,function(t){r.removeBox(i,t)}),n=a.configMerge(t.defaults.global,t.defaults[i.config.type],n),i.options=i.config.options=n,i.ensureScalesHaveIDs(),i.buildOrUpdateScales(),i.tooltip._options=n.tooltips,i.tooltip.initialize(),l._invalidate(o),!1!==l.notify(o,"beforeUpdate")){o.tooltip._data=o.data;var s=o.buildOrUpdateControllers();a.each(o.data.datasets,function(t,e){o.getDatasetMeta(e).controller.buildOrUpdateElements()},o),o.updateLayout(),o.options.animation&&o.options.animation.duration&&a.each(s,function(t){t.reset()}),o.updateDatasets(),o.tooltip.initialize(),o.lastActive=[],l.notify(o,"afterUpdate"),o._bufferedRender?o._bufferedRequest={duration:e.duration,easing:e.easing,lazy:e.lazy}:o.render(e)}},updateLayout:function(){!1!==l.notify(this,"beforeLayout")&&(r.update(this,this.width,this.height),l.notify(this,"afterScaleUpdate"),l.notify(this,"afterLayout"))},updateDatasets:function(){if(!1!==l.notify(this,"beforeDatasetsUpdate")){for(var t=0,e=this.data.datasets.length;t=0;--i)e.isDatasetVisible(i)&&e.drawDataset(i,t);l.notify(e,"afterDatasetsDraw",[t])}},drawDataset:function(t,e){var i=this.getDatasetMeta(t),n={meta:i,index:t,easingValue:e};!1!==l.notify(this,"beforeDatasetDraw",[n])&&(i.controller.draw(e),l.notify(this,"afterDatasetDraw",[n]))},_drawTooltip:function(t){var e=this.tooltip,i={tooltip:e,easingValue:t};!1!==l.notify(this,"beforeTooltipDraw",[i])&&(e.draw(),l.notify(this,"afterTooltipDraw",[i]))},getElementAtEvent:function(t){return o.modes.single(this,t)},getElementsAtEvent:function(t){return o.modes.label(this,t,{intersect:!0})},getElementsAtXAxis:function(t){return o.modes["x-axis"](this,t,{intersect:!0})},getElementsAtEventForMode:function(t,e,i){var n=o.modes[e];return"function"==typeof n?n(this,t,i):[]},getDatasetAtEvent:function(t){return o.modes.dataset(this,t,{intersect:!0})},getDatasetMeta:function(t){var e=this.data.datasets[t];e._meta||(e._meta={});var i=e._meta[this.id];return i||(i=e._meta[this.id]={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null}),i},getVisibleDatasetCount:function(){for(var t=0,e=0,i=this.data.datasets.length;e0||(e.forEach(function(e){delete t[e]}),delete t._chartjs)}}t.DatasetController=function(t,e){this.initialize(t,e)},n.extend(t.DatasetController.prototype,{datasetElementType:null,dataElementType:null,initialize:function(t,e){this.chart=t,this.index=e,this.linkScales(),this.addElements()},updateIndex:function(t){this.index=t},linkScales:function(){var t=this,e=t.getMeta(),i=t.getDataset();null!==e.xAxisID&&e.xAxisID in t.chart.scales||(e.xAxisID=i.xAxisID||t.chart.options.scales.xAxes[0].id),null!==e.yAxisID&&e.yAxisID in t.chart.scales||(e.yAxisID=i.yAxisID||t.chart.options.scales.yAxes[0].id)},getDataset:function(){return this.chart.data.datasets[this.index]},getMeta:function(){return this.chart.getDatasetMeta(this.index)},getScaleForId:function(t){return this.chart.scales[t]},reset:function(){this.update(!0)},destroy:function(){this._data&&i(this._data,this)},createMetaDataset:function(){var t=this.datasetElementType;return t&&new t({_chart:this.chart,_datasetIndex:this.index})},createMetaData:function(t){var e=this.dataElementType;return e&&new e({_chart:this.chart,_datasetIndex:this.index,_index:t})},addElements:function(){var t,e,i=this.getMeta(),n=this.getDataset().data||[],a=i.data;for(t=0,e=n.length;ti&&this.insertElements(i,n-i)},insertElements:function(t,e){for(var i=0;i=i[e].length&&i[e].push({}),!i[e][r].type||l.type&&l.type!==i[e][r].type?o.merge(i[e][r],[t.scaleService.getScaleDefaults(s),l]):o.merge(i[e][r],l)}else o._merger(e,i,n,a)}})},o.where=function(t,e){if(o.isArray(t)&&Array.prototype.filter)return t.filter(e);var i=[];return o.each(t,function(t){e(t)&&i.push(t)}),i},o.findIndex=Array.prototype.findIndex?function(t,e,i){return t.findIndex(e,i)}:function(t,e,i){i=void 0===i?t:i;for(var n=0,a=t.length;n=0;n--){var a=t[n];if(e(a))return a}},o.isNumber=function(t){return!isNaN(parseFloat(t))&&isFinite(t)},o.almostEquals=function(t,e,i){return Math.abs(t-e)t},o.max=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.max(t,e)},Number.NEGATIVE_INFINITY)},o.min=function(t){return t.reduce(function(t,e){return isNaN(e)?t:Math.min(t,e)},Number.POSITIVE_INFINITY)},o.sign=Math.sign?function(t){return Math.sign(t)}:function(t){return 0===(t=+t)||isNaN(t)?t:t>0?1:-1},o.log10=Math.log10?function(t){return Math.log10(t)}:function(t){var e=Math.log(t)*Math.LOG10E,i=Math.round(e);return t===Math.pow(10,i)?i:e},o.toRadians=function(t){return t*(Math.PI/180)},o.toDegrees=function(t){return t*(180/Math.PI)},o.getAngleFromPoint=function(t,e){var i=e.x-t.x,n=e.y-t.y,a=Math.sqrt(i*i+n*n),o=Math.atan2(n,i);return o<-.5*Math.PI&&(o+=2*Math.PI),{angle:o,distance:a}},o.distanceBetweenPoints=function(t,e){return Math.sqrt(Math.pow(e.x-t.x,2)+Math.pow(e.y-t.y,2))},o.aliasPixel=function(t){return t%2==0?0:.5},o.splineCurve=function(t,e,i,n){var a=t.skip?e:t,o=e,r=i.skip?e:i,s=Math.sqrt(Math.pow(o.x-a.x,2)+Math.pow(o.y-a.y,2)),l=Math.sqrt(Math.pow(r.x-o.x,2)+Math.pow(r.y-o.y,2)),u=s/(s+l),d=l/(s+l),c=n*(u=isNaN(u)?0:u),h=n*(d=isNaN(d)?0:d);return{previous:{x:o.x-c*(r.x-a.x),y:o.y-c*(r.y-a.y)},next:{x:o.x+h*(r.x-a.x),y:o.y+h*(r.y-a.y)}}},o.EPSILON=Number.EPSILON||1e-14,o.splineCurveMonotone=function(t){var e,i,n,a,r,s,l,u,d,c=(t||[]).map(function(t){return{model:t._model,deltaK:0,mK:0}}),h=c.length;for(e=0;e0?c[e-1]:null,(a=e0?c[e-1]:null,a=e=t.length-1?t[0]:t[e+1]:e>=t.length-1?t[t.length-1]:t[e+1]},o.previousItem=function(t,e,i){return i?e<=0?t[t.length-1]:t[e-1]:e<=0?t[0]:t[e-1]},o.niceNum=function(t,e){var i=Math.floor(o.log10(t)),n=t/Math.pow(10,i);return(e?n<1.5?1:n<3?2:n<7?5:10:n<=1?1:n<=2?2:n<=5?5:10)*Math.pow(10,i)},o.requestAnimFrame="undefined"==typeof window?function(t){t()}:window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(t){return window.setTimeout(t,1e3/60)},o.getRelativePosition=function(t,e){var i,n,a=t.originalEvent||t,r=t.currentTarget||t.srcElement,s=r.getBoundingClientRect(),l=a.touches;l&&l.length>0?(i=l[0].clientX,n=l[0].clientY):(i=a.clientX,n=a.clientY);var u=parseFloat(o.getStyle(r,"padding-left")),d=parseFloat(o.getStyle(r,"padding-top")),c=parseFloat(o.getStyle(r,"padding-right")),h=parseFloat(o.getStyle(r,"padding-bottom")),f=s.right-s.left-u-c,g=s.bottom-s.top-d-h;return{x:i=Math.round((i-s.left-u)/f*r.width/e.currentDevicePixelRatio),y:n=Math.round((n-s.top-d)/g*r.height/e.currentDevicePixelRatio)}},o.getConstraintWidth=function(t){return r(t,"max-width","clientWidth")},o.getConstraintHeight=function(t){return r(t,"max-height","clientHeight")},o.getMaximumWidth=function(t){var e=t.parentNode;if(!e)return t.clientWidth;var i=parseInt(o.getStyle(e,"padding-left"),10),n=parseInt(o.getStyle(e,"padding-right"),10),a=e.clientWidth-i-n,r=o.getConstraintWidth(t);return isNaN(r)?a:Math.min(a,r)},o.getMaximumHeight=function(t){var e=t.parentNode;if(!e)return t.clientHeight;var i=parseInt(o.getStyle(e,"padding-top"),10),n=parseInt(o.getStyle(e,"padding-bottom"),10),a=e.clientHeight-i-n,r=o.getConstraintHeight(t);return isNaN(r)?a:Math.min(a,r)},o.getStyle=function(t,e){return t.currentStyle?t.currentStyle[e]:document.defaultView.getComputedStyle(t,null).getPropertyValue(e)},o.retinaScale=function(t,e){var i=t.currentDevicePixelRatio=e||window.devicePixelRatio||1;if(1!==i){var n=t.canvas,a=t.height,o=t.width;n.height=a*i,n.width=o*i,t.ctx.scale(i,i),n.style.height||n.style.width||(n.style.height=a+"px",n.style.width=o+"px")}},o.fontString=function(t,e,i){return e+" "+t+"px "+i},o.longestText=function(t,e,i,n){var a=(n=n||{}).data=n.data||{},r=n.garbageCollect=n.garbageCollect||[];n.font!==e&&(a=n.data={},r=n.garbageCollect=[],n.font=e),t.font=e;var s=0;o.each(i,function(e){null!=e&&!0!==o.isArray(e)?s=o.measureText(t,a,r,s,e):o.isArray(e)&&o.each(e,function(e){null==e||o.isArray(e)||(s=o.measureText(t,a,r,s,e))})});var l=r.length/2;if(l>i.length){for(var u=0;un&&(n=o),n},o.numberOfLabelLines=function(t){var e=1;return o.each(t,function(t){o.isArray(t)&&t.length>e&&(e=t.length)}),e},o.color=n?function(t){return t instanceof CanvasGradient&&(t=a.global.defaultColor),n(t)}:function(t){return console.error("Color.js not found!"),t},o.getHoverColor=function(t){return t instanceof CanvasPattern?t:o.color(t).saturate(.5).darken(.1).rgbString()}}},{25:25,3:3,45:45}],28:[function(t,e,i){"use strict";var n=t(45);function a(t,e){return t.native?{x:t.x,y:t.y}:n.getRelativePosition(t,e)}function o(t,e){var i,n,a,o,r;for(n=0,o=t.data.datasets.length;n0&&(u=t.getDatasetMeta(u[0]._datasetIndex).data),u},"x-axis":function(t,e){return u(t,e,{intersect:!1})},point:function(t,e){return r(t,a(e,t))},nearest:function(t,e,i){var n=a(e,t);i.axis=i.axis||"xy";var o=l(i.axis),r=s(t,n,i.intersect,o);return r.length>1&&r.sort(function(t,e){var i=t.getArea()-e.getArea();return 0===i&&(i=t._datasetIndex-e._datasetIndex),i}),r.slice(0,1)},x:function(t,e,i){var n=a(e,t),r=[],s=!1;return o(t,function(t){t.inXRange(n.x)&&r.push(t),t.inRange(n.x,n.y)&&(s=!0)}),i.intersect&&!s&&(r=[]),r},y:function(t,e,i){var n=a(e,t),r=[],s=!1;return o(t,function(t){t.inYRange(n.y)&&r.push(t),t.inRange(n.x,n.y)&&(s=!0)}),i.intersect&&!s&&(r=[]),r}}}},{45:45}],29:[function(t,e,i){"use strict";t(25)._set("global",{responsive:!0,responsiveAnimationDuration:0,maintainAspectRatio:!0,events:["mousemove","mouseout","click","touchstart","touchmove"],hover:{onHover:null,mode:"nearest",intersect:!0,animationDuration:400},onClick:null,defaultColor:"rgba(0,0,0,0.1)",defaultFontColor:"#666",defaultFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",defaultFontSize:12,defaultFontStyle:"normal",showLines:!0,elements:{},layout:{padding:{top:0,right:0,bottom:0,left:0}}}),e.exports=function(){var t=function(t,e){return this.construct(t,e),this};return t.Chart=t,t}},{25:25}],30:[function(t,e,i){"use strict";var n=t(45);function a(t,e){return n.where(t,function(t){return t.position===e})}function o(t,e){t.forEach(function(t,e){return t._tmpIndex_=e,t}),t.sort(function(t,i){var n=e?i:t,a=e?t:i;return n.weight===a.weight?n._tmpIndex_-a._tmpIndex_:n.weight-a.weight}),t.forEach(function(t){delete t._tmpIndex_})}e.exports={defaults:{},addBox:function(t,e){t.boxes||(t.boxes=[]),e.fullWidth=e.fullWidth||!1,e.position=e.position||"top",e.weight=e.weight||0,t.boxes.push(e)},removeBox:function(t,e){var i=t.boxes?t.boxes.indexOf(e):-1;-1!==i&&t.boxes.splice(i,1)},configure:function(t,e,i){for(var n,a=["fullWidth","position","weight"],o=a.length,r=0;rh&&lt.maxHeight){l--;break}l++,c=u*d}t.labelRotation=l},afterCalculateTickRotation:function(){o.callback(this.options.afterCalculateTickRotation,[this])},beforeFit:function(){o.callback(this.options.beforeFit,[this])},fit:function(){var t=this,n=t.minSize={width:0,height:0},a=s(t._ticks),l=t.options,u=l.ticks,d=l.scaleLabel,c=l.gridLines,h=l.display,f=t.isHorizontal(),g=i(u),p=l.gridLines.tickMarkLength;if(n.width=f?t.isFullWidth()?t.maxWidth-t.margins.left-t.margins.right:t.maxWidth:h&&c.drawTicks?p:0,n.height=f?h&&c.drawTicks?p:0:t.maxHeight,d.display&&h){var m=r(d)+o.options.toPadding(d.padding).height;f?n.height+=m:n.width+=m}if(u.display&&h){var v=o.longestText(t.ctx,g.font,a,t.longestTextCache),b=o.numberOfLabelLines(a),x=.5*g.size,y=t.options.ticks.padding;if(f){t.longestLabelWidth=v;var k=o.toRadians(t.labelRotation),M=Math.cos(k),w=Math.sin(k)*v+g.size*b+x*(b-1)+x;n.height=Math.min(t.maxHeight,n.height+w+y),t.ctx.font=g.font;var S=e(t.ctx,a[0],g.font),C=e(t.ctx,a[a.length-1],g.font);0!==t.labelRotation?(t.paddingLeft="bottom"===l.position?M*S+3:M*x+3,t.paddingRight="bottom"===l.position?M*x+3:M*C+3):(t.paddingLeft=S/2+3,t.paddingRight=C/2+3)}else u.mirror?v=0:v+=y+x,n.width=Math.min(t.maxWidth,n.width+v),t.paddingTop=g.size/2,t.paddingBottom=g.size/2}t.handleMargins(),t.width=n.width,t.height=n.height},handleMargins:function(){var t=this;t.margins&&(t.paddingLeft=Math.max(t.paddingLeft-t.margins.left,0),t.paddingTop=Math.max(t.paddingTop-t.margins.top,0),t.paddingRight=Math.max(t.paddingRight-t.margins.right,0),t.paddingBottom=Math.max(t.paddingBottom-t.margins.bottom,0))},afterFit:function(){o.callback(this.options.afterFit,[this])},isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},isFullWidth:function(){return this.options.fullWidth},getRightValue:function(t){if(o.isNullOrUndef(t))return NaN;if("number"==typeof t&&!isFinite(t))return NaN;if(t)if(this.isHorizontal()){if(void 0!==t.x)return this.getRightValue(t.x)}else if(void 0!==t.y)return this.getRightValue(t.y);return t},getLabelForIndex:o.noop,getPixelForValue:o.noop,getValueForPixel:o.noop,getPixelForTick:function(t){var e=this,i=e.options.offset;if(e.isHorizontal()){var n=(e.width-(e.paddingLeft+e.paddingRight))/Math.max(e._ticks.length-(i?0:1),1),a=n*t+e.paddingLeft;i&&(a+=n/2);var o=e.left+Math.round(a);return o+=e.isFullWidth()?e.margins.left:0}var r=e.height-(e.paddingTop+e.paddingBottom);return e.top+t*(r/(e._ticks.length-1))},getPixelForDecimal:function(t){var e=this;if(e.isHorizontal()){var i=(e.width-(e.paddingLeft+e.paddingRight))*t+e.paddingLeft,n=e.left+Math.round(i);return n+=e.isFullWidth()?e.margins.left:0}return e.top+t*e.height},getBasePixel:function(){return this.getPixelForValue(this.getBaseValue())},getBaseValue:function(){var t=this.min,e=this.max;return this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0},_autoSkip:function(t){var e,i,n,a,r=this,s=r.isHorizontal(),l=r.options.ticks.minor,u=t.length,d=o.toRadians(r.labelRotation),c=Math.cos(d),h=r.longestLabelWidth*c,f=[];for(l.maxTicksLimit&&(a=l.maxTicksLimit),s&&(e=!1,(h+l.autoSkipPadding)*u>r.width-(r.paddingLeft+r.paddingRight)&&(e=1+Math.floor((h+l.autoSkipPadding)*u/(r.width-(r.paddingLeft+r.paddingRight)))),a&&u>a&&(e=Math.max(e,Math.floor(u/a)))),i=0;i1&&i%e>0||i%e==0&&i+e>=u)&&i!==u-1&&delete n.label,f.push(n);return f},draw:function(t){var e=this,a=e.options;if(a.display){var s=e.ctx,u=n.global,d=a.ticks.minor,c=a.ticks.major||d,h=a.gridLines,f=a.scaleLabel,g=0!==e.labelRotation,p=e.isHorizontal(),m=d.autoSkip?e._autoSkip(e.getTicks()):e.getTicks(),v=o.valueOrDefault(d.fontColor,u.defaultFontColor),b=i(d),x=o.valueOrDefault(c.fontColor,u.defaultFontColor),y=i(c),k=h.drawTicks?h.tickMarkLength:0,M=o.valueOrDefault(f.fontColor,u.defaultFontColor),w=i(f),S=o.options.toPadding(f.padding),C=o.toRadians(e.labelRotation),_=[],D=e.options.gridLines.lineWidth,I="right"===a.position?e.right:e.right-D-k,P="right"===a.position?e.right+k:e.right,A="bottom"===a.position?e.top+D:e.bottom-k-D,T="bottom"===a.position?e.top+D+k:e.bottom+D;if(o.each(m,function(i,n){if(!o.isNullOrUndef(i.label)){var r,s,c,f,v,b,x,y,M,w,S,F,O,R,L=i.label;n===e.zeroLineIndex&&a.offset===h.offsetGridLines?(r=h.zeroLineWidth,s=h.zeroLineColor,c=h.zeroLineBorderDash,f=h.zeroLineBorderDashOffset):(r=o.valueAtIndexOrDefault(h.lineWidth,n),s=o.valueAtIndexOrDefault(h.color,n),c=o.valueOrDefault(h.borderDash,u.borderDash),f=o.valueOrDefault(h.borderDashOffset,u.borderDashOffset));var z="middle",B="middle",W=d.padding;if(p){var N=k+W;"bottom"===a.position?(B=g?"middle":"top",z=g?"right":"center",R=e.top+N):(B=g?"middle":"bottom",z=g?"left":"center",R=e.bottom-N);var V=l(e,n,h.offsetGridLines&&m.length>1);V1);j3?i[2]-i[1]:i[1]-i[0];Math.abs(a)>1&&t!==Math.floor(t)&&(a=t-Math.floor(t));var o=n.log10(Math.abs(a)),r="";if(0!==t){var s=-1*Math.floor(o);s=Math.max(Math.min(s,20),0),r=t.toFixed(s)}else r="0";return r},logarithmic:function(t,e,i){var a=t/Math.pow(10,Math.floor(n.log10(t)));return 0===t?"0":1===a||2===a||5===a||0===e||e===i.length-1?t.toExponential():""}}}},{45:45}],35:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45);n._set("global",{tooltips:{enabled:!0,custom:null,mode:"nearest",position:"average",intersect:!0,backgroundColor:"rgba(0,0,0,0.8)",titleFontStyle:"bold",titleSpacing:2,titleMarginBottom:6,titleFontColor:"#fff",titleAlign:"left",bodySpacing:2,bodyFontColor:"#fff",bodyAlign:"left",footerFontStyle:"bold",footerSpacing:2,footerMarginTop:6,footerFontColor:"#fff",footerAlign:"left",yPadding:6,xPadding:6,caretPadding:2,caretSize:5,cornerRadius:6,multiKeyBackground:"#fff",displayColors:!0,borderColor:"rgba(0,0,0,0)",borderWidth:0,callbacks:{beforeTitle:o.noop,title:function(t,e){var i="",n=e.labels,a=n?n.length:0;if(t.length>0){var o=t[0];o.xLabel?i=o.xLabel:a>0&&o.indexl.height-e.height&&(c="bottom");var h=(u.left+u.right)/2,f=(u.top+u.bottom)/2;"center"===c?(i=function(t){return t<=h},n=function(t){return t>h}):(i=function(t){return t<=e.width/2},n=function(t){return t>=l.width-e.width/2}),a=function(t){return t+e.width+s.caretSize+s.caretPadding>l.width},o=function(t){return t-e.width-s.caretSize-s.caretPadding<0},r=function(t){return t<=f?"top":"bottom"},i(s.x)?(d="left",a(s.x)&&(d="center",c=r(s.y))):n(s.x)&&(d="right",o(s.x)&&(d="center",c=r(s.y)));var g=t._options;return{xAlign:g.xAlign?g.xAlign:d,yAlign:g.yAlign?g.yAlign:c}}(this,F=function(t,e){var i=t._chart.ctx,n=2*e.yPadding,a=0,r=e.body,s=r.reduce(function(t,e){return t+e.before.length+e.lines.length+e.after.length},0);s+=e.beforeBody.length+e.afterBody.length;var l=e.title.length,u=e.footer.length,d=e.titleFontSize,c=e.bodyFontSize,h=e.footerFontSize;n+=l*d,n+=l?(l-1)*e.titleSpacing:0,n+=l?e.titleMarginBottom:0,n+=s*c,n+=s?(s-1)*e.bodySpacing:0,n+=u?e.footerMarginTop:0,n+=u*h,n+=u?(u-1)*e.footerSpacing:0;var f=0,g=function(t){a=Math.max(a,i.measureText(t).width+f)};return i.font=o.fontString(d,e._titleFontStyle,e._titleFontFamily),o.each(e.title,g),i.font=o.fontString(c,e._bodyFontStyle,e._bodyFontFamily),o.each(e.beforeBody.concat(e.afterBody),g),f=e.displayColors?c+2:0,o.each(r,function(t){o.each(t.before,g),o.each(t.lines,g),o.each(t.after,g)}),f=0,i.font=o.fontString(h,e._footerFontStyle,e._footerFontFamily),o.each(e.footer,g),{width:a+=2*e.xPadding,height:n}}(this,D)),a=D,s=F,l=A,u=S._chart,d=a.x,c=a.y,h=a.caretSize,f=a.caretPadding,g=a.cornerRadius,p=l.xAlign,m=l.yAlign,v=h+f,b=g+f,"right"===p?d-=s.width:"center"===p&&((d-=s.width/2)+s.width>u.width&&(d=u.width-s.width),d<0&&(d=0)),"top"===m?c+=v:c-="bottom"===m?s.height+v:s.height/2,"center"===m?"left"===p?d+=v:"right"===p&&(d-=v):"left"===p?d-=b:"right"===p&&(d+=b),T={x:d,y:c}}else D.opacity=0;return D.xAlign=A.xAlign,D.yAlign=A.yAlign,D.x=T.x,D.y=T.y,D.width=F.width,D.height=F.height,D.caretX=O.x,D.caretY=O.y,S._model=D,e&&C.custom&&C.custom.call(S,D),S},drawCaret:function(t,e){var i=this._chart.ctx,n=this._view,a=this.getCaretPosition(t,e,n);i.lineTo(a.x1,a.y1),i.lineTo(a.x2,a.y2),i.lineTo(a.x3,a.y3)},getCaretPosition:function(t,e,i){var n,a,o,r,s,l,u=i.caretSize,d=i.cornerRadius,c=i.xAlign,h=i.yAlign,f=t.x,g=t.y,p=e.width,m=e.height;if("center"===h)s=g+m/2,"left"===c?(a=(n=f)-u,o=n,r=s+u,l=s-u):(a=(n=f+p)+u,o=n,r=s-u,l=s+u);else if("left"===c?(n=(a=f+d+u)-u,o=a+u):"right"===c?(n=(a=f+p-d-u)-u,o=a+u):(n=(a=i.caretX)-u,o=a+u),"top"===h)s=(r=g)-u,l=r;else{s=(r=g+m)+u,l=r;var v=o;o=n,n=v}return{x1:n,x2:a,x3:o,y1:r,y2:s,y3:l}},drawTitle:function(t,i,n,a){var r=i.title;if(r.length){n.textAlign=i._titleAlign,n.textBaseline="top";var s,l,u=i.titleFontSize,d=i.titleSpacing;for(n.fillStyle=e(i.titleFontColor,a),n.font=o.fontString(u,i._titleFontStyle,i._titleFontFamily),s=0,l=r.length;s0&&n.stroke()},draw:function(){var t=this._chart.ctx,e=this._view;if(0!==e.opacity){var i={width:e.width,height:e.height},n={x:e.x,y:e.y},a=Math.abs(e.opacity<.001)?0:e.opacity,o=e.title.length||e.beforeBody.length||e.body.length||e.afterBody.length||e.footer.length;this._options.enabled&&o&&(this.drawBackground(n,e,t,i,a),n.x+=e.xPadding,n.y+=e.yPadding,this.drawTitle(n,e,t,a),this.drawBody(n,e,t,a),this.drawFooter(n,e,t,a))}},handleEvent:function(t){var e,i=this,n=i._options;return i._lastActive=i._lastActive||[],"mouseout"===t.type?i._active=[]:i._active=i._chart.getElementsAtEventForMode(t,n.mode,n),(e=!o.arrayEquals(i._active,i._lastActive))&&(i._lastActive=i._active,(n.enabled||n.custom)&&(i._eventPosition={x:t.x,y:t.y},i.update(!0),i.pivot())),e}}),t.Tooltip.positioners={average:function(t){if(!t.length)return!1;var e,i,n=0,a=0,o=0;for(e=0,i=t.length;el;)a-=2*Math.PI;for(;a=s&&a<=l,d=r>=i.innerRadius&&r<=i.outerRadius;return u&&d}return!1},getCenterPoint:function(){var t=this._view,e=(t.startAngle+t.endAngle)/2,i=(t.innerRadius+t.outerRadius)/2;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},getArea:function(){var t=this._view;return Math.PI*((t.endAngle-t.startAngle)/(2*Math.PI))*(Math.pow(t.outerRadius,2)-Math.pow(t.innerRadius,2))},tooltipPosition:function(){var t=this._view,e=t.startAngle+(t.endAngle-t.startAngle)/2,i=(t.outerRadius-t.innerRadius)/2+t.innerRadius;return{x:t.x+Math.cos(e)*i,y:t.y+Math.sin(e)*i}},draw:function(){var t=this._chart.ctx,e=this._view,i=e.startAngle,n=e.endAngle;t.beginPath(),t.arc(e.x,e.y,e.outerRadius,i,n),t.arc(e.x,e.y,e.innerRadius,n,i,!0),t.closePath(),t.strokeStyle=e.borderColor,t.lineWidth=e.borderWidth,t.fillStyle=e.backgroundColor,t.fill(),t.lineJoin="bevel",e.borderWidth&&t.stroke()}})},{25:25,26:26,45:45}],37:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45),r=n.global;n._set("global",{elements:{line:{tension:.4,backgroundColor:r.defaultColor,borderWidth:3,borderColor:r.defaultColor,borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",capBezierPoints:!0,fill:!0}}}),e.exports=a.extend({draw:function(){var t,e,i,n,a=this._view,s=this._chart.ctx,l=a.spanGaps,u=this._children.slice(),d=r.elements.line,c=-1;for(this._loop&&u.length&&u.push(u[0]),s.save(),s.lineCap=a.borderCapStyle||d.borderCapStyle,s.setLineDash&&s.setLineDash(a.borderDash||d.borderDash),s.lineDashOffset=a.borderDashOffset||d.borderDashOffset,s.lineJoin=a.borderJoinStyle||d.borderJoinStyle,s.lineWidth=a.borderWidth||d.borderWidth,s.strokeStyle=a.borderColor||r.defaultColor,s.beginPath(),c=-1,t=0;tt?1:-1,o=1,r=l.borderSkipped||"left"):(t=l.x-l.width/2,e=l.x+l.width/2,i=l.y,a=1,o=(n=l.base)>i?1:-1,r=l.borderSkipped||"bottom"),u){var d=Math.min(Math.abs(t-e),Math.abs(i-n)),c=(u=u>d?d:u)/2,h=t+("left"!==r?c*a:0),f=e+("right"!==r?-c*a:0),g=i+("top"!==r?c*o:0),p=n+("bottom"!==r?-c*o:0);h!==f&&(i=g,n=p),g!==p&&(t=h,e=f)}s.beginPath(),s.fillStyle=l.backgroundColor,s.strokeStyle=l.borderColor,s.lineWidth=u;var m=[[t,n],[t,i],[e,i],[e,n]],v=["bottom","left","top","right"].indexOf(r,0);function b(t){return m[(v+t)%4]}-1===v&&(v=0);var x=b(0);s.moveTo(x[0],x[1]);for(var y=1;y<4;y++)x=b(y),s.lineTo(x[0],x[1]);s.fill(),u&&s.stroke()},height:function(){var t=this._view;return t.base-t.y},inRange:function(t,e){var i=!1;if(this._view){var n=r(this);i=t>=n.left&&t<=n.right&&e>=n.top&&e<=n.bottom}return i},inLabelRange:function(t,e){if(!this._view)return!1;var i=r(this);return o(this)?t>=i.left&&t<=i.right:e>=i.top&&e<=i.bottom},inXRange:function(t){var e=r(this);return t>=e.left&&t<=e.right},inYRange:function(t){var e=r(this);return t>=e.top&&t<=e.bottom},getCenterPoint:function(){var t,e,i=this._view;return o(this)?(t=i.x,e=(i.y+i.base)/2):(t=(i.x+i.base)/2,e=i.y),{x:t,y:e}},getArea:function(){var t=this._view;return t.width*Math.abs(t.y-t.base)},tooltipPosition:function(){var t=this._view;return{x:t.x,y:t.y}}})},{25:25,26:26}],40:[function(t,e,i){"use strict";e.exports={},e.exports.Arc=t(36),e.exports.Line=t(37),e.exports.Point=t(38),e.exports.Rectangle=t(39)},{36:36,37:37,38:38,39:39}],41:[function(t,e,i){"use strict";var n=t(42);i=e.exports={clear:function(t){t.ctx.clearRect(0,0,t.width,t.height)},roundedRect:function(t,e,i,n,a,o){if(o){var r=Math.min(o,n/2),s=Math.min(o,a/2);t.moveTo(e+r,i),t.lineTo(e+n-r,i),t.quadraticCurveTo(e+n,i,e+n,i+s),t.lineTo(e+n,i+a-s),t.quadraticCurveTo(e+n,i+a,e+n-r,i+a),t.lineTo(e+r,i+a),t.quadraticCurveTo(e,i+a,e,i+a-s),t.lineTo(e,i+s),t.quadraticCurveTo(e,i,e+r,i)}else t.rect(e,i,n,a)},drawPoint:function(t,e,i,n,a){var o,r,s,l,u,d;if(!e||"object"!=typeof e||"[object HTMLImageElement]"!==(o=e.toString())&&"[object HTMLCanvasElement]"!==o){if(!(isNaN(i)||i<=0)){switch(e){default:t.beginPath(),t.arc(n,a,i,0,2*Math.PI),t.closePath(),t.fill();break;case"triangle":t.beginPath(),u=(r=3*i/Math.sqrt(3))*Math.sqrt(3)/2,t.moveTo(n-r/2,a+u/3),t.lineTo(n+r/2,a+u/3),t.lineTo(n,a-2*u/3),t.closePath(),t.fill();break;case"rect":d=1/Math.SQRT2*i,t.beginPath(),t.fillRect(n-d,a-d,2*d,2*d),t.strokeRect(n-d,a-d,2*d,2*d);break;case"rectRounded":var c=i/Math.SQRT2,h=n-c,f=a-c,g=Math.SQRT2*i;t.beginPath(),this.roundedRect(t,h,f,g,g,i/2),t.closePath(),t.fill();break;case"rectRot":d=1/Math.SQRT2*i,t.beginPath(),t.moveTo(n-d,a),t.lineTo(n,a+d),t.lineTo(n+d,a),t.lineTo(n,a-d),t.closePath(),t.fill();break;case"cross":t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case"crossRot":t.beginPath(),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case"star":t.beginPath(),t.moveTo(n,a+i),t.lineTo(n,a-i),t.moveTo(n-i,a),t.lineTo(n+i,a),s=Math.cos(Math.PI/4)*i,l=Math.sin(Math.PI/4)*i,t.moveTo(n-s,a-l),t.lineTo(n+s,a+l),t.moveTo(n-s,a+l),t.lineTo(n+s,a-l),t.closePath();break;case"line":t.beginPath(),t.moveTo(n-i,a),t.lineTo(n+i,a),t.closePath();break;case"dash":t.beginPath(),t.moveTo(n,a),t.lineTo(n+i,a),t.closePath()}t.stroke()}}else t.drawImage(e,n-e.width/2,a-e.height/2,e.width,e.height)},clipArea:function(t,e){t.save(),t.beginPath(),t.rect(e.left,e.top,e.right-e.left,e.bottom-e.top),t.clip()},unclipArea:function(t){t.restore()},lineTo:function(t,e,i,n){if(i.steppedLine)return"after"===i.steppedLine&&!n||"after"!==i.steppedLine&&n?t.lineTo(e.x,i.y):t.lineTo(i.x,e.y),void t.lineTo(i.x,i.y);i.tension?t.bezierCurveTo(n?e.controlPointPreviousX:e.controlPointNextX,n?e.controlPointPreviousY:e.controlPointNextY,n?i.controlPointNextX:i.controlPointPreviousX,n?i.controlPointNextY:i.controlPointPreviousY,i.x,i.y):t.lineTo(i.x,i.y)}};n.clear=i.clear,n.drawRoundedRectangle=function(t){t.beginPath(),i.roundedRect.apply(i,arguments),t.closePath()}},{42:42}],42:[function(t,e,i){"use strict";var n,a={noop:function(){},uid:(n=0,function(){return n++}),isNullOrUndef:function(t){return null==t},isArray:Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)},isObject:function(t){return null!==t&&"[object Object]"===Object.prototype.toString.call(t)},valueOrDefault:function(t,e){return void 0===t?e:t},valueAtIndexOrDefault:function(t,e,i){return a.valueOrDefault(a.isArray(t)?t[e]:t,i)},callback:function(t,e,i){if(t&&"function"==typeof t.call)return t.apply(i,e)},each:function(t,e,i,n){var o,r,s;if(a.isArray(t))if(r=t.length,n)for(o=r-1;o>=0;o--)e.call(i,t[o],o);else for(o=0;o=1?t:-(Math.sqrt(1-t*t)-1)},easeOutCirc:function(t){return Math.sqrt(1-(t-=1)*t)},easeInOutCirc:function(t){return(t/=.5)<1?-.5*(Math.sqrt(1-t*t)-1):.5*(Math.sqrt(1-(t-=2)*t)+1)},easeInElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),-n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i))},easeOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:1===t?1:(i||(i=.3),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),n*Math.pow(2,-10*t)*Math.sin((t-e)*(2*Math.PI)/i)+1)},easeInOutElastic:function(t){var e=1.70158,i=0,n=1;return 0===t?0:2==(t/=.5)?1:(i||(i=.45),n<1?(n=1,e=i/4):e=i/(2*Math.PI)*Math.asin(1/n),t<1?n*Math.pow(2,10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*-.5:n*Math.pow(2,-10*(t-=1))*Math.sin((t-e)*(2*Math.PI)/i)*.5+1)},easeInBack:function(t){return t*t*(2.70158*t-1.70158)},easeOutBack:function(t){return(t-=1)*t*(2.70158*t+1.70158)+1},easeInOutBack:function(t){var e=1.70158;return(t/=.5)<1?t*t*((1+(e*=1.525))*t-e)*.5:.5*((t-=2)*t*((1+(e*=1.525))*t+e)+2)},easeInBounce:function(t){return 1-a.easeOutBounce(1-t)},easeOutBounce:function(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375},easeInOutBounce:function(t){return t<.5?.5*a.easeInBounce(2*t):.5*a.easeOutBounce(2*t-1)+.5}};e.exports={effects:a},n.easingEffects=a},{42:42}],44:[function(t,e,i){"use strict";var n=t(42);e.exports={toLineHeight:function(t,e){var i=(""+t).match(/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/);if(!i||"normal"===i[1])return 1.2*e;switch(t=+i[2],i[3]){case"px":return t;case"%":t/=100}return e*t},toPadding:function(t){var e,i,a,o;return n.isObject(t)?(e=+t.top||0,i=+t.right||0,a=+t.bottom||0,o=+t.left||0):e=i=a=o=+t||0,{top:e,right:i,bottom:a,left:o,height:e+a,width:o+i}},resolve:function(t,e,i){var a,o,r;for(a=0,o=t.length;a
';var a=e.childNodes[0],r=e.childNodes[1];e._reset=function(){a.scrollLeft=1e6,a.scrollTop=1e6,r.scrollLeft=1e6,r.scrollTop=1e6};var s=function(){e._reset(),t()};return h(a,"scroll",s.bind(a,"expand")),h(r,"scroll",s.bind(r,"shrink")),e}((u=function(){if(x.resizer)return e(g("resize",i))},c=!1,f=[],function(){f=Array.prototype.slice.call(arguments),d=d||this,c||(c=!0,n.requestAnimFrame.call(window,function(){c=!1,u.apply(d,f)}))}));m=function(){if(x.resizer){var e=t.parentNode;e&&e!==y.parentNode&&e.insertBefore(y,e.firstChild),y._reset()}},v=(p=t)[a]||(p[a]={}),b=v.renderProxy=function(t){t.animationName===s&&m()},n.each(l,function(t){h(p,t,b)}),v.reflow=!!p.offsetParent,p.classList.add(r)}function m(t){var e,i,o,s=t[a]||{},u=s.resizer;delete s.resizer,i=(e=t)[a]||{},(o=i.renderProxy)&&(n.each(l,function(t){f(e,t,o)}),delete i.renderProxy),e.classList.remove(r),u&&u.parentNode&&u.parentNode.removeChild(u)}e.exports={_enabled:"undefined"!=typeof window&&"undefined"!=typeof document,initialize:function(){var t,e,i,n="from{opacity:0.99}to{opacity:1}";e="@-webkit-keyframes "+s+"{"+n+"}@keyframes "+s+"{"+n+"}."+r+"{-webkit-animation:"+s+" 0.001s;animation:"+s+" 0.001s;}",i=(t=this)._style||document.createElement("style"),t._style||(t._style=i,e="/* Chart.js */\n"+e,i.setAttribute("type","text/css"),document.getElementsByTagName("head")[0].appendChild(i)),i.appendChild(document.createTextNode(e))},acquireContext:function(t,e){"string"==typeof t?t=document.getElementById(t):t.length&&(t=t[0]),t&&t.canvas&&(t=t.canvas);var i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(function(t,e){var i=t.style,n=t.getAttribute("height"),o=t.getAttribute("width");if(t[a]={initial:{height:n,width:o,style:{display:i.display,height:i.height,width:i.width}}},i.display=i.display||"block",null===o||""===o){var r=d(t,"width");void 0!==r&&(t.width=r)}if(null===n||""===n)if(""===t.style.height)t.height=t.width/(e.options.aspectRatio||2);else{var s=d(t,"height");void 0!==r&&(t.height=s)}}(t,e),i):null},releaseContext:function(t){var e=t.canvas;if(e[a]){var i=e[a].initial;["height","width"].forEach(function(t){var a=i[t];n.isNullOrUndef(a)?e.removeAttribute(t):e.setAttribute(t,a)}),n.each(i.style||{},function(t,i){e.style[i]=t}),e.width=e.width,delete e[a]}},addEventListener:function(t,e,i){var o=t.canvas;if("resize"!==e){var r=i[a]||(i[a]={});h(o,e,(r.proxies||(r.proxies={}))[t.id+"_"+e]=function(e){var a,o,r,s;i((o=t,r=u[(a=e).type]||a.type,s=n.getRelativePosition(a,o),g(r,o,s.x,s.y,a)))})}else p(o,i,t)},removeEventListener:function(t,e,i){var n=t.canvas;if("resize"!==e){var o=((i[a]||{}).proxies||{})[t.id+"_"+e];o&&f(n,e,o)}else m(n)}},n.addEvent=h,n.removeEvent=f},{45:45}],48:[function(t,e,i){"use strict";var n=t(45),a=t(46),o=t(47),r=o._enabled?o:a;e.exports=n.extend({initialize:function(){},acquireContext:function(){},releaseContext:function(){},addEventListener:function(){},removeEventListener:function(){}},r)},{45:45,46:46,47:47}],49:[function(t,e,i){"use strict";e.exports={},e.exports.filler=t(50),e.exports.legend=t(51),e.exports.title=t(52)},{50:50,51:51,52:52}],50:[function(t,e,i){"use strict";var n=t(25),a=t(40),o=t(45);n._set("global",{plugins:{filler:{propagate:!0}}});var r={dataset:function(t){var e=t.fill,i=t.chart,n=i.getDatasetMeta(e),a=n&&i.isDatasetVisible(e)&&n.dataset._children||[],o=a.length||0;return o?function(t,e){return e=i)&&n;switch(o){case"bottom":return"start";case"top":return"end";case"zero":return"origin";case"origin":case"start":case"end":return o;default:return!1}}function l(t){var e,i=t.el._model||{},n=t.el._scale||{},a=t.fill,o=null;if(isFinite(a))return null;if("start"===a?o=void 0===i.scaleBottom?n.bottom:i.scaleBottom:"end"===a?o=void 0===i.scaleTop?n.top:i.scaleTop:void 0!==i.scaleZero?o=i.scaleZero:n.getBasePosition?o=n.getBasePosition():n.getBasePixel&&(o=n.getBasePixel()),null!=o){if(void 0!==o.x&&void 0!==o.y)return o;if("number"==typeof o&&isFinite(o))return{x:(e=n.isHorizontal())?o:null,y:e?null:o}}return null}function u(t,e,i){var n,a=t[e].fill,o=[e];if(!i)return a;for(;!1!==a&&-1===o.indexOf(a);){if(!isFinite(a))return a;if(!(n=t[a]))return!1;if(n.visible)return a;o.push(a),a=n.fill}return!1}function d(t){return t&&!t.skip}function c(t,e,i,n,a){var r;if(n&&a){for(t.moveTo(e[0].x,e[0].y),r=1;r0;--r)o.canvas.lineTo(t,i[r],i[r-1],!0)}}e.exports={id:"filler",afterDatasetsUpdate:function(t,e){var i,n,o,d,c,h,f,g=(t.data.datasets||[]).length,p=e.propagate,m=[];for(n=0;n');for(var i=0;i'),t.data.datasets[i].label&&e.push(t.data.datasets[i].label),e.push("");return e.push(""),e.join("")}});var u=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[],this.doughnutMode=!1},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:function(){var t=this,e=t.options.labels||{},i=o.callback(e.generateLabels,[t.chart],t)||[];e.filter&&(i=i.filter(function(i){return e.filter(i,t.chart.data)})),t.options.reverse&&i.reverse(),t.legendItems=i},afterBuildLabels:s,beforeFit:s,fit:function(){var t=this,e=t.options,i=e.labels,a=e.display,r=t.ctx,s=n.global,u=o.valueOrDefault,d=u(i.fontSize,s.defaultFontSize),c=u(i.fontStyle,s.defaultFontStyle),h=u(i.fontFamily,s.defaultFontFamily),f=o.fontString(d,c,h),g=t.legendHitBoxes=[],p=t.minSize,m=t.isHorizontal();if(m?(p.width=t.maxWidth,p.height=a?10:0):(p.width=a?10:0,p.height=t.maxHeight),a)if(r.font=f,m){var v=t.lineWidths=[0],b=t.legendItems.length?d+i.padding:0;r.textAlign="left",r.textBaseline="top",o.each(t.legendItems,function(e,n){var a=l(i,d)+d/2+r.measureText(e.text).width;v[v.length-1]+a+i.padding>=t.width&&(b+=d+i.padding,v[v.length]=t.left),g[n]={left:0,top:0,width:a,height:d},v[v.length-1]+=a+i.padding}),p.height+=b}else{var x=i.padding,y=t.columnWidths=[],k=i.padding,M=0,w=0,S=d+x;o.each(t.legendItems,function(t,e){var n=l(i,d)+d/2+r.measureText(t.text).width;w+S>p.height&&(k+=M+i.padding,y.push(M),M=0,w=0),M=Math.max(M,n),w+=S,g[e]={left:0,top:0,width:n,height:d}}),k+=M,y.push(M),p.width+=k}t.width=p.width,t.height=p.height},afterFit:s,isHorizontal:function(){return"top"===this.options.position||"bottom"===this.options.position},draw:function(){var t=this,e=t.options,i=e.labels,a=n.global,r=a.elements.line,s=t.width,u=t.lineWidths;if(e.display){var d,c=t.ctx,h=o.valueOrDefault,f=h(i.fontColor,a.defaultFontColor),g=h(i.fontSize,a.defaultFontSize),p=h(i.fontStyle,a.defaultFontStyle),m=h(i.fontFamily,a.defaultFontFamily),v=o.fontString(g,p,m);c.textAlign="left",c.textBaseline="middle",c.lineWidth=.5,c.strokeStyle=f,c.fillStyle=f,c.font=v;var b=l(i,g),x=t.legendHitBoxes,y=t.isHorizontal();d=y?{x:t.left+(s-u[0])/2,y:t.top+i.padding,line:0}:{x:t.left+i.padding,y:t.top+i.padding,line:0};var k=g+i.padding;o.each(t.legendItems,function(n,l){var f,p,m,v,M,w=c.measureText(n.text).width,S=b+g/2+w,C=d.x,_=d.y;y?C+S>=s&&(_=d.y+=k,d.line++,C=d.x=t.left+(s-u[d.line])/2):_+k>t.bottom&&(C=d.x=C+t.columnWidths[d.line]+i.padding,_=d.y=t.top+i.padding,d.line++),function(t,i,n){if(!(isNaN(b)||b<=0)){c.save(),c.fillStyle=h(n.fillStyle,a.defaultColor),c.lineCap=h(n.lineCap,r.borderCapStyle),c.lineDashOffset=h(n.lineDashOffset,r.borderDashOffset),c.lineJoin=h(n.lineJoin,r.borderJoinStyle),c.lineWidth=h(n.lineWidth,r.borderWidth),c.strokeStyle=h(n.strokeStyle,a.defaultColor);var s=0===h(n.lineWidth,r.borderWidth);if(c.setLineDash&&c.setLineDash(h(n.lineDash,r.borderDash)),e.labels&&e.labels.usePointStyle){var l=g*Math.SQRT2/2,u=l/Math.SQRT2,d=t+u,f=i+u;o.canvas.drawPoint(c,n.pointStyle,l,d,f)}else s||c.strokeRect(t,i,b,g),c.fillRect(t,i,b,g);c.restore()}}(C,_,n),x[l].left=C,x[l].top=_,f=n,p=w,v=b+(m=g/2)+C,M=_+m,c.fillText(f.text,v,M),f.hidden&&(c.beginPath(),c.lineWidth=2,c.moveTo(v,M),c.lineTo(v+p,M),c.stroke()),y?d.x+=S+i.padding:d.y+=k})}},handleEvent:function(t){var e=this,i=e.options,n="mouseup"===t.type?"click":t.type,a=!1;if("mousemove"===n){if(!i.onHover)return}else{if("click"!==n)return;if(!i.onClick)return}var o=t.x,r=t.y;if(o>=e.left&&o<=e.right&&r>=e.top&&r<=e.bottom)for(var s=e.legendHitBoxes,l=0;l=u.left&&o<=u.left+u.width&&r>=u.top&&r<=u.top+u.height){if("click"===n){i.onClick.call(e,t.native,e.legendItems[l]),a=!0;break}if("mousemove"===n){i.onHover.call(e,t.native,e.legendItems[l]),a=!0;break}}}return a}});function d(t,e){var i=new u({ctx:t.ctx,options:e,chart:t});r.configure(t,i,e),r.addBox(t,i),t.legend=i}e.exports={id:"legend",_element:u,beforeInit:function(t){var e=t.options.legend;e&&d(t,e)},beforeUpdate:function(t){var e=t.options.legend,i=t.legend;e?(o.mergeIf(e,n.global.legend),i?(r.configure(t,i,e),i.options=e):d(t,e)):i&&(r.removeBox(t,i),delete t.legend)},afterEvent:function(t,e){var i=t.legend;i&&i.handleEvent(e)}}},{25:25,26:26,30:30,45:45}],52:[function(t,e,i){"use strict";var n=t(25),a=t(26),o=t(45),r=t(30),s=o.noop;n._set("global",{title:{display:!1,fontStyle:"bold",fullWidth:!0,lineHeight:1.2,padding:10,position:"top",text:"",weight:2e3}});var l=a.extend({initialize:function(t){o.extend(this,t),this.legendHitBoxes=[]},beforeUpdate:s,update:function(t,e,i){var n=this;return n.beforeUpdate(),n.maxWidth=t,n.maxHeight=e,n.margins=i,n.beforeSetDimensions(),n.setDimensions(),n.afterSetDimensions(),n.beforeBuildLabels(),n.buildLabels(),n.afterBuildLabels(),n.beforeFit(),n.fit(),n.afterFit(),n.afterUpdate(),n.minSize},afterUpdate:s,beforeSetDimensions:s,setDimensions:function(){var t=this;t.isHorizontal()?(t.width=t.maxWidth,t.left=0,t.right=t.width):(t.height=t.maxHeight,t.top=0,t.bottom=t.height),t.paddingLeft=0,t.paddingTop=0,t.paddingRight=0,t.paddingBottom=0,t.minSize={width:0,height:0}},afterSetDimensions:s,beforeBuildLabels:s,buildLabels:s,afterBuildLabels:s,beforeFit:s,fit:function(){var t=this,e=o.valueOrDefault,i=t.options,a=i.display,r=e(i.fontSize,n.global.defaultFontSize),s=t.minSize,l=o.isArray(i.text)?i.text.length:1,u=o.options.toLineHeight(i.lineHeight,r),d=a?l*u+2*i.padding:0;t.isHorizontal()?(s.width=t.maxWidth,s.height=d):(s.width=d,s.height=t.maxHeight),t.width=s.width,t.height=s.height},afterFit:s,isHorizontal:function(){var t=this.options.position;return"top"===t||"bottom"===t},draw:function(){var t=this,e=t.ctx,i=o.valueOrDefault,a=t.options,r=n.global;if(a.display){var s,l,u,d=i(a.fontSize,r.defaultFontSize),c=i(a.fontStyle,r.defaultFontStyle),h=i(a.fontFamily,r.defaultFontFamily),f=o.fontString(d,c,h),g=o.options.toLineHeight(a.lineHeight,d),p=g/2+a.padding,m=0,v=t.top,b=t.left,x=t.bottom,y=t.right;e.fillStyle=i(a.fontColor,r.defaultFontColor),e.font=f,t.isHorizontal()?(l=b+(y-b)/2,u=v+p,s=y-b):(l="left"===a.position?b+p:y-p,u=v+(x-v)/2,s=x-v,m=Math.PI*("left"===a.position?-.5:.5)),e.save(),e.translate(l,u),e.rotate(m),e.textAlign="center",e.textBaseline="middle";var k=a.text;if(o.isArray(k))for(var M=0,w=0;wt.max&&(t.max=n))})});t.min=isFinite(t.min)&&!isNaN(t.min)?t.min:0,t.max=isFinite(t.max)&&!isNaN(t.max)?t.max:1,this.handleTickRangeOptions()},getTickLimit:function(){var t,e=this.options.ticks;if(this.isHorizontal())t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.width/50));else{var i=a.valueOrDefault(e.fontSize,n.global.defaultFontSize);t=Math.min(e.maxTicksLimit?e.maxTicksLimit:11,Math.ceil(this.height/(2*i)))}return t},handleDirectionalChanges:function(){this.isHorizontal()||this.ticks.reverse()},getLabelForIndex:function(t,e){return+this.getRightValue(this.chart.data.datasets[e].data[t])},getPixelForValue:function(t){var e=this,i=e.start,n=+e.getRightValue(t),a=e.end-i;return e.isHorizontal()?e.left+e.width/a*(n-i):e.bottom-e.height/a*(n-i)},getValueForPixel:function(t){var e=this,i=e.isHorizontal(),n=i?e.width:e.height,a=(i?t-e.left:e.bottom-t)/n;return e.start+(e.end-e.start)*a},getPixelForTick:function(t){return this.getPixelForValue(this.ticksAsNumbers[t])}});t.scaleService.registerScaleType("linear",i,e)}},{25:25,34:34,45:45}],55:[function(t,e,i){"use strict";var n=t(45);e.exports=function(t){var e=n.noop;t.LinearScaleBase=t.Scale.extend({getRightValue:function(e){return"string"==typeof e?+e:t.Scale.prototype.getRightValue.call(this,e)},handleTickRangeOptions:function(){var t=this,e=t.options.ticks;if(e.beginAtZero){var i=n.sign(t.min),a=n.sign(t.max);i<0&&a<0?t.max=0:i>0&&a>0&&(t.min=0)}var o=void 0!==e.min||void 0!==e.suggestedMin,r=void 0!==e.max||void 0!==e.suggestedMax;void 0!==e.min?t.min=e.min:void 0!==e.suggestedMin&&(null===t.min?t.min=e.suggestedMin:t.min=Math.min(t.min,e.suggestedMin)),void 0!==e.max?t.max=e.max:void 0!==e.suggestedMax&&(null===t.max?t.max=e.suggestedMax:t.max=Math.max(t.max,e.suggestedMax)),o!==r&&t.min>=t.max&&(o?t.max=t.min+1:t.min=t.max-1),t.min===t.max&&(t.max++,e.beginAtZero||t.min--)},getTickLimit:e,handleDirectionalChanges:e,buildTicks:function(){var t=this,e=t.options.ticks,i=t.getTickLimit(),a={maxTicks:i=Math.max(2,i),min:e.min,max:e.max,stepSize:n.valueOrDefault(e.fixedStepSize,e.stepSize)},o=t.ticks=function(t,e){var i,a=[];if(t.stepSize&&t.stepSize>0)i=t.stepSize;else{var o=n.niceNum(e.max-e.min,!1);i=n.niceNum(o/(t.maxTicks-1),!0)}var r=Math.floor(e.min/i)*i,s=Math.ceil(e.max/i)*i;t.min&&t.max&&t.stepSize&&n.almostWhole((t.max-t.min)/t.stepSize,i/1e3)&&(r=t.min,s=t.max);var l=(s-r)/i;l=n.almostEquals(l,Math.round(l),i/1e3)?Math.round(l):Math.ceil(l);var u=1;i<1&&(u=Math.pow(10,i.toString().length-2),r=Math.round(r*u)/u,s=Math.round(s*u)/u),a.push(void 0!==t.min?t.min:r);for(var d=1;d0){var i=n.min(e),a=n.max(e);t.min=null===t.min?i:Math.min(t.min,i),t.max=null===t.max?a:Math.max(t.max,a)}})}else n.each(a,function(e,a){var o=i.getDatasetMeta(a);i.isDatasetVisible(a)&&r(o)&&n.each(e.data,function(e,i){var n=+t.getRightValue(e);isNaN(n)||o.data[i].hidden||n<0||(null===t.min?t.min=n:nt.max&&(t.max=n),0!==n&&(null===t.minNotZero||n0?t.minNotZero=t.min:t.max<1?t.minNotZero=Math.pow(10,Math.floor(n.log10(t.max))):t.minNotZero=1)},buildTicks:function(){var t=this,e=t.options.ticks,i=!t.isHorizontal(),a={min:e.min,max:e.max},o=t.ticks=function(t,e){var i,a,o=[],r=n.valueOrDefault,s=r(t.min,Math.pow(10,Math.floor(n.log10(e.min)))),l=Math.floor(n.log10(e.max)),u=Math.ceil(e.max/Math.pow(10,l));0===s?(i=Math.floor(n.log10(e.minNotZero)),a=Math.floor(e.minNotZero/Math.pow(10,i)),o.push(s),s=a*Math.pow(10,i)):(i=Math.floor(n.log10(s)),a=Math.floor(s/Math.pow(10,i)));for(var d=i<0?Math.pow(10,Math.abs(i)):1;o.push(s),10==++a&&(a=1,d=++i>=0?1:d),s=Math.round(a*Math.pow(10,i)*d)/d,ia?{start:e-i-5,end:e}:{start:e,end:e+i+5}}function u(t,e,i,n){if(a.isArray(e))for(var o=i.y,r=1.5*n,s=0;sd.r&&(d.r=b.end,c.r=m),x.startd.b&&(d.b=x.end,c.b=m)}t.setReductions(u,d,c)}(this):(t=this,e=Math.min(t.height/2,t.width/2),t.drawingArea=Math.round(e),t.setCenterPoint(0,0,0,0))},setReductions:function(t,e,i){var n=e.l/Math.sin(i.l),a=Math.max(e.r-this.width,0)/Math.sin(i.r),o=-e.t/Math.cos(i.t),r=-Math.max(e.b-this.height,0)/Math.cos(i.b);n=d(n),a=d(a),o=d(o),r=d(r),this.drawingArea=Math.min(Math.round(t-(n+a)/2),Math.round(t-(o+r)/2)),this.setCenterPoint(n,a,o,r)},setCenterPoint:function(t,e,i,n){var a=this,o=a.width-e-a.drawingArea,r=t+a.drawingArea,s=i+a.drawingArea,l=a.height-n-a.drawingArea;a.xCenter=Math.round((r+o)/2+a.left),a.yCenter=Math.round((s+l)/2+a.top)},getIndexAngle:function(t){return t*(2*Math.PI/r(this))+(this.chart.options&&this.chart.options.startAngle?this.chart.options.startAngle:0)*Math.PI*2/360},getDistanceFromCenterForValue:function(t){var e=this;if(null===t)return 0;var i=e.drawingArea/(e.max-e.min);return e.options.ticks.reverse?(e.max-t)*i:(t-e.min)*i},getPointPosition:function(t,e){var i=this.getIndexAngle(t)-Math.PI/2;return{x:Math.round(Math.cos(i)*e)+this.xCenter,y:Math.round(Math.sin(i)*e)+this.yCenter}},getPointPositionForValue:function(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))},getBasePosition:function(){var t=this.min,e=this.max;return this.getPointPositionForValue(0,this.beginAtZero?0:t<0&&e<0?e:t>0&&e>0?t:0)},draw:function(){var t=this,i=t.options,n=i.gridLines,o=i.ticks,l=a.valueOrDefault;if(i.display){var d=t.ctx,c=this.getIndexAngle(0),h=l(o.fontSize,e.defaultFontSize),f=l(o.fontStyle,e.defaultFontStyle),g=l(o.fontFamily,e.defaultFontFamily),p=a.fontString(h,f,g);a.each(t.ticks,function(i,s){if(s>0||o.reverse){var u=t.getDistanceFromCenterForValue(t.ticksAsNumbers[s]);if(n.display&&0!==s&&function(t,e,i,n){var o=t.ctx;if(o.strokeStyle=a.valueAtIndexOrDefault(e.color,n-1),o.lineWidth=a.valueAtIndexOrDefault(e.lineWidth,n-1),t.options.gridLines.circular)o.beginPath(),o.arc(t.xCenter,t.yCenter,i,0,2*Math.PI),o.closePath(),o.stroke();else{var s=r(t);if(0===s)return;o.beginPath();var l=t.getPointPosition(0,i);o.moveTo(l.x,l.y);for(var u=1;u=0;m--){if(o.display){var v=t.getPointPosition(m,g);i.beginPath(),i.moveTo(t.xCenter,t.yCenter),i.lineTo(v.x,v.y),i.stroke(),i.closePath()}if(l.display){var b=t.getPointPosition(m,g+5),x=a.valueAtIndexOrDefault(l.fontColor,m,e.defaultFontColor);i.font=p.font,i.fillStyle=x;var y=t.getIndexAngle(m),k=a.toDegrees(y);i.textAlign=0===(f=k)||180===f?"center":f<180?"left":"right",d=k,c=t._pointLabelSizes[m],h=b,90===d||270===d?h.y-=c.h/2:(d>270||d<90)&&(h.y-=c.h),u(i,t.pointLabels[m]||"",b,p.size)}}}(t)}}});t.scaleService.registerScaleType("radialLinear",c,i)}},{25:25,34:34,45:45}],58:[function(t,e,i){"use strict";var n=t(1);n="function"==typeof n?n:window.moment;var a=t(25),o=t(45),r=Number.MIN_SAFE_INTEGER||-9007199254740991,s=Number.MAX_SAFE_INTEGER||9007199254740991,l={millisecond:{common:!0,size:1,steps:[1,2,5,10,20,50,100,250,500]},second:{common:!0,size:1e3,steps:[1,2,5,10,30]},minute:{common:!0,size:6e4,steps:[1,2,5,10,30]},hour:{common:!0,size:36e5,steps:[1,2,3,6,12]},day:{common:!0,size:864e5,steps:[1,2,5]},week:{common:!1,size:6048e5,steps:[1,2,3,4]},month:{common:!0,size:2628e6,steps:[1,2,3]},quarter:{common:!1,size:7884e6,steps:[1,2,3,4]},year:{common:!0,size:3154e7}},u=Object.keys(l);function d(t,e){return t-e}function c(t){var e,i,n,a={},o=[];for(e=0,i=t.length;e=0&&r<=s;){if(a=t[(n=r+s>>1)-1]||null,o=t[n],!a)return{lo:null,hi:o};if(o[e]i))return{lo:a,hi:o};s=n-1}}return{lo:o,hi:null}}(t,e,i),o=a.lo?a.hi?a.lo:t[t.length-2]:t[0],r=a.lo?a.hi?a.hi:t[t.length-1]:t[1],s=r[e]-o[e],l=s?(i-o[e])/s:0,u=(r[n]-o[n])*l;return o[n]+u}function f(t,e){var i=e.parser,a=e.parser||e.format;return"function"==typeof i?i(t):"string"==typeof t&&"string"==typeof a?n(t,a):(t instanceof n||(t=n(t)),t.isValid()?t:"function"==typeof a?a(t):t)}function g(t,e){if(o.isNullOrUndef(t))return null;var i=e.options.time,n=f(e.getRightValue(t),i);return n.isValid()?(i.round&&n.startOf(i.round),n.valueOf()):null}function p(t){for(var e=u.indexOf(t)+1,i=u.length;e=k&&i<=M&&_.push(i);return y.min=k,y.max=M,y._unit=S.unit||function(t,e,i,a){var o,r,s=n.duration(n(a).diff(n(i)));for(o=u.length-1;o>=u.indexOf(e);o--)if(r=u[o],l[r].common&&s.as(r)>=t.length)return r;return u[e?u.indexOf(e):0]}(_,S.minUnit,y.min,y.max),y._majorUnit=p(y._unit),y._table=function(t,e,i,n){if("linear"===n||!t.length)return[{time:e,pos:0},{time:i,pos:1}];var a,o,r,s,l,u=[],d=[e];for(a=0,o=t.length;ae&&s1?o[1]:s,v=o[0],b=(h(a,"time",c,"pos")-h(a,"time",v,"pos"))/2),d.time.max||(c=o[o.length-1],v=o.length>1?o[o.length-2]:r,x=(h(a,"time",c,"pos")-h(a,"time",v,"pos"))/2)),{left:b,right:x}),y._labelFormat=function(t,e){var i,n,a,o=t.length;for(i=0;i=0&&t0?s:1}});t.scaleService.registerScaleType("time",e,{position:"bottom",distribution:"linear",bounds:"data",time:{parser:!1,format:!1,unit:!1,round:!1,displayFormat:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{millisecond:"h:mm:ss.SSS a",second:"h:mm:ss a",minute:"h:mm a",hour:"hA",day:"MMM D",week:"ll",month:"MMM YYYY",quarter:"[Q]Q - YYYY",year:"YYYY"}},ticks:{autoSkip:!1,source:"auto",major:{enabled:!1}}})}},{1:1,25:25,45:45}]},{},[7])(7)}); \ No newline at end of file diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.css b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.css new file mode 100644 index 0000000..c9686bb --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.css @@ -0,0 +1,161 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +ul.dt-button-collection.dropdown-menu { + display: block; + z-index: 2002; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +ul.dt-button-collection.dropdown-menu.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +ul.dt-button-collection.dropdown-menu.fixed.two-column { + margin-left: -150px; +} +ul.dt-button-collection.dropdown-menu.fixed.three-column { + margin-left: -225px; +} +ul.dt-button-collection.dropdown-menu.fixed.four-column { + margin-left: -300px; +} +ul.dt-button-collection.dropdown-menu > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +ul.dt-button-collection.dropdown-menu.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +ul.dt-button-collection.dropdown-menu.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +ul.dt-button-collection.dropdown-menu.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +ul.dt-button-collection.dropdown-menu .dt-button { + border-radius: 0; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2001; +} + +@media screen and (max-width: 767px) { + div.dt-buttons { + float: none; + width: 100%; + text-align: center; + margin-bottom: 0.5em; + } + div.dt-buttons a.btn { + float: none; + } +} +div.dt-buttons button.btn.processing, +div.dt-buttons div.btn.processing, +div.dt-buttons a.btn.processing { + color: rgba(0, 0, 0, 0.2); +} +div.dt-buttons button.btn.processing:after, +div.dt-buttons div.btn.processing:after, +div.dt-buttons a.btn.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.min.css new file mode 100644 index 0000000..6de6703 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-button-collection.dropdown-menu{display:block;z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.dropdown-menu.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.dropdown-menu.fixed.two-column{margin-left:-150px}ul.dt-button-collection.dropdown-menu.fixed.three-column{margin-left:-225px}ul.dt-button-collection.dropdown-menu.fixed.four-column{margin-left:-300px}ul.dt-button-collection.dropdown-menu>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.dropdown-menu.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.dropdown-menu.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.dropdown-menu.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection.dropdown-menu .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.css b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.css new file mode 100644 index 0000000..a51aaf8 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.css @@ -0,0 +1,225 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +ul.dt-button-collection.dropdown-menu { + display: block; + z-index: 2002; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +ul.dt-button-collection.dropdown-menu.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +ul.dt-button-collection.dropdown-menu.fixed.two-column { + margin-left: -150px; +} +ul.dt-button-collection.dropdown-menu.fixed.three-column { + margin-left: -225px; +} +ul.dt-button-collection.dropdown-menu.fixed.four-column { + margin-left: -300px; +} +ul.dt-button-collection.dropdown-menu > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +ul.dt-button-collection.dropdown-menu.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +ul.dt-button-collection.dropdown-menu.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +ul.dt-button-collection.dropdown-menu.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +ul.dt-button-collection.dropdown-menu .dt-button { + border-radius: 0; +} + +ul.dt-button-collection { + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +ul.dt-button-collection.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +ul.dt-button-collection.fixed.two-column { + margin-left: -150px; +} +ul.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +ul.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +ul.dt-button-collection > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +ul.dt-button-collection.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +ul.dt-button-collection.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +ul.dt-button-collection.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +ul.dt-button-collection .dt-button { + border-radius: 0; +} +ul.dt-button-collection.fixed { + max-width: none; +} +ul.dt-button-collection.fixed:before, ul.dt-button-collection.fixed:after { + display: none; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 999; +} + +@media screen and (max-width: 767px) { + div.dt-buttons { + float: none; + width: 100%; + text-align: center; + margin-bottom: 0.5em; + } + div.dt-buttons a.btn { + float: none; + } +} +div.dt-buttons button.btn.processing, +div.dt-buttons div.btn.processing, +div.dt-buttons a.btn.processing { + color: rgba(0, 0, 0, 0.2); +} +div.dt-buttons button.btn.processing:after, +div.dt-buttons div.btn.processing:after, +div.dt-buttons a.btn.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.min.css new file mode 100644 index 0000000..dcf41c6 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.bootstrap4.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-button-collection.dropdown-menu{display:block;z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.dropdown-menu.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.dropdown-menu.fixed.two-column{margin-left:-150px}ul.dt-button-collection.dropdown-menu.fixed.three-column{margin-left:-225px}ul.dt-button-collection.dropdown-menu.fixed.four-column{margin-left:-300px}ul.dt-button-collection.dropdown-menu>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.dropdown-menu.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.dropdown-menu.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.dropdown-menu.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection.dropdown-menu .dt-button{border-radius:0}ul.dt-button-collection{-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.fixed.two-column{margin-left:-150px}ul.dt-button-collection.fixed.three-column{margin-left:-225px}ul.dt-button-collection.fixed.four-column{margin-left:-300px}ul.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection .dt-button{border-radius:0}ul.dt-button-collection.fixed{max-width:none}ul.dt-button-collection.fixed:before,ul.dt-button-collection.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:999}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.btn.processing,div.dt-buttons div.btn.processing,div.dt-buttons a.btn.processing{color:rgba(0,0,0,0.2)}div.dt-buttons button.btn.processing:after,div.dt-buttons div.btn.processing:after,div.dt-buttons a.btn.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.css b/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.css new file mode 100644 index 0000000..a62024d --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.css @@ -0,0 +1,359 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +button.dt-button, +div.dt-button, +a.dt-button { + position: relative; + display: inline-block; + box-sizing: border-box; + margin-right: 0.333em; + margin-bottom: 0.333em; + padding: 0.5em 1em; + border: 1px solid #999; + border-radius: 2px; + cursor: pointer; + font-size: 0.88em; + line-height: 1.6em; + color: black; + white-space: nowrap; + overflow: hidden; + background-color: #e9e9e9; + /* Fallback */ + background-image: -webkit-linear-gradient(top, white 0%, #e9e9e9 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, white 0%, #e9e9e9 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, white 0%, #e9e9e9 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, white 0%, #e9e9e9 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, white 0%, #e9e9e9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9'); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + text-decoration: none; + outline: none; +} +button.dt-button.disabled, +div.dt-button.disabled, +a.dt-button.disabled { + color: #999; + border: 1px solid #d0d0d0; + cursor: default; + background-color: #f9f9f9; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #ffffff 0%, #f9f9f9 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #ffffff 0%, #f9f9f9 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #ffffff 0%, #f9f9f9 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #ffffff 0%, #f9f9f9 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #ffffff 0%, #f9f9f9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9'); +} +button.dt-button:active:not(.disabled), button.dt-button.active:not(.disabled), +div.dt-button:active:not(.disabled), +div.dt-button.active:not(.disabled), +a.dt-button:active:not(.disabled), +a.dt-button.active:not(.disabled) { + background-color: #e2e2e2; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2'); + box-shadow: inset 1px 1px 3px #999999; +} +button.dt-button:active:not(.disabled):hover:not(.disabled), button.dt-button.active:not(.disabled):hover:not(.disabled), +div.dt-button:active:not(.disabled):hover:not(.disabled), +div.dt-button.active:not(.disabled):hover:not(.disabled), +a.dt-button:active:not(.disabled):hover:not(.disabled), +a.dt-button.active:not(.disabled):hover:not(.disabled) { + box-shadow: inset 1px 1px 3px #999999; + background-color: #cccccc; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #eaeaea 0%, #cccccc 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #eaeaea 0%, #cccccc 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #eaeaea 0%, #cccccc 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #eaeaea 0%, #cccccc 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #eaeaea 0%, #cccccc 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc'); +} +button.dt-button:hover, +div.dt-button:hover, +a.dt-button:hover { + text-decoration: none; +} +button.dt-button:hover:not(.disabled), +div.dt-button:hover:not(.disabled), +a.dt-button:hover:not(.disabled) { + border: 1px solid #666; + background-color: #e0e0e0; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0'); +} +button.dt-button:focus:not(.disabled), +div.dt-button:focus:not(.disabled), +a.dt-button:focus:not(.disabled) { + border: 1px solid #426c9e; + text-shadow: 0 1px 0 #c4def1; + outline: none; + background-color: #79ace9; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #bddef4 0%, #79ace9 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #bddef4 0%, #79ace9 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #bddef4 0%, #79ace9 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #bddef4 0%, #79ace9 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9'); +} + +.dt-button embed { + outline: none; +} + +div.dt-buttons { + position: relative; + float: left; +} +div.dt-buttons.buttons-right { + float: right; +} + +div.dt-button-collection { + position: absolute; + top: 0; + left: 0; + width: 150px; + margin-top: 3px; + padding: 8px 8px 4px 8px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: white; + overflow: hidden; + z-index: 2002; + border-radius: 5px; + box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +div.dt-button-collection button.dt-button, +div.dt-button-collection div.dt-button, +div.dt-button-collection a.dt-button { + position: relative; + left: 0; + right: 0; + width: 100%; + display: block; + float: none; + margin-bottom: 4px; + margin-right: 0; +} +div.dt-button-collection button.dt-button:active:not(.disabled), div.dt-button-collection button.dt-button.active:not(.disabled), +div.dt-button-collection div.dt-button:active:not(.disabled), +div.dt-button-collection div.dt-button.active:not(.disabled), +div.dt-button-collection a.dt-button:active:not(.disabled), +div.dt-button-collection a.dt-button.active:not(.disabled) { + background-color: #dadada; + /* Fallback */ + background-image: -webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%); + /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%); + /* FF3.6 */ + background-image: -ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%); + /* IE10 */ + background-image: -o-linear-gradient(top, #f0f0f0 0%, #dadada 100%); + /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada'); + box-shadow: inset 1px 1px 3px #666; +} +div.dt-button-collection.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +div.dt-button-collection.fixed.two-column { + margin-left: -150px; +} +div.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +div.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +div.dt-button-collection > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +div.dt-button-collection.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +div.dt-button-collection.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +div.dt-button-collection.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +div.dt-button-collection .dt-button { + border-radius: 0; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); + /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); + /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* W3C Markup, IE10 Release Preview */ + z-index: 2001; +} + +@media screen and (max-width: 640px) { + div.dt-buttons { + float: none !important; + text-align: center; + } +} +button.dt-button.processing, +div.dt-button.processing, +a.dt-button.processing { + color: rgba(0, 0, 0, 0.2); +} +button.dt-button.processing:after, +div.dt-button.processing:after, +a.dt-button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.min.css new file mode 100644 index 0000000..36e3a9d --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.dataTables.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}button.dt-button,div.dt-button,a.dt-button{position:relative;display:inline-block;box-sizing:border-box;margin-right:0.333em;margin-bottom:0.333em;padding:0.5em 1em;border:1px solid #999;border-radius:2px;cursor:pointer;font-size:0.88em;line-height:1.6em;color:black;white-space:nowrap;overflow:hidden;background-color:#e9e9e9;background-image:-webkit-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:-o-linear-gradient(top, #fff 0%, #e9e9e9 100%);background-image:linear-gradient(to bottom, #fff 0%, #e9e9e9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='white', EndColorStr='#e9e9e9');-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-decoration:none;outline:none}button.dt-button.disabled,div.dt-button.disabled,a.dt-button.disabled{color:#999;border:1px solid #d0d0d0;cursor:default;background-color:#f9f9f9;background-image:-webkit-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-moz-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-ms-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:-o-linear-gradient(top, #fff 0%, #f9f9f9 100%);background-image:linear-gradient(to bottom, #fff 0%, #f9f9f9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#ffffff', EndColorStr='#f9f9f9')}button.dt-button:active:not(.disabled),button.dt-button.active:not(.disabled),div.dt-button:active:not(.disabled),div.dt-button.active:not(.disabled),a.dt-button:active:not(.disabled),a.dt-button.active:not(.disabled){background-color:#e2e2e2;background-image:-webkit-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-moz-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-ms-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:-o-linear-gradient(top, #f3f3f3 0%, #e2e2e2 100%);background-image:linear-gradient(to bottom, #f3f3f3 0%, #e2e2e2 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f3f3f3', EndColorStr='#e2e2e2');box-shadow:inset 1px 1px 3px #999999}button.dt-button:active:not(.disabled):hover:not(.disabled),button.dt-button.active:not(.disabled):hover:not(.disabled),div.dt-button:active:not(.disabled):hover:not(.disabled),div.dt-button.active:not(.disabled):hover:not(.disabled),a.dt-button:active:not(.disabled):hover:not(.disabled),a.dt-button.active:not(.disabled):hover:not(.disabled){box-shadow:inset 1px 1px 3px #999999;background-color:#cccccc;background-image:-webkit-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-moz-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-ms-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:-o-linear-gradient(top, #eaeaea 0%, #ccc 100%);background-image:linear-gradient(to bottom, #eaeaea 0%, #ccc 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#eaeaea', EndColorStr='#cccccc')}button.dt-button:hover,div.dt-button:hover,a.dt-button:hover{text-decoration:none}button.dt-button:hover:not(.disabled),div.dt-button:hover:not(.disabled),a.dt-button:hover:not(.disabled){border:1px solid #666;background-color:#e0e0e0;background-image:-webkit-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-moz-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-ms-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:-o-linear-gradient(top, #f9f9f9 0%, #e0e0e0 100%);background-image:linear-gradient(to bottom, #f9f9f9 0%, #e0e0e0 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f9f9f9', EndColorStr='#e0e0e0')}button.dt-button:focus:not(.disabled),div.dt-button:focus:not(.disabled),a.dt-button:focus:not(.disabled){border:1px solid #426c9e;text-shadow:0 1px 0 #c4def1;outline:none;background-color:#79ace9;background-image:-webkit-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-moz-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-ms-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:-o-linear-gradient(top, #bddef4 0%, #79ace9 100%);background-image:linear-gradient(to bottom, #bddef4 0%, #79ace9 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#bddef4', EndColorStr='#79ace9')}.dt-button embed{outline:none}div.dt-buttons{position:relative;float:left}div.dt-buttons.buttons-right{float:right}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:white;overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection button.dt-button,div.dt-button-collection div.dt-button,div.dt-button-collection a.dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin-bottom:4px;margin-right:0}div.dt-button-collection button.dt-button:active:not(.disabled),div.dt-button-collection button.dt-button.active:not(.disabled),div.dt-button-collection div.dt-button:active:not(.disabled),div.dt-button-collection div.dt-button.active:not(.disabled),div.dt-button-collection a.dt-button:active:not(.disabled),div.dt-button-collection a.dt-button.active:not(.disabled){background-color:#dadada;background-image:-webkit-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-moz-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-ms-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:-o-linear-gradient(top, #f0f0f0 0%, #dadada 100%);background-image:linear-gradient(to bottom, #f0f0f0 0%, #dadada 100%);filter:progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#f0f0f0', EndColorStr='#dadada');box-shadow:inset 1px 1px 3px #666}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-150px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0,0,0,0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.foundation.css b/libs/datatable/Buttons-1.5.2/css/buttons.foundation.css new file mode 100644 index 0000000..694766c --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.foundation.css @@ -0,0 +1,192 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +ul.dt-buttons li { + margin: 0; +} +ul.dt-buttons li.active a { + box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.6); +} + +ul.dt-buttons.button-group a { + margin-bottom: 0; +} + +ul.dt-button-collection.f-dropdown { + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +ul.dt-button-collection.f-dropdown.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +ul.dt-button-collection.f-dropdown.fixed.two-column { + margin-left: -150px; +} +ul.dt-button-collection.f-dropdown.fixed.three-column { + margin-left: -225px; +} +ul.dt-button-collection.f-dropdown.fixed.four-column { + margin-left: -300px; +} +ul.dt-button-collection.f-dropdown > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +ul.dt-button-collection.f-dropdown.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +ul.dt-button-collection.f-dropdown.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +ul.dt-button-collection.f-dropdown.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +ul.dt-button-collection.f-dropdown .dt-button { + border-radius: 0; +} +ul.dt-button-collection.f-dropdown.fixed { + max-width: none; +} +ul.dt-button-collection.f-dropdown.fixed:before, ul.dt-button-collection.f-dropdown.fixed:after { + display: none; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 88; +} + +@media screen and (max-width: 767px) { + ul.dt-buttons { + float: none; + width: 100%; + text-align: center; + margin-bottom: 0.5rem; + } + ul.dt-buttons li { + float: none; + } +} +div.button-group.stacked.dropdown-pane { + margin-top: 2px; + padding: 1px; + z-index: 89; +} +div.button-group.stacked.dropdown-pane a.button { + margin-bottom: 1px; + border-right: none; +} +div.button-group.stacked.dropdown-pane a.button:last-child { + margin-bottom: 0; +} + +div.dt-buttons button.button.processing, +div.dt-buttons div.button.processing, +div.dt-buttons a.button.processing { + color: rgba(0, 0, 0, 0.2); + color: rgba(255, 255, 255, 0.2); + border-top-color: white; + border-bottom-color: white; +} +div.dt-buttons button.button.processing:after, +div.dt-buttons div.button.processing:after, +div.dt-buttons a.button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.foundation.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.foundation.min.css new file mode 100644 index 0000000..bad8da3 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.foundation.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}ul.dt-buttons li{margin:0}ul.dt-buttons li.active a{box-shadow:inset 0 0 10px rgba(0,0,0,0.6)}ul.dt-buttons.button-group a{margin-bottom:0}ul.dt-button-collection.f-dropdown{-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}ul.dt-button-collection.f-dropdown.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}ul.dt-button-collection.f-dropdown.fixed.two-column{margin-left:-150px}ul.dt-button-collection.f-dropdown.fixed.three-column{margin-left:-225px}ul.dt-button-collection.f-dropdown.fixed.four-column{margin-left:-300px}ul.dt-button-collection.f-dropdown>*{-webkit-column-break-inside:avoid;break-inside:avoid}ul.dt-button-collection.f-dropdown.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}ul.dt-button-collection.f-dropdown.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}ul.dt-button-collection.f-dropdown.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}ul.dt-button-collection.f-dropdown .dt-button{border-radius:0}ul.dt-button-collection.f-dropdown.fixed{max-width:none}ul.dt-button-collection.f-dropdown.fixed:before,ul.dt-button-collection.f-dropdown.fixed:after{display:none}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:88}@media screen and (max-width: 767px){ul.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5rem}ul.dt-buttons li{float:none}}div.button-group.stacked.dropdown-pane{margin-top:2px;padding:1px;z-index:89}div.button-group.stacked.dropdown-pane a.button{margin-bottom:1px;border-right:none}div.button-group.stacked.dropdown-pane a.button:last-child{margin-bottom:0}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{color:rgba(0,0,0,0.2);color:rgba(255,255,255,0.2);border-top-color:white;border-bottom-color:white}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.css b/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.css new file mode 100644 index 0000000..02d3849 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.css @@ -0,0 +1,220 @@ +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +div.dt-buttons { + position: relative; + float: left; +} +div.dt-buttons .dt-button { + margin-right: 0; +} +div.dt-buttons .dt-button span.ui-icon { + display: inline-block; + vertical-align: middle; + margin-top: -2px; +} +div.dt-buttons .dt-button:active { + outline: none; +} +div.dt-buttons .dt-button:hover > span { + background-color: rgba(0, 0, 0, 0.05); +} + +div.dt-button-collection { + position: absolute; + top: 0; + left: 0; + width: 150px; + margin-top: 3px; + padding: 8px 8px 4px 8px; + border: 1px solid #ccc; + border: 1px solid rgba(0, 0, 0, 0.4); + background-color: #f3f3f3; + background-color: rgba(255, 255, 255, 0.3); + overflow: hidden; + z-index: 2002; + border-radius: 5px; + box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.3); + z-index: 2002; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; + -webkit-column-gap: 0; + -moz-column-gap: 0; + -ms-column-gap: 0; + -o-column-gap: 0; + column-gap: 0; +} +div.dt-button-collection .dt-button { + position: relative; + left: 0; + right: 0; + width: 100%; + display: block; + float: none; + margin-right: 0; + margin-bottom: 4px; +} +div.dt-button-collection .dt-button:hover > span { + background-color: rgba(0, 0, 0, 0.05); +} +div.dt-button-collection.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +div.dt-button-collection.fixed.two-column { + margin-left: -150px; +} +div.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +div.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +div.dt-button-collection > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +div.dt-button-collection.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +div.dt-button-collection.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +div.dt-button-collection.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +div.dt-button-collection .dt-button { + border-radius: 0; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.7); + /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0, 0, 0, 0.3)), color-stop(1, rgba(0, 0, 0, 0.7))); + /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.7) 100%); + /* W3C Markup, IE10 Release Preview */ + z-index: 2001; +} + +@media screen and (max-width: 640px) { + div.dt-buttons { + float: none !important; + text-align: center; + } +} +button.dt-button.processing, +div.dt-button.processing, +a.dt-button.processing { + color: rgba(0, 0, 0, 0.2); +} +button.dt-button.processing:after, +div.dt-button.processing:after, +a.dt-button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.min.css new file mode 100644 index 0000000..ed88726 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.jqueryui.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-buttons{position:relative;float:left}div.dt-buttons .dt-button{margin-right:0}div.dt-buttons .dt-button span.ui-icon{display:inline-block;vertical-align:middle;margin-top:-2px}div.dt-buttons .dt-button:active{outline:none}div.dt-buttons .dt-button:hover>span{background-color:rgba(0,0,0,0.05)}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px;padding:8px 8px 4px 8px;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.4);background-color:#f3f3f3;background-color:rgba(255,255,255,0.3);overflow:hidden;z-index:2002;border-radius:5px;box-shadow:3px 3px 5px rgba(0,0,0,0.3);z-index:2002;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px;-webkit-column-gap:0;-moz-column-gap:0;-ms-column-gap:0;-o-column-gap:0;column-gap:0}div.dt-button-collection .dt-button{position:relative;left:0;right:0;width:100%;display:block;float:none;margin-right:0;margin-bottom:4px}div.dt-button-collection .dt-button:hover>span{background-color:rgba(0,0,0,0.05)}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-150px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;background:rgba(0,0,0,0.7);background:-ms-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-moz-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-o-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:-webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, rgba(0,0,0,0.3)), color-stop(1, rgba(0,0,0,0.7)));background:-webkit-radial-gradient(center, ellipse farthest-corner, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);background:radial-gradient(ellipse farthest-corner at center, rgba(0,0,0,0.3) 0%, rgba(0,0,0,0.7) 100%);z-index:2001}@media screen and (max-width: 640px){div.dt-buttons{float:none !important;text-align:center}}button.dt-button.processing,div.dt-button.processing,a.dt-button.processing{color:rgba(0,0,0,0.2)}button.dt-button.processing:after,div.dt-button.processing:after,a.dt-button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.css b/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.css new file mode 100644 index 0000000..45f4263 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.css @@ -0,0 +1,174 @@ +@charset "UTF-8"; +@keyframes dtb-spinner { + 100% { + transform: rotate(360deg); + } +} +@-o-keyframes dtb-spinner { + 100% { + -o-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-ms-keyframes dtb-spinner { + 100% { + -ms-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-webkit-keyframes dtb-spinner { + 100% { + -webkit-transform: rotate(360deg); + transform: rotate(360deg); + } +} +@-moz-keyframes dtb-spinner { + 100% { + -moz-transform: rotate(360deg); + transform: rotate(360deg); + } +} +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba(0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; +} +div.dt-button-info h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; +} +div.dt-button-info > div { + padding: 1em; +} + +div.dt-button-collection { + position: absolute; + top: 0; + left: 0; + width: 150px; + margin-top: 3px !important; + z-index: 2002; + background: white; + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; +} +div.dt-button-collection.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; +} +div.dt-button-collection.fixed.two-column { + margin-left: -150px; +} +div.dt-button-collection.fixed.three-column { + margin-left: -225px; +} +div.dt-button-collection.fixed.four-column { + margin-left: -300px; +} +div.dt-button-collection > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; +} +div.dt-button-collection.two-column { + width: 300px; + padding-bottom: 1px; + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} +div.dt-button-collection.three-column { + width: 450px; + padding-bottom: 1px; + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; +} +div.dt-button-collection.four-column { + width: 600px; + padding-bottom: 1px; + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; +} +div.dt-button-collection .dt-button { + border-radius: 0; +} + +button.buttons-collection.ui.button span:after { + display: inline-block; + content: "▾"; + padding-left: 0.5em; +} + +div.dt-button-background { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + z-index: 2001; +} + +@media screen and (max-width: 767px) { + div.dt-buttons { + float: none; + width: 100%; + text-align: center; + margin-bottom: 0.5em; + } + div.dt-buttons a.btn { + float: none; + } +} +div.dt-buttons button.button.processing, +div.dt-buttons div.button.processing, +div.dt-buttons a.button.processing { + position: relative; + color: rgba(0, 0, 0, 0.2); +} +div.dt-buttons button.button.processing:after, +div.dt-buttons div.button.processing:after, +div.dt-buttons a.button.processing:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + display: block; + content: ' '; + border: 2px solid #282828; + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; +} diff --git a/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.min.css b/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.min.css new file mode 100644 index 0000000..320b86d --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/buttons.semanticui.min.css @@ -0,0 +1 @@ +@keyframes dtb-spinner{100%{transform:rotate(360deg)}}@-o-keyframes dtb-spinner{100%{-o-transform:rotate(360deg);transform:rotate(360deg)}}@-ms-keyframes dtb-spinner{100%{-ms-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes dtb-spinner{100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-moz-keyframes dtb-spinner{100%{-moz-transform:rotate(360deg);transform:rotate(360deg)}}div.dt-button-info{position:fixed;top:50%;left:50%;width:400px;margin-top:-100px;margin-left:-200px;background-color:white;border:2px solid #111;box-shadow:3px 3px 8px rgba(0,0,0,0.3);border-radius:3px;text-align:center;z-index:21}div.dt-button-info h2{padding:0.5em;margin:0;font-weight:normal;border-bottom:1px solid #ddd;background-color:#f3f3f3}div.dt-button-info>div{padding:1em}div.dt-button-collection{position:absolute;top:0;left:0;width:150px;margin-top:3px !important;z-index:2002;background:white;-webkit-column-gap:8px;-moz-column-gap:8px;-ms-column-gap:8px;-o-column-gap:8px;column-gap:8px}div.dt-button-collection.fixed{position:fixed;top:50%;left:50%;margin-left:-75px;border-radius:0}div.dt-button-collection.fixed.two-column{margin-left:-150px}div.dt-button-collection.fixed.three-column{margin-left:-225px}div.dt-button-collection.fixed.four-column{margin-left:-300px}div.dt-button-collection>*{-webkit-column-break-inside:avoid;break-inside:avoid}div.dt-button-collection.two-column{width:300px;padding-bottom:1px;-webkit-column-count:2;-moz-column-count:2;-ms-column-count:2;-o-column-count:2;column-count:2}div.dt-button-collection.three-column{width:450px;padding-bottom:1px;-webkit-column-count:3;-moz-column-count:3;-ms-column-count:3;-o-column-count:3;column-count:3}div.dt-button-collection.four-column{width:600px;padding-bottom:1px;-webkit-column-count:4;-moz-column-count:4;-ms-column-count:4;-o-column-count:4;column-count:4}div.dt-button-collection .dt-button{border-radius:0}button.buttons-collection.ui.button span:after{display:inline-block;content:"▾";padding-left:0.5em}div.dt-button-background{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2001}@media screen and (max-width: 767px){div.dt-buttons{float:none;width:100%;text-align:center;margin-bottom:0.5em}div.dt-buttons a.btn{float:none}}div.dt-buttons button.button.processing,div.dt-buttons div.button.processing,div.dt-buttons a.button.processing{position:relative;color:rgba(0,0,0,0.2)}div.dt-buttons button.button.processing:after,div.dt-buttons div.button.processing:after,div.dt-buttons a.button.processing:after{position:absolute;top:50%;left:50%;width:16px;height:16px;margin:-8px 0 0 -8px;box-sizing:border-box;display:block;content:' ';border:2px solid #282828;border-radius:50%;border-left-color:transparent;border-right-color:transparent;animation:dtb-spinner 1500ms infinite linear;-o-animation:dtb-spinner 1500ms infinite linear;-ms-animation:dtb-spinner 1500ms infinite linear;-webkit-animation:dtb-spinner 1500ms infinite linear;-moz-animation:dtb-spinner 1500ms infinite linear} diff --git a/libs/datatable/Buttons-1.5.2/css/common.scss b/libs/datatable/Buttons-1.5.2/css/common.scss new file mode 100644 index 0000000..8312ccd --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/common.scss @@ -0,0 +1,27 @@ + +div.dt-button-info { + position: fixed; + top: 50%; + left: 50%; + width: 400px; + margin-top: -100px; + margin-left: -200px; + background-color: white; + border: 2px solid #111; + box-shadow: 3px 3px 8px rgba( 0, 0, 0, 0.3); + border-radius: 3px; + text-align: center; + z-index: 21; + + h2 { + padding: 0.5em; + margin: 0; + font-weight: normal; + border-bottom: 1px solid #ddd; + background-color: #f3f3f3; + } + + > div { + padding: 1em; + } +} diff --git a/libs/datatable/Buttons-1.5.2/css/mixins.scss b/libs/datatable/Buttons-1.5.2/css/mixins.scss new file mode 100644 index 0000000..6328942 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/css/mixins.scss @@ -0,0 +1,141 @@ + +@mixin dtb-two-stop-gradient($fromColor, $toColor) { + background-color: $toColor; /* Fallback */ + background-image: -webkit-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Chrome 10+, Saf5.1+, iOS 5+ */ + background-image: -moz-linear-gradient(top, $fromColor 0%, $toColor 100%); /* FF3.6 */ + background-image: -ms-linear-gradient(top, $fromColor 0%, $toColor 100%); /* IE10 */ + background-image: -o-linear-gradient(top, $fromColor 0%, $toColor 100%); /* Opera 11.10+ */ + background-image: linear-gradient(to bottom, $fromColor 0%, $toColor 100%); + filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,StartColorStr='#{nth( $fromColor, 1 )}', EndColorStr='#{nth( $toColor, 1 )}'); +} + +@mixin dtb-radial-gradient ($fromColor, $toColor ) { + background: $toColor; /* Fallback */ + background: -ms-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* IE10 Consumer Preview */ + background: -moz-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Firefox */ + background: -o-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Opera */ + background: -webkit-gradient(radial, center center, 0, center center, 497, color-stop(0, $fromColor), color-stop(1, $toColor)); /* Webkit (Safari/Chrome 10) */ + background: -webkit-radial-gradient(center, ellipse farthest-corner, $fromColor 0%, $toColor 100%); /* Webkit (Chrome 11+) */ + background: radial-gradient(ellipse farthest-corner at center, $fromColor 0%, $toColor 100%); /* W3C Markup, IE10 Release Preview */ +} + + +@mixin dtb-fixed-collection { + // Fixed positioning feature + &.fixed { + position: fixed; + top: 50%; + left: 50%; + margin-left: -75px; + border-radius: 0; + + &.two-column { + margin-left: -150px; + } + + &.three-column { + margin-left: -225px; + } + + &.four-column { + margin-left: -300px; + } + } + + // Multi-column layout feature + -webkit-column-gap: 8px; + -moz-column-gap: 8px; + -ms-column-gap: 8px; + -o-column-gap: 8px; + column-gap: 8px; + + > * { + -webkit-column-break-inside: avoid; + break-inside: avoid; + } + + &.two-column { + width: 300px; + padding-bottom: 1px; + + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; + } + + &.three-column { + width: 450px; + padding-bottom: 1px; + + -webkit-column-count: 3; + -moz-column-count: 3; + -ms-column-count: 3; + -o-column-count: 3; + column-count: 3; + } + + &.four-column { + width: 600px; + padding-bottom: 1px; + + -webkit-column-count: 4; + -moz-column-count: 4; + -ms-column-count: 4; + -o-column-count: 4; + column-count: 4; + } + + // Chrome fix - 531528 + .dt-button { + border-radius: 0; + } +} + + +@mixin dtb-processing { + color: rgba(0, 0, 0, 0.2); + + &:after { + position: absolute; + top: 50%; + left: 50%; + width: 16px; + height: 16px; + margin: -8px 0 0 -8px; + box-sizing: border-box; + + display: block; + content: ' '; + border: 2px solid rgb(40,40,40); + border-radius: 50%; + border-left-color: transparent; + border-right-color: transparent; + animation: dtb-spinner 1500ms infinite linear; + -o-animation: dtb-spinner 1500ms infinite linear; + -ms-animation: dtb-spinner 1500ms infinite linear; + -webkit-animation: dtb-spinner 1500ms infinite linear; + -moz-animation: dtb-spinner 1500ms infinite linear; + } +} + +@keyframes dtb-spinner { + 100%{ transform: rotate(360deg); } +} + +@-o-keyframes dtb-spinner { + 100%{ -o-transform: rotate(360deg); transform: rotate(360deg); } +} + +@-ms-keyframes dtb-spinner { + 100%{ -ms-transform: rotate(360deg); transform: rotate(360deg); } +} + +@-webkit-keyframes dtb-spinner { + 100%{ -webkit-transform: rotate(360deg); transform: rotate(360deg); } +} + +@-moz-keyframes dtb-spinner { + 100%{ -moz-transform: rotate(360deg); transform: rotate(360deg); } +} diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.js b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.js new file mode 100644 index 0000000..994ab89 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.js @@ -0,0 +1,70 @@ +/*! Bootstrap integration for DataTables' Buttons + * ©2016 SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net-bs', 'datatables.net-buttons'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net-bs')(root, $).$; + } + + if ( ! $.fn.dataTable.Buttons ) { + require('datatables.net-buttons')(root, $); + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +$.extend( true, DataTable.Buttons.defaults, { + dom: { + container: { + className: 'dt-buttons btn-group' + }, + button: { + className: 'btn btn-default' + }, + collection: { + tag: 'ul', + className: 'dt-button-collection dropdown-menu', + button: { + tag: 'li', + className: 'dt-button', + active: 'active', + disabled: 'disabled' + }, + buttonLiner: { + tag: 'a', + className: '' + } + } + } +} ); + +DataTable.ext.buttons.collection.text = function ( dt ) { + return dt.i18n('buttons.collection', 'Collection '); +}; + + +return DataTable.Buttons; +})); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.min.js b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.min.js new file mode 100644 index 0000000..b94eda0 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap.min.js @@ -0,0 +1,6 @@ +/*! + Bootstrap integration for DataTables' Buttons + ©2016 SpryMedia Ltd - datatables.net/license +*/ +(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-bs")(a,b).$;b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"}, +button:{className:"btn btn-default"},collection:{tag:"ul",className:"dt-button-collection dropdown-menu",button:{tag:"li",className:"dt-button",active:"active",disabled:"disabled"},buttonLiner:{tag:"a",className:""}}}});a.ext.buttons.collection.text=function(a){return a.i18n("buttons.collection",'Collection ')};return a.Buttons}); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.js b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.js new file mode 100644 index 0000000..4a3e489 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.js @@ -0,0 +1,62 @@ +/*! Bootstrap integration for DataTables' Buttons + * ©2016 SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net-bs4', 'datatables.net-buttons'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net-bs4')(root, $).$; + } + + if ( ! $.fn.dataTable.Buttons ) { + require('datatables.net-buttons')(root, $); + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + +$.extend( true, DataTable.Buttons.defaults, { + dom: { + container: { + className: 'dt-buttons btn-group' + }, + button: { + className: 'btn btn-secondary' + }, + collection: { + tag: 'div', + className: 'dt-button-collection dropdown-menu', + button: { + tag: 'a', + className: 'dt-button dropdown-item', + active: 'active', + disabled: 'disabled' + } + } + } +} ); + +DataTable.ext.buttons.collection.className += ' dropdown-toggle'; + +return DataTable.Buttons; +})); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.min.js b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.min.js new file mode 100644 index 0000000..f76a5b0 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.bootstrap4.min.js @@ -0,0 +1,6 @@ +/*! + Bootstrap integration for DataTables' Buttons + ©2016 SpryMedia Ltd - datatables.net/license +*/ +(function(c){"function"===typeof define&&define.amd?define(["jquery","datatables.net-bs4","datatables.net-buttons"],function(a){return c(a,window,document)}):"object"===typeof exports?module.exports=function(a,b){a||(a=window);if(!b||!b.fn.dataTable)b=require("datatables.net-bs4")(a,b).$;b.fn.dataTable.Buttons||require("datatables.net-buttons")(a,b);return c(b,a,a.document)}:c(jQuery,window,document)})(function(c){var a=c.fn.dataTable;c.extend(!0,a.Buttons.defaults,{dom:{container:{className:"dt-buttons btn-group"}, +button:{className:"btn btn-secondary"},collection:{tag:"div",className:"dt-button-collection dropdown-menu",button:{tag:"a",className:"dt-button dropdown-item",active:"active",disabled:"disabled"}}}});a.ext.buttons.collection.className+=" dropdown-toggle";return a.Buttons}); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.colVis.js b/libs/datatable/Buttons-1.5.2/js/buttons.colVis.js new file mode 100644 index 0000000..2b71fe3 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.colVis.js @@ -0,0 +1,203 @@ +/*! + * Column visibility buttons for Buttons and DataTables. + * 2016 SpryMedia Ltd - datatables.net/license + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net')(root, $).$; + } + + if ( ! $.fn.dataTable.Buttons ) { + require('datatables.net-buttons')(root, $); + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +$.extend( DataTable.ext.buttons, { + // A collection of column visibility buttons + colvis: function ( dt, conf ) { + return { + extend: 'collection', + text: function ( dt ) { + return dt.i18n( 'buttons.colvis', 'Column visibility' ); + }, + className: 'buttons-colvis', + buttons: [ { + extend: 'columnsToggle', + columns: conf.columns, + columnText: conf.columnText + } ] + }; + }, + + // Selected columns with individual buttons - toggle column visibility + columnsToggle: function ( dt, conf ) { + var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) { + return { + extend: 'columnToggle', + columns: idx, + columnText: conf.columnText + }; + } ).toArray(); + + return columns; + }, + + // Single button to toggle column visibility + columnToggle: function ( dt, conf ) { + return { + extend: 'columnVisibility', + columns: conf.columns, + columnText: conf.columnText + }; + }, + + // Selected columns with individual buttons - set column visibility + columnsVisibility: function ( dt, conf ) { + var columns = dt.columns( conf.columns ).indexes().map( function ( idx ) { + return { + extend: 'columnVisibility', + columns: idx, + visibility: conf.visibility, + columnText: conf.columnText + }; + } ).toArray(); + + return columns; + }, + + // Single button to set column visibility + columnVisibility: { + columns: undefined, // column selector + text: function ( dt, button, conf ) { + return conf._columnText( dt, conf ); + }, + className: 'buttons-columnVisibility', + action: function ( e, dt, button, conf ) { + var col = dt.columns( conf.columns ); + var curr = col.visible(); + + col.visible( conf.visibility !== undefined ? + conf.visibility : + ! (curr.length ? curr[0] : false ) + ); + }, + init: function ( dt, button, conf ) { + var that = this; + + dt + .on( 'column-visibility.dt'+conf.namespace, function (e, settings) { + if ( ! settings.bDestroying && settings.nTable == dt.settings()[0].nTable ) { + that.active( dt.column( conf.columns ).visible() ); + } + } ) + .on( 'column-reorder.dt'+conf.namespace, function (e, settings, details) { + // Don't rename buttons based on column name if the button + // controls more than one column! + if ( dt.columns( conf.columns ).count() !== 1 ) { + return; + } + + that.text( conf._columnText( dt, conf ) ); + that.active( dt.column( conf.columns ).visible() ); + } ); + + this.active( dt.column( conf.columns ).visible() ); + }, + destroy: function ( dt, button, conf ) { + dt + .off( 'column-visibility.dt'+conf.namespace ) + .off( 'column-reorder.dt'+conf.namespace ); + }, + + _columnText: function ( dt, conf ) { + // Use DataTables' internal data structure until this is presented + // is a public API. The other option is to use + // `$( column(col).node() ).text()` but the node might not have been + // populated when Buttons is constructed. + var idx = dt.column( conf.columns ).index(); + var title = dt.settings()[0].aoColumns[ idx ].sTitle + .replace(/\n/g," ") // remove new lines + .replace(//gi, " ") // replace line breaks with spaces + .replace(//g, "") // remove select tags, including options text + .replace(//g, "") // strip HTML comments + .replace(/<.*?>/g, "") // strip HTML + .replace(/^\s+|\s+$/g,""); // trim + + return conf.columnText ? + conf.columnText( dt, idx, title ) : + title; + } + }, + + + colvisRestore: { + className: 'buttons-colvisRestore', + + text: function ( dt ) { + return dt.i18n( 'buttons.colvisRestore', 'Restore visibility' ); + }, + + init: function ( dt, button, conf ) { + conf._visOriginal = dt.columns().indexes().map( function ( idx ) { + return dt.column( idx ).visible(); + } ).toArray(); + }, + + action: function ( e, dt, button, conf ) { + dt.columns().every( function ( i ) { + // Take into account that ColReorder might have disrupted our + // indexes + var idx = dt.colReorder && dt.colReorder.transpose ? + dt.colReorder.transpose( i, 'toOriginal' ) : + i; + + this.visible( conf._visOriginal[ idx ] ); + } ); + } + }, + + + colvisGroup: { + className: 'buttons-colvisGroup', + + action: function ( e, dt, button, conf ) { + dt.columns( conf.show ).visible( true, false ); + dt.columns( conf.hide ).visible( false, false ); + + dt.columns.adjust(); + }, + + show: [], + + hide: [] + } +} ); + + +return DataTable.Buttons; +})); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.colVis.min.js b/libs/datatable/Buttons-1.5.2/js/buttons.colVis.min.js new file mode 100644 index 0000000..793b3b2 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.colVis.min.js @@ -0,0 +1,6 @@ +(function(g){"function"===typeof define&&define.amd?define(["jquery","datatables.net","datatables.net-buttons"],function(d){return g(d,window,document)}):"object"===typeof exports?module.exports=function(d,f){d||(d=window);if(!f||!f.fn.dataTable)f=require("datatables.net")(d,f).$;f.fn.dataTable.Buttons||require("datatables.net-buttons")(d,f);return g(f,d,d.document)}:g(jQuery,window,document)})(function(g,d,f,h){d=g.fn.dataTable;g.extend(d.ext.buttons,{colvis:function(a,b){return{extend:"collection", +text:function(b){return b.i18n("buttons.colvis","Column visibility")},className:"buttons-colvis",buttons:[{extend:"columnsToggle",columns:b.columns,columnText:b.columnText}]}},columnsToggle:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnToggle",columns:a,columnText:b.columnText}}).toArray()},columnToggle:function(a,b){return{extend:"columnVisibility",columns:b.columns,columnText:b.columnText}},columnsVisibility:function(a,b){return a.columns(b.columns).indexes().map(function(a){return{extend:"columnVisibility", +columns:a,visibility:b.visibility,columnText:b.columnText}}).toArray()},columnVisibility:{columns:h,text:function(a,b,c){return c._columnText(a,c)},className:"buttons-columnVisibility",action:function(a,b,c,e){a=b.columns(e.columns);b=a.visible();a.visible(e.visibility!==h?e.visibility:!(b.length&&b[0]))},init:function(a,b,c){var e=this;a.on("column-visibility.dt"+c.namespace,function(b,d){!d.bDestroying&&d.nTable==a.settings()[0].nTable&&e.active(a.column(c.columns).visible())}).on("column-reorder.dt"+ +c.namespace,function(){1===a.columns(c.columns).count()&&(e.text(c._columnText(a,c)),e.active(a.column(c.columns).visible()))});this.active(a.column(c.columns).visible())},destroy:function(a,b,c){a.off("column-visibility.dt"+c.namespace).off("column-reorder.dt"+c.namespace)},_columnText:function(a,b){var c=a.column(b.columns).index(),e=a.settings()[0].aoColumns[c].sTitle.replace(/\n/g," ").replace(//gi," ").replace(//g,"").replace(//g,"").replace(/<.*?>/g, +"").replace(/^\s+|\s+$/g,"");return b.columnText?b.columnText(a,c,e):e}},colvisRestore:{className:"buttons-colvisRestore",text:function(a){return a.i18n("buttons.colvisRestore","Restore visibility")},init:function(a,b,c){c._visOriginal=a.columns().indexes().map(function(b){return a.column(b).visible()}).toArray()},action:function(a,b,c,d){b.columns().every(function(a){a=b.colReorder&&b.colReorder.transpose?b.colReorder.transpose(a,"toOriginal"):a;this.visible(d._visOriginal[a])})}},colvisGroup:{className:"buttons-colvisGroup", +action:function(a,b,c,d){b.columns(d.show).visible(!0,!1);b.columns(d.hide).visible(!1,!1);b.columns.adjust()},show:[],hide:[]}});return d.Buttons}); diff --git a/libs/datatable/Buttons-1.5.2/js/buttons.flash.js b/libs/datatable/Buttons-1.5.2/js/buttons.flash.js new file mode 100644 index 0000000..5fe50c6 --- /dev/null +++ b/libs/datatable/Buttons-1.5.2/js/buttons.flash.js @@ -0,0 +1,1456 @@ +/*! + * Flash export buttons for Buttons and DataTables. + * 2015-2017 SpryMedia Ltd - datatables.net/license + * + * ZeroClipbaord - MIT license + * Copyright (c) 2012 Joseph Huckaby + */ + +(function( factory ){ + if ( typeof define === 'function' && define.amd ) { + // AMD + define( ['jquery', 'datatables.net', 'datatables.net-buttons'], function ( $ ) { + return factory( $, window, document ); + } ); + } + else if ( typeof exports === 'object' ) { + // CommonJS + module.exports = function (root, $) { + if ( ! root ) { + root = window; + } + + if ( ! $ || ! $.fn.dataTable ) { + $ = require('datatables.net')(root, $).$; + } + + if ( ! $.fn.dataTable.Buttons ) { + require('datatables.net-buttons')(root, $); + } + + return factory( $, root, root.document ); + }; + } + else { + // Browser + factory( jQuery, window, document ); + } +}(function( $, window, document, undefined ) { +'use strict'; +var DataTable = $.fn.dataTable; + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * ZeroClipboard dependency + */ + +/* + * ZeroClipboard 1.0.4 with modifications + * Author: Joseph Huckaby + * License: MIT + * + * Copyright (c) 2012 Joseph Huckaby + */ +var ZeroClipboard_TableTools = { + version: "1.0.4-TableTools2", + clients: {}, // registered upload clients on page, indexed by id + moviePath: '', // URL to movie + nextId: 1, // ID of next movie + + $: function(thingy) { + // simple DOM lookup utility function + if (typeof(thingy) == 'string') { + thingy = document.getElementById(thingy); + } + if (!thingy.addClass) { + // extend element with a few useful methods + thingy.hide = function() { this.style.display = 'none'; }; + thingy.show = function() { this.style.display = ''; }; + thingy.addClass = function(name) { this.removeClass(name); this.className += ' ' + name; }; + thingy.removeClass = function(name) { + this.className = this.className.replace( new RegExp("\\s*" + name + "\\s*"), " ").replace(/^\s+/, '').replace(/\s+$/, ''); + }; + thingy.hasClass = function(name) { + return !!this.className.match( new RegExp("\\s*" + name + "\\s*") ); + }; + } + return thingy; + }, + + setMoviePath: function(path) { + // set path to ZeroClipboard.swf + this.moviePath = path; + }, + + dispatch: function(id, eventName, args) { + // receive event from flash movie, send to client + var client = this.clients[id]; + if (client) { + client.receiveEvent(eventName, args); + } + }, + + log: function ( str ) { + console.log( 'Flash: '+str ); + }, + + register: function(id, client) { + // register new client to receive events + this.clients[id] = client; + }, + + getDOMObjectPosition: function(obj) { + // get absolute coordinates for dom element + var info = { + left: 0, + top: 0, + width: obj.width ? obj.width : obj.offsetWidth, + height: obj.height ? obj.height : obj.offsetHeight + }; + + if ( obj.style.width !== "" ) { + info.width = obj.style.width.replace("px",""); + } + + if ( obj.style.height !== "" ) { + info.height = obj.style.height.replace("px",""); + } + + while (obj) { + info.left += obj.offsetLeft; + info.top += obj.offsetTop; + obj = obj.offsetParent; + } + + return info; + }, + + Client: function(elem) { + // constructor for new simple upload client + this.handlers = {}; + + // unique ID + this.id = ZeroClipboard_TableTools.nextId++; + this.movieId = 'ZeroClipboard_TableToolsMovie_' + this.id; + + // register client with singleton to receive flash events + ZeroClipboard_TableTools.register(this.id, this); + + // create movie + if (elem) { + this.glue(elem); + } + } +}; + +ZeroClipboard_TableTools.Client.prototype = { + + id: 0, // unique ID for us + ready: false, // whether movie is ready to receive events or not + movie: null, // reference to movie object + clipText: '', // text to copy to clipboard + fileName: '', // default file save name + action: 'copy', // action to perform + handCursorEnabled: true, // whether to show hand cursor, or default pointer cursor + cssEffects: true, // enable CSS mouse effects on dom container + handlers: null, // user event handlers + sized: false, + sheetName: '', // default sheet name for excel export + + glue: function(elem, title) { + // glue to DOM element + // elem can be ID or actual DOM element object + this.domElement = ZeroClipboard_TableTools.$(elem); + + // float just above object, or zIndex 99 if dom element isn't set + var zIndex = 99; + if (this.domElement.style.zIndex) { + zIndex = parseInt(this.domElement.style.zIndex, 10) + 1; + } + + // find X/Y position of domElement + var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); + + // create floating DIV above element + this.div = document.createElement('div'); + var style = this.div.style; + style.position = 'absolute'; + style.left = '0px'; + style.top = '0px'; + style.width = (box.width) + 'px'; + style.height = box.height + 'px'; + style.zIndex = zIndex; + + if ( typeof title != "undefined" && title !== "" ) { + this.div.title = title; + } + if ( box.width !== 0 && box.height !== 0 ) { + this.sized = true; + } + + // style.backgroundColor = '#f00'; // debug + if ( this.domElement ) { + this.domElement.appendChild(this.div); + this.div.innerHTML = this.getHTML( box.width, box.height ).replace(/&/g, '&'); + } + }, + + positionElement: function() { + var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); + var style = this.div.style; + + style.position = 'absolute'; + //style.left = (this.domElement.offsetLeft)+'px'; + //style.top = this.domElement.offsetTop+'px'; + style.width = box.width + 'px'; + style.height = box.height + 'px'; + + if ( box.width !== 0 && box.height !== 0 ) { + this.sized = true; + } else { + return; + } + + var flash = this.div.childNodes[0]; + flash.width = box.width; + flash.height = box.height; + }, + + getHTML: function(width, height) { + // return HTML for movie + var html = ''; + var flashvars = 'id=' + this.id + + '&width=' + width + + '&height=' + height; + + if (navigator.userAgent.match(/MSIE/)) { + // IE gets an OBJECT tag + var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; + html += ''; + } + else { + // all other browsers get an EMBED tag + html += ''; + } + return html; + }, + + hide: function() { + // temporarily hide floater offscreen + if (this.div) { + this.div.style.left = '-2000px'; + } + }, + + show: function() { + // show ourselves after a call to hide() + this.reposition(); + }, + + destroy: function() { + // destroy control and floater + var that = this; + + if (this.domElement && this.div) { + $(this.div).remove(); + + this.domElement = null; + this.div = null; + + $.each( ZeroClipboard_TableTools.clients, function ( id, client ) { + if ( client === that ) { + delete ZeroClipboard_TableTools.clients[ id ]; + } + } ); + } + }, + + reposition: function(elem) { + // reposition our floating div, optionally to new container + // warning: container CANNOT change size, only position + if (elem) { + this.domElement = ZeroClipboard_TableTools.$(elem); + if (!this.domElement) { + this.hide(); + } + } + + if (this.domElement && this.div) { + var box = ZeroClipboard_TableTools.getDOMObjectPosition(this.domElement); + var style = this.div.style; + style.left = '' + box.left + 'px'; + style.top = '' + box.top + 'px'; + } + }, + + clearText: function() { + // clear the text to be copy / saved + this.clipText = ''; + if (this.ready) { + this.movie.clearText(); + } + }, + + appendText: function(newText) { + // append text to that which is to be copied / saved + this.clipText += newText; + if (this.ready) { this.movie.appendText(newText) ;} + }, + + setText: function(newText) { + // set text to be copied to be copied / saved + this.clipText = newText; + if (this.ready) { this.movie.setText(newText) ;} + }, + + setFileName: function(newText) { + // set the file name + this.fileName = newText; + if (this.ready) { + this.movie.setFileName(newText); + } + }, + + setSheetData: function(data) { + // set the xlsx sheet data + if (this.ready) { + this.movie.setSheetData( JSON.stringify( data ) ); + } + }, + + setAction: function(newText) { + // set action (save or copy) + this.action = newText; + if (this.ready) { + this.movie.setAction(newText); + } + }, + + addEventListener: function(eventName, func) { + // add user event listener for event + // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + if (!this.handlers[eventName]) { + this.handlers[eventName] = []; + } + this.handlers[eventName].push(func); + }, + + setHandCursor: function(enabled) { + // enable hand cursor (true), or default arrow cursor (false) + this.handCursorEnabled = enabled; + if (this.ready) { + this.movie.setHandCursor(enabled); + } + }, + + setCSSEffects: function(enabled) { + // enable or disable CSS effects on DOM container + this.cssEffects = !!enabled; + }, + + receiveEvent: function(eventName, args) { + var self; + + // receive event from flash + eventName = eventName.toString().toLowerCase().replace(/^on/, ''); + + // special behavior for certain events + switch (eventName) { + case 'load': + // movie claims it is ready, but in IE this isn't always the case... + // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function + this.movie = document.getElementById(this.movieId); + if (!this.movie) { + self = this; + setTimeout( function() { self.receiveEvent('load', null); }, 1 ); + return; + } + + // firefox on pc needs a "kick" in order to set these in certain cases + if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { + self = this; + setTimeout( function() { self.receiveEvent('load', null); }, 100 ); + this.ready = true; + return; + } + + this.ready = true; + this.movie.clearText(); + this.movie.appendText( this.clipText ); + this.movie.setFileName( this.fileName ); + this.movie.setAction( this.action ); + this.movie.setHandCursor( this.handCursorEnabled ); + break; + + case 'mouseover': + if (this.domElement && this.cssEffects) { + //this.domElement.addClass('hover'); + if (this.recoverActive) { + this.domElement.addClass('active'); + } + } + break; + + case 'mouseout': + if (this.domElement && this.cssEffects) { + this.recoverActive = false; + if (this.domElement.hasClass('active')) { + this.domElement.removeClass('active'); + this.recoverActive = true; + } + //this.domElement.removeClass('hover'); + } + break; + + case 'mousedown': + if (this.domElement && this.cssEffects) { + this.domElement.addClass('active'); + } + break; + + case 'mouseup': + if (this.domElement && this.cssEffects) { + this.domElement.removeClass('active'); + this.recoverActive = false; + } + break; + } // switch eventName + + if (this.handlers[eventName]) { + for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { + var func = this.handlers[eventName][idx]; + + if (typeof(func) == 'function') { + // actual function reference + func(this, args); + } + else if ((typeof(func) == 'object') && (func.length == 2)) { + // PHP style object + method, i.e. [myObject, 'myMethod'] + func[0][ func[1] ](this, args); + } + else if (typeof(func) == 'string') { + // name of function + window[func](this, args); + } + } // foreach event handler defined + } // user defined handler for event + } +}; + +ZeroClipboard_TableTools.hasFlash = function () +{ + try { + var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); + if (fo) { + return true; + } + } + catch (e) { + if ( + navigator.mimeTypes && + navigator.mimeTypes['application/x-shockwave-flash'] !== undefined && + navigator.mimeTypes['application/x-shockwave-flash'].enabledPlugin + ) { + return true; + } + } + + return false; +}; + +// For the Flash binding to work, ZeroClipboard_TableTools must be on the global +// object list +window.ZeroClipboard_TableTools = ZeroClipboard_TableTools; + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Local (private) functions + */ + +/** + * If a Buttons instance is initlaised before it is placed into the DOM, Flash + * won't be able to bind to it, so we need to wait until it is available, this + * method abstracts that out. + * + * @param {ZeroClipboard} flash ZeroClipboard instance + * @param {jQuery} node Button + */ +var _glue = function ( flash, node ) +{ + var id = node.attr('id'); + + if ( node.parents('html').length ) { + flash.glue( node[0], '' ); + } + else { + setTimeout( function () { + _glue( flash, node ); + }, 500 ); + } +}; + +/** + * Get the sheet name for Excel exports. + * + * @param {object} config Button configuration + */ +var _sheetname = function ( config ) +{ + var sheetName = 'Sheet1'; + + if ( config.sheetName ) { + sheetName = config.sheetName.replace(/[\[\]\*\/\\\?\:]/g, ''); + } + + return sheetName; +}; + +/** + * Set the flash text. This has to be broken up into chunks as the Javascript / + * Flash bridge has a size limit. There is no indication in the Flash + * documentation what this is, and it probably depends upon the browser. + * Experimentation shows that the point is around 50k when data starts to get + * lost, so an 8K limit used here is safe. + * + * @param {ZeroClipboard} flash ZeroClipboard instance + * @param {string} data Data to send to Flash + */ +var _setText = function ( flash, data ) +{ + var parts = data.match(/[\s\S]{1,8192}/g) || []; + + flash.clearText(); + for ( var i=0, len=parts.length ; i 0 ) { + s += separator; + } + + s += boundary ? + boundary + ('' + a[i]).replace( reBoundary, escapeChar+boundary ) + boundary : + a[i]; + } + + return s; + }; + + var header = config.header ? join( data.header )+newLine : ''; + var footer = config.footer && data.footer ? newLine+join( data.footer ) : ''; + var body = []; + + for ( var i=0, ien=data.body.length ; i= 0 ) { + s = String.fromCharCode(n % len + ordA) + s; + n = Math.floor(n / len) - 1; + } + + return s; +} + +/** + * Create an XML node and add any children, attributes, etc without needing to + * be verbose in the DOM. + * + * @param {object} doc XML document + * @param {string} nodeName Node name + * @param {object} opts Options - can be `attr` (attributes), `children` + * (child nodes) and `text` (text content) + * @return {node} Created node + */ +function _createNode( doc, nodeName, opts ){ + var tempNode = doc.createElement( nodeName ); + + if ( opts ) { + if ( opts.attr ) { + $(tempNode).attr( opts.attr ); + } + + if ( opts.children ) { + $.each( opts.children, function ( key, value ) { + tempNode.appendChild( value ); + } ); + } + + if ( opts.text !== null && opts.text !== undefined ) { + tempNode.appendChild( doc.createTextNode( opts.text ) ); + } + } + + return tempNode; +} + +/** + * Get the width for an Excel column based on the contents of that column + * @param {object} data Data for export + * @param {int} col Column index + * @return {int} Column width + */ +function _excelColWidth( data, col ) { + var max = data.header[col].length; + var len, lineSplit, str; + + if ( data.footer && data.footer[col].length > max ) { + max = data.footer[col].length; + } + + for ( var i=0, ien=data.body.length ; i max ) { + max = len; + } + + // Max width rather than having potentially massive column widths + if ( max > 40 ) { + return 52; // 40 * 1.3 + } + } + + max *= 1.3; + + // And a min width + return max > 6 ? max : 6; +} + + var _serialiser = ""; + if (typeof window.XMLSerializer === 'undefined') { + _serialiser = new function () { + this.serializeToString = function (input) { + return input.xml + } + }; + } else { + _serialiser = new XMLSerializer(); + } + + var _ieExcel; + + +/** + * Convert XML documents in an object to strings + * @param {object} obj XLSX document object + */ +function _xlsxToStrings( obj ) { + if ( _ieExcel === undefined ) { + // Detect if we are dealing with IE's _awful_ serialiser by seeing if it + // drop attributes + _ieExcel = _serialiser + .serializeToString( + $.parseXML( excelStrings['xl/worksheets/sheet1.xml'] ) + ) + .indexOf( 'xmlns:r' ) === -1; + } + + $.each( obj, function ( name, val ) { + if ( $.isPlainObject( val ) ) { + _xlsxToStrings( val ); + } + else { + if ( _ieExcel ) { + // IE's XML serialiser will drop some name space attributes from + // from the root node, so we need to save them. Do this by + // replacing the namespace nodes with a regular attribute that + // we convert back when serialised. Edge does not have this + // issue + var worksheet = val.childNodes[0]; + var i, ien; + var attrs = []; + + for ( i=worksheet.attributes.length-1 ; i>=0 ; i-- ) { + var attrName = worksheet.attributes[i].nodeName; + var attrValue = worksheet.attributes[i].nodeValue; + + if ( attrName.indexOf( ':' ) !== -1 ) { + attrs.push( { name: attrName, value: attrValue } ); + + worksheet.removeAttribute( attrName ); + } + } + + for ( i=0, ien=attrs.length ; i]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' ); + + obj[ name ] = str; + } + } ); +} + +// Excel - Pre-defined strings to build a basic XLSX file +var excelStrings = { + "_rels/.rels": + ''+ + ''+ + ''+ + '', + + "xl/_rels/workbook.xml.rels": + ''+ + ''+ + ''+ + ''+ + '', + + "[Content_Types].xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '', + + "xl/workbook.xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '', + + "xl/worksheets/sheet1.xml": + ''+ + ''+ + ''+ + ''+ + '', + + "xl/styles.xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ // Excel appears to use this as a dotted background regardless of values but + ''+ // to be valid to the schema, use a patternFill + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' +}; +// Note we could use 3 `for` loops for the styles, but when gzipped there is +// virtually no difference in size, since the above can be easily compressed + +// Pattern matching for special number formats. Perhaps this should be exposed +// via an API in future? +var _excelSpecials = [ + { match: /^\-?\d+\.\d%$/, style: 60, fmt: function (d) { return d/100; } }, // Precent with d.p. + { match: /^\-?\d+\.?\d*%$/, style: 56, fmt: function (d) { return d/100; } }, // Percent + { match: /^\-?\$[\d,]+.?\d*$/, style: 57 }, // Dollars + { match: /^\-?£[\d,]+.?\d*$/, style: 58 }, // Pounds + { match: /^\-?€[\d,]+.?\d*$/, style: 59 }, // Euros + { match: /^\([\d,]+\)$/, style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets + { match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets - 2d.p. + { match: /^[\d,]+$/, style: 63 }, // Numbers with thousand separators + { match: /^[\d,]+\.\d{2}$/, style: 64 } // Numbers with 2d.p. and thousands separators +]; + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * DataTables options and methods + */ + +// Set the default SWF path +DataTable.Buttons.swfPath = '//cdn.datatables.net/buttons/'+DataTable.Buttons.version+'/swf/flashExport.swf'; + +// Method to allow Flash buttons to be resized when made visible - as they are +// of zero height and width if initialised hidden +DataTable.Api.register( 'buttons.resize()', function () { + $.each( ZeroClipboard_TableTools.clients, function ( i, client ) { + if ( client.domElement !== undefined && client.domElement.parentNode ) { + client.positionElement(); + } + } ); +} ); + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Button definitions + */ + +// Copy to clipboard +DataTable.ext.buttons.copyFlash = $.extend( {}, flashButton, { + className: 'buttons-copy buttons-flash', + + text: function ( dt ) { + return dt.i18n( 'buttons.copy', 'Copy' ); + }, + + action: function ( e, dt, button, config ) { + // Check that the trigger did actually occur due to a Flash activation + if ( ! config._fromFlash ) { + return; + } + + this.processing( true ); + + var flash = config._flash; + var exportData = _exportData( dt, config ); + var info = dt.buttons.exportInfo( config ); + var newline = _newLine(config); + var output = exportData.str; + + if ( info.title ) { + output = info.title + newline + newline + output; + } + + if ( info.messageTop ) { + output = info.messageTop + newline + newline + output; + } + + if ( info.messageBottom ) { + output = output + newline + newline + info.messageBottom; + } + + if ( config.customize ) { + output = config.customize( output, config, dt ); + } + + flash.setAction( 'copy' ); + _setText( flash, output ); + + this.processing( false ); + + dt.buttons.info( + dt.i18n( 'buttons.copyTitle', 'Copy to clipboard' ), + dt.i18n( 'buttons.copySuccess', { + _: 'Copied %d rows to clipboard', + 1: 'Copied 1 row to clipboard' + }, data.rows ), + 3000 + ); + }, + + fieldSeparator: '\t', + + fieldBoundary: '' +} ); + +// CSV save file +DataTable.ext.buttons.csvFlash = $.extend( {}, flashButton, { + className: 'buttons-csv buttons-flash', + + text: function ( dt ) { + return dt.i18n( 'buttons.csv', 'CSV' ); + }, + + action: function ( e, dt, button, config ) { + // Set the text + var flash = config._flash; + var data = _exportData( dt, config ); + var info = dt.buttons.exportInfo( config ); + var output = config.customize ? + config.customize( data.str, config, dt ) : + data.str; + + flash.setAction( 'csv' ); + flash.setFileName( info.filename ); + _setText( flash, output ); + }, + + escapeChar: '"' +} ); + +// Excel save file - this is really a CSV file using UTF-8 that Excel can read +DataTable.ext.buttons.excelFlash = $.extend( {}, flashButton, { + className: 'buttons-excel buttons-flash', + + text: function ( dt ) { + return dt.i18n( 'buttons.excel', 'Excel' ); + }, + + action: function ( e, dt, button, config ) { + this.processing( true ); + + var flash = config._flash; + var rowPos = 0; + var rels = $.parseXML( excelStrings['xl/worksheets/sheet1.xml'] ) ; //Parses xml + var relsGet = rels.getElementsByTagName( "sheetData" )[0]; + + var xlsx = { + _rels: { + ".rels": $.parseXML( excelStrings['_rels/.rels'] ) + }, + xl: { + _rels: { + "workbook.xml.rels": $.parseXML( excelStrings['xl/_rels/workbook.xml.rels'] ) + }, + "workbook.xml": $.parseXML( excelStrings['xl/workbook.xml'] ), + "styles.xml": $.parseXML( excelStrings['xl/styles.xml'] ), + "worksheets": { + "sheet1.xml": rels + } + + }, + "[Content_Types].xml": $.parseXML( excelStrings['[Content_Types].xml']) + }; + + var data = dt.buttons.exportData( config.exportOptions ); + var currentRow, rowNode; + var addRow = function ( row ) { + currentRow = rowPos+1; + rowNode = _createNode( rels, "row", { attr: {r:currentRow} } ); + + for ( var i=0, ien=row.length ; id&&(d=a.footer[b].length);for(var e=0,f=a.body.length;ed&&(d=c),40'+c),c=c.replace(/_dt_b_namespace_token_/g,":"));c=c.replace(/<([^<>]*?) xmlns=""([^<>]*?)>/g,"<$1 $2>");a[b]=c}})}var j=g.fn.dataTable,h={version:"1.0.4-TableTools2",clients:{},moviePath:"",nextId:1,$:function(a){"string"==typeof a&&(a=l.getElementById(a));a.addClass||(a.hide=function(){this.style.display="none"},a.show=function(){this.style.display= +""},a.addClass=function(a){this.removeClass(a);this.className+=" "+a},a.removeClass=function(a){this.className=this.className.replace(RegExp("\\s*"+a+"\\s*")," ").replace(/^\s+/,"").replace(/\s+$/,"")},a.hasClass=function(a){return!!this.className.match(RegExp("\\s*"+a+"\\s*"))});return a},setMoviePath:function(a){this.moviePath=a},dispatch:function(a,b,d){(a=this.clients[a])&&a.receiveEvent(b,d)},log:function(a){console.log("Flash: "+a)},register:function(a,b){this.clients[a]=b},getDOMObjectPosition:function(a){var b= +{left:0,top:0,width:a.width?a.width:a.offsetWidth,height:a.height?a.height:a.offsetHeight};""!==a.style.width&&(b.width=a.style.width.replace("px",""));""!==a.style.height&&(b.height=a.style.height.replace("px",""));for(;a;)b.left+=a.offsetLeft,b.top+=a.offsetTop,a=a.offsetParent;return b},Client:function(a){this.handlers={};this.id=h.nextId++;this.movieId="ZeroClipboard_TableToolsMovie_"+this.id;h.register(this.id,this);a&&this.glue(a)}};h.Client.prototype={id:0,ready:!1,movie:null,clipText:"",fileName:"", +action:"copy",handCursorEnabled:!0,cssEffects:!0,handlers:null,sized:!1,sheetName:"",glue:function(a,b){this.domElement=h.$(a);var d=99;this.domElement.style.zIndex&&(d=parseInt(this.domElement.style.zIndex,10)+1);var c=h.getDOMObjectPosition(this.domElement);this.div=l.createElement("div");var e=this.div.style;e.position="absolute";e.left="0px";e.top="0px";e.width=c.width+"px";e.height=c.height+"px";e.zIndex=d;"undefined"!=typeof b&&""!==b&&(this.div.title=b);0!==c.width&&0!==c.height&&(this.sized= +!0);this.domElement&&(this.domElement.appendChild(this.div),this.div.innerHTML=this.getHTML(c.width,c.height).replace(/&/g,"&"))},positionElement:function(){var a=h.getDOMObjectPosition(this.domElement),b=this.div.style;b.position="absolute";b.width=a.width+"px";b.height=a.height+"px";0!==a.width&&0!==a.height&&(this.sized=!0,b=this.div.childNodes[0],b.width=a.width,b.height=a.height)},getHTML:function(a,b){var d="",c="id="+this.id+"&width="+a+"&height="+b;if(navigator.userAgent.match(/MSIE/))var e= +location.href.match(/^https/i)?"https://":"http://",d=d+('');else d+='';return d},hide:function(){this.div&&(this.div.style.left="-2000px")}, +show:function(){this.reposition()},destroy:function(){var a=this;this.domElement&&this.div&&(g(this.div).remove(),this.div=this.domElement=null,g.each(h.clients,function(b,d){d===a&&delete h.clients[b]}))},reposition:function(a){a&&((this.domElement=h.$(a))||this.hide());if(this.domElement&&this.div){var a=h.getDOMObjectPosition(this.domElement),b=this.div.style;b.left=""+a.left+"px";b.top=""+a.top+"px"}},clearText:function(){this.clipText="";this.ready&&this.movie.clearText()},appendText:function(a){this.clipText+= +a;this.ready&&this.movie.appendText(a)},setText:function(a){this.clipText=a;this.ready&&this.movie.setText(a)},setFileName:function(a){this.fileName=a;this.ready&&this.movie.setFileName(a)},setSheetData:function(a){this.ready&&this.movie.setSheetData(JSON.stringify(a))},setAction:function(a){this.action=a;this.ready&&this.movie.setAction(a)},addEventListener:function(a,b){a=a.toString().toLowerCase().replace(/^on/,"");this.handlers[a]||(this.handlers[a]=[]);this.handlers[a].push(b)},setHandCursor:function(a){this.handCursorEnabled= +a;this.ready&&this.movie.setHandCursor(a)},setCSSEffects:function(a){this.cssEffects=!!a},receiveEvent:function(a,b){var d,a=a.toString().toLowerCase().replace(/^on/,"");switch(a){case "load":this.movie=l.getElementById(this.movieId);if(!this.movie){d=this;setTimeout(function(){d.receiveEvent("load",null)},1);return}if(!this.ready&&navigator.userAgent.match(/Firefox/)&&navigator.userAgent.match(/Windows/)){d=this;setTimeout(function(){d.receiveEvent("load",null)},100);this.ready=!0;return}this.ready= +!0;this.movie.clearText();this.movie.appendText(this.clipText);this.movie.setFileName(this.fileName);this.movie.setAction(this.action);this.movie.setHandCursor(this.handCursorEnabled);break;case "mouseover":this.domElement&&this.cssEffects&&this.recoverActive&&this.domElement.addClass("active");break;case "mouseout":this.domElement&&this.cssEffects&&(this.recoverActive=!1,this.domElement.hasClass("active")&&(this.domElement.removeClass("active"),this.recoverActive=!0));break;case "mousedown":this.domElement&& +this.cssEffects&&this.domElement.addClass("active");break;case "mouseup":this.domElement&&this.cssEffects&&(this.domElement.removeClass("active"),this.recoverActive=!1)}if(this.handlers[a])for(var c=0,e=this.handlers[a].length;c',"xl/_rels/workbook.xml.rels":'', +"[Content_Types].xml":'', +"xl/workbook.xml":'', +"xl/worksheets/sheet1.xml":'',"xl/styles.xml":''}, +B=[{match:/^\-?\d+\.\d%$/,style:60,fmt:function(a){return a/100}},{match:/^\-?\d+\.?\d*%$/,style:56,fmt:function(a){return a/100}},{match:/^\-?\$[\d,]+.?\d*$/,style:57},{match:/^\-?£[\d,]+.?\d*$/,style:58},{match:/^\-?€[\d,]+.?\d*$/,style:59},{match:/^\([\d,]+\)$/,style:61,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^\([\d,]+\.\d{2}\)$/,style:62,fmt:function(a){return-1*a.replace(/[\(\)]/g,"")}},{match:/^[\d,]+$/,style:63},{match:/^[\d,]+\.\d{2}$/,style:64}];j.Buttons.swfPath="//cdn.datatables.net/buttons/"+ +j.Buttons.version+"/swf/flashExport.swf";j.Api.register("buttons.resize()",function(){g.each(h.clients,function(a,b){b.domElement!==q&&b.domElement.parentNode&&b.positionElement()})});j.ext.buttons.copyFlash=g.extend({},u,{className:"buttons-copy buttons-flash",text:function(a){return a.i18n("buttons.copy","Copy")},action:function(a,b,d,c){if(c._fromFlash){this.processing(!0);var a=c._flash,e=A(b,c),d=b.buttons.exportInfo(c),f=z(c),e=e.str;d.title&&(e=d.title+f+f+e);d.messageTop&&(e=d.messageTop+ +f+f+e);d.messageBottom&&(e=e+f+f+d.messageBottom);c.customize&&(e=c.customize(e,c,b));a.setAction("copy");t(a,e);this.processing(!1);b.buttons.info(b.i18n("buttons.copyTitle","Copy to clipboard"),b.i18n("buttons.copySuccess",{_:"Copied %d rows to clipboard",1:"Copied 1 row to clipboard"},data.rows),3E3)}},fieldSeparator:"\t",fieldBoundary:""});j.ext.buttons.csvFlash=g.extend({},u,{className:"buttons-csv buttons-flash",text:function(a){return a.i18n("buttons.csv","CSV")},action:function(a,b,d,c){var a= +c._flash,e=A(b,c),d=b.buttons.exportInfo(c),b=c.customize?c.customize(e.str,c,b):e.str;a.setAction("csv");a.setFileName(d.filename);t(a,b)},escapeChar:'"'});j.ext.buttons.excelFlash=g.extend({},u,{className:"buttons-excel buttons-flash",text:function(a){return a.i18n("buttons.excel","Excel")},action:function(a,b,d,c){this.processing(!0);var a=c._flash,e=0,f=g.parseXML(n["xl/worksheets/sheet1.xml"]),h=f.getElementsByTagName("sheetData")[0],d={_rels:{".rels":g.parseXML(n["_rels/.rels"])},xl:{_rels:{"workbook.xml.rels":g.parseXML(n["xl/_rels/workbook.xml.rels"])}, +"workbook.xml":g.parseXML(n["xl/workbook.xml"]),"styles.xml":g.parseXML(n["xl/styles.xml"]),worksheets:{"sheet1.xml":f}},"[Content_Types].xml":g.parseXML(n["[Content_Types].xml"])},i=b.buttons.exportData(c.exportOptions),k,l,j=function(a){k=e+1;l=o(f,"row",{attr:{r:k}});for(var b=0,d=a.length;b 0 ) { + s += separator; + } + + s += boundary ? + boundary + ('' + a[i]).replace( reBoundary, escapeChar+boundary ) + boundary : + a[i]; + } + + return s; + }; + + var header = config.header ? join( data.header )+newLine : ''; + var footer = config.footer && data.footer ? newLine+join( data.footer ) : ''; + var body = []; + + for ( var i=0, ien=data.body.length ; i 1 && version[1]*1 < 603.1 ) { + return true; + } + + return false; +}; + +/** + * Convert from numeric position to letter for column names in Excel + * @param {int} n Column number + * @return {string} Column letter(s) name + */ +function createCellPos( n ){ + var ordA = 'A'.charCodeAt(0); + var ordZ = 'Z'.charCodeAt(0); + var len = ordZ - ordA + 1; + var s = ""; + + while( n >= 0 ) { + s = String.fromCharCode(n % len + ordA) + s; + n = Math.floor(n / len) - 1; + } + + return s; +} + +try { + var _serialiser = new XMLSerializer(); + var _ieExcel; +} +catch (t) {} + +/** + * Recursively add XML files from an object's structure to a ZIP file. This + * allows the XSLX file to be easily defined with an object's structure matching + * the files structure. + * + * @param {JSZip} zip ZIP package + * @param {object} obj Object to add (recursive) + */ +function _addToZip( zip, obj ) { + if ( _ieExcel === undefined ) { + // Detect if we are dealing with IE's _awful_ serialiser by seeing if it + // drop attributes + _ieExcel = _serialiser + .serializeToString( + $.parseXML( excelStrings['xl/worksheets/sheet1.xml'] ) + ) + .indexOf( 'xmlns:r' ) === -1; + } + + $.each( obj, function ( name, val ) { + if ( $.isPlainObject( val ) ) { + var newDir = zip.folder( name ); + _addToZip( newDir, val ); + } + else { + if ( _ieExcel ) { + // IE's XML serialiser will drop some name space attributes from + // from the root node, so we need to save them. Do this by + // replacing the namespace nodes with a regular attribute that + // we convert back when serialised. Edge does not have this + // issue + var worksheet = val.childNodes[0]; + var i, ien; + var attrs = []; + + for ( i=worksheet.attributes.length-1 ; i>=0 ; i-- ) { + var attrName = worksheet.attributes[i].nodeName; + var attrValue = worksheet.attributes[i].nodeValue; + + if ( attrName.indexOf( ':' ) !== -1 ) { + attrs.push( { name: attrName, value: attrValue } ); + + worksheet.removeAttribute( attrName ); + } + } + + for ( i=0, ien=attrs.length ; i]*?) xmlns=""([^<>]*?)>/g, '<$1 $2>' ); + + zip.file( name, str ); + } + } ); +} + +/** + * Create an XML node and add any children, attributes, etc without needing to + * be verbose in the DOM. + * + * @param {object} doc XML document + * @param {string} nodeName Node name + * @param {object} opts Options - can be `attr` (attributes), `children` + * (child nodes) and `text` (text content) + * @return {node} Created node + */ +function _createNode( doc, nodeName, opts ) { + var tempNode = doc.createElement( nodeName ); + + if ( opts ) { + if ( opts.attr ) { + $(tempNode).attr( opts.attr ); + } + + if ( opts.children ) { + $.each( opts.children, function ( key, value ) { + tempNode.appendChild( value ); + } ); + } + + if ( opts.text !== null && opts.text !== undefined ) { + tempNode.appendChild( doc.createTextNode( opts.text ) ); + } + } + + return tempNode; +} + +/** + * Get the width for an Excel column based on the contents of that column + * @param {object} data Data for export + * @param {int} col Column index + * @return {int} Column width + */ +function _excelColWidth( data, col ) { + var max = data.header[col].length; + var len, lineSplit, str; + + if ( data.footer && data.footer[col].length > max ) { + max = data.footer[col].length; + } + + for ( var i=0, ien=data.body.length ; i max ) { + max = len; + } + + // Max width rather than having potentially massive column widths + if ( max > 40 ) { + return 52; // 40 * 1.3 + } + } + + max *= 1.3; + + // And a min width + return max > 6 ? max : 6; +} + +// Excel - Pre-defined strings to build a basic XLSX file +var excelStrings = { + "_rels/.rels": + ''+ + ''+ + ''+ + '', + + "xl/_rels/workbook.xml.rels": + ''+ + ''+ + ''+ + ''+ + '', + + "[Content_Types].xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '', + + "xl/workbook.xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '', + + "xl/worksheets/sheet1.xml": + ''+ + ''+ + ''+ + ''+ + '', + + "xl/styles.xml": + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ // Excel appears to use this as a dotted background regardless of values but + ''+ // to be valid to the schema, use a patternFill + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + ''+ + '' +}; +// Note we could use 3 `for` loops for the styles, but when gzipped there is +// virtually no difference in size, since the above can be easily compressed + +// Pattern matching for special number formats. Perhaps this should be exposed +// via an API in future? +// Ref: section 3.8.30 - built in formatters in open spreadsheet +// https://www.ecma-international.org/news/TC45_current_work/Office%20Open%20XML%20Part%204%20-%20Markup%20Language%20Reference.pdf +var _excelSpecials = [ + { match: /^\-?\d+\.\d%$/, style: 60, fmt: function (d) { return d/100; } }, // Precent with d.p. + { match: /^\-?\d+\.?\d*%$/, style: 56, fmt: function (d) { return d/100; } }, // Percent + { match: /^\-?\$[\d,]+.?\d*$/, style: 57 }, // Dollars + { match: /^\-?£[\d,]+.?\d*$/, style: 58 }, // Pounds + { match: /^\-?€[\d,]+.?\d*$/, style: 59 }, // Euros + { match: /^\-?\d+$/, style: 65 }, // Numbers without thousand separators + { match: /^\-?\d+\.\d{2}$/, style: 66 }, // Numbers 2 d.p. without thousands separators + { match: /^\([\d,]+\)$/, style: 61, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets + { match: /^\([\d,]+\.\d{2}\)$/, style: 62, fmt: function (d) { return -1 * d.replace(/[\(\)]/g, ''); } }, // Negative numbers indicated by brackets - 2d.p. + { match: /^\-?[\d,]+$/, style: 63 }, // Numbers with thousand separators + { match: /^\-?[\d,]+\.\d{2}$/, style: 64 } // Numbers with 2 d.p. and thousands separators +]; + + + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * + * Buttons + */ + +// +// Copy to clipboard +// +DataTable.ext.buttons.copyHtml5 = { + className: 'buttons-copy buttons-html5', + + text: function ( dt ) { + return dt.i18n( 'buttons.copy', 'Copy' ); + }, + + action: function ( e, dt, button, config ) { + this.processing( true ); + + var that = this; + var exportData = _exportData( dt, config ); + var info = dt.buttons.exportInfo( config ); + var newline = _newLine(config); + var output = exportData.str; + var hiddenDiv = $('
') + .css( { + height: 1, + width: 1, + overflow: 'hidden', + position: 'fixed', + top: 0, + left: 0 + } ); + + if ( info.title ) { + output = info.title + newline + newline + output; + } + + if ( info.messageTop ) { + output = info.messageTop + newline + newline + output; + } + + if ( info.messageBottom ) { + output = output + newline + newline + info.messageBottom; + } + + if ( config.customize ) { + output = config.customize( output, config, dt ); + } + + var textarea = $('",h.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var be=r.documentElement,we=/^key/,Te=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ce=/^([^.]*)(?:\.(.+)|)/;function Ee(){return!0}function ke(){return!1}function Se(){try{return r.activeElement}catch(e){}}function De(e,t,n,r,i,o){var a,s;if("object"==typeof t){"string"!=typeof n&&(r=r||n,n=void 0);for(s in t)De(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=ke;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return w().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=w.guid++)),e.each(function(){w.event.add(this,t,i,r,n)})}w.event={global:{},add:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.get(e);if(y){n.handler&&(n=(o=n).handler,i=o.selector),i&&w.find.matchesSelector(be,i),n.guid||(n.guid=w.guid++),(u=y.events)||(u=y.events={}),(a=y.handle)||(a=y.handle=function(t){return"undefined"!=typeof w&&w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(M)||[""]).length;while(l--)d=g=(s=Ce.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=w.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=w.event.special[d]||{},c=w.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&w.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,r,h,a)||e.addEventListener&&e.addEventListener(d,a)),f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),w.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=J.hasData(e)&&J.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(M)||[""]).length;while(l--)if(s=Ce.exec(t[l])||[],d=g=s[1],h=(s[2]||"").split(".").sort(),d){f=w.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||w.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)w.event.remove(e,d+t[l],n,r,!0);w.isEmptyObject(u)&&J.remove(e,"handle events")}},dispatch:function(e){var t=w.event.fix(e),n,r,i,o,a,s,u=new Array(arguments.length),l=(J.get(this,"events")||{})[t.type]||[],c=w.event.special[t.type]||{};for(u[0]=t,n=1;n=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u\x20\t\r\n\f]*)[^>]*)\/>/gi,Ae=/\s*$/g;function Le(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")?w(e).children("tbody")[0]||e:e}function He(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Oe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Pe(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(J.hasData(e)&&(o=J.access(e),a=J.set(t,o),l=o.events)){delete a.handle,a.events={};for(i in l)for(n=0,r=l[i].length;n1&&"string"==typeof y&&!h.checkClone&&je.test(y))return e.each(function(i){var o=e.eq(i);v&&(t[0]=y.call(this,i,o.html())),Re(o,t,n,r)});if(p&&(i=xe(t,e[0].ownerDocument,!1,e,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(u=(s=w.map(ye(i,"script"),He)).length;f")},clone:function(e,t,n){var r,i,o,a,s=e.cloneNode(!0),u=w.contains(e.ownerDocument,e);if(!(h.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||w.isXMLDoc(e)))for(a=ye(s),r=0,i=(o=ye(e)).length;r0&&ve(a,!u&&ye(e,"script")),s},cleanData:function(e){for(var t,n,r,i=w.event.special,o=0;void 0!==(n=e[o]);o++)if(Y(n)){if(t=n[J.expando]){if(t.events)for(r in t.events)i[r]?w.event.remove(n,r):w.removeEvent(n,r,t.handle);n[J.expando]=void 0}n[K.expando]&&(n[K.expando]=void 0)}}}),w.fn.extend({detach:function(e){return Ie(this,e,!0)},remove:function(e){return Ie(this,e)},text:function(e){return z(this,function(e){return void 0===e?w.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Re(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Le(this,e).appendChild(e)})},prepend:function(){return Re(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Le(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Re(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return w.clone(this,e,t)})},html:function(e){return z(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))),u}function et(e,t,n){var r=$e(e),i=Fe(e,t,r),o="border-box"===w.css(e,"boxSizing",!1,r),a=o;if(We.test(i)){if(!n)return i;i="auto"}return a=a&&(h.boxSizingReliable()||i===e.style[t]),("auto"===i||!parseFloat(i)&&"inline"===w.css(e,"display",!1,r))&&(i=e["offset"+t[0].toUpperCase()+t.slice(1)],a=!0),(i=parseFloat(i)||0)+Ze(e,t,n||(o?"border":"content"),a,r,i)+"px"}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Fe(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=G(t),u=Xe.test(t),l=e.style;if(u||(t=Je(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"==(o=typeof n)&&(i=ie.exec(n))&&i[1]&&(n=ue(e,t,i),o="number"),null!=n&&n===n&&("number"===o&&(n+=i&&i[3]||(w.cssNumber[s]?"":"px")),h.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=G(t);return Xe.test(t)||(t=Je(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Fe(e,t,r)),"normal"===i&&t in Ve&&(i=Ve[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),w.each(["height","width"],function(e,t){w.cssHooks[t]={get:function(e,n,r){if(n)return!ze.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?et(e,t,r):se(e,Ue,function(){return et(e,t,r)})},set:function(e,n,r){var i,o=$e(e),a="border-box"===w.css(e,"boxSizing",!1,o),s=r&&Ze(e,t,r,a,o);return a&&h.scrollboxSize()===o.position&&(s-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Ze(e,t,"border",!1,o)-.5)),s&&(i=ie.exec(n))&&"px"!==(i[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ke(e,n,s)}}}),w.cssHooks.marginLeft=_e(h.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Fe(e,"marginLeft"))||e.getBoundingClientRect().left-se(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),w.each({margin:"",padding:"",border:"Width"},function(e,t){w.cssHooks[e+t]={expand:function(n){for(var r=0,i={},o="string"==typeof n?n.split(" "):[n];r<4;r++)i[e+oe[r]+t]=o[r]||o[r-2]||o[0];return i}},"margin"!==e&&(w.cssHooks[e+t].set=Ke)}),w.fn.extend({css:function(e,t){return z(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=$e(e),i=t.length;a1)}});function tt(e,t,n,r,i){return new tt.prototype.init(e,t,n,r,i)}w.Tween=tt,tt.prototype={constructor:tt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=tt.propHooks[this.prop];return e&&e.get?e.get(this):tt.propHooks._default.get(this)},run:function(e){var t,n=tt.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):tt.propHooks._default.set(this),this}},tt.prototype.init.prototype=tt.prototype,tt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||null==e.elem.style[w.cssProps[e.prop]]&&!w.cssHooks[e.prop]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},tt.propHooks.scrollTop=tt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},w.fx=tt.prototype.init,w.fx.step={};var nt,rt,it=/^(?:toggle|show|hide)$/,ot=/queueHooks$/;function at(){rt&&(!1===r.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(at):e.setTimeout(at,w.fx.interval),w.fx.tick())}function st(){return e.setTimeout(function(){nt=void 0}),nt=Date.now()}function ut(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=oe[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function lt(e,t,n){for(var r,i=(pt.tweeners[t]||[]).concat(pt.tweeners["*"]),o=0,a=i.length;o1)},removeAttr:function(e){return this.each(function(){w.removeAttr(this,e)})}}),w.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(i=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?dt:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=w.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!h.radioValue&&"radio"===t&&N(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(M);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),dt={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),function(e,t){var n=ht[t]||w.find.attr;ht[t]=function(e,t,r){var i,o,a=t.toLowerCase();return r||(o=ht[a],ht[a]=i,i=null!=n(e,t,r)?a:null,ht[a]=o),i}});var gt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;w.fn.extend({prop:function(e,t){return z(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[w.propFix[e]||e]})}}),w.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,i=w.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):gt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),h.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){w.propFix[this.toLowerCase()]=this});function vt(e){return(e.match(M)||[]).join(" ")}function mt(e){return e.getAttribute&&e.getAttribute("class")||""}function xt(e){return Array.isArray(e)?e:"string"==typeof e?e.match(M)||[]:[]}w.fn.extend({addClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).addClass(e.call(this,t,mt(this)))});if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,r,i,o,a,s,u=0;if(g(e))return this.each(function(t){w(this).removeClass(e.call(this,t,mt(this)))});if(!arguments.length)return this.attr("class","");if((t=xt(e)).length)while(n=this[u++])if(i=mt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=t[a++])while(r.indexOf(" "+o+" ")>-1)r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=typeof e,r="string"===n||Array.isArray(e);return"boolean"==typeof t&&r?t?this.addClass(e):this.removeClass(e):g(e)?this.each(function(n){w(this).toggleClass(e.call(this,n,mt(this),t),t)}):this.each(function(){var t,i,o,a;if(r){i=0,o=w(this),a=xt(e);while(t=a[i++])o.hasClass(t)?o.removeClass(t):o.addClass(t)}else void 0!==e&&"boolean"!==n||((t=mt(this))&&J.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":J.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&(" "+vt(mt(n))+" ").indexOf(t)>-1)return!0;return!1}});var bt=/\r/g;w.fn.extend({val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=g(e),this.each(function(n){var i;1===this.nodeType&&(null==(i=r?e.call(this,n,w(this).val()):e)?i="":"number"==typeof i?i+="":Array.isArray(i)&&(i=w.map(i,function(e){return null==e?"":e+""})),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,i,"value")||(this.value=i))});if(i)return(t=w.valHooks[i.type]||w.valHooks[i.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(i,"value"))?n:"string"==typeof(n=i.value)?n.replace(bt,""):null==n?"":n}}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:vt(w.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},h.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),h.focusin="onfocusin"in e;var wt=/^(?:focusinfocus|focusoutblur)$/,Tt=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,o){var a,s,u,l,c,p,d,h,v=[i||r],m=f.call(t,"type")?t.type:t,x=f.call(t,"namespace")?t.namespace.split("."):[];if(s=h=u=i=i||r,3!==i.nodeType&&8!==i.nodeType&&!wt.test(m+w.event.triggered)&&(m.indexOf(".")>-1&&(m=(x=m.split(".")).shift(),x.sort()),c=m.indexOf(":")<0&&"on"+m,t=t[w.expando]?t:new w.Event(m,"object"==typeof t&&t),t.isTrigger=o?2:3,t.namespace=x.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+x.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[m]||{},o||!d.trigger||!1!==d.trigger.apply(i,n))){if(!o&&!d.noBubble&&!y(i)){for(l=d.delegateType||m,wt.test(l+m)||(s=s.parentNode);s;s=s.parentNode)v.push(s),u=s;u===(i.ownerDocument||r)&&v.push(u.defaultView||u.parentWindow||e)}a=0;while((s=v[a++])&&!t.isPropagationStopped())h=s,t.type=a>1?l:d.bindType||m,(p=(J.get(s,"events")||{})[t.type]&&J.get(s,"handle"))&&p.apply(s,n),(p=c&&s[c])&&p.apply&&Y(s)&&(t.result=p.apply(s,n),!1===t.result&&t.preventDefault());return t.type=m,o||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!Y(i)||c&&g(i[m])&&!y(i)&&((u=i[c])&&(i[c]=null),w.event.triggered=m,t.isPropagationStopped()&&h.addEventListener(m,Tt),i[m](),t.isPropagationStopped()&&h.removeEventListener(m,Tt),w.event.triggered=void 0,u&&(i[c]=u)),t.result}},simulate:function(e,t,n){var r=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(r,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each(function(){w.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),h.focusin||w.each({focus:"focusin",blur:"focusout"},function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var r=this.ownerDocument||this,i=J.access(r,t);i||r.addEventListener(e,n,!0),J.access(r,t,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=J.access(r,t)-1;i?J.access(r,t,i):(r.removeEventListener(e,n,!0),J.remove(r,t))}}});var Ct=e.location,Et=Date.now(),kt=/\?/;w.parseXML=function(t){var n;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){n=void 0}return n&&!n.getElementsByTagName("parsererror").length||w.error("Invalid XML: "+t),n};var St=/\[\]$/,Dt=/\r?\n/g,Nt=/^(?:submit|button|image|reset|file)$/i,At=/^(?:input|select|textarea|keygen)/i;function jt(e,t,n,r){var i;if(Array.isArray(t))w.each(t,function(t,i){n||St.test(e)?r(e,i):jt(e+"["+("object"==typeof i&&null!=i?t:"")+"]",i,n,r)});else if(n||"object"!==x(t))r(e,t);else for(i in t)jt(e+"["+i+"]",t[i],n,r)}w.param=function(e,t){var n,r=[],i=function(e,t){var n=g(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&At.test(this.nodeName)&&!Nt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,function(e){return{name:t.name,value:e.replace(Dt,"\r\n")}}):{name:t.name,value:n.replace(Dt,"\r\n")}}).get()}});var qt=/%20/g,Lt=/#.*$/,Ht=/([?&])_=[^&]*/,Ot=/^(.*?):[ \t]*([^\r\n]*)$/gm,Pt=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Mt=/^(?:GET|HEAD)$/,Rt=/^\/\//,It={},Wt={},$t="*/".concat("*"),Bt=r.createElement("a");Bt.href=Ct.href;function Ft(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var r,i=0,o=t.toLowerCase().match(M)||[];if(g(n))while(r=o[i++])"+"===r[0]?(r=r.slice(1)||"*",(e[r]=e[r]||[]).unshift(n)):(e[r]=e[r]||[]).push(n)}}function _t(e,t,n,r){var i={},o=e===Wt;function a(s){var u;return i[s]=!0,w.each(e[s]||[],function(e,s){var l=s(t,n,r);return"string"!=typeof l||o||i[l]?o?!(u=l):void 0:(t.dataTypes.unshift(l),a(l),!1)}),u}return a(t.dataTypes[0])||!i["*"]&&a("*")}function zt(e,t){var n,r,i=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&w.extend(!0,e,r),e}function Xt(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function Ut(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Ct.href,type:"GET",isLocal:Pt.test(Ct.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":$t,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,w.ajaxSettings),t):zt(w.ajaxSettings,e)},ajaxPrefilter:Ft(It),ajaxTransport:Ft(Wt),ajax:function(t,n){"object"==typeof t&&(n=t,t=void 0),n=n||{};var i,o,a,s,u,l,c,f,p,d,h=w.ajaxSetup({},n),g=h.context||h,y=h.context&&(g.nodeType||g.jquery)?w(g):w.event,v=w.Deferred(),m=w.Callbacks("once memory"),x=h.statusCode||{},b={},T={},C="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(c){if(!s){s={};while(t=Ot.exec(a))s[t[1].toLowerCase()]=t[2]}t=s[e.toLowerCase()]}return null==t?null:t},getAllResponseHeaders:function(){return c?a:null},setRequestHeader:function(e,t){return null==c&&(e=T[e.toLowerCase()]=T[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==c&&(h.mimeType=e),this},statusCode:function(e){var t;if(e)if(c)E.always(e[E.status]);else for(t in e)x[t]=[x[t],e[t]];return this},abort:function(e){var t=e||C;return i&&i.abort(t),k(0,t),this}};if(v.promise(E),h.url=((t||h.url||Ct.href)+"").replace(Rt,Ct.protocol+"//"),h.type=n.method||n.type||h.method||h.type,h.dataTypes=(h.dataType||"*").toLowerCase().match(M)||[""],null==h.crossDomain){l=r.createElement("a");try{l.href=h.url,l.href=l.href,h.crossDomain=Bt.protocol+"//"+Bt.host!=l.protocol+"//"+l.host}catch(e){h.crossDomain=!0}}if(h.data&&h.processData&&"string"!=typeof h.data&&(h.data=w.param(h.data,h.traditional)),_t(It,h,n,E),c)return E;(f=w.event&&h.global)&&0==w.active++&&w.event.trigger("ajaxStart"),h.type=h.type.toUpperCase(),h.hasContent=!Mt.test(h.type),o=h.url.replace(Lt,""),h.hasContent?h.data&&h.processData&&0===(h.contentType||"").indexOf("application/x-www-form-urlencoded")&&(h.data=h.data.replace(qt,"+")):(d=h.url.slice(o.length),h.data&&(h.processData||"string"==typeof h.data)&&(o+=(kt.test(o)?"&":"?")+h.data,delete h.data),!1===h.cache&&(o=o.replace(Ht,"$1"),d=(kt.test(o)?"&":"?")+"_="+Et+++d),h.url=o+d),h.ifModified&&(w.lastModified[o]&&E.setRequestHeader("If-Modified-Since",w.lastModified[o]),w.etag[o]&&E.setRequestHeader("If-None-Match",w.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||n.contentType)&&E.setRequestHeader("Content-Type",h.contentType),E.setRequestHeader("Accept",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+("*"!==h.dataTypes[0]?", "+$t+"; q=0.01":""):h.accepts["*"]);for(p in h.headers)E.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(g,E,h)||c))return E.abort();if(C="abort",m.add(h.complete),E.done(h.success),E.fail(h.error),i=_t(Wt,h,n,E)){if(E.readyState=1,f&&y.trigger("ajaxSend",[E,h]),c)return E;h.async&&h.timeout>0&&(u=e.setTimeout(function(){E.abort("timeout")},h.timeout));try{c=!1,i.send(b,k)}catch(e){if(c)throw e;k(-1,e)}}else k(-1,"No Transport");function k(t,n,r,s){var l,p,d,b,T,C=n;c||(c=!0,u&&e.clearTimeout(u),i=void 0,a=s||"",E.readyState=t>0?4:0,l=t>=200&&t<300||304===t,r&&(b=Xt(h,E,r)),b=Ut(h,b,E,l),l?(h.ifModified&&((T=E.getResponseHeader("Last-Modified"))&&(w.lastModified[o]=T),(T=E.getResponseHeader("etag"))&&(w.etag[o]=T)),204===t||"HEAD"===h.type?C="nocontent":304===t?C="notmodified":(C=b.state,p=b.data,l=!(d=b.error))):(d=C,!t&&C||(C="error",t<0&&(t=0))),E.status=t,E.statusText=(n||C)+"",l?v.resolveWith(g,[p,C,E]):v.rejectWith(g,[E,C,d]),E.statusCode(x),x=void 0,f&&y.trigger(l?"ajaxSuccess":"ajaxError",[E,h,l?p:d]),m.fireWith(g,[E,C]),f&&(y.trigger("ajaxComplete",[E,h]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],function(e,t){w[t]=function(e,n,r,i){return g(n)&&(i=i||r,r=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:i,data:n,success:r},w.isPlainObject(e)&&e))}}),w._evalUrl=function(e){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(g(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(e){return g(e)?this.each(function(t){w(this).wrapInner(e.call(this,t))}):this.each(function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=g(e);return this.each(function(n){w(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(e){return this.parent(e).not("body").each(function(){w(this).replaceWith(this.childNodes)}),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Vt={0:200,1223:204},Gt=w.ajaxSettings.xhr();h.cors=!!Gt&&"withCredentials"in Gt,h.ajax=Gt=!!Gt,w.ajaxTransport(function(t){var n,r;if(h.cors||Gt&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i["X-Requested-With"]||(i["X-Requested-With"]="XMLHttpRequest");for(a in i)s.setRequestHeader(a,i[a]);n=function(e){return function(){n&&(n=r=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Vt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),r=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout(function(){n&&r()})},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}}),w.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),w.ajaxTransport("script",function(e){if(e.crossDomain){var t,n;return{send:function(i,o){t=w(" \ No newline at end of file diff --git a/view/modelo_Estaciones.html b/view/modelo_Estaciones.html new file mode 100644 index 0000000..751f8d1 --- /dev/null +++ b/view/modelo_Estaciones.html @@ -0,0 +1,158 @@ +
+
+
+
+
¿Ques es una EMA?
+
+ imagen-servidor + + Una EMA, es una Estacion Meteorológica Automatica. +
+
+
+ Una Estacion Meteorológica: es una instalación destinada a medir y registrar regularmente las + diferentes variables meteorológicas, para esto se utilizan instrumentos adecuados para medir y + registrar las mismas. + Cada estación, cuenta con distintos instrumentos de medición o sensores, algunos de estos + instrumentos se detallan a continuación:

+
    +
  • Anemómetro: es un instrumento de medición de + la velocidad del viento.
  • +
  • Veleta: es un instrumento de medición de la + dirección del viento.
  • +
  • Heliógrafo: es un instrumento de medición de + la insolación recibida en la superficie terrestre.
  • +
  • Higrómetro: es un instrumento de medición de + humedad del aire.
  • +
  • Barómetro: es un instrumento de medición de + la presión atmosférica.
  • +
  • Piranómetro: es un instrumento de medición de + la radiación solar.
  • +
  • Pluviómetro: es un instrumento de medición de + la precipitación o cantidad de agua caída.
  • +
  • Termómetro: es un instrumento de medición de + la temperatura.
  • +
  • Luxómetro: es un instrumento de medición de + iluminancia real de un ambiente.
  • +
+ +
+ Es Automática: : por que mide y registra automáticamente utilizando un software denominado + datalogger, el cual envía los datos a un servidor de forma automática, en nuestro caso este software + se denomina "EMA Libre Carpincho". +

+ Las estaciones meteorológicas se distribuyen a lo largo de una región para formar una red, + ubicándolas en lugares estratégicos desde el punto de vista de la toma de datos según el objetivo + final para el que la red en concreto esté diseñada.
+ Los datos meteorológicos se envía junto al resto de la información (ej: ubicación GPS) a un servidor + centralizado, en nuestro caso este software central se denomina "Capibara". +
+
+
+
+
+
+
+
+
¿Que es una Red de EMA Libre? +
+
+
+
+ + Disponer de una información meteorológica precisa resulta de gran importancia, no sólo para + el estudio del cambio + climático sino para todo tipo de aplicaciones actuales, que van desde el cálculo de + necesidades hídricas de los + cultivos, la planificación y gestión de los recursos hídricos, las energías renovables, la + calidad del aire o la + seguridad vial.

+ Es por eso, que cada vez más redes meteorológicas están ayudando a grandes y + pequeñas empresas / instituciones a tomar decisiones más rentables, evitar pérdidas y + reducir riesgos en su día a día.

+ Para poder obtener esta información meteorológica es necesario contar con sistema que + permita automatizar tanto el almacenamiento, como el envio de los datos meteorológicos de + cada estacion meteorologicas, + para poder procesarlos y visualizarlos para cada tipo de necesidad.
+
+
+
+ imagen-circuito-Red-Estaciones +
+
+
+ +
+
+ + El proyecto Ema Libre brinda la posibilidad de contar con una Red Meteorológica + Automática Abierta y Libre:

+
    +
  • Red: porque permite que un conjunto + de EMA (Estaciones Meteorológica Automáticas), estén distribuidas geográficamente. +
  • +
  • Meteorológica: porque envía, + almacenar y visualiza información meteorológica.
  • +
  • Abierta: porque recibe de cualquier + estación que quiera enviarle información utilizando nuestra API.
  • +
  • Libre: porque utiliza software Libre. +
  • +
+
+ Es importante aclarar, que también utilizando EMA Libre, podría realizar una Red + Meteorológica Automática Cerrada y Libre, siendo la diferencia que al ser una "Red + Cerrada", + solo aceptaría información meteorológica de las estaciones que usted previamente permite, + indistintamente la visualización de los datos. + Esto último, no nos molesta, porque de todas formas estaría utilizando Software Libre que es + lo que no interesa. + +
+
+
+
+
+
+
+
+
+
+
Quiero formar parte de la + Red EMA Libre
+
+ + Si tenes una estación meteorológica y queres enviarnos información meteorológica, lo primero que + tenes que haceer registrarte en:

+
+
+ Una vez que te diste de alta, aparte de obtener usuario y contraseña, tendras dos llaves o + key:

+
    +
  • Llave de Lectura: esta llave te permite leer + los registros a traves de la API publica.
  • +
  • Llave de Escritura: esta llave te permite + enviar registros a EMA Libre Center.
  • +
+
+ Luego, necesitas configurar un cliente para enviar los datos, nosotros recomendamos utilizar el + desarrollado por este proyecto EMA Libre Carpincho (se puede descargar desde el menu), pero + tambien + podes utilizar el de un tercero o desarrollarlo ya que la API es publica. +

+ Particulamente en EMA Libre capincho, podes dar de alta red, desde el menu Redes, y luego Alta, + seleccionas EMA Center Gugler y finalmente te solicitara la + llave de escritura. +

+ El objetivo de utilizar la llaves, es que es mas seguro, si por alguna razon se expuso tu llave, + solamente las regeneras desde el sistema EMA Center, + utilizando tu usuario y contraseña, este usuario y contraseña nunca lo utilizarias en ningun cliente + por lo que no se exponen. + +
+
+ +
\ No newline at end of file diff --git a/view/modelo_Inicio.html b/view/modelo_Inicio.html new file mode 100644 index 0000000..5455a23 --- /dev/null +++ b/view/modelo_Inicio.html @@ -0,0 +1,567 @@ +
+
+ +
+
+
+
+ + {{ nombre }} - {{ pais }}, {{ ciudad }} + +
Fuera de línea
+
+ +
En línea
+
+
+
+ +
+
+
+
+
+
+ Último Registro: {{ fecha_ultimo_registro }} +
+ Software: {{ software }}
+
+
+ Longitud: {{ longitud }}
+ Latitud : {{ latitud }}
+
+
+ Distancia: {{ distancia }} Km
+ Altura: {{ altura }} m
+
+
+
+
+
+ + Actualizado: {{ uptime }} +
+
+ + Actualizado: {{ uptime }} +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+
+
+
+
+
+ °C +
Temperatura Externa
+ +
+
+
+ + {{ observaciones[0].temperatura_externa }} °C +
+
+
+ + {{ getMax(estadisticas, "temperatura_externa_max") }} °C +
+
+ + {{ getMin(estadisticas, "temperatura_externa_min") }} °C +
+
+
+
+

+
+ % +
Humedad Externa
+ +
+
+
+ + {{ observaciones[0].humedad_externa }} % +
+
+
+ + {{getMax(estadisticas, "humedad_externa_max")}} % +
+
+ + {{getMin(estadisticas, "humedad_externa_min")}} % +
+
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ Grados +
Direccion del Viento
+ +
+
+ +
+
+ Vientos del {{ observaciones[0].viento_direccion_nombre }} + +
+
+
+
+ + {{ observaciones[0].viento_direccion_nombre }} + +
+
+ + {{ observaciones[0].viento_direccion }}° + +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ Km/h +
Viento Velocidad
+ +
+
+ +
+
+ + Vientos sostenidos a {{ observaciones[0].viento_velocidad }} Km/h + +
+
+
+
+ + {{ getMax(estadisticas, "viento_velocidad_max")}} Km/h +
+
+ + {{ getMin(estadisticas, "viento_velocidad_max") }} Km/h +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+
+
+ Hpa +
Presion Atmosférica
+ +
+
+ +
+ Presión atmosferica de {{ observaciones[0].presion_absoluta }} Hpa + +
+
+
+
+ + {{ getMax(estadisticas, "presion_absoluta_max") }} Hpa +
+
+ + {{ getMin(estadisticas, "presion_absoluta_max") }} Hpa +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ Indice UV +
Rayos Ultravioletas
+ +
+
+ +
+ Rayos Ultravioletas de {{ observaciones[0].luxer_uv }} UV + +
+
+
+
+ + {{ getMax(estadisticas, "luxer_uv_max") }} + UV +
+
+ + {{ getMin(estadisticas, "luxer_uv_min") }} + UV +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ Klux +
Iluminacia del Sol
+ +
+
+ +
+ La iluminacia actual es de + {{ observaciones[0].luxer_intencidad }} lux +
+
+
+
+ + {{ getMax(estadisticas, "luxer_intencidad_max") }} Lux +
+
+ + {{ getMin(estadisticas, "luxer_intencidad_min") }} Lux +
+
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ + + + +
+
+
+
+ mm +
Lluva Hora
+
+
+ {{ observaciones[0].lluvia_acumulado_hora }} + +
+
Lluvia Hora + +
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ mm +
Lluvia Dia
+
+
+ {{ observaciones[0].lluvia_acumulado_diario }} + +
+
Lluvia Dia + +
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ mm +
Lluvia Semanal
+
+
+ {{ observaciones[0].lluvia_acumulado_semanal }} + +
+
Lluvia Semanal + +
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ mm +
Lluvia Mensual
+
+
+ {{ observaciones[0].lluvia_acumulado_mensual }} + +
+
Lluvia Mensual + +
+
+
+
+
+ +
+
Cargando datos...
+
+
+
+ + + +
+ +
+
+
+
+
Gráfico interactivo - últimas 24 horas
+
+
+ +
+
+
+ +
+
Cargando Gráfico...
+
+
+
+
+
+ + + +
+ +
+
+
+
+
Observaciones Meteorológicas
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Fecha_Registro___TemperaturaHumedadVelocidad VientoViento RafagasDirección VientoDireccion NombrePresion absolutaPresion relativaPunto RocíoRayos UVLuxer intencidadLLuvia horaLLuvia diarioLLuvia semanalLLuvia mensualLLuvia anualSoftware
{{ index }} + {{ moment(dato.fecha).format("DD/MM/YYYY H:mm:ss") }} + {{ dato.temperatura_externa}}º{{ dato.humedad_externa }}%{{ dato.viento_velocidad }}{{ dato.viento_rafagas }}{{ dato.viento_direccion }}{{ dato.viento_direccion_nombre }}{{ dato.presion_absoluta }}{{ dato.presion_relativa }}{{ dato.punto_de_rocio }}{{ dato.luxer_uv }}{{ dato.luxer_intencidad }}{{ dato.lluvia_acumulado_hora }}{{ dato.lluvia_acumulado_diario }}{{ dato.lluvia_acumulado_semanal }}{{ dato.lluvia_acumulado_mensual }}{{ dato.lluvia_acumulado_anual }}{{ dato.software }}
+
+
+
+ +
+
Cargando datos...
+
+
+
+
+
+ +
+
+
+
+
+ Conectando al servidor EmaCenter... +
+
+ +
+
+
\ No newline at end of file diff --git a/view/modelo_Pronostico.html b/view/modelo_Pronostico.html new file mode 100644 index 0000000..5a2eda8 --- /dev/null +++ b/view/modelo_Pronostico.html @@ -0,0 +1,149 @@ +
+
+
+
+
+
+ Pronóstico +
+ +
+ Lamentablemente, tenemos que informarte que el laboratorio Investigación Gugler no realiza predicciones meteorológicas, pero no descartamos esta posibilidad en un futuro. +
+
+ Por otro lado, lo que si estamos realizamos con nuestras estaciones meteorológicas, es publicar los registros obtenidos en otras redes meteorológicas aparte de la nuestra, como por ejemplo Weather Underground, PWS, WinWuru, utilizando sus propias API. +
+
+ Cada una de ellas si realiza predicciones, a continuación dejamos el acceso y la información de cada una de ellas:
+
+
+
+
+
+
+
+
+
+
+
+ Wunderground Logo +
WU
Weather Underground
+
+
+
+
+
+
+ WU es un servicio de información meteorológica. Su información proviene del NWS y de más de 250,000 estaciones meteorológicas personales. +
+
+
Estaciones del Laboratorio
+
+ +
+ Wunderground Logo +
Gugler FCyT
Oro Verde, Entre Rios, Argentina
+
+
+
+ +
+ Wunderground Logo +
Aramburu Centro
Parana, Entre Rios, Argentina
+
+
+
+ +
+ Wunderground Logo +
Sbarbaro Centro
Parana, Entre Rios, Argentina
+
+
+
+
+
+ +
+
+
+ WindGuru Logo +
WG
WindGuru
+
+
+
+
+
+
WindGURU es un servicio especilizado en previsiones del tiempo para windsurfistas y kitesurfistas, pero no sólo para ellos, está basado en el modelo numérico GFS. +
+
+
Estaciones del Laboratorio
+
+ +
+ WindGuru Logo +
Gugler FCyT
Oro Verde, Entre Rios, Argentina
+
+
+
+ +
+ WindGuru Logo +
Aramburu Centro
Parana, Entre Rios, Argentina
+
+
+
+ +
+ WindGuru Logo +
Sbarbaro Centro
Parana, Entre Rios, Argentina
+
+
+
+
+
+ + + +
+
+
+ PWS Logo +
PWS
Personal Weather Station
+
+
+
+
+
+
PWSweather reune datos de estaciones meteorológicas personales de todo el mundo, y los pone a disposición para otros fines. +
+
+
Estaciones del Laboratorio
+
+ +
+ PWS  Logo +
Gugler FCyT
Oro Verde, Entre Rios, Argentina
+
+
+
+ +
+ PWS Logo +
Aramburu Centro
Parana, Entre Rios, Argentina
+
+
+
+ +
+ PWS  Logo +
Sbarbaro Centro
Parana, Entre Rios, Argentina
+
+
+
+
+
+ +
+
+
+
\ No newline at end of file diff --git a/webfonts/fa-solid-900.woff2 b/webfonts/fa-solid-900.woff2 new file mode 100644 index 0000000..f0b9b0c Binary files /dev/null and b/webfonts/fa-solid-900.woff2 differ