From 7f0ae07007e2f5a4a6b4becce47bee50f7315a4e Mon Sep 17 00:00:00 2001 From: Mathias Markl Date: Fri, 21 Jul 2017 14:14:26 +0200 Subject: [PATCH] muk_web_preview_vector --- muk_web_preview_vector/LICENSE | 619 ++++++ muk_web_preview_vector/README.md | 6 + muk_web_preview_vector/__init__.py | 20 + muk_web_preview_vector/__manifest__.py | 59 + .../static/description/banner.png | Bin 0 -> 43691 bytes .../static/description/icon.png | Bin 0 -> 10984 bytes .../static/description/index.html | 40 + .../static/description/logo.png | Bin 0 -> 38064 bytes .../static/description/screenshot.png | Bin 0 -> 47504 bytes .../static/lib/svg-pan-zoom/svg-pan-zoom.js | 1902 +++++++++++++++++ .../static/src/js/preview_generator.js | 73 + .../static/src/less/preview_content.less | 143 ++ .../static/src/xml/preview_content.xml | 33 + muk_web_preview_vector/template/assets.xml | 29 + 14 files changed, 2924 insertions(+) create mode 100644 muk_web_preview_vector/LICENSE create mode 100644 muk_web_preview_vector/README.md create mode 100644 muk_web_preview_vector/__init__.py create mode 100644 muk_web_preview_vector/__manifest__.py create mode 100644 muk_web_preview_vector/static/description/banner.png create mode 100644 muk_web_preview_vector/static/description/icon.png create mode 100644 muk_web_preview_vector/static/description/index.html create mode 100644 muk_web_preview_vector/static/description/logo.png create mode 100644 muk_web_preview_vector/static/description/screenshot.png create mode 100644 muk_web_preview_vector/static/lib/svg-pan-zoom/svg-pan-zoom.js create mode 100644 muk_web_preview_vector/static/src/js/preview_generator.js create mode 100644 muk_web_preview_vector/static/src/less/preview_content.less create mode 100644 muk_web_preview_vector/static/src/xml/preview_content.xml create mode 100644 muk_web_preview_vector/template/assets.xml diff --git a/muk_web_preview_vector/LICENSE b/muk_web_preview_vector/LICENSE new file mode 100644 index 0000000..faf7bf4 --- /dev/null +++ b/muk_web_preview_vector/LICENSE @@ -0,0 +1,619 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 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 Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are 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. + + 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. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + 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 Affero 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. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + 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 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 work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero 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 Affero 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 Affero 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 Affero 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 \ No newline at end of file diff --git a/muk_web_preview_vector/README.md b/muk_web_preview_vector/README.md new file mode 100644 index 0000000..107d688 --- /dev/null +++ b/muk_web_preview_vector/README.md @@ -0,0 +1,6 @@ +# MuK Preview Vector + +Extendes the Preview Dialog to support vector graphics. +Currently the following vector graphic extensions are supported: + +* Scalable Vector Graphics (*.svg, image/svg+xml) \ No newline at end of file diff --git a/muk_web_preview_vector/__init__.py b/muk_web_preview_vector/__init__.py new file mode 100644 index 0000000..48ccf85 --- /dev/null +++ b/muk_web_preview_vector/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2017 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### diff --git a/muk_web_preview_vector/__manifest__.py b/muk_web_preview_vector/__manifest__.py new file mode 100644 index 0000000..09481e0 --- /dev/null +++ b/muk_web_preview_vector/__manifest__.py @@ -0,0 +1,59 @@ +# -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2017 MuK IT GmbH +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero 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 Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . +# +################################################################################### + +{ + "name": "MuK Preview Vector", + "summary": """Vector Preview""", + "description": """ + Extendes the Preview Dialog to support vector graphics. + Currently the following vector graphic extensions are supported: + - Scalable Vector Graphics (*.svg, image/svg+xml) + """, + "version": "10.0.1.0.0", + "category": "Extra Tools", + "license": "AGPL-3", + "website": "http://www.mukit.at", + "author": "MuK IT", + "contributors": [ + "Mathias Markl ", + ], + "depends": [ + "muk_web_preview", + ], + "data": [ + "template/assets.xml", + ], + "demo": [ + ], + "qweb": [ + "static/src/xml/*.xml", + ], + "images": [ + 'static/description/banner.png' + ], + "external_dependencies": { + "python": [], + "bin": [], + }, + "application": False, + "installable": True, + +} \ No newline at end of file diff --git a/muk_web_preview_vector/static/description/banner.png b/muk_web_preview_vector/static/description/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff88bbe98246048c544dd635bd337f02e07fdbf GIT binary patch literal 43691 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 literal 0 HcmV?d00001 diff --git a/muk_web_preview_vector/static/description/index.html b/muk_web_preview_vector/static/description/index.html new file mode 100644 index 0000000..ee4fb29 --- /dev/null +++ b/muk_web_preview_vector/static/description/index.html @@ -0,0 +1,40 @@ +
+
+

Preview Vector

+

Preview your vector graphics directly in Odoo.

+

MuK IT GmbH - + www.mukit.at

+
+ +
+
+
+ +
+
+
+

Overview

+

Extendes the Preview Dialog to support vector + graphics. Currently the following vector graphic extensions are + supported:

+

+ Scalable Vector + Graphics (*.svg, image/svg+xml) +

+
+
+
+ +
+

Help and Support

