From 71859b4f2d4d3847d8b7a21114339600898180d9 Mon Sep 17 00:00:00 2001 From: Mathias Markl Date: Sun, 21 Jan 2018 23:26:50 +0100 Subject: [PATCH] test --- muk_web_utils/LICENSE | 619 ++++++++++++++++++++ muk_web_utils/README.md | 3 + muk_web_utils/__init__.py | 20 + muk_web_utils/__manifest__.py | 56 ++ muk_web_utils/static/description/banner.png | Bin 0 -> 46485 bytes muk_web_utils/static/description/icon.png | Bin 0 -> 14475 bytes muk_web_utils/static/description/index.html | 22 + muk_web_utils/static/description/logo.png | Bin 0 -> 38064 bytes muk_web_utils/static/src/js/common.js | 71 +++ muk_web_utils/static/src/js/jquery.js | 24 + muk_web_utils/static/src/js/mimetype.js | 107 ++++ muk_web_utils/static/tests/common.js | 38 ++ muk_web_utils/static/tests/jquery.js | 36 ++ muk_web_utils/static/tests/mimetype.js | 38 ++ muk_web_utils/template/assets.xml | 36 ++ 15 files changed, 1070 insertions(+) create mode 100644 muk_web_utils/LICENSE create mode 100644 muk_web_utils/README.md create mode 100644 muk_web_utils/__init__.py create mode 100644 muk_web_utils/__manifest__.py create mode 100644 muk_web_utils/static/description/banner.png create mode 100644 muk_web_utils/static/description/icon.png create mode 100644 muk_web_utils/static/description/index.html create mode 100644 muk_web_utils/static/description/logo.png create mode 100644 muk_web_utils/static/src/js/common.js create mode 100644 muk_web_utils/static/src/js/jquery.js create mode 100644 muk_web_utils/static/src/js/mimetype.js create mode 100644 muk_web_utils/static/tests/common.js create mode 100644 muk_web_utils/static/tests/jquery.js create mode 100644 muk_web_utils/static/tests/mimetype.js create mode 100644 muk_web_utils/template/assets.xml diff --git a/muk_web_utils/LICENSE b/muk_web_utils/LICENSE new file mode 100644 index 0000000..faf7bf4 --- /dev/null +++ b/muk_web_utils/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_utils/README.md b/muk_web_utils/README.md new file mode 100644 index 0000000..cf63f5c --- /dev/null +++ b/muk_web_utils/README.md @@ -0,0 +1,3 @@ +# MuK Web Utils + +Technical module to provide some utility features. \ No newline at end of file diff --git a/muk_web_utils/__init__.py b/muk_web_utils/__init__.py new file mode 100644 index 0000000..91ba206 --- /dev/null +++ b/muk_web_utils/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2018 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 . +# +################################################################################### \ No newline at end of file diff --git a/muk_web_utils/__manifest__.py b/muk_web_utils/__manifest__.py new file mode 100644 index 0000000..4cbca52 --- /dev/null +++ b/muk_web_utils/__manifest__.py @@ -0,0 +1,56 @@ +## -*- coding: utf-8 -*- + +################################################################################### +# +# Copyright (C) 2018 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 Web Utils", + "summary": """Utility Features""", + "description": """ + Technical module to provide some utility features. + """, + "version": "11.0.1.0.0", + "category": "Extra Tools", + "license": "AGPL-3", + "website": "http://www.mukit.at", + "author": "MuK IT", + "contributors": [ + "Mathias Markl ", + ], + "depends": [ + "web", + ], + "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_utils/static/description/banner.png b/muk_web_utils/static/description/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..98df572acdafaa00de90b40ba1ff7a81c3f61042 GIT binary patch literal 46485 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%0DGtr~Th# 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%0DTc3q4=)>Iz;<6>6AOHOda>wBbkKe$aG^7% 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 rSQgc2)<0GWR;(2XeEmPZ)`(attCeN literal 0 HcmV?d00001 diff --git a/muk_web_utils/static/description/icon.png b/muk_web_utils/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..033657f722135529dd65f753e119393c24b6627d GIT binary patch literal 14475 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 Ph5#iwHQ5?zv+w@{V*UP_ literal 0 HcmV?d00001 diff --git a/muk_web_utils/static/description/index.html b/muk_web_utils/static/description/index.html new file mode 100644 index 0000000..c6368e4 --- /dev/null +++ b/muk_web_utils/static/description/index.html @@ -0,0 +1,22 @@ +
+
+

MuK Web Utils

+

Utility Features

+

MuK IT GmbH - + www.mukit.at

+
+
+ +
+

Help and Support