+ + +
\ No newline at end of file diff --git a/muk_web_preview_vector/static/description/logo.png b/muk_web_preview_vector/static/description/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..9427ce33ea36c2ec961356d01d612bae02d48ce2 GIT binary patch literal 38064 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 literal 0 HcmV?d00001 diff --git a/muk_web_preview_vector/static/description/screenshot.png b/muk_web_preview_vector/static/description/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9c9be73feb20f48d7dd76b2261182c3f33b0236e GIT binary patch literal 47504 zcmdSBWmJ^W_cn|Tf`D`*As`LXHHvhnGy~Eg-K|p6BHhy6HMDeh!vNCV-OoXPzx952 z-?iRn{nzv5nGY_!XXf1J-e;e^uYK+7jK7?W=!@qB&k+z1UWkhcDIg#`nngf(NQ(Fn zTv@!LnMOc(g&;2UUdbt8d)8SK%P|RZE353N2!EyW$cDzR{0m|#P4(0@S@WK669k_S>Qfe@L59$^Z?(N1t)8CIW zqhbkLr^KNxHpj@wMg#%=ZiQCIEsbZ4d& zr%$wd<=^)|x{X+-oNo>Ll&#q@8tgT$I*}OuSh*8Y)n8G z966R_T>HR%+4J{lGQSl2x=q4l|N9yIh6Xp|B%wfr|Gtk9-Ev`qX|jOgugMl&<8wa{ z!U*X+Lw|}-N&-|8@$Ut=1Xi=j(8vD{@<7*lpO#Hk#8mFT?<>9ZwP_wJ*+&zbV!Xfb(*?-E%fb@%Qe7 zfL2;qSh%@qS~f+5g@uKSOC8>oZV?u-{M4&SpEb76Fm1?~HCBo$obAP%z5!PaX~eD@ z<)%VAlQ^9;#l5*$sJPg0A=-S8vcybONsXU?$eFS78dM!dH&BqZ;&FR_3%H7ltE+~( zIwBdCaBSZy((2*(_;`D}NZHhOcR2QQVNFd<9i2ZybJpLas7C($dBv%b+NJ-q$AGoD z)Z2i872m96kd6OR03rPsos;d_GlH=mQi)k~FmQ}MeUAbbdl>)v$)&HaZ%hncH9W)R zM?*tHO-)UCIU8>B{M_8!^mN>hAAc4W$lOLQFE1x2RiV&%>+;x46MX3&eOB;~0qbaq z6w^lS^XCrYvxs2+jb~p)HbuYSp`oUx=IMF& z=Z}t!4eJ?>Oa1M1h1t%|j^o~3BE+*HIeFe&9a4CCSbAN@Zz|a7>-fBMz*ZTv^&?l) ziLnjg+?&bB_Qq9NXIE6zc`k`IpMt0_*$(c)J{}30L{|UtW z{Nk1Va)8grlX#{Tjg~)y{aUZMY7&s)C1?=0rjB#esTThCCx?EGeTo?5*LXgAW}Y!Z znsy8Oio_dY1v7pEy0`8ZQTxfiX?$2vlMQFM%BxaFBwB;9-0AfvpON!D?t8|2B!Fj~ zOySP8m(Nx0cO}+gN0R9Az&DX<2=g)Zr*MaLlW!kzl3?qPuH|Puu|=;_Yh3Iq=LN_u zyk>FVjoN4^KA|=Mla@8!k)Z=tn=Ga`V~tgfS}~JRjUpx@(pURP6)v3~XYeg?7ZpFa z9jwmnt%snPq9P_4B{%n!F`G?F0{ZaO)YRbMkAwuirsi;@y7NCtDX@3nFLyZS;fd7W z-)!+M~1mF0Ppsx!q%AxzntLtgc-oqLZ1Hq)d;Qp$RFcQ84Kze%p(<_RDD_IgV(^ zE1KbR^n))2#av_<$(orE$kMmJ#i0xSbTBVPTYmwJ(MQe)17~} zSy5G$%w@f}K9q)yjeRzKc=X(doR&6#$OVJhylDKy-*vRn0ffi(5V1XH1y}w&ul|RvP4#A7WdgMs3SR z#7qRLJk73<1>liFh(pVJRe@g!=N6I<`k#VzslY^0(lnuQDj8CbQ(u8DgaxU0T8e}{S-&0r9<(r7O2O^V7scIths^@Mb1u|YXE z8bVJ)b8enwW1M{5Vc;I(5~>xqrmZZ;+`dpu;qf3p8M{$q2D98j#bUg2%Hxf%&!2_8 z=0vk5qxC~v`_?o%ex2F|2J}kBqo%K{f{5Zh3m$y-ZR1ok)&;7aTC0&aT?F0cuEp#a zAfr9JzPSni`4j88kFl$hlhdb9i~L-07FJePcJ|27Rh~o{yzaNGtlzx6sBalDxjr|D z_D%2bl(*rKiWj&`;E(xSCsy(v>cJ!h>efQ{&R$mzzUeJ;;Q!VQUxNiXc{t5=xp#cT z_;H%c9)ft~rIq61TvgEsagS!NnW_(brEsL?P`ktUemXN+*;`g-(ZWRj6q|5I%+GHl zB_5^K!G}V|MCN-D{&|R7;j@VbD8wBznzewt;<%3ePA&O2JNsGUw=m0?$y4rQGQXAG z)x|wI_?p!jd3$#k?kjU#M~28O%5-{2=wA5h-oWJCQ%=@ zV6fw~rN%0gBK1dgCk)ld)7{}JFhh-jhm9X*GNyeUKl?+>CyIXbK0wgHuo73n>uYIg z85thN^9?IjrbwYNUG0r+Htt^#be5AFOt0&C-0t2ks!{e%)sByhU?B=gj-z4VVW62s?MF_e5n z26h-^k?;(WxGe@u4@#4%>g8Y48@21@n&RzEAn=-@!9rADN2k-VFaNnHRT&u;no^O< zBHj^;3{=S#7&L~F##aysiYZty%IDFsPaA%^dZmS2p^L0S^-}t^Jd|c8GKp%pbIm~p z#4Wy){RxveJ8v3ub8M{M^gUV{t5aXM;NW6siLGe)G;=C_n!ygyQ0*56MiETE_aBD7 z47%kFV;g=e0&)Lf$vQkFERqMC?@O^9E&fVM$xj`fJ$4^_7&&E4YB7puNlLVGUtAe1 zp8>qZ%<|T#pVC{i(PQ>LmcrY};(z|4F>MdRzrDRBCMLda|MTaMKib){^s4zc7OD;T zNsEeF34DXC%Zf~8WjlxR04w*el^*l*>YYAA;>*SKuIIHd7Z$yp57-Wpp$e^wK?N^# zH4Pe8mtQBchqtXQw_*x@zZ8r$zhm@O*WJ6KA--q{S}W}C{OoAyyJO$F&1=ytmvq%H z7u!9GcZ+RfW2al)i0x>ZcecEOwE4#;gI*8D51;`vDo)_ac!5R*2dCv63KEjIv~+M# zPy(l=wxy+I!8=*m(9s=Yk)jD`qlXqAh*Q$i(jbV5q**J>36?rz*f*#8>nhcHR2(kP zTo9z*7JZX0j4nm7ztJWKi!|Krvwv>manLL*FEB{18mpt^fhIM1nW5}(zkPN-MU zYZ+hH)`VWaaGt6m=u0cru9`=&T~Xm6#=GV5QG|M`zIT_q(qiM<%}AKOwT+_UBc8@t zWY{zQJ*aEuBd*iDxIwOB|QD zI_p~A9|)-Yd!S0us>q8M3uPaun>jdIE(0lumIw`b>AuA|HT^OL>8PY6xwW{YCbZ9x5AtN4T|fo1*qc6DMU;`AT^ItCcjqfDx&D zqq(`p)UDeKkmAjU-~trWd*OH5FJ2@hewS}Vxc)WfHl*nt-n_z;`(;OQMSxAKDZZH$ z>E*0!al-)B`RseeGVcVPY!smrWE9wx_Rr{_I)HEfI3h?9E|UBB?PO zDG^Q2%!(`p&zyPCdumZ6o(;?6;dY< z2eVq96)N%`(G}#aq1100Ri~Dxlkl(9I;B^>4EDYYiWoYmWY8<u9#8Jji}sGsoty_^Ugj)Y^3-$C6>R#2czEmWiL5o2;CWwsV z99T;gK_sYi3PVpFGhMN%mSC?e(E#|qq@;v_f#Dj|aVIYPRV3(StrHUyJw1V*5vkdr zBv1*E)n`>xP{8OZY;r=oC;rsFKtMR-OO#PjRqec6-`h(L3uEygA&`NC zQm94n!^(3XLB{C7Op#{@=z}?qd&?>)D+*jHXAo`*Gf*nS-_X;4-kGkrK9`Tn)Jn(| zrak+>Sarf5YD{a$xBTLDWZ3d;uFeD&yJ0R|BTI)|lh=LyX=Q1Fo&kha-$rB{BoEk2 zVR_8tS}WRF+at<{zw1B5o@rdAyaGs%s6!PQRBu+OC;!+04D_++v_>Lu3E`bf=f7*i z9~gnv5D!t5>Cr<@ z#%jsv=1n0N7GX>L+*2R2&L1@SQ5d&KGJV#1*$V0CGWyFG6bdpHxt*a!j_VL$-F!4m z(Mr%NCs%(DgS)kMc|4zYY5b9|btfL6a*YB(wV=63FcQG9AJx`n?7}|xAK$&8k8>jH{nBHiD%uH zrnfGsIW3QdcAe(sX&lepJQbiS8-Kp0hWiwRoHdens(MJ^h0x94d@!kg{}PY25T~|K z%yOdouL~^s-P+9UY@!;Z!+P9?0@iPv6>kDRsv--2&Un*)s0gjs(9hGdmP068pXFS9 zSdqbdyGmme`e!iOk4PmK{ctFnx-FhnMS!H>6|ucTO5@>d9L(_|`Lou!`4Ma}d{=Rg z^s@6Ktl4p3X5WWSq{IFC-Z}n|tTT}w4zX(`XZN_7i|LEj7CT)IMniXCL*`dG`vqr` zJuen-9{0~&cM+0}?Rm2B9m-UqGg%5=9?znZ@YsCcdJnx@UX@k2Mv|v2nv8S03MAf} zV8^@@E;7HROm*+Lg1Qy5yNG7hMRFh4bVgv=9Dol*M-gIm(Tz7Qw~ycZ*>C1`CR`dG zH7?7ofE31~^eT+HZYCUzQX6_#`Nx-dNC(h^c9+He2Vq+`^@wDNvn{EOvtlDf4k&ca zd%J8u#OkBAW+6%w2TpcB_E-8iVOh!zt}Nu9KCIRZWR=fjJ0l8`)4$IQ@?H1=goLpF zMUatnHO;I>m@cC02q!F6u#|&Qt!P$WNNjbT35$6gdc8UO<0Ls9#vg|%`0yqi5kFwn zui<+0M}fDYVEu{kWj}U{g9Ycd{ZOrCYq00ty&ai}HdTG;c+@7}i^&~p#EM(Kc8Y}B zGMlGLh7e6#OH7DftJIZT6qK~Ns1WCFty8q}(toPga6r5NuHy4*&0ckb26BG2qQt@9 z9jW29b46xU0n6CC{;TlUkJH?)yVASnoik-$vG61jJ-z=99HAOcJJ?alh8FFJWYWMd zXyokbNm?Q!1iS5u(D(iE3nr_LE?X>yNS3}|KsXC8?kQo+z~4xF6{M0rvgUSNHEi?f zAVh|AVOERfvq)Pfq6I|Ul0hD0=Y>)9>sW!Wiff$m9HEB7$jE~3eYpEK|x4p z^{AJ%5GJwoNHgw}xjGT3M)Nq&+sl4P?8-n+ z3nRJgv-Efy$?(AG-SxH+B)kS`_vGF3VSj)B(b|CIEa22*1crx)6ZkHtjFPqLUF^FF z9__z!+NqdGxA-=b5_0dK|D(D5?`MtwdE!aBHgvC_`dq0>Z&)_1LV7Nz*9<4L|C)aNN%dwQN3Ym=5q72k>H2&Im|Ia72C=NUnO|3vbzi0pX zQ07w==62Z1iHyUN4wAso&@7Xhs;aZ)uJA0`7U^)m-aQGIad zhR5UiPL&$;&eCnl5b#Vic&uZFqy=#?14p9ek zut-|lrwzd0?(P=m<<(j*`F_kxJYJQCh>MHs>gqN#0DcVo*}2kRpjGQImaEJf`&p_e zx3KW`j~AMzv!S41^N1{j7#*G2{|dAboDh&~VQxA)U$)+4nWz^{prN8l%)nd|)C*2e zPpSUG`b1vNSFgUL(x_->%h4c`p|m`H_G}=D-}Pj3EHN?h_3PIip`@I6D7)sz}DUOq=Jqt-}IEaySoPm2ZJfEtgJBZLi5H*cpd1;$aK?h%INbZw#>}T zBqb#~Jn_IIk4*ph^Q%c`|KLEL1`904crJEt_hM>5!1G-ufP+z5KF`&0^YbTWwvGHQ zqc>wCaCLEkZ4m*FASEST7@-M>W6^8h9LszA_H8H$zstqp${SwqD@g-`l>&__3=E9( z<%#)usG8av^SoVmz;0!YBy!vOqW?@xtT*f<0K;5msnJLM{Q0xq^(@5x?y1*8vkx*{ zD-b|c293%fUA$ZQv>{bhRj2(w?=@`!#s~@+SQx*wsn@n-BjD%bgIQ=<`84U!(9;Kn zhT_ilS(=$$oiByj^CVj7y?gf?EH>-gx4<4giGdFuJRsz>2nq_izT7Ix%AP&L_G;Si z*SBw=(yV5x?9%6PzdQz4 zs9_plADPIe$XUH5SEt7T#;|thcIoR#&&$yAvUrv*GF zA%T9ISA_;kGKxN|XXWa2Cq6)A-qMa|Hu>(_C`ZHEv({>%d3&ntVx4cJrnXisDuX7# zUV0c%ZS8utTac3zR>J_iHPPROi=UbKcVB#GhJD%)jrr9sZ+(4zA*4Dl z&unk5J|iOoCr}usMHSAVTC4*+Gklf@A#ZW<)72hr3-epU-k9_L4}yX)N$GlR&qlN^ z;4>?0cVOpR(Sgx=7wlvQ-Z`GVb9J3a~(+Y)A*Ra;-5SL^yET-W=JF;b#ZZ#3hyU^h=PIw2=wIBco-P0 zO?mGlCEDCgKvzmaLV~K4uB$+^nw5`F^FAg0egv`@fw{T)son=9GH_q8_Z8hB4>E3Q8K@G{ziBeYo}M}kt;-62 z7feBX{`_Y;|NblB!{wwi%x2^Hz()^un7O%Qc<;LzMXxxdtc8gI7VRR!jgnypr57_7(m%lT;4dW0T?q^Rg< zS#``Tcoc&M5hEOAVdlvFy&w8Sz6enUFUOk-?0B^7?JJC%TYvxlZ5?#0l%r%*onW9= z@X<9HC;BZ)nfukLa3D@fK6q|Q>gbvWXobIiy{gu{zKEB~1UB#+Fv2rDSZu?`#|KRY z;JwXlh#;0kGeHZLXh9th9x5+SF>egDBl2)@X{oHV^wXzL4<9~Uw&8C4<^uc)IGVhC zSc_UV_!g)6^s+=ouuPWgUj5m2RnfnAOkwb=Cz{FgVkH_il%JZK8hntAtvoBsC?A<6 zWKSoNGg6NuUN(WtdbtyHPyU7L9f_}{O*&jwf8K$?t(L-N1!5y3SN1R9HcH{JQ+;P= zXH!#J&T2Bh)NHV@AVp4?$pa1_mLm!BorI*MmUGv+Ol!6ht+I%SuW=P1C3SRuUsxzA zDozw=;NsvILK`s9(f7OQioSD%92Yno;LXg;0M5^2WB9dK6LaRHWsd{BPoL;<0{7#? zBO=OOPBz!qjsGTLi`g3c^}&?s>1mc7VANgW&Xu1?C@AFvZg9w4YVg6qfn+qJw3O8G z@p1Y509ZEfa4}|-w~o6^*3_{7Y60M2wPYbTqq=Nsf^I@W-tK<&nv7>hN0NX<6&E)# zH|O`bcCxlE*+*h$XP@`HFPKWh5#gH)@ zm=@qKnnn6!SoG%VoIyr(w5GOQ>tB%xpc|o(Sr+07i;O%O{D8)dG7iWF5T|R+Ei44= z*5v?sxQ_(fEuPboWd6)Fy`3J~zz6t-biL!Fqj-MTQ;JYN1x-yiU}O1_YK0uP^%TFK z;osK4a-BKq*^7Pp4^$yMEB_F=~bD}R9enATpiB=0P!kX(n~i6EY#HwAf4PE zVme@iDqUP2kH{M7>rX-maB!kxW1T@J8;S?Ksez#(py>kJQb#sS&CCc12|+poE)HH7 zp0{rT6lfzgDnEnRb^+4W1;3rWeIlRpAwV{O(gJf2`TiY!B_%gEHxzO^+4XhHj%U|2 zB_qRNYrFu^`tTo3;JRuIwDEPfgzsBw25RB4peV&$^ zoh_H61fb6~PPJxIRFuOmoLj}kwz_TeO#p$tORIk}q953%B%ap?AnwOyszrg2$?)b) zwZl%FOqL>TWFQVhcW>`9RlvWN&PKlN|0d^`gQzS=;ikf;L8Is&cb#Qpt-PI*7 zA#n-(%n}Y;u<{GU1zzQ3t*^fwQobdY9qb8Qr9sJ$a1BJ_=n09e$3g=y%mUtb)hH6%du=Pr)Fhr5zH zNo3dn|B#oL#}dXz@hvkNAQ5nj@l?thalhKB0$U0=+(J(P%mm$l75}ccu#i#rA~?Hl z?o$ca>@Wr1bS2tk=T-b&g0W8}5z*0}HzyNXT3T*;0KxcUQkRyMP2{V!Kxsil6C4MkZyC?`vj2Y2gDd ztI1abat-wEQbm_<(Mos#6aXBtQr9A}QXHPQ*W25luhOz}a^BF! zUcP*fIJ9*F-Yewugo9u&thK~g$kNL6anH>~$T0y?@H>bar&C60X=&ASF7h;MCTwws zhc*lQAFDMR0Kx7uCmj!Cr`Mcfotu- zgw1GvnH%>8@#{6z*SF$S09l}&6LHuc6d$Kv_?l{ZG;iOA*V0=H@Tc<1JZ@nIVU3G( zE}}N$4|9Yq4-bz}_4xd}CrAM@XcnJI+>hl8S-gMj?(Qyig!1M*1d*%x;%LoB`tb13 z<$S@cH!9gqlonv__7jnacgZs7f zH@imzkVX(NtL8nf)*yGWp@&FFNPt#YbK%U(%M+D$1wAd1G!^JWVQV(Q(^+5Fnt zn(Sg7Kfr)(KYFO4puXy1YP_D*3pLQ!r-_shL~LOOF6?&Dh6{CG!QQ>)z0;2}u;-aI zN_JnpB*OAWkCk!&&=iwe=6hvyM1&iFWMG%#P<7_#(-&e*8nXq^iV&5`zO||5qoQhG z2nP*1pQ=>@)~N(;Tag{?)nOx`s}ft9^A-xW?stDix2d%{zG&@4_*F$-o&^*_cU-2C zVs>_Hz$D${7F* zGjcrNuHN3`{rx{4%ZxT6?vbFReDmhzt&75al@T8vzSJE*%r-kQL4Emz+S`~d?mm}t z+vw+WMgvkd>6>+Oc<7e6{amaBkQ;t1n!v@yCFOUq8^vc9nl%(jE6L98yg*qY64-nx z2o_k&SsV&YcE_qD&FFr^z@SyE^R?JdIY)_6t7f#z&K3BHX0(x{WKV`M$ zqGv@U?EtiCIzosED_9CUySf$%Yq%LnsK}NCBDG~wT*W3I2;sOwo9=}O@N`WOB8yjyZfUs(QpSu*EruW)fwZP(f)$BDq{IqkL1sqA#nn}!)6ry1BcDhlh*uSXo^30$K^!!9&Un1yn%55OP=s9PxR% zxgs@5b|d~V{H`3ya)8yLmEI|H(qdiSFRYopSSnpp~0Q7Ob*9vFbN%Ne5K0uP!e^bvU6L z)Zf*Ggp92BR~_5@Bt|5l4jz{Y=)Hyp51Sc2+KCCgMVDi>sDh#*M+NrX5KKVype#%$ z0E+MAVU{>9Huj2}`GYl!`G)�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
kQTot2s8Il!qw>;Z;<_1CH_LdG%;gWso1}rv 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

gA(8B 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 literal 0 HcmV?d00001 diff --git a/muk_web_preview_vector/static/lib/svg-pan-zoom/svg-pan-zoom.js b/muk_web_preview_vector/static/lib/svg-pan-zoom/svg-pan-zoom.js new file mode 100644 index 0000000..f556bc6 --- /dev/null +++ b/muk_web_preview_vector/static/lib/svg-pan-zoom/svg-pan-zoom.js @@ -0,0 +1,1902 @@ +// svg-pan-zoom v3.5.1 +// https://github.com/ariutta/svg-pan-zoom +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o= 0; i--) { + if (this.eventListeners.hasOwnProperty(haltEventListeners[i])) { + delete this.eventListeners[haltEventListeners[i]] + } + } + } + } + + // Bind eventListeners + for (var event in this.eventListeners) { + // Attach event to eventsListenerElement or SVG if not available + (this.options.eventsListenerElement || this.svg) + .addEventListener(event, this.eventListeners[event], false) + } + + // Zoom using mouse wheel + if (this.options.mouseWheelZoomEnabled) { + this.options.mouseWheelZoomEnabled = false // set to false as enable will set it back to true + this.enableMouseWheelZoom() + } +} + +/** + * Enable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.enableMouseWheelZoom = function() { + if (!this.options.mouseWheelZoomEnabled) { + var that = this + + // Mouse wheel listener + this.wheelListener = function(evt) { + return that.handleMouseWheel(evt); + } + + // Bind wheelListener + Wheel.on(this.options.eventsListenerElement || this.svg, this.wheelListener, false) + + this.options.mouseWheelZoomEnabled = true + } +} + +/** + * Disable ability to zoom using mouse wheel + */ +SvgPanZoom.prototype.disableMouseWheelZoom = function() { + if (this.options.mouseWheelZoomEnabled) { + Wheel.off(this.options.eventsListenerElement || this.svg, this.wheelListener, false) + this.options.mouseWheelZoomEnabled = false + } +} + +/** + * Handle mouse wheel event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseWheel = function(evt) { + if (!this.options.zoomEnabled || this.state !== 'none') { + return; + } + + if (this.options.preventMouseEventsDefault){ + if (evt.preventDefault) { + evt.preventDefault(); + } else { + evt.returnValue = false; + } + } + + // Default delta in case that deltaY is not available + var delta = evt.deltaY || 1 + , timeDelta = Date.now() - this.lastMouseWheelEventTime + , divider = 3 + Math.max(0, 30 - timeDelta) + + // Update cache + this.lastMouseWheelEventTime = Date.now() + + // Make empirical adjustments for browsers that give deltaY in pixels (deltaMode=0) + if ('deltaMode' in evt && evt.deltaMode === 0 && evt.wheelDelta) { + delta = evt.deltaY === 0 ? 0 : Math.abs(evt.wheelDelta) / evt.deltaY + } + + delta = -0.3 < delta && delta < 0.3 ? delta : (delta > 0 ? 1 : -1) * Math.log(Math.abs(delta) + 10) / divider + + var inversedScreenCTM = this.svg.getScreenCTM().inverse() + , relativeMousePoint = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(inversedScreenCTM) + , zoom = Math.pow(1 + this.options.zoomScaleSensitivity, (-1) * delta); // multiplying by neg. 1 so as to make zoom in/out behavior match Google maps behavior + + this.zoomAtPoint(zoom, relativeMousePoint) +} + +/** + * Zoom in at a SVG point + * + * @param {SVGPoint} point + * @param {Float} zoomScale Number representing how much to zoom + * @param {Boolean} zoomAbsolute Default false. If true, zoomScale is treated as an absolute value. + * Otherwise, zoomScale is treated as a multiplied (e.g. 1.10 would zoom in 10%) + */ +SvgPanZoom.prototype.zoomAtPoint = function(zoomScale, point, zoomAbsolute) { + var originalState = this.viewport.getOriginalState() + + if (!zoomAbsolute) { + // Fit zoomScale in set bounds + if (this.getZoom() * zoomScale < this.options.minZoom * originalState.zoom) { + zoomScale = (this.options.minZoom * originalState.zoom) / this.getZoom() + } else if (this.getZoom() * zoomScale > this.options.maxZoom * originalState.zoom) { + zoomScale = (this.options.maxZoom * originalState.zoom) / this.getZoom() + } + } else { + // Fit zoomScale in set bounds + zoomScale = Math.max(this.options.minZoom * originalState.zoom, Math.min(this.options.maxZoom * originalState.zoom, zoomScale)) + // Find relative scale to achieve desired scale + zoomScale = zoomScale/this.getZoom() + } + + var oldCTM = this.viewport.getCTM() + , relativePoint = point.matrixTransform(oldCTM.inverse()) + , modifier = this.svg.createSVGMatrix().translate(relativePoint.x, relativePoint.y).scale(zoomScale).translate(-relativePoint.x, -relativePoint.y) + , newCTM = oldCTM.multiply(modifier) + + if (newCTM.a !== oldCTM.a) { + this.viewport.setCTM(newCTM) + } +} + +/** + * Zoom at center point + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.zoom = function(scale, absolute) { + this.zoomAtPoint(scale, SvgUtils.getSvgCenterPoint(this.svg, this.width, this.height), absolute) +} + +/** + * Zoom used by public instance + * + * @param {Float} scale + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoom = function(scale, absolute) { + if (absolute) { + scale = this.computeFromRelativeZoom(scale) + } + + this.zoom(scale, absolute) +} + +/** + * Zoom at point used by public instance + * + * @param {Float} scale + * @param {SVGPoint|Object} point An object that has x and y attributes + * @param {Boolean} absolute Marks zoom scale as relative or absolute + */ +SvgPanZoom.prototype.publicZoomAtPoint = function(scale, point, absolute) { + if (absolute) { + // Transform zoom into a relative value + scale = this.computeFromRelativeZoom(scale) + } + + // If not a SVGPoint but has x and y then create a SVGPoint + if (Utils.getType(point) !== 'SVGPoint') { + if('x' in point && 'y' in point) { + point = SvgUtils.createSVGPoint(this.svg, point.x, point.y) + } else { + throw new Error('Given point is invalid') + } + } + + this.zoomAtPoint(scale, point, absolute) +} + +/** + * Get zoom scale + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getZoom = function() { + return this.viewport.getZoom() +} + +/** + * Get zoom scale for public usage + * + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.getRelativeZoom = function() { + return this.viewport.getRelativeZoom() +} + +/** + * Compute actual zoom from public zoom + * + * @param {Float} zoom + * @return {Float} zoom scale + */ +SvgPanZoom.prototype.computeFromRelativeZoom = function(zoom) { + return zoom * this.viewport.getOriginalState().zoom +} + +/** + * Set zoom to initial state + */ +SvgPanZoom.prototype.resetZoom = function() { + var originalState = this.viewport.getOriginalState() + + this.zoom(originalState.zoom, true); +} + +/** + * Set pan to initial state + */ +SvgPanZoom.prototype.resetPan = function() { + this.pan(this.viewport.getOriginalState()); +} + +/** + * Set pan and zoom to initial state + */ +SvgPanZoom.prototype.reset = function() { + this.resetZoom() + this.resetPan() +} + +/** + * Handle double click event + * See handleMouseDown() for alternate detection method + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleDblClick = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault() + } else { + evt.returnValue = false + } + } + + // Check if target was a control button + if (this.options.controlIconsEnabled) { + var targetClass = evt.target.getAttribute('class') || '' + if (targetClass.indexOf('svg-pan-zoom-control') > -1) { + return false + } + } + + var zoomFactor + + if (evt.shiftKey) { + zoomFactor = 1/((1 + this.options.zoomScaleSensitivity) * 2) // zoom out when shift key pressed + } else { + zoomFactor = (1 + this.options.zoomScaleSensitivity) * 2 + } + + var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.svg.getScreenCTM().inverse()) + this.zoomAtPoint(zoomFactor, point) +} + +/** + * Handle click event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseDown = function(evt, prevEvt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault() + } else { + evt.returnValue = false + } + } + + Utils.mouseAndTouchNormalize(evt, this.svg) + + // Double click detection; more consistent than ondblclick + if (this.options.dblClickZoomEnabled && Utils.isDblClick(evt, prevEvt)){ + this.handleDblClick(evt) + } else { + // Pan mode + this.state = 'pan' + this.firstEventCTM = this.viewport.getCTM() + this.stateOrigin = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse()) + } +} + +/** + * Handle mouse move event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseMove = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault() + } else { + evt.returnValue = false + } + } + + if (this.state === 'pan' && this.options.panEnabled) { + // Pan mode + var point = SvgUtils.getEventPoint(evt, this.svg).matrixTransform(this.firstEventCTM.inverse()) + , viewportCTM = this.firstEventCTM.translate(point.x - this.stateOrigin.x, point.y - this.stateOrigin.y) + + this.viewport.setCTM(viewportCTM) + } +} + +/** + * Handle mouse button release event + * + * @param {Event} evt + */ +SvgPanZoom.prototype.handleMouseUp = function(evt) { + if (this.options.preventMouseEventsDefault) { + if (evt.preventDefault) { + evt.preventDefault() + } else { + evt.returnValue = false + } + } + + if (this.state === 'pan') { + // Quit pan mode + this.state = 'none' + } +} + +/** + * Adjust viewport size (only) so it will fit in SVG + * Does not center image + */ +SvgPanZoom.prototype.fit = function() { + var viewBox = this.viewport.getViewBox() + , newScale = Math.min(this.width/viewBox.width, this.height/viewBox.height) + + this.zoom(newScale, true) +} + +/** + * Adjust viewport size (only) so it will contain the SVG + * Does not center image + */ +SvgPanZoom.prototype.contain = function() { + var viewBox = this.viewport.getViewBox() + , newScale = Math.max(this.width/viewBox.width, this.height/viewBox.height) + + this.zoom(newScale, true) +} + +/** + * Adjust viewport pan (only) so it will be centered in SVG + * Does not zoom/fit/contain image + */ +SvgPanZoom.prototype.center = function() { + var viewBox = this.viewport.getViewBox() + , offsetX = (this.width - (viewBox.width + viewBox.x * 2) * this.getZoom()) * 0.5 + , offsetY = (this.height - (viewBox.height + viewBox.y * 2) * this.getZoom()) * 0.5 + + this.getPublicInstance().pan({x: offsetX, y: offsetY}) +} + +/** + * Update content cached BorderBox + * Use when viewport contents change + */ +SvgPanZoom.prototype.updateBBox = function() { + this.viewport.simpleViewBoxCache() +} + +/** + * Pan to a rendered position + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.pan = function(point) { + var viewportCTM = this.viewport.getCTM() + viewportCTM.e = point.x + viewportCTM.f = point.y + this.viewport.setCTM(viewportCTM) +} + +/** + * Relatively pan the graph by a specified rendered position vector + * + * @param {Object} point {x: 0, y: 0} + */ +SvgPanZoom.prototype.panBy = function(point) { + var viewportCTM = this.viewport.getCTM() + viewportCTM.e += point.x + viewportCTM.f += point.y + this.viewport.setCTM(viewportCTM) +} + +/** + * Get pan vector + * + * @return {Object} {x: 0, y: 0} + */ +SvgPanZoom.prototype.getPan = function() { + var state = this.viewport.getState() + + return {x: state.x, y: state.y} +} + +/** + * Recalculates cached svg dimensions and controls position + */ +SvgPanZoom.prototype.resize = function() { + // Get dimensions + var boundingClientRectNormalized = SvgUtils.getBoundingClientRectNormalized(this.svg) + this.width = boundingClientRectNormalized.width + this.height = boundingClientRectNormalized.height + + // Recalculate original state + var viewport = this.viewport + viewport.options.width = this.width + viewport.options.height = this.height + viewport.processCTM() + + // Reposition control icons by re-enabling them + if (this.options.controlIconsEnabled) { + this.getPublicInstance().disableControlIcons() + this.getPublicInstance().enableControlIcons() + } +} + +/** + * Unbind mouse events, free callbacks and destroy public instance + */ +SvgPanZoom.prototype.destroy = function() { + var that = this + + // Free callbacks + this.beforeZoom = null + this.onZoom = null + this.beforePan = null + this.onPan = null + this.onUpdatedCTM = null + + // Destroy custom event handlers + if (this.options.customEventsHandler != null) { // jshint ignore:line + this.options.customEventsHandler.destroy({ + svgElement: this.svg + , eventsListenerElement: this.options.eventsListenerElement + , instance: this.getPublicInstance() + }) + } + + // Unbind eventListeners + for (var event in this.eventListeners) { + (this.options.eventsListenerElement || this.svg) + .removeEventListener(event, this.eventListeners[event], false) + } + + // Unbind wheelListener + this.disableMouseWheelZoom() + + // Remove control icons + this.getPublicInstance().disableControlIcons() + + // Reset zoom and pan + this.reset() + + // Remove instance from instancesStore + instancesStore = instancesStore.filter(function(instance){ + return instance.svg !== that.svg + }) + + // Delete options and its contents + delete this.options + + // Delete viewport to make public shadow viewport functions uncallable + delete this.viewport + + // Destroy public instance and rewrite getPublicInstance + delete this.publicInstance + delete this.pi + this.getPublicInstance = function(){ + return null + } +} + +/** + * Returns a public instance object + * + * @return {Object} Public instance object + */ +SvgPanZoom.prototype.getPublicInstance = function() { + var that = this + + // Create cache + if (!this.publicInstance) { + this.publicInstance = this.pi = { + // Pan + enablePan: function() {that.options.panEnabled = true; return that.pi} + , disablePan: function() {that.options.panEnabled = false; return that.pi} + , isPanEnabled: function() {return !!that.options.panEnabled} + , pan: function(point) {that.pan(point); return that.pi} + , panBy: function(point) {that.panBy(point); return that.pi} + , getPan: function() {return that.getPan()} + // Pan event + , setBeforePan: function(fn) {that.options.beforePan = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi} + , setOnPan: function(fn) {that.options.onPan = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi} + // Zoom and Control Icons + , enableZoom: function() {that.options.zoomEnabled = true; return that.pi} + , disableZoom: function() {that.options.zoomEnabled = false; return that.pi} + , isZoomEnabled: function() {return !!that.options.zoomEnabled} + , enableControlIcons: function() { + if (!that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = true + ControlIcons.enable(that) + } + return that.pi + } + , disableControlIcons: function() { + if (that.options.controlIconsEnabled) { + that.options.controlIconsEnabled = false; + ControlIcons.disable(that) + } + return that.pi + } + , isControlIconsEnabled: function() {return !!that.options.controlIconsEnabled} + // Double click zoom + , enableDblClickZoom: function() {that.options.dblClickZoomEnabled = true; return that.pi} + , disableDblClickZoom: function() {that.options.dblClickZoomEnabled = false; return that.pi} + , isDblClickZoomEnabled: function() {return !!that.options.dblClickZoomEnabled} + // Mouse wheel zoom + , enableMouseWheelZoom: function() {that.enableMouseWheelZoom(); return that.pi} + , disableMouseWheelZoom: function() {that.disableMouseWheelZoom(); return that.pi} + , isMouseWheelZoomEnabled: function() {return !!that.options.mouseWheelZoomEnabled} + // Zoom scale and bounds + , setZoomScaleSensitivity: function(scale) {that.options.zoomScaleSensitivity = scale; return that.pi} + , setMinZoom: function(zoom) {that.options.minZoom = zoom; return that.pi} + , setMaxZoom: function(zoom) {that.options.maxZoom = zoom; return that.pi} + // Zoom event + , setBeforeZoom: function(fn) {that.options.beforeZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi} + , setOnZoom: function(fn) {that.options.onZoom = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi} + // Zooming + , zoom: function(scale) {that.publicZoom(scale, true); return that.pi} + , zoomBy: function(scale) {that.publicZoom(scale, false); return that.pi} + , zoomAtPoint: function(scale, point) {that.publicZoomAtPoint(scale, point, true); return that.pi} + , zoomAtPointBy: function(scale, point) {that.publicZoomAtPoint(scale, point, false); return that.pi} + , zoomIn: function() {this.zoomBy(1 + that.options.zoomScaleSensitivity); return that.pi} + , zoomOut: function() {this.zoomBy(1 / (1 + that.options.zoomScaleSensitivity)); return that.pi} + , getZoom: function() {return that.getRelativeZoom()} + // CTM update + , setOnUpdatedCTM: function(fn) {that.options.onUpdatedCTM = fn === null ? null : Utils.proxy(fn, that.publicInstance); return that.pi} + // Reset + , resetZoom: function() {that.resetZoom(); return that.pi} + , resetPan: function() {that.resetPan(); return that.pi} + , reset: function() {that.reset(); return that.pi} + // Fit, Contain and Center + , fit: function() {that.fit(); return that.pi} + , contain: function() {that.contain(); return that.pi} + , center: function() {that.center(); return that.pi} + // Size and Resize + , updateBBox: function() {that.updateBBox(); return that.pi} + , resize: function() {that.resize(); return that.pi} + , getSizes: function() { + return { + width: that.width + , height: that.height + , realZoom: that.getZoom() + , viewBox: that.viewport.getViewBox() + } + } + // Destroy + , destroy: function() {that.destroy(); return that.pi} + } + } + + return this.publicInstance +} + +/** + * Stores pairs of instances of SvgPanZoom and SVG + * Each pair is represented by an object {svg: SVGSVGElement, instance: SvgPanZoom} + * + * @type {Array} + */ +var instancesStore = [] + +var svgPanZoom = function(elementOrSelector, options){ + var svg = Utils.getSvg(elementOrSelector) + + if (svg === null) { + return null + } else { + // Look for existent instance + for(var i = instancesStore.length - 1; i >= 0; i--) { + if (instancesStore[i].svg === svg) { + return instancesStore[i].instance.getPublicInstance() + } + } + + // If instance not found - create one + instancesStore.push({ + svg: svg + , instance: new SvgPanZoom(svg, options) + }) + + // Return just pushed instance + return instancesStore[instancesStore.length - 1].instance.getPublicInstance() + } +} + +module.exports = svgPanZoom; + +},{"./control-icons":2,"./shadow-viewport":3,"./svg-utilities":5,"./uniwheel":6,"./utilities":7}],5:[function(require,module,exports){ +var Utils = require('./utilities') + , _browser = 'unknown' + ; + +// http://stackoverflow.com/questions/9847580/how-to-detect-safari-chrome-ie-firefox-and-opera-browser +if (/*@cc_on!@*/false || !!document.documentMode) { // internet explorer + _browser = 'ie'; +} + +module.exports = { + svgNS: 'http://www.w3.org/2000/svg' +, xmlNS: 'http://www.w3.org/XML/1998/namespace' +, xmlnsNS: 'http://www.w3.org/2000/xmlns/' +, xlinkNS: 'http://www.w3.org/1999/xlink' +, evNS: 'http://www.w3.org/2001/xml-events' + + /** + * Get svg dimensions: width and height + * + * @param {SVGSVGElement} svg + * @return {Object} {width: 0, height: 0} + */ +, getBoundingClientRectNormalized: function(svg) { + if (svg.clientWidth && svg.clientHeight) { + return {width: svg.clientWidth, height: svg.clientHeight} + } else if (!!svg.getBoundingClientRect()) { + return svg.getBoundingClientRect(); + } else { + throw new Error('Cannot get BoundingClientRect for SVG.'); + } + } + + /** + * Gets g element with class of "viewport" or creates it if it doesn't exist + * + * @param {SVGSVGElement} svg + * @return {SVGElement} g (group) element + */ +, getOrCreateViewport: function(svg, selector) { + var viewport = null + + if (Utils.isElement(selector)) { + viewport = selector + } else { + viewport = svg.querySelector(selector) + } + + // Check if there is just one main group in SVG + if (!viewport) { + var childNodes = Array.prototype.slice.call(svg.childNodes || svg.children).filter(function(el){ + return el.nodeName !== 'defs' && el.nodeName !== '#text' + }) + + // Node name should be SVGGElement and should have no transform attribute + // Groups with transform are not used as viewport because it involves parsing of all transform possibilities + if (childNodes.length === 1 && childNodes[0].nodeName === 'g' && childNodes[0].getAttribute('transform') === null) { + viewport = childNodes[0] + } + } + + // If no favorable group element exists then create one + if (!viewport) { + var viewportId = 'viewport-' + new Date().toISOString().replace(/\D/g, ''); + viewport = document.createElementNS(this.svgNS, 'g'); + viewport.setAttribute('id', viewportId); + + // Internet Explorer (all versions?) can't use childNodes, but other browsers prefer (require?) using childNodes + var svgChildren = svg.childNodes || svg.children; + if (!!svgChildren && svgChildren.length > 0) { + for (var i = svgChildren.length; i > 0; i--) { + // Move everything into viewport except defs + if (svgChildren[svgChildren.length - i].nodeName !== 'defs') { + viewport.appendChild(svgChildren[svgChildren.length - i]); + } + } + } + svg.appendChild(viewport); + } + + // Parse class names + var classNames = []; + if (viewport.getAttribute('class')) { + classNames = viewport.getAttribute('class').split(' ') + } + + // Set class (if not set already) + if (!~classNames.indexOf('svg-pan-zoom_viewport')) { + classNames.push('svg-pan-zoom_viewport') + viewport.setAttribute('class', classNames.join(' ')) + } + + return viewport + } + + /** + * Set SVG attributes + * + * @param {SVGSVGElement} svg + */ + , setupSvgAttributes: function(svg) { + // Setting default attributes + svg.setAttribute('xmlns', this.svgNS); + svg.setAttributeNS(this.xmlnsNS, 'xmlns:xlink', this.xlinkNS); + svg.setAttributeNS(this.xmlnsNS, 'xmlns:ev', this.evNS); + + // Needed for Internet Explorer, otherwise the viewport overflows + if (svg.parentNode !== null) { + var style = svg.getAttribute('style') || ''; + if (style.toLowerCase().indexOf('overflow') === -1) { + svg.setAttribute('style', 'overflow: hidden; ' + style); + } + } + } + +/** + * How long Internet Explorer takes to finish updating its display (ms). + */ +, internetExplorerRedisplayInterval: 300 + +/** + * Forces the browser to redisplay all SVG elements that rely on an + * element defined in a 'defs' section. It works globally, for every + * available defs element on the page. + * The throttling is intentionally global. + * + * This is only needed for IE. It is as a hack to make markers (and 'use' elements?) + * visible after pan/zoom when there are multiple SVGs on the page. + * See bug report: https://connect.microsoft.com/IE/feedback/details/781964/ + * also see svg-pan-zoom issue: https://github.com/ariutta/svg-pan-zoom/issues/62 + */ +, refreshDefsGlobal: Utils.throttle(function() { + var allDefs = document.querySelectorAll('defs'); + var allDefsCount = allDefs.length; + for (var i = 0; i < allDefsCount; i++) { + var thisDefs = allDefs[i]; + thisDefs.parentNode.insertBefore(thisDefs, thisDefs); + } + }, this.internetExplorerRedisplayInterval) + + /** + * Sets the current transform matrix of an element + * + * @param {SVGElement} element + * @param {SVGMatrix} matrix CTM + * @param {SVGElement} defs + */ +, setCTM: function(element, matrix, defs) { + var that = this + , s = 'matrix(' + matrix.a + ',' + matrix.b + ',' + matrix.c + ',' + matrix.d + ',' + matrix.e + ',' + matrix.f + ')'; + + element.setAttributeNS(null, 'transform', s); + if ('transform' in element.style) { + element.style.transform = s; + } else if ('-ms-transform' in element.style) { + element.style['-ms-transform'] = s; + } else if ('-webkit-transform' in element.style) { + element.style['-webkit-transform'] = s; + } + + // IE has a bug that makes markers disappear on zoom (when the matrix "a" and/or "d" elements change) + // see http://stackoverflow.com/questions/17654578/svg-marker-does-not-work-in-ie9-10 + // and http://srndolha.wordpress.com/2013/11/25/svg-line-markers-may-disappear-in-internet-explorer-11/ + if (_browser === 'ie' && !!defs) { + // this refresh is intended for redisplaying the SVG during zooming + defs.parentNode.insertBefore(defs, defs); + // this refresh is intended for redisplaying the other SVGs on a page when panning a given SVG + // it is also needed for the given SVG itself, on zoomEnd, if the SVG contains any markers that + // are located under any other element(s). + window.setTimeout(function() { + that.refreshDefsGlobal(); + }, that.internetExplorerRedisplayInterval); + } + } + + /** + * Instantiate an SVGPoint object with given event coordinates + * + * @param {Event} evt + * @param {SVGSVGElement} svg + * @return {SVGPoint} point + */ +, getEventPoint: function(evt, svg) { + var point = svg.createSVGPoint() + + Utils.mouseAndTouchNormalize(evt, svg) + + point.x = evt.clientX + point.y = evt.clientY + + return point + } + + /** + * Get SVG center point + * + * @param {SVGSVGElement} svg + * @return {SVGPoint} + */ +, getSvgCenterPoint: function(svg, width, height) { + return this.createSVGPoint(svg, width / 2, height / 2) + } + + /** + * Create a SVGPoint with given x and y + * + * @param {SVGSVGElement} svg + * @param {Number} x + * @param {Number} y + * @return {SVGPoint} + */ +, createSVGPoint: function(svg, x, y) { + var point = svg.createSVGPoint() + point.x = x + point.y = y + + return point + } +} + +},{"./utilities":7}],6:[function(require,module,exports){ +// uniwheel 0.1.2 (customized) +// A unified cross browser mouse wheel event handler +// https://github.com/teemualap/uniwheel + +module.exports = (function(){ + + //Full details: https://developer.mozilla.org/en-US/docs/Web/Reference/Events/wheel + + var prefix = "", _addEventListener, _removeEventListener, onwheel, support, fns = []; + + // detect event model + if ( window.addEventListener ) { + _addEventListener = "addEventListener"; + _removeEventListener = "removeEventListener"; + } else { + _addEventListener = "attachEvent"; + _removeEventListener = "detachEvent"; + prefix = "on"; + } + + // detect available wheel event + support = "onwheel" in document.createElement("div") ? "wheel" : // Modern browsers support "wheel" + document.onmousewheel !== undefined ? "mousewheel" : // Webkit and IE support at least "mousewheel" + "DOMMouseScroll"; // let's assume that remaining browsers are older Firefox + + + function createCallback(element,callback,capture) { + + var fn = function(originalEvent) { + + !originalEvent && ( originalEvent = window.event ); + + // create a normalized event object + var event = { + // keep a ref to the original event object + originalEvent: originalEvent, + target: originalEvent.target || originalEvent.srcElement, + type: "wheel", + deltaMode: originalEvent.type == "MozMousePixelScroll" ? 0 : 1, + deltaX: 0, + delatZ: 0, + preventDefault: function() { + originalEvent.preventDefault ? + originalEvent.preventDefault() : + originalEvent.returnValue = false; + } + }; + + // calculate deltaY (and deltaX) according to the event + if ( support == "mousewheel" ) { + event.deltaY = - 1/40 * originalEvent.wheelDelta; + // Webkit also support wheelDeltaX + originalEvent.wheelDeltaX && ( event.deltaX = - 1/40 * originalEvent.wheelDeltaX ); + } else { + event.deltaY = originalEvent.detail; + } + + // it's time to fire the callback + return callback( event ); + + }; + + fns.push({ + element: element, + fn: fn, + capture: capture + }); + + return fn; + } + + function getCallback(element,capture) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element && fns[i].capture === capture) { + return fns[i].fn; + } + } + return function(){}; + } + + function removeCallback(element,capture) { + for (var i = 0; i < fns.length; i++) { + if (fns[i].element === element && fns[i].capture === capture) { + return fns.splice(i,1); + } + } + } + + function _addWheelListener( elem, eventName, callback, useCapture ) { + + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = createCallback(elem,callback,useCapture); + } + + elem[ _addEventListener ]( prefix + eventName, cb, useCapture || false ); + + } + + function _removeWheelListener( elem, eventName, callback, useCapture ) { + + var cb; + + if (support === "wheel") { + cb = callback; + } else { + cb = getCallback(elem,useCapture); + } + + elem[ _removeEventListener ]( prefix + eventName, cb, useCapture || false ); + + removeCallback(elem,useCapture); + + } + + function addWheelListener( elem, callback, useCapture ) { + _addWheelListener( elem, support, callback, useCapture ); + + // handle MozMousePixelScroll in older Firefox + if( support == "DOMMouseScroll" ) { + _addWheelListener( elem, "MozMousePixelScroll", callback, useCapture); + } + } + + function removeWheelListener(elem,callback,useCapture){ + _removeWheelListener(elem,support,callback,useCapture); + + // handle MozMousePixelScroll in older Firefox + if( support == "DOMMouseScroll" ) { + _removeWheelListener(elem, "MozMousePixelScroll", callback, useCapture); + } + } + + return { + on: addWheelListener, + off: removeWheelListener + }; + +})(); + +},{}],7:[function(require,module,exports){ +module.exports = { + /** + * Extends an object + * + * @param {Object} target object to extend + * @param {Object} source object to take properties from + * @return {Object} extended object + */ + extend: function(target, source) { + target = target || {}; + for (var prop in source) { + // Go recursively + if (this.isObject(source[prop])) { + target[prop] = this.extend(target[prop], source[prop]) + } else { + target[prop] = source[prop] + } + } + return target; + } + + /** + * Checks if an object is a DOM element + * + * @param {Object} o HTML element or String + * @return {Boolean} returns true if object is a DOM element + */ +, isElement: function(o){ + return ( + o instanceof HTMLElement || o instanceof SVGElement || o instanceof SVGSVGElement || //DOM2 + (o && typeof o === 'object' && o !== null && o.nodeType === 1 && typeof o.nodeName === 'string') + ); + } + + /** + * Checks if an object is an Object + * + * @param {Object} o Object + * @return {Boolean} returns true if object is an Object + */ +, isObject: function(o){ + return Object.prototype.toString.call(o) === '[object Object]'; + } + + /** + * Checks if variable is Number + * + * @param {Integer|Float} n + * @return {Boolean} returns true if variable is Number + */ +, isNumber: function(n) { + return !isNaN(parseFloat(n)) && isFinite(n); + } + + /** + * Search for an SVG element + * + * @param {Object|String} elementOrSelector DOM Element or selector String + * @return {Object|Null} SVG or null + */ +, getSvg: function(elementOrSelector) { + var element + , svg; + + if (!this.isElement(elementOrSelector)) { + // If selector provided + if (typeof elementOrSelector === 'string' || elementOrSelector instanceof String) { + // Try to find the element + element = document.querySelector(elementOrSelector) + + if (!element) { + throw new Error('Provided selector did not find any elements. Selector: ' + elementOrSelector) + return null + } + } else { + throw new Error('Provided selector is not an HTML object nor String') + return null + } + } else { + element = elementOrSelector + } + + if (element.tagName.toLowerCase() === 'svg') { + svg = element; + } else { + if (element.tagName.toLowerCase() === 'object') { + svg = element.contentDocument.documentElement; + } else { + if (element.tagName.toLowerCase() === 'embed') { + svg = element.getSVGDocument().documentElement; + } else { + if (element.tagName.toLowerCase() === 'img') { + throw new Error('Cannot script an SVG in an "img" element. Please use an "object" element or an in-line SVG.'); + } else { + throw new Error('Cannot get SVG.'); + } + return null + } + } + } + + return svg + } + + /** + * Attach a given context to a function + * @param {Function} fn Function + * @param {Object} context Context + * @return {Function} Function with certain context + */ +, proxy: function(fn, context) { + return function() { + return fn.apply(context, arguments) + } + } + + /** + * Returns object type + * Uses toString that returns [object SVGPoint] + * And than parses object type from string + * + * @param {Object} o Any object + * @return {String} Object type + */ +, getType: function(o) { + return Object.prototype.toString.apply(o).replace(/^\[object\s/, '').replace(/\]$/, '') + } + + /** + * If it is a touch event than add clientX and clientY to event object + * + * @param {Event} evt + * @param {SVGSVGElement} svg + */ +, mouseAndTouchNormalize: function(evt, svg) { + // If no cilentX and but touch objects are available + if (evt.clientX === void 0 || evt.clientX === null) { + // Fallback + evt.clientX = 0 + evt.clientY = 0 + + // If it is a touch event + if (evt.changedTouches !== void 0 && evt.changedTouches.length) { + // If touch event has changedTouches + if (evt.changedTouches[0].clientX !== void 0) { + evt.clientX = evt.changedTouches[0].clientX + evt.clientY = evt.changedTouches[0].clientY + } + // If changedTouches has pageX attribute + else if (evt.changedTouches[0].pageX !== void 0) { + var rect = svg.getBoundingClientRect(); + + evt.clientX = evt.changedTouches[0].pageX - rect.left + evt.clientY = evt.changedTouches[0].pageY - rect.top + } + // If it is a custom event + } else if (evt.originalEvent !== void 0) { + if (evt.originalEvent.clientX !== void 0) { + evt.clientX = evt.originalEvent.clientX + evt.clientY = evt.originalEvent.clientY + } + } + } + } + + /** + * Check if an event is a double click/tap + * TODO: For touch gestures use a library (hammer.js) that takes in account other events + * (touchmove and touchend). It should take in account tap duration and traveled distance + * + * @param {Event} evt + * @param {Event} prevEvt Previous Event + * @return {Boolean} + */ +, isDblClick: function(evt, prevEvt) { + // Double click detected by browser + if (evt.detail === 2) { + return true; + } + // Try to compare events + else if (prevEvt !== void 0 && prevEvt !== null) { + var timeStampDiff = evt.timeStamp - prevEvt.timeStamp // should be lower than 250 ms + , touchesDistance = Math.sqrt(Math.pow(evt.clientX - prevEvt.clientX, 2) + Math.pow(evt.clientY - prevEvt.clientY, 2)) + + return timeStampDiff < 250 && touchesDistance < 10 + } + + // Nothing found + return false; + } + + /** + * Returns current timestamp as an integer + * + * @return {Number} + */ +, now: Date.now || function() { + return new Date().getTime(); + } + + // From underscore. + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. Normally, the throttled function will run + // as much as it can, without ever going more than once per `wait` duration; + // but if you'd like to disable the execution on the leading edge, pass + // `{leading: false}`. To disable execution on the trailing edge, ditto. +// jscs:disable +// jshint ignore:start +, throttle: function(func, wait, options) { + var that = this; + var context, args, result; + var timeout = null; + var previous = 0; + if (!options) options = {}; + var later = function() { + previous = options.leading === false ? 0 : that.now(); + timeout = null; + result = func.apply(context, args); + if (!timeout) context = args = null; + }; + return function() { + var now = that.now(); + if (!previous && options.leading === false) previous = now; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0 || remaining > wait) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + if (!timeout) context = args = null; + } else if (!timeout && options.trailing !== false) { + timeout = setTimeout(later, remaining); + } + return result; + }; + } +// jshint ignore:end +// jscs:enable + + /** + * Create a requestAnimationFrame simulation + * + * @param {Number|String} refreshRate + * @return {Function} + */ +, createRequestAnimationFrame: function(refreshRate) { + var timeout = null + + // Convert refreshRate to timeout + if (refreshRate !== 'auto' && refreshRate < 60 && refreshRate > 1) { + timeout = Math.floor(1000 / refreshRate) + } + + if (timeout === null) { + return window.requestAnimationFrame || requestTimeout(33) + } else { + return requestTimeout(timeout) + } + } +} + +/** + * Create a callback that will execute after a given timeout + * + * @param {Function} timeout + * @return {Function} + */ +function requestTimeout(timeout) { + return function(callback) { + window.setTimeout(callback, timeout) + } +} + +},{}]},{},[1]); \ No newline at end of file diff --git a/muk_web_preview_vector/static/src/js/preview_generator.js b/muk_web_preview_vector/static/src/js/preview_generator.js new file mode 100644 index 0000000..bd00b63 --- /dev/null +++ b/muk_web_preview_vector/static/src/js/preview_generator.js @@ -0,0 +1,73 @@ +/********************************************************************************** +* +* Copyright (C) 2017 MuK IT GmbH +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero 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 Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +* +**********************************************************************************/ + +odoo.define('muk_preview_vector.PreviewGenerator', function (require) { +"use strict"; + +var core = require('web.core'); + +var PreviewHandler = require('muk_preview.PreviewHandler'); +var PreviewGenerator = require('muk_preview.PreviewGenerator'); + +var QWeb = core.qweb; +var _t = core._t; + +var VectorHandler = PreviewHandler.extend({ + checkExtension: function(extension) { + return ['.svg', 'svg'].includes(extension); + }, + checkType: function(mimetype) { + return ['image/svg+xml'].includes(mimetype); + }, + createHtml: function(url, mimetype, extension, title) { + var result = $.Deferred(); + var $content = $(QWeb.render('VectorHTMLContent', {url: url})); + $.ajax(url, { + dataType: "text", + success: function(vector) { + $content.find('.vector-loader').hide(); + $content.find('.vector-container').show(); + $content.find('.vector-container').html(vector); + svgPanZoom('svg', { + zoomEnabled: true, + controlIconsEnabled: true, + fit: true, + center: true, + minZoom: 0.1 + }); + }, + error: function(request, status, error) { + console.error(request.responseText); + } + }); + result.resolve($content); + return $.when(result); + }, +}); + +PreviewGenerator.include({ + init: function(widget, additional_handler) { + this._super(widget, additional_handler); + this.handler = _.extend(this.handler, { + "VectorHandler": new VectorHandler(widget), + }); + }, +}); + +}); \ No newline at end of file diff --git a/muk_web_preview_vector/static/src/less/preview_content.less b/muk_web_preview_vector/static/src/less/preview_content.less new file mode 100644 index 0000000..b329e3b --- /dev/null +++ b/muk_web_preview_vector/static/src/less/preview_content.less @@ -0,0 +1,143 @@ +/********************************************************************************** +* +* Copyright (C) 2017 MuK IT GmbH +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU Affero 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 Affero General Public License for more details. +* +* You should have received a copy of the GNU Affero General Public License +* along with this program. If not, see . +* +**********************************************************************************/ + +.o_preview_vector { + position: absolute; + width: 100%; + height: 100%; + + .vector-container { + display: none; + + svg { + position: absolute; + width: 100%; + height: 100%; + } + } + + /* Based on a CodePen Snippet by Dave McCarthy */ + .vector-loader { + height: 20px; + width: 250px; + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + margin: auto; + + .loader--dot { + animation-name: loader; + animation-timing-function: ease-in-out; + animation-duration: 3s; + animation-iteration-count: infinite; + height: 20px; + width: 20px; + border-radius: 100%; + background-color: black; + position: absolute; + border: 2px solid white; + } + + .loader--dot:first-child { + background-color: #8cc759; + animation-delay: 0.5s; + } + + .loader--dot:nth-child(2) { + background-color: #8c6daf; + animation-delay: 0.4s; + } + + .loader--dot:nth-child(3) { + background-color: #ef5d74; + animation-delay: 0.3s; + } + + .loader--dot:nth-child(4) { + background-color: #f9a74b; + animation-delay: 0.2s; + } + + .loader--dot:nth-child(5) { + background-color: #60beeb; + animation-delay: 0.1s; + } + + .loader--dot:nth-child(6) { + background-color: #fbef5a; + animation-delay: 0s; + } + + .loader--text { + position: absolute; + top: 200%; + left: 0; + right: 0; + width: 4rem; + margin: auto; + } + + .loader--text:after { + content: "Loading"; + font-weight: bold; + animation-name: loading-text; + animation-duration: 3s; + animation-iteration-count: infinite; + } + + @keyframes loader { + 15% { + transform: translateX(0); + } + + 45% { + transform: translateX(230px); + } + + 65% { + transform: translateX(230px); + } + + 95% { + transform: translateX(0); + } + } + + @keyframes loading-text { + 0% { + content: "Loading"; + } + + 25% { + content: "Loading."; + } + + 50% { + content: "Loading.."; + } + + 75% { + content: "Loading..."; + } + } + } +} + diff --git a/muk_web_preview_vector/static/src/xml/preview_content.xml b/muk_web_preview_vector/static/src/xml/preview_content.xml new file mode 100644 index 0000000..a53f6cd --- /dev/null +++ b/muk_web_preview_vector/static/src/xml/preview_content.xml @@ -0,0 +1,33 @@ + + + + + +

+
+
+
+
+
+
+
+
+
+
+
+ \ No newline at end of file diff --git a/muk_web_preview_vector/template/assets.xml b/muk_web_preview_vector/template/assets.xml new file mode 100644 index 0000000..c801ad4 --- /dev/null +++ b/muk_web_preview_vector/template/assets.xml @@ -0,0 +1,29 @@ + + + + + +