+ + +
\ No newline at end of file diff --git a/muk_web_utils/static/description/logo.png b/muk_web_utils/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_utils/static/src/js/common.js b/muk_web_utils/static/src/js/common.js new file mode 100644 index 0000000..798e7cb --- /dev/null +++ b/muk_web_utils/static/src/js/common.js @@ -0,0 +1,71 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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_web_utils.common', function (require) { +"use strict"; + +var ajax = require('web.ajax'); +var core = require('web.core'); +var utils = require('web.utils'); + +var QWeb = core.qweb; +var _t = core._t; + +var delay = (function(){ + var timer = 0; + return function(callback, ms){ + clearTimeout (timer); + timer = setTimeout(callback, ms); + }; +})(); + +function format_number(value) { + if (value === false || typeof value !== "number") { + return ""; + } + var l10n = core._t.database.parameters; + var formatted = _.str.sprintf('%.' + 2 + 'f', value || 0).split('.'); + formatted[0] = utils.insert_thousand_seps(formatted[0]); + return formatted.join(l10n.decimal_point); +} + +function format_size(bytes, options) { + var options = options || {} + var thresh = options.si ? 1000 : 1024; + if(Math.abs(bytes) < thresh) { + return format_number(bytes) + ' B'; + } + var units = options.si + ? ['KB','MB','GB','TB','PB','EB','ZB','YB'] + : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; + var u = -1; + do { + bytes /= thresh; + ++u; + } while(Math.abs(bytes) >= thresh && u < units.length - 1); + return format_number(bytes) + ' ' + units[u]; +} + +return { + delay: delay, + format_number: format_number, + format_size: format_size, +} + +}); \ No newline at end of file diff --git a/muk_web_utils/static/src/js/jquery.js b/muk_web_utils/static/src/js/jquery.js new file mode 100644 index 0000000..d2c8502 --- /dev/null +++ b/muk_web_utils/static/src/js/jquery.js @@ -0,0 +1,24 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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 . +* +**********************************************************************************/ + +$.fn.textWidth = function(text, font) { + if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('').hide().appendTo(document.body); + $.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font')); + return $.fn.textWidth.fakeEl.width(); +}; diff --git a/muk_web_utils/static/src/js/mimetype.js b/muk_web_utils/static/src/js/mimetype.js new file mode 100644 index 0000000..ae9e1f3 --- /dev/null +++ b/muk_web_utils/static/src/js/mimetype.js @@ -0,0 +1,107 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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_web_utils.mimetype', function (require) { +"use strict"; + +var core = require('web.core'); +var utils = require('web.utils'); + +var QWeb = core.qweb; +var _t = core._t; + +var mapping = [ + ['file-image-o', /^image\//], + ['file-audio-o', /^audio\//], + ['file-video-o', /^video\//], + ['file-pdf-o', 'application/pdf'], + ['file-text-o', 'text/plain'], + ['file-code-o', [ + 'text/html', + 'text/javascript', + 'application/javascript' + ]], + ['file-archive-o', [ + /^application\/x-(g?tar|xz|compress|bzip2|g?zip)$/, + /^application\/x-(7z|rar|zip)-compressed$/, + /^application\/(zip|gzip|tar)$/ + ]], + ['file-word-o', [ + /ms-?word/, 'application/vnd.oasis.opendocument.text', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' + ]], + ['file-powerpoint-o', [ + /ms-?powerpoint/, + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' + ]], + ['file-excel-o', [ + /ms-?excel/, + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' + ]], + ['file-o' ] +] + +function match(mimetype, cond) { + if (Array.isArray(cond)) { + return cond.reduce(function(v, c) { + return v || match(mimetype, c) + }, false) + } else if (cond instanceof RegExp) { + return cond.test(mimetype) + } else if (cond === undefined) { + return true + } else { + return mimetype === cond + } +} + +var cache = {} +function resolve(mimetype) { + if (cache[mimetype]) { + return cache[mimetype] + } + for (var i = 0; i < mapping.length; i++) { + if (match(mimetype, mapping[i][1])) { + cache[mimetype] = mapping[i][0] + return mapping[i][0] + } + } +} + +function mimetype2fa(mimetype, options) { + if (typeof mimetype === 'object') { + options = mimetype + return function(mimetype) { + return mimetype2fa(mimetype, options) + } + } else { + var icon = resolve(mimetype) + if (icon && options && options.prefix) { + return options.prefix + icon + } else { + return icon + } + } +} + +return { + mimetype2fa: mimetype2fa, +} + +}); \ No newline at end of file diff --git a/muk_web_utils/static/tests/common.js b/muk_web_utils/static/tests/common.js new file mode 100644 index 0000000..2746b47 --- /dev/null +++ b/muk_web_utils/static/tests/common.js @@ -0,0 +1,38 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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_web_utils.common_tests', function (require) { +"use strict"; + +var common = require('muk_web_utils.common'); + +QUnit.module('utils', function () { + + QUnit.module('common'); + + QUnit.test('format_size', function (assert) { + assert.expect(1); + + var result = common.format_size(5000); + assert.strictEqual(result, "4.88 KiB"); + }); + +}); + +}); diff --git a/muk_web_utils/static/tests/jquery.js b/muk_web_utils/static/tests/jquery.js new file mode 100644 index 0000000..f960d5d --- /dev/null +++ b/muk_web_utils/static/tests/jquery.js @@ -0,0 +1,36 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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_web_utils.jquery_tests', function (require) { +"use strict"; + +QUnit.module('utils', function () { + + QUnit.module('jquery'); + + QUnit.test('textWidth', function (assert) { + assert.expect(1); + + var result = $.fn.textWidth("Lorem ipsum dolor sit amet"); + assert.strictEqual(result, 157); + }); + +}); + +}); diff --git a/muk_web_utils/static/tests/mimetype.js b/muk_web_utils/static/tests/mimetype.js new file mode 100644 index 0000000..986de1c --- /dev/null +++ b/muk_web_utils/static/tests/mimetype.js @@ -0,0 +1,38 @@ +/********************************************************************************** +* +* Copyright (C) 2018 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_web_utils.mimetype_tests', function (require) { +"use strict"; + +var mimetpye = require('muk_web_utils.mimetype'); + +QUnit.module('utils', function () { + + QUnit.module('mimetpye'); + + QUnit.test('mimetype2fa', function (assert) { + assert.expect(1); + + var result = mimetpye.mimetype2fa("application/vnd.oasis.opendocument.text"); + assert.strictEqual(result, "file-word-o"); + }); + +}); + +}); diff --git a/muk_web_utils/template/assets.xml b/muk_web_utils/template/assets.xml new file mode 100644 index 0000000..0b67cc6 --- /dev/null +++ b/muk_web_utils/template/assets.xml @@ -0,0 +1,36 @@ + + + + + +