���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC PK! 8### readme.txtnu[=== Tag Groups === Contributors: camthor Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=FD5ZU4EEBGSC8 Tags: cloud, tags, tag cloud, tabs, accordion, taxonomy, tag, woocommerce Requires at least: 4.4 Tested up to: 5.2.3 Stable tag: 1.22.0 Requires PHP: 5.6 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl.html == Description == Organize your WordPress tags in groups. Use highly customizable tag clouds (tabs, accordion or alphabet) in a post, page or widget. = Finally, the end of messy tags = Most websites mix up tags that should actually be separated by topics: places, people, brands, features, activities and more. Your tags, however, will become much more useful if you organize them in groups. Imagine a tag cloud where all town names appear in a "Towns" group or where you keep all tags for product sizes under "Sizes" and all tags for colors under "Colors". The Tag Groups plugin lets you do exactly that. With Tag Groups you can add a parent level to tags and make them hierarchical. Tag Groups works also great with most other (flat) taxonomies, like WooCommerce product tags. Filters and bulk actions make your work with tags much easier, and you can even filter the list of posts in your backend by the groups that their tags belong to. The plugin comes with two tag clouds where tags are sorted by groups and one alphabetical tag cloud where tags are sorted by first letters. These tag clouds can be customized with numerous parameters, and you can insert them as shortcodes into post, pages and widgets or as Gutenberg blocks. = Possible applications = * Display only specific tags in your tag cloud. * Choose which tags to display in different sections of your blog. * Change the sorting order in your tag cloud. * Customize the links, the text, the font size or the separator of your tag cloud items. * Prepend or append to each tag a custom character or the post count. * Insert into each post a tag cloud using only the tags of this post. * Easily manage huge amounts of tags or posts in the backend by dividing them into groups. * Display your tags grouped by language or by topic. * Create an alphabetical index of your tags - think of a phone book for your tags. Please find more information on the [plugin website](https://chattymango.com/tag-groups/?pk_campaign=tg&pk_kwd=readme "plugin website"). **If you find this plugin useful, please give it a [5-star rating](https://wordpress.org/support/plugin/tag-groups/reviews/?filter=5 "reviews"). Thank you!** = Multilingual websites = This plugin is officially compatible with WPML (WordPress Multilingual). That means you can use a different tag group name for each language. > ### Extra Features > > If you want to get more out of your tag groups, check out [Tag Groups Premium](https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=readme "plugin website"). The premium plugin comes with > > * an animated and searchable tag cloud: Click a group or type a tag name and see only matching tags > * a Dynamic Post Filter for the frontend: Your visitors can pick tags from groups and see all matching posts in a list; > * a meta box for the post edit screen so that you can enter and edit post tags segmented by groups; > * the option to bulk-add all tags of a group to a post with one click; > * add the same tag to multiple groups; > * custom permissions who can edit tag groups; > * a new tag cloud where you can combine the tags of specific groups into one cloud; > * and more. https://www.youtube.com/watch?v=xonGSR9VswQ > See the difference between the free and the premium plugin [in the feature comparison table](https://chattymango.com/tag-groups-base-premium-comparison/?pk_campaign=tg&pk_kwd=readme "feature comparison table"). > > You can test the plugin in a 7-day free trial. Follow us on [Facebook](https://www.facebook.com/chattymango/) or [Twitter](https://twitter.com/ChattyMango). = Other Notes = Styling created by jQuery UI who also provided the JavaScript that is used for the tabs to do their magic. Find their license in the package. We are also using the SumoSelect JavaScript plugin. == Installation == 1. Find the plugin in the list at the backend and click to install it. Or, upload the ZIP file through the admin backend. Or, upload the unzipped tag-groups folder to the /wp-content/plugins/ directory. 2. Activate the plugin through the ‘Plugins’ menu in WordPress. The plugin will create a new menu "Tag Groups" and a submenu "Tag Group Admin" in the Post section (depending on the chosen taxonomy) where you find the tag groups. After you have created some groups, you can edit your tags (or other terms) and assign them to one of these groups. A filter and a bulk action menu are available on the Tags page and you also find a filter on the Posts pages. The tabbed tag cloud (or an accordion containing the tags) can be inserted with a shortcode or a Gutenberg block. Options are listed under the "Tag Groups" main menu. Extensive information, examples and help for troubleshooting are listed [here](https://chattymango.com/tag-groups/?pk_campaign=tg&pk_kwd=readme "plugin website"). == Frequently Asked Questions == = How can I show my tags sorted into groups on a page? = Please use one of the shortcodes or Gutenberg blocks that come with the Tag Groups plugin. Since we cannot change the code of templates or other plugins, there is no possibility to make them aware of the new structure where tags are organized in groups. = When I use the shortcode I can see the content but the tags are not displayed in tabs. = Make sure you have "Use jQuery" checked on the settings page. If you use a plugin for caching pages, purge the cache and see if that helps. If you use plugins for minifying scripts or style sheets, turn them off and purge their caches. = How can I use one of these tag clouds in a widget? = Please use a text widget and insert the shortcode. = Does this plugin support tags for pages? = No. Although it might work (with additional 3rd-party plugins), it is not an officially supported feature. = Does this plugin work with categories? = No. Hierarchical taxonomies such as categories are not officially supported. = I need the plugin for a very special purpose - can you help? = Please check first if the [premium plugin](https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=readme "Tag Groups Premium") can help. If not, you can ask for [support here](https://wordpress.org/support/plugin/tag-groups). = I am desperately missing my language. But, wait.. is this actually a "frequently asked question"? = No, unfortunately it isn't. But, nevertheless, I'm glad you asked! You are warmly invited to [help us translate](https://translate.wordpress.org/projects/wp-plugins/tag-groups). == Screenshots == 1. Tag cloud ("Blitzer" theme) 2. Accordion ("Blitzer" theme) 3. Alphabetical tag cloud with first letters of tags as tabs 4. Group administration 5. Assigning tags to groups 6. Settings 7. Configuring a tag cloud in Gutenberg == Privacy == This plugin does not collect or process any personal user data unless you expressively opt-in. == Changelog == = 1.22.0 = OTHER * Updated Freemius SDK to version 2.3.0 = 1.21.4 = OTHER * Improved compatibility with the Polylang plugin. = 1.21.3 = BUG FIXES * Fixed: Post counts of tags in tag clouds were not respecting the particular group. = 1.21.0 = FEATURES * Added two more themes to the defaults (for the tabbed and the accordion tag clouds). = 1.20.3 = BUG FIXES * Fixed wrong positions of new groups after their creation. * Preventing occasional error messages when creating terms. OTHER * Added an additional consistency check of labels. * Show correct greeting message during onboarding. = 1.20.1 = BUG FIXES * Fixed issue when assigning tag to group. = 1.20.0 = FEATURES * New Setup Wizard (launches automatically, or search for "wizard" in the settings) BUG FIXES * Fixed issues in uninstall routine. OTHER * Alphabetical Tag Cloud: Fix for uppercasing of ß in Unicode canceling out all letters S = 1.19.7 = OTHER * Improved compatibility with WP-CLI. = 1.19.6 = BUG FIXES * Fixed error that prevented users with roles lower than administrator to use parts of the back end. = 1.19.5 = BUG FIXES * Fixed jumping of window to top in some browsers when opening quick edit. * Fixed first group not appearing. OTHER * Resetting the groups considers now all translations of group names. = 1.19.4 = BUG FIXES * Fixed error in PHP 5.6 = 1.19.3 = OTHER * Alphabetical Tag Cloud: Added parameter "include" to Gutenberg block. * Tabbed Tag Cloud, Accordion Tag Cloud: Moved "groups_post_id" setting in Gutenberg block to Groups section. = 1.19.1 = OTHER * Better handling of unsupported PHP 5.4. * Trial encouragement messages appear much less frequently, and they appear only once you enter Tag Groups settings. = 1.19.0 = BUG FIXES * Import/Export: Fixed bug retrieving options. = Older Versions = The complete changelog is available [here](https://chattymango.com/tag-groups/tag-groups-changelog/?pk_campaign=tg&pk_kwd=readme). == Upgrade Notice == none PK!|wfKK license.txtnu[ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . PK!{~RR"src/guten-tag-accordion/style.scssnu[/** * #.# Styles * * CSS for both Frontend+Backend. */ // Silence is silent. PK!i#src/guten-tag-accordion/editor.scssnu[/** * #.# Editor Styles * * CSS for just Backend enqueued after style.scss * which makes it higher in priority. */ @keyframes pulse { 0% { background-color: #ffffff; } 50% { background-color: #cccccc; } 100% { background-color: #ffffff; } } .chatty-mango-help-icon { margin-left: 5px; } .chatt-mango-inspector-control { .blocks-plain-text { margin-bottom: 10px; } .editor-plain-text { border: 1px solid #666; background: #EEE; padding: 1px; margin-bottom: 10px; } .Select-control { margin-bottom: 10px; } } .chatty-mango-editor { .cm-gutenberg.dashicons-before::before { line-height: 30px; margin-right: 5px; } clear: both; } .chatty-mango-help-transform { // border: 1px solid #999; background-color: #edeff0; padding: 7px; } .chatty-mango-editor { font-size: 16px; font-family: arial, helvetica; line-height: 1.5em; } .chatty-mango-editor h3 { font-size: 20px; font-family: arial, helvetica; } PK!f-ww src/guten-tag-accordion/block.jsnu[/** * BLOCK: chatty-mango-guten-tag-accorion * * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 0.38 */ // Import CSS. import './style.scss'; import './editor.scss'; import Select from 'react-select'; import apiFetch from '@wordpress/api-fetch'; const { __ } = wp.i18n; const { createBlock, registerBlockType, } = wp.blocks; const { InspectorControls, PlainText, } = wp.editor; const { SelectControl, PanelBody, ToggleControl, RangeControl } = wp.components; const { Component } = wp.element; const { siteUrl, siteLang, pluginUrl, hasPremium, } = ChattyMangoTagGroupsGlobal; const helpUrl = 'https://documentation.chattymango.com/documentation/'; const helpProduct = 'tag-groups-premium'; const helpComponent = 'accordion-tag-cloud/accordion-tag-cloud-parameters/'; const logoUrl = pluginUrl + '/assets/images/cm-tg-icon-64x64.png'; class TagGroupsHelp extends Component { render() { let href = helpUrl + helpProduct + "/" + helpComponent; if ( '' != siteLang ) { href += "?lang=" + siteLang; } href += "#" + this.props.topic; let tooltip = __( 'Click for help!' ); return ( ); } } class tagGroupsAccordionCloudParameters extends Component { // Method for setting the initial state. static getInitialState( attributes ) { let selectedGroups = []; // empty means all let selectedTaxonomies = ['post_tag']; // We need arrays for the select elements. if ( attributes.include ) { selectedGroups = attributes.include.split(",") } if ( attributes.taxonomy ) { selectedTaxonomies = attributes.taxonomy.split(",") } return { groups: [], taxonomies: [], posts: [], selectedGroups: selectedGroups, // array representation selectedTaxonomies: selectedTaxonomies, // array representation }; } // Constructing our component. With super() we are setting everything to 'this'. // Now we can access the attributes with this.props.attributes constructor() { super( ...arguments ); this.groupsEndPoint = siteUrl + '/wp-json/tag-groups/v1/groups'; // this.termsEndPoint = siteUrl + '/wp-json/tag-groups/v1/terms'; this.taxonomiesEndPoint = siteUrl + '/wp-json/tag-groups/v1/taxonomies'; this.state = this.constructor.getInitialState( this.props.attributes ); // Bind so we can use 'this' inside the method. this.getGroupsFromApi = this.getGroupsFromApi.bind( this ); this.getTaxonomiesFromApi = this.getTaxonomiesFromApi.bind( this ); this.getPostsFromApi = this.getPostsFromApi.bind( this ); this.handleChangeInclude = this.handleChangeInclude.bind( this ); this.handleChangeTaxonomy = this.handleChangeTaxonomy.bind( this ); this.toggleOptionActive = this.toggleOptionActive.bind( this ); this.toggleOptionCollapsible = this.toggleOptionCollapsible.bind( this ); this.toggleOptionMouseover = this.toggleOptionMouseover.bind( this ); this.toggleOptionHideEmpty = this.toggleOptionHideEmpty.bind( this ); this.toggleOptionAdjustSeperatorSize = this.toggleOptionAdjustSeperatorSize.bind( this ); this.toggleOptionAddPremiumFilter = this.toggleOptionAddPremiumFilter.bind( this ); this.toggleOptionHideEmptyContent = this.toggleOptionHideEmptyContent.bind( this ); this.toggleOptionShowAccordion = this.toggleOptionShowAccordion.bind( this ); this.toggleOptionShowTagCount = this.toggleOptionShowTagCount.bind( this ); // Load data from REST API. this.getGroupsFromApi(); this.getTaxonomiesFromApi(); this.getPostsFromApi(); } handleChangeInclude( options ) { let selectedGroups = options.map( function( option ) { if ( ! isNaN( option.value ) ) { return option.value; } }); // Set the state this.setState( { selectedGroups: selectedGroups } ); // Set the attributes this.props.setAttributes( { include: selectedGroups.join(',') } ); if ( selectedGroups.indexOf(0) > -1 ) { this.props.setAttributes( { show_not_assigned: 1 } ); } else { this.props.setAttributes( { show_not_assigned: 0 } ); } } handleChangeTaxonomy( options ) { let selectedTaxonomies = options.map( function( option ) { if ( typeof option.value === 'string' ) { return option.value; } }); // Set the state this.setState( { selectedTaxonomies } ); // Set the attributes this.props.setAttributes( { taxonomy: selectedTaxonomies.join(',') }); } /** * Loading Groups */ getGroupsFromApi() { // retrieve the groups apiFetch( { path: this.groupsEndPoint } ).then( groups => { if ( groups ) { this.setState({ groups }); } }); } /** * Loading Taxonomies (own REST API endpoint) */ getTaxonomiesFromApi() { // retrieve the taxonomies apiFetch( { path: this.taxonomiesEndPoint } ).then( taxonomies => { if ( taxonomies ) { this.setState({ taxonomies }); } }); } /** * Loading Posts */ getPostsFromApi() { apiFetch( { path: siteUrl + '/wp-json/wp/v2/posts?per_page=100' } ).then( fullPosts => { if ( fullPosts ) { let posts = [ { value: -1, label: __('off') }, { value: 0, label: __('use this post') } ]; fullPosts.forEach( ( fullPost ) => { posts.push({ value: fullPost.id, label: fullPost.title.rendered }); } ); this.setState({ posts }); } }); } /** * Loading Groups */ getGroupsFromApi() { // retrieve the groups jQuery.getJSON( this.groupsEndPoint, ( groups ) => { if ( groups ) { this.setState({ groups }); } } ); } toggleOptionActive() { let active = ( 1 === this.props.attributes.active ) ? 0 : 1; this.props.setAttributes( { active } ); } toggleOptionCollapsible() { let collapsible = ( 1 === this.props.attributes.collapsible ) ? 0 : 1; this.props.setAttributes( { collapsible } ); } toggleOptionMouseover() { let mouseover = ( 1 === this.props.attributes.mouseover ) ? 0 : 1; this.props.setAttributes( { mouseover } ); } toggleOptionHideEmpty( ) { let hide_empty = ( 1 === this.props.attributes.hide_empty ) ? 0 : 1; this.props.setAttributes( { hide_empty } ); } toggleOptionAdjustSeperatorSize() { let adjust_separator_size = ( 1 === this.props.attributes.adjust_separator_size ) ? 0 : 1; this.props.setAttributes( { adjust_separator_size } ); } toggleOptionAddPremiumFilter( key ) { let add_premium_filter = ( 1 === this.props.attributes.add_premium_filter ) ? 0 : 1; this.props.setAttributes( { add_premium_filter } ); } toggleOptionHideEmptyContent( ) { let hide_empty_content = ( 1 === this.props.attributes.hide_empty_content ) ? 0 : 1; this.props.setAttributes( { hide_empty_content } ); } toggleOptionShowAccordion( ) { let show_accordion = ( 1 === this.props.attributes.show_accordion ) ? 0 : 1; this.props.setAttributes( { show_accordion } ); } toggleOptionShowTagCount( ) { let show_tag_count = ( 1 === this.props.attributes.show_tag_count ) ? 0 : 1; this.props.setAttributes( { show_tag_count } ); } render() { const { attributes, setAttributes } = this.props; const { active, add_premium_filter, adjust_separator_size, amount, append, assigned_class, collapsible, custom_title, div_class, div_id, groups_post_id, header_class, heightstyle, hide_empty, hide_empty_content, inner_div_class, largest, link_append, link_target, mouseover, not_assigned_name, order, orderby, prepend, separator, separator_size, show_not_assigned, show_tag_count, show_accordion, smallest, tags_post_id, } = attributes; let optionsGroups = [], optionsTaxonomies = []; if( this.state.groups && this.state.groups.length > 0 ) { this.state.groups.forEach( ( group ) => { optionsGroups.push({ value:group.term_group, label:group.label }); }); } if( this.state.taxonomies && this.state.taxonomies.length > 0 ) { this.state.taxonomies.forEach( ( taxonomy ) => { optionsTaxonomies.push({ value:taxonomy.slug, label:taxonomy.name }); }); } if ( attributes.source !== 'gutenberg' ) { setAttributes({ source: 'gutenberg' }); } return [ (
{ if ( option ) setAttributes( { orderby: option.value } ) } } value={ orderby && typeof orderby === 'string' ? orderby : 'name' } options={ [ { value:'name', label:__('Name') }, { value:'natural', label:__('Natural sorting') }, { value:'count', label:__('Post count') }, { value:'slug', label:__('Slug') }, { value:'term_id', label:__('Term ID') }, { value:'description', label:__('Description') }, ] } /> { if ( option ) setAttributes( { link_target:option.value } ) } } value={ ( link_target && ( typeof link_target === 'string' ) ) ? link_target : '_self' } options={ [ { value:'_self', label:'_self' }, { value:'_blank', label:'_blank' }, { value:'_parent', label:'_parent' }, { value:'_top', label:'_top' }, ] } />
setAttributes( { link_append } ) } /> { hasPremium && <div> <TagGroupsHelp topic="add_premium_filter"/> <ToggleControl label={ __( 'Add filter to tags for multiple groups.' ) } checked={ add_premium_filter } onChange={ this.toggleOptionAddPremiumFilter } /> </div> } <TagGroupsHelp topic="tags_post_id"/> <label htmlFor="tg_input_tags_post_id"> { __( 'Use tags of the following post:' ) } </label> <Select id="tg_input_tags_post_id" onChange={ ( option ) => { if ( option ) setAttributes( { tags_post_id:option.value } ) } } value={ tags_post_id } options={ this.state.posts } /> </PanelBody> <PanelBody title={ __( 'Groups and Tabs' ) } initialOpen={false}> <TagGroupsHelp topic="show_accordion"/> <ToggleControl label={ __( 'Show the panels' ) } checked={ show_accordion } onChange={ this.toggleOptionShowAccordion } /> <TagGroupsHelp topic="hide_empty_content"/> <ToggleControl label={ __( 'Hide empty panels' ) } checked={ hide_empty_content } onChange={ this.toggleOptionHideEmptyContent } /> <TagGroupsHelp topic="mouseover"/> <ToggleControl label={ __( 'Open tabs on mouseover' ) } checked={ mouseover } onChange={ this.toggleOptionMouseover } /> <TagGroupsHelp topic="collapsible"/> <ToggleControl label={ __( 'Make panels collapsible' ) } checked={ collapsible } onChange={ this.toggleOptionCollapsible } /> <TagGroupsHelp topic="active"/> <ToggleControl label={ __( 'Start with expanded tabs' ) } checked={ active } onChange={ this.toggleOptionActive } /> <TagGroupsHelp topic="include"/> <label htmlFor="tg_input_include"> { __( 'Include groups' ) } </label> <Select id="tg_input_include" onChange={ this.handleChangeInclude } value={ this.state.selectedGroups } options={ optionsGroups } multi={ true } closeOnSelect={ false} removeSelected={ true } /> <TagGroupsHelp topic="heightstyle"/> <label htmlFor="tg_input_heightstyle"> { __( 'Panel height' ) } </label> <Select id="tg_input_heightstyle" onChange={ ( option ) => { if ( option ) setAttributes( { heightstyle: option.value } ) } } value={ heightstyle ? heightstyle : 'content' } options={ [ { value:'auto', label:__( 'Adjust to heighest panel.' ) }, { value:'fill', label:__( 'Fill parent element.' ) }, { value:'content', label:__( 'Adjust to own content.' ) }, ] } /> { show_not_assigned === 1 && <div> <div> <label htmlFor="tg_input_not_assigned_name"> { __( 'Label on tab for not assigned tags' ) } </label> </div> <PlainText id="tg_input_not_assigned_name" className="input-control" value={ not_assigned_name ? not_assigned_name : 'not assigned' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( not_assigned_name ) => setAttributes( { not_assigned_name } ) } /> </div> } <TagGroupsHelp topic="groups_post_id"/> <label htmlFor="tg_input_group_post_id"> { __( 'Use groups of the following post:' ) } </label> <Select id="tg_input_group_post_id" onChange={ ( option ) => { if ( option ) setAttributes( { groups_post_id:option.value } ) } } value={ groups_post_id } options={ this.state.posts } /> </PanelBody> <PanelBody title={ __( 'Advanced Styling' ) } initialOpen={false}> <div> <TagGroupsHelp topic="div_id"/> <label htmlFor="tg_input_div_id"> { '<div id="...">' } </label> </div> <PlainText id="tg_input_div_id" className="input-control" value={ div_id ? div_id : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_id ) => setAttributes( { div_id } ) } /> <div> <TagGroupsHelp topic="div_class"/> <label htmlFor="tg_input_div_class"> { __( 'outer <div class="...">' ) } </label> </div> <PlainText id="tg_input_div_class" className="input-control" value={ div_class ? div_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_class ) => setAttributes( { div_class } ) } /> <div> <TagGroupsHelp topic="header_class"/> <label htmlFor="tg_input_header_class"> { '<h3 class="...">' } </label> </div> <PlainText id="tg_input_header_class" className="input-control" value={ header_class ? header_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( header_class ) => setAttributes( { header_class } ) } /> <div> <TagGroupsHelp topic="inner_div_class"/> <label htmlFor="tg_input_inner_div_class"> { __( 'inner <div class="...">' ) } </label> </div> <PlainText id="tg_input_inner_div_class" className="input-control" value={ inner_div_class ? inner_div_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( inner_div_class ) => setAttributes( { inner_div_class } ) } /> { tags_post_id !== -1 && <div> <div> <TagGroupsHelp topic="assigned_class"/> <label htmlFor="tg_input_assigned_class"> { '<a class="..._0"> or <a class="..._1">' } </label> </div> <PlainText id="tg_input_assigned_class" className="input-control" value={ assigned_class ? assigned_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( assigned_class ) => setAttributes( { assigned_class } ) } /> </div> } </PanelBody> <div className="chatty-mango-help-transform"> <TagGroupsHelp topic="transform-your-block-for-more-options"/> <div dangerouslySetInnerHTML={{ __html: __( 'If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.' ) }}> </div> </div> </div> </InspectorControls> ), <div className="chatty-mango-editor"> <table style={{border:'none'}}> <tr> <td> <img src={logoUrl} alt='logo' style={{float:'left', margin:15}}/> </td> <td> <h3>{ __( 'Accordion Tag Cloud' ) }</h3> <div className="cm-gutenberg dashicons-before dashicons-admin-generic"> { __( 'Select this block and customize the tag cloud in the Inspector.' ) } </div> <div className="cm-gutenberg dashicons-before dashicons-welcome-view-site"> { __( 'See the output with Preview.' ) } </div> </td> </tr> </table> </div> ] } } /** * Register: a Gutenberg Block. * * @param {string} name Block name. * @param {Object} settings Block settings. * @return {?WPBlock} The block, if it has been successfully * registered; otherwise `undefined`. */ var cmTagGroupsAccordionBlock = registerBlockType( 'chatty-mango/tag-groups-cloud-accordion', { title: __( 'Accordion Tag Cloud' ), icon: 'tagcloud', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/. category: 'widgets', description: __( 'Show your tags in groups in an accordion.' ), keywords: [ __( 'accordion' ), __( 'tag cloud' ), 'Chatty Mango', ], html: false, transforms: { to: [ { type: 'block', blocks: [ 'core/shortcode' ], transform: function( attributes ) { let parameters = []; for ( var attribute in attributes ) { if (attributes.hasOwnProperty( attribute )) { if ( null !== attributes[attribute] && '' !== attributes[ attribute ] && 'source' !== attribute && cmTagGroupsAccordionBlock.attributes[ attribute ] && attributes[ attribute ] !== cmTagGroupsAccordionBlock.attributes[ attribute ].default ) { if ( typeof attributes[attribute] === 'number' ) { parameters.push( attribute + '=' + attributes[ attribute ] ); } else { parameters.push( attribute + '="' + attributes[ attribute ] + '"'); } } } } let text = '[tag_groups_accordion ' + parameters.join(' ') + ']'; return createBlock( 'core/shortcode', { text } ); }, }, ], }, supports: { html: false, }, /** * Attributes are the same as shortcode parameters **/ attributes: { source: { // internal indicator to identify Gutebergb blocks type: 'string', default: '' }, active: { // configurable in block type: 'integer', default: 1 }, adjust_separator_size: {// configurable in block type: 'integer', default: 1 }, add_premium_filter: {// configurable in block type: 'integer', default: 0 }, amount: {// configurable in block type: 'integer', default: 0 }, append: {// configurable in block type: 'string', default: '' }, assigned_class: {// configurable in block type: 'string', default: '' }, collapsible: {// configurable in block type: 'integer', default: 0 }, custom_title: {// configurable in block type: 'string', default: '' }, div_class: {// configurable in block type: 'string', default: 'tag-groups-cloud' }, div_id: {// configurable in block type: 'string', default: '' }, exclude_terms: {// only in shortcode type: 'string', default: '' }, groups_post_id: {// configurable in block type: 'integer', default: -1 }, heightstyle: {// configurable in block type: 'string', default: '' }, hide_empty: {// configurable in block type: 'integer', default: 1 }, hide_empty_content: {// configurable in block type: 'integer', default: 0 }, include: {// configurable in block type: 'string', default: '' }, include_terms: {// only in shortcode type: 'string', default: '' }, largest: {// configurable in block type: 'integer', default: 22 }, link_append: {// configurable in block type: 'string', default: '' }, link_target: {// configurable in block type: 'string', default: '_self' }, mouseover: {// configurable in block type: 'integer', default: 0 }, not_assigned_name: {// configurable in block type: 'string', default: '' }, order: {// configurable in block type: 'string', default: 'ASC' }, orderby: {// configurable in block type: 'string', default: 'name' }, prepend: {// configurable in block type: 'string', default: '' }, separator_size: {// configurable in block type: 'integer', default: 22 }, separator: {// configurable in block tpye: 'string', default: '' }, show_not_assigned: {// indirectly configurable in block type: 'integer', default: 0 }, show_all_groups: {// only in shortcode type: 'integer', default: 0 }, show_accordion: { // configurable in block type: 'integer', default: 1 }, show_tag_count: { // configurable in block type: 'integer', default: 1 }, smallest: {// configurable in block type: 'integer', default: 12 }, tags_post_id: {// configurable in block type: 'integer', default: -1 }, taxonomy: {// configurable in block type: 'string', default: '' }, header_class: {// configurable in block type: 'string', default: '' }, inner_div_class: {// configurable in block type: 'string', default: '' }, }, /** * Composing and rendering the editor content and control elements */ edit: tagGroupsAccordionCloudParameters, /** * We don't render any HTML when saving */ save: function( props ) { return null; }, } ); PK�������!�G �� �� ��src/init.phpnu�[��������<?php /** * Blocks Initializer * * Enqueue CSS/JS of all the blocks. * * @since 0.38 * @package Tag Groups */ // Exit if accessed directly. if ( ! defined( 'ABSPATH' ) ) { exit; } /** * Enqueue Gutenberg block assets for both frontend + backend. * * `wp-blocks`: includes block type registration and related functions. * * @since 1.0.0 */ function chatty_mango_tag_groups_block_assets() { // Styles. wp_enqueue_style( 'chatty-mango_tag-groups-style-css', // Handle. plugins_url( 'dist/blocks.style.build.css', dirname( __FILE__ ) ), // Block style CSS. array( 'wp-blocks' ) // Dependency to include the CSS after it. // filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ) // Version: filemtime — Gets file modification time. ); } // End function chatty_mango_tag_groups_block_assets(). // Hook: Frontend assets. add_action( 'enqueue_block_assets', 'chatty_mango_tag_groups_block_assets' ); /** * Enqueue Gutenberg block assets for backend editor. * * `wp-blocks`: includes block type registration and related functions. * `wp-element`: includes the WordPress Element abstraction for describing the structure of your blocks. * `wp-i18n`: To internationalize the block's text. * * @since 1.0.0 */ function chatty_mango_tag_groups_editor_assets() { global $tag_groups_premium_fs_sdk; // Scripts. wp_enqueue_script( 'chatty-mango_tag-groups-block-js', // Handle. plugins_url( '/dist/blocks.build.js', dirname( __FILE__ ) ), // Block.build.js: We register the block here. Built with Webpack. array( 'wp-blocks', 'wp-i18n', 'wp-element', 'wp-components', 'wp-editor' ) // Dependencies, defined above. // filemtime( plugin_dir_path( __FILE__ ) . 'block.js' ) // Version: filemtime — Gets file modification time. ); // make some data available $args = array( 'siteUrl' => get_option( 'siteurl' ), 'siteLang' => '', // for future use 'pluginUrl' => TAG_GROUPS_PLUGIN_URL, 'hasPremium' => $tag_groups_premium_fs_sdk->can_use_premium_code(), ); wp_localize_script( 'chatty-mango_tag-groups-block-js', 'ChattyMangoTagGroupsGlobal', $args ); // Styles. wp_enqueue_style( 'chatty-mango_tag-groups-block-editor-css', // Handle. plugins_url( 'dist/blocks.editor.build.css', dirname( __FILE__ ) ), // Block editor CSS. array( 'wp-edit-blocks' ) // Dependency to include the CSS after it. // filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ) // Version: filemtime — Gets file modification time. ); if ( function_exists( 'gutenberg_get_jed_locale_data' ) ) { wp_add_inline_script( 'wp-i18n', 'wp.i18n.setLocaleData(' . json_encode( gutenberg_get_jed_locale_data('tag-groups') ) . ');' ); } } // End function chatty_mango_tag_groups_editor_assets(). // Hook: Editor assets. add_action( 'enqueue_block_editor_assets', 'chatty_mango_tag_groups_editor_assets' ); PK�������!�;n "��������src/common.scssnu�[��������/** * #.# Common SCSS * * Can include things like variables and mixins * that are used across the project. */ // Colors. $black: rgb(41, 41, 41); $white: #f4f4f4; $gray: #dedede; $green: #bada55; $red: orangered; PK�������!�{~R���R���!��src/guten-tag-alphabet/style.scssnu�[��������/** * #.# Styles * * CSS for both Frontend+Backend. */ // Silence is silent. PK�������!�i����"��src/guten-tag-alphabet/editor.scssnu�[��������/** * #.# Editor Styles * * CSS for just Backend enqueued after style.scss * which makes it higher in priority. */ @keyframes pulse { 0% { background-color: #ffffff; } 50% { background-color: #cccccc; } 100% { background-color: #ffffff; } } .chatty-mango-help-icon { margin-left: 5px; } .chatt-mango-inspector-control { .blocks-plain-text { margin-bottom: 10px; } .editor-plain-text { border: 1px solid #666; background: #EEE; padding: 1px; margin-bottom: 10px; } .Select-control { margin-bottom: 10px; } } .chatty-mango-editor { .cm-gutenberg.dashicons-before::before { line-height: 30px; margin-right: 5px; } clear: both; } .chatty-mango-help-transform { // border: 1px solid #999; background-color: #edeff0; padding: 7px; } .chatty-mango-editor { font-size: 16px; font-family: arial, helvetica; line-height: 1.5em; } .chatty-mango-editor h3 { font-size: 20px; font-family: arial, helvetica; } PK�������!�3دNj��Nj����src/guten-tag-alphabet/block.jsnu�[��������/** * BLOCK: tag-groups-alphabet-tabs * * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 0.38 */ // Import CSS. import './style.scss'; import './editor.scss'; import Select from 'react-select'; import apiFetch from '@wordpress/api-fetch'; const { __ } = wp.i18n; const { createBlock, registerBlockType, } = wp.blocks; const { InspectorControls, PlainText, } = wp.editor; const { SelectControl, PanelBody, ToggleControl, RangeControl, ServerSideRender } = wp.components; const { Component, } = wp.element; const { siteUrl, siteLang, pluginUrl, hasPremium, } = ChattyMangoTagGroupsGlobal; const helpUrl = 'https://documentation.chattymango.com/documentation/'; const helpProduct = 'tag-groups-premium'; const helpComponent = 'alphabetical-tag-cloud/alphabetical-tag-cloud-parameters/'; const logoUrl = pluginUrl + '/assets/images/cm-tg-icon-64x64.png'; class TagGroupsHelp extends Component { render() { let href = helpUrl + helpProduct + "/" + helpComponent; if ( '' != siteLang ) { href += "?lang=" + siteLang; } href += "#" + this.props.topic; let tooltip = __( 'Click for help!' ); return ( <div> <a href={href} target="_blank" style={{textDecoration: 'none'}} title={tooltip}> <span className="dashicons dashicons-editor-help tg_right chatty-mango-help-icon"></span> </a> </div> ); } } class tagGroupsAlphabeticalCloudParameters extends Component { // Method for setting the initial state. static getInitialState( attributes ) { let selectedGroups = []; // empty means all let selectedTaxonomies = ['post_tag']; // We need arrays for the select elements. if ( attributes.include ) { selectedGroups = attributes.include.split(",") } if ( attributes.taxonomy ) { selectedTaxonomies = attributes.taxonomy.split(",") } return { groups: [], taxonomies: [], posts: [], selectedTaxonomies: selectedTaxonomies, // array representation }; } // Constructing our component. With super() we are setting everything to 'this'. // Now we can access the attributes with this.props.attributes constructor() { super( ...arguments ); this.groupsEndPoint = siteUrl + '/wp-json/tag-groups/v1/groups'; this.termsEndPoint = siteUrl + '/wp-json/tag-groups/v1/terms'; this.taxonomiesEndPoint = siteUrl + '/wp-json/tag-groups/v1/taxonomies'; this.state = this.constructor.getInitialState( this.props.attributes ); // Bind so we can use 'this' inside the method. this.getGroupsFromApi = this.getGroupsFromApi.bind( this ); this.getTaxonomiesFromApi = this.getTaxonomiesFromApi.bind( this ); this.getPostsFromApi = this.getPostsFromApi.bind( this ); this.handleChangeInclude = this.handleChangeInclude.bind( this ); this.handleChangeTaxonomy = this.handleChangeTaxonomy.bind( this ); this.toggleOptionActive = this.toggleOptionActive.bind( this ); this.toggleOptionCollapsible = this.toggleOptionCollapsible.bind( this ); this.toggleOptionMouseover = this.toggleOptionMouseover.bind( this ); this.toggleOptionHideEmpty = this.toggleOptionHideEmpty.bind( this ); this.toggleOptionAdjustSeperatorSize = this.toggleOptionAdjustSeperatorSize.bind( this ); this.toggleOptionHideEmptyTabs = this.toggleOptionHideEmptyTabs.bind( this ); this.toggleOptionShowTagCount = this.toggleOptionShowTagCount.bind( this ); // Load data from REST API. this.getGroupsFromApi(); this.getTaxonomiesFromApi(); this.getPostsFromApi(); } handleChangeInclude( options ) { let selectedGroups = options.map( function( option ) { if ( ! isNaN( option.value ) ) { return option.value; } }); // Set the state this.setState( { selectedGroups: selectedGroups } ); // Set the attributes this.props.setAttributes( { include: selectedGroups.join(',') } ); if ( selectedGroups.indexOf(0) > -1 ) { this.props.setAttributes( { show_not_assigned: 1 } ); } else { this.props.setAttributes( { show_not_assigned: 0 } ); } } handleChangeTaxonomy( options ) { let selectedTaxonomies = options.map( function( option ) { if ( typeof option.value === 'string' ) { return option.value; } }); // Set the state this.setState( { selectedTaxonomies } ); // Set the attributes this.props.setAttributes( { taxonomy: selectedTaxonomies.join(',') }); } /** * Loading Groups */ getGroupsFromApi() { // retrieve the groups apiFetch( { path: this.groupsEndPoint } ).then( groups => { if ( groups ) { this.setState({ groups }); } }); } /** * Loading Taxonomies (own REST API endpoint) */ getTaxonomiesFromApi() { // retrieve the taxonomies apiFetch( { path: this.taxonomiesEndPoint } ).then( taxonomies => { if ( taxonomies ) { this.setState({ taxonomies }); } }); } /** * Loading Posts */ getPostsFromApi() { apiFetch( { path: siteUrl + '/wp-json/wp/v2/posts?per_page=100' } ).then( fullPosts => { if ( fullPosts ) { let posts = [ { value: -1, label: __('off') }, { value: 0, label: __('use this post') } ]; fullPosts.forEach( ( fullPost ) => { posts.push({ value: fullPost.id, label: fullPost.title.rendered }); } ); this.setState({ posts }); } }); } toggleOptionActive() { let active = ( 1 === this.props.attributes.active ) ? 0 : 1; this.props.setAttributes( { active } ); } toggleOptionCollapsible() { let collapsible = ( 1 === this.props.attributes.collapsible ) ? 0 : 1; this.props.setAttributes( { collapsible } ); } toggleOptionMouseover() { let mouseover = ( 1 === this.props.attributes.mouseover ) ? 0 : 1; this.props.setAttributes( { mouseover } ); } toggleOptionHideEmpty( ) { let hide_empty = ( 1 === this.props.attributes.hide_empty ) ? 0 : 1; this.props.setAttributes( { hide_empty } ); } toggleOptionAdjustSeperatorSize() { let adjust_separator_size = ( 1 === this.props.attributes.adjust_separator_size ) ? 0 : 1; this.props.setAttributes( { adjust_separator_size } ); } toggleOptionHideEmptyTabs( ) { let hide_empty_tabs = ( 1 === this.props.attributes.hide_empty_tabs ) ? 0 : 1; this.props.setAttributes( { hide_empty_tabs } ); } toggleOptionShowTagCount( ) { let show_tag_count = ( 1 === this.props.attributes.show_tag_count ) ? 0 : 1; this.props.setAttributes( { show_tag_count } ); } render() { const { attributes, setAttributes } = this.props; const { active, adjust_separator_size, amount, append, assigned_class, collapsible, custom_title, div_class, div_id, exclude_letters, hide_empty, hide_empty_tabs, include_letters, largest, link_append, link_target, mouseover, order, orderby, prepend, separator, separator_size, show_tag_count, smallest, tags_post_id, ul_class } = attributes; let optionsGroups = [], optionsTaxonomies = []; if( this.state.groups && this.state.groups.length > 0 ) { this.state.groups.forEach( ( group ) => { optionsGroups.push({ value:group.term_group, label:group.label }); }); } if( this.state.taxonomies && this.state.taxonomies.length > 0 ) { this.state.taxonomies.forEach( ( taxonomy ) => { optionsTaxonomies.push({ value:taxonomy.slug, label:taxonomy.name }); }); } if ( attributes.source !== 'gutenberg' ) { setAttributes({ source: 'gutenberg' }); } return [ ( <InspectorControls key='inspector'> <div className='chatt-mango-inspector-control'> <PanelBody title={ __( 'Tags and Terms' ) } initialOpen={false}> <TagGroupsHelp topic="taxonomy"/> <label htmlFor="tg_input_taxonomy"> { __( 'Include taxonomies' ) } </label> <Select id="tg_input_taxonomy" onChange={this.handleChangeTaxonomy} value={this.state.selectedTaxonomies} options={ optionsTaxonomies } multi={ true } closeOnSelect={ false} removeSelected={ true } /> <TagGroupsHelp topic="smallest"/> <RangeControl label={ __( 'Smallest font size' ) } value={ smallest ? Number( smallest ) : 12 } onChange={ ( value ) => { if ( value <= largest && value < 73 ) setAttributes( { smallest: value } ) } } min={ 6 } max={ 72 } /> <TagGroupsHelp topic="largest"/> <RangeControl label={ __( 'Largest font size' ) } value={ largest ? Number( largest ) : 22 } onChange={ ( value ) => { if ( smallest <= value && value > 5 ) setAttributes( { largest: value } ) } } min={ 6 } max={ 72 } /> <TagGroupsHelp topic="amount"/> <RangeControl label={ __( 'Tags per group' ) + ( amount == 0 ? ': ' + __( 'unlimited' ) : '' ) } value={ amount ? Number( amount ) : 0 } onChange={ ( amount ) => setAttributes( { amount } ) } min={ 0 } max={ 200 } /> <TagGroupsHelp topic="orderby"/> <label htmlFor="tg_input_orderby"> { __( 'Order tags by' ) } </label> <Select id="tg_input_orderby" onChange={ ( option ) => { if ( option ) setAttributes( { orderby: option.value } ) } } value={ orderby && typeof orderby === 'string' ? orderby : 'name' } options={ [ { value:'name', label:__('Name') }, { value:'natural', label:__('Natural sorting') }, { value:'count', label:__('Post count') }, { value:'slug', label:__('Slug') }, { value:'term_id', label:__('Term ID') }, { value:'description', label:__('Description') }, ] } /> <TagGroupsHelp topic="order"/> <label htmlFor="tg_input_order"> { __( 'Sort order' ) } </label> <Select id="tg_input_order" onChange={ ( option ) => { if ( option ) setAttributes( { order: option.value } ) } } value={ order && typeof order === 'string' ? order.toUpperCase() : 'ASC' } options={ [ { value:'ASC', label:__('Ascending') }, { value:'DESC', label:__('Descending') } ] } /> <TagGroupsHelp topic="hide_empty"/> <ToggleControl label={ __( 'Hide empty tags' ) } checked={ hide_empty } onChange={ this.toggleOptionHideEmpty } /> <div> <TagGroupsHelp topic="separator"/> <label htmlFor="tg_input_separator"> { __( 'Separator' ) } </label> </div> <PlainText id="tg_input_separator" className="input-control" value={ separator ? separator : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( separator ) => setAttributes( { separator } ) } /> { separator && <div> <TagGroupsHelp topic="adjust_separator_size"/> <ToggleControl label={ __( 'Adjust separator size to following tag' ) } checked={ adjust_separator_size } onChange={ this.toggleOptionAdjustSeperatorSize } /> { ! adjust_separator_size && <div> <TagGroupsHelp topic="separator_size"/> <RangeControl label={ __( 'Separator size' ) } value={ separator_size ? Number( separator_size ) : 22 } onChange={ ( separator_size ) => setAttributes( { separator_size } ) } min={ 6 } max={ 144 } /> </div> } </div> } <TagGroupsHelp topic="prepend"/> <div> <label htmlFor="tg_input_prepend"> { __( 'Prepend' ) } </label> </div> <PlainText id="tg_input_prepend" className="input-control" value={ prepend ? prepend : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( prepend ) => setAttributes( { prepend } ) } /> <TagGroupsHelp topic="append"/> <div> <label htmlFor="tg_input_append"> { __( 'Append' ) } </label> </div> <PlainText id="tg_input_append" className="input-control" value={ append ? append : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( append ) => setAttributes( { append } ) } /> { ! custom_title && <div> <TagGroupsHelp topic="show_tag_count"/> <ToggleControl label={ __( 'Show post count in the tooltip' ) } checked={ show_tag_count } onChange={ this.toggleOptionShowTagCount } /> </div> } <div> <TagGroupsHelp topic="custom_title"/> <label htmlFor="tg_input_custom_title"> { __( 'Custom title' ) } </label> </div> <PlainText id="tg_input_custom_title" className="input-control" value={ custom_title ? custom_title : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( custom_title ) => setAttributes( { custom_title } ) } /> <TagGroupsHelp topic="link_target"/> <label htmlFor="tg_input_link_target"> { __( 'Link target' ) } </label> <Select id="tg_input_link_target" onChange={ ( option ) => { if ( option ) setAttributes( { link_target:option.value } ) } } value={ ( link_target && ( typeof link_target === 'string' ) ) ? link_target : '_self' } options={ [ { value:'_self', label:'_self' }, { value:'_blank', label:'_blank' }, { value:'_parent', label:'_parent' }, { value:'_top', label:'_top' }, ] } /> <div> <label htmlFor="tg_input_link_append"> { __( 'Append to link' ) } </label> </div> <PlainText id="tg_input_link_append" className="input-control" value={ link_append ? link_append : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( link_append ) => setAttributes( { link_append } ) } /> <TagGroupsHelp topic="tags_post_id"/> <label htmlFor="tg_input_tags_post_id"> { __( 'Use tags of the following post:' ) } </label> <Select id="tg_input_tags_post_id" onChange={ ( option ) => { if ( option ) setAttributes( { tags_post_id:option.value } ) } } value={ tags_post_id } options={ this.state.posts } /> </PanelBody> <PanelBody title={ __( 'Tabs' ) } initialOpen={false}> <div> <TagGroupsHelp topic="include_letters"/> <label htmlFor="tg_input_include_letters"> { 'Include letters' } </label> </div> <PlainText id="tg_input_include_letters" className="input-control" value={ include_letters ? include_letters : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( include_letters ) => setAttributes( { include_letters } ) } /> <div> <TagGroupsHelp topic="exclude_letters"/> <label htmlFor="tg_input_exclude_letters"> { 'Exclude letters' } </label> </div> <PlainText id="tg_input_exclude_letters" className="input-control" value={ exclude_letters ? exclude_letters : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( exclude_letters ) => setAttributes( { exclude_letters } ) } /> <TagGroupsHelp topic="hide_empty_tabs"/> <ToggleControl label={ __( 'Hide empty tabs' ) } checked={ hide_empty_tabs } onChange={ this.toggleOptionHideEmptyTabs } /> <TagGroupsHelp topic="mouseover"/> <ToggleControl label={ __( 'Open tabs on mouseover' ) } checked={ mouseover } onChange={ this.toggleOptionMouseover } /> <TagGroupsHelp topic="collapsible"/> <ToggleControl label={ __( 'Make panels collapsible' ) } checked={ collapsible } onChange={ this.toggleOptionCollapsible } /> <TagGroupsHelp topic="active"/> <ToggleControl label={ __( 'Start with expanded tabs' ) } checked={ active } onChange={ this.toggleOptionActive } /> </PanelBody> <PanelBody title={ __( 'Groups' ) } initialOpen={false}> <TagGroupsHelp topic="include"/> <label htmlFor="tg_input_include"> { __( 'Include groups' ) } </label> <Select id="tg_input_include" onChange={ this.handleChangeInclude } value={ this.state.selectedGroups } options={ optionsGroups } multi={ true } closeOnSelect={ false} removeSelected={ true } /> </PanelBody> <PanelBody title={ __( 'Advanced Styling' ) } initialOpen={false}> <div> <TagGroupsHelp topic="div_id"/> <label htmlFor="tg_input_div_id"> { '<div id="...">' } </label> </div> <PlainText id="tg_input_div_id" className="input-control" value={ div_id ? div_id : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_id ) => setAttributes( { div_id } ) } /> <div> <TagGroupsHelp topic="div_class"/> <label htmlFor="tg_input_div_class"> { '<div class="...">' } </label> </div> <PlainText id="tg_input_div_class" className="input-control" value={ div_class ? div_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_class ) => setAttributes( { div_class } ) } /> <div> <TagGroupsHelp topic="ul_class"/> <label htmlFor="tg_input_ul_class"> { '<ul class="...">' } </label> </div> <PlainText id="tg_input_ul_class" className="input-control" value={ ul_class ? ul_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( ul_class ) => setAttributes( { ul_class } ) } /> { tags_post_id !== -1 && <div> <div> <TagGroupsHelp topic="assigned_class"/> <label htmlFor="tg_input_assigned_class"> { '<a class="..._0"> or <a class="..._1">' } </label> </div> <PlainText id="tg_input_assigned_class" className="input-control" value={ assigned_class ? assigned_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( assigned_class ) => setAttributes( { assigned_class } ) } /> </div> } </PanelBody> <div className="chatty-mango-help-transform"> <TagGroupsHelp topic="transform-your-block-for-more-options"/> <div dangerouslySetInnerHTML={{ __html: __( 'If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.' ) }}> </div> </div> </div> </InspectorControls> ), <div className="chatty-mango-editor"> <table style={{border:'none'}}> <tr> <td> <img src={logoUrl} alt='logo' style={{float:'left', margin:15}}/> </td> <td> <h3>{ __( 'Alphabetical Tag Cloud' ) }</h3> <div className="cm-gutenberg dashicons-before dashicons-admin-generic"> { __( 'Select this block and customize the tag cloud in the Inspector.' ) } </div> <div className="cm-gutenberg dashicons-before dashicons-welcome-view-site"> { __( 'See the output with Preview.' ) } </div> </td> </tr> </table> </div> ] } } /** * Register: a Gutenberg Block. * * @param {string} name Block name. * @param {Object} settings Block settings. * @return {?WPBlock} The block, if it has been successfully * registered; otherwise `undefined`. */ var cmTagGroupsAlphabetBlock = registerBlockType( 'chatty-mango/tag-groups-alphabet-tabs', { title: __( 'Alphabetical Tag Cloud' ), icon: 'tagcloud', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/. category: 'widgets', description: __( 'Show your tags under tabs sorted by first letters.' ), keywords: [ __( 'alphabet' ), __( 'tag cloud' ), 'Chatty Mango', ], html: false, transforms: { to: [ { type: 'block', blocks: [ 'core/shortcode' ], transform: function( attributes ) { let parameters = []; for ( var attribute in attributes ) { if (attributes.hasOwnProperty( attribute )) { if ( null !== attributes[attribute] && '' !== attributes[ attribute ] && 'source' !== attribute && cmTagGroupsAlphabetBlock.attributes[ attribute ] && attributes[ attribute ] !== cmTagGroupsAlphabetBlock.attributes[ attribute ].default ) { if ( typeof attributes[attribute] === 'number' ) { parameters.push( attribute + '=' + attributes[ attribute ] ); } else { parameters.push( attribute + '="' + attributes[ attribute ] + '"'); } } } } let text = '[tag_groups_alphabet_tabs ' + parameters.join(' ') + ']'; return createBlock( 'core/shortcode', { text } ); }, }, ], }, supports: { html: false, }, /** * Attributes are the same as shortcode parameters **/ attributes: { source: { // internal indicator to identify Gutebergb blocks type: 'string', default: '' }, active: { // configurable in block type: 'integer', default: 1 }, adjust_separator_size: {// configurable in block type: 'integer', default: 1 }, amount: {// configurable in block type: 'integer', default: 0 }, append: {// configurable in block type: 'string', default: '' }, assigned_class: {// configurable in block type: 'string', default: '' }, collapsible: {// configurable in block type: 'integer', default: 0 }, custom_title: {// configurable in block type: 'string', default: '' }, div_class: {// configurable in block type: 'string', default: 'tag-groups-cloud' }, div_id: {// configurable in block type: 'string', default: '' }, exclude_letters: {// only in shortcode type: 'string', default: '' }, exclude_terms: {// only in shortcode type: 'string', default: '' }, hide_empty: {// configurable in block type: 'integer', default: 1 }, hide_empty_tabs: {// configurable in block type: 'integer', default: 0 }, include: {// configurable in block type: 'string', default: '' }, include_letters: {// only in shortcode type: 'string', default: '' }, include_terms: {// only in shortcode type: 'string', default: '' }, largest: {// configurable in block type: 'integer', default: 22 }, link_append: {// configurable in block type: 'string', default: '' }, link_target: {// configurable in block type: 'string', default: '_self' }, mouseover: {// configurable in block type: 'integer', default: 0 }, order: {// configurable in block type: 'string', default: 'ASC' }, orderby: {// configurable in block type: 'string', default: 'name' }, prepend: {// configurable in block type: 'string', default: '' }, separator_size: {// configurable in block type: 'integer', default: 22 }, separator: {// configurable in block tpye: 'string', default: '' }, show_tag_count: { // configurable in block type: 'integer', default: 1 }, smallest: {// configurable in block type: 'integer', default: 12 }, tags_post_id: {// configurable in block type: 'integer', default: -1 }, taxonomy: {// configurable in block type: 'string', default: '' }, ul_class: {// configurable in block type: 'string', default: '' }, }, /** * Composing and rendering the editor content and control elements */ edit: tagGroupsAlphabeticalCloudParameters, /** * We don't render any HTML when saving */ save: function( props ) { return null; }, } ); PK�������!�{~R���R�����src/guten-tag-tabs/style.scssnu�[��������/** * #.# Styles * * CSS for both Frontend+Backend. */ // Silence is silent. PK�������!�i������src/guten-tag-tabs/editor.scssnu�[��������/** * #.# Editor Styles * * CSS for just Backend enqueued after style.scss * which makes it higher in priority. */ @keyframes pulse { 0% { background-color: #ffffff; } 50% { background-color: #cccccc; } 100% { background-color: #ffffff; } } .chatty-mango-help-icon { margin-left: 5px; } .chatt-mango-inspector-control { .blocks-plain-text { margin-bottom: 10px; } .editor-plain-text { border: 1px solid #666; background: #EEE; padding: 1px; margin-bottom: 10px; } .Select-control { margin-bottom: 10px; } } .chatty-mango-editor { .cm-gutenberg.dashicons-before::before { line-height: 30px; margin-right: 5px; } clear: both; } .chatty-mango-help-transform { // border: 1px solid #999; background-color: #edeff0; padding: 7px; } .chatty-mango-editor { font-size: 16px; font-family: arial, helvetica; line-height: 1.5em; } .chatty-mango-editor h3 { font-size: 20px; font-family: arial, helvetica; } PK�������!�C{Wp��Wp����src/guten-tag-tabs/block.jsnu�[��������/** * BLOCK: chatty-mango-guten-tag-tabs * * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 0.38 */ // Import CSS. import './style.scss'; import './editor.scss'; import Select from 'react-select'; import apiFetch from '@wordpress/api-fetch'; const { __ } = wp.i18n; const { createBlock, registerBlockType, } = wp.blocks; const { InspectorControls, PlainText, } = wp.editor; const { SelectControl, PanelBody, ToggleControl, RangeControl, ServerSideRender } = wp.components; const { Component, } = wp.element; const { siteUrl, siteLang, pluginUrl, hasPremium, } = ChattyMangoTagGroupsGlobal; const helpUrl = 'https://documentation.chattymango.com/documentation/'; const helpProduct = 'tag-groups-premium'; const helpComponent = 'tabbed-tag-cloud/tabbed-tag-cloud-parameters/'; const logoUrl = pluginUrl + '/assets/images/cm-tg-icon-64x64.png'; class TagGroupsHelp extends Component { render() { let href = helpUrl + helpProduct + "/" + helpComponent; if ( '' != siteLang ) { href += "?lang=" + siteLang; } href += "#" + this.props.topic; let tooltip = __( 'Click for help!' ); return ( <div> <a href={href} target="_blank" style={{textDecoration: 'none'}} title={tooltip}> <span className="dashicons dashicons-editor-help tg_right chatty-mango-help-icon"></span> </a> </div> ); } } class tagGroupsTabbedCloudParameters extends Component { // Method for setting the initial state. static getInitialState( attributes ) { let selectedGroups = []; // empty means all let selectedTaxonomies = ['post_tag']; // We need arrays for the select elements. if ( attributes.include ) { selectedGroups = attributes.include.split(",") } if ( attributes.taxonomy ) { selectedTaxonomies = attributes.taxonomy.split(",") } return { groups: [], taxonomies: [], posts: [], selectedGroups: selectedGroups, // array representation selectedTaxonomies: selectedTaxonomies, // array representation }; } // Constructing our component. With super() we are setting everything to 'this'. // Now we can access the attributes with this.props.attributes constructor() { super( ...arguments ); this.groupsEndPoint = siteUrl + '/wp-json/tag-groups/v1/groups'; this.termsEndPoint = siteUrl + '/wp-json/tag-groups/v1/terms'; this.taxonomiesEndPoint = siteUrl + '/wp-json/tag-groups/v1/taxonomies'; this.state = this.constructor.getInitialState( this.props.attributes ); // Bind so we can use 'this' inside the method. this.getGroupsFromApi = this.getGroupsFromApi.bind( this ); this.getTaxonomiesFromApi = this.getTaxonomiesFromApi.bind( this ); this.getPostsFromApi = this.getPostsFromApi.bind( this ); this.handleChangeInclude = this.handleChangeInclude.bind( this ); this.handleChangeTaxonomy = this.handleChangeTaxonomy.bind( this ); this.toggleOptionActive = this.toggleOptionActive.bind( this ); this.toggleOptionCollapsible = this.toggleOptionCollapsible.bind( this ); this.toggleOptionMouseover = this.toggleOptionMouseover.bind( this ); this.toggleOptionHideEmpty = this.toggleOptionHideEmpty.bind( this ); this.toggleOptionAdjustSeperatorSize = this.toggleOptionAdjustSeperatorSize.bind( this ); this.toggleOptionAddPremiumFilter = this.toggleOptionAddPremiumFilter.bind( this ); this.toggleOptionHideEmptyTabs = this.toggleOptionHideEmptyTabs.bind( this ); this.toggleOptionShowTabs = this.toggleOptionShowTabs.bind( this ); this.toggleOptionShowTagCount = this.toggleOptionShowTagCount.bind( this ); // Load data from REST API. this.getGroupsFromApi(); this.getTaxonomiesFromApi(); this.getPostsFromApi(); } handleChangeInclude( options ) { let selectedGroups = options.map( function( option ) { if ( ! isNaN( option.value ) ) { return option.value; } }); // Set the state this.setState( { selectedGroups: selectedGroups } ); // Set the attributes this.props.setAttributes( { include: selectedGroups.join(',') } ); if ( selectedGroups.indexOf(0) > -1 ) { this.props.setAttributes( { show_not_assigned: 1 } ); } else { this.props.setAttributes( { show_not_assigned: 0 } ); } } handleChangeTaxonomy( options ) { let selectedTaxonomies = options.map( function( option ) { if ( typeof option.value === 'string' ) { return option.value; } }); // Set the state this.setState( { selectedTaxonomies } ); // Set the attributes this.props.setAttributes( { taxonomy: selectedTaxonomies.join(',') }); } /** * Loading Groups */ getGroupsFromApi() { // retrieve the groups apiFetch( { path: this.groupsEndPoint } ).then( groups => { if ( groups ) { this.setState({ groups }); } }); } /** * Loading Taxonomies (own REST API endpoint) */ getTaxonomiesFromApi() { // retrieve the taxonomies apiFetch( { path: this.taxonomiesEndPoint } ).then( taxonomies => { if ( taxonomies ) { this.setState({ taxonomies }); } }); } /** * Loading Posts */ getPostsFromApi() { apiFetch( { path: siteUrl + '/wp-json/wp/v2/posts?per_page=100' } ).then( fullPosts => { if ( fullPosts ) { let posts = [ { value: -1, label: __('off') }, { value: 0, label: __('use this post') } ]; fullPosts.forEach( ( fullPost ) => { posts.push({ value: fullPost.id, label: fullPost.title.rendered }); } ); this.setState({ posts }); } }); } toggleOptionActive() { let active = ( 1 === this.props.attributes.active ) ? 0 : 1; this.props.setAttributes( { active } ); } toggleOptionCollapsible() { let collapsible = ( 1 === this.props.attributes.collapsible ) ? 0 : 1; this.props.setAttributes( { collapsible } ); } toggleOptionMouseover() { let mouseover = ( 1 === this.props.attributes.mouseover ) ? 0 : 1; this.props.setAttributes( { mouseover } ); } toggleOptionHideEmpty( ) { let hide_empty = ( 1 === this.props.attributes.hide_empty ) ? 0 : 1; this.props.setAttributes( { hide_empty } ); } toggleOptionAdjustSeperatorSize() { let adjust_separator_size = ( 1 === this.props.attributes.adjust_separator_size ) ? 0 : 1; this.props.setAttributes( { adjust_separator_size } ); } toggleOptionAddPremiumFilter( key ) { let add_premium_filter = ( 1 === this.props.attributes.add_premium_filter ) ? 0 : 1; this.props.setAttributes( { add_premium_filter } ); } toggleOptionHideEmptyTabs( ) { let hide_empty_tabs = ( 1 === this.props.attributes.hide_empty_tabs ) ? 0 : 1; this.props.setAttributes( { hide_empty_tabs } ); } toggleOptionShowTabs( ) { let show_tabs = ( 1 === this.props.attributes.show_tabs ) ? 0 : 1; this.props.setAttributes( { show_tabs } ); } toggleOptionShowTagCount( ) { let show_tag_count = ( 1 === this.props.attributes.show_tag_count ) ? 0 : 1; this.props.setAttributes( { show_tag_count } ); } render() { const { attributes, setAttributes } = this.props; const { active, add_premium_filter, adjust_separator_size, amount, append, assigned_class, collapsible, custom_title, div_class, div_id, groups_post_id, hide_empty, hide_empty_tabs, largest, link_append, link_target, mouseover, not_assigned_name, order, orderby, prepend, separator, separator_size, show_not_assigned, show_tag_count, show_tabs, smallest, tags_post_id, ul_class } = attributes; let optionsGroups = [], optionsTaxonomies = []; if( this.state.groups && this.state.groups.length > 0 ) { this.state.groups.forEach( ( group ) => { optionsGroups.push({ value:group.term_group, label:group.label }); }); } if( this.state.taxonomies && this.state.taxonomies.length > 0 ) { this.state.taxonomies.forEach( ( taxonomy ) => { optionsTaxonomies.push({ value:taxonomy.slug, label:taxonomy.name }); }); } if ( attributes.source !== 'gutenberg' ) { setAttributes({ source: 'gutenberg' }); } return [ ( <InspectorControls key='inspector'> <div className='chatt-mango-inspector-control'> <PanelBody title={ __( 'Tags and Terms' ) } initialOpen={false}> <TagGroupsHelp topic="taxonomy"/> <label htmlFor="tg_input_taxonomy"> { __( 'Include taxonomies' ) } </label> <Select id="tg_input_taxonomy" onChange={this.handleChangeTaxonomy} value={this.state.selectedTaxonomies} options={ optionsTaxonomies } multi={ true } closeOnSelect={ false} removeSelected={ true } /> <TagGroupsHelp topic="smallest"/> <RangeControl label={ __( 'Smallest font size' ) } value={ smallest ? Number( smallest ) : 12 } onChange={ ( value ) => { if ( value <= largest && value < 73 ) setAttributes( { smallest: value } ) } } min={ 6 } max={ 72 } /> <TagGroupsHelp topic="largest"/> <RangeControl label={ __( 'Largest font size' ) } value={ largest ? Number( largest ) : 22 } onChange={ ( value ) => { if ( smallest <= value && value > 5 ) setAttributes( { largest: value } ) } } min={ 6 } max={ 72 } /> <TagGroupsHelp topic="amount"/> <RangeControl label={ __( 'Tags per group' ) + ( amount == 0 ? ': ' + __( 'unlimited' ) : '' ) } value={ amount ? Number( amount ) : 0 } onChange={ ( amount ) => setAttributes( { amount } ) } min={ 0 } max={ 200 } /> <TagGroupsHelp topic="orderby"/> <label htmlFor="tg_input_orderby"> { __( 'Order tags by' ) } </label> <Select id="tg_input_orderby" onChange={ ( option ) => { if ( option ) setAttributes( { orderby: option.value } ) } } value={ orderby && typeof orderby === 'string' ? orderby : 'name' } options={ [ { value:'name', label:__('Name') }, { value:'natural', label:__('Natural sorting') }, { value:'count', label:__('Post count') }, { value:'slug', label:__('Slug') }, { value:'term_id', label:__('Term ID') }, { value:'description', label:__('Description') }, ] } /> <TagGroupsHelp topic="order"/> <label htmlFor="tg_input_order"> { __( 'Sort order' ) } </label> <Select id="tg_input_order" onChange={ ( option ) => { if ( option ) setAttributes( { order: option.value } ) } } value={ order && typeof order === 'string' ? order.toUpperCase() : 'ASC' } options={ [ { value:'ASC', label:__('Ascending') }, { value:'DESC', label:__('Descending') } ] } /> <TagGroupsHelp topic="hide_empty"/> <ToggleControl label={ __( 'Hide empty tags' ) } checked={ hide_empty } onChange={ this.toggleOptionHideEmpty } /> <div> <TagGroupsHelp topic="separator"/> <label htmlFor="tg_input_separator"> { __( 'Separator' ) } </label> </div> <PlainText id="tg_input_separator" className="input-control" value={ separator ? separator : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( separator ) => setAttributes( { separator } ) } /> { separator && <div> <TagGroupsHelp topic="adjust_separator_size"/> <ToggleControl label={ __( 'Adjust separator size to following tag' ) } checked={ adjust_separator_size } onChange={ this.toggleOptionAdjustSeperatorSize } /> { ! adjust_separator_size && <div> <TagGroupsHelp topic="separator_size"/> <RangeControl label={ __( 'Separator size' ) } value={ separator_size ? Number( separator_size ) : 22 } onChange={ ( separator_size ) => setAttributes( { separator_size } ) } min={ 6 } max={ 144 } /> </div> } </div> } <TagGroupsHelp topic="prepend"/> <div> <label htmlFor="tg_input_prepend"> { __( 'Prepend' ) } </label> </div> <PlainText id="tg_input_prepend" className="input-control" value={ prepend ? prepend : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( prepend ) => setAttributes( { prepend } ) } /> <TagGroupsHelp topic="append"/> <div> <label htmlFor="tg_input_append"> { __( 'Append' ) } </label> </div> <PlainText id="tg_input_append" className="input-control" value={ append ? append : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( append ) => setAttributes( { append } ) } /> { ! custom_title && <div> <TagGroupsHelp topic="show_tag_count"/> <ToggleControl label={ __( 'Show post count in the tooltip' ) } checked={ show_tag_count } onChange={ this.toggleOptionShowTagCount } /> </div> } <div> <TagGroupsHelp topic="custom_title"/> <label htmlFor="tg_input_custom_title"> { __( 'Custom title' ) } </label> </div> <PlainText id="tg_input_custom_title" className="input-control" value={ custom_title ? custom_title : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( custom_title ) => setAttributes( { custom_title } ) } /> <TagGroupsHelp topic="link_target"/> <label htmlFor="tg_input_link_target"> { __( 'Link target' ) } </label> <Select id="tg_input_link_target" onChange={ ( option ) => { if ( option ) setAttributes( { link_target:option.value } ) } } value={ ( link_target && ( typeof link_target === 'string' ) ) ? link_target : '_self' } options={ [ { value:'_self', label:'_self' }, { value:'_blank', label:'_blank' }, { value:'_parent', label:'_parent' }, { value:'_top', label:'_top' }, ] } /> <div> <label htmlFor="tg_input_link_append"> { __( 'Append to link' ) } </label> </div> <PlainText id="tg_input_link_append" className="input-control" value={ link_append ? link_append : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( link_append ) => setAttributes( { link_append } ) } /> { hasPremium && <div> <TagGroupsHelp topic="add_premium_filter"/> <ToggleControl label={ __( 'Add filter to tags for multiple groups.' ) } checked={ add_premium_filter } onChange={ this.toggleOptionAddPremiumFilter } /> </div> } <TagGroupsHelp topic="tags_post_id"/> <label htmlFor="tg_input_tags_post_id"> { __( 'Use tags of the following post:' ) } </label> <Select id="tg_input_tags_post_id" onChange={ ( option ) => { if ( option ) setAttributes( { tags_post_id:option.value } ) } } value={ tags_post_id } options={ this.state.posts } /> </PanelBody> <PanelBody title={ __( 'Groups and Tabs' ) } initialOpen={false}> <TagGroupsHelp topic="show_tabs"/> <ToggleControl label={ __( 'Show tabs' ) } checked={ show_tabs } onChange={ this.toggleOptionShowTabs } /> <TagGroupsHelp topic="hide_empty_tabs"/> <ToggleControl label={ __( 'Hide empty tabs' ) } checked={ hide_empty_tabs } onChange={ this.toggleOptionHideEmptyTabs } /> <TagGroupsHelp topic="mouseover"/> <ToggleControl label={ __( 'Open tabs on mouseover' ) } checked={ mouseover } onChange={ this.toggleOptionMouseover } /> <TagGroupsHelp topic="collapsible"/> <ToggleControl label={ __( 'Make panels collapsible' ) } checked={ collapsible } onChange={ this.toggleOptionCollapsible } /> <TagGroupsHelp topic="active"/> <ToggleControl label={ __( 'Start with expanded tabs' ) } checked={ active } onChange={ this.toggleOptionActive } /> <TagGroupsHelp topic="include"/> <label htmlFor="tg_input_include"> { __( 'Include groups' ) } </label> <Select id="tg_input_include" onChange={ this.handleChangeInclude } value={ this.state.selectedGroups } options={ optionsGroups } multi={ true } closeOnSelect={ false} removeSelected={ true } /> { show_not_assigned === 1 && <div> <div> <label htmlFor="tg_input_not_assigned_name"> { __( 'Label on tab for not-assigned tags' ) } </label> </div> <PlainText id="tg_input_not_assigned_name" className="input-control" value={ not_assigned_name ? not_assigned_name : 'not assigned' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( not_assigned_name ) => setAttributes( { not_assigned_name } ) } /> </div> } <TagGroupsHelp topic="groups_post_id"/> <label htmlFor="tg_input_group_post_id"> { __( 'Use groups of the following post:' ) } </label> <Select id="tg_input_group_post_id" onChange={ ( option ) => { if ( option ) setAttributes( { groups_post_id:option.value } ) } } value={ groups_post_id } options={ this.state.posts } /> </PanelBody> <PanelBody title={ __( 'Advanced Styling' ) } initialOpen={false}> <div> <TagGroupsHelp topic="div_id"/> <label htmlFor="tg_input_div_id"> { '<div id="...">' } </label> </div> <PlainText id="tg_input_div_id" className="input-control" value={ div_id ? div_id : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_id ) => setAttributes( { div_id } ) } /> <div> <TagGroupsHelp topic="div_class"/> <label htmlFor="tg_input_div_class"> { '<div class="...">' } </label> </div> <PlainText id="tg_input_div_class" className="input-control" value={ div_class ? div_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( div_class ) => setAttributes( { div_class } ) } /> <div> <TagGroupsHelp topic="ul_class"/> <label htmlFor="tg_input_ul_class"> { '<ul class="...">' } </label> </div> <PlainText id="tg_input_ul_class" className="input-control" value={ ul_class ? ul_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( ul_class ) => setAttributes( { ul_class } ) } /> { tags_post_id !== -1 && <div> <div> <TagGroupsHelp topic="assigned_class"/> <label htmlFor="tg_input_assigned_class"> { '<a class="..._0"> or <a class="..._1">' } </label> </div> <PlainText id="tg_input_assigned_class" className="input-control" value={ assigned_class ? assigned_class : '' } placeholder={ __( 'Write here or leave empty.' ) } onChange={ ( assigned_class ) => setAttributes( { assigned_class } ) } /> </div> } </PanelBody> <div className="chatty-mango-help-transform"> <TagGroupsHelp topic="transform-your-block-for-more-options"/> <div dangerouslySetInnerHTML={{ __html: __( 'If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.' ) }}> </div> </div> </div> </InspectorControls> ), <div className="chatty-mango-editor"> <table style={{border:'none'}}> <tr> <td> <img src={logoUrl} alt='logo' style={{float:'left', margin:15}}/> </td> <td> <h3>{ __( 'Tabbed Tag Cloud' ) }</h3> <div className="cm-gutenberg dashicons-before dashicons-admin-generic"> { __( 'Select this block and customize the tag cloud in the Inspector.' ) } </div> <div className="cm-gutenberg dashicons-before dashicons-welcome-view-site"> { __( 'See the output with Preview.' ) } </div> </td> </tr> </table> </div> ] } } /** * Register: a Gutenberg Block. * * @param {string} name Block name. * @param {Object} settings Block settings. * @return {?WPBlock} The block, if it has been successfully * registered; otherwise `undefined`. */ var cmTagGroupsTabsBlock = registerBlockType( 'chatty-mango/tag-groups-cloud-tabs', { title: __( 'Tabbed Tag Cloud' ), icon: 'tagcloud', // Block icon from Dashicons → https://developer.wordpress.org/resource/dashicons/. category: 'widgets', description: __( 'Show your tags in groups under tabs.' ), keywords: [ __( 'tabs' ), __( 'tag cloud' ), 'Chatty Mango', ], html: false, transforms: { to: [ { type: 'block', blocks: [ 'core/shortcode' ], transform: function( attributes ) { let parameters = []; for ( var attribute in attributes ) { if (attributes.hasOwnProperty( attribute )) { if ( null !== attributes[attribute] && '' !== attributes[ attribute ] && 'source' !== attribute && cmTagGroupsTabsBlock.attributes[ attribute ] && attributes[ attribute ] !== cmTagGroupsTabsBlock.attributes[ attribute ].default ) { if ( typeof attributes[attribute] === 'number' ) { parameters.push( attribute + '=' + attributes[ attribute ] ); } else { parameters.push( attribute + '="' + attributes[ attribute ] + '"'); } } } } let text = '[tag_groups_cloud ' + parameters.join(' ') + ']'; return createBlock( 'core/shortcode', { text } ); }, }, ], }, supports: { html: false, }, /** * Attributes are the same as shortcode parameters **/ attributes: { source: { // internal indicator to identify Gutebergb blocks type: 'string', default: '' }, active: { // configurable in block type: 'integer', default: 1 }, adjust_separator_size: {// configurable in block type: 'integer', default: 1 }, add_premium_filter: {// configurable in block type: 'integer', default: 0 }, amount: {// configurable in block type: 'integer', default: 0 }, append: {// configurable in block type: 'string', default: '' }, assigned_class: {// configurable in block type: 'string', default: '' }, collapsible: {// configurable in block type: 'integer', default: 0 }, custom_title: {// configurable in block type: 'string', default: '' }, div_class: {// configurable in block type: 'string', default: 'tag-groups-cloud' }, div_id: {// configurable in block type: 'string', default: '' }, exclude_terms: {// only in shortcode type: 'string', default: '' }, groups_post_id: {// configurable in block type: 'integer', default: -1 }, hide_empty: {// configurable in block type: 'integer', default: 1 }, hide_empty_tabs: {// configurable in block type: 'integer', default: 0 }, include: {// configurable in block type: 'string', default: '' }, include_terms: {// only in shortcode type: 'string', default: '' }, largest: {// configurable in block type: 'integer', default: 22 }, link_append: {// configurable in block type: 'string', default: '' }, link_target: {// configurable in block type: 'string', default: '_self' }, mouseover: {// configurable in block type: 'integer', default: 0 }, not_assigned_name: {// configurable in block type: 'string', default: '' }, order: {// configurable in block type: 'string', default: 'ASC' }, orderby: {// configurable in block type: 'string', default: 'name' }, prepend: {// configurable in block type: 'string', default: '' }, separator_size: {// configurable in block type: 'integer', default: 22 }, separator: {// configurable in block tpye: 'string', default: '' }, show_not_assigned: {// indirectly configurable in block type: 'integer', default: 0 }, show_all_groups: {// only in shortcode type: 'integer', default: 0 }, show_tabs: { // configurable in block type: 'integer', default: 1 }, show_tag_count: { // configurable in block type: 'integer', default: 1 }, smallest: {// configurable in block type: 'integer', default: 12 }, tags_post_id: {// configurable in block type: 'integer', default: -1 }, taxonomy: {// configurable in block type: 'string', default: '' }, ul_class: {// configurable in block type: 'string', default: '' }, }, /** * Composing and rendering the editor content and control elements */ edit: tagGroupsTabbedCloudParameters, /** * We don't render any HTML when saving */ save: function( props ) { return null; }, } ); PK�������!�ݲ˘������ ��src/blocks.jsnu�[��������/** * Gutenberg Blocks * */ import './guten-tag-tabs/block.js'; import './guten-tag-accordion/block.js'; import './guten-tag-alphabet/block.js'; PK�������!� ������src/webpack.config.dev.jsnu�[��������/** * Webpack Configuration * * Working of a Webpack can be very simple or complex. This is an intenally simple * build configuration. * * Webpack basics — If you are new the Webpack here's all you need to know: * 1. Webpack is a module bundler. It bundles different JS modules together. * 2. It needs and entry point and an ouput to process file(s) and bundle them. * 3. By default it only understands common JavaScript but you can make it * understand other formats by way of adding a Webpack loader. * 4. In the file below you will find an entry point, an ouput, and a babel-loader * that tests all .js files excluding the ones in node_modules to process the * ESNext and make it compatible with older browsers i.e. it converts the * ESNext (new standards of JavaScript) into old JavaScript through a loader * by Babel. * * TODO: Instructions. * * @since 1.0.0 */ const paths = require( './paths' ); const autoprefixer = require( 'autoprefixer' ); const ExtractTextPlugin = require( 'extract-text-webpack-plugin' ); // Extract style.css for both editor and frontend styles. const blocksCSSPlugin = new ExtractTextPlugin( { filename: './dist/blocks.style.build.css', } ); // Extract editor.css for editor styles. const editBlocksCSSPlugin = new ExtractTextPlugin( { filename: './dist/blocks.editor.build.css', } ); // Configuration for the ExtractTextPlugin — DRY rule. const extractConfig = { use: [ // "postcss" loader applies autoprefixer to our CSS. { loader: 'raw-loader' }, { loader: 'postcss-loader', options: { ident: 'postcss', plugins: [ autoprefixer( { browsers: [ '>1%', 'last 4 versions', 'Firefox ESR', 'not ie < 9', // React doesn't support IE8 anyway ], flexbox: 'no-2009', } ), ], }, }, // "sass" loader converst SCSS to CSS. { loader: 'sass-loader', options: { // Add common CSS file for variables and mixins. data: '@import "./src/common.scss";\n', outputStyle: 'nested', }, }, ], }; // Export configuration. module.exports = { entry: { './dist/blocks.build': paths.pluginBlocksJs, // 'name' : 'path/file.ext'. }, output: { // Add /* filename */ comments to generated require()s in the output. pathinfo: true, // The dist folder. path: paths.pluginDist, filename: '[name].js', // [name] = './dist/blocks.build' as defined above. }, externals: { 'react': 'React', 'react-dom': 'ReactDOM', }, // You may want 'eval' instead if you prefer to see the compiled output in DevTools. devtool: 'cheap-eval-source-map', module: { rules: [ { test: /\.(js|jsx|mjs)$/, exclude: /(node_modules|bower_components)/, use: { loader: 'babel-loader', options: { // @remove-on-eject-begin babelrc: false, presets: [ require.resolve( 'babel-preset-cgb' ) ], // @remove-on-eject-end // This is a feature of `babel-loader` for webpack (not Babel itself). // It enables caching results in ./node_modules/.cache/babel-loader/ // directory for faster rebuilds. cacheDirectory: true, }, }, }, { test: /style\.s?css$/, exclude: /(node_modules|bower_components)/, use: blocksCSSPlugin.extract( extractConfig ), }, { test: /editor\.s?css$/, exclude: /(node_modules|bower_components)/, use: editBlocksCSSPlugin.extract( extractConfig ), }, ], }, // Add plugins. plugins: [ blocksCSSPlugin, editBlocksCSSPlugin ], stats: 'minimal', // stats: 'errors-only', }; PK�������!�(������'��views/partials/language_notice.view.phpnu�[��������<div class="notice notice-warning" style="clear:both;"> <p><?php _e( 'Please select one of the languages above to see the correct tag groups!', 'tag-groups' ); ?></p> <div style="clear:both;"></div> </div> PK�������!�1������)��views/shortcodes/js_tabs_snippet.view.phpnu�[��������<!-- begin Tag Groups plugin --> <script> jQuery(function() { if (jQuery.isFunction(jQuery.fn.tabs) ) { jQuery( "#<?php echo $id ?>" ).tabs(<?php echo $options_serialized ?>); } }); </script> <!-- end Tag Groups plugin --> PK�������!�/4������.��views/shortcodes/js_accordion_snippet.view.phpnu�[��������<!-- begin Tag Groups plugin --> <script> jQuery(function() { if (jQuery.isFunction(jQuery.fn.accordion) ) { jQuery( "#<?php echo $id ?>" ).accordion(<?php echo $options_serialized ?>); } }); </script> <!-- end Tag Groups plugin --> PK�������!�م����'��views/admin/setup_wizard_start.view.phpnu�[��������<div style="margin: 50px 0 0;"> <ul style="list-style:disc; margin-left:20px;"> <li><?php _e( 'On the following pages we will guide you through the basic settings that you need for the most common features.', 'tag-groups' ) ?></li> <li><?php _e( 'You can later make changes or fine-tune the details in the Tag Groups settings.', 'tag-groups' ) ?></li> <li><?php _e( 'Feel free to abort the Setup Wizard any time and continue on your own path. You can also launch it again at a later time.', 'tag-groups' ) ?></li> <?php if ( ! $is_premium ) : ?> <li><?php _e( 'The wizard will offer more options after upgrading to premium.', 'tag-groups' ) ?></li> <?php endif; ?> </ul> <div class="chatty-mango-settings-container"> <form method="POST" action="<?php echo $setup_wizard_next_link ?>"> <input type="submit" value="<?php _e( 'Start' ) ?>" class="button button-primary tag-groups-wizard-submit"> </form> </div> </div> PK�������!�I ����(��views/admin/settings_about_news.view.phpnu�[��������<div class="tg_settings_tabs_content"> <h2><?php _e( 'Newsletter', 'tag-groups' ) ?></h2> <p> <?php printf( __( '<a %s>Sign up for our newsletter</a> to receive updates about new versions and related tipps and news.', 'tag-groups' ), 'href="http://eepurl.com/c6AeK1" target="_blank"' ) ?> </p> <p>&nbsp;</p> <h2><?php _e( 'Latest Posts', 'tag-groups' ) ?></h2> <table class="widefat fixed" cellspacing="0"> <thead> <tr> <th style="min-width: 200px; width: 30%;"></th> <th></th> </tr> </thead> <tbody id="tg_feed_container"> <tr> <td colspan="2" style="text-align: center;"> <?php _e( 'Loading...', 'tag-groups') ?> </td> </tr> </tbody> </table> </div> <script> jQuery(document).ready(function(){ var tg_feed_amount = jQuery("#tg_feed_amount").val(); var data = { action: "tg_ajax_get_feed", url: "<?php echo TAG_GROUPS_UPDATES_RSS_URL ?>", amount: 5 }; jQuery.post("<?php echo $admin_url ?>", data, function (data) { var status = jQuery(data).find("response_data").text(); if (status == "success") { var output = jQuery(data).find("output").text(); jQuery("#tg_feed_container").html(output); } }); }); </script> PK�������!�L������$��views/admin/settings_footer.view.phpnu�[��������</div> <script> jQuery(document).ready(function(){ jQuery(".chatty-mango-help-icon").click(function(){ jQuery(".chatty-mango-help-container-" + jQuery(this).attr("data-topic")).slideToggle(); }); }); </script> PK�������!�>(������(��views/admin/setup_wizard_footer.view.phpnu�[��������</div> PK�������!�7~����1��views/admin/settings_troubleshooting_faq.view.phpnu�[��������<div class="tg_settings_tabs_content"> <div class="chatty-mango-settings-columns"> <div> <h3><?php _e( 'Where should I start?', 'tag-groups' ) ?></h3> <p><?php printf( __( 'The easiest way to get going is described in <a %s>Get started in 3 easy steps</a>.', 'tag-groups' ), 'href="' . admin_url( 'admin.php?page=tag-groups-settings-first-steps' ) . '"' ) ?></p> </div> <div> <h3><?php _e( 'How can I use a tag cloud in a widget?', 'tag-groups' ) ?></h3> <p><?php _e( 'Please insert the shortcode into a text widget.', 'tag-groups' ) ?></p> </div> <div> <h3><?php _e( 'There is a gray box around the tag cloud or shortcode output', 'tag-groups' ) ?></h3> <p><?php _e( 'Please check your shortcode in the editor and make sure that it is formatted as “Paragraph”, not “Preformatted”.', 'tag-groups' ) ?></p> </div> <div> <h3><?php _e( 'One or more shortcode parameters are not effective', 'tag-groups' ) ?></h3> <p><?php _e( 'Please check your shortcode in the editor and make sure that quotes are not formatted, i.e. not tilted or curled (re-type all quotes) and that there is no invisible HTML code inside the shortcode.', 'tag-groups' ) ?></p> </div> <div> <h3><?php _e( "The list on the Tag Groups page doesn't load. I only see the wheel spinning forever", 'tag-groups' ) ?></h3> <p><?php printf( __( 'This usually means that somewhere your site outputs a warning or alert that interferes with the data transfer to your browser. In most cases it is caused by another plugin. Please try to find out the reason <a %s>according to these instructions</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/troubleshooting/the-list-on-the-tag-groups-page-doesnt-load-i-only-see-the-wheel-spinning-forever/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></p> </div> <div> <h3><?php _e( 'More FAQ', 'tag-groups' ) ?></h3> <p><?php printf( __( 'Please continue <a %s>here</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/faq-and-troubleshooting-tag-groups/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"') ?></p> </div> </div> </div> PK�������!� ^����"��views/admin/settings_tabs.view.phpnu�[��������<h2 class="nav-tab-wrapper"> <?php foreach ( $tabs as $slug => $label ) : $settings_url = add_query_arg( array( 'active-tab' => $slug ), menu_page_url( $page, false ) ); ?> <a href="<?php echo esc_url( $settings_url ) ?>" class="nav-tab <?php if ( $slug == $active_tab) : ?> nav-tab-active <?php endif; ?> "><?php echo $label ?> </a> <?php endforeach; ?> </h2> PK�������!�~ou ��u ��0��views/admin/setup_wizard_sample_content.view.phpnu�[��������<div style="margin: 50px 0 0;"> <p><?php _e( 'Now you are ready to create your own tag groups. If you prefer to start out from a sample, we will create for you three groups and three tags. You can play around with them, rename or delete them.', 'tag-groups' ) ?></p> <form method="post" action="<?php echo $setup_wizard_next_link ?>"> <p> <input type="checkbox" autocomplete="off" value=1 id="tag-groups-create-sample-groups" name="tag-groups-create-sample-groups" >&nbsp;<label for="tag-groups-create-sample-groups"><?php _e( 'Create sample groups:', 'tag-groups' ) ?> <strong><?php echo implode( ', ', $group_names ); ?></strong> </label> </p> <p> <input disabled type="checkbox" autocomplete="off" value=1 id="tag-groups-create-sample-tags" name="tag-groups-create-sample-tags" >&nbsp;<label for="tag-groups-create-sample-tags"><?php _e( 'Create sample tags in these groups:', 'tag-groups' ) ?> <strong><?php echo implode( ', ', $tag_names ); ?></strong> </label> </p> <p> <input disabled type="checkbox" autocomplete="off" value=1 id="tag-groups-create-sample-page" name="tag-groups-create-sample-page" >&nbsp;<label for="tag-groups-create-sample-page"><?php _e( 'Create a draft sample page with shortcodes.', 'tag-groups' ) ?></label> </p> <?php foreach( $group_names as $group_name ) : ?> <input type="hidden" name="tag_groups_group_names[]" value='<?php echo $group_name ?>'> <?php endforeach; ?> <?php foreach( $tag_names as $tag_name ) : ?> <input type="hidden" name="tag_groups_tag_names[]" value='<?php echo $tag_name ?>'> <?php endforeach; ?> <input type="hidden" name="tg_action_wizard" value="sample-content"> <input type="submit" value="<?php _e( 'Next Step' ) ?>" class="button button-primary tag-groups-wizard-submit"> <input type="hidden" name="tag-groups-setup-wizard-nonce" id="tag-groups-setup-wizard-nonce" value="<?php echo wp_create_nonce( 'tag-groups-setup-wizard-nonce' ) ?>" /> </form> </div> <script> jQuery(document).ready(function(){ jQuery('#tag-groups-create-sample-groups').change(function(){ if ( jQuery('#tag-groups-create-sample-groups').attr('checked') ) { jQuery('#tag-groups-create-sample-tags').prop('disabled', false); jQuery('#tag-groups-create-sample-page').prop('disabled', false); } else { jQuery('#tag-groups-create-sample-tags').prop('disabled', true); // jQuery('#tag-groups-create-sample-tags').prop('checked', false); jQuery('#tag-groups-create-sample-page').prop('disabled', true); } }); }); </script> PK�������!� X����2��views/admin/settings_front_end_shortcodes.view.phpnu�[��������<div class="tg_settings_tabs_content"> <p><?php _e( 'You can use a shortcode to embed the tag cloud directly in a post, page or widget or you call the function in the PHP code of your theme.', 'tag-groups' ) ?> <?php _e( 'Several tag clouds are also available as blocks for the Gutenberg editor.', 'tag-groups' ) ?></p> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <input type="hidden" name="tag-groups-shortcode-nonce" id="tag-groups-shortcode-nonce" value="<?php echo wp_create_nonce( 'tag-groups-shortcode' ) ?>" /> <p> <input type="checkbox" name="widget" autocomplete="off" id="tg_widget" value="1"<?php if ( $tag_group_shortcode_widget ) : ?> checked<?php endif; ?>>&nbsp; <label for="tg_widget"><?php _e( 'Enable shortcode in sidebar widgets (if not visible anyway).', 'tag-groups' ) ?></label> </p> <p> <input type="checkbox" name="enqueue" id="tg_enqueue" autocomplete="off" value="1"<?php if ( $tag_group_shortcode_enqueue_always ) : ?> checked<?php endif; ?>>&nbsp; <label for="tg_enqueue"><?php _e( 'Always load shortcode scripts.', 'tag-groups' ) ?></label> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="load-scripts"></span> </p> <div class="chatty-mango-help-container chatty-mango-help-container-load-scripts" style="display:none;"> <p><?php _e( 'Turn off to load the scripts only on posts and pages where a shortcode appears.', 'tag-groups' ) ?></p> <p><span class="dashicons dashicons-warning"></span><?php _e( 'Turn on if you use these shortcodes in widgets or if you use Gutenberg blocks.', 'tag-groups' ) ?></p> </div> <input type="hidden" id="action" name="tg_action" value="shortcode"> <input class="button-primary" type="submit" name="save" value="<?php _e( 'Save Settings', 'tag-groups' ) ?>" id="submitbutton" /> </form> <p>&nbsp;</p> <p><?php _e('Click for more information.', 'tag-groups') ?></p> <h3><?php _e('Shortcodes', 'tag-groups') ?></h3> <div class="tg_admin_accordion" > <h4><?php _e( 'Tabbed Tag Cloud', 'tag-groups' ) ?></h4> <div> <h4>[tag_groups_cloud]</h4> <p><?php _e( 'Display the tags in a tabbed tag cloud.', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p>[tag_groups_cloud smallest=9 largest=30 include=1,2,10]</p> <h4><?php _e( 'Parameters', 'tag-groups' ) ?></h4> <p><?php printf( __( 'Please find the parameters in the <a %s>documentation</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups-premium/tabbed-tag-cloud/tabbed-tag-cloud-parameters/?pk_campaign=tg&pk_kwd=documentation" target="_blank"' ) ?></p> </div> <h4><?php _e( 'Accordion', 'tag-groups' ) ?></h4> <div> <h4>[tag_groups_accordion]</h4> <p><?php _e( 'Display the tags in an accordion.', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p>[tag_groups_accordion smallest=9 largest=30 include=1,2,10]</p> <h4><?php _e( 'Parameters', 'tag-groups' ) ?></h4> <p><?php printf( __( 'Please find the parameters in the <a %s>documentation</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups-premium/accordion-tag-cloud/accordion-tag-cloud-parameters/?pk_campaign=tg&pk_kwd=documentation" target="_blank"' ) ?></p> </div> <h4><?php _e( 'Alphabetical tabs', 'tag-groups' ) ?></h4> <div> <h4>[tag_groups_alphabet_tabs]</h4> <p><?php _e( 'Display the tags in tabbed tag cloud with first letters as tabs.', 'tag-groups' ) ?> <?php _e( '(Not tested with right-to-left languages.)', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p>[tag_groups_alphabet_tabs exclude_letters="äöü"]</p> <h4><?php _e( 'Parameters', 'tag-groups' ) ?></h4> <p><?php printf( __( 'Please find the parameters in the <a %s>documentation</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups-premium/alphabetical-tag-cloud/alphabetical-tag-cloud-parameters/?pk_campaign=tg&pk_kwd=documentation" target="_blank"' ) ?></p> </div> <?php echo $premium_shortcode_info ?> <h4><?php _e( 'Group Information', 'tag-groups' ) ?></h4> <div> <h4>[tag_groups_info]</h4> <p><?php _e( 'Display information about tag groups.', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p>[tag_groups_info group_id="all"]</p> <h4><?php _e( 'Parameters', 'tag-groups' ) ?></h4> <p><?php printf( __( 'Please find the parameters in the <a %s>documentation</a>.', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups-premium/tag-groups-info/tag-groups-info-parameters/?pk_campaign=tg&pk_kwd=documentation" target="_blank"' ) ?></p> </div> </div> <h3>PHP</h3> <div class="tg_admin_accordion"> <h4>tag_groups_cloud()</h4> <div> <p><?php _e( 'The function <b>tag_groups_cloud</b> accepts the same parameters as the [tag_groups_cloud] shortcode, except for those that determine tabs and styling.', 'tag-groups' ) ?></p> <p><?php _e( 'By default it returns a string with the html for a tabbed tag cloud.', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p><code><?php echo htmlentities( "<?php if ( function_exists( 'tag_groups_cloud' ) ) echo tag_groups_cloud( array( 'include' => '1,2,5,6' ) ) ?>" ) ?></code></p> <p>&nbsp;</p> <p><?php _e( 'If the optional second parameter is set to \'true\', the function returns a multidimensional array containing tag groups and tags.', 'tag-groups' ) ?></p> <h4><?php _e( 'Example', 'tag-groups' ) ?></h4> <p><code><?php echo htmlentities( "<?php if ( function_exists( 'tag_groups_cloud' ) ) print_r( tag_groups_cloud( array( 'orderby' => 'count', 'order' => 'DESC' ), true ) ) ?>" ) ?></code></p> </div> </div> <!-- begin Tag Groups plugin --> <script> jQuery(function() { var icons = { header: "dashicons dashicons-arrow-right", activeHeader: "dashicons dashicons-arrow-down" }; jQuery( ".tg_admin_accordion" ).accordion({ icons:icons, collapsible: true, active: false, heightStyle: "content" }); }); </script> <!-- end Tag Groups plugin --> </div> PK�������!�֌ �� ����views/admin/onboarding.view.phpnu�[��������<h2><?php _e( 'First Steps', 'tag-groups' ) ?></h2> <div class="tg-onboarding-container"> <div style="float:right;"><?php echo $logo ?></div> <h3><?php printf( __( 'Welcome to %s!', 'tag-groups' ), $title ) ?></h3> <p><?php _e( 'The plugin is ready for use. If you need some assistance, we can walk you through the basic steps.', 'tag-groups' ) ?></p> <div style="margin: 50px 0; width: 500px;"> <a href="<?php echo $settings_setup_wizard_link ?>" class="tg_premium_promotion_call_to_action_button"><span class="dashicons dashicons-lightbulb"></span>&nbsp;<?php _e( 'Start the Setup Wizard', 'tag-groups' ) ?></a> </div> <div style="clear:both; height: 50px;"></div> <div id="tag_groups_onboarding_accordion"> <h3><span class="dashicons dashicons-admin-settings"></span>&nbsp;<?php _e( 'Or click here if you prefer to do it on your own.', 'tag-groups' ) ?></h3> <div style="display:none;"> <ol> <li><?php printf( __( 'Go to the <span class="dashicons dashicons-tag"></span>&nbsp;Tag Groups <a %s>taxonomy settings</a> and <b>select the taxonomy</b> (tag type) of your tags. In most cases just leave the default: Tags (post_tag).', 'tag-groups' ), 'href="' . esc_url( $settings_taxonomy_link ) . '" target="_blank"' ) ?></li> <li><?php _e( 'Go to the tag groups admin page and <b>create some groups</b>.', 'tag-groups' ) ?> <?php printf( __( 'You can find these pages listed on your <a %s>Tag Groups home page</a>.', 'tag-groups' ), 'href="' . esc_url( $settings_home_link ) . '" target="_blank"' ) ?></li> <li><?php _e( 'Go to your tags and <b>assign them to these groups</b>.', 'tag-groups' ) ?></li> </ol> <p> <?php printf( __( 'Now your tags are organized in groups. You can use them, for example, in a tag cloud. Just insert a shortcode into a page or post - try: [tag_groups_cloud]. You find all shortcodes and <a %s>links to the documentation</a> in the <span class="dashicons dashicons-tag"></span>&nbsp;<a %s>Tag Groups settings</a>.', 'tag-groups' ), 'href="' . esc_url( $documentation_link . '?pk_campaign=tg&pk_kwd=onboarding' ) . '" target="_blank"', 'href="' . esc_url( $settings_home_link ) . '" target="_blank"' ) ?> </p> <?php if ( defined( 'TAG_GROUPS_PLUGIN_IS_FREE' ) && TAG_GROUPS_PLUGIN_IS_FREE ) : ?> <p><?php printf( __( 'You get many more features with the <a %s>premium plugin</a>.', 'tag-groups' ), 'href="' . esc_url( $settings_premium_link ) . '" target="_blank"' ) ?></p> <?php endif; ?> <p>&nbsp;</p> <p><?php _e( 'Happy tagging!', 'tag-groups' ) ?></p> </div> </div> </div> <script> jQuery(document).ready(function(){ jQuery('#tag_groups_onboarding_accordion').accordion({collapsible:true, active:false}); }); </script> PK�������!�m :R��R��4��views/admin/settings_troubleshooting_system.view.phpnu�[��������<div class="tg_settings_tabs_content"> <div class="tg_admin_accordion" > <h3><?php _e( 'Server', 'tag-groups' ) ?></h3> <table class="widefat fixed"> <tr><td>PHP Version</td><td><?php echo $phpversion ?> <?php if ( $php_upgrade_recommendation ) : ?> <?php printf( ' <a href="%s" target="_blank">%s</a>', 'https://wordpress.org/support/upgrade-php/', '<span class="dashicons dashicons-warning"></span>' ) ?> <?php endif; ?> </td></tr> <tr><td>PHP Memory Limit</td><td><?php echo ini_get('memory_limit') ?></td></tr> <tr><td>PHP Max Execution Time</td><td><?php echo ini_get('max_execution_time') ?> secs</td></tr> <tr><td>PHP Post Max Size</td><td><?php echo ini_get('post_max_size') ?></td></tr> </table> </div> <div class="tg_admin_accordion" > <h3>WordPress</h3> <table class="widefat fixed"> <tr><td>WordPress Version</td><td><?php echo get_bloginfo('version') ?></td></tr> <tr><td>Site URL</td><td><?php echo site_url() ?></td></tr> <tr><td>Home URL</td><td><?php echo home_url() ?></td></tr> <tr><td>Active Theme</td><td><?php echo $active_theme->get( 'Name' ) ?> (Version <?php echo $active_theme->get( 'Version' ) ?>)</td></tr> <tr><td>Ajax Test</td><td> <span id="ajax_test_field"><?php _e( 'Checking...', 'tag-groups' ) ?></span> <input type="button" id="chatty-mango-help-button-ajax" class="button button-primary chatty-mango-help-icon" style="display: none; float: right;" value="<?php _e( 'Show the Response', 'tag-groups' ) ?>" data-topic="ajax"> <div id="ajax_error_field" class="chatty-mango-help-container chatty-mango-help-container-ajax" style="display: none;"></div> </td></tr> <?php if ( defined( 'ICL_SITEPRESS_VERSION' ) ) : ?> <tr><td>WPML Version</td><td><?php echo ICL_SITEPRESS_VERSION ?></td></tr> <?php endif; ?> <?php if ( function_exists( 'pll_the_languages' ) ) : ?> <!-- TODO: Can we get the version? --> <tr><td>Polylang detected</td><td></td></tr> <?php endif; ?> </table> </div> <script> jQuery(document).ready(function(){ jQuery.ajax({ url: "<?php echo $ajax_test_url ?>", data: { action: "tg_ajax_manage_groups", task: "test" }, method: "post", }) .done(function(){ jQuery("#ajax_test_field").html("<span class=\"dashicons dashicons-yes\" style=\"color:green;\" title=\"<?php _e( 'passed', 'tag-groups' ) ?>\"></span>"); }) .fail(function(response){ jQuery("#ajax_error_field").text(response.responseText); jQuery("#chatty-mango-help-button-ajax").show(); let learnHowToFixLink = " <a href=\"https://documentation.chattymango.com/documentation/tag-groups-premium/maintenance-and-troubleshooting/debugging-a-wordpress-ajax-error/?pk_campaign=tg&pk_kwd=ajax-failure\" target=\”_blank\">Learn more</a>"; jQuery("#ajax_test_field").html("<span class=\"dashicons dashicons-no\" style=\"color:red;\" title=\"<?php _e( 'failed', 'tag-groups' ) ?>\"></span> " + learnHowToFixLink); }); }); </script> <div class="tg_admin_accordion" > <h3><?php _e( 'Constants', 'tag-groups' ) ?></h3> <table class="widefat fixed"> <?php foreach ( $wp_constants as $wp_constant ) : ?> <?php if ( isset( $constants[ $wp_constant ] ) ) : ?> <tr><td><?php echo $wp_constant ?></td><td><?php echo $constants[ $wp_constant ] ?></td></tr> <?php else: ?> <tr><td><?php echo $wp_constant ?></td><td>not set</td></tr> <?php endif; ?> <?php endforeach; ?> <?php foreach ( $constants as $key => $value ) : ?> <?php if ( preg_match( "/^TAG_GROUPS_/", $key ) == 1 ) : ?> <tr><td><?php echo $key ?></td><td><?php echo $value ?></td></tr> <?php endif; ?> <?php endforeach; ?> </table> </div> </div> PK�������!�T:��:��;��views/admin/settings_troubleshooting_documentation.view.phpnu�[��������<div class="tg_settings_tabs_content"> <div class="chatty-mango-settings-columns"> <div> <h3><span class="dashicons dashicons-clipboard"></span> <?php printf( __( '<a %s>Working with tag groups</a>', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/working-with-tag-groups/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></h3> </div> <div> <h3><span class="dashicons dashicons-clipboard"></span> <?php printf( __( '<a %s>Shortcodes</a>', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/tag-clouds-and-groups-info/shortcodes/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></h3> </div> <div> <h3><span class="dashicons dashicons-clipboard"></span> <?php printf( __( '<a %s>How to use tag groups with Gutenberg</a>', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/tag-clouds-and-groups-info/using-gutenberg/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></h3> </div> <div> <h3><span class="dashicons dashicons-clipboard"></span> <?php printf( __( '<a %s>All topics</a>', 'tag-groups' ), 'href="https://documentation.chattymango.com/documentation/tag-groups/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></h3> </div> </div> </div> PK�������!�܍q����,��views/admin/settings_about_licenses.view.phpnu�[��������<div class="tg_settings_tabs_content"> <p><?php printf( __( 'Tag Groups (free) is provided under the terms of the <a %s>GNU GENERAL PUBLIC LICENSE, Version 3</a>.', 'tag-groups' ), 'href="http://www.gnu.org/licenses/gpl.html" target="_blank"') ?> © Christoph Amthor @ Chatty Mango</p> <p><?php printf( __( 'This plugin uses css and images by <a %s>jQuery UI</a>.', 'tag-groups' ), 'href="https://jqueryui.com/" target="_blank"') ?></p> <p><?php printf( 'jQuery plugin <a %1$s>SumoSelect</a>: <a %2$s>MIT License</a>. Copyright © 2016 Hemant Negi', 'href="https://github.com/HemantNegi/jquery.sumoselect"', 'href="http://www.opensource.org/licenses/mit-license.php" target="_blank"') ?></p> <p><?php printf( 'React JS plugin <a %1$s>React-Select</a>: <a %2$s>MIT License</a>. Copyright © 2018 Jed Watson', 'href="https://github.com/JedWatson/react-select"', 'href="http://www.opensource.org/licenses/mit-license.php" target="_blank"') ?></p> <p><?php printf( '<a %1$s>Freemius SDK</a>: <a %2$s>GNU GENERAL PUBLIC LICENSE, Version 3</a>. Copyright © Freemius, Inc.', 'href="https://github.com/Freemius/wordpress-sdk/"', 'href="http://www.gnu.org/licenses/gpl.html" target="_blank"') ?></p> <p><?php printf( '<a %1$s>Aristo Theme</a>: <a %2$s>MIT License</a>. Copyright © Tait Brown (incl. 280North, Pinvoke)', 'href="https://github.com/taitems/Aristo-jQuery-UI-Theme"', 'href="http://www.opensource.org/licenses/mit-license.php" target="_blank"') ?></p> </div> PK�������!�{&����!��views/admin/new_tag_main.view.phpnu�[��������<tr class="form-field"> <th scope="row" valign="top"><label for="tag_widget"><?php _e( 'Tag Groups', 'tag-groups' ) ?></label></th> <td> <select id="term-group" name="term-group<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo '[]' ?>"<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo ' multiple' ?>> <?php if ( ! class_exists( 'TagGroups_Premium_Group' ) ) : ?> <option value="0" <?php if ( $tg_term->is_in_group( 0 ) ) : ?> selected <?php endif; ?> ><?php _e( 'not assigned', 'tag-groups' ) ?></option> <?php endif; ?> <?php foreach ( $data as $term_group ) : ?> <option value="<?php echo $term_group[ 'term_group' ]; ?>" <?php if ( $tg_term->is_in_group( $term_group[ 'term_group' ] ) ) : ?> selected <?php endif; ?> ><?php echo htmlentities( $term_group[ 'label' ], ENT_QUOTES, "UTF-8" ); ?> </option> <?php endforeach; ?> </select> <input type="hidden" name="tag-groups-nonce" id="tag-groups-nonce" value="<?php echo wp_create_nonce( 'tag-groups-nonce' ) ?>" /> <input type="hidden" name="tag-groups-taxonomy" id="tag-groups-taxonomy" value="<?php echo $screen->taxonomy; ?>" /> <script> jQuery(document).ready(function () { jQuery('#term-group').SumoSelect({ search: true, forceCustomRendering: true, <?php if ( class_exists( 'TagGroups_Premium_Group' ) && $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) : ?> triggerChangeCombined: true, selectAll: true, captionFormatAllSelected: '<?php _e( 'all {0} selected', 'tag-groups' ) ?>', captionFormat: '<?php _e( '{0} selected', 'tag-groups' ) ?>', <?php endif; ?> }); }); </script> <p>&nbsp;</p> <p><a href="<?php echo $tag_group_admin_url ?>"><?php _e( 'Edit tag groups', 'tag-groups' ) ?></a>. (<?php _e( 'Clicking will leave this page without saving.', 'tag-groups' ) ?>)</p> </td> </tr> PK�������!�����#��views/admin/quick_edit_tag.view.phpnu�[�������� <fieldset> <div class="inline-edit-col"> <label><span class="title"><?php _e( 'Groups', 'tag-groups' ) ?></span> <span class="input-text-wrap"> <select id="term-group-option" name="term-group<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo '[]' ?>" class="ptitle"<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo ' multiple' ?>> <?php if ( ! class_exists( 'TagGroups_Premium_Group' ) ) : ?> <option value="0" ><?php _e( 'not assigned', 'tag-groups' ) ?></option> <?php endif; foreach ( $data as $term_group ) : ?> <option value="<?php echo $term_group['term_group']; ?>"><?php echo htmlentities( $term_group['label'], ENT_QUOTES, "UTF-8" ); ?></option> <?php endforeach; ?> </select> <?php // id must be "tag-groups-option-nonce" because otherwise identical with "Add New Tag" form on the left side. ?> <input type="hidden" name="tag-groups-nonce" id="tag-groups-option-nonce" value="" /> <input type="hidden" name="tag-groups-taxonomy" id="tag-groups-taxonomy" value="<?php echo $screen->taxonomy; ?>" /> </span> </label> </div> </fieldset> PK�������!�J �� ��"��views/admin/settings_help.view.phpnu�[��������<div id="tg_setting_help_search"> <div style="float:right;" title="<?php _e( 'Search and get direct links to setting pages. Hint: Type *, space or \'all\' to show all.', 'tag-groups' ) ?>"> <span class="dashicons dashicons-search tg_setting_help_search_icon"></span><input id="tg_setting_help_search_field" placeholder="<?php _e( 'Search for settings', 'tag-groups' ) ?>" autocomplete="off"> </div> <div id="tg_setting_help_search_results" style="display:none;"> <h2><?php _e( 'Search Results', 'tag-groups' ) ?></h2> <div class="chatty-mango-settings-columns tg_setting_help_search_results_inner"> <h4 id="tg_setting_help_nothing_found" style="display:none"><?php _e( 'Nothing found', 'tag-groups' ) ?></h4> <?php foreach ( $topics as $tab => $atts ) : $keywords = strtolower( implode( ',', $atts['keywords'] ) ) . ',' . strtolower( $atts['title'] ) . ',' . $tab; ?> <div id="tg_topic_' . $tab . '" class="tg_settings_topic" data-keywords="<?php echo esc_html( $keywords) ?>"> <h4><span class="dashicons dashicons-arrow-right-alt tg_no_underline"></span>&nbsp; <a href="<?php echo admin_url( 'admin.php?page=' . $atts['page'] . '&active-tab=' . $tab ) ?>"><?php echo $atts['title'] ?></a></h4> </div> <?php endforeach; ?> </div> </div> </div> <script> var searchText = ""; jQuery(document).ready(function(){ jQuery("#tg_setting_help_search_field").keyup(function(){ searchText = jQuery("#tg_setting_help_search_field").val().toLowerCase(); if (searchText.length === 0) { jQuery("#tg_setting_help_search_results").slideUp(); } else { if (jQuery("#tg_setting_help_search_results").css("display") === "none") { jQuery("#tg_setting_help_search_results").slideDown(); } if (searchText==="' . __( 'all', 'tag-groups') . '" || searchText==="*" || searchText===" ") { jQuery(".tg_settings_topic").removeClass("tg_hide"); } else { jQuery(".tg_settings_topic") .addClass("tg_hide") .filter(function(index){ var keywords = jQuery(this).attr("data-keywords"); return keywords.indexOf(searchText) > -1; }) .removeClass("tg_hide"); } if (jQuery(".tg_settings_topic:not(.tg_hide)").length === 0 ){ jQuery("#tg_setting_help_nothing_found").slideDown(); } else { jQuery("#tg_setting_help_nothing_found").slideUp(); } jQuery(".tg_settings_topic.tg_hide").slideUp(); jQuery(".tg_settings_topic:not(.tg_hide)").slideDown(); } }); }); </script> PK�������!�,���� ��views/admin/post_filter.view.phpnu�[��������<select name="tg_filter_posts_value"> <option value=""><?php _e( 'Filter by tag group', 'tag-groups' ); ?></option> <?php foreach ( $data as $term_group => $label ) { printf( '<option value="%s"%s>%s</option>', $term_group, ( '' != $current_term_group && $term_group == $current_term_group ) ? ' selected="selected"' : '', htmlentities( $label, ENT_QUOTES, "UTF-8" ) ); } ?> </select> <script> jQuery(document).ready(function(){ jQuery('#cat').hide(); }); </script> PK�������!�ro������$��views/admin/settings_header.view.phpnu�[��������<div class="wrap"> <?php if ( ! empty( $admin_page_title ) ) : ?> <h2><?php echo $admin_page_title ?></h2> <?php endif; ?> PK�������!�$����(��views/admin/filter_admin_footer.view.phpnu�[��������<?php /** * Using .html() instead of .text() to avoid ambersands displaying */ ?> <script> jQuery(document).ready(function () { var sel_filter; // check if we have an bulk action menu if (jQuery("select[name='term-group-top']").length){ sel_filter = jQuery("<select id='tag_filter' name='term-filter' style='margin-left: 20px;'>").insertAfter("select[name='term-group-top']"); } else { sel_filter = jQuery("<select id='tag_filter' name='term-filter' style='margin-left: 20px;'>").insertAfter("select[name='action']"); } sel_filter.append(jQuery("<option>").attr("value", "-1").html("<?php _e( 'Filter off', 'tag-groups' ) ?>")); <?php foreach ( $data as $term_group ) : ?> sel_filter.append(jQuery("<option>").attr("value", "<?php echo $term_group['term_group'] ?>").html("<?php echo htmlentities( $term_group['label'], ENT_QUOTES, "UTF-8" )?>")); <?php endforeach; ?> jQuery("#tag_filter option[value=<?php echo $tag_filter ?>]").prop('selected', true); }); </script> PK�������!�v,x*��*��%��views/admin/tag_groups_admin.view.phpnu�[�������� <div class='wrap'> <h2><?php _e( 'Tag Group Administration', 'tag-groups' ) ?> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="group-admin"></span></h2> <div class="chatty-mango-help-container chatty-mango-help-container-group-admin" style="display:none;"> <p><?php _e( 'On this page you can create and edit tag groups. Tags can be assigned to these groups on the page where you edit the tags.', 'tag-groups' ) ?> <?php _e( 'Change the order by drag and drop or with the up/down icons. Click into a label for editing.', 'tag-groups' ) ?> <?php if ( class_exists( 'TagGroups_Premium' ) ) : ?> <?php _e( 'Set the number of groups per page in the "Screen Options" above.', 'tag-groups' ) ?> <?php endif; ?> </p> </div> <div id="tg_message_container"> </div> <table class="widefat tg_groups_table"> <thead> <tr> <th style="min-width:30px;"><?php _e( 'Group ID', 'tag-groups' ) ?></th> <th><?php _e( 'Label displayed on the frontend', 'tag-groups' ) ?></th> <th><?php _e( 'Number of assigned tags', 'tag-groups' ) ?></th> <?php if ( $tag_group_show_filter ) : ?> <th><?php _e( 'Filters', 'tag-groups' ) ?></th> <?php endif; ?> <th><?php _e( 'Actions', 'tag-groups' ) ?></th> <th><?php _e( 'Change order', 'tag-groups' ) ?></th> </tr> </thead> <tfoot> <tr> <th><?php _e( 'Group ID', 'tag-groups' ) ?></th> <th><?php _e( 'Label displayed on the frontend', 'tag-groups' ) ?></th> <th><?php _e( 'Number of assigned tags', 'tag-groups' ) ?></th> <?php if ( $tag_group_show_filter ) : ?> <th><?php _e( 'Filters', 'tag-groups' ) ?></th> <?php endif; ?> <th><?php _e( 'Actions', 'tag-groups' ) ?></th> <th><?php _e( 'Change order', 'tag-groups' ) ?></th> </tr> </tfoot> <tbody id="tg_groups_container"> <tr> <td colspan="5" style="padding: 50px; text-align: center;"> <img src="<?php echo admin_url('images/spinner.gif') ?>" /> </td> </tr> </tbody> </table> <div id="tg_pager_container_adjuster"> <div id="tg_pager_container"></div> </div> <input type="hidden" id="tg_nonce" value=""> <input type="hidden" id="tg_start_position" value="1"> <script> var tagGroupsLabels = new Object(); tagGroupsLabels.edit = '<?php _e( 'Edit', 'tag-groups' ) ?>'; tagGroupsLabels.create = '<?php _e( 'Create', 'tag-groups' ) ?>'; tagGroupsLabels.newgroup = '<?php _e( 'new', 'tag-groups' ) ?>'; tagGroupsLabels.placeholder_new = '<?php _e( 'label', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_delete = '<?php _e( 'Delete this group.', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_newbelow = '<?php _e( 'Create a new group below.', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_move_up = '<?php _e( 'move up', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_move_down = '<?php _e( 'move down', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_reload = '<?php _e( 'reload', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_showposts = '<?php _e( 'Show posts', 'tag-groups' ) ?>'; tagGroupsLabels.tooltip_showtags = '<?php _e( 'Show tags', 'tag-groups' ) ?>'; var tagGroupsAjaxParameters = {"ajaxurl": "<?php echo $admin_url ?>", "postsurl": "<?php echo $post_url ?>", "tagsurl": "<?php echo $tags_url ?>", "items_per_page": "<?php echo $items_per_page ?>"}; var tagGroupsData = { taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?> }; jQuery(document).ready(function () { tagGroupsData.task = "refresh"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); jQuery(".tg_edit_label").live('click', function () { tg_close_all_textfields(); var element = jQuery(this); var position = element.attr("data-position"); var label = escape_html(element.attr("data-label")); element.replaceWith('<span class="tg_edit_label_active"><input data-position="' + position + '" data-label="' + label + '" value="' + label + '"> <span class="tg_edit_label_yes dashicons dashicons-yes tg_pointer" ></span> <span class="tg_edit_label_no dashicons dashicons-no-alt tg_pointer"></span></span>'); }); jQuery(".tg_edit_label_active").live('keypress', function (e) { if (e.keyCode == 13) { e.preventDefault(); var input = jQuery(this).children(":first"); var tagGroupsData = { task: 'update', position: input.attr('data-position'), label: input.val(), taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?>, }; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); return false; } // if (e.keyCode == 65) { // var input = jQuery(this).children(":first"); // input.select(); // return false; // } return true; }); jQuery(".tg_edit_label_yes").live('click', function () { var input = jQuery(this).parent().children(":first"); var tagGroupsData = { task: 'update', position: input.attr('data-position'), label: input.val(), taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?>, }; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery(".tg_edit_label_no").live('click', function () { var input = jQuery(this).parent().children(":first"); tg_close_textfield(jQuery(this).parent(), false); }); jQuery("[id^='tg_new_']:visible").live('keypress', function (e) { if (e.keyCode == 13) { var input = jQuery(this).find("input"); var tagGroupsData = { task: 'new', position: input.attr('data-position'), label: input.val(), taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?>, }; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); } }); jQuery(".tg_new_yes").live('click', function () { var input = jQuery(this).parent().children(":first"); var tagGroupsData = { task: 'new', position: input.attr('data-position'), label: input.val(), taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?>, }; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery(".tg_delete").live('click', function () { var position = jQuery(this).attr("data-position"); jQuery('.tg_sort_tr[data-position='+position+'] td').addClass('tg_ask_delete'); setTimeout(function () { // we need some time to effect the changes of the class var answer = confirm('<?php _e( 'Do you really want to delete this tag group?', 'tag-groups' ) ?> '); if (answer) { var tagGroupsData = { task: 'delete', position: position, taxonomy: <?php echo json_encode( $enabled_taxonomies ) ?>, }; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); } else { jQuery('.tg_sort_tr[data-position='+position+'] td').removeClass('tg_ask_delete') } }, 500); }); jQuery(".tg_edit_label").live('mouseenter', function () { jQuery(this).children(".dashicons-edit").fadeIn(); }); jQuery(".tg_edit_label").live('mouseleave', function () { jQuery(this).children(".dashicons-edit").fadeOut(); }); jQuery(".tg_pager_button").live('click', function () { var page = jQuery(this).attr('data-page'); jQuery("#tg_start_position").val((page - 1) * <?php echo $items_per_page ?> + 1); tagGroupsData.task = "refresh"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery(".tg_up").live('click', function () { tagGroupsData.position = jQuery(this).attr('data-position'); tagGroupsData.task = "up"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery(".tg_down").live('click', function () { tagGroupsData.position = jQuery(this).attr('data-position'); tagGroupsData.task = "down"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); var element, start_pos, end_pos; jQuery("#tg_groups_container").sortable({ start: function (event, ui) { element = Number(ui.item.attr("data-position")); start_pos = ui.item.index(".tg_sort_tr") + 1; }, update: function (event, ui) { end_pos = ui.item.index(".tg_sort_tr") + 1; tagGroupsData.position = element; tagGroupsData.task = "move"; tagGroupsData.new_position = element + end_pos - start_pos; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); } }); jQuery("#tg_groups_container").disableSelection(); jQuery("#tg_groups_reload").live('click', function () { tagGroupsData.task = "refresh"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery("#tg_groups_sort_up").live('click', function () { tagGroupsData.task = "sortup"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); jQuery("#tg_groups_sort_down").live('click', function () { tagGroupsData.task = "sortdown"; tg_do_ajax(tagGroupsAjaxParameters, tagGroupsData, tagGroupsLabels); }); }); </script> <div id="tg_tools_accordion"> <h3 class="tg_pointer" title="<?php _e( 'Click to open', 'tag-groups' )?>"><?php _e( 'Tools', 'tag-groups' )?> <span class="dashicons dashicons-menu"></span></h3> <div class="tg_tools_accordion_container"> <div class="tg_tools_accordion_content"> <?php _e( 'Sort by alphabet:', 'tag-groups' )?> <span id="tg_groups_sort_up" class="tg_pointer dashicons dashicons-arrow-up" title="<?php _e( 'A-Z', 'tag-groups' )?>"></span> <span id="tg_groups_sort_down" class="tg_pointer dashicons dashicons-arrow-down" title="<?php _e( 'Z-A', 'tag-groups' )?>"></span> </div> <?php if ( current_user_can( 'manage_options' ) ) : ?> <div class="tg_tools_accordion_content"> <a href="<?php echo $settings_url ?>" class="dashicons-before dashicons-admin-settings tg_no_underline">&nbsp;<?php _e( 'Go to the settings.', 'tag-groups' ) ?></a> </div> <?php endif; ?> </div> </div> <script> jQuery(document).ready(function(){ jQuery( function() { jQuery( "#tg_tools_accordion" ).accordion({ active: false, collapsible: true, }); } ); jQuery(".chatty-mango-help-icon").click(function(){ var topic = jQuery(this).attr("data-topic"); jQuery(".chatty-mango-help-container-"+topic).slideToggle(); }); }); </script> PK�������!� y{����(��views/admin/settings_taxonomies.view.phpnu�[��������<div class="tg_settings_tabs_content"> <p><?php _e( 'Choose the taxonomies for which you want to use tag groups.', 'tag-groups' ) ?><span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="taxonomies"></span></p> <div class="chatty-mango-help-container chatty-mango-help-container-taxonomies" style="display:none;"> <p><?php _e( "The default texonomy is <b>Tags (post_tag)</b>. Please note that the tag clouds might not work with all taxonomies and that some taxonomies listed here may not be accessible in the admin backend. If you don't understand what is going on here, just leave the default.", 'tag-groups' ) ?></p> <p><?php _e( "<b>Please deselect taxonomies that you don't use. Using several taxonomies for the same post type or hierarchical taxonomies (like categories) is experimental and not supported.</b>", 'tag-groups' ) ?></p> <p><?php _e( 'To see the post type, hover your mouse over the option.', 'tag-groups' ) ?></p> </div> <div class="chatty-mango-settings-container"> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <?php echo wp_nonce_field( 'tag-groups-taxonomy', 'tag-groups-taxonomy-nonce', true, false ) ?> <ul> <p><input id="tg_advanced_options_checkbox" type="checkbox" value=1 autocomplete="off" /> <label for="tg_advanced_options_checkbox"><?php _e( 'Show hierarchical taxonomies', 'tag-groups' ) ?></label></p> <script> jQuery(document).ready(function(){ jQuery("#tg_advanced_options_checkbox").change(function(){ if ( jQuery("#tg_advanced_options_checkbox").is(":checked") ) { jQuery(".tg_advanced_options_items").slideDown(); } else { jQuery(".tg_advanced_options_items").slideUp(); } }); }); </script> <p>&nbsp;</p> <?php foreach ( $public_taxonomies as $taxonomy ) : ?> <li<?php if ( is_taxonomy_hierarchical( $taxonomy ) ) : ?> class="tg_advanced_options_items" style="display:none;"<?php endif; ?>> <input type="checkbox" name="taxonomies[]" autocomplete="off" id="<?php echo $taxonomy ?>" value="<?php echo $taxonomy ?>"<?php if ( in_array( $taxonomy, $enabled_taxonomies ) ) : ?> checked/>&nbsp; <a href="<?php echo TagGroups_Taxonomy::get_tag_group_admin_url( $taxonomy ) ?>" title="<?php _e( 'go to tag group administration', 'tag-groups' ) ?>"><span class="dashicons dashicons-index-card tg_no_underline"></span></a> <?php else: ?> />&nbsp;<span class="dashicons dashicons-index-card tg_no_underline tg_faded"></span> <?php endif; ?> <label for="<?php echo $taxonomy ?>" class="tg_unhide_trigger"> <?php echo TagGroups_Taxonomy::get_name_from_slug( $taxonomy ) ?> (<?php echo $taxonomy ?>) <span style="display:none; color:#999;">(<?php _e( 'post type', 'tag-groups') ?>: <?php echo implode( ', ', TagGroups_Taxonomy::post_types_from_taxonomies( $taxonomy ) ) ?>)</span> </label> </li> <?php endforeach; ?> </ul> <script> jQuery(document).ready(function () { jQuery(".tg_unhide_trigger").mouseover(function () { jQuery(this).find("span").show(); }); jQuery(".tg_unhide_trigger").mouseout(function () { jQuery(this).find("span").hide(); }); }); </script> <input type="hidden" name="tg_action" value="taxonomy"> <input class="button-primary" type="submit" name="Save" value="<?php _e( 'Save Taxonomies', 'tag-groups' ) ?>" id="submitbutton" /> </form> </div> </div> PK�������!�����&��views/admin/bulk_admin_footer.view.phpnu�[��������<?php /* * constructing the action menu * * Using .html() instead of .text() to avoid ampersands displaying */ ?> <script> jQuery(document).ready(function () { jQuery('<option>').val('assign').html('<?php _e( 'Assign to', 'tag-groups' ) ?>').appendTo("select[name='action']"); jQuery('<option>').val('assign').html('<?php _e( 'Assign to', 'tag-groups' ) ?>').appendTo("select[name='action2']"); var sel_top = jQuery("<select name='term-group-top'>").insertAfter("select[name='action']"); var sel_bottom = jQuery("<select name='term-group-bottom'>").insertAfter("select[name='action2']"); <?php foreach ( $data as $term_group ) : ?> sel_top.append(jQuery("<option>").attr("value", "<?php echo $term_group['term_group'] ?>").html("<?php echo htmlentities( $term_group['label'], ENT_QUOTES, "UTF-8" ) ?>")); sel_bottom.append(jQuery("<option>").attr("value", "<?php echo $term_group['term_group'] ?>").html("<?php echo htmlentities( $term_group['label'], ENT_QUOTES, "UTF-8" ) ?>")); <?php endforeach; ?> <?php if ( isset( $_GET['orderby'] ) && $_GET['orderby'] == 'term_group' ) : ?> jQuery('th#term_group').addClass('sorted'); <?php if ( isset( $_GET['order'] ) && $_GET['order'] == 'asc' ) : ?> jQuery('th#term_group').addClass('asc'); <?php else: ?> jQuery('th#term_group').addClass('desc'); <?php endif; ?> <?php else: ?> jQuery('th#term_group').addClass('sortable'); <?php endif; ?> jQuery('[name="term-group-top"]').change(function () { jQuery('[name="action"]').val('assign'); jQuery('[name="action2"]').val('assign'); var selected = jQuery(this).val(); jQuery('[name="term-group-bottom"]').val(selected); }); jQuery('[name="term-group-bottom"]').change(function () { jQuery('[name="action"]').val('assign'); jQuery('[name="action2"]').val('assign'); var selected = jQuery(this).val(); jQuery('[name="term-group-top"]').val(selected); }); }); </script> PK�������!�������$��views/admin/settings_alerts.view.phpnu�[��������<div class="tg-alert-rounded"> <ul style="list-style-type: disc; margin-left: 25px;"> <li><?php echo implode( '</li><li>', $alerts ) ?></li> </ul> </div> PK�������!�!~����.��views/admin/settings_back_end_filters.view.phpnu�[��������<div class="tg_settings_tabs_content"> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <?php echo wp_nonce_field( 'tag-groups-backend', 'tag-groups-backend-nonce', true, false ) ?> <p> <input type="checkbox" id="tg_filter_posts" name="filter_posts" autocomplete="off" value="1"<?php if ( $show_filter_posts ) : ?> checked<?php endif; ?>/>&nbsp; <label for="tg_filter_posts"><?php _e( 'Display filter on post admin', 'tag-groups' ) ?></label> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="filter-posts"></span> </p> <div class="chatty-mango-help-container chatty-mango-help-container-filter-posts" style="display:none;"> <?php _e( 'Add a pull-down menu to the filters above the list of posts. If you filter posts by tag groups, then only items will be shown that have tags (terms) in that particular group. This feature can be turned off so that the menu won\'t obstruct your screen if you use a high number of groups. May not work with all taxonomies.', 'tag-groups' ) ?> </div> <p> <input type="checkbox" id="tg_filter_tags" name="filter_tags" autocomplete="off" value="1"<?php if ( $show_filter_tags ) : ?> checked<?php endif; ?>/>&nbsp; <label for="tg_filter_tags"><?php _e( 'Display filter on tag admin', 'tag-groups' ) ?></label> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="filter-tags"></span> </p> <div class="chatty-mango-help-container chatty-mango-help-container-filter-tags" style="display:none;"> <?php _e( 'Add a filter to the list of tags. Disable it here if it conflicts with other plugins or themes.', 'tag-groups' ) ?> </div> <input type="hidden" name="tg_action" value="backend"> <input class="button-primary" type="submit" name="Save" value="<?php _e( 'Save Settings', 'tag-groups' ) ?>" id="submitbutton" /> </form> </div> PK�������!�#m&_��_��%��views/admin/settings_premium.view.phpnu�[��������<div class="tg_premium_promotion_main_box"> <h1><?php _e( 'Get more features', 'tag-groups' ) ?></h1> <p><?php printf( __( 'The <b>Tag Groups</b> plugin can be extended by <a %s>Tag Groups Premium</a>, which offers you many more useful features to take your tags to the next level:', 'tag-groups' ), 'href="https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></p> <ul style="list-style:disc;"> <li style="padding:0 1em; margin-left:1em;"><?php _e( 'The <b>Shuffle Box</b>, a filterable tag cloud: Filter your tags live by group or by name with a nifty animation. See the image below.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( 'A <b>tag input tool</b> on the post edit screen allows you to work with tags on two levels: first select the group, and then choose among the tags of that group.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>Color coding</b> minimizes the risk of accidentally creating a new tag with a typo: New tags are green, tags that changed their groups are yellow.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>Control new tags:</b> Optionally restrict the creation of new tags or prevent moving tags to another group on the post edit screen. These restrictions can be overridden per user role.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>Bulk-add tags:</b> If you often need to insert the same set of tags, simply join them in one group and insert them with the push of a button.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( 'The option to add each term to <b>multiple groups</b>.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>Filter posts</b> on the front end by tag group through a URL parameter.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>Dynamic Post Filter</b>: While visitors choose from available tags, the list shows posts that match these tags. Tags are organized under groups, which allows for useful logical operators. (e.g. show products that are red OR blue (group "color") AND have a size of M OR XL OR XXL.)', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( 'Display <b>post tags</b> segmented into groups under you posts.', 'tag-groups' ) ?></li> <li style="padding:0 1em; margin-left:1em;"><?php _e( '<b>New tag clouds:</b> Display your tags in a table or tags from multiple groups combined into one tag cloud.', 'tag-groups' ) ?></li> </ul> <p><?php printf( __( 'See the complete <a %1$s>feature comparison</a> or check out the <a %2$s>demos</a>.', 'tag-groups' ), 'href="https://chattymango.com/tag-groups-base-premium-comparison/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"', 'href="https://demo.chattymango.com/tag-groups-premium-demo-page/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"' ) ?></p> <?php if ( ! $tag_groups_premium_fs_sdk->is_paying() ) : ?> <div class="tg_premium_promotion_call_to_action"> <span style="float:right; margin: 0 10px;"><a href="<?php echo admin_url( 'admin.php?page=tag-groups-settings-pricing&trial=true' ) ?>" class="tg_premium_promotion_call_to_action_button"><?php _e( 'Try Premium', 'tag-groups' ) ?></a></span> <h3> <?php _e( 'Start your 7-day free trial!', 'tag-groups' ) ?><br/> <?php _e( 'All features. Cancel anytime.', 'tag-groups' ) ?> </h3> </div> <?php endif; ?> </div> <div class="tg_premium_promotion_right_image_box"> <img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/cm-tgp-icon-200x200.png" alt="Tag Groups Premium icon" class="tg_premium_promotion_logo"/> </div> <div class="tg_premium_promotion_right_image_box"> <img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/tgp-meta-box.png" alt="Tag Groups Meta Box" title="Replace the default tag meta box with one that understands your tag groups!" class="tg_premium_promotion_right_image"/> <div class="tg_premium_promotion_right_image_box_caption"><?php _e( 'Replace the default tag meta box with one that understands your tag groups!', 'tag-groups' ) ?></div> </div> <div class="tg_premium_promotion_bottom_image_box"> <a href="https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"> <img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/tgp-dpf-toggles.png" class="tg_premium_promotion_bottom_image" /> </a> <div class="tg_premium_promotion_bottom_image_box_caption"><?php _e( 'Visitors can search your posts by group and tags.', 'tag-groups' ) ?></div> </div> <div class="tg_premium_promotion_bottom_image_box"> <a href="https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=dashboard" target="_blank"> <img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/tag-groups-premium-shuffle-box-animated-800.gif" class="tg_premium_promotion_bottom_image" /> </a> <div class="tg_premium_promotion_bottom_image_box_caption"><?php _e( 'Display a tag cloud that can filter tags by tag name and by group.', 'tag-groups' ) ?></div> </div> PK�������!�t����*��views/admin/quick_edit_javascript.view.phpnu�[��������<script> function set_inline_tag_group_selected(termGroupsSelectedJson, nonce) { var termGroupsSelected = JSON.parse(termGroupsSelectedJson); inlineEditTax.revert(); var tagGroupsSelectElement = document.getElementById('term-group-option'); var nonceInput = document.getElementById('tag-groups-option-nonce'); nonceInput.value = nonce; for (i = 0; i < tagGroupsSelectElement.options.length; i++) { if (termGroupsSelected.indexOf(parseInt(tagGroupsSelectElement.options[i].value)) > -1) { tagGroupsSelectElement.options[i].setAttribute("selected", "selected"); } else { tagGroupsSelectElement.options[i].removeAttribute("selected"); } if (i + 1 == tagGroupsSelectElement.options.length) callSumoSelect(); } } function callSumoSelect() { setTimeout(function() { jQuery('#term-group-option').SumoSelect({ search: true, forceCustomRendering: true, <?php if ( class_exists( 'TagGroups_Premium_Group' ) && $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) : ?> selectAll: true, captionFormatAllSelected: '<?php _e( 'all {0} selected', 'tag-groups' ) ?>', captionFormat: '<?php _e( '{0} selected', 'tag-groups' ) ?>', <?php endif; ?> }); }, 50); } </script> PK�������!�r �� ��,��views/admin/setup_wizard_taxonomies.view.phpnu�[��������<div style="margin: 50px 0 0;"> <p><?php _e( 'Choose the taxonomies for which you want to use tag groups.', 'tag-groups' ) ?> <?php _e( "In most cases the default taxonomy <b>Tags (post_tag)</b> will do the job.", 'tag-groups' ) ?><span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="taxonomies"></span></p> <div class="chatty-mango-help-container chatty-mango-help-container-taxonomies" style="display:none;"> <p><?php _e( "The default texonomy is <b>Tags (post_tag)</b>. Please note that the tag clouds might not work with all taxonomies and that some taxonomies listed here may not be accessible in the admin backend. If you don't understand what is going on here, just leave the default.", 'tag-groups' ) ?></p> </div> <div class="chatty-mango-settings-container"> <form method="POST" action="<?php echo $setup_wizard_next_link ?>"> <ul> <p>&nbsp;</p> <?php foreach ( $public_taxonomies as $taxonomy ) : ?> <?php if ( is_taxonomy_hierarchical( $taxonomy ) ) { continue; } ?> <li class="tg_advanced_options_items"> <input type="checkbox" name="taxonomies[]" autocomplete="off" id="<?php echo $taxonomy ?>" value="<?php echo $taxonomy ?>"<?php if ( in_array( $taxonomy, $enabled_taxonomies ) ) : ?> checked <?php endif; ?> />&nbsp;<span class="dashicons dashicons-index-card tg_no_underline<?php if ( strpos( $taxonomy, '_tag' ) === false ) :?> tg_faded<?php endif; ?>"></span> <label for="<?php echo $taxonomy ?>" class="tg_unhide_trigger"> <?php echo TagGroups_Taxonomy::get_name_from_slug( $taxonomy ) ?> (<?php echo $taxonomy ?>) <span style="display:none; color:#999;">(<?php _e( 'post type', 'tag-groups') ?>: <?php echo implode( ', ', TagGroups_Taxonomy::post_types_from_taxonomies( $taxonomy ) ) ?>)</span> </label> </li> <?php endforeach; ?> </ul> <p>&nbsp;</p> <h4><span class="dashicons dashicons-lightbulb"></span>&nbsp;<?php _e( 'You will find more options in the Tag Groups settings.' ) ?></h4> <input type="hidden" name="tg_action_wizard" value="taxonomy"> <input type="submit" value="<?php _e( 'Next Step' ) ?>" class="button button-primary tag-groups-wizard-submit"> <input type="hidden" name="tag-groups-setup-wizard-nonce" id="tag-groups-setup-wizard-nonce" value="<?php echo wp_create_nonce( 'tag-groups-setup-wizard-nonce' ) ?>" /> </form> </div> </div> <script> jQuery(document).ready(function () { jQuery(".tg_unhide_trigger").mouseover(function () { jQuery(this).find("span").show(); }); jQuery(".tg_unhide_trigger").mouseout(function () { jQuery(this).find("span").hide(); }); }); </script> PK�������!�#t����*��views/admin/setup_wizard_finished.view.phpnu�[��������<div style="margin: 50px 0 0;"> <h3><?php _e( 'Well done!', 'tag-groups' ) ?></h3> <?php if ( ! empty( $groups_admin_link ) ) : ?> <p><a href="<?php echo esc_url( $groups_admin_link ) ?>" target="_blank"><?php _e( 'Now see the sample groups that we just created.', 'tag-groups' ) ?></a></p> <?php endif; ?> <?php if ( ! empty( $tag_group_sample_page_id ) ) : ?> <p><a href="<?php echo get_preview_post_link( $tag_group_sample_page_id ) ?>" target="_blank"><?php _e( 'Or preview the sample page here.', 'tag-groups' ) ?></a></p> <?php endif; ?> <?php if ( ! empty( $groups_admin_link ) ) : ?> <p><?php printf( __( 'Or go to the <a %s>Tag Groups settings</a> or visit the <a %s>documentation</a>.', 'tag-groups' ), 'href="' . $settings_home_link . '" target="_blank"', 'href="' . $documentation_link . '" target="_blank"' ) ?></p> <?php else: ?> <p><a href="<?php echo esc_url( $settings_home_link ) ?>" target="_blank"><?php printf( __( 'Now go to the <a %s>Tag Groups settings</a>, or visit the <a %s>documentation</a>.', 'tag-groups' ), 'href="' . $settings_home_link . '" target="_blank"', 'href="' . $documentation_link . '" target="_blank"' ) ?></a></p> <?php endif; ?> <p><?php _e( 'If you need to launch the Setup Wizard again, you can find it in the settings. Just enter "wizard" in the search field.', 'tag-groups' ) ?></p> <p><?php _e( 'Happy tagging!', 'tag-groups' ) ?></p> </div> PK�������!�89c��c��(��views/admin/setup_wizard_header.view.phpnu�[��������<h1><span class="dashicons dashicons-lightbulb"></span>&nbsp;<?php _e( 'Tag Groups Setup Wizard', 'tag-groups' ) ?></h1> <div class="wizard-box"> <ul class="tag-groups-steps"> <?php foreach ( $steps as $key => $step_info ) : ?> <?php if ( ! empty( $step_info['title'] ) ) : ?> <li> <?php if ( $key < $step ) : ?> <a href="<?php echo add_query_arg( 'step', $key, admin_url( 'admin.php?page=tag-groups-settings-setup-wizard' ) ) ?>"> <?php endif; ?> <h3 <?php if ( $key > $step ) : ?>style="color:#ccc"<?php endif; ?> <?php if ( $key == $step ) : ?>style="color:#009CD0"<?php endif; ?>> <?php if ( $key < $step ) : ?> <span class="dashicons dashicons-yes-alt"></span> <?php elseif ( $key == $step ) : ?> <span class="dashicons dashicons-admin-settings"></span> <?php else: ?> <span class="dashicons dashicons-admin-settings"></span> <?php endif; ?> <?php echo $key ?>. <?php echo $step_info['title'] ?> </h3> </a> </li> <?php if ( $key < count( $steps ) - 1 ) : ?> <li><span class="dashicons dashicons-arrow-right-alt" <?php if ( $key + 1 > $step ) : ?>style="color:#ccc"<?php endif; ?>></span></li> <?php endif; ?> <?php endif; ?> <?php endforeach; ?> </ul> </div> <div class="wizard-box"> PK�������!� ����&��views/admin/new_tag_from_list.view.phpnu�[�������� <div class="form-field"> <label for="term-group"><?php _e( 'Tag Groups', 'tag-groups' ) ?></label> <select id="term-group" name="term-group<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo '[]' ?>"<?php if ( class_exists( 'TagGroups_Premium_Group' ) ) echo ' multiple' ?>> <?php if ( ! class_exists( 'TagGroups_Premium_Group' ) ) : ?> <option value="0" selected ><?php _e( 'not assigned', 'tag-groups' ) ?></option> <?php endif; ?> <?php foreach ( $data as $term_group ) : ?> <option value="<?php echo $term_group['term_group']; ?>"><?php echo htmlentities( $term_group['label'], ENT_QUOTES, "UTF-8" ); ?></option> <?php endforeach; ?> </select> <script> jQuery(document).ready(function () { jQuery('#term-group').SumoSelect({ search: true, forceCustomRendering: true, <?php if ( class_exists( 'TagGroups_Premium_Group' ) && $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) : ?> triggerChangeCombined: true, selectAll: true, captionFormatAllSelected: '<?php _e( 'all {0} selected', 'tag-groups' ) ?>', captionFormat: '<?php _e( '{0} selected', 'tag-groups' ) ?>', <?php endif; ?> }); }); </script> <input type="hidden" name="tag-groups-nonce" id="tag-groups-nonce" value="<?php echo wp_create_nonce( 'tag-groups-nonce' ) ?>" /> <input type="hidden" name="new-tag-created" id="new-tag-created" value="1" /> <input type="hidden" name="tag-groups-taxonomy" id="tag-groups-taxonomy" value="<?php echo $screen->taxonomy; ?>" /> </div> PK�������!�a����!��views/admin/admin_notice.view.phpnu�[��������<div class="notice notice-<?php echo $notice['type'] ?> is-dismissible" style="clear:both;"> <?php echo $notice['content'] ?> <div style="clear:both;"></div> </div> <?php if ( '' != $ajax_link ) : ?> <script> jQuery(document).ready(function(){ jQuery("#tag_groups_premium_clear_cache").click(function(){ jQuery("#tag_groups_premium_clear_cache").attr("disabled", "disabled"); jQuery.ajax({ url: "<?php echo $ajax_link ?>", data: { action: "tg_ajax_clear_object_cache", }, success: function( data ) { jQuery("#tag_groups_premium_clear_cache").replaceWith("<span class=\'dashicons dashicons-yes\'></span>"); } }); }); }); </script> <?php endif; ?> PK�������!�WՉv����)��views/admin/settings_tools_reset.view.phpnu�[��������<div class="tg_settings_tabs_content"> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <?php echo wp_nonce_field( 'tag-groups-reset', 'tag-groups-reset-nonce', true, false ) ?> <p><?php _e( 'Use this button to delete all tag groups and assignments. Your tags will not be changed. Check the checkbox to confirm.', 'tag-groups' ) ?></p> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="delete"></span></p> <div class="chatty-mango-help-container chatty-mango-help-container-delete" style="display:none;"> <?php _e( 'Please keep in mind that the tag assignments cannot be recovered by the export/import function.', 'tag-groups' ) ?> </div> <input type="checkbox" id="reset_ok" name="ok" autocomplete="off" value="yes" /> <label for="reset_ok"><?php _e( 'I know what I am doing.', 'tag-groups' ) ?></label> <input type="hidden" id="action" name="tg_action" value="reset"> <p><input class="button-primary" type="submit" name="delete" value="<?php _e( "Delete Groups", "tag-groups" ) ?>" id="submitbutton" /> </form> <p>&nbsp;</p> <h2><?php _e( 'Delete Settings and Groups', 'tag-groups' ) ?></h2> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <?php echo wp_nonce_field( 'tag-groups-uninstall', 'tag-groups-uninstall-nonce', true, false ) ?> <p> <input type="checkbox" id="data_ok" name="ok" autocomplete="off" value="yes" <?php if ( $tag_group_reset_when_uninstall ) : ?> checked<?php endif; ?> /> <label for="data_ok"><?php _e( "Delete all groups and settings when uninstalling the plugin.", "tag-groups" ) ?></label> </p> <input type="hidden" id="action" name="tg_action" value="uninstall"> <input class="button-primary" type="submit" name="save" value="<?php _e( "Save Settings", "tag-groups" ) ?>" id="submitbutton" /> </form> </div> PK�������!�E �� ��1��views/admin/settings_tools_export_import.view.phpnu�[��������<div class="tg_settings_tabs_content"> <p> <form method="POST" action="<?php esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <h3><?php _e( 'Export', 'tag-groups' ) ?><span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="export"></span></h3> <div class="chatty-mango-help-container chatty-mango-help-container-export" style="display:none;"> <input type="hidden" name="tag-groups-export-nonce" id="tag-groups-export-nonce" value="<?php echo wp_create_nonce( 'tag-groups-export' ) ?>" /> <p><?php _e( 'Use this button to export all Tag Groups settings and groups and all terms that are assigned to a group into files.', 'tag-groups' ) ?></p> <p><?php _e( "You can import both files separately. Category hierarchy won't be saved. When you restore terms that were deleted, they receive new IDs and you must assign them to posts again. Exporting cannot substitute a backup.", 'tag-groups' ) ?></p> </div> <input type="hidden" id="action" name="tg_action" value="export"> <p><input class="button-primary" type="submit" name="export" value="<?php _e( 'Export Files', 'tag-groups' ) ?>" id="submitbutton" /></p> </form> </p> <p>&nbsp;</p> <p> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>" enctype="multipart/form-data"> <h3><?php _e( 'Import', 'tag-groups' ) ?><span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="import"></span></h3> <div class="chatty-mango-help-container chatty-mango-help-container-import" style="display:none;"> <input type="hidden" name="tag-groups-import-nonce" id="tag-groups-import-nonce" value="<?php echo wp_create_nonce( 'tag-groups-import' ) ?>" /> <p><?php _e( 'Below you can import previously exported settings/groups or terms from a file.', 'tag-groups' ) ?></p> <p<?php _e( 'It is recommended to back up the database of your site before proceeding.', 'tag-groups' ) ?></p> </div> <input type="hidden" id="action" name="tg_action" value="import"> <p><input type="file" id="settings_file" name="settings_file"></p> <p><input class="button-primary" type="submit" name="import" value="<?php _e( 'Import File', 'tag-groups' ) ?>" id="submitbutton" /></p> </form> </p> </div> PK�������!�'-8 ��8 �� ��views/admin/sample_page.view.phpnu�[��������<p> <?php printf( __( '%s created this sample page in the Setup Wizard of the <b>Tag Groups</b> plugin. You can safely edit and delete it or keep it for future reference.', 'tag-groups' ), $author_display_name ) ?> </p> <p> <?php _e( 'The following shortcodes use a variety of parameters so that you can get an idea of the options. Feel free to generate a new sample page with more features after upgrading the plugin.', 'tag-groups' ) ?> </p> <p> <?php _e( 'Please find links to the documentation in the Tag Groups settings.', 'tag-groups' ) ?> </p> <hr /> <?php if ( ! $premium_shortcodes ) : // Base plan doesn't have themes ?> <h2><?php _e( 'Tabbed Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_cloud custom_title="We have {count} posts for this tag." hide_empty=0 hide_empty_tabs=1]  </p> <hr /> <h2><?php _e( 'Accordion Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_accordion separator="|" prepend="#" hide_empty=0 mouseover=1 heightstyle=content hide_empty_content=1] </p> <hr /> <h2><?php _e( 'Alphabetical Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_alphabet_tabs exclude_letters="äöüß" hide_empty=0] </p> <hr /> <?php else: ?> <h2><?php _e( 'Tabbed Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_cloud div_class="tag-groups-theme-green" append="{count}" custom_title="We have {count} posts for this tag." hide_empty=0 hide_empty_tabs=1]  </p> <hr /> <h2><?php _e( 'Accordion Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_accordion separator="|" prepend="#" hide_empty=0 mouseover=1 heightstyle=content hide_empty_content=1] </p> <hr /> <h2><?php _e( 'Alphabetical Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_alphabet_tabs exclude_letters="äöüß" hide_empty=0] </p> <hr /> <h2><?php _e( 'Shuffle Box', 'tag-groups' ) ?></h2> <p> [tag_groups_shuffle_box prepend="{" append="}" custom_title="{count} posts for all groups" hide_empty=0] </p> <hr /> <h2><?php _e( 'Table Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_table table_class="tag-groups-theme-slategray" prepend="#" append="{count}" hide_empty=0 hide_empty_columns=1] </p> <hr /> <h2><?php _e( 'Combined Tag Cloud', 'tag-groups' ) ?></h2> <p> [tag_groups_combined_cloud hide_empty=0] </p> <hr /> <?php endif; ?> <?php if ( $premium_shortcodes && $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) : ?> <h2><?php _e( 'Dynamic Post Filter With Toggles', 'tag-groups' ) ?></h2> <p><?php _e( 'The post filter works best if you use the same tags that were assigned to tag groups with published posts.', 'tag-groups' ) ?></p> <p> [tag_groups_dpf_toggle_messages] </p> <p> [tag_groups_dpf_toggle_menu operator="IN AND" persistent_filter=20 pager=1 display_amount=1 transition=fade accordion=1 div_class=dpf_toggle_menu_dark caching_time=10 default_show_posts=1] </p> <p> [tag_groups_dpf_toggle_body div_class=dpf_toggle_menu_dark] </p> <?php endif; ?> <div style="clear:both;"></div> <p>Created by <a href="https://chattymango.com" >Chatty Mango</a></p> PK�������!�ec"����(��views/admin/settings_about_info.view.phpnu�[��������<div class="tg_settings_tabs_content"> <h4><img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/cm-tg-icon-64x64.png" alt="Tag Groups icon" style="float: left; margin: 0 10px 10px 0;" />Tag Groups, Version: <?php echo TAG_GROUPS_VERSION ?></h4> <p>Developed by Christoph Amthor @ <a href="https://chattymango.com?pk_campaign=tg&pk_kwd=dashboard" target="_blank">Chatty Mango</a></p> <p>&nbsp;</p> <h2><?php _e( 'Follow Us', 'tag-groups' ) ?></h2> <p><a href="https://www.facebook.com/chattymango/" target="_blank" class="tg_social_media_admin"><span class="dashicons dashicons-facebook"></span></a> <a href="https://twitter.com/ChattyMango" target="_blank" class="tg_social_media_admin"><span class="dashicons dashicons-twitter"></span></a></p> <p>&nbsp;</p> <h2><?php _e( 'Donations', 'tag-groups' ) ?></h2> <p><?php _e( 'This plugin is the result of many years of development, adding new features, fixing bugs and answering to support questions.', 'tag-groups' ) ?></p> <p><?php _e( 'If you find <b>Tag Groups</b> useful or use it to make money, I would appreciate a donation:', 'tag-groups' ) ?></p> <p><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=NUR3YJG7VAENA" target="_blank"><img src="<?php echo TAG_GROUPS_PLUGIN_URL ?>/assets/images/btn_donateCC_LG.gif" alt="Donate via Paypal" title="Donate via Paypal" border="0" /></a></p> <p>&nbsp;</p> <h2><?php _e( 'Reviews', 'tag-groups' ) ?></h2> <p><?php printf( __( 'I would be glad if you could give my plugin a <a %s>five-star rating</a>.', 'tag-groups' ), 'href="https://wordpress.org/support/plugin/tag-groups/reviews/?filter=5" target="_blank"' ) ?> </p> <div style="display:inline-block;"><a href="https://wordpress.org/support/plugin/tag-groups/reviews/?filter=5" target="_blank" style="color: #ffb900;text-decoration: none;"> <span class="dashicons dashicons-star-filled"></span> <span class="dashicons dashicons-star-filled"></span> <span class="dashicons dashicons-star-filled"></span> <span class="dashicons dashicons-star-filled"></span> <span class="dashicons dashicons-star-filled"></span> </a></div> <p><?php _e( 'Thanks!', 'tag-groups' ) ?></p> <p>Christoph</p> </div> PK�������!�=(����5��views/admin/settings_troubleshooting_support.view.phpnu�[��������<div class="tg_settings_tabs_content"> <p><?php printf( __( 'If you need help or want to report a bug or suggest a new feature, you can do so on the <a %s>official support forum at WordPress.org</a>.', 'tag-groups' ), 'href="https://wordpress.org/support/plugin/tag-groups#new-post" target="_blank"' ) ?></p> <p><?php _e( 'Please make sure that you have the latest version of this plugin.' ) ?></p> <p><?php _e( 'If you want to report a bug, please try first to reproduce the error with all other plugins disabled and with a default theme so that we know if there is any interference by another plugin or theme.' ) ?></p> <p><?php _e( 'Thank you for your cooperation!' ) ?></p> </div> PK�������!�*s����.��views/admin/settings_front_end_themes.view.phpnu�[��������<div class="tg_settings_tabs_content"> <form method="POST" action="<?php echo esc_url( $_SERVER['REQUEST_URI'] ) ?>"> <?php echo wp_nonce_field( 'tag-groups-settings', 'tag-groups-settings-nonce', true, false ) ?> <p> <?php _e( "Here you can choose a theme for the tabbed and the accordion tag cloud. The path to own themes is relative to the <i>uploads</i> folder of your WordPress installation. Leave empty if you don't use any.", 'tag-groups' ) ?> <span class="dashicons dashicons-editor-help chatty-mango-help-icon" data-topic="themes"></span> </p> <div class="chatty-mango-help-container chatty-mango-help-container-themes" style="display:none;"> <p> <?php _e( 'New themes can be created with the <a href="http://jqueryui.com/themeroller/" target="_blank">jQuery UI ThemeRoller</a>:', 'tag-groups' ) ?> <ol> <li><?php _e( 'On the page "Theme Roller" you can customize all features or pick one set from the gallery. Finish with the "download" button.', 'tag-groups' ) ?></li> <li><?php _e( 'On the next page ("Download Builder") you will need to select the version 1.12.x and the components "Widget", "Accordion" and "Tabs". Make sure that before downloading you enter at the bottom as "CSS Scope" <b>.tag-groups-cloud</b> (including the dot).', 'tag-groups' ) ?></li> <li><?php _e( 'Then you unpack the downloaded zip file. You will need the "images" folder and the "jquery-ui.theme.min.css" file.', 'tag-groups' ) ?></li> <li><?php _e( 'Create a new folder inside your <i>wp-content/uploads</i> folder (for example "my-theme") and copy there these two items.', 'tag-groups' ) ?></li> <li><?php _e( 'Enter the name of this new folder (for example "my-theme") below.', 'tag-groups' ) ?> </li> </ol> </p> </div> <div class="chatty-mango-settings-container"> <div style="width:50%;min-width:500px;float:left"> <ul> <?php foreach ( $default_themes as $theme ) : ?> <li> <input type="radio" name="theme" id="tg_<?php echo $theme ?>" value="<?php echo $theme ?>" <?php if ( $tag_group_theme == $theme ) : ?> checked<?php endif; ?> />&nbsp; <label for="tg_ $theme . '"><?php echo $theme ?></label> </li> <?php endforeach; ?> <li> <input type="radio" name="theme" value="own" id="tg_own" <?php if ( ! in_array( $tag_group_theme, $default_themes ) ) : ?> checked<?php endif; ?> />&nbsp;<label for="tg_own">own: /wp-content/uploads/</label><input type="text" id="theme-name" name="theme-name" value="<?php if ( ! in_array( $tag_group_theme, $default_themes ) ) : echo $tag_group_theme; endif; ?>" /> </li> <li> <input type="checkbox" name="enqueue-jquery" autocomplete="off" id="tg_enqueue-jquery" value="1" <?php if ( $tag_group_enqueue_jquery ) : ?> checked<?php endif; ?>/>&nbsp; <label for="tg_enqueue-jquery"> <?php _e( 'Use jQuery. (Default is on. Other plugins might override this setting.)', 'tag-groups' ) ?> </label> </li> </ul> </div> <div style="width: 50%; min-width: 500px; float: left"> <h4><?php _e( 'Further options', 'tag-groups' ) ?></h4> <ul> <li> <input type="checkbox" name="mouseover" autocomplete="off" id="mouseover" value="1" <?php if ( $tag_group_mouseover ) : ?> checked<?php endif; ?>>&nbsp; <label for="mouseover"><?php _e( 'Tabs triggered by hovering mouse pointer (without clicking).', 'tag-groups' ) ?></label> </li> <li> <input type="checkbox" name="collapsible" autocomplete="off" id="collapsible" value="1"' <?php if ( $tag_group_collapsible ) : ?> checked<?php endif; ?>>&nbsp; <label for="collapsible"><?php _e( 'Collapsible tabs (toggle open/close).', 'tag-groups' ) ?></label> </li> <li> <input type="checkbox" name="html_description" autocomplete="off" id="html_description" value="1" '; <?php if ( $tag_group_html_description ) : ?> checked<?php endif; ?>>&nbsp; <label for="html_description"><?php _e( 'Allow HTML in tag description.', 'tag-groups' ) ?></label> </li> </ul> </div> <div style="width: 100%; min-width: 500px; float: left; padding: 20px 0;"> <input type="hidden" id="action" name="tg_action" value="theme"> <input class="button-primary" type="submit" name="save" value="<?php _e( "Save Theme Options", "tag-groups" ) ?>" id="submitbutton" /> </div> </div> </form> </div> PK�������!�|A;���;���*��views/admin/tag_page_inline_style.view.phpnu�[��������<style> .fixed .column-term_group { width: 20%; } </style> PK�������!�c6����"��views/admin/settings_home.view.phpnu�[��������<div style="float:left;"> <h2><?php _e( 'Active Taxonomies', 'tag-groups' ) ?></h2> <table class="widefat fixed striped"> <?php foreach ( $taxonomy_infos as $taxonomy_info ) : ?> <tr> <td> <div class="tg_admin_accordion"> <h4><?php echo $taxonomy_info['name'] ?> (<?php echo $taxonomy_info['slug'] ?>)</h4> <div style="display:none;"> <?php if ( $group_count < 100 && $taxonomy_info['term_count'] < 10000 ) : ?> <h4><?php _e( 'Group Statistics', 'tag-groups' ) ?> <?php if ( defined( 'ICL_LANGUAGE_CODE' ) ) : ?> (<?php _e( 'for the selected language', 'tag-groups' ) ?>) <?php endif; ?> </h4> <?php echo $taxonomy_info['info_html'] ?> <?php else: ?> <?php printf( 'This taxonomy has %d tags in %d groups.', $taxonomy_info['term_count'], $group_count ) ?> <?php endif; ?> </div> </td> <td style="max-width:300px;"> <span class="dashicons dashicons-arrow-right-alt tg_no_underline"></span>&nbsp;<a href="<?php echo $taxonomy_info['tag_group_admin'] ?>"><?php _e( 'go to tag group administration', 'tag-groups' ) ?></a> </td> </tr> <?php endforeach; ?> </table> </div> <!-- begin Tag Groups plugin --> <script> jQuery(document).ready(function() { var icons = { header: "dashicons dashicons-arrow-right", activeHeader: "dashicons dashicons-arrow-down" }; jQuery( ".tg_admin_accordion" ).accordion({ icons:icons, collapsible: true, active: false, heightStyle: "content" }); }); </script> <!-- end Tag Groups plugin --> PK�������!�PnA��nA����languages/tag-groups-es_ES.monu�[������������`�����������������(�����)�����B�����Z��x���p��L�����B���6 ��v���y ��7�� ��v���( ����� �����^ ��A��� �����^ ��a��� ��L���\��<�����C�����?���*��=���j��C����������g�����?��������N�����T��-���[�������<����������X��������B�����I�����[��1��n�������-�����%���������� ��� ����������0�� ���7�����E��*���Y������������'����������<�������������)�����>�����R����X����������*�����-�������������������������������� ���y��������������������������� ����� ������������� �� �����<���&�� ���c�� ���m�� ���w�� �����8����������H�����w�������������-����2�������'���` ��.��� ��+��� ����� ����� ��3��� !�����>!�� ���B!����O!�����"�����#�����#�����?#��W���#��O���"$�����r$��l��%�����p&�����'�����'��[���(�����Q)��k��� *��n���u*��D���*��M���)+��B���w+��C���+��^���+�����],��x���D-��G���-�� ���.�����.��?���.��#���W.��O���{.�� ���.��k���.�����C/�� ���L/�����Z/����x/�����1��/���1��.���D1�����s1�� ���y1��!���1�����1�����1�����1��2���1����� 2�����2��6���-2�����d2��]���2�����2�����3�����3�����)3��D��/3�����t8�����8�����8�����/9��#���89�����\9�����b9�����9�����9�� ���+:�����7:�����V:��'���k:�����:�����:�� ���:�����:�����:�����:�� ��� ;��L���;�����a;�����s;�����;�����;��?���;�����;��Z���;�����J<�����<�����=����=�����?��-���S@��B���@��;���@������A�����A��3���'A�����[A�� ���aA�������������A���6�����������+�������J���8����������C���4�������Z���N������\��� ���X���<����������^���/���V���)���?���E��������������� ���*�����������K���D���-�������R������������������[����������L���!���'���T���(������9������� �������H���%������Y���B�����������������7���������������.���@���$������ ���#���1���;���U���2�������������`����������_����������]���Q���F���I���������� ���M�������W���=���3���0�������:�����������5��� ���,�����������������>������S���&���P���"�������������G����������O��������<b>Advanced Styling:</b>�<b>Groups and Tabs:</b>�<b>Tags or Terms:</b>�<b>adjust_separator_size=1 or =0</b> Whether to adjust the separator's size to the size of the following tag. Default: 0�<b>amount=x</b> Maximum amount of tags in one cloud (per group). Default: 40�<b>append="something"</b> Append to each tag label. Default: empty�<b>collapsible=1 or =0</b> Whether tabs are collapsible (toggle open/close). Default: general settings in the back end�<b>groups_post_id=x</b> Display only groups of which at least one assigned tag is also assigned to the post (or page) with the ID x. If set to 0, it will try to retrieve the current post ID. Default: -1 (all groups displayed). Matching groups will be added to the list specified by the parameter <b>include</b>.�<b>hide_empty=1 or =0</b> Whether to hide or show also tags that are not assigned to any post. Default: 1 (hide empty)�<b>hide_empty_tabs=1 or =0</b> Whether to hide tabs without tags. Default: 0 (Not implemented for PHP function with second parameter set to 'true'. Not effective with <b>groups_post_id</b>.)�<b>include="x,y,..."</b> IDs of tag groups (left column in list of groups) that will be considered in the tag cloud. Empty or not used means that all tag groups will be used. Default: empty�<b>largest=x</b> Font-size in pt of the largest tags. Default: 22�<b>mouseover=1 or =0</b> Whether tabs can be selected by hovering over with the mouse pointer (without clicking). Default: general settings in the back end�<b>order=ASC or =DESC</b> Whether to sort the tags in ascending or descending order. Default: ASC�<b>orderby=abc</b> Which field to use for sorting, e.g. count. Default: name�<b>prepend="#"</b> Prepend to each tag label. Default: empty�<b>separator="•"</b> A separator between the tags. Default: empty�<b>separator_size=12</b> The size of the separator. Default: 12�<b>show_tabs=1 or =0</b> Whether to show the tabs. Default: 1�<b>smallest=x</b> Font-size in pt of the smallest tags. Default: 12�<b>tags_post_id=x</b> Display only tags that are assigned to the post (or page) with the ID x. If set to 0, it will try to retrieve the current post ID. Default: -1 (all tags displayed)�<b>taxonomy="x,y,..."</b> Restrict the tags only to these taxonomies. Default: empty (= no restriction)�A tag group with the id %s and the label '%s' has been deleted.�About�Action�All groups are deleted and assignments reset.�All labels were registered.�Assign tags to groups and display them in a tabbed tag cloud�Basics�By default the function <b>tag_groups_cloud</b> returns the html for a tabbed tag cloud.�Cancel�Change sort order�Cheatin&#8217; uh?�Choose the taxonomies for which you want to use tag groups. Default is <b>post_tag</b>. Please note that the tag cloud might not work with all taxonomies and that some taxonomies listed here may not be accessible in the admin backend. If you don't understand what is going on here, just leave the default.�Christoph Amthor�Clicking will leave this page without saving.�Collapsible tabs (toggle open/close).�Create�Create Group�Create a new tag group�Delete�Delete Groups�Display filter menu�Do you really want to delete the tag group�Edit�Edit tag groups�Edit the label of an existing tag group�Edit this item inline�Enable shortcode in sidebar widgets (if not visible anyway).�Filter by tag group �Further Instructions�Go to the settings.�Group�Here you can choose a theme for the tag cloud. The path to own themes is relative to the <i>uploads</i> folder of your Wordpress installation. Leave empty if you don't use any.</p><p>New themes can be created with the <a href="http://jqueryui.com/themeroller/" target="_blank">jQuery UI ThemeRoller</a>: <ol> <li>On the page "Theme Roller" you can customize all features or pick one set from the gallery. Finish with the "download" button.</li> <li>On the next page ("Download Builder") you will need to select the components "Core", "Widget" and "Tabs". Make sure that before download you enter at the bottom as "CSS Scope" <b>.tag-groups-cloud-tabs</b> (including the dot) and as "Theme Folder Name" the name that you wish to enter below (for example "my-theme" or the name used in the theme gallery - avoid spaces and exotic characters).</li> <li>Then you unpack the downloaded zip file and open the css folder. Inside it you will find a folder with the previously chosen "Theme Folder Name" (containing a folder "images" and files named like "jquery-ui-1.10.2.custom.(min.)css").</li> <li>Copy this folder to your <i>wp-content/uploads</i> folder and enter its name below.</li> </ol>�I know what I am doing.�ID�If the optional second parameter is set to 'true', the function returns a multidimensional array containing tag groups and tags.�Label�Label displayed on the frontend�List�Number of assigned tags�OK�On this page you can define tag groups. Tags (or terms) can be assigned to these groups on the page where you edit the tags (terms).�Parameters�Quick&nbsp;Edit�Register Labels�Register group labels with WPML�Save�Save Back End Settings�Save Group�Save Taxonomy�Save Theme Options�Settings saved.�Shortcode�Tabs triggered by hovering mouse pointer (without clicking).�Tag Cloud�Tag Group�Tag Groups�Tag group�The label cannot be empty. Please correct it or go back.�Theme�Use jQuery. (Default is on. Other plugins might override this setting.)�Use this button to delete all tag groups and assignments. Your tags will not be changed. Check the checkbox to confirm.�Use this button to register all existing group labels with WPML for string translation. This is only necessary if labels have existed before you installed WPML.�WPML�You can add a pull-down menu to the filters above the list of posts. If you filter posts by tag groups, then only items will be shown that have tags (terms) in that particular group. This feature can be turned off so that the menu won't obstruct your screen if you use a high number of groups. May not work with all custom taxonomies. Doesn't work with more than <b>one</b> taxonomy or with <b>category</b> as taxonomy.�You can use a shortcode to embed the tag cloud directly in a post, page or widget or you call the function in the PHP code of your theme.�Your back end settings have been saved.�Your tag cloud theme settings have been saved.�Your tag taxonomy settings have been saved.�example�http://www.christoph-amthor.de�http://www.christoph-amthor.de/software/tag-groups/�new�not assigned�Project-Id-Version: Tag Groups 0.12.1 Report-Msgid-Bugs-To: http://wordpress.org/tag/tag-groups POT-Creation-Date: 2014-01-23 09:22:11+00:00 PO-Revision-Date: 2014-01-23 10:26+0100 Last-Translator: Burma Center Prague <info@burma-center.org> Language-Team: LANGUAGE <LL@li.org> Language: es_ES MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Generator: Poedit 1.6.3 �<b> Styling Avanzado:</b>�<b>Grupos y Etiquetas:</b>�<b> Etiquetas o Términos: </b>�<b>adjust_separator_size=1 ó =0</b> Ya sea para ajustar el tamaño del separador para el tamaño de la etiqueta siguiente. Por defecto: 0�<b>amount= x</b> Cantidad máxima de etiquetas en una nube (por grupo). Por defecto: 40�<b>append="algo"</b> Anexar a cada etiqueta de la etiqueta. Por defecto: vacío�<b>collapsible=1 ó =0</b> Si las pestañas son plegables (alternar abrir / cerrar). Por defecto: configuración general en el extremo posterior�<b> groups_post_id = x </b> Pantalla únicos grupos de los que al menos una etiqueta asignada también se asigna a la entrada (o de la página) con el ID de x. Si se establece en 0, se tratará de recuperar el ID de mensaje actual. Por defecto: -1 (todos los grupos muestran). Grupos de juego se añadirán a la lista especificada por el parámetro <b>include</b>.�<b>hide_empty=1 ó =0</b> Ya sea para ocultar o mostrar también las etiquetas que no están asignadas a ninguna publicación. Por defecto: 1 (ocultar vacío)�<b>hide_empty_tabs=1 ó =0</b> si desea ocultar las pestañas y sin etiquetas. Por defecto: 0 (No implementado para la función de PHP con el segundo parámetro establecido en 'verdadero' No es efectivo con <b> groups_post_id</b>)�<b>include="x, y, ..." </b> IDs de grupos de etiquetas (columna de la izquierda en la lista de grupos ) que serán considerados en la nube de etiquetas. Vacío o no utilizado significa que se utilizarán todos los grupos de etiquetas. Por defecto: vacío�<b>largest=x</b> Tamaño de las letras en pt de las etiquetas más grandes. Por defecto: 22�<b>mouseover= 1 ó =0</b> Si las pestañas se pueden seleccionar colocando el puntero del ratón por encima (sin hacer clic). Por defecto: configuración general en la parte de atrás�<b>order=ASC o =DESC</b> Si desea ordenar las etiquetas en orden ascendente o descendente. Por defecto: ASC�<b>orderby=abc</b> ¿Qué campo utilizar para la clasificación, por ejemplo, el recuento. Por defecto: nombre�<b>prepend="#"</b> Anteponer para cada etiqueta. Por defecto: vacío�<b>separador="• "</b> Un separador entre las etiquetas. Por defecto: vacío�<b>separator_size=12</b> El tamaño del separador. Por defecto: 12�<b>Show_tabs=1 ó =0</b> Para mostrar las pestañas. Por defecto: 1�<b>smallest=x</b> Tamaño de las letras en pt de las etiquetas más pequeñas. Por defecto: 12�<b>tags_post_id=x</b> Mostrar sólo etiquetas que se asignan a la publicación (o página) con el ID de x. Si se establece en 0, tratará de recuperar el ID de la publicación actual. Por defecto: -1 (todas las etiquetas aparecen)�<b>taxonomy="x, y, ..."</b> Restringir las etiquetas sólo a estas taxonomías. Por defecto: vacío (= sin restricción)�Ha sido eliminado un grupo de etiquetas con el id %s y la etiqueta '%s'�Acerca de�Acción�Se eliminan todos los grupos y se restablecen las asignaciones.�Se registraron todas las etiquetas.�Asignar etiquetas a los grupos y mostrar en una nube de etiquetas por pestañas�Fundamentos�Por defecto la función <b> tag_groups_cloud </b> devuelve el HTML para una nube de etiquetas por pestañas�Cancelar�Cambiar orden�¿Haciendo trampa &#8217; eh?�Elija las taxonomías para la que desea utilizar los grupos de variables. El valor predeterminado es <b> post_tag </b>. Tenga en cuenta que la nube de etiquetas podría no funcionar con todas las taxonomías y que algunas taxonomías enumeradas aquí pueden no ser accesibles en el backend de administración. Si usted no entiende lo que está pasando aquí, sólo deje el valor predeterminado.�Christoph Amthor�Al hacer clic dejará esta página sin guardar.�Etiquetas plegables (alternar abrir / cerrar).�Crear�Crear grupo�Crear un nuevo grupo de etiquetas�Eliminar�Eliminar Grupos�Mostrar Menú de Filtro�¿Realmente quiere eliminar el grupo de etiquetas?�Editar�Editar grupos de etiquetas�Editar la etiqueta de un grupo de etiquetas existentes�Editar este artículo en línea�Habilitar código corto en los widgets de la barra lateral (si no es visible de todos modos)�Filtrar por grupo de etiquetas�Más Instrucciones�Ir a configuración.�Grupo�Aquí usted puede elegir un tema para la nube de etiquetas. El camino a los propios temas es relativo a los <i>archivos</i> de la carpeta de su instalación de Wordpress. Dejar en blanco si no se usa ninguna.</p><p>Los nuevos temas se pueden crear con el <a href="http://jqueryui.com/themeroller/" target="_blank">jQuery UI ThemeRoller</a>: <ol> <li>A página "Theme Roller" puede personalizar todas las características o elegir un conjunto de la galería. Terminar con el botón "download".</li> <li>La página siguiente ("Download Builder") tendrá que seleccionar los componentes "Core", "Widget" y "Tabs". Asegúrese de que antes de la descarga se introduce en la parte inferior como "CSS Scope" <b>.tag-groups-cloud-tabs</b> (incluyendo el punto) y que "Theme Folder Name" o el nombre que desea introducir a continuación (por ejemplo, "my-theme" o el nombre utilizado en la galería de temas - evitar espacios y caracteres exóticos).</li> <li>Luego de desempaquetar el archivo zip descargado y abrir la carpeta css. En su interior se encuentra una carpeta con el previamente elegido "Theme Folder Name" (que contiene una carpeta "images" y archivos con el nombre como "jquery-ui-1.10.2.custom.(min.)css").</li> <li>Copiar esta carpeta a su <i>wp-content/uploads</i> e introduzca su nombre a continuación.</li> </ol>�Sé lo que estoy haciendo.�ID�Si el segundo parámetro opcional tiene el valor 'verdadero', la función devuelve una matriz multidimensional que contiene grupos de etiquetas y etiquetas.�Etiqueta�Etiqueta que aparece en el frontend�Lista�Número asignado de etiquetas�OK�En esta página puede definir grupos de etiquetas. Etiquetas (o términos) pueden ser asignados a estos grupos en la página donde se editan las etiquetas (términos).�Parámetros�Búsqueda Rápida &nbsp;Editar�Regístrar etiquetas�Registro de etiquetas de grupo con WPML�Guardar�Guardar Configuración Back End�Guardar grupo�Guardar Taxonomía�Guardar Opciones de Temas�Opciones guardadas.�Shortcode�Tabs desencadenados por poner encima el puntero del ratón (sin hacer clic).�Nube de etiquetas�Grupo de Etiquetas�Grupos de Etiquetas�Etiquetar Grupo�La etiqueta no puede estar vacía. Por favor corrija o regrese.�Tema�Usar jQuery. (Por defecto está activado. Otras extensiones pueden modificar este ajuste.)�Use este botón para eliminar todos los grupos de variables y asignaciones. No se cambiarán las etiquetas. Marque la casilla para confirmar.�Utilice este botón para registrar todas las etiquetas de grupo existentes con WPML para la traducción de cadenas. Esto sólo es necesario si las etiquetas han existido antes de instalar WPML.�WPML�Usted puede agregar un menú desplegable para los filtros por encima de la lista de mensajes. Si filtra los mensajes de los grupos de variables, entonces sólo los artículos que tienen etiquetas (términos) en ese grupo en particular serán mostrados. Esta característica se puede desactivar para que el menú no obstruya la pantalla si utiliza un gran número de grupos. Puede no funcionar con todas las taxonomías personalizadas. No funciona con más de <b> una </b> taxonomía o con <b> categoría </b> como la taxonomía.�Puede utilizar un código corto para incrustar la nube de etiquetas directamente en un post, página o widget o llamar a la función en el código PHP de su tema.�Su configuración de back-end se ha guardado.�Su configuración del tema de la nube de etiquetas se ha guardado.�Su configuración de taxonomía de etiqueta se ha guardado.�Ejemplo�http://www.christoph-amthor.de�http://www.christoph-amthor.de/software/tag-groups/�Nuevo�No asignados�PK�������!�]p��p����languages/tag-groups.potnu�[��������#, fuzzy msgid "" msgstr "" "Project-Id-Version: Tag Groups 0.19\n" "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/tag-groups\n" "POT-Creation-Date: 2018-01-26 17:15+0000\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION\n" "X-Generator: Loco - https://localise.biz/" #. Plugin Name of the plugin/theme #: include/class.admin.php:186 include/class.admin.php:262 #: include/class.admin.php:3232 msgid "Tag Groups" msgstr "" #: include/class.admin.php:196 include/class.admin.php:267 #: include/class.admin.php:737 include/class.group.php:131 msgid "not assigned" msgstr "" #: include/class.admin.php:234 msgid "Edit tag groups" msgstr "" #: include/class.admin.php:236 msgid "Clicking will leave this page without saving." msgstr "" #: include/class.admin.php:326 msgid "Tag Group" msgstr "" #: include/class.admin.php:561 msgid "The term has been removed from all groups." msgstr "" #: include/class.admin.php:623 msgid "Edit this item inline" msgstr "" #: include/class.admin.php:627 msgid "Quick&nbsp;Edit" msgstr "" #: include/class.admin.php:731 msgid "Groups" msgstr "" #: include/class.admin.php:986 include/class.admin.php:989 msgid "Assign to" msgstr "" #: include/class.admin.php:1044 msgid "Filter off" msgstr "" #: include/class.admin.php:1086 msgid "Filter by tag group " msgstr "" #: include/class.admin.php:1380 include/class.admin.php:1406 msgid "The label cannot be empty." msgstr "" #: include/class.admin.php:1385 #, php-format msgid "" "A tag group with the label '%s' already exists, or the label has not changed." " Please choose another one or go back." msgstr "" #: include/class.admin.php:1392 #, php-format msgid "A new tag group with the label '%s' has been created!" msgstr "" #: include/class.admin.php:1416 #, php-format msgid "A tag group with the label '%s' already exists." msgstr "" #: include/class.admin.php:1436 #, php-format msgid "The tag group with the label '%s' has been saved!" msgstr "" #: include/class.admin.php:1446 #, php-format msgid "A tag group with the id %s and the label '%s' has been deleted." msgstr "" #: include/class.admin.php:1508 msgid "New order saved." msgstr "" #: include/class.admin.php:1693 msgid "Your settings have been saved." msgstr "" #: include/class.admin.php:1721 msgid "All groups have been deleted and assignments reset." msgstr "" #: include/class.admin.php:1763 msgid "All labels were registered." msgstr "" #: include/class.admin.php:1804 msgid "Your tag cloud theme settings have been saved." msgstr "" #: include/class.admin.php:1835 msgid "Your tag taxonomy settings have been saved." msgstr "" #: include/class.admin.php:1858 msgid "Your back end settings have been saved." msgstr "" #: include/class.admin.php:1955 msgid "" "Your settings/groups and your terms have been exported. Please download the " "resulting files with right-click or ctrl-click:" msgstr "" #: include/class.admin.php:1969 msgid "Writing of the exported settings failed." msgstr "" #: include/class.admin.php:2011 include/class.admin.php:2065 msgid "Error reading the file." msgstr "" #: include/class.admin.php:2023 include/class.admin.php:2077 msgid "Error parsing the file." msgstr "" #: include/class.admin.php:2044 include/class.admin.php:2120 msgid "date unknown" msgstr "" #: include/class.admin.php:2049 #, php-format msgid "" "Your settings and groups have been imported from the file %s (created with " "plugin version %s on %s)." msgstr "" #: include/class.admin.php:2050 #, php-format msgid "%d option was added or changed." msgid_plural "%d options were added or changed." msgstr[0] "" msgstr[1] "" #: include/class.admin.php:2125 #, php-format msgid "" "Your terms have been imported from the file %s (created with plugin version " "%s on %s)." msgstr "" #: include/class.admin.php:2126 #, php-format msgid "%d term was added or updated." msgid_plural "%d terms were added or updated." msgstr[0] "" msgstr[1] "" #: include/class.admin.php:2148 msgid "Error uploading the file." msgstr "" #: include/class.admin.php:2227 msgid "Basics" msgstr "" #: include/class.admin.php:2228 msgid "Theme" msgstr "" #: include/class.admin.php:2232 msgid "WPML" msgstr "" #: include/class.admin.php:2236 msgid "Tag Cloud" msgstr "" #: include/class.admin.php:2237 msgid "Export/Import" msgstr "" #: include/class.admin.php:2238 msgid "Reset" msgstr "" #: include/class.admin.php:2242 msgid "Premium" msgstr "" #: include/class.admin.php:2284 msgid "Taxonomies" msgstr "" #: include/class.admin.php:2285 msgid "" "Choose the taxonomies for which you want to use tag groups. Default is <b>" "post_tag</b>. Please note that the tag cloud might not work with all " "taxonomies and that some taxonomies listed here may not be accessible in the " "admin backend. If you don't understand what is going on here, just leave the " "default." msgstr "" #: include/class.admin.php:2286 msgid "" "<b>Please deselect taxonomies that you don't use. Using several taxonomies " "for the same post type or hierarchical taxonomies (like categories) is " "experimental and not supported.</b>" msgstr "" #: include/class.admin.php:2287 msgid "To see the post type, hover you mouse over the option." msgstr "" #: include/class.admin.php:2317 msgid "Save Taxonomy" msgstr "" #: include/class.admin.php:2324 msgid "Back End Settings" msgstr "" #: include/class.admin.php:2325 msgid "" "You can add a pull-down menu to the filters above the list of posts. If you " "filter posts by tag groups, then only items will be shown that have tags " "(terms) in that particular group. This feature can be turned off so that the " "menu won't obstruct your screen if you use a high number of groups. May not " "work with all taxonomies." msgstr "" #: include/class.admin.php:2334 msgid "Display filter on post admin" msgstr "" #: include/class.admin.php:2338 msgid "" "Here you can deactivate the filter on the list of tags if it conflicts with " "other plugins or themes." msgstr "" #: include/class.admin.php:2348 msgid "Display filter on tag admin" msgstr "" #: include/class.admin.php:2353 msgid "Save Back End Settings" msgstr "" #: include/class.admin.php:2363 msgid "" "Here you can choose a theme for the tag cloud. The path to own themes is " "relative to the <i>uploads</i> folder of your WordPress installation. Leave " "empty if you don't use any.</p><p>New themes can be created with the <a " "href=\"http://jqueryui.com/themeroller/\" target=\"_blank\">jQuery UI " "ThemeRoller</a>:\n" " <ol>\n" " <li>On the page \"Theme Roller\" you can customize all features " "or pick one set from the gallery. Finish with the \"download\" button.</li>\n" " <li>On the next page (\"Download Builder\") you will need to " "select the version 1.11.x and the components \"Core\", \"Widget\", " "\"Accordion\" and \"Tabs\". Make sure that before downloading you enter at " "the bottom as \"CSS Scope\" <b>.tag-groups-cloud-tabs</b> (including the dot)" ".</li>\n" " <li>Then you unpack the downloaded zip file. You will need the " "\"images\" folder and the \"jquery-ui.theme.min.css\" file.</li>\n" " <li>Create a new folder inside your <i>wp-content/uploads</i> " "folder (for example \"my-theme\") and copy there these two items.</li>\n" " <li>Enter the name of this new folder (for example \"my-theme\") " "below.</li>\n" " </ol>" msgstr "" #: include/class.admin.php:2413 msgid "" "Use jQuery. (Default is on. Other plugins might override this setting.)" msgstr "" #: include/class.admin.php:2419 msgid "Further options" msgstr "" #: include/class.admin.php:2427 msgid "Tabs triggered by hovering mouse pointer (without clicking)." msgstr "" #: include/class.admin.php:2435 msgid "Collapsible tabs (toggle open/close)." msgstr "" #: include/class.admin.php:2442 msgid "Allow HTML in tag description." msgstr "" #: include/class.admin.php:2449 msgid "Save Theme Options" msgstr "" #: include/class.admin.php:2461 msgid "Register group labels with WPML" msgstr "" #: include/class.admin.php:2464 msgid "" "Use this button to register all existing group labels with WPML for string " "translation. This is only necessary if labels have existed before you " "installed WPML." msgstr "" #: include/class.admin.php:2468 msgid "Register Labels" msgstr "" #: include/class.admin.php:2476 msgid "" "You can use a shortcode to embed the tag cloud directly in a post, page or " "widget or you call the function in the PHP code of your theme." msgstr "" #: include/class.admin.php:2483 msgid "Enable shortcode in sidebar widgets (if not visible anyway)." msgstr "" #: include/class.admin.php:2486 msgid "" "Always load shortcode scripts. (Otherwise only if shortcode appears in a " "post or page. Turn on if you use these shortcodes in widgets.)" msgstr "" #: include/class.admin.php:2491 include/class.admin.php:3006 msgid "Save" msgstr "" #: include/class.admin.php:2495 msgid "Click for more information." msgstr "" #: include/class.admin.php:2496 msgid "Shortcodes" msgstr "" #: include/class.admin.php:2499 msgid "Tabbed Tag Cloud" msgstr "" #: include/class.admin.php:2503 msgid "Display the tags in a tabbed tag cloud." msgstr "" #: include/class.admin.php:2504 include/class.admin.php:2701 #: include/class.admin.php:2912 include/class.admin.php:2919 msgid "Example" msgstr "" #: include/class.admin.php:2506 include/class.admin.php:2703 msgid "Parameters" msgstr "" #: include/class.admin.php:2510 include/class.admin.php:2708 msgid "<b>Tags or Terms:</b>" msgstr "" #: include/class.admin.php:2515 include/class.admin.php:2713 msgid "" "<b>taxonomy=\"x,y,...\"</b> Restrict the tags only to these taxonomies. " "Default: empty (= no restriction)" msgstr "" #: include/class.admin.php:2520 include/class.admin.php:2718 msgid "" "<b>include_terms=\"x,y,...\"</b> Comma-/Space-separated list of tag/term IDs " "that alone should be included. Default: empty (= no restriction)" msgstr "" #: include/class.admin.php:2525 include/class.admin.php:2723 msgid "" "<b>exclude_terms=\"x,y,...\"</b> Comma-/Space-separated list of tag/term IDs " "that should be excluded. <b>exclude_terms</b> is ignored if you use <b>" "include_terms</b>. Default: empty (= no restriction)" msgstr "" #: include/class.admin.php:2530 include/class.admin.php:2728 msgid "<b>smallest=x</b> Font-size in pt of the smallest tags. Default: 12" msgstr "" #: include/class.admin.php:2535 include/class.admin.php:2733 msgid "<b>largest=x</b> Font-size in pt of the largest tags. Default: 22" msgstr "" #: include/class.admin.php:2540 include/class.admin.php:2738 msgid "" "<b>orderby=abc</b> Which field to use for sorting, e.g. count. Use " "\"natural\" for natural sorting and \"random\" for random sorting (Disable " "caching!). Default: name" msgstr "" #: include/class.admin.php:2545 include/class.admin.php:2743 msgid "" "<b>order=ASC or =DESC</b> Whether to sort the tags in ascending or " "descending order. Default: ASC" msgstr "" #: include/class.admin.php:2550 include/class.admin.php:2748 msgid "" "<b>amount=x</b> Maximum amount of tags in one cloud (per group). Default: 0 " "(unlimited)" msgstr "" #: include/class.admin.php:2555 include/class.admin.php:2753 msgid "" "<b>hide_empty=1 or =0</b> Whether to hide or show also tags that are not " "assigned to any post. Default: 1 (hide empty)" msgstr "" #: include/class.admin.php:2560 include/class.admin.php:2758 msgid "" "<b>tags_post_id=x</b> Display only tags that are assigned to the post (or " "page) with the ID x. If set to 0, it will try to retrieve the current post " "ID. Default: -1 (all tags displayed)" msgstr "" #: include/class.admin.php:2565 include/class.admin.php:2763 msgid "" "<b>assigned_class=\"something\"</b> A modification of the tags_post_id " "parameter: Rather than hiding tags that are not assigned to the post (or " "page), they can be styled differently. Tags will receive this class name " "with appended _1 or _0. (If you output the tags as an array, a new element " "with the key \"assigned\" will be true or false.)" msgstr "" #: include/class.admin.php:2570 include/class.admin.php:2768 msgid "<b>separator=\"•\"</b> A separator between the tags. Default: empty" msgstr "" #: include/class.admin.php:2575 include/class.admin.php:2773 msgid "<b>separator_size=12</b> The size of the separator. Default: 12" msgstr "" #: include/class.admin.php:2580 include/class.admin.php:2778 msgid "" "<b>adjust_separator_size=1 or =0</b> Whether to adjust the separator's size " "to the size of the following tag. Default: 0" msgstr "" #: include/class.admin.php:2585 include/class.admin.php:2783 msgid "<b>prepend=\"#\"</b> Prepend to each tag label. Default: empty" msgstr "" #: include/class.admin.php:2590 msgid "<b>append=\"#\"</b> Append to each tag label. Default: empty" msgstr "" #: include/class.admin.php:2595 include/class.admin.php:2793 msgid "" "<b>link_target=\"_blank\"</b> Set the \"target\" attribute for the links of " "the tags. Possible values: _blank, _self, _parent, _top, or the name of a " "frame. Default: empty (= opens in the same window, same as using _self)" msgstr "" #: include/class.admin.php:2600 msgid "" "<b>link_append=\"abc\"</b> Adds something to the link of the tags. Enter " "without the starting \"?\". Default: empty" msgstr "" #: include/class.admin.php:2605 include/class.admin.php:2803 msgid "" "<b>show_tag_count=1 or =0</b> Whether to show the number of posts as tooltip " "(behind the tag description) when hovering the mouse over the tag. Default: " "1 (show)" msgstr "" #: include/class.admin.php:2610 include/class.admin.php:2808 msgid "" "<b>custom_title=\"abc\"</b> Custom title shown as tooltip. No HTML, but you " "can use {count} and {description} as placeholders. Default: empty (using the " "description, see also <b>show_tag_count</b>)" msgstr "" #: include/class.admin.php:2616 msgid "<b>Groups and Tabs:</b>" msgstr "" #: include/class.admin.php:2621 include/class.admin.php:2819 msgid "" "<b>include=\"x,y,...\"</b> IDs of tag groups (left column in list of groups) " "that will be considered in the tag cloud. Empty or not used means that all " "tag groups will be used. Default: empty" msgstr "" #: include/class.admin.php:2626 include/class.admin.php:2824 msgid "" "<b>groups_post_id=x</b> Display only groups of which at least one assigned " "tag is also assigned to the post (or page) with the ID x. If set to 0, it " "will try to retrieve the current post ID. Default: -1 (all groups displayed)." " Matching groups will be added to the list specified by the parameter <b>" "include</b>." msgstr "" #: include/class.admin.php:2631 msgid "<b>show_tabs=1 or =0</b> Whether to show the tabs. Default: 1" msgstr "" #: include/class.admin.php:2636 msgid "" "<b>hide_empty_tabs=1 or =0</b> Whether to hide tabs without tags. Default: 0 " "(Not implemented for PHP function with second parameter set to 'true'. Not " "effective with <b>groups_post_id</b>.)" msgstr "" #: include/class.admin.php:2641 include/class.admin.php:2839 msgid "" "<b>show_all_groups=1 or =0</b> Whether to force showing all groups. Useful " "with the parameters <b>tags_post_id</b> and <b>assigned_class</b>. Default: 0" msgstr "" #: include/class.admin.php:2646 include/class.admin.php:2844 msgid "" "<b>show_not_assigned=1 or =0</b> Whether to show a group with not-assigned " "tags. Default: 0" msgstr "" #: include/class.admin.php:2651 include/class.admin.php:2849 msgid "" "<b>not_assigned_name=\"abc\"</b> The name used in the tab of not-assigned " "tags. Default: \"not assigned\"" msgstr "" #: include/class.admin.php:2656 msgid "" "<b>collapsible=1 or =0</b> Whether tabs are collapsible (toggle open/close). " "Default: general settings in the back end" msgstr "" #: include/class.admin.php:2661 msgid "" "<b>mouseover=1 or =0</b> Whether tabs can be selected by hovering over with " "the mouse pointer (without clicking). Default: general settings in the back " "end" msgstr "" #: include/class.admin.php:2666 msgid "" "<b>active=1 or =0</b> Whether tabs are initially expanded or collapsed. " "Useful in connection with the parameter <b>collapsible</b>. Default: 1" msgstr "" #: include/class.admin.php:2673 include/class.admin.php:2875 msgid "<b>Advanced Styling:</b>" msgstr "" #: include/class.admin.php:2678 msgid "" "<b>div_id=abc</b> Define an id for the enclosing &lt;div&gt;. You need to " "define different values if you use more than one cloud on one page. Make " "sure this id has not yet been used - including the active theme and other " "plugins. Recommended are non-standard values to avoid collisions of names, " "replace spaces by underscores or hyphens, or use \"camelCase\". Default: tag-" "groups-cloud-tabs" msgstr "" #: include/class.admin.php:2683 msgid "" "<b>div_class=abc</b> Define a class for the enclosing &lt;div&gt;. Default: " "tag-groups-cloud-tabs" msgstr "" #: include/class.admin.php:2688 msgid "" "<b>ul_class=abc</b> Define a class for the &lt;div&gt; that generates the " "tabs with the group labels. Default: empty" msgstr "" #: include/class.admin.php:2696 msgid "Accordion" msgstr "" #: include/class.admin.php:2700 msgid "Display the tags in an accordion." msgstr "" #: include/class.admin.php:2788 msgid "<b>append=\"something\"</b> Append to each tag label. Default: empty" msgstr "" #: include/class.admin.php:2798 msgid "" "<b>link_append=\"abc\"</b> Appends queries to the link of the tags. Default: " "empty" msgstr "" #: include/class.admin.php:2814 msgid "<b>Groups and Accordions:</b>" msgstr "" #: include/class.admin.php:2829 msgid "<b>show_accordion=1 or =0</b> Whether to show the accordion. Default: 1" msgstr "" #: include/class.admin.php:2834 msgid "" "<b>hide_empty_content=1 or =0</b> Whether to hide content without tags. " "Default: 0 Not effective with <b>groups_post_id</b>.)" msgstr "" #: include/class.admin.php:2854 msgid "" "<b>collapsible=1 or =0</b> Whether accordion content is collapsible (toggle " "open/close). Default: general settings in the back end" msgstr "" #: include/class.admin.php:2859 msgid "" "<b>mouseover=1 or =0</b> Whether accordion headers can be selected by " "hovering over with the mouse pointer (without clicking). Default: general " "settings in the back end" msgstr "" #: include/class.admin.php:2864 msgid "" "<b>active=1 or =0</b> Whether the accordion is initially expanded or " "collapsed. Useful in connection with the parameter <b>collapsible</b>. " "Default: 1" msgstr "" #: include/class.admin.php:2869 #, php-format msgid "" "<b>heightstyle=\"abc\"</b> Value for the parameter \"heightStyle\" - see <a " "%s>jQuery UI documentation</a>. Possible values: \"auto\", \"content\", " "\"fill\" . Default: empty (auto)" msgstr "" #: include/class.admin.php:2880 msgid "" "<b>div_id=abc</b> Define an id for the enclosing &lt;div&gt;. You need to " "define different values if you use more than one accordion on one page. Make " "sure this id has not yet been used - including the active theme and other " "plugins. Recommended are non-standard values to avoid collisions of names, " "replace spaces by underscores or hyphens, or use \"camelCase\". Default: tag-" "groups-cloud-accordion" msgstr "" #: include/class.admin.php:2885 msgid "" "<b>div_class=abc</b> Define a class for the enclosing &lt;div&gt;. Default: " "tag-groups-cloud-accordion" msgstr "" #: include/class.admin.php:2890 msgid "" "<b>header_class=abc</b> Define a class for the &lt;h3&gt; that contains the " "headers. Default: empty" msgstr "" #: include/class.admin.php:2895 msgid "" "<b>inner_div_class=abc</b> Define a class for the &lt;div&gt; that contains " "the tags. Default: empty" msgstr "" #: include/class.admin.php:2906 msgid "PHP" msgstr "" #: include/class.admin.php:2910 msgid "" "The function <b>tag_groups_cloud</b> accepts the same parameters as the " "[tag_groups_cloud] shortcode, except for those that determine tabs and " "styling." msgstr "" #: include/class.admin.php:2911 msgid "By default it returns a string with the html for a tabbed tag cloud." msgstr "" #: include/class.admin.php:2918 msgid "" "If the optional second parameter is set to 'true', the function returns a " "multidimensional array containing tag groups and tags." msgstr "" #: include/class.admin.php:2933 msgid "Export" msgstr "" #: include/class.admin.php:2938 msgid "" "Use this button to export all Tag Groups settings and groups and all terms " "that are assigned to a group into files." msgstr "" #: include/class.admin.php:2941 msgid "" "You can import both files separately. Category hierarchy won't be saved. " "When you restore terms that were deleted, they receive new IDs and you must " "assign them to posts again. Exporting cannot substitute a backup." msgstr "" #: include/class.admin.php:2945 msgid "Export Files" msgstr "" #: include/class.admin.php:2952 msgid "Import" msgstr "" #: include/class.admin.php:2957 msgid "" "Below you can import previously exported settings/groups or terms from a " "file." msgstr "" #: include/class.admin.php:2960 msgid "" "It is recommended to back up the database of your blog before proceeding." msgstr "" #: include/class.admin.php:2965 msgid "Import File" msgstr "" #: include/class.admin.php:2974 msgid "" "Use this button to delete all tag groups and assignments. Your tags will not " "be changed. Check the checkbox to confirm." msgstr "" #: include/class.admin.php:2977 msgid "" "(Please keep in mind that the tag assignments cannot be recovered by the " "export/import function.)" msgstr "" #: include/class.admin.php:2981 msgid "I know what I am doing." msgstr "" #: include/class.admin.php:2985 msgid "Delete Groups" msgstr "" #: include/class.admin.php:2989 msgid "Delete Settings and Groups" msgstr "" #: include/class.admin.php:3001 msgid "Delete all groups and settings when uninstalling the plugin." msgstr "" #: include/class.admin.php:3018 msgid "Get More Features" msgstr "" #: include/class.admin.php:3019 #, php-format msgid "" "The <b>Tag Groups</b> plugin can be extended by <a %s>Tag Groups Premium</a>," " which offers you many more useful features to take your tags to the next " "level:" msgstr "" #: include/class.admin.php:3030 #, php-format msgid "" "See the complete <a %s>feature comparison</a> or check out the <a %s>" "demos</a>." msgstr "" #: include/class.admin.php:3046 msgid "Support" msgstr "" #: include/class.admin.php:3055 #, php-format msgid "" "If you need help, please make sure to read the <a %s>instructions and " "troubleshooting information</a> or visit the official <a %s>support forum</a>" "." msgstr "" #: include/class.admin.php:3065 msgid "Donations" msgstr "" #: include/class.admin.php:3068 msgid "" "This plugin is the result of many years of development, adding new features, " "fixing bugs and answering to support questions." msgstr "" #: include/class.admin.php:3071 msgid "" "If you find <b>Tag Groups</b> useful or use it to make money, I would " "appreciate a donation:" msgstr "" #: include/class.admin.php:3075 #, php-format msgid "" "If you travel a lot, you can <a %s>use this affiliate link to book a " "hotel</a> so that I get a percentage of the sales." msgstr "" #: include/class.admin.php:3077 #, php-format msgid "You can also <a %s>donate to my favourite charity</a>." msgstr "" #: include/class.admin.php:3079 #, php-format msgid "" "I would be glad if you could give my plugin a <a %s>five-star rating</a>." msgstr "" #: include/class.admin.php:3089 msgid "Thanks!" msgstr "" #: include/class.admin.php:3094 msgid "Credits and 3rd-party licences" msgstr "" #: include/class.admin.php:3097 #, php-format msgid "" "These plugins use css and images by <a %s>jQuery UI</a>. (bundled with " "WordPress)" msgstr "" #: include/class.admin.php:3098 #, php-format msgid "" "jQuery plugin <a %s>SumoSelect</a>: <a %s>MIT License</a>. Copyright (c) " "2016 Hemant Negi" msgstr "" #: include/class.admin.php:3107 msgid "Latest Development News" msgstr "" #: include/class.admin.php:3117 msgid "Loading..." msgstr "" #: include/class.admin.php:3235 msgid "" "On this page you can define tag groups. Tags (or terms) can be assigned to " "these groups on the page where you edit the tags (terms)." msgstr "" #: include/class.admin.php:3236 msgid "" "Change the order by drag and drop or with the up/down icons. Click into a " "labels for editing." msgstr "" #: include/class.admin.php:3245 include/class.admin.php:3264 msgid "Group ID" msgstr "" #: include/class.admin.php:3248 include/class.admin.php:3267 msgid "Label displayed on the frontend" msgstr "" #: include/class.admin.php:3251 include/class.admin.php:3270 msgid "Number of assigned tags" msgstr "" #: include/class.admin.php:3254 include/class.admin.php:3273 msgid "Action" msgstr "" #: include/class.admin.php:3257 include/class.admin.php:3276 msgid "Change sort order" msgstr "" #: include/class.admin.php:3299 msgid "Edit" msgstr "" #: include/class.admin.php:3302 msgid "Create" msgstr "" #: include/class.admin.php:3305 msgid "new" msgstr "" #: include/class.admin.php:3308 msgid "label" msgstr "" #: include/class.admin.php:3311 msgid "Delete this group." msgstr "" #: include/class.admin.php:3314 msgid "Create a new group below." msgstr "" #: include/class.admin.php:3317 msgid "move up" msgstr "" #: include/class.admin.php:3320 msgid "move down" msgstr "" #: include/class.admin.php:3323 msgid "reload" msgstr "" #: include/class.admin.php:3326 msgid "Show posts" msgstr "" #: include/class.admin.php:3329 msgid "Show tags" msgstr "" #: include/class.admin.php:3417 msgid "Do you really want to delete this tag group?" msgstr "" #: include/class.admin.php:3483 msgid "Go to the settings." msgstr "" #: include/class.admin.php:3710 msgid "Settings" msgstr "" #: include/class.base.php:110 #, php-format msgid "The plugin %s requires WordPress %s to function properly. " msgstr "" #: include/class.base.php:111 msgid "Please upgrade WordPress and then try again." msgstr "" #: include/class.base.php:154 msgid "Thank you for installing Tag Groups!" msgstr "" #: include/class.base.php:155 msgid "Get started in 3 easy steps:" msgstr "" #: include/class.base.php:157 #, php-format msgid "" "Go to the <span class=\"dashicons dashicons-admin-settings\"></span>&nbsp;<a " "%s>settings</a> and select the <b>taxonomy</b> of your tags. In most cases " "just leave the default: post_tag." msgstr "" #: include/class.base.php:158 msgid "" "Go to the <b>Tag Groups</b> page and create some groups. The default " "location of this page is under <span class=\"dashicons dashicons-admin-" "post\"></span>Posts." msgstr "" #: include/class.base.php:159 msgid "Go to your <b>tags</b> and assign them to these groups." msgstr "" #: include/class.base.php:161 #, php-format msgid "" "Now your tags are organized in groups. You can use them, for example, in a " "tag cloud. Just insert a shortcode into a page or post - try: " "[tag_groups_cloud]. You find all shortcodes and <a %s>links to the " "documentation</a> in the <span class=\"dashicons dashicons-admin-settings\">" "</span> settings." msgstr "" #: include/class.base.php:162 msgid "Happy tagging!" msgstr "" #: include/class.feed.php:300 #, php-format msgid "Please visit <a %s>%s</a>." msgstr "" #. Description of the plugin/theme msgid "Assign tags to groups and display them in a tabbed tag cloud" msgstr "" #. URI of the plugin msgid "https://chattymango.com/tag-groups/" msgstr "" #. Author of the plugin msgid "Chatty Mango" msgstr "" #. Author URI of the plugin msgid "https://chattymango.com/about/" msgstr "" PK�������!�`��`����languages/tag-groups-es_ES.ponu�[��������# Copyright (C) 2013 Tag Groups # This file is distributed under the same license as the Tag Groups package. msgid "" msgstr "" "Project-Id-Version: Tag Groups 0.12.1\n" "Report-Msgid-Bugs-To: http://wordpress.org/tag/tag-groups\n" "POT-Creation-Date: 2014-01-23 09:22:11+00:00\n" "PO-Revision-Date: 2014-01-23 10:26+0100\n" "Last-Translator: Burma Center Prague <info@burma-center.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: es_ES\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Generator: Poedit 1.6.3\n" #: tag-groups.php:219 tag-groups.php:435 msgid "Tag Group" msgstr "Grupo de Etiquetas" #: tag-groups.php:303 msgid "Cheatin&#8217; uh?" msgstr "¿Haciendo trampa &#8217; eh?" #: tag-groups.php:361 msgid "Edit this item inline" msgstr "Editar este artículo en línea" #: tag-groups.php:365 msgid "Quick&nbsp;Edit" msgstr "Búsqueda Rápida &nbsp;Editar" #: tag-groups.php:394 msgid "Group" msgstr "Grupo" #: tag-groups.php:398 tag-groups.php:438 tag-groups.php:473 #: tag-groups.php:1840 msgid "not assigned" msgstr "No asignados" #: tag-groups.php:470 msgid "Tag group" msgstr "Etiquetar Grupo" #: tag-groups.php:486 msgid "Edit tag groups" msgstr "Editar grupos de etiquetas" #: tag-groups.php:486 msgid "Clicking will leave this page without saving." msgstr "Al hacer clic dejará esta página sin guardar." #: tag-groups.php:568 msgid "The label cannot be empty. Please correct it or go back." msgstr "La etiqueta no puede estar vacía. Por favor corrija o regrese." #: tag-groups.php:667 msgid "Create a new tag group" msgstr "Crear un nuevo grupo de etiquetas" #: tag-groups.php:671 tag-groups.php:685 msgid "Label" msgstr "Etiqueta" #: tag-groups.php:674 msgid "Create Group" msgstr "Crear grupo" #: tag-groups.php:675 tag-groups.php:689 msgid "Cancel" msgstr "Cancelar" #: tag-groups.php:681 msgid "Edit the label of an existing tag group" msgstr "Editar la etiqueta de un grupo de etiquetas existentes" #: tag-groups.php:688 msgid "Save Group" msgstr "Guardar grupo" #: tag-groups.php:729 msgid "A tag group with the id %s and the label '%s' has been deleted." msgstr "" "Ha sido eliminado un grupo de etiquetas con el id %s y la etiqueta '%s'" #: tag-groups.php:731 tag-groups.php:894 tag-groups.php:921 tag-groups.php:936 #: tag-groups.php:965 tag-groups.php:995 tag-groups.php:1011 msgid "OK" msgstr "OK" #: tag-groups.php:736 msgid "" "On this page you can define tag groups. Tags (or terms) can be assigned to " "these groups on the page where you edit the tags (terms)." msgstr "" "En esta página puede definir grupos de etiquetas. Etiquetas (o términos) " "pueden ser asignados a estos grupos en la página donde se editan las " "etiquetas (términos)." #: tag-groups.php:737 msgid "List" msgstr "Lista" #: tag-groups.php:741 tag-groups.php:750 msgid "ID" msgstr "ID" #: tag-groups.php:742 tag-groups.php:751 msgid "Label displayed on the frontend" msgstr "Etiqueta que aparece en el frontend" #: tag-groups.php:743 tag-groups.php:752 msgid "Number of assigned tags" msgstr "Número asignado de etiquetas" #: tag-groups.php:744 tag-groups.php:753 msgid "Action" msgstr "Acción" #: tag-groups.php:745 tag-groups.php:754 msgid "Change sort order" msgstr "Cambiar orden" #: tag-groups.php:765 msgid "Edit" msgstr "Editar" #: tag-groups.php:765 msgid "Do you really want to delete the tag group" msgstr "¿Realmente quiere eliminar el grupo de etiquetas?" #: tag-groups.php:765 msgid "Delete" msgstr "Eliminar" #: tag-groups.php:788 msgid "new" msgstr "Nuevo" #: tag-groups.php:791 msgid "Create" msgstr "Crear" #: tag-groups.php:799 msgid "Go to the settings." msgstr "Ir a configuración." #: tag-groups.php:892 msgid "Settings saved." msgstr "Opciones guardadas." #: tag-groups.php:919 msgid "All groups are deleted and assignments reset." msgstr "Se eliminan todos los grupos y se restablecen las asignaciones." #: tag-groups.php:934 msgid "All labels were registered." msgstr "Se registraron todas las etiquetas." #: tag-groups.php:963 msgid "Your tag cloud theme settings have been saved." msgstr "Su configuración del tema de la nube de etiquetas se ha guardado." #: tag-groups.php:993 msgid "Your tag taxonomy settings have been saved." msgstr "Su configuración de taxonomía de etiqueta se ha guardado." #: tag-groups.php:1009 msgid "Your back end settings have been saved." msgstr "Su configuración de back-end se ha guardado." #: tag-groups.php:1019 msgid "Basics" msgstr "Fundamentos" #: tag-groups.php:1020 msgid "Theme" msgstr "Tema" #: tag-groups.php:1022 msgid "WPML" msgstr "WPML" #: tag-groups.php:1024 msgid "Tag Cloud" msgstr "Nube de etiquetas" #: tag-groups.php:1025 tag-groups.php:1221 msgid "Delete Groups" msgstr "Eliminar Grupos" #: tag-groups.php:1026 msgid "About" msgstr "Acerca de" #: tag-groups.php:1034 msgid "" "Choose the taxonomies for which you want to use tag groups. Default is " "<b>post_tag</b>. Please note that the tag cloud might not work with all " "taxonomies and that some taxonomies listed here may not be accessible in the " "admin backend. If you don't understand what is going on here, just leave the " "default." msgstr "" "Elija las taxonomías para la que desea utilizar los grupos de variables. El " "valor predeterminado es <b> post_tag </b>. Tenga en cuenta que la nube de " "etiquetas podría no funcionar con todas las taxonomías y que algunas " "taxonomías enumeradas aquí pueden no ser accesibles en el backend de " "administración. Si usted no entiende lo que está pasando aquí, sólo deje el " "valor predeterminado." #: tag-groups.php:1054 msgid "Save Taxonomy" msgstr "Guardar Taxonomía" #: tag-groups.php:1062 msgid "" "You can add a pull-down menu to the filters above the list of posts. If you " "filter posts by tag groups, then only items will be shown that have tags " "(terms) in that particular group. This feature can be turned off so that the " "menu won't obstruct your screen if you use a high number of groups. May not " "work with all custom taxonomies. Doesn't work with more than <b>one</b> " "taxonomy or with <b>category</b> as taxonomy." msgstr "" "Usted puede agregar un menú desplegable para los filtros por encima de la " "lista de mensajes. Si filtra los mensajes de los grupos de variables, " "entonces sólo los artículos que tienen etiquetas (términos) en ese grupo en " "particular serán mostrados. Esta característica se puede desactivar para que " "el menú no obstruya la pantalla si utiliza un gran número de grupos. Puede " "no funcionar con todas las taxonomías personalizadas. No funciona con más de " "<b> una </b> taxonomía o con <b> categoría </b> como la taxonomía." #: tag-groups.php:1064 msgid "Display filter menu" msgstr "Mostrar Menú de Filtro" #: tag-groups.php:1067 msgid "Save Back End Settings" msgstr "Guardar Configuración Back End" #: tag-groups.php:1105 msgid "" "Here you can choose a theme for the tag cloud. The path to own themes is " "relative to the <i>uploads</i> folder of your WordPress installation. Leave " "empty if you don't use any.</p><p>New themes can be created with the <a href=" "\"http://jqueryui.com/themeroller/\" target=\"_blank\">jQuery UI " "ThemeRoller</a>:\n" "\t\t\t<ol>\n" "\t\t\t <li>On the page \"Theme Roller\" you can customize all features or " "pick one set from the gallery. Finish with the \"download\" button.</li>\n" "\t\t\t <li>On the next page (\"Download Builder\") you will need to select " "the components \"Core\", \"Widget\" and \"Tabs\". Make sure that before " "download you enter at the bottom as \"CSS Scope\" <b>.tag-groups-cloud-tabs</" "b> (including the dot) and as \"Theme Folder Name\" the name that you wish " "to enter below (for example \"my-theme\" or the name used in the theme " "gallery - avoid spaces and exotic characters).</li>\n" "\t\t\t <li>Then you unpack the downloaded zip file and open the css folder. " "Inside it you will find a folder with the previously chosen \"Theme Folder " "Name\" (containing a folder \"images\" and files named like \"jquery-" "ui-1.10.2.custom.(min.)css\").</li>\n" "\t\t\t <li>Copy this folder to your <i>wp-content/uploads</i> folder and " "enter its name below.</li>\n" "\t\t\t</ol>" msgstr "" "Aquí usted puede elegir un tema para la nube de etiquetas. El camino a los " "propios temas es relativo a los <i>archivos</i> de la carpeta de su " "instalación de WordPress. Dejar en blanco si no se usa ninguna.</p><p>Los " "nuevos temas se pueden crear con el <a href=\"http://jqueryui.com/" "themeroller/\" target=\"_blank\">jQuery UI ThemeRoller</a>:\n" "\t\t\t<ol>\n" "\t\t\t <li>A página \"Theme Roller\" puede personalizar todas las " "características o elegir un conjunto de la galería. Terminar con el botón " "\"download\".</li>\n" "\t\t\t <li>La página siguiente (\"Download Builder\") tendrá que seleccionar " "los componentes \"Core\", \"Widget\" y \"Tabs\". Asegúrese de que antes de " "la descarga se introduce en la parte inferior como \"CSS Scope\" <b>.tag-" "groups-cloud-tabs</b> (incluyendo el punto) y que \"Theme Folder Name\" o el " "nombre que desea introducir a continuación (por ejemplo, \"my-theme\" o el " "nombre utilizado en la galería de temas - evitar espacios y caracteres " "exóticos).</li>\n" "\t\t\t <li>Luego de desempaquetar el archivo zip descargado y abrir la " "carpeta css. En su interior se encuentra una carpeta con el previamente " "elegido \"Theme Folder Name\" (que contiene una carpeta \"images\" y " "archivos con el nombre como \"jquery-ui-1.10.2.custom.(min.)css\").</li>\n" "\t\t\t <li>Copiar esta carpeta a su <i>wp-content/uploads</i> e introduzca " "su nombre a continuación.</li>\n" "\t\t\t</ol>" #: tag-groups.php:1125 msgid "" "Use jQuery. (Default is on. Other plugins might override this setting.)" msgstr "" "Usar jQuery. (Por defecto está activado. Otras extensiones pueden modificar " "este ajuste.)" #: tag-groups.php:1132 msgid "Tabs triggered by hovering mouse pointer (without clicking)." msgstr "" "Tabs desencadenados por poner encima el puntero del ratón (sin hacer clic)." #: tag-groups.php:1133 msgid "Collapsible tabs (toggle open/close)." msgstr "Etiquetas plegables (alternar abrir / cerrar)." #: tag-groups.php:1140 msgid "Save Theme Options" msgstr "Guardar Opciones de Temas" #: tag-groups.php:1147 msgid "Register group labels with WPML" msgstr "Registro de etiquetas de grupo con WPML" #: tag-groups.php:1148 msgid "" "Use this button to register all existing group labels with WPML for string " "translation. This is only necessary if labels have existed before you " "installed WPML." msgstr "" "Utilice este botón para registrar todas las etiquetas de grupo existentes " "con WPML para la traducción de cadenas. Esto sólo es necesario si las " "etiquetas han existido antes de instalar WPML." #: tag-groups.php:1150 msgid "Register Labels" msgstr "Regístrar etiquetas" #: tag-groups.php:1157 msgid "" "You can use a shortcode to embed the tag cloud directly in a post, page or " "widget or you call the function in the PHP code of your theme." msgstr "" "Puede utilizar un código corto para incrustar la nube de etiquetas " "directamente en un post, página o widget o llamar a la función en el código " "PHP de su tema." #: tag-groups.php:1161 msgid "Enable shortcode in sidebar widgets (if not visible anyway)." msgstr "" "Habilitar código corto en los widgets de la barra lateral (si no es visible " "de todos modos)" #: tag-groups.php:1164 msgid "Save" msgstr "Guardar" #: tag-groups.php:1168 msgid "Further Instructions" msgstr "Más Instrucciones" #: tag-groups.php:1169 msgid "Shortcode" msgstr "Shortcode" #: tag-groups.php:1171 msgid "Parameters" msgstr "Parámetros" #: tag-groups.php:1171 msgid "example" msgstr "Ejemplo" #: tag-groups.php:1174 msgid "<b>Tags or Terms:</b>" msgstr "<b> Etiquetas o Términos: </b>" #: tag-groups.php:1175 msgid "<b>smallest=x</b> Font-size in pt of the smallest tags. Default: 12" msgstr "" "<b>smallest=x</b> Tamaño de las letras en pt de las etiquetas más pequeñas. " "Por defecto: 12" #: tag-groups.php:1176 msgid "<b>largest=x</b> Font-size in pt of the largest tags. Default: 22" msgstr "" "<b>largest=x</b> Tamaño de las letras en pt de las etiquetas más grandes. " "Por defecto: 22" #: tag-groups.php:1177 msgid "" "<b>orderby=abc</b> Which field to use for sorting, e.g. count. Default: name" msgstr "" "<b>orderby=abc</b> ¿Qué campo utilizar para la clasificación, por ejemplo, " "el recuento. Por defecto: nombre" #: tag-groups.php:1178 msgid "" "<b>order=ASC or =DESC</b> Whether to sort the tags in ascending or " "descending order. Default: ASC" msgstr "" "<b>order=ASC o =DESC</b> Si desea ordenar las etiquetas en orden ascendente " "o descendente. Por defecto: ASC" #: tag-groups.php:1179 msgid "" "<b>amount=x</b> Maximum amount of tags in one cloud (per group). Default: 40" msgstr "" "<b>amount= x</b> Cantidad máxima de etiquetas en una nube (por grupo). Por " "defecto: 40" #: tag-groups.php:1180 msgid "" "<b>hide_empty=1 or =0</b> Whether to hide or show also tags that are not " "assigned to any post. Default: 1 (hide empty)" msgstr "" "<b>hide_empty=1 ó =0</b> Ya sea para ocultar o mostrar también las etiquetas " "que no están asignadas a ninguna publicación. Por defecto: 1 (ocultar vacío)" #: tag-groups.php:1181 msgid "" "<b>tags_post_id=x</b> Display only tags that are assigned to the post (or " "page) with the ID x. If set to 0, it will try to retrieve the current post " "ID. Default: -1 (all tags displayed)" msgstr "" "<b>tags_post_id=x</b> Mostrar sólo etiquetas que se asignan a la publicación " "(o página) con el ID de x. Si se establece en 0, tratará de recuperar el ID " "de la publicación actual. Por defecto: -1 (todas las etiquetas aparecen)" #: tag-groups.php:1182 msgid "<b>separator=\"•\"</b> A separator between the tags. Default: empty" msgstr "" "<b>separador=\"• \"</b> Un separador entre las etiquetas. Por defecto: vacío" #: tag-groups.php:1183 msgid "<b>separator_size=12</b> The size of the separator. Default: 12" msgstr "<b>separator_size=12</b> El tamaño del separador. Por defecto: 12" #: tag-groups.php:1184 msgid "" "<b>adjust_separator_size=1 or =0</b> Whether to adjust the separator's size " "to the size of the following tag. Default: 0" msgstr "" "<b>adjust_separator_size=1 ó =0</b> Ya sea para ajustar el tamaño del " "separador para el tamaño de la etiqueta siguiente. Por defecto: 0" #: tag-groups.php:1185 msgid "<b>prepend=\"#\"</b> Prepend to each tag label. Default: empty" msgstr "<b>prepend=\"#\"</b> Anteponer para cada etiqueta. Por defecto: vacío" #: tag-groups.php:1186 msgid "<b>append=\"something\"</b> Append to each tag label. Default: empty" msgstr "" "<b>append=\"algo\"</b> Anexar a cada etiqueta de la etiqueta. Por defecto: " "vacío" #: tag-groups.php:1187 msgid "" "<b>taxonomy=\"x,y,...\"</b> Restrict the tags only to these taxonomies. " "Default: empty (= no restriction)" msgstr "" "<b>taxonomy=\"x, y, ...\"</b> Restringir las etiquetas sólo a estas " "taxonomías. Por defecto: vacío (= sin restricción)" #: tag-groups.php:1190 msgid "<b>Groups and Tabs:</b>" msgstr "<b>Grupos y Etiquetas:</b>" #: tag-groups.php:1191 msgid "" "<b>include=\"x,y,...\"</b> IDs of tag groups (left column in list of groups) " "that will be considered in the tag cloud. Empty or not used means that all " "tag groups will be used. Default: empty" msgstr "" "<b>include=\"x, y, ...\" </b> IDs de grupos de etiquetas (columna de la " "izquierda en la lista de grupos ) que serán considerados en la nube de " "etiquetas. Vacío o no utilizado significa que se utilizarán todos los grupos " "de etiquetas. Por defecto: vacío" #: tag-groups.php:1192 msgid "" "<b>groups_post_id=x</b> Display only groups of which at least one assigned " "tag is also assigned to the post (or page) with the ID x. If set to 0, it " "will try to retrieve the current post ID. Default: -1 (all groups " "displayed). Matching groups will be added to the list specified by the " "parameter <b>include</b>." msgstr "" "<b> groups_post_id = x </b> Pantalla únicos grupos de los que al menos una " "etiqueta asignada también se asigna a la entrada (o de la página) con el ID " "de x. Si se establece en 0, se tratará de recuperar el ID de mensaje actual. " "Por defecto: -1 (todos los grupos muestran). Grupos de juego se añadirán a " "la lista especificada por el parámetro <b>include</b>." #: tag-groups.php:1193 msgid "<b>show_tabs=1 or =0</b> Whether to show the tabs. Default: 1" msgstr "<b>Show_tabs=1 ó =0</b> Para mostrar las pestañas. Por defecto: 1" #: tag-groups.php:1194 msgid "" "<b>hide_empty_tabs=1 or =0</b> Whether to hide tabs without tags. Default: 0 " "(Not implemented for PHP function with second parameter set to 'true'. Not " "effective with <b>groups_post_id</b>.)" msgstr "" "<b>hide_empty_tabs=1 ó =0</b> si desea ocultar las pestañas y sin etiquetas. " "Por defecto: 0 (No implementado para la función de PHP con el segundo " "parámetro establecido en 'verdadero' No es efectivo con <b> groups_post_id</" "b>)" #: tag-groups.php:1195 msgid "" "<b>collapsible=1 or =0</b> Whether tabs are collapsible (toggle open/close). " "Default: general settings in the back end" msgstr "" "<b>collapsible=1 ó =0</b> Si las pestañas son plegables (alternar abrir / " "cerrar). Por defecto: configuración general en el extremo posterior" #: tag-groups.php:1196 msgid "" "<b>mouseover=1 or =0</b> Whether tabs can be selected by hovering over with " "the mouse pointer (without clicking). Default: general settings in the back " "end" msgstr "" "<b>mouseover= 1 ó =0</b> Si las pestañas se pueden seleccionar colocando el " "puntero del ratón por encima (sin hacer clic). Por defecto: configuración " "general en la parte de atrás" #: tag-groups.php:1199 msgid "<b>Advanced Styling:</b>" msgstr "<b> Styling Avanzado:</b>" #: tag-groups.php:1200 #, fuzzy msgid "" "<b>div_id=abc</b> Define an id for the enclosing &lt;div&gt;. You need to " "define different values if you use more than one cloud on one page. Make " "sure this id has not yet been used - including the active theme and other " "plugins. Recommended are non-standard values to avoid collisions of names, " "replace spaces by underscores or hyphens, or use \"camelCase\". Default: tag-" "groups-cloud-tabs" msgstr "" "Aquí usted puede elegir un tema para la nube de etiquetas. El camino a los " "propios temas es relativo a los <i>archivos</i> de la carpeta de su " "instalación de WordPress. Dejar en blanco si no se usa ninguna.</p><p>Los " "nuevos temas se pueden crear con el <a href=\"http://jqueryui.com/" "themeroller/\" target=\"_blank\">jQuery UI ThemeRoller</a>:\n" "\t\t\t<ol>\n" "\t\t\t <li>A página \"Theme Roller\" puede personalizar todas las " "características o elegir un conjunto de la galería. Terminar con el botón " "\"download\".</li>\n" "\t\t\t <li>La página siguiente (\"Download Builder\") tendrá que seleccionar " "los componentes \"Core\", \"Widget\" y \"Tabs\". Asegúrese de que antes de " "la descarga se introduce en la parte inferior como \"CSS Scope\" <b>.tag-" "groups-cloud-tabs</b> (incluyendo el punto) y que \"Theme Folder Name\" o el " "nombre que desea introducir a continuación (por ejemplo, \"my-theme\" o el " "nombre utilizado en la galería de temas - evitar espacios y caracteres " "exóticos).</li>\n" "\t\t\t <li>Luego de desempaquetar el archivo zip descargado y abrir la " "carpeta css. En su interior se encuentra una carpeta con el previamente " "elegido \"Theme Folder Name\" (que contiene una carpeta \"images\" y " "archivos con el nombre como \"jquery-ui-1.10.2.custom.(min.)css\").</li>\n" "\t\t\t <li>Copiar esta carpeta a su <i>wp-content/uploads</i> e introduzca " "su nombre a continuación.</li>\n" "\t\t\t</ol>" #: tag-groups.php:1201 #, fuzzy msgid "" "<b>div_class=abc</b> Define a class for the enclosing &lt;div&gt;. Default: " "tag-groups-cloud-tabs" msgstr "" "Por defecto la función <b> tag_groups_cloud </ b> devuelve el HTML para una " "nube de etiquetas por pestañas" #: tag-groups.php:1202 #, fuzzy msgid "" "<b>ul_class=abc</b> Define a class for the &lt;div&gt; that generates the " "tabs with the group labels. Default: empty" msgstr "" "<b>hide_empty_tabs=1 ó =0</b> si desea ocultar las pestañas y sin etiquetas. " "Por defecto: 0 (No implementado para la función de PHP con el segundo " "parámetro establecido en 'verdadero' No es efectivo con <b> groups_post_id</" "b>)" #: tag-groups.php:1207 msgid "" "By default the function <b>tag_groups_cloud</b> returns the html for a " "tabbed tag cloud." msgstr "" "Por defecto la función <b> tag_groups_cloud </b> devuelve el HTML para una " "nube de etiquetas por pestañas" #: tag-groups.php:1208 tag-groups.php:1210 #, fuzzy msgid "Example:" msgstr "Ejemplo" #: tag-groups.php:1209 msgid "" "If the optional second parameter is set to 'true', the function returns a " "multidimensional array containing tag groups and tags." msgstr "" "Si el segundo parámetro opcional tiene el valor 'verdadero', la función " "devuelve una matriz multidimensional que contiene grupos de etiquetas y " "etiquetas." #: tag-groups.php:1217 msgid "" "Use this button to delete all tag groups and assignments. Your tags will not " "be changed. Check the checkbox to confirm." msgstr "" "Use este botón para eliminar todos los grupos de variables y asignaciones. " "No se cambiarán las etiquetas. Marque la casilla para confirmar." #: tag-groups.php:1219 msgid "I know what I am doing." msgstr "Sé lo que estoy haciendo." #: tag-groups.php:1228 #, fuzzy msgid "" "If you find a bug or have a question, please visit the official <a " "%s>support forum</a>. There is also a <a %s>dedicated page</a> with more " "examples and instructions for particular applications." msgstr "" "Usted puede agregar un menú desplegable para los filtros por encima de la " "lista de mensajes. Si filtra los mensajes de los grupos de variables, " "entonces sólo los artículos que tienen etiquetas (términos) en ese grupo en " "particular serán mostrados. Esta característica se puede desactivar para que " "el menú no obstruya la pantalla si utiliza un gran número de grupos. Puede " "no funcionar con todas las taxonomías personalizadas. No funciona con más de " "<b> una </b> taxonomía o con <b> categoría </b> como la taxonomía." #: tag-groups.php:1229 msgid "Donations" msgstr "" #: tag-groups.php:1230 #, fuzzy msgid "" "This plugin is the result of many hours of work, adding new features, fixing " "bugs and answering to support questions." msgstr "Nuevo" #: tag-groups.php:1231 #, fuzzy msgid "" "If you find <b>Tag Groups</b> useful, please support the author with a " "microdonation %s or <a %s>donate to his favourite charity</a>." msgstr "" "Elija las taxonomías para la que desea utilizar los grupos de variables. El " "valor predeterminado es <b> post_tag </b>. Tenga en cuenta que la nube de " "etiquetas podría no funcionar con todas las taxonomías y que algunas " "taxonomías enumeradas aquí pueden no ser accesibles en el backend de " "administración. Si usted no entiende lo que está pasando aquí, sólo deje el " "valor predeterminado." #: tag-groups.php:1233 #, fuzzy msgid "Or support his work by a friendly link to one of these websites:" msgstr "" "Usted puede agregar un menú desplegable para los filtros por encima de la " "lista de mensajes. Si filtra los mensajes de los grupos de variables, " "entonces sólo los artículos que tienen etiquetas (términos) en ese grupo en " "particular serán mostrados. Esta característica se puede desactivar para que " "el menú no obstruya la pantalla si utiliza un gran número de grupos. Puede " "no funcionar con todas las taxonomías personalizadas. No funciona con más de " "<b> una </b> taxonomía o con <b> categoría </b> como la taxonomía." #: tag-groups.php:1241 msgid "Thanks!" msgstr "" #: tag-groups.php:1849 msgid "Filter by tag group " msgstr "Filtrar por grupo de etiquetas" #. Plugin Name of the plugin/theme msgid "Tag Groups" msgstr "Grupos de Etiquetas" #. Plugin URI of the plugin/theme msgid "http://www.christoph-amthor.de/software/tag-groups/" msgstr "http://www.christoph-amthor.de/software/tag-groups/" #. Description of the plugin/theme msgid "Assign tags to groups and display them in a tabbed tag cloud" msgstr "" "Asignar etiquetas a los grupos y mostrar en una nube de etiquetas por " "pestañas" #. Author of the plugin/theme msgid "Christoph Amthor" msgstr "Christoph Amthor" #. Author URI of the plugin/theme msgid "http://www.christoph-amthor.de" msgstr "http://www.christoph-amthor.de" PK�������!�󆃰f��f��+��include/shortcodes/class.shortcode_tabs.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( !class_exists( 'TagGroups_Shortcode_Tabs' ) ) { class TagGroups_Shortcode_Tabs extends TagGroups_Shortcode { /** * * Render the tabbed tag cloud, usually by a shortcode, or returning a multidimensional array * * @param array $atts * @param bool $return_array * @return string */ static function tag_groups_cloud( $atts = array(), $return_array = false ) { global $tag_group_groups, $tag_group_premium_terms, $tag_groups_premium_fs_sdk ; extract( shortcode_atts( array( 'active' => null, 'adjust_separator_size' => true, 'add_premium_filter' => 0, 'amount' => 0, 'append' => '', 'assigned_class' => null, 'collapsible' => null, 'custom_title' => null, 'div_class' => 'tag-groups-cloud', 'div_id' => 'tag-groups-cloud-tabs-' . uniqid(), 'exclude_terms' => '', 'groups_post_id' => -1, 'hide_empty_tabs' => false, 'hide_empty' => true, 'include' => '', 'include_terms' => '', 'largest' => 22, 'link_append' => '', 'link_target' => '', 'mouseover' => null, 'not_assigned_name' => 'not assigned', 'order' => 'ASC', 'orderby' => 'name', 'prepend' => '', 'separator_size' => 12, 'separator' => '', 'show_not_assigned' => false, 'show_all_groups' => false, 'show_tabs' => '1', 'show_tag_count' => true, 'smallest' => 12, 'source' => 'shortcode', 'tags_post_id' => -1, 'taxonomy' => null, 'ul_class' => '', ), $atts ) ); /** * Keep always jQuery UI class to produce correct output */ if ( strpos( $div_class, 'tag-groups-cloud' ) === false ) { $div_class .= ' tag-groups-cloud'; } $div_id_output = ( $div_id ? ' id="' . TagGroups_Base::sanitize_html_classes( $div_id ) . '"' : '' ); $div_class_output = ( $div_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $div_class ) . '"' : '' ); if ( is_array( $atts ) ) { asort( $atts ); } /* * applying parameter tags_post_id */ if ( $tags_post_id == 0 ) { $tags_post_id = get_the_ID(); } if ( $groups_post_id == 0 ) { $groups_post_id = get_the_ID(); } $cache_key = md5( 'tabs' . serialize( $atts ) . var_export( $return_array, true ) . serialize( $tags_post_id ) . serialize( $groups_post_id ) ); // check for a cached version (premium plugin) $html = apply_filters( 'tag_groups_hook_cache_get', false, $cache_key ); if ( !$html ) { $html_tabs = array(); $html_tags = array(); $assigned_terms = array(); $include_tags_post_id_groups = array(); $data = $tag_group_groups->get_all_with_position_as_key(); $tag_group_ids = $tag_group_groups->get_group_ids_by_position(); if ( 'shortcode' == $source ) { $prepend = html_entity_decode( $prepend ); $append = html_entity_decode( $append ); $separator = html_entity_decode( $separator ); } if ( 'natural' == $orderby ) { $natural_sorting = true; $orderby = 'name'; } else { $natural_sorting = false; } if ( $smallest < 1 ) { $smallest = 1; } if ( $largest < $smallest ) { $largest = $smallest; } if ( $amount < 0 ) { $amount = 0; } if ( !empty($show_not_assigned) ) { $start_group = 0; } else { $start_group = 1; } if ( !empty($link_append) && mb_strpos( $link_append, '?' ) === 0 ) { $link_append = mb_substr( $link_append, 1 ); } if ( isset( $taxonomy ) ) { if ( empty($taxonomy) ) { unset( $taxonomy ); } else { $taxonomy_array = explode( ',', $taxonomy ); $taxonomy_array = array_filter( array_map( 'trim', $taxonomy_array ) ); } } $taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( !empty($taxonomy_array) ) { $taxonomies = array_intersect( $taxonomies, $taxonomy_array ); if ( empty($taxonomies) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Wrong taxonomy in shortcode "tag_groups_cloud": %s', $taxonomy ) ); } return ''; } } /** * Reduce the risk of interference from other plugins */ remove_all_filters( 'get_terms_orderby' ); remove_all_filters( 'list_terms_exclusions' ); remove_all_filters( 'get_terms' ); $posttags = get_terms( $taxonomies, array( 'hide_empty' => $hide_empty, 'orderby' => $orderby, 'order' => $order, 'include' => $include_terms, 'exclude' => $exclude_terms, ) ); /** * In case of errors: return empty array */ if ( !is_array( $posttags ) ) { $posttags = array(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Error retrieving tags with get_terms.' ); } } $ul_class_output = ( $ul_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $ul_class ) . '"' : '' ); if ( $include !== '' ) { $include_array = explode( ',', str_replace( ' ', '', $include ) ); } else { $include_array = array(); } if ( $separator_size < 1 ) { $separator_size = 12; } else { $separator_size = (int) $separator_size; } if ( $tags_post_id > 0 ) { $result = self::add_tags_of_post( $tags_post_id, $taxonomies, $posttags, $assigned_class ); $assigned_terms = $result['assigned_terms']; $posttags = $result['posttags']; $include_tags_post_id_groups = $result['include_tags_post_id_groups']; } /* * applying parameter groups_post_id */ if ( $groups_post_id > 0 ) { $include_array = self::add_groups_of_post( $groups_post_id, $taxonomies, $include_array ); } elseif ( count( $include_array ) == 0 ) { $include_array = $tag_group_ids; } // apply sorting that cannot be done on database level if ( $natural_sorting ) { $posttags = self::natural_sorting( $posttags, $order ); } elseif ( 'random' == $orderby ) { $posttags = self::random_sorting( $posttags ); } if ( $return_array ) { /* * return tags as array */ $output = array(); $post_counts = array(); $min_max = self::determine_min_max( $posttags, $amount, $tag_group_ids, $include_tags_post_id_groups, $data, $post_counts ); for ( $i = $start_group ; $i <= $tag_group_groups->get_max_position() ; $i++ ) { if ( $show_all_groups || in_array( $data[$i]['term_group'], $include_array ) ) { if ( $i == 0 ) { $output[$i]['name'] = $not_assigned_name; } else { $output[$i]['name'] = $data[$i]['label']; } $output[$i]['term_group'] = $data[$i]['term_group']; $count_amount = 0; if ( 'count' == $orderby && !empty($post_counts) ) { // We have to sort the tags according to the post counts for this particular group $posttags = self::sort_within_groups( $posttags, $data[$i]['term_group'], $post_counts, $order ); } foreach ( $posttags as $tag ) { if ( !empty($amount) && $count_amount >= $amount ) { break; } $term_o = new TagGroups_Term( $tag ); if ( $term_o->is_in_group( $data[$i]['term_group'] ) ) { if ( empty($include_tags_post_id_groups) || in_array( $tag->term_id, $include_tags_post_id_groups[$data[$i]['term_group']] ) ) { // check if tag has posts for this particular group if ( !empty($post_counts) ) { if ( isset( $post_counts[$tag->term_id][$data[$i]['term_group']] ) ) { $tag_count = $post_counts[$tag->term_id][$data[$i]['term_group']]; } else { $tag_count = 0; } } else { $tag_count = $tag->count; } if ( !$hide_empty || $tag_count > 0 ) { $output[$i]['tags'][$count_amount]['term_id'] = $tag->term_id; $output[$i]['tags'][$count_amount]['link'] = get_term_link( $tag ); $output[$i]['tags'][$count_amount]['description'] = $tag->description; $output[$i]['tags'][$count_amount]['count'] = $tag_count; $output[$i]['tags'][$count_amount]['slug'] = $tag->slug; $output[$i]['tags'][$count_amount]['name'] = $tag->name; $output[$i]['tags'][$count_amount]['tg_font_size'] = self::font_size( $tag_count, $min_max[$data[$i]['term_group']]['min'], $min_max[$data[$i]['term_group']]['max'], $smallest, $largest ); if ( !empty($assigned_class) ) { $output[$i]['tags'][$count_amount]['assigned'] = $assigned_terms[$tag->term_id]; } $count_amount++; } } } } $output[$i]['amount'] = $count_amount; } } // create a cached version (premium plugin) do_action( 'tag_groups_hook_cache_set', $cache_key, $output ); return $output; } else { /* * return as html (in the shape of a tabbed cloud) */ $html = ''; /* * render the tabs */ if ( $show_tabs ) { for ( $i = $start_group ; $i <= $tag_group_groups->get_max_position() ; $i++ ) { if ( $show_all_groups || in_array( $data[$i]['term_group'], $include_array ) ) { if ( $i == 0 ) { $group_name = $not_assigned_name; } else { $group_name = $data[$i]['label']; } $html_tabs[$i] = '<li><a href="#tabs-1' . $i . '" >' . htmlentities( $group_name, ENT_QUOTES, "UTF-8" ) . '</a></li>'; } } } /* * render the tab content */ $post_counts = array(); $min_max = self::determine_min_max( $posttags, $amount, $tag_group_ids, $include_tags_post_id_groups, $data, $post_counts ); for ( $i = $start_group ; $i <= $tag_group_groups->get_max_position() ; $i++ ) { $count_amount = 0; if ( $show_all_groups || in_array( $data[$i]['term_group'], $include_array ) ) { $html_tags[$i] = ''; if ( 'count' == $orderby && !empty($post_counts) ) { // We have to sort the tags according to the post counts for this particular group $posttags = self::sort_within_groups( $posttags, $data[$i]['term_group'], $post_counts, $order ); } foreach ( $posttags as $tag ) { $other_tag_classes = ''; $description = ''; if ( !empty($amount) && $count_amount >= $amount ) { break; } $term_o = new TagGroups_Term( $tag ); if ( $term_o->is_in_group( $data[$i]['term_group'] ) ) { if ( empty($include_tags_post_id_groups) || in_array( $tag->term_id, $include_tags_post_id_groups[$data[$i]['term_group']] ) ) { // check if tag has posts for this particular group if ( !empty($post_counts) ) { if ( isset( $post_counts[$tag->term_id][$data[$i]['term_group']] ) ) { $tag_count = $post_counts[$tag->term_id][$data[$i]['term_group']]; } else { $tag_count = 0; } } else { $tag_count = $tag->count; } if ( !$hide_empty || $tag_count > 0 ) { $tag_link = get_term_link( $tag ); if ( !empty($link_append) ) { if ( mb_strpos( $tag_link, '?' ) === false ) { $tag_link = esc_url( $tag_link . '?' . $link_append ); } else { $tag_link = esc_url( $tag_link . '&' . $link_append ); } } $font_size = self::font_size( $tag_count, $min_max[$data[$i]['term_group']]['min'], $min_max[$data[$i]['term_group']]['max'], $smallest, $largest ); $font_size_separator = ( $adjust_separator_size ? $font_size : $separator_size ); if ( $count_amount > 0 && !empty($separator) ) { $html_tags[$i] .= '<span style="font-size:' . $font_size_separator . 'px">' . $separator . '</span> '; } if ( !empty($assigned_class) ) { if ( !empty($assigned_terms[$tag->term_id]) ) { $other_tag_classes = ' ' . $assigned_class . '_1'; } else { $other_tag_classes = ' ' . $assigned_class . '_0'; } } if ( !empty($custom_title) ) { $description = ( !empty($tag->description) ? esc_html( $tag->description ) : '' ); $title = preg_replace( "/(\\{description\\})/", $description, $custom_title ); $title = preg_replace( "/(\\{count\\})/", $tag_count, $title ); } else { // description and number $description = ( !empty($tag->description) ? esc_html( $tag->description ) . ' ' : '' ); $tag_count_brackets = ( $show_tag_count ? '(' . $tag_count . ')' : '' ); $title = $description . $tag_count_brackets; } // replace placeholders in prepend and append if ( !empty($prepend) ) { $prepend_output = preg_replace( "/(\\{count\\})/", $tag_count, $prepend ); } else { $prepend_output = ''; } if ( !empty($append) ) { $append_output = preg_replace( "/(\\{count\\})/", $tag_count, $append ); } else { $append_output = ''; } // adding link target $link_target_html = ( !empty($link_target) ? 'target="' . $link_target . '"' : '' ); // assembling a tag $html_tags[$i] .= '<span class="tag-groups-tag' . $other_tag_classes . '" style="font-size:' . $font_size . 'px"><a href="' . $tag_link . '" ' . $link_target_html . ' title="' . $title . '" class="' . $tag->slug . '">'; if ( '' != $prepend_output ) { $html_tags[$i] .= '<span class="tag-groups-prepend" style="font-size:' . $font_size . 'px">' . htmlentities( $prepend_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags[$i] .= '<span class="tag-groups-label" style="font-size:' . $font_size . 'px">' . $tag->name . '</span>'; if ( '' != $append_output ) { $html_tags[$i] .= '<span class="tag-groups-append" style="font-size:' . $font_size . 'px">' . htmlentities( $append_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags[$i] .= '</a></span> '; $count_amount++; } } } } } if ( $hide_empty_tabs && !$count_amount ) { unset( $html_tabs[$i] ); unset( $html_tags[$i] ); } elseif ( isset( $html_tags[$i] ) ) { $html_tags[$i] = '<div id="tabs-1' . $i . '">' . $html_tags[$i] . '</div>'; } } /* * assemble tabs */ $html .= '<ul' . $ul_class_output . '>' . implode( "\n", $html_tabs ) . '</ul>'; /* * assemble tags */ $html .= implode( "\n", $html_tags ); // create a cached version (premium plugin) do_action( 'tag_groups_hook_cache_set', $cache_key, $html ); } } if ( !$return_array ) { $html = '<div' . $div_id_output . $div_class_output . '>' . $html . '</div>'; // entire wrapper $html .= self::custom_js_tabs( $div_id, $mouseover, $collapsible, $active ); } return $html; } } // class } PK�������!�! ە����+��include/shortcodes/class.shortcode_info.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Shortcode_Info') ) { class TagGroups_Shortcode_Info extends TagGroups_Shortcode { /** * * Render information about tag groups * * For <p> wrapping issue check: https://gist.github.com/bitfade/4555047 * * @param array $atts * @return string */ static function tag_groups_info( $atts = array() ) { global $tag_group_groups; if ( is_array( $atts ) ) { asort( $atts ); } $cache_key = md5( 'tag_groups_info' . serialize( $atts ) ); // check for a cached version (premium plugin) $html = apply_filters( 'tag_groups_hook_cache_get', false, $cache_key ); if ( $html ) { return $html; } $active_tag_group_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); extract( shortcode_atts( array( 'info' => 'number_of_tags', 'group_id' => '0', 'html_id' => '', 'html_class' => '', 'taxonomy' => null, ), $atts ) ); if ( ! empty( $div_id ) ) { $id_string = ' id="' . $html_id . '"'; } else { $id_string = ''; } if ( ! empty( $html_class ) ) { $class_string = ' class="' . $html_class . '"'; } else { $class_string = ''; } if ( ! empty( $taxonomy ) ) { $taxonomy_array = explode( ',', $taxonomy ); $taxonomy_array = array_filter( array_map( 'trim', $taxonomy_array ) ); if ( ! empty( $taxonomy_array ) ) { $tag_group_taxonomies = array_intersect( $active_tag_group_taxonomies, $taxonomy_array ); if ( empty( $tag_group_taxonomies ) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Wrong taxonomy in "tag_groups_info": %s', $taxonomy ) ); } return ''; } } } else { $tag_group_taxonomies = $active_tag_group_taxonomies; } $term_groups = false; $output = ''; switch ( $info ) { case 'number_of_tags': /** * Show the number of tags */ if ( 'all' == $group_id ) { $term_groups = $tag_group_groups->get_group_ids_by_position(); } elseif ( strpos( $group_id, ',' ) !== false ) { $term_groups = array_map( 'intval', explode( ',', $group_id ) ); } if ( $term_groups !== false ) { /** * multiple groups */ $output .= '<table' . $id_string . $class_string . '>'; foreach ( $term_groups as $term_group ) { $tg_group = new TagGroups_Group( $term_group ); if ( $tg_group->exists() ) { $output .= '<tr> <td class="tag-groups-td-label" title="ID: ' . $term_group . '">'; $output .= $tg_group->get_label(); $output .= '</td> <td class="tag-groups-td-number">'; $output .= intval( $tg_group->get_number_of_terms( $tag_group_taxonomies ) ); $output .= '</td> </tr>'; } else { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Unknown group ID in "tag_groups_info": %s', $term_group ) ); } } } $output .= '</table>'; } else { /** * one group */ $term_group = intval( $group_id ); $tg_group = new TagGroups_Group( $term_group ); if ( $tg_group->exists() ) { $output .= '<span' . $id_string . $class_string . '>'; $output .= intval( $tg_group->get_number_of_terms( $tag_group_taxonomies ) ); $output .= '</span>'; } else { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Unknown group ID in "tag_groups_info": %s', $term_group ) ); } } } break; case 'label': if ( strpos( $group_id, ',' ) !== false ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Wrong group ID in "tag_groups_info" with info=label: %s', $group_id ) ); } } else { $term_group = intval( $group_id ); $tg_group = new TagGroups_Group( $term_group ); if ( $tg_group->exists() ) { $output = '<span' . $id_string . $class_string . '>'; $output .= $tg_group->get_label(); $output .= '</span>'; } else { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Unknown group ID in "tag_groups_info": %s', $term_group ) ); } } } break; default: $output = ''; break; } // create a cached version (premium plugin) do_action( 'tag_groups_hook_cache_set', $cache_key, $output ); return $output; } } // class } PK�������!�BdB��B��4��include/shortcodes/class.shortcode_alphabet_tabs.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Shortcode_Alphabet_Tabs') ) { class TagGroups_Shortcode_Alphabet_Tabs extends TagGroups_Shortcode { /** * * Render the tabbed tag cloud, usually by a shortcode, or returning a multidimensional array * * @param array $atts * @param bool $return_array * @return string */ static function tag_groups_alphabet_tabs( $atts = array() ) { global $tag_group_groups; extract( shortcode_atts( array( 'active' => null, 'adjust_separator_size' => true, 'amount' => 0, 'append' => '', 'assigned_class' => null, 'collapsible' => null, 'custom_title' => null, 'div_class' => 'tag-groups-cloud', // tag-groups-cloud preserved to create tab functionality 'div_id' => 'tag-groups-cloud-alphabet-tabs-' . uniqid(), 'exclude_terms' => '', 'exclude_letters' => '', 'hide_empty_tabs' => false, 'hide_empty' => true, 'include' => '', 'include_letters' => '', 'include_terms' => '', 'largest' => 22, 'link_append' => '', 'link_target' => '', 'mouseover' => null, 'order' => 'ASC', 'orderby' => 'name', 'prepend' => '', 'separator_size' => 12, 'separator' => '', 'show_tag_count' => true, 'smallest' => 12, 'source' => 'shortcode', 'tags_post_id' => -1, 'taxonomy' => null, 'ul_class' => '' ), $atts ) ); /** * Keep always jQuery UI class to produce correct output */ if ( strpos( $div_class, 'tag-groups-cloud' ) === false ) { $div_class .= ' tag-groups-cloud'; } $div_id_output = $div_id ? ' id="' . TagGroups_Base::sanitize_html_classes( $div_id ) . '"' : ''; $div_class_output = $div_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $div_class ) . '"' : ''; if ( is_array( $atts ) ) { asort( $atts ); } /* * applying parameter tags_post_id */ if ( $tags_post_id == 0 ) { $tags_post_id = get_the_ID(); } $cache_key = md5( 'alphabet-tabs' . serialize( $atts ) . serialize( $tags_post_id ) ); // check for a cached version (premium plugin) $html = apply_filters( 'tag_groups_hook_cache_get', false, $cache_key ); if ( ! $html ) { $html_tabs = array(); $html_tags = array(); $post_id_terms = array(); $assigned_terms = array(); $include_tags_post_id_groups = array(); if ( 'shortcode' == $source ) { $prepend = html_entity_decode( $prepend ); $append = html_entity_decode( $append ); $separator = html_entity_decode( $separator ); } if ( 'natural' == $orderby ) { $natural_sorting = true; $orderby = 'name'; } else { $natural_sorting = false; } if ( $smallest < 1 ) { $smallest = 1; } if ( $largest < $smallest ) { $largest = $smallest; } if ( $amount < 0 ) { $amount = 0; } if ( ! empty( $link_append ) && mb_strpos( $link_append, '?' ) === 0 ) { $link_append = mb_substr( $link_append, 1 ); } if ( isset( $taxonomy ) ) { if ( empty( $taxonomy ) ) { unset( $taxonomy ); } else { $taxonomy_array = explode( ',', $taxonomy ); $taxonomy_array = array_filter( array_map( 'trim', $taxonomy_array ) ); } } $taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( ! empty( $taxonomy_array ) ) { $taxonomies = array_intersect( $taxonomies, $taxonomy_array ); if ( empty( $taxonomies ) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Wrong taxonomy in shortcode "tag_groups_cloud": %s', $taxonomy ) ); } return ''; } } $tag_group_ids = $tag_group_groups->get_group_ids_by_position(); if ( $include !== '' ) { $include_array = explode( ',', str_replace( ' ', '', $include ) ); } else { $include_array = $tag_group_ids; } /** * Reduce the risk of interference from other plugins */ remove_all_filters( 'get_terms_orderby' ); remove_all_filters( 'list_terms_exclusions' ); remove_all_filters( 'get_terms' ); $posttags = get_terms( $taxonomies, array( 'hide_empty' => $hide_empty, 'orderby' => $orderby, 'order' => $order, 'include' => $include_terms, 'exclude' => $exclude_terms ) ); /** * In case of errors: return empty array */ if ( ! is_array( $posttags ) ) { $posttags = array(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Error retrieving tags with get_terms.' ); } } /* * include */ if ( $posttags ) { foreach ( $posttags as $key => $term ) { $term_o = new TagGroups_Term( $term->term_id ); if ( ! $term_o->is_in_group( $include_array ) ) { unset( $posttags[ $key ] ); } } } $ul_class_output = $ul_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $ul_class ) . '"' : ''; if ( $separator_size < 1 ) { $separator_size = 12; } else { $separator_size = (int) $separator_size; } if ( $tags_post_id > 0 ) { /* * we have a particular post ID * get all tags of this post */ foreach ( $taxonomies as $taxonomy_item ) { $terms = get_the_terms( (int) $tags_post_id, $taxonomy_item ); /* * merging the results of selected taxonomies */ if ( ! empty( $terms ) && is_array( $terms ) ) { $post_id_terms = array_merge( $post_id_terms, $terms ); } } /* * clean all others from $posttags */ foreach ( $posttags as $key => $tag ) { $found = false; foreach ( $post_id_terms as $id_tag ) { if ( $tag->term_id == $id_tag->term_id ) { $found = true; break; } } if ( ! empty( $assigned_class ) ) { /* * Keep all terms but mark for different styling */ if ( $found ) { $assigned_terms[ $tag->term_id ] = true; } } else { /* * Remove unused terms. */ if ( ! $found ) { unset( $posttags[ $key ] ); } } } } // apply sorting that cannot be done on database level if ( $natural_sorting ) { $posttags = self::natural_sorting( $posttags, $order ); } elseif ( 'random' == $orderby ) { $posttags = self::random_sorting( $posttags ); } /** * Extract the alphabet */ $alphabet = self::extract_alphabet( $posttags ); /** * Use provided list to include */ $include_letters = str_replace( ' ', '', $include_letters ); if ( $include_letters != '' ) { // don't use empty() $include_letters_array = array(); $include_letters = mb_strtolower( $include_letters ); for ( $i = 0; $i < mb_strlen( $include_letters ); $i++ ) { $include_letters_array[] = mb_substr( $include_letters, $i, 1 ); } $alphabet = array_intersect( $alphabet, $include_letters_array ); } /** * Use provided list to exclude */ $exclude_letters = str_replace( ' ', '', $exclude_letters ); if ( $exclude_letters != '' ) { // don't use empty() $exclude_letters_array = array(); $exclude_letters = mb_strtolower( $exclude_letters ); for ( $i = 0; $i < mb_strlen( $exclude_letters ); $i++ ) { $exclude_letters_array[] = mb_substr( $exclude_letters, $i, 1 ); } $alphabet = array_diff( $alphabet, $exclude_letters_array ); } $alphabet = self::sort_alphabet( $alphabet ); $html = ''; /* * render the tabs */ $i = 0; foreach ( $alphabet as $letter ) { /** * Convert to upper case only now; otherwise ß would become SS and affect all cases with S */ $html_tabs[ $i ] = '<li><a href="#tabs-1' . $i . '" >' . htmlentities( mb_strtoupper( $letter ), ENT_QUOTES, "UTF-8" ) . '</a></li>'; $i++; } /* * render the tab content */ $min_max = self::determine_min_max_alphabet( $posttags, $amount, $alphabet ); $post_counts = array(); $i = 0; foreach ( $alphabet as $letter ) { $count_amount = 0; $html_tags[ $i ] = ''; foreach ( $posttags as $key => $tag ) { $other_tag_classes = ''; $description = ''; if ( ! empty( $amount ) && $count_amount >= $amount ) { break; } if ( self::get_first_letter( $tag->name ) == $letter ) { $tag_count = $tag->count; if ( ! $hide_empty || $tag_count > 0 ) { $tag_link = get_term_link( $tag ); if ( ! empty( $link_append ) ) { if ( mb_strpos( $tag_link, '?' ) === false ) { $tag_link = esc_url( $tag_link . '?' . $link_append ); } else { $tag_link = esc_url( $tag_link . '&' . $link_append ); } } $font_size = self::font_size( $tag_count, $min_max[ $letter ]['min'], $min_max[ $letter ]['max'], $smallest, $largest ); $font_size_separator = $adjust_separator_size ? $font_size : $separator_size; if ( $count_amount > 0 && ! empty( $separator ) ) { $html_tags[ $i ] .= '<span style="font-size:' . $font_size_separator . 'px">' . $separator . '</span> '; } if ( ! empty( $assigned_class ) ) { if ( ! empty( $assigned_terms[ $tag->term_id ] ) ) { $other_tag_classes = ' ' . $assigned_class . '_1'; } else { $other_tag_classes = ' ' . $assigned_class . '_0'; } } if ( ! empty( $custom_title ) ) { $description = ! empty( $tag->description ) ? esc_html( $tag->description ) : ''; $title = preg_replace("/(\{description\})/", $description, $custom_title); $title = preg_replace("/(\{count\})/", $tag_count, $title); } else { // description and number $description = ! empty( $tag->description ) ? esc_html( $tag->description ) . ' ' : ''; $tag_count_brackets = $show_tag_count ? '(' . $tag_count . ')' : ''; $title = $description . $tag_count_brackets; } // replace placeholders in prepend and append if ( ! empty( $prepend ) ) { $prepend_output = preg_replace("/(\{count\})/", $tag_count, $prepend ); } else { $prepend_output = ''; } if ( ! empty( $append ) ) { $append_output = preg_replace("/(\{count\})/", $tag_count, $append ); } else { $append_output = ''; } // adding link target $link_target_html = ! empty( $link_target ) ? 'target="' . $link_target . '"' : ''; // assembling a tag $html_tags[ $i ] .= '<span class="tag-groups-tag' . $other_tag_classes . '" style="font-size:' . $font_size . 'px"><a href="' . $tag_link . '" ' . $link_target_html . ' title="' . $title . '" class="' . $tag->slug . '">'; if ( '' != $prepend_output ) { $html_tags[ $i ] .= '<span class="tag-groups-prepend" style="font-size:' . $font_size . 'px">' . htmlentities( $prepend_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags[ $i ] .= '<span class="tag-groups-label" style="font-size:' . $font_size . 'px">' . $tag->name . '</span>'; if ( '' != $append_output ) { $html_tags[ $i ] .= '<span class="tag-groups-append" style="font-size:' . $font_size . 'px">' . htmlentities( $append_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags[ $i ] .= '</a></span> '; $count_amount++; } unset( $posttags[ $key ] ); // We don't need to look into that one again, since it can only appear under on tab } } if ( $hide_empty_tabs && ! $count_amount ) { unset( $html_tabs[ $i ] ); unset( $html_tags[ $i ] ); } elseif ( isset( $html_tags[ $i ] ) ) { $html_tags[ $i ] = '<div id="tabs-1' . $i . '">' . $html_tags[ $i ] . '</div>'; } $i++; } /* * assemble tabs */ $html .= '<ul' . $ul_class_output . '>' . implode( "\n", $html_tabs ) . '</ul>'; /* * assemble tags */ $html .= implode( "\n", $html_tags ); // create a cached version (premium plugin) do_action( 'tag_groups_hook_cache_set', $cache_key, $html ); } $html = '<div' . $div_id_output . $div_class_output . '>' . $html . '</div>'; // entire wrapper $html .= self::custom_js_tabs( $div_id, $mouseover, $collapsible, $active ); return $html; } /** * Extract the first letter of a name * * @param string $tag tag name * @return string */ public static function get_first_letter( $tag ) { return mb_strtolower( mb_substr( $tag, 0, 1 ) ); } /** * Extract the first letters of the tags * * @param array $posttags names of tags in WP array * @return array */ public static function extract_alphabet( $posttags ) { $alphabet = array(); foreach ( $posttags as $tag ) { $first_letter = self::get_first_letter( $tag->name ); if ( ! in_array( $first_letter, $alphabet ) ) { $alphabet[] = $first_letter; } } return $alphabet; } /** * Sorts the alphabet according to the current sort order * * @param array $alphabet first letters * @return array */ public static function sort_alphabet( $alphabet ) { // TODO: consider WPML if ( class_exists( 'Collator' ) ) { // Collator can consider locale $collator = new Collator( get_locale() ); $collator->sort( $alphabet ); } else { sort( $alphabet ); } return $alphabet; } /* * find minimum and maximum of quantity of posts for each tag */ static function determine_min_max_alphabet( $tags, $amount, $alphabet ) { $min_max = array(); $count_amount = array(); foreach ( $alphabet as $letter ) { $count_amount[ $letter ] = 0; $min_max[ $letter ]['min'] = 0; $min_max[ $letter ]['max'] = 0; } if ( empty( $tags ) || ! is_array( $tags ) ) { return $min_max; } foreach ( $tags as $tag ) { $first_letter = self::get_first_letter( $tag->name ); if ( in_array( $first_letter, $alphabet ) ) { $tag_count = $tag->count; if ( $tag_count > 0 ) { if ( isset( $min_max[ $first_letter ]['max'] ) && $tag_count > $min_max[ $first_letter ]['max'] ) { $min_max[ $first_letter ]['max'] = $tag_count; } if ( isset( $min_max[ $first_letter ]['min'] ) && ( $tag_count < $min_max[ $first_letter ]['min'] || 0 == $min_max[ $first_letter ]['min'] ) ) { $min_max[ $first_letter ]['min'] = $tag_count; } $count_amount[ $first_letter ]++; } } } return $min_max; } } // class } PK�������!�y<?L��?L��0��include/shortcodes/class.shortcode_accordion.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( !class_exists( 'TagGroups_Shortcode_Accordion' ) ) { class TagGroups_Shortcode_Accordion extends TagGroups_Shortcode { /** * * Render the accordion tag cloud * * @param array $atts * @return string */ static function tag_groups_accordion( $atts = array() ) { global $tag_group_groups, $tag_group_premium_terms, $tag_groups_premium_fs_sdk ; extract( shortcode_atts( array( 'active' => null, 'adjust_separator_size' => true, 'add_premium_filter' => 0, 'amount' => 0, 'append' => '', 'assigned_class' => null, 'collapsible' => null, 'custom_title' => null, 'div_class' => 'tag-groups-cloud', 'div_id' => 'tag-groups-cloud-accordion-' . uniqid(), 'exclude_terms' => '', 'groups_post_id' => -1, 'header_class' => '', 'heightstyle' => 'content', 'hide_empty_content' => false, 'hide_empty' => true, 'include' => '', 'include_terms' => '', 'inner_div_class' => '', 'largest' => 22, 'link_target' => '', 'link_append' => '', 'mouseover' => null, 'not_assigned_name' => 'not assigned', 'order' => 'ASC', 'orderby' => 'name', 'prepend' => '', 'separator_size' => 12, 'separator' => '', 'show_not_assigned' => false, 'show_all_groups' => false, 'show_accordion' => 1, 'show_tag_count' => true, 'source' => 'shortcode', 'smallest' => 12, 'tags_post_id' => -1, 'taxonomy' => null, ), $atts ) ); /** * Keep always jQuery UI class to produce correct output */ if ( strpos( $div_class, 'tag-groups-cloud' ) === false ) { $div_class .= ' tag-groups-cloud'; } $div_id_output = ( $div_id ? ' id="' . TagGroups_Base::sanitize_html_classes( $div_id ) . '"' : '' ); $div_class_output = ( $div_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $div_class ) . '"' : '' ); if ( is_array( $atts ) ) { asort( $atts ); } if ( $tags_post_id == 0 ) { $tags_post_id = get_the_ID(); } if ( $groups_post_id == 0 ) { $groups_post_id = get_the_ID(); } $cache_key = md5( 'accordion' . serialize( $atts ) . serialize( $tags_post_id ) . serialize( $groups_post_id ) ); // check for a cached version (premium plugin) $html = apply_filters( 'tag_groups_hook_cache_get', false, $cache_key ); if ( !$html ) { $assigned_terms = array(); $include_tags_post_id_groups = array(); $data = $tag_group_groups->get_all_with_position_as_key(); $tag_group_ids = $tag_group_groups->get_group_ids_by_position(); if ( 'shortcode' == $source ) { $prepend = html_entity_decode( $prepend ); $append = html_entity_decode( $append ); $separator = html_entity_decode( $separator ); } if ( 'natural' == $orderby ) { $natural_sorting = true; $orderby = 'name'; } else { $natural_sorting = false; } if ( $smallest < 1 ) { $smallest = 1; } if ( $largest < $smallest ) { $largest = $smallest; } if ( $amount < 0 ) { $amount = 0; } if ( !empty($link_append) && mb_strpos( $link_append, '?' ) === 0 ) { $link_append = mb_substr( $link_append, 1 ); } if ( !empty($show_not_assigned) ) { $start_group = 0; } else { $start_group = 1; } if ( isset( $taxonomy ) ) { if ( empty($taxonomy) ) { unset( $taxonomy ); } else { $taxonomy_array = explode( ',', $taxonomy ); $taxonomy_array = array_filter( array_map( 'trim', $taxonomy_array ) ); } } $taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( !empty($taxonomy_array) ) { $taxonomies = array_intersect( $taxonomies, $taxonomy_array ); if ( empty($taxonomies) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] Wrong taxonomy in shortcode "tag_groups_accordion": %s', $taxonomy ) ); } return ''; } } /** * Reduce the risk of interference from other plugins */ remove_all_filters( 'get_terms_orderby' ); remove_all_filters( 'list_terms_exclusions' ); remove_all_filters( 'get_terms' ); $posttags = get_terms( $taxonomies, array( 'hide_empty' => $hide_empty, 'orderby' => $orderby, 'order' => $order, 'include' => $include_terms, 'exclude' => $exclude_terms, ) ); /** * In case of errors: return empty array */ if ( !is_array( $posttags ) ) { $posttags = array(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Error retrieving tags with get_terms.' ); } } $header_class_output = ( $header_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $header_class ) . '"' : '' ); $inner_div_class_output = ( $inner_div_class ? ' class="' . TagGroups_Base::sanitize_html_classes( $inner_div_class ) . '"' : '' ); if ( $include !== '' ) { $include_array = explode( ',', str_replace( ' ', '', $include ) ); } else { $include_array = array(); } if ( $separator_size < 1 ) { $separator_size = 12; } else { $separator_size = (int) $separator_size; } /* * applying parameter tags_post_id */ if ( $tags_post_id < -1 ) { $tags_post_id = -1; } if ( $tags_post_id > 0 ) { $result = self::add_tags_of_post( $tags_post_id, $taxonomies, $posttags, $assigned_class ); $assigned_terms = $result['assigned_terms']; $posttags = $result['posttags']; $include_tags_post_id_groups = $result['include_tags_post_id_groups']; } /* * applying parameter groups_post_id */ if ( $groups_post_id > 0 ) { $include_array = self::add_groups_of_post( $groups_post_id, $taxonomies, $include_array ); } elseif ( count( $include_array ) == 0 ) { $include_array = $tag_group_ids; } // apply sorting that cannot be done on database level if ( $natural_sorting ) { $posttags = self::natural_sorting( $posttags, $order ); } elseif ( 'random' == $orderby ) { $posttags = self::random_sorting( $posttags ); } /* * return as html (in the shape of clouds in an accordion) */ $post_counts = array(); $min_max = self::determine_min_max( $posttags, $amount, $tag_group_ids, $include_tags_post_id_groups, $data, $post_counts ); $html = ''; for ( $i = $start_group ; $i <= $tag_group_groups->get_max_position() ; $i++ ) { $html_header = ''; $html_tags = ''; $count_amount = 0; if ( $show_all_groups || in_array( $data[$i]['term_group'], $include_array ) ) { /* * render the accordion headers */ if ( $show_accordion == 1 ) { if ( $i == 0 ) { $group_name = $not_assigned_name; } else { $group_name = $data[$i]['label']; } $html_header .= '<h3' . $header_class_output . '>' . htmlentities( $group_name, ENT_QUOTES, "UTF-8" ) . '</h3>'; } if ( 'count' == $orderby && !empty($post_counts) ) { // We have to sort the tags according to the post counts for this particular group $posttags = self::sort_within_groups( $posttags, $data[$i]['term_group'], $post_counts, $order ); } /* * render the accordion content */ foreach ( $posttags as $tag ) { $other_tag_classes = ''; $description = ''; if ( !empty($amount) && $count_amount >= $amount ) { break; } $term_o = new TagGroups_Term( $tag ); if ( $term_o->is_in_group( $data[$i]['term_group'] ) ) { if ( empty($include_tags_post_id_groups) || in_array( $tag->term_id, $include_tags_post_id_groups[$data[$i]['term_group']] ) ) { // check if tag has posts for this particular group if ( !empty($post_counts) ) { if ( isset( $post_counts[$tag->term_id][$data[$i]['term_group']] ) ) { $tag_count = $post_counts[$tag->term_id][$data[$i]['term_group']]; } else { $tag_count = 0; } } else { $tag_count = $tag->count; } if ( !$hide_empty || $tag_count > 0 ) { $tag_link = get_term_link( $tag ); if ( !empty($link_append) ) { if ( mb_strpos( $tag_link, '?' ) === false ) { $tag_link = esc_url( $tag_link . '?' . $link_append ); } else { $tag_link = esc_url( $tag_link . '&' . $link_append ); } } $font_size = self::font_size( $tag_count, $min_max[$data[$i]['term_group']]['min'], $min_max[$data[$i]['term_group']]['max'], $smallest, $largest ); $font_size_separator = ( $adjust_separator_size ? $font_size : $separator_size ); if ( $count_amount > 0 && !empty($separator) ) { $html_tags .= '<span style="font-size:' . $font_size_separator . 'px">' . $separator . '</span> '; } if ( !empty($assigned_class) ) { if ( !empty($assigned_terms[$tag->term_id]) ) { $other_tag_classes = ' ' . $assigned_class . '_1'; } else { $other_tag_classes = ' ' . $assigned_class . '_0'; } } if ( !empty($custom_title) ) { $description = ( !empty($tag->description) ? esc_html( $tag->description ) : '' ); $title = preg_replace( "/(\\{description\\})/", $description, $custom_title ); $title = preg_replace( "/(\\{count\\})/", $tag_count, $title ); } else { // description and number $description = ( !empty($tag->description) ? esc_html( $tag->description ) . ' ' : '' ); $tag_count_brackets = ( $show_tag_count ? '(' . $tag_count . ')' : '' ); $title = $description . $tag_count_brackets; } // replace placeholders in prepend and append if ( !empty($prepend) ) { $prepend_output = preg_replace( "/(\\{count\\})/", $tag_count, $prepend ); } else { $prepend_output = ''; } if ( !empty($append) ) { $append_output = preg_replace( "/(\\{count\\})/", $tag_count, $append ); } else { $append_output = ''; } // adding link target $link_target_html = ( !empty($link_target) ? 'target="' . $link_target . '"' : '' ); // assembling a tag $html_tags .= '<span class="tag-groups-tag' . $other_tag_classes . '" style="font-size:' . $font_size . 'px"><a href="' . $tag_link . '" ' . $link_target_html . ' title="' . $title . '" class="' . $tag->slug . '">'; if ( '' != $prepend_output ) { $html_tags .= '<span class="tag-groups-prepend" style="font-size:' . $font_size . 'px">' . htmlentities( $prepend_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags .= '<span class="tag-groups-label" style="font-size:' . $font_size . 'px">' . $tag->name . '</span>'; if ( '' != $append_output ) { $html_tags .= '<span class="tag-groups-append" style="font-size:' . $font_size . 'px">' . htmlentities( $append_output, ENT_QUOTES, "UTF-8" ) . '</span>'; } $html_tags .= '</a></span> '; $count_amount++; } } } } } if ( !empty($html_header) && (!$hide_empty_content || $count_amount) ) { $html .= $html_header . '<div' . $inner_div_class_output . '>' . $html_tags . '</div>'; } } // create a cached version (premium plugin) do_action( 'tag_groups_hook_cache_set', $cache_key, $html ); } $html = '<div' . $div_id_output . $div_class_output . '>' . $html . '</div>'; $html .= self::custom_js_accordion( $div_id, $mouseover, $collapsible, $active, $heightstyle ); return $html; } } // class } PK�������!�~{QC��QC�� ��include/entities/class.group.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 1.8.0 * */ if ( !class_exists( 'TagGroups_Group' ) ) { class TagGroups_Group { /** * term_group id * * @var int */ private $group_id ; /** * object of groups * * @var array */ private $tg_groups ; /** * array of positions[term_group] * * @var array */ private $position ; /** * array of labels[term_group] * * @var array */ private $label ; /** * instance of the premium part * * @var object */ private $tg_group_premium ; /** * Constructor * * * @param int $group_id optional term_group * @return return type */ public function __construct( $group_id = null ) { global $tag_group_groups ; $this->tg_groups = $tag_group_groups; if ( isset( $group_id ) ) { $this->group_id = $group_id; } $this->load(); if ( class_exists( 'TagGroups_Premium_Group' ) ) { $this->tg_group_premium = new TagGroups_Premium_Group( $this->group_id ); } return $this; } /** * Load data from database * * * @param int $group_id optional term_group * @return return type */ public function load() { $labels = $this->tg_groups->get_labels(); $positions = $this->tg_groups->get_positions(); if ( isset( $labels[$this->group_id] ) ) { $this->label = $labels[$this->group_id]; } else { $this->label = ''; } if ( isset( $positions[$this->group_id] ) ) { $this->position = $positions[$this->group_id]; } else { $this->position = 1; } return $this; } /** * checks whether this group exists, identified by its ID * * * @param void * @return boolean */ public function exists() { if ( 0 == $this->group_id ) { return true; } return isset( $this->group_id ) && in_array( $this->group_id, $this->tg_groups->get_group_ids() ); } /** * Saves this group to the database * * * @param void * @return object $this */ public function save() { if ( empty($this->group_id) ) { return $this; } $labels = $this->tg_groups->get_labels(); $positions = $this->tg_groups->get_positions(); $labels[$this->group_id] = $this->label; $positions[$this->group_id] = $this->position; $this->tg_groups->set_labels( $labels ); $this->tg_groups->set_positions( $positions ); $this->tg_groups->save(); return $this; } /** * getter for the term_group value * * * @param void * @return int term_group */ public function get_group_id() { return $this->group_id; } /** * setter for the term_group value * * * @param int $group_id * @return object $this */ public function set_group_id( $group_id ) { $this->group_id = $group_id; if ( isset( $this->tg_group_premium ) ) { $this->tg_group_premium->set_group_id( $group_id ); } return $this; } /** * adds a new group and saves it * * * @param int $position position of the new group * @param string $label label of the new group * @return int */ public function create( $position = null, $label ) { $this->set_group_id( $this->tg_groups->get_max_term_group() + 1 ); $this->label = $label; $this->set_position( $this->tg_groups->get_max_position() + 1 ); $this->tg_groups->reindex_positions()->add_group( $this ); if ( isset( $position ) && $position != $this->position ) { $this->move_to_position( $position ); } $this->save(); return $this; } /** * returns all terms that are associated with this term group * * @param string|array $taxonomy See get_terms * @param string $hide_empty See get_terms * @param string $fields See get_terms * @param string $post_id See get_terms * @param string $orderby See get_terms * @param string $order See get_terms * @return array */ public function get_group_terms( $taxonomy = 'post_tag', $hide_empty = false, $fields = 'all', $post_id = 0, $orderby = 'name', $order = 'ASC' ) { global $tag_groups_premium_fs_sdk ; if ( !isset( $this->group_id ) ) { return array(); } /** * Remove invalid taxonomies */ $taxonomy = TagGroups_Taxonomy::remove_invalid( $taxonomy ); $args = array( 'taxonomy' => $taxonomy, 'hide_empty' => $hide_empty, 'orderby' => $orderby, 'order' => $order, 'fields' => 'all', ); $terms = get_terms( $args ); // need to sort manually if ( strtolower( $fields ) == 'ids' ) { $result = array(); foreach ( $terms as $key => $term ) { $tg_term = new TagGroups_Term( $term ); if ( $tg_term->is_in_group( $this->group_id ) && !in_array( $term->term_id, $result ) ) { $result[] = $term->term_id; } } return $result; } elseif ( strtolower( $fields ) == 'names' ) { $result = array(); foreach ( $terms as $key => $term ) { $tg_term = new TagGroups_Term( $term ); if ( $tg_term->is_in_group( $this->group_id ) && !in_array( $term->name, $result ) ) { $result[] = $term->name; } } return $result; } elseif ( strtolower( $fields ) == 'count' ) { $result = 0; $result_ids = array(); foreach ( $terms as $key => $term ) { $tg_term = new TagGroups_Term( $term ); if ( $tg_term->is_in_group( $this->group_id ) && !in_array( $term->term_id, $result_ids ) ) { $result++; $result_ids[] = $term->term_id; } } return $result; } else { $result = array(); $result_ids = array(); foreach ( $terms as $key => $term ) { $tg_term = new TagGroups_Term( $term ); if ( $tg_term->is_in_group( $this->group_id ) && !in_array( $term->term_id, $result_ids ) ) { $result[] = $term; $result_ids[] = $term->term_id; } } return $result; } } /** * adds terms to this group * * * @param array $term_ids one-dimensional array of term IDs * @return object $this */ public function add_terms( $term_ids ) { foreach ( $term_ids as $term_id ) { $tg_term = new TagGroups_Term( $term_id ); $tg_term->add_group( $this->group_id ); $tg_term->save(); } return $this; } /** * removes terms from this group * * * @param array $term_ids one-dimensional array of term IDs * @return object $this */ public function remove_terms( $term_ids = array() ) { $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $terms = get_terms( array( 'include' => $term_ids, 'hide_empty' => false, 'taxonomy' => $enabled_taxonomies, ) ); foreach ( $terms as $term ) { $tg_term = new TagGroups_Term( $term ); // make sure this term is really in this group if ( $tg_term->is_in_group( $this ) ) { $tg_term->remove_group( $this )->save(); } } return $this; } /** * deletes this group * * * @param int $group_id ID of this group * @return object $this */ public function delete() { $labels = $this->tg_groups->get_labels(); $positions = $this->tg_groups->get_positions(); $group_ids = $this->tg_groups->get_group_ids(); if ( ($key = array_search( $this->group_id, $group_ids )) === false ) { return $this; } unset( $group_ids[$key] ); unset( $labels[$this->group_id] ); unset( $positions[$this->group_id] ); $this->tg_groups->set_labels( $labels ); $this->tg_groups->set_positions( $positions ); $this->tg_groups->set_group_ids( $group_ids ); $this->tg_groups->reindex_positions(); $this->tg_groups->save(); $this->remove_terms(); unset( $this->group_id ); do_action( 'term_group_deleted' ); return $this; } /** * returns the position of this group * * @param void * @return int|boolean */ public function get_position() { return $this->position; } /** * sets the position of this group * * * @param int $position position of this group * @return object $this */ public function set_position( $position ) { $this->position = $position; return $this; } /** * sets the position of this group * * * @param int $position position of this group * @return object $this */ public function move_to_position( $new_position ) { if ( empty($this->group_id) ) { return false; } $old_position = $this->get_position(); $positions = $this->tg_groups->get_positions(); /** * 1. move down on old position */ foreach ( $positions as $key => $value ) { if ( $value > $old_position ) { $positions[$key] = $value - 1; } } /** * 2. make space at new position */ foreach ( $positions as $key => $value ) { if ( $value >= $new_position ) { $positions[$key] = $value + 1; } } /** * 3. Insert */ $positions[$this->group_id] = $new_position; $this->tg_groups->set_positions( $positions ); $this->position = $new_position; $this->tg_groups->reindex_positions(); return $this; } /** * returns the label of this group * * @param void * @return string|boolean */ public function get_label() { if ( !isset( $this->group_id ) ) { // allow also "not assigned" return false; } return $this->label; } /** * sets the label of this group * * * @param string $label label of this group * @return object $this */ public function set_label( $label ) { if ( empty($this->group_id) ) { return false; } $this->label = $label; return $this; } /** * returns the number of terms associated with this group * * * @param void * @return int */ public function get_number_of_terms( $taxonomies ) { if ( !isset( $this->group_id ) ) { return false; } if ( !is_array( $taxonomies ) ) { $taxonomies = array( $taxonomies ); } /** * Consider only taxonomies that * 1. are among $tag_group_taxonomies * 2. actually exist */ $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies( $taxonomies ); if ( class_exists( 'TagGroups_Premium_Group' ) ) { return $this->get_group_terms( $enabled_taxonomies, false, 'count' ); } else { $terms = get_terms( array( 'hide_empty' => false, 'taxonomy' => $enabled_taxonomies, ) ); $number = 0; foreach ( $terms as $term ) { $tg_term = new TagGroups_Term( $term ); if ( $tg_term->is_in_group( $this->group_id ) ) { $number++; } } } return $number; } /** * sets $this->group_id by label * * * @param string $label * @return boolean|int */ public function find_by_label( $label ) { $labels = $this->tg_groups->get_labels(); if ( in_array( $label, $labels ) ) { $this->group_id = array_search( $label, $labels ); $this->load(); return $this; } else { return false; } } /** * sets $this->group_id by position * * * @param int $position * @return boolean|int */ public function find_by_position( $position ) { $positions = $this->tg_groups->get_positions(); if ( in_array( $position, $positions ) ) { $this->group_id = array_search( $position, $positions ); $this->load(); return $this; } else { $this->group_id = 0; return false; } } /** * returns an array of group properties as values * * @param void * @return array */ public function get_info( $taxonomy = null, $hide_empty = false, $fields = null, $orderby = 'name', $order = 'ASC' ) { // dealing with NULL values if ( empty($fields) ) { $fields = 'ids'; } if ( empty($taxonomy) ) { $taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); } if ( !isset( $hide_empty ) || empty($hide_empty) ) { $hide_empty = false; } $terms = $this->get_group_terms( $taxonomy, $hide_empty, $fields, 0, $orderby, $order ); if ( !is_array( $terms ) ) { $terms = array(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Error retrieving terms in get_info().' ); } } return array( 'term_group' => (int) $this->group_id, 'label' => $this->label, 'position' => (int) $this->position, 'terms' => $terms, ); } } }PK�������!�i/`%��%����include/entities/class.term.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * */ if ( !class_exists( 'TagGroups_Term' ) ) { class TagGroups_Term { /** * identificator * * @var int */ private $term_id ; /** * taxonomy, needed for updating * * @var int */ private $taxonomy ; /** * name, needed for metabox and dynamic post filter * * @var string */ private $name ; /** * array of groups that this term is a member of * * @var array */ private $groups ; /** * slug of the term * * @var array */ private $slug ; /** * Constructor * * @param int|object $term term * @return object $this|boolean false if error occured during loading * */ public function __construct( $term = null, $tg_terms = null ) { if ( isset( $term ) ) { if ( is_object( $term ) ) { /** * We can fill the properties directly from the WP term object. */ $this->term_id = $term->term_id; $this->taxonomy = $term->taxonomy; $this->name = $term->name; $this->slug = $term->slug; $this->groups = array( $term->term_group ); } else { $this->term_id = $term; $this->groups = array(); } return $this->load(); } return $this; } /** * Loads relevant data from the database * * @param void * @return object|boolean $this or false on error */ public function load() { global $tag_groups_premium_fs_sdk ; if ( empty($this->term_id) ) { return false; } if ( empty($this->groups) || empty($this->taxonomy) || empty($this->name) || empty($this->slug) ) { /** * We need to fill the properties from the WP term object. */ /** * Some plugins hook into get_term but forget to forward term_group */ remove_all_filters( 'get_term' ); if ( !empty($this->taxonomy) ) { remove_all_filters( 'get_' . $this->taxonomy ); } $term = get_term( $this->term_id ); /** * Check if term exists. */ if ( is_object( $term ) ) { $this->taxonomy = $term->taxonomy; $this->name = $term->name; $this->slug = $term->slug; $this->groups = array( $term->term_group ); } } return $this; } /** * Save group-relevant data to the database (We are not saving the name) * * @param void * @return object $this|boolean false in case of error */ public function save() { global $tag_groups_premium_fs_sdk ; if ( empty($this->term_id) ) { return false; } /** * Check permissions */ if ( $tag_groups_premium_fs_sdk->is_plan_or_trial( 'premium' ) ) { $tag_group_role_edit_tags = ( class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_tags', 'manage_options' ) : 'manage_options' ); } else { $tag_group_role_edit_tags = 'manage_options'; } if ( !current_user_can( $tag_group_role_edit_tags ) ) { return false; } /** * Remove the "not assigned" element - usually with term_group 0 * Use a copy of $this->groups. */ $term_groups = $this->groups; if ( count( $term_groups ) > 1 ) { $index_not_assigned = array_search( 0, $term_groups ); if ( $index_not_assigned !== false ) { unset( $term_groups[$index_not_assigned] ); } } /** * Save only the first element as term_group to the term (base plugin), or save the entire array (premium plugin) */ if ( !class_exists( 'TagGroups_Premium_Term' ) ) { wp_update_term( $this->term_id, $this->taxonomy, array( 'term_group' => TagGroups_Base::get_first_element( $term_groups ), ) ); } else { } do_action( 'groups_of_term_saved', $this->term_id, $term_groups ); return $this; } /** * Checks if this term is assigned to a group or groups * * @param int|object|array $group (int, object) or groups (array of int) * @return boolean */ public function is_in_group( $group ) { if ( 0 === $group ) { if ( empty($this->groups) || array_values( $this->groups ) == array( 0 ) ) { return true; } else { return false; } } else { $term_groups = $this->make_array( $group ); if ( count( array_intersect( $this->groups, $term_groups ) ) ) { return true; } else { return false; } } } /** * Getter for $this->groups (values cast to integer) * * @param * @return */ public function get_groups() { if ( is_array( $this->groups ) ) { return array_values( array_map( 'intval', $this->groups ) ); } else { return (int) $this->groups; } } /** * Setter for $this->groups * * @param int|object|array $group (int, object) or groups (array of int) * @return object $this */ public function set_group( $group ) { $this->groups = $this->make_array( $group ); return $this; } /** * Adds one or more groups to $this->groups * * @param int|object|array $group (int, object) or groups (array of int) * @return object|boolean $this|false */ public function add_group( $group ) { /** * Important: New group(s) must come first so that it will be saved in base plugin */ $this->groups = array_merge( $this->make_array( $group ), $this->groups ); return $this; } /** * Remove a group from $this->groups * * @param int|object|array $group (int, object) or groups (array of int) * @return object|boolean $this|false */ public function remove_group( $group ) { $this->groups = array_diff( $this->groups, $this->make_array( $group ) ); return $this; } /** * Remove all groups from $this->groups * * @param * @return */ public function remove_all_groups() { $this->groups = array( 0 ); return $this; } /** * returns the term's name * * @param void * @return string */ public function get_name() { return $this->name; } /** * returns the term's taxonomy * * @param void * @return string */ public function get_taxonomy() { return $this->taxonomy; } /** * returns the term's slug * * @param void * @return string */ public function get_slug() { return $this->slug; } /** * Makes an array of group ids from an object, an integer or an array * includes sanitation * * @param object|array|integer * @return array one-dimensional array of integers (term_group values) */ private function make_array( $group ) { if ( is_object( $group ) ) { return array( intval( $group->get_group_id() ) ); } elseif ( is_array( $group ) ) { return array_map( 'intval', $group ); } else { return array( intval( $group ) ); } } } }PK�������!� h �� ����include/helpers/class.terms.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * */ if ( ! class_exists( 'TagGroups_Terms' ) ) { class TagGroups_Terms { } } PK�������!�r; �� ��!��include/helpers/class.options.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Options') ) { /** * */ class TagGroups_Options { const TAG_GROUPS_PLUGIN = 1; const TAG_GROUPS_PREMIUM_PLUGIN = 2; function __construct() {} /** * The list of all currently used options. Relevant for deleting, exporting and importing * * @param void * @return array */ public function get_option_names() { $option_names = array(); $option_names['tag_group_taxonomy'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['term_groups'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['term_group_positions'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['term_group_labels'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_theme'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_mouseover'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_collapsible'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_enqueue_jquery'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_shortcode_widget'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_show_filter'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_show_filter_tags'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_html_description'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_admin_notice'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); $option_names['chatty_mango_cache'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); $option_names['tag_group_shortcode_enqueue_always'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_tags_filter'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_onboarding'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); $option_names['tag_groups_per_page'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_base_version'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_base_first_activation_time'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_group_languages'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); $option_names['tag_group_sample_page_id'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); /** * Deprecated after 0.36 - don't export */ $option_names['tag_group_labels'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); $option_names['tag_group_ids'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); $option_names['max_tag_group_id'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => false ); /** * Options of the premium plugin; listed here so they survive uninstallation of premium plugin */ $option_names['tag_group_meta_box_taxonomy'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_object_cache'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_meta_box_add_term'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_meta_box_change_group'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_role_edit_groups'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_open_all_with_terms'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_role_mb_override'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_hide_tagsdiv'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_latest_version'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => false ); $option_names['tag_group_latest_version_url'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => false ); $option_names['chatty_mango_packages'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => false ); $option_names['tag_group_display_groups_under_posts'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_single'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_feed'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_home'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_archive'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_remove_the_post_terms'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_title'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_priority'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_premium_version'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_premium_first_activation_time'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_posts_separator'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_dpf_template'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_add_product_tags_to_attributes'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_display_groups_under_products_separator'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_remove_the_product_tags'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_role_edit_tags'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_meta_box_include'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); $option_names['tag_group_meta_box_open_all'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PREMIUM_PLUGIN, 'export' => true ); // should be last: $option_names['tag_group_reset_when_uninstall'] = array( 'origin' => TagGroups_Options::TAG_GROUPS_PLUGIN, 'export' => true ); return $option_names; } } } PK�������!�K��K��1��include/helpers/class.activation_deactivation.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2019 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Activation_Deactivation') ) { /** * */ class TagGroups_Activation_Deactivation { /** * This script is executed when the (inactive) plugin is deleted through the admin backend. * *It removes the plugin settings from the option table and all tag groups. It does not change the term_group field of the taxonomies. */ public static function on_uninstall() { if ( ! current_user_can( 'activate_plugins' ) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Insufficient permissions to uninstall plugin.' ); } return; } // Referrer is wrong when triggered via Freemius // check_admin_referer( 'bulk-plugins' ); /** * Delete options only if requested */ // Note: WP_UNINSTALL_PLUGIN is not defined when using the deinstallation hook if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Starting uninstall routine.' ); } /** * Purge cache */ if ( file_exists( dirname( __FILE__ ) . '/class.cache.php' ) ) { require_once dirname( __FILE__ ) . '/class.cache.php'; if ( class_exists( 'ChattyMango_Cache' ) ) { $cache = new ChattyMango_Cache(); $cache ->type( get_option( 'tag_group_object_cache', ChattyMango_Cache::WP_OPTIONS ) ) ->path( WP_CONTENT_DIR . '/chatty-mango/cache/' ) ->purge_all(); } } $tag_group_reset_when_uninstall = get_option( 'tag_group_reset_when_uninstall', 0 ); $option_count = 0; if ( $tag_group_reset_when_uninstall && file_exists( dirname( __FILE__ ) . '/class.options.php' ) ) { require_once dirname( __FILE__ ) . '/class.options.php'; $tagGroups_options = new TagGroups_Options(); $option_names = $tagGroups_options->get_option_names(); if ( isset( $option_names[ 'tag_group_group_languages' ] ) ) { foreach ( $option_names[ 'tag_group_group_languages' ] as $language ) { if ( delete_option( 'term_group_labels_' . $language ) ) { $option_count++; } } } foreach ( $option_names as $key => $value ) { if ( delete_option( $key ) ) { $option_count++; } } if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups] %d options deleted.', $option_count ) ); } } /** * Erase /chatty-mango/cache/ directory */ if ( file_exists( WP_CONTENT_DIR . '/chatty-mango/cache' ) && is_dir( WP_CONTENT_DIR . '/chatty-mango/cache' ) ) { /** * Attempt to empty and remove chatty-mango/cache directory * (Different from purging cache because the previous one can be database.) */ foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( WP_CONTENT_DIR . '/chatty-mango/cache/' ) ) as $file) { // filter out "." and ".." if ( $file->isDir() ) continue; @unlink( $file->getPathname() ); } @rmdir( WP_CONTENT_DIR . '/chatty-mango/cache' ); } /** * Remove transients * * Don't call the method clear_term_cache since we don't know if it is still available. */ if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Removing transients.' ); } global $wpdb; $transients = $wpdb->get_col( " SELECT REPLACE(option_name, '_transient_', '') AS transient_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_tag_groups_%' " ); foreach( $transients as $transient ) { delete_transient( $transient ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups Premium] Deleted the transient %s.', $transient ) ); } } /** * Remove regular crons */ wp_clear_scheduled_hook( 'tag_groups_purge_expired_transients' ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Finished uninstall routine.' ); } } } } PK�������!�D����"��include/helpers/class.taxonomy.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 0.38 * */ if ( ! class_exists( 'TagGroups_Taxonomy' ) ) { class TagGroups_Taxonomy { /** * Constructor * * */ public function __construct() { } /** * Removes taxonomy names that are not registered with this WP site as public * * * @param array $taxonomy_slugs * @return array */ public static function remove_invalid( $taxonomy_slugs ) { if ( ! is_array( $taxonomy_slugs ) ) { $taxonomy_slugs = array( $taxonomy_slugs ); } $valid_taxonomy_slugs = self::get_public_taxonomies(); return array_values( array_intersect( $taxonomy_slugs, $valid_taxonomy_slugs ) ); } /** * Returns taxonomy names that are enabled in the options * * * @param array $merge_taxonomy_slugs Optional array of taxonomy names that needs to be intersected * @return array */ public static function get_enabled_taxonomies( $intersect_taxonomy_slugs = null ) { $tag_group_taxonomies = get_option( 'tag_group_taxonomy', array('post_tag') ); $valid_taxonomy_slugs = self::get_public_taxonomies(); if ( empty( $intersect_taxonomy_slugs ) ) { return array_values( array_intersect( $tag_group_taxonomies, $valid_taxonomy_slugs ) ); } else { return array_values( array_intersect( $tag_group_taxonomies, $valid_taxonomy_slugs, $intersect_taxonomy_slugs ) ); } } /** * Returns taxonomy names that are enabled in the options for the metabox * * * @param array $merge_taxonomy_slugs Optional array of taxonomy names that needs to be intersected * @return array */ public static function get_taxonomies_for_metabox( $intersect_taxonomy_slugs = null ) { $tag_group_taxonomies = get_option( 'tag_group_taxonomy', array('post_tag') ); $tag_group_meta_box_taxonomies = get_option( 'tag_group_meta_box_taxonomy', array() ); $valid_taxonomy_slugs = self::get_public_taxonomies(); if ( empty( $intersect_taxonomy_slugs ) ) { return array_values( array_intersect( $tag_group_taxonomies, $valid_taxonomy_slugs, $tag_group_meta_box_taxonomies ) ); } else { return array_values( array_intersect( $tag_group_taxonomies, $valid_taxonomy_slugs, $tag_group_meta_box_taxonomies, $intersect_taxonomy_slugs ) ); } } /** * Returns taxonomy names that are registered with this WP site * * * @param void * @return array */ public static function get_public_taxonomies() { return get_taxonomies( array( 'public' => true ), 'names' ); } /** * Retrieves post types from taxonomies * * @param array|string $taxonomy_slugs * @return array */ static function post_types_from_taxonomies( $taxonomy_slugs = array() ) { if ( ! is_array( $taxonomy_slugs ) ) { $taxonomy_slugs = array( $taxonomy_slugs ); } asort( $taxonomy_slugs ); // avoid duplicate cache entries $key = md5( serialize( $taxonomy_slugs ) ); $transient_value = get_transient( 'tag_groups_post_types' ); if ( false === $transient_value || ! isset( $transient_value[ $key ] ) ) { $post_types = array(); foreach ( $taxonomy_slugs as $taxonomy ) { $post_type_a = array(); $taxonomy_o = get_taxonomy( $taxonomy ); /** * The return value of get_taxonomy can be false */ if ( ! empty( $taxonomy_o )) { $post_type_a = $taxonomy_o->object_type; } if ( ! empty( $post_type_a )) { foreach ( $post_type_a as $post_type ) { if ( ! in_array( $post_type, $post_types ) ) { $post_types[] = $post_type; } } } } if ( ! is_array( $transient_value ) ) { $transient_value = array(); } $transient_value[ $key ] = $post_types; // Limit lifetime, since base plugin does not have a function to manually clear the cache set_transient( 'tag_groups_post_types', $transient_value, 6 * HOUR_IN_SECONDS ); return $post_types; } else { return $transient_value[ $key ]; } } /** * Gets the taxonomy name for a given slug * * * @param string $taxonomy_slug * @return string name */ public static function get_name_from_slug( $taxonomy_slug ) { $taxonomy = get_taxonomy( $taxonomy_slug ); if ( is_object( $taxonomy ) && is_object( $taxonomy->labels ) ) { return $taxonomy->labels->name; } else { return $taxonomy_slug; } } /** * Wrapper for backwards compatibility * * * @param array $merge_taxonomy_slugs Optional array of taxonomy names that needs to be intersected * @return array */ public static function get_metabox( $intersect_taxonomy_slugs = null ) { return self::get_taxonomies_for_metabox( $intersect_taxonomy_slugs ); } /** * Returns the URL to a tag groups admin page * * * @param string $taxonomy * @return string */ public static function get_tag_group_admin_url( $taxonomy ) { $post_type = TagGroups_Base::get_first_element( self::post_types_from_taxonomies( $taxonomy ) ); if ( 'post' == $post_type ) { $rel_url = 'edit.php?page=tag-groups_' . $post_type; } else { $rel_url = 'edit.php?post_type=' . $post_type . '&page=tag-groups_' . $post_type; } return admin_url( $rel_url ); } } } PK�������!�LJ��LJ�� ��include/helpers/class.groups.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 1.8.0 * */ if ( ! class_exists('TagGroups_Groups') ) { class TagGroups_Groups { /** * array of all term_group values, including 0 * * @var array */ private $group_ids; /** * array of positions[term_group] * * @var array */ private $positions; /** * array of labels[term_group] * * @var array */ private $labels; /** * Constructor * * * @param int $term_group optional term_group * @return return type */ public function __construct() { $this->load(); if ( count( $this->group_ids ) == 0 ) { $this->add_not_assigned(); $this->save(); } return $this; } /** * Load data from database * * * @param int $term_group optional term_group * @return return type */ public function load() { /* * For historical reasons, term_groups and labels have been defined dependent of the position. * In future the way how it is saved in the database should be dependent on term_group. */ $this->group_ids = get_option( 'term_groups', array() ); if ( empty( $this->group_ids ) ) { $term_groups_position = get_option( 'tag_group_ids', array() ); // position -> id $labels_position = get_option( 'tag_group_labels', array() ); // position -> label $this->positions = array_flip( $term_groups_position ); $this->group_ids = array_keys( $this->positions ); $this->labels = array(); foreach ( $term_groups_position as $position => $id ) { $this->labels[ $id ] = $labels_position[ $position ]; } } else { $this->positions = get_option( 'term_group_positions', array() ); $this->labels = get_option( self::get_tag_group_label_option_name(), array() ); if ( empty( $this->labels ) ) { /** * This language has not yet been saved. We return the default language. */ $this->labels = get_option( 'term_group_labels', array() ); } elseif ( self::is_wpml_translated_language() ) { /** * Check for untranslated names */ $default_language_labels = get_option( 'term_group_labels', array() ); foreach ( $default_language_labels as $group_id => $default_language_label ) { if ( ! isset( $this->labels[ $group_id ] ) ) { $this->labels[ $group_id ] = $default_language_label; } } } // sanity checks // There should not be more elements for positions that IDs if ( count( $this->group_ids ) != count( $this->positions ) ) { $this->reindex_positions(); // recreate $this->group_ids from positions $this->group_ids = array_keys( $this->positions ); update_option( 'term_groups', $this->group_ids ); } // There should not be more elements for label that IDs if ( count( $this->group_ids ) < count( $this->labels ) ) { foreach ( $this->labels as $group_id => $label ) { if ( ! in_array( $group_id, $this->group_ids ) ) { unset( $this->labels[ $group_id ] ); } } update_option( 'term_group_labels', $this->labels ); $tag_group_group_languages = get_option( 'tag_group_group_languages', array() ); if ( isset( $tag_group_group_languages ) && is_array( $tag_group_group_languages ) ) { foreach ( $tag_group_group_languages as $language ) { $translated_labels = get_option( 'term_group_labels_' . $language ); if ( count( $this->group_ids ) < count( $translated_labels ) ) { foreach ( $translated_labels as $group_id => $label ) { if ( ! in_array( $group_id, $this->group_ids ) ) { unset( $translated_labels[ $group_id ] ); } } update_option( 'term_group_labels_' . $language, $translated_labels ); } } } } } return $this; } /** * checks and, if needed, initialize values for first use * * @param void * @return object $this */ public function add_not_assigned() { $this->group_ids[0] = 0; $this->labels[0] = __('not assigned', 'tag-groups'); $this->positions[0] = 0; return $this; } /** * Saves tag group-relevant information to the database * * * @param type var Description * @return return type */ public function save() { global $tag_groups_premium_fs_sdk; if ( $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) { $tag_group_role_edit_groups = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_groups', 'edit_pages' ) : 'edit_pages'; } else { $tag_group_role_edit_groups = 'edit_pages'; } if ( ! current_user_can( $tag_group_role_edit_groups ) ) { return $this; } update_option( 'term_groups', $this->group_ids ); update_option( 'term_group_positions', $this->positions ); update_option( self::get_tag_group_label_option_name(), $this->labels ); /** * If we save translated groups, make sure we have untranslated ones. If not, give them the translations. */ if ( self::is_wpml_translated_language() ) { $default_language_labels = get_option( 'term_group_labels', array() ); $changed = false; foreach ( $this->labels as $group_id => $group_label ) { if ( ! isset( $default_language_labels[ $group_id ] ) ) { $default_language_labels[ $group_id ] = $group_label; $changed = true; } } if ( $changed ) { update_option( 'term_group_labels', $default_language_labels ); } } do_action( 'term_group_saved' ); if ( class_exists( 'TagGroups_Premium_Post' ) && ( ! defined( 'TAG_GROUPS_DISABLE_CACHE_REBUILD' ) || TAG_GROUPS_DISABLE_CACHE_REBUILD ) ) { // schedule rebuild of cache wp_schedule_single_event( time() + 10, 'tag_groups_rebuild_post_terms' ); } return $this; } /** * returns the highest term_group in use * * @param void * @return int */ public function get_max_term_group() { if ( count( $this->group_ids ) == 0 ) { return 0; } else { return max( $this->group_ids ); } } /** * returns the highest position in use * * @param void * @return int */ public function get_max_position() { if ( count( $this->positions ) == 0 ) { return 0; } else { return max( $this->positions ); } } /** * returns the number of term groups_only * * * @param void * @return int */ public function get_number_of_term_groups() { return count( $this->group_ids ); } /** * adds a new group and saves it * * * @param int $position position of the new group * @param string $label label of the new group * @return int */ public function add_group( $tg_group ) { if ( intval( $tg_group->get_group_id() ) >= 0 && ! in_array( $tg_group->get_group_id(), $this->group_ids ) ) { array_push( $this->group_ids, $tg_group->get_group_id() ); $this->labels[ $tg_group->get_group_id() ] = $tg_group->get_label(); $this->positions[ $tg_group->get_group_id() ] = $tg_group->get_position(); } return $this; } /** * removes all terms from all groups * * * @param void * @return object $this */ public function unassign_all_terms() { $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $terms = get_terms( array( 'hide_empty' => false, 'taxonomy' => $enabled_taxonomies ) ); foreach ( $terms as $term ) { $term_o = new TagGroups_Term( $term ); $term_o->remove_all_groups()->save(); } return $this; } /** * getter for $group_ids * * @param void * @return array */ public function get_group_ids() { return $this->group_ids; } /** * setter for $group_ids * * @param array $group_ids * @return object $this */ public function set_group_ids( $group_ids ) { $this->group_ids = $group_ids; return $this; } /** * returns the labels for an array of ids, sorted by position * * @param array $group_ids * @return array */ public function get_labels_by_position( $group_ids ) { $result = array(); if ( ! is_array( $group_ids ) ) { $group_ids = array( $group_ids ); } foreach ( $group_ids as $group_id) { if ( ! empty( $this->labels[ $group_id ] ) && isset( $this->positions[ $group_id ] ) ) { $result[ $this->positions[ $group_id ] ] = $this->labels[ $group_id ]; } } ksort( $result ); return array_values( $result ); } /** * returns an array of group properties as values * * @param void * @return array */ public function get_info_of_all( $taxonomy = null, $hide_empty = false, $fields = null, $orderby = 'name', $order = 'ASC' ) { // dealing with NULL values if ( empty( $fields ) ) { $fields = 'ids'; } if ( empty( $taxonomy ) ) { $taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); } if ( ! isset( $hide_empty ) || empty( $hide_empty ) ) { $hide_empty = false; } $result = array(); foreach ( $this->group_ids as $term_group ) { if ( isset( $this->positions[ $term_group ] ) && isset( $this->labels[ $term_group ] ) ) { // allow unassigned $tg_group = new TagGroups_Group( $term_group ); $terms = $tg_group->get_group_terms( $taxonomy, $hide_empty, $fields, 0, $orderby, $order ); if ( ! is_array( $terms ) ) { $terms = array(); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Error retrieving terms in get_info().' ); } } $result[ $this->positions[ $term_group ] ] = array( 'term_group' => (int) $term_group, 'label' => $this->labels[ $term_group ], 'position' => (int) $this->positions[ $term_group ], 'terms' => $terms ); } } /** * The position should determine the order. */ ksort( $result ); return $result; } /** * returns all tag groups with the position as keys and an array of group properties as values * including unassigned * * @param void * @return array */ public function get_all_with_position_as_key() { $result = array(); foreach ( $this->group_ids as $group_id ) { if ( isset( $this->positions[ $group_id ] ) && isset( $this->labels[ $group_id ] ) ) { // allow unassigned $result[ $this->positions[ $group_id ] ] = array( 'term_group' => (int) $group_id, 'label' => $this->labels[ $group_id ], 'position' => (int) $this->positions[ $group_id ] ); } } /** * The position should determine the order. */ ksort( $result ); return $result; } /** * returns all tag groups with the term_group as keys and labels as values * sorted by position * * @param void * @return array */ public function get_all_term_group_label() { $result = array(); $positions_flipped = array_flip( $this->positions ); ksort( $positions_flipped ); // ksort doesn't like return values of functions foreach ( $positions_flipped as $term_group ) { $result[ $term_group ] = $this->labels[ $term_group ]; } return $result; } /** * returns all tag group ids * sorted by position * * @param void * @return array */ public function get_group_ids_by_position() { $result = array(); $position_flipped = array_flip( $this->positions ); ksort( $position_flipped ); foreach ( $position_flipped as $group_id ) { $result[] = $group_id; } return $result; } /** * returns all labels * sorted by position * * @param void * @return array */ public function get_all_labels_by_position() { $result = array(); $positions = $this->positions; asort( $positions ); $positions_keys = array_keys( $positions ); foreach ( $positions_keys as $term_group ) { $result[] = $this->labels[ $term_group ]; } return $result; } /** * getter for $labels * * @param void * @return array */ public function get_labels() { return $this->labels; } /** * setter for $labels * * @param array $labels * @return object $this */ public function set_labels( $labels ) { $this->labels = $labels; return $this; } /** * getter for $positions * * @param void * @return object */ public function get_positions() { return $this->positions; } /** * setter for $positions * * @param array $positions * @return object $this */ public function set_positions( $positions ) { $this->positions = $positions; return $this; } /** * Deletes all groups * * @param void * @return void */ public function reset_groups() { global $tag_groups_premium_fs_sdk; if ( $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) { $tag_group_role_edit_groups = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_groups', 'edit_pages' ) : 'edit_pages'; } else { $tag_group_role_edit_groups = 'edit_pages'; } if ( ! current_user_can( $tag_group_role_edit_groups ) ) { return false; } $this->group_ids = array(); $this->positions = array(); $this->labels = array(); $this->delete_labels_languages(); $this->unassign_all_terms(); $this->add_not_assigned(); $this->save(); return true; } /** * Deletes all labels for all languages * * * @param void * @return void */ public function delete_labels_languages() { delete_option( 'term_group_labels' ); $tag_group_group_languages = get_option( 'tag_group_group_languages', array() ); if ( isset( $tag_group_group_languages ) ) { foreach ( $tag_group_group_languages as $language ) { delete_option( 'term_group_labels_' . $language ); } } delete_option( 'tag_group_group_languages' ); } /** * Remove "holes" in position array * * * @param void * @return void */ public function reindex_positions() { $positions_flipped = array_flip( $this->positions ); // result: position => id ksort( $positions_flipped ); // re-index $positions_flipped = array_values( $positions_flipped ); $this->positions = array_flip( $positions_flipped ); return $this; } /** * Sorts the groups (positions) by alphabetical order * * * @param void * @return void */ public function sort( $order = 'up' ) { $group_ids = $this->group_ids; // remove unassigned unset( $group_ids[ 0 ] ); usort( $group_ids, array( $this, 'sort_by_label' ) ); if ( 'down' == $order ) { $group_ids = array_reverse( $group_ids ); } // add back unassigned array_unshift( $group_ids, 0 ); $this->positions = array_flip( $group_ids ); return $this; } /** * Sorts by group label * * * @param int $a * @param int $b * @return boolean */ private function sort_by_label( $a, $b ) { $labels = get_option( self::get_tag_group_label_option_name(), array() ); return strnatcmp( $labels[ $a ], $labels[ $b ] ); } /** * Check for WPML and use the correct option name * * @param void * @return string */ public static function get_tag_group_label_option_name() { if ( ! self::get_current_language() || ! self::is_wpml_translated_language() ) { return 'term_group_labels'; } if ( 'all' == self::get_current_language() ) { $language = (string) apply_filters( 'wpml_default_language', NULL ); } else { $language = (string) self::get_current_language(); } /** * Make sure we can delete this option during uninstallation */ $tag_group_group_languages = get_option( 'tag_group_group_languages', array() ); if ( ! in_array( $language, $tag_group_group_languages ) ) { $tag_group_group_languages[] = $language; update_option( 'tag_group_group_languages', $tag_group_group_languages ); } return 'term_group_labels_' . $language; } /** * Returns true if WPML is installed and we are not using the default language. * * @param void * @return boolean */ public static function is_wpml_translated_language() { $current_language = self::get_current_language(); if ( ! $current_language ) { return false; } $default_language = apply_filters( 'wpml_default_language', NULL ); // workaround for Polylang if ( empty( $default_language ) && function_exists( 'pll_default_language' ) ) { $default_language = pll_default_language(); } if ( $default_language === $current_language ) { return false; } return true; } /** * Gets the current language, considers Polylang * * @param void * @return string|boolean */ public static function get_current_language() { if ( defined( 'ICL_LANGUAGE_CODE' ) ) { return ICL_LANGUAGE_CODE; } if ( function_exists( 'pll_current_language' ) ) { $current_language = pll_current_language(); if ( ! $current_language ) { if ( isset( $_GET[ 'lang' ] ) ) { return sanitize_key( $_GET[ 'lang' ] ); } } return $current_language; } return false; } } } PK�������!�e^|4��|4��"��include/helpers/class.rest_api.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since 0.37.0 */ if ( ! class_exists('TagGroups_REST_API') ) { /** * Adds endpoints to the WordPress REST API */ class TagGroups_REST_API { public function __construct() {} /** * Register the REST API endpoints and schemata * * * @param void * @return void */ public static function register() { add_action( 'rest_api_init', function () { register_rest_route( 'tag-groups/v1', '/groups/(?P<id>\d+)', array( 'methods' => 'GET', 'callback' => array( 'TagGroups_REST_API', 'get_groups' ), 'args' => array( 'id' => array( 'validate_callback' => function( $param, $request, $key ) { return is_numeric( $param ); } ), ), 'schema' => array( 'TagGroups_REST_API', 'get_group_schema' ), ) ); } ); add_action( 'rest_api_init', function () { register_rest_route( 'tag-groups/v1', '/groups/', array( 'methods' => 'GET', 'callback' => array( 'TagGroups_REST_API', 'get_groups' ), 'schema' => array( 'TagGroups_REST_API', 'get_group_schema' ), ) ); } ); add_action( 'rest_api_init', function () { register_rest_route( 'tag-groups/v1', '/terms/(?P<id>\d+)', array( 'methods' => 'GET', 'callback' => array( 'TagGroups_REST_API', 'get_terms' ), 'args' => array( 'id' => array( 'validate_callback' => function( $param, $request, $key ) { return is_numeric( $param ); } ), ), 'schema' => array( 'TagGroups_REST_API', 'get_term_schema' ), ) ); } ); add_action( 'rest_api_init', function () { register_rest_route( 'tag-groups/v1', '/terms/', array( 'methods' => 'GET', 'callback' => array( 'TagGroups_REST_API', 'get_terms' ), 'schema' => array( 'TagGroups_REST_API', 'get_term_schema' ), ) ); } ); add_action( 'rest_api_init', function () { register_rest_route( 'tag-groups/v1', '/taxonomies/', array( 'methods' => 'GET', 'callback' => array( 'TagGroups_REST_API', 'get_taxonomies' ), 'schema' => array( 'TagGroups_REST_API', 'get_taxonomies_schema' ), ) ); } ); } /** * Get one ore more groups * * Returns array consisting of items: tag group ID => tag group label or string of tag group label, if id was provided * * Arguments: * taxonomy default: post_tag * hide_empty default: true * fields for example: ids, all, names; default: all * * * @param object $request * @return array|object */ public static function get_groups( WP_REST_Request $request ) { global $tag_group_groups; $id = $request->get_param( 'id' ); // don't sanitize here $taxonomy = sanitize_title( $request->get_param( 'taxonomy' ) ); $hide_empty = $request->get_param( 'hide_empty' ) ? true : false; $fields = sanitize_title( $request->get_param( 'fields' ) ); $orderby = sanitize_title( $request->get_param( 'orderby' ) ); $order = sanitize_title( $request->get_param( 'order' ) ); if ( isset( $id ) ) { $id = (int) $id; // particular group $tg_group = new TagGroups_Group( $id ); if ( ! $tg_group->exists() ) { return new WP_Error( 'no_group', 'Invalid group', array( 'status' => 404 ) ); } return $tg_group->get_info( $taxonomy, $hide_empty, $fields, $orderby, $order ); } $groups = $tag_group_groups->get_info_of_all( $taxonomy, $hide_empty, $fields, $orderby, $order ); return $groups; } /** * Get one ore more terms * * Arguments: * taxonomy default: post_tag * hide_empty default: true * * * @param object $request * @return array|object */ public static function get_terms( WP_REST_Request $request ) { global $tag_group_groups, $tag_group_premium_terms; $term_o = new TagGroups_Term(); $id = $request->get_param( 'id' ); // don't sanitize here if ( isset( $id ) ) { $id = (int) $id; $term_o = new TagGroups_Term( $id ); return array( 'id' => $id, 'name' => $term_o->get_name(), 'slug' => $term_o->get_slug(), 'taxonomy' => $term_o->get_taxonomy(), 'groups' => $term_o->get_groups(), ); } else { $orderby = sanitize_title( $request->get_param( 'orderby' ) ); if ( empty( $orderby ) ) { $orderby = 'name'; } $order = sanitize_title( $request->get_param( 'order' ) ); if ( empty( $order ) ) { $order = 'ASC'; } $taxonomy = sanitize_title( $request->get_param( 'taxonomy' ) ); if ( empty( $taxonomy ) ) { $taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); } elseif ( 'public' == strtolower( $taxonomy) ) { $taxonomy = array_values( get_taxonomies( array( 'public' => true ), 'names' ) ); } $hide_empty = $request->get_param( 'hide_empty' ) ? true : false; $short = $request->get_param( 'short' ) ? true : false; $args = array( 'taxonomy' => $taxonomy, 'hide_empty' => $hide_empty, 'orderby' => $orderby, 'order' => $order ); $group = $request->get_param( 'group' ); if ( isset( $group ) ) { $group = (int) $group; $tg_group = new TagGroups_Group( $group ); if ( ! $tg_group->exists() ) { return new WP_Error( 'no_group', 'Invalid group', array( 'status' => 404 ) ); } $group_terms = $tg_group->get_group_terms( $taxonomy, $hide_empty, 'ids' ); if ( false === $group_terms ) { return new WP_Error( 'no_terms', 'Invalid terms', array( 'status' => 404 ) ); } $args[ 'include' ] = $group_terms; } $terms = get_terms( $args ); if ( class_exists( 'TagGroups_Premium_Term' ) ) { $post_counts = $tag_group_premium_terms->get_post_counts(); } $result = array(); foreach ( $terms as $term ) { if ( is_object( $term ) ) { $term_o = new TagGroups_Term( $term ); $info = array( 'id' => $term->term_id, 'name' => html_entity_decode( $term->name ), 'slug' => $term->slug, 'taxonomy' => $term->taxonomy, 'description' => $term->description, ); if ( ! $short ) { $info['groups'] = $term_o->get_groups(); if ( isset( $post_counts ) && isset( $post_counts[ $term->term_id ] ) ) { $info[ 'post_count' ] = $post_counts[ $term->term_id ]; } } $result[] = $info; } } return $result; } } /** * Get one ore more terms * * Arguments: * taxonomy default: post_tag * hide_empty default: true * * * @param object $request * @return array|object */ public static function get_taxonomies( WP_REST_Request $request ) { $type = $request->get_param( 'type' ); $result = array(); switch ( $type ) { case 'metabox': $taxonomy_slugs = TagGroups_Taxonomy::get_taxonomies_for_metabox(); break; case 'enabled': default: $taxonomy_slugs = TagGroups_Taxonomy::get_enabled_taxonomies(); break; } foreach ( $taxonomy_slugs as $taxonomy_slug ) { $result[] = array( 'slug' => $taxonomy_slug, 'name' => TagGroups_Taxonomy::get_name_from_slug( $taxonomy_slug ) ); } return $result; } /** * */ public static function get_group_schema() { $schema = array( // This tells the spec of JSON Schema we are using which is draft 4. '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'group', 'type' => 'object', 'properties' => array( 'term_group' => array( 'type' => 'integer', 'label' => esc_html__( 'Object ID.', 'tag-groups' ), 'readonly' => true, ), 'label' => array( 'description' => esc_html__( 'The object name.', 'tag-groups' ), 'type' => 'string', ), 'position' => array( 'description' => esc_html__( 'The position of the object in lists, menus and tag clouds.', 'tag-groups' ), 'type' => 'integer', ), 'terms' => array( 'description' => esc_html__( 'The terms that are assigned to this group.', 'tag-groups' ), 'type' => 'array', ), ), ); return $schema; } /** * */ public static function get_term_schema() { $schema = array( // This tells the spec of JSON Schema we are using which is draft 4. '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'term', 'type' => 'object', 'properties' => array( 'id' => array( 'type' => 'integer', 'label' => esc_html__( 'Object ID.', 'tag-groups' ), 'readonly' => true, ), 'name' => array( 'description' => esc_html__( 'The object name.', 'tag-groups' ), 'type' => 'string', ), 'slug' => array( 'description' => esc_html__( 'The term slug.', 'tag-groups' ), 'type' => 'string', ), 'taxonomy' => array( 'description' => esc_html__( 'The term taxonomy.', 'tag-groups' ), 'type' => 'string', ), 'description' => array( 'description' => esc_html__( 'The term description.', 'tag-groups' ), 'type' => 'string', ), 'groups' => array( 'description' => esc_html__( 'The groups that this term is assigned to.', 'tag-groups' ), 'type' => 'array', ), 'post_count' => array( 'description' => esc_html__( 'The post count per group (published posts).', 'tag-groups' ), 'type' => 'array', ), ), ); return $schema; } /** * */ public static function get_taxonomy_schema() { $schema = array( // This tells the spec of JSON Schema we are using which is draft 4. '$schema' => 'http://json-schema.org/draft-04/schema#', 'title' => 'taxonomy', 'type' => 'object', 'properties' => array( 'name' => array( 'description' => esc_html__( 'The taxonomy name.', 'tag-groups' ), 'type' => 'string', ), ), ); return $schema; } } } PK�������!�5����&��include/helpers/class.fs_sdk_kernl.phpnu�[��������<?php /** * Tag Groups Premium * * @package Tag Groups Premium * @author Christoph Amthor * @copyright 2019 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license see official vendor website * @since 1.19.0 * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ if ( !class_exists( 'FS_SDK_Kernl' ) ) { /** * Dummy replacement for Freemius SDK - for use when plugin is distributed through legacy channels * */ class FS_SDK_Kernl { /** * */ public function can_use_premium_code() { return true; } /** * Return true so that we don't run accidentally PluginUpdateChecker when not on Kernl */ public function is_free_plan() { return false; } /** * Activate all plans */ public function is_plan( $plan = '', $exact = false ) { return true; } /** * */ public function is_paying() { return true; } /** * Activate all plans */ public function is_plan_or_trial( $plan = '', $exact = false ) { return true; } /** * */ public function is_premium() { return true; } /** * */ public function add_filter( $filter_id, $function ) { } } }PK�������!�d* ��* ����include/helpers/class.view.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2019 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * @since */ if ( ! class_exists( 'TagGroups_View' ) ) { /** * General handling of views * * @since */ class TagGroups_View { /** * full path of the file providing the view * * @var string * @since */ private $view; /** * array of variables to be made available to the view (key is the variable name) * * @var array * @since */ private $vars; /** * Constructor: checks if view exists * * @param string $view identifier of the view * @return object $this * @since */ public function __construct( $view ) { $path = TAG_GROUPS_PLUGIN_ABSOLUTE_PATH . "/views/" . $view . ".view.php"; if ( file_exists( $path ) ) { $this->view = $path; } else { ChattyMango_Error::init()->dump_and_die( 'tag groups', 'View ' . $path . ' not found' ); } $this->vars = array(); return $this; } /** * renders the view * * @param void * @return void */ public function render() { extract( $this->vars, EXTR_SKIP ); ob_start(); include $this->view; $html = ob_get_clean(); echo $this->do_filter( $html ); } /** * returns the view * * @param void * @return string $html */ public function return_html() { extract( $this->vars, EXTR_SKIP ); ob_start(); include $this->view; $html = ob_get_clean(); return $this->do_filter( $html ); } /** * Option to customize the output * * @param string $html * @return string */ private function do_filter( $html ) { $view_slug = str_replace( '/', '-', $this->view ); return apply_filters( 'tag_groups_view_' . $view_slug, $html ); } /** * General setter for $this->vars, accepting an array of key and values or one pair of key and value * * * @param array|string $variable_name_or_array * @param mixed@null $data * @return object $this */ public function set( $variable_name_or_array, $data = null ) { if ( is_string( $variable_name_or_array ) ) { $this->set_view_var( $variable_name_or_array, $data ); } else if ( is_array( $variable_name_or_array ) ) { foreach ( $variable_name_or_array as $key => $value ) { $this->set_view_var( $key, $value ); } } return $this; } /** * Setter for $this->vars * * @param string $key * @param mixed $value * @return void */ private function set_view_var( $key, $value ) { $this->vars[ $key ] = $value; } } } PK�������!�Y H �� ����include/helpers/class.base.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Base') ) { /** * */ class TagGroups_Base { /** * Returns the first element of an array without changing the original array * * @param array $array * @return mixed */ public static function get_first_element( $array = array() ) { if ( ! is_array( $array ) ) { return; } return reset( $array ); } /** * sanitizes many classes separated by space * * @param string $classes * @return string */ public static function sanitize_html_classes( $classes ){ // replace multiple spaces by one $classes = preg_replace( '!\s+!', ' ', $classes ); // turn into array $classes = explode( ' ', $classes ); if( ! empty( $classes ) ) { $classes = array_map( 'sanitize_html_class', $classes ); } // turn back $classes = implode( ' ', $classes ); return $classes; } /** * Change the time until the first trial encouragement appears * * @param int $sec Default is 24 hours. * @return int * @since 1.19.1 */ public static function change_time_show_first_trial( $sec ) { // 7 days in sec. return 7 * 24 * 60 * 60; } /** * Change the time between trial encouragements * * @param int $sec Default is 30 days. * @return int * @since 1.19.1 */ public static function change_time_reshow_trial( $sec ) { // 60 days in sec. return 60 * 24 * 60 * 60; } /** * Show Freemius admin notice of trial promotion only in Tag Groups own settings or Tag Groups Admin page * "page" parameter starts with tag-groups-settings or is tag-groups_{post_type} * * @param mixed $show * @param array $msg * @return boolean * @since 1.19.2 */ public static function change_show_admin_notice( $show, $msg ) { if ( 'trial_promotion' == $msg['id'] && ( empty( $_GET['page'] ) || strpos( $_GET['page'], 'tag-groups' ) !== 0 ) ) { // Don't show the trial promotional admin notice. return false; } return true; } /** * Clear the cache of various plugins * * @param void * @return void */ public static function clear_cache() { if ( function_exists( 'flush_pgcache' ) ) { flush_pgcache; } if ( function_exists( 'flush_minify' ) ) { flush_minify; } if ( function_exists( 'wp_cache_clear_cache' ) ) { wp_cache_clear_cache(); } } } // class } PK�������!�}8��}8��#��include/helpers/class.shortcode.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Shortcode') ) { class TagGroups_Shortcode { /* * Register the shortcodes with WordPress */ static function register() { /** * Tabbed tag cloud */ add_shortcode( 'tag_groups_cloud', array( 'TagGroups_Shortcode_Tabs', 'tag_groups_cloud' ) ); if ( function_exists( 'register_block_type' ) ) { register_block_type( 'chatty-mango/tag-groups-cloud-tabs', array( 'render_callback' => array( 'TagGroups_Shortcode_Tabs', 'tag_groups_cloud' ), ) ); } /** * Accordion tag cloud */ add_shortcode( 'tag_groups_accordion', array( 'TagGroups_Shortcode_Accordion', 'tag_groups_accordion' ) ); if ( function_exists( 'register_block_type' ) ) { register_block_type( 'chatty-mango/tag-groups-cloud-accordion', array( 'render_callback' => array( 'TagGroups_Shortcode_Accordion', 'tag_groups_accordion' ) , ) ); } /** * Tabbed tag cloud with first letters as tabs */ add_shortcode( 'tag_groups_alphabet_tabs', array( 'TagGroups_Shortcode_Alphabet_Tabs', 'tag_groups_alphabet_tabs' ) ); if ( function_exists( 'register_block_type' ) ) { register_block_type( 'chatty-mango/tag-groups-alphabet-tabs', array( 'render_callback' => array( 'TagGroups_Shortcode_Alphabet_Tabs', 'tag_groups_alphabet_tabs' ), ) ); } /** * Group info */ add_shortcode( 'tag_groups_info', array( 'TagGroups_Shortcode_Info', 'tag_groups_info' ) ); } /** * Makes sure that shortcodes work in text widgets. */ static function widget_hook() { $tag_group_shortcode_widget = get_option( 'tag_group_shortcode_widget', 0 ); if ( $tag_group_shortcode_widget ) { add_filter( 'widget_text', 'do_shortcode' ); } } /** * Calculates the font size for the cloud tag for a particular tag ($min, $max and $size with same unit, e.g. pt.) * * @param int $count * @param int $min * @param int $max * @param int $smallest * @param int $largest * @return int */ static function font_size( $count, $min, $max, $smallest, $largest ) { if ( $max > $min ) { $size = round( ( $count - $min ) * ( $largest - $smallest ) / ( $max - $min ) + $smallest ); } else { $size = round( $smallest ); } return $size; } /** * A piece of script for the tabs to work, including options, for each individual cloud * * @param type $id * @param type $option_mouseover * @param type $option_collapsible * @return string */ static function custom_js_tabs( $id = null, $option_mouseover = null, $option_collapsible = null, $option_active = null ) { $options = array(); if ( isset( $option_mouseover ) ) { if ( $option_mouseover ) { $options[] = 'event: "mouseover"'; } } else { if ( get_option( 'tag_group_mouseover', '' ) ) { $options[] = 'event: "mouseover"'; } } if ( isset( $option_collapsible ) ) { if ( $option_collapsible ) { $options[] = 'collapsible: true'; } } else { if ( get_option( 'tag_group_collapsible', '' ) ) { $options[] = 'collapsible: true'; } } if ( isset( $option_active ) ) { if ( $option_active ) { $options[] = 'active: true'; } else { $options[] = 'active: false'; } } if ( empty( $options ) ) { $options_serialized = ''; } else { $options_serialized = "{\n" . implode( ",\n", $options ) . "\n}"; } if ( empty( $id ) ) { $id = 'tag-groups-cloud-tabs'; } else { $id = TagGroups_Base::sanitize_html_classes( $id ); } $view = new TagGroups_View( 'shortcodes/js_tabs_snippet' ); $view->set( array( 'id' => $id, 'options_serialized' => $options_serialized )); return $view->return_html(); } /** * A piece of script for the tabs to work, including options, for each individual cloud * * @param type $id * @param type $option_mouseover * @param type $option_collapsible * @return string */ static function custom_js_accordion( $id = null, $option_mouseover = null, $option_collapsible = null, $option_active = null, $heightstyle = null ) { $options = array(); if ( isset( $option_mouseover ) ) { if ( $option_mouseover ) { $options[] = 'event: "mouseover"'; } } else { if ( get_option( 'tag_group_mouseover', '' ) ) { $options[] = 'event: "mouseover"'; } } if ( isset( $option_collapsible ) ) { if ( $option_collapsible ) { $options[] = 'collapsible: true'; } } else { if ( get_option( 'tag_group_collapsible', '' ) ) { $options[] = 'collapsible: true'; } } if ( ! empty( $heightstyle ) ) { $options[] = 'heightStyle: "' . sanitize_title( $heightstyle ) . '"'; } if ( isset( $option_active ) ) { if ( $option_active ) { $options[] = 'active: true'; } else { $options[] = 'active: false'; } } if ( empty( $options ) ) { $options_serialized = ''; } else { $options_serialized = "{\n" . implode( ",\n", $options ) . "\n}"; } if ( !isset( $id ) ) { $id = 'tag-groups-cloud-accordion'; } else { $id = TagGroups_Base::sanitize_html_classes( $id ); } $view = new TagGroups_View( 'shortcodes/js_accordion_snippet' ); $view->set( array( 'id' => $id, 'options_serialized' => $options_serialized )); return $view->return_html(); } /* * find minimum and maximum of quantity of posts for each tag * * @param * @return array $min_max */ static function determine_min_max( $tags, $amount, $tag_group_ids, $include_tags_post_id_groups = null, $data = null, $post_counts = null ) { $min_max = array(); $count_amount = array(); foreach ( $tag_group_ids as $tag_group_id ) { $count_amount[ $tag_group_id ] = 0; $min_max[ $tag_group_id ]['min'] = 0; $min_max[ $tag_group_id ]['max'] = 0; } if ( empty( $tags ) || ! is_array( $tags ) ) { return $min_max; } foreach ( $tags as $tag ) { $tag_count_per_group = array(); $tag_count = 0; $term_o = new TagGroups_Term( $tag ); if ( $term_o->is_in_group( $tag_group_ids ) ) { // check if tag has posts for a particular group if ( ! empty( $data ) && ! empty( $post_counts ) ) { foreach ( $tag_group_ids as $tag_group_id ) { if ( isset( $post_counts[ $tag->term_id ][ $tag_group_id ] ) ) { $tag_count_per_group[ $tag_group_id ] = $post_counts[ $tag->term_id ][ $tag_group_id ]; $tag_count += $post_counts[ $tag->term_id ][ $tag_group_id ]; } else { $tag_count_per_group[ $tag_group_id ] = 0; } } } else { $tag_count = $tag->count; } if ( $tag_count > 0 ) { /** * Use only groups that are in the list */ $term_groups = array_intersect( $term_o->get_groups(), $tag_group_ids ); foreach ( $term_groups as $term_group ) { if ( isset( $tag_count_per_group[ $term_group ] ) ) { $tag_count_this_group = $tag_count_per_group[ $term_group ]; } else { $tag_count_this_group = $tag_count; } if ( 0 == $amount || $count_amount[ $term_group ] < $amount ) { if ( empty( $include_tags_post_id_groups ) || in_array( $tag->term_id, $include_tags_post_id_groups[ $term_group ] ) ) { if ( isset( $min_max[ $term_group ]['max'] ) && $tag_count_this_group > $min_max[ $term_group ]['max'] ) { $min_max[ $term_group ]['max'] = $tag_count_this_group; } if ( isset( $min_max[ $term_group ]['min'] ) && ( $tag_count_this_group < $min_max[ $term_group ]['min'] || 0 == $min_max[ $term_group ]['min'] ) ) { $min_max[ $term_group ]['min'] = $tag_count_this_group; } $count_amount[ $term_group ]++; } } } } } } return $min_max; } /** * Helper for natural sorting of names * * Inspired by _wp_object_name_sort_cb * * @param array $terms * @param string $order asc or desc * @return array */ static function natural_sorting( $terms, $order ) { $factor = ( 'desc' == strtolower( $order ) ) ? -1 : 1; // "use" requires PHP 5.3+ uasort( $terms, function( $a, $b ) use ( $factor ) { return $factor * strnatcasecmp( $a->name, $b->name ); }); return $terms; } /** * Helper for (pseudo-)random sorting * * * @param array $terms * @return array */ static function random_sorting( $terms ) { uasort( $terms, function( $a, $b ) { return 2 * mt_rand( 0, 1 ) - 1; }); return $terms; } /** * Adds all IDs of groups that provide tags for a given post * * * @param int $post_id * @param array $taxonomies * @param array $include_array * @return array */ static function add_groups_of_post( $post_id, $taxonomies, $include_array ) { $post_id_terms = array(); /* * get all tags of this post */ foreach ( $taxonomies as $taxonomy_item ) { $terms = get_the_terms( (int) $post_id, $taxonomy_item ); if ( ! empty( $terms ) && is_array( $terms ) ) { $post_id_terms = array_merge( $post_id_terms, $terms ); } } /* * get all involved groups, append them to $include */ if ( $post_id_terms ) { foreach ( $post_id_terms as $term ) { $term_o = new TagGroups_Term( $term ); if ( ! $term_o->is_in_group( $include_array ) ) { $include_array = array_merge( $include_array, $term_o->get_groups() ); } } } return $include_array; } /** * Adds the tags of a particular post to the tags of a tag cloud * * * @param int $post_id * @param array $taxonomies * @param array $posttags * @param string $assigned_class * @return array */ static function add_tags_of_post( $post_id, $taxonomies, $posttags, $assigned_class ) { $post_id_terms = array(); $assigned_terms = array(); $include_tags_post_id_groups = array(); /* * we have a particular post ID * get all tags of this post */ foreach ( $taxonomies as $taxonomy_item ) { $terms = get_the_terms( (int) $post_id, $taxonomy_item ); /* * merging the results of selected taxonomies */ if ( ! empty( $terms ) && is_array( $terms ) ) { $post_id_terms = array_merge( $post_id_terms, $terms ); } } /* * clean all others from $posttags */ foreach ( $posttags as $key => $tag ) { $found = false; foreach ( $post_id_terms as $id_tag ) { if ( $tag->term_id == $id_tag->term_id ) { $found = true; break; } } if ( ! empty( $assigned_class ) ) { /* * Keep all terms but mark for different styling */ if ( $found ) { $assigned_terms[ $tag->term_id ] = true; } } else { /* * Remove unused terms. */ if ( ! $found ) { unset( $posttags[ $key ] ); } } } /** * get all involved groups */ if ( class_exists( 'TagGroups_Premium_Post' ) ) { $post_o = new TagGroups_Premium_Post( $post_id ); $terms_by_group_tmp = $post_o->get_terms_by_group(); foreach ( $terms_by_group_tmp as $key => $value ) { if ( ! isset( $include_tags_post_id_groups[ $key ] ) ) { $include_tags_post_id_groups[ $key ] = array(); } $include_tags_post_id_groups[ $key ] = array_merge( $include_tags_post_id_groups[ $key ], $value ); } } return array( 'assigned_terms' => $assigned_terms, 'posttags' => $posttags, 'include_tags_post_id_groups' => $include_tags_post_id_groups ); } /** * Sorts the tags array according to the post count of a particular group * * @since 1.21.3 * @param array $posttags * @param int $group_id * @param string $order * @return return type */ public static function sort_within_groups( $posttags, $group_id, $post_counts, $order = 'asc' ) { uasort( $posttags, function( $a, $b ) use ( $post_counts, $group_id, $order ) { if ( ! isset( $post_counts[ $a->term_id ][ $group_id ] ) ) { $post_counts[ $a->term_id ][ $group_id ] = 0; } if ( ! isset( $post_counts[ $b->term_id ][ $group_id ] ) ) { $post_counts[ $b->term_id ][ $group_id ] = 0; } if ( $post_counts[ $a->term_id ][ $group_id ] == $post_counts[ $b->term_id ][ $group_id ] ) { return 0; } if ( 'asc' == strtolower( $order ) ) { return ( $post_counts[ $a->term_id ][ $group_id ] > $post_counts[ $b->term_id ][ $group_id ] ) ? 1 : -1; } else { return ( $post_counts[ $a->term_id ][ $group_id ] > $post_counts[ $b->term_id ][ $group_id ] ) ? -1 : 1; } }); return $posttags; } } // class } PK�������!�K ������include/helpers/class.error.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2019 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists( 'ChattyMango_Error' ) ) { /** * Error processing * */ class ChattyMango_Error { /** * binary values for bitmasks */ const INFO = 1; const WARNING = 2; const ERROR = 4; private $reporting_level = ChattyMango_Error::INFO; public static function init() { return new ChattyMango_Error(); } /** * setter for $this->reporting_level * * @param integer $level * @return object $this */ public function set_reporting_level( $reporting_level ) { $this->reporting_level = $reporting_level; return $this; } /** * getter for $this->reporting_level * * @param void * @return integer */ public function get_reporting_level() { return $this->reporting_level; } /** * Dumps a message to the error log or on the screen * * @param string $source * @param mixed $message * @param boolean $add_trace * @param integer $severity * @return boolean */ public function dump( $source = '', $message = '', $add_trace = false, $severity = ChattyMango_Error::INFO ) { if ( $severity < $this->reporting_level ) { return false; } if ( defined( 'WP_DEBUG' ) && WP_DEBUG && ! wp_doing_ajax() ) { if ( ! empty( $source ) ) { echo '[' . $source . ']' . "<br/>\n"; } echo '<pre>'; if ( is_string( $message ) ) { echo $message; } else { var_dump( $message ); } echo '</pre>'; if ( $add_trace ) { echo 'backtrace'; echo '<pre>'; echo nl2br( self::get_backtrace() ); echo '</pre>'; } echo '</pre>'; return true; } else { return $this->log( $source, $message, $add_trace, $severity ); } } /** * Dumps a message to the error log or on the screen * * @param string $source * @param mixed $message * @param boolean $add_trace * @param integer $severity * @return boolean */ public function dump_and_die( $source = '', $message = '', $add_trace = false, $severity = ChattyMango_Error::INFO ) { $this->dump( $source, $message, $add_trace, $severity ); die(); } /** * Logs a message do debug.log * * @param string $source * @param mixed $message * @param boolean $add_trace * @param integer $severity * @return boolean */ public function log( $source = '', $message = '', $add_trace = false, $severity = ChattyMango_Error::INFO ) { if ( $severity < $this->reporting_level ) { return false; } $log = ''; if ( ! defined( 'WP_DEBUG' ) || ! WP_DEBUG ) { return false; } if ( ! empty( $source ) ) { $source = '[' . $source . '] '; } if ( is_string( $message ) ) { $log .= $source . $message; } else { ob_start(); var_dump( $message ); $caught_dump = ob_get_clean(); $log .= $source . $caught_dump; } if ( $add_trace ) { $log .= "\nbacktrace:\n" . self::get_backtrace(); } error_log( $log ); return true; } /** * Creates a HTML presentation of the backtrace * * based on http://php.net/manual/en/function.debug-backtrace.php#112238 * * @param void * @return string */ public function get_backtrace() { $path = ABSPATH; //get_home_path(); $e = new Exception(); $trace = explode( "\n", $e->getTraceAsString() ); // reverse array to make steps line up chronologically $trace = array_reverse($trace); array_shift( $trace ); // remove {main} array_pop( $trace ); // remove call to this method $length = count( $trace ); $result = array(); for ( $i = 0; $i < $length; $i++ ) { if ( strpos( $trace[$i], 'ChattyMango_Error::' ) !== false ) { continue; } // remove home path $output = str_replace( $path, '', substr( $trace[$i], strpos( $trace[$i], ' ' ) ) ); $result[] = ($i + 1) . ')' . $output; } return "\t" . implode( "\n\t", $result ); } } } PK�������!�NW!��!����include/helpers/class.feed.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ /* Initial code from: https://bavotasan.com/2010/display-rss-feed-with-php/ ##################### # Typical workflow: # ##################### $rss = new TagGroups_Feed(); $rss->debug(false); $rss->url( 'https://...' ); $cache = $rss->cache_get(); if ($cache !== false) { echo $cache; } else { echo $rss->load()->parse()->render(); } */ if ( ! class_exists('TagGroups_Feed') ) { class TagGroups_Feed { private $rss; private $url; private $posts_url; private $feed = array(); private $cache; private $debug = false; private $limit = 5; public $expired = false; /** * instantiation of DOMDocument and ChattyMango_Cache * * @param void * @return void */ public function __construct() { // experimental solution for "DOMDocument::load(): I/O warning : failed to load external entity" server errors libxml_disable_entity_loader( false ); $this->rss = new DOMDocument(); if ( class_exists( 'ChattyMango_Cache' ) ) { $this->cache = new ChattyMango_Cache(); $this->cache ->type( get_option( 'tag_group_object_cache', ChattyMango_Cache::WP_OPTIONS ) ) // ->path( WP_CONTENT_DIR . '/chatty-mango/cache/' ) ->lifetime( 60 * 60 * 6 ) ->serve_old_cache( true ); } } /** * Turns debugging on. * * @param void * @return object $this */ public function debug( $debug = true ) { $this->debug = $debug; return $this; } /** * Sets length of description * * @param int $limit * @return object $this */ public function limit( $length ) { $this->limit = $length; return $this; } /** * sets the URL where we can find the feed * * @param string $url * @return object $this */ public function url( $url ) { $this->url = $url; if ( isset( $this->cache ) ) { $this->cache->key( $url ); } return $this; } /** * sets the URL where we can find the posts * * @param string $posts_url * @return object $this */ public function posts_url( $posts_url ) { $this->posts_url = $posts_url; return $this; } /** * tries to read the rendered feed content from the cache, returns false if not possible * * @param void * @return bool|string */ public function cache_get() { if ( isset( $this->cache ) ) { $data = $this->cache->get(); $this->expired = $this->cache->expired; return $data; } else { return false; } } /** * saves rendered content to the cache * * @param string $data * @return bool success? */ private function cache_set( $data ) { if ( isset( $this->cache ) ) { return $this->cache->set( $data ); } else { return false; } } /** * purges data (of this feed) from the cache * * @param void * @return object $this */ public function cache_purge() { if ( isset( $this->cache ) ) { return $this->cache->purge(); } else { return false; } } /** * loads the content from the feed * * @param string $url * @return object $this */ public function load() { $this->rss->load( $this->url ); return $this; } /** * parses the feed data to retrieve items and relevant fields * * @param void * @return object $this */ public function parse() { foreach ( $this->rss->getElementsByTagName('item') as $node ) { $item = array ( 'title' => $node->getElementsByTagName('title')->item(0)->nodeValue, 'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue, 'link' => $node->getElementsByTagName('link')->item(0)->nodeValue, 'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue, ); // multiple categories and tags $cats = $node->getElementsByTagName('category'); $item['categories'] = array(); for ( $i = 0; $i < $cats->length; $i++ ) { $item['categories'][] = $cats->item($i)->nodeValue; } array_push( $this->feed, $item ); } return $this; } /** * Renders the feed to HTML * * @param int $limit maximum number of feed items * @param bool $return true: return output as string, false: echo output * @return string */ public function render( $limit = 5, $return = true ) { $html = ''; for( $x = 0; $x < $limit; $x++ ) { if ( isset( $this->feed[$x] ) ) { $title = str_replace(' & ', ' &amp; ', $this->feed[$x]['title']); $link = $this->feed[$x]['link']; $description = $this->truncate_string_at_word( $this->feed[$x]['desc'], $this->limit ); $date = date('d F Y', strtotime($this->feed[$x]['date'])); $html .= '<tr><th class="check-column" scope="row" style="padding:30px 10px 10px;"><em>'.$date.'</em> <p><small><b>' . implode( $this->feed[$x]['categories'], ', ' ) . '</b></small></p> </th> <td style="padding:10px 10px 10px;"><h3><a href="'.$link.'" title="'.$title.'" target="_blank">'.$title.'</a></h3>' . '<p>'.$description.'</p></td></tr>'; } } if ( !empty( $html ) ) { $this->cache_set( $html ); } else { /* * Fallback: Ask user to go directly to the posts. */ $html = '<tr><td colspan=2 style="text-align:center;">' . sprintf( __( 'Please visit <a %s>%s</a>.', 'tag-groups' ), ' href="' . $this->posts_url . '" target="_blank" ', $this->posts_url ) . '</td></tr>'; if ( $this->debug ) { error_log( 'Feed is empty: ' . $this->url ); } } if ( $return ) { return $html; } else { echo $html; } } /** * * * modified from https://wp-mix.com/php-truncate-text-word/ */ private function truncate_string_at_word( $string, $limit, $break = ". ", $pad = " ..." ) { if (mb_strlen($string) <= $limit) return $string; if (false !== ($max = mb_strpos($string, $break, $limit))) { if ($max < mb_strlen($string) - 1) { $string = mb_substr($string, 0, $max) . $pad; } } return $string; } } // class } PK�������!�^5��5����include/helpers/class.cache.phpnu�[��������<?php /** * Chatty Mango Cache * * @package Chatty Mango Cache * @author Christoph Amthor, https://chattymango.com * @copyright 2017 Christoph Amthor * @license GPL-2.0+ * @version 1.2.4 * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ if ( ! class_exists('ChattyMango_Cache') ) { class ChattyMango_Cache { const VERSION = "1.2.4"; // options where to save the data (preparations for future development) const OFF = 0; const WP_OPTIONS = 1; // WordPress option framework const DATABASE = 2; const FILE = 3; const OTHER = 9; private $key; // Identifier for cache entry. // Adjust the default type in future version according to best available option: private $type = 1; // Location where to save the cache. private $lifetime = 21600; // Cache lifetime in seconds; default 6 hours private $serve_old_cache = false; // If cache is outdated, still serve old cache before purging? private $path; // absolute path where to store cache files, if $type == ChattyMango_Cache::FILE public $error = 0; // last error /** * 0: no error * 1: dependencies not met * 2: path not available * 3: path not writable * 4: unknown type * 5: error reading file * 6: error writing file * 7: bad key */ public $expired = false; // true if the requested cache is expired public function __construct() {} /** * @deprecated since 0.32, left for backwards-compatibility * * @var void * @return opject $this */ static function init() { $instance = new ChattyMango_Cache(); return $instance; } /** * get the version * * @var void * @return string */ static function version() { return VERSION; } /** * Sets the key to identify the cache * * @param mixed $key * @return object $this */ public function key( $key ) { if ( empty( $key ) ) { $this->error = 7; $key = ''; } if ( ! is_string( $key ) ) { $key = serialize( $key ); } $this->key = md5( $key ); return $this; } /** * Sets the type of the cache * * @param int $type * @return object $this */ public function type( $type = ChattyMango_Cache::WP_OPTIONS ) { // check if dpendencies are met if ( ChattyMango_Cache::WP_OPTIONS == $type && !function_exists( 'get_option' ) ) { $type = 0; $this->error = 1; } $this->type = $type; return $this; } /** * Sets the (absolute) path to the cache files * * @param string $path Defaults to a cache directory under the current directory. * @return object $this */ public function path( $path = './cache/' ) { // add a trailing slash $path .= ( substr( $path, -1 ) == '/' ? '' : '/' ); if ( ! is_dir( $path ) ) { // try to create the path // permissions: all for owner, read + write for group, nothing for everybody else if ( mkdir( $path, 0760, true ) ) { $this->path = $path; } else { $this->error = 2; $this->type = 0; } } elseif ( !is_writable( $path ) ) { $this->error = 3; $this->type = 0; } else { $this->path = $path; } return $this; } /** * Sets whether to serve invalidated cache before purging it * * @param bool $yes * @return object $this */ public function serve_old_cache( $yes = false ) { $this->serve_old_cache = $yes; return $this; } /** * Sets the lifetime of the cache * * @param int $seconds Cache invalidated this time after being set. * @return object $this */ public function lifetime( $seconds ) { $this->lifetime = $seconds; return $this; } /** * Getter for the data * * @return mixed */ public function get() { switch ( $this->type ) { case ChattyMango_Cache::WP_OPTIONS: return $this->get_from_wp_options(); break; case ChattyMango_Cache::FILE: return $this->get_from_files(); break; case ChattyMango_Cache::OTHER: return wp_cache_get( $this->key ); break; default; $this->error = 4; return false; break; } } /** * Setter for the data * * @param mixed $data * @return bool success? */ public function set( $data = null ) { switch ( $this->type ) { case ChattyMango_Cache::WP_OPTIONS: return $this->set_to_wp_options( $data ); break; case ChattyMango_Cache::FILE: return $this->set_to_files( $data ); break; case ChattyMango_Cache::OTHER: return wp_cache_set( $this->key, $data, $this->lifetime ); break; default; $this->error = 4; return false; break; } } /** * Purge all overdue entries. * * @param void * @return object $this */ public function purge() { switch ( $this->type ) { case ChattyMango_Cache::WP_OPTIONS: return $this->purge_from_wp_options(); break; case ChattyMango_Cache::FILE: return $this->purge_from_files(); break; case ChattyMango_Cache::OTHER: return wp_cache_delete( $this->key ); break; default; $this->error = 4; return false; break; } } /** * Purge the entire cache. * * @param void * @return object $this */ public function purge_all() { switch ( $this->type ) { case ChattyMango_Cache::WP_OPTIONS: return $this->purge_all_from_wp_options(); break; case ChattyMango_Cache::FILE: return $this->purge_all_from_files(); break; case ChattyMango_Cache::OTHER: return wp_cache_flush(); break; default; $this->error = 4; return false; break; } } ############################## # ChattyMango_Cache::WP_OPTIONS ############################## /** * Getter for use with native ChattyMango_Cache::WP_OPTIONS - simple but maybe not useful for big amounts of data * * @param void * @return mixed */ private function get_from_wp_options() { $cache = get_option( 'chatty_mango_cache', array() ); if ( isset( $cache[ $this->key ] ) ) { if ( time() > $cache[ $this->key ]['time'] ) { $this->expired = true; if ( $this->serve_old_cache ) { $previous_cache = $cache[ $this->key ]['data']; // cache is expired: delete from cache unset( $cache[ $this->key ] ); update_option( 'chatty_mango_cache', $cache ); return $previous_cache; } else { // cache is expired: delete from cache unset( $cache[ $this->key ] ); update_option( 'chatty_mango_cache', $cache ); return false; } } else { return $cache[ $this->key ]['data']; } } return false; } /** * Setter for use with native ChattyMango_Cache::WP_OPTIONS - simple but maybe not useful for big amounts of data * * @param mixed $data * @return bool success? */ private function set_to_wp_options( $data ) { $cache = get_option( 'chatty_mango_cache', array() ); // update the cache $cache[ $this->key ]['data'] = $data; $cache[ $this->key ]['time'] = time() + $this->lifetime; update_option( 'chatty_mango_cache', $cache ); return true; } /** * Purges invalidated cache entries (not only for $this->key) * * @param void * @return object $this */ private function purge_from_wp_options() { $cache = get_option( 'chatty_mango_cache', array() ); foreach ( $cache as $key => $value ) { if ( time() > $cache[ $key ]['time'] ) { // cache is expired: delete from cache unset( $cache[ $key ] ); } } update_option( 'chatty_mango_cache', $cache ); return $this; } /** * Purges all cache * * @param void * @return object $this */ private function purge_all_from_wp_options() { update_option( 'chatty_mango_cache', array() ); return $this; } ############################## # ChattyMango_Cache::FILE # # file pattern: key as md5, dash, timestamp, dot, php ############################## /** * Getter for use with ChattyMango_Cache::FILE * * @param void * @return mixed */ private function get_from_files() { if ( !empty( $this->path ) ) { foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $this->path ) ) as $file) { // filter out "." and ".." if ($file->isDir()) continue; $filename = $file->getBasename(); preg_match( '/(' . $this->key . ')-(\d+)/', $filename, $matches ); if ( isset( $matches[1]) && $this->key == $matches[1] ) { if ( isset( $matches[2] ) ) { // check if entry is still valid if ( time() > (int) $matches[2] ) { // cache is expired $this->expired = true; if ( !$this->serve_old_cache ) { // delete from cache @unlink( $file->getPathname() ); return false; } } $file_contents = @file_get_contents( $file->getPathname() ); if ( $file_contents === false ) { $this->error = 5; return false; } // remove the initial exit $file_contents = str_replace( '<?php exit; ?>', '', $file_contents ); $cache = json_decode( $file_contents, true ); if ( $this->expired ) { // delete from cache @unlink( $file->getPathname() ); } return $cache; } } } } return false; } /** * Getter for use with ChattyMango_Cache::FILE - simple but maybe not useful for big amounts of data * * @param mixed $data * @return bool success? */ private function set_to_files( $data ) { $filename = $this->path . $this->key . '-' . (string) ( time() + $this->lifetime ) . '.php'; $file_contents = '<?php exit; ?>' . json_encode( $data ); if ( !@file_put_contents( $filename, $file_contents, LOCK_EX ) ) { $this->error = 6; return false; } return true; } /** * Purges invalidated cache entries (not only for $this->key) * * @param void * @return object $this */ private function purge_from_files() { if ( !empty( $this->path ) ) { foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $this->path ) ) as $file) { // filter out "." and ".." if ($file->isDir()) continue; $filename = $file->getBasename(); preg_match( '/(' . $this->key . ')-(\d+)/', $filename, $matches ); if ( isset( $matches[0] ) ) { // check if entry is still valid if ( time() > (int) $matches[0] ) { // cache is expired: delete from cache @unlink( $file->getPathname() ); } } } } return $this; } /** * Purges all cache * * @param void * @return object $this */ private function purge_all_from_files() { if ( !empty( $this->path ) ) { foreach ( new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $this->path ) ) as $file) { // filter out "." and ".." if ($file->isDir()) continue; $filename = $file->getBasename(); @unlink( $file->getPathname() ); } } return $this; } } // class } PK�������!�4@2��@2����include/class.loader.phpnu�[��������<?php /** * Tag Groups * * @package Tag Groups * @author Christoph Amthor * @copyright 2019 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ * */ if ( ! class_exists( 'TagGroups_Loader' ) ) { class TagGroups_Loader { /** * absolute path to the plugin main file * * @var string */ var $plugin_path; function __construct( $plugin_path ) { $this->plugin_path = $plugin_path; } /** * Provide objects that we'll need frequently * * @param void * @return object $this */ public function provide_globals() { global $tag_group_groups, $tag_group_terms; $tag_group_groups = new TagGroups_Groups(); $tag_group_terms = new TagGroups_Terms(); return $this; } /** * Adds all required classes * * @param void * @return object $this */ public function require_classes() { /* * Require all classes of this plugin */ foreach ( glob( $this->plugin_path . '/include/entities/*.php') as $filename ) { require_once $filename; } foreach ( glob( $this->plugin_path . '/include/helpers/*.php') as $filename ) { require_once $filename; } foreach ( glob( $this->plugin_path . '/include/admin/*.php') as $filename ) { require_once $filename; } /** * Must be after helpers */ foreach ( glob( $this->plugin_path . '/include/shortcodes/*.php') as $filename ) { require_once $filename; } return $this; } /** * Sets the version from the plugin main file * * @param void * @return object $this; */ public function set_version() { if ( defined( 'TAG_GROUPS_VERSION') ) { return $this; } if ( ! function_exists('get_plugin_data') ){ require_once ABSPATH . '/wp-admin/includes/plugin.php'; } $plugin_header = get_plugin_data( WP_PLUGIN_DIR . '/' . TAG_GROUPS_PLUGIN_BASENAME, false, false ); if ( isset( $plugin_header['Version'] ) ) { $version = $plugin_header['Version']; } else { $version = '1.0'; } define( 'TAG_GROUPS_VERSION', $version ); } /** * Check if WordPress meets the minimum version * * @param void * @return void */ public function check_preconditions() { if ( ! defined( 'TAG_GROUPS_MINIMUM_VERSION_WP' ) ) { return; } global $wp_version; // Check the minimum WP version if ( version_compare( $wp_version, TAG_GROUPS_MINIMUM_VERSION_WP , '<' ) ) { error_log( '[Tag Groups] Insufficient WordPress version for Tag Groups plugin.' ); TagGroups_Admin_Notice::add( 'error', sprintf( __( 'The plugin %1$s requires WordPress %2$s to function properly.', 'tag-groups'), '<b>Tag Groups</b>', TAG_GROUPS_MINIMUM_VERSION_WP ) . __( 'Please upgrade WordPress and then try again.', 'tag-groups' ) ); return; } } /** * adds all hooks * * @param void * @return object $this */ public function add_hooks() { add_action( 'init', array( $this, 'add_init_hooks' ) ); // general stuff add_action( 'plugins_loaded', array( $this, 'register_textdomain' ) ); if ( is_admin() ) { // backend stuff add_action( 'admin_init', array( 'TagGroups_Admin', 'admin_init' ) ); add_action( 'admin_init', array( $this, 'check_old_premium' ) ); add_action( 'admin_menu', array( 'TagGroups_Admin', 'register_menus' ) ); add_action( 'admin_enqueue_scripts', array( 'TagGroups_Admin', 'add_admin_js_css' ) ); add_action( 'admin_notices', array( 'TagGroups_Admin_Notice', 'display' ) ); } else { // frontend stuff add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); add_action( 'init', array( 'TagGroups_Shortcode', 'widget_hook' ) ); } return $this; } /** * adds all hooks that need to be registered after init * * @param void * @return object $this */ public function add_init_hooks() { return $this; } /** * registers the shortcodes with Gutenberg blocks * * @param void * @return object $this */ public function register_shortcodes_and_blocks() { /** * add Gutenberg functionality */ require_once $this->plugin_path . '/src/init.php'; // Register shortcodes also for admin so that we can remove them with strip_shortcodes in Ajax call TagGroups_Shortcode::register(); return $this; } /** * registers the REST API * * @param void * @return object $this */ public function register_REST_API() { TagGroups_REST_API::register(); return $this; } /** * Check if we don't have any old Tag Groups Premium * * @param void * @return void */ public function check_old_premium() { // Check the minimum WP version if ( defined( 'TAG_GROUPS_VERSION' ) && defined( 'TAG_GROUPS_VERSION' ) && version_compare( TAG_GROUPS_VERSION, '0.38' , '>' ) && version_compare( TAG_GROUPS_VERSION, '1.12' , '<' ) ) { error_log( '[Tag Groups Premium] Incompatible versions of Tag Groups and Tag Groups Premium.' ); TagGroups_Admin_Notice::add( 'info', sprintf( __( 'Your version of Tag Groups Premium is out of date and will not work with this version of Tag Groups. Please <a %s>update Tag Groups Premium</a>.', 'tag-groups'), 'href="https://documentation.chattymango.com/documentation/tag-groups-premium/maintenance-and-troubleshooting/updating-tag-groups-premium/" target="_blank"' ), '<b>Tag Groups</b>' ); return; } } /** * Initializes values and prevents errors that stem from wrong values, e.g. based on earlier bugs. * Runs when plugin is activated. * * @param void * @return void */ static function on_activation() { if ( ! current_user_can( 'activate_plugins' ) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups] Insufficient permissions to activate plugin.' ); } return; } if ( TAG_GROUPS_PLUGIN_IS_KERNL ) { register_uninstall_hook( TAG_GROUPS_PLUGIN_ABSOLUTE_PATH, array( 'TagGroups_Activation_Deactivation', 'on_uninstall' ) ); } if ( ! defined( 'TAG_GROUPS_VERSION') ){ $tag_groups_loader = new TagGroups_Loader( __FILE__ ); $tag_groups_loader->set_version(); } update_option( 'tag_group_base_version', TAG_GROUPS_VERSION ); /* * Taxonomy should not be empty */ $tag_group_taxonomy = get_option( 'tag_group_taxonomy', array() ); if ( empty( $tag_group_taxonomy ) ) { update_option( 'tag_group_taxonomy', array('post_tag') ); } elseif ( ! is_array( $tag_group_taxonomy ) ) { // Prevent some weird errors update_option( 'tag_group_taxonomy', array( $tag_group_taxonomy ) ); } /* * Theme should not be empty */ if ( '' == get_option( 'tag_group_theme', '' ) ) { update_option( 'tag_group_theme', TAG_GROUPS_STANDARD_THEME ); } /** * Register time of first use */ if ( ! get_option( 'tag_group_base_first_activation_time', false ) ) { update_option( 'tag_group_base_first_activation_time', time() ); } // If requested and new options exist, then remove old options. if ( defined( 'TAG_GROUPS_REMOVE_OLD_OPTIONS' ) && TAG_GROUPS_REMOVE_OLD_OPTIONS && get_option( 'term_groups', false ) && get_option( 'term_group_positions', false ) && get_option( 'term_group_labels', false ) ) { delete_option( 'tag_group_labels' ); delete_option( 'tag_group_ids' ); delete_option( 'max_tag_group_id' ); if ( defined( 'WP_DEBUG') && WP_DEBUG ) { error_log( '[Tag Groups] Deleted deprecated options' ); } } // purge cache if ( class_exists( 'ChattyMango_Cache' ) ) { $cache = new ChattyMango_Cache(); $cache ->type( get_option( 'tag_group_object_cache', ChattyMango_Cache::WP_OPTIONS ) ) ->path( WP_CONTENT_DIR . '/chatty-mango/cache/' ) ->purge_all(); } if ( get_option( 'tag_group_onboarding', false ) === false ) { /* * Seems to be a first-time user - display some help */ $onboarding_link = admin_url( 'admin.php?page=tag-groups-settings-first-steps' ); if ( defined( 'TAG_GROUPS_VERSION' ) ) { $plugin_name = 'Tag Groups Premium'; } else { $plugin_name = 'Tag Groups'; } TagGroups_Admin_Notice::add( 'info', '<h3>' . sprintf( __( 'Thank you for installing %s!', 'tag-groups' ), $plugin_name ) . '</h3>' . '<p>' . sprintf( __( 'Click <a %s>here</a> to get some help on how to get started.', 'tag-groups' ), 'href="' . $onboarding_link . '"') . '</p>' ); update_option( 'tag_group_onboarding', 1 ); } } /** * Adds js and css to frontend * * * @param void * @return void */ public function enqueue_scripts() { /* enqueue frontend scripts and styling only if shortcode in use */ global $post; if ( get_option( 'tag_group_shortcode_enqueue_always', 1 ) || ( ! is_a( $post, 'WP_Post' ) || ( has_shortcode( $post->post_content, 'tag_groups_cloud' ) || has_shortcode( $post->post_content, 'tag_groups_accordion' ) || has_shortcode( $post->post_content, 'tag_groups_table' ) ) ) ) { $theme = get_option( 'tag_group_theme', TAG_GROUPS_STANDARD_THEME ); $default_themes = explode( ',', TAG_GROUPS_BUILT_IN_THEMES ); $tag_group_enqueue_jquery = get_option( 'tag_group_enqueue_jquery', 1 ); if ( $tag_group_enqueue_jquery ) { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-tabs' ); wp_enqueue_script( 'jquery-ui-accordion' ); } if ( $theme == '' ) { return; } wp_register_style( 'tag-groups-css-frontend-structure', TAG_GROUPS_PLUGIN_URL . '/assets/css/jquery-ui.structure.min.css', array(), TAG_GROUPS_VERSION ); if ( in_array( $theme, $default_themes ) ) { wp_register_style( 'tag-groups-css-frontend-theme', TAG_GROUPS_PLUGIN_URL . '/assets/css/' . $theme . '/jquery-ui.theme.min.css', array(), TAG_GROUPS_VERSION ); } else { /* * Load minimized css if available */ if ( file_exists( WP_CONTENT_DIR . '/uploads/' . $theme . '/jquery-ui.theme.min.css' ) ) { wp_register_style( 'tag-groups-css-frontend-theme', get_bloginfo( 'wpurl' ) . '/wp-content/uploads/' . $theme . '/jquery-ui.theme.min.css', array(), TAG_GROUPS_VERSION ); } else if ( file_exists( WP_CONTENT_DIR . '/uploads/' . $theme . '/jquery-ui.theme.css' ) ) { wp_register_style( 'tag-groups-css-frontend-theme', get_bloginfo( 'wpurl' ) . '/wp-content/uploads/' . $theme . '/jquery-ui.theme.css', array(), TAG_GROUPS_VERSION ); } else { /* * Fallback: Is this a custom theme of an old version? */ try { $dh = opendir( WP_CONTENT_DIR . '/uploads/' . $theme ); } catch ( ErrorException $e ) { error_log( '[Tag Groups] Error searching ' . WP_CONTENT_DIR . '/uploads/' . $theme ); } if ( $dh ) { while ( false !== ( $filename = readdir( $dh ) ) ) { if ( preg_match( "/jquery-ui-\d+\.\d+\.\d+\.custom\.(min\.)?css/i", $filename ) ) { wp_register_style( 'tag-groups-css-frontend-theme', get_bloginfo( 'wpurl' ) . '/wp-content/uploads/' . $theme . '/' . $filename, array(), TAG_GROUPS_VERSION ); break; } } } } } wp_enqueue_style( 'tag-groups-css-frontend-structure' ); wp_enqueue_style( 'tag-groups-css-frontend-theme' ); } } /** * Loads text domain for internationalization */ public function register_textdomain() { load_plugin_textdomain( 'tag-groups', false, TAG_GROUPS_PLUGIN_RELATIVE_PATH . '/languages/' ); } } } PK�������!�B޳ �� ��$��include/admin/class.admin_notice.phpnu�[��������<?php /** * Tag Groups Premium * * @package Tag Groups Premium * @author Christoph Amthor * @copyright 2017 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license see official vendor website * * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ if ( ! class_exists( 'TagGroups_Admin_Notice' ) ) { class TagGroups_Admin_Notice { public function __construct() { } /** * undocumented function summary * * Undocumented function long description * * @param string $type One of: error, info * @param string $content with HTML * @return void */ public static function add( $type, $content ) { $notices = get_option( 'tag_group_admin_notice', array() ); /** * Avoid duplicate entries */ $found = false; foreach ( $notices as $notice ) { if ( $notice['type'] == $type && $notice['content'] == $content ) { $found = true; break; } } if ( ! $found ) { $notices[] = array( 'type' => $type, 'content' => $content ); update_option( 'tag_group_admin_notice', $notices ); } } /** * Checks if an admin notice is pending and, if necessary, display it * * * @param void * @return void */ public static function display() { $notices = get_option( 'tag_group_admin_notice', array() ); if ( ! empty( $notices ) ) { $html = ''; foreach ( $notices as $notice ) { if ( 'cache' == $notice['type'] ) { $notice['type'] = 'info'; $protocol = isset( $_SERVER['HTTPS'] ) ? 'https://' : 'http://'; $ajax_link = admin_url( 'admin-ajax.php?', $protocol ); } else { $ajax_link = ''; } // wrap the message in <p></p> if not already a complex formatting if ( strpos( '<p>', $notice['content'] ) === false ) { $notice['content'] = '<p>' . $notice['content'] . '</p>'; } $view = new TagGroups_View( 'admin/admin_notice' ); $view->set( array( 'ajax_link' => $ajax_link, 'notice' => $notice, ) ); $view->render(); } update_option( 'tag_group_admin_notice', array() ); } } } } PK�������!�"`������include/admin/class.admin.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Admin') ) { class TagGroups_Admin { function __construct() { } /** * Initial settings after calling the plugin * Effective only for admin backend */ static function admin_init() { global $tag_groups_premium_fs_sdk; $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) { $tag_group_role_edit_tags = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_tags', 'manage_options' ) : 'manage_options'; $tag_group_role_edit_groups = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_groups', 'edit_pages' ) : 'edit_pages'; } else { $tag_group_role_edit_tags = 'manage_options'; $tag_group_role_edit_groups = 'edit_pages'; } if ( current_user_can( $tag_group_role_edit_tags ) ) { foreach ( $enabled_taxonomies as $taxonomy ) { // creating and editing tags add_action( "{$taxonomy}_edit_form_fields", array( 'TagGroups_Admin', 'tag_input_metabox' ) ); add_action( "{$taxonomy}_add_form_fields", array( 'TagGroups_Admin', 'create_new_tag' ) ); } /** * Actions that require permissions */ add_action( 'quick_edit_custom_box', array( 'TagGroups_Admin', 'quick_edit_tag' ), 10, 3 ); add_action( 'admin_footer-edit-tags.php', array( 'TagGroups_Admin', 'quick_edit_javascript' ) ); add_action( 'admin_footer-edit-tags.php', array( 'TagGroups_Admin', 'bulk_admin_footer' ) ); add_filter( 'tag_row_actions', array( 'TagGroups_Admin', 'expand_quick_edit_link' ), 10, 2 ); add_action( 'groups_of_term_saved', array( 'TagGroups_Admin', 'update_post_meta' ), 10, 2 ); add_action( 'load-edit-tags.php', array( 'TagGroups_Admin', 'do_bulk_action' ) ); add_action( 'create_term', array( 'TagGroups_Admin', 'copy_term_group' ), 20 ); } foreach ( $enabled_taxonomies as $taxonomy ) { // extra columns on tag page add_filter( "manage_edit-{$taxonomy}_columns", array( 'TagGroups_Admin', 'add_taxonomy_columns' ) ); add_filter( "manage_{$taxonomy}_custom_column", array( 'TagGroups_Admin', 'add_taxonomy_column_content' ), 10, 3 ); } add_action( 'load-edit-tags.php', array( 'TagGroups_Admin', 'do_filter_tags' ) ); add_action( 'admin_head', array( 'TagGroups_Admin', 'add_tag_page_styling' ) ); add_action( 'admin_footer-edit-tags.php', array( 'TagGroups_Admin', 'filter_admin_footer' ) ); /** * Process data submitted from settings forms */ add_action( 'in_admin_header', array( 'TagGroups_Settings', 'settings_page_actions' ) ); /** * Process data submitted from setup wizard forms */ add_action( 'in_admin_header', array( 'TagGroups_Settings', 'settings_page_actions_wizard' ) ); add_action( 'create_term', array( 'TagGroups_Admin', 'update_edit_term_group_create' ) ); add_action( 'edit_term', array( 'TagGroups_Admin', 'update_edit_term_group_edit' ) ); add_action( 'delete_term', array( 'TagGroups_Admin', 'update_post_meta' ), 10, 2 ); add_filter( "plugin_action_links_" . TAG_GROUPS_PLUGIN_BASENAME, array( 'TagGroups_Admin', 'add_plugin_settings_link' ) ); add_action( 'restrict_manage_posts', array( 'TagGroups_Admin', 'add_post_filter' ) ); add_filter( 'parse_query', array( 'TagGroups_Admin', 'apply_post_filter' ) ); // Ajax Handler if ( current_user_can( $tag_group_role_edit_groups ) ) { add_action( 'wp_ajax_tg_ajax_manage_groups', array( 'TagGroups_Admin', 'ajax_manage_groups' ) ); } add_action( 'wp_ajax_tg_ajax_get_feed', array( 'TagGroups_Admin', 'ajax_get_feed' ) ); add_action( 'admin_notices', array( 'TagGroups_Admin', 'add_language_notice' ) ); } /** * Adds the submenus and the settings page to the admin backend */ static function register_menus() { // Add the main menu add_menu_page( __( 'Home', 'tag-groups' ), 'Tag Groups', 'manage_options', 'tag-groups-settings', array( 'TagGroups_Settings', 'settings_page_home' ), 'dashicons-tag', '99.01' ); // Define the menu structure $tag_groups_admin_structure = array( 0 => array( 'title' => __( 'Home', 'tag-groups' ), 'slug' => 'tag-groups-settings', // repeating the slug of the top-level menu page to prevent it from reappearing as submenu 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_home' ), ), 1 => array( 'title' => __( 'Taxonomies', 'tag-groups' ), 'slug' => 'tag-groups-settings-taxonomies', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_taxonomies' ), ), 3 => array( 'title' => __( 'Front End', 'tag-groups' ), 'slug' => 'tag-groups-settings-front-end', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_front_end' ), ), 4 => array( 'title' => __( 'Back End', 'tag-groups' ), 'slug' => 'tag-groups-settings-back-end', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_back_end' ), ), 5 => array( 'title' => __( 'Tools', 'tag-groups' ), 'slug' => 'tag-groups-settings-tools', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_tools' ), ), 6 => array( 'title' => __( 'Troubleshooting', 'tag-groups' ), 'slug' => 'tag-groups-settings-troubleshooting', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_troubleshooting' ), ), // /: back end 7 => array( 'title' => __( 'Premium', 'tag-groups' ), 'slug' => 'tag-groups-settings-premium', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_premium' ), ), 8 => array( 'title' => __( 'About', 'tag-groups' ), 'slug' => 'tag-groups-settings-about', 'parent' => 'tag-groups-settings', 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_about' ), ), 9 => array( 'title' => __( 'First Steps', 'tag-groups' ), 'slug' => 'tag-groups-settings-first-steps', 'parent' => null, // no menu 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_onboarding' ), ), 10 => array( 'title' => __( 'Setup Wizard', 'tag-groups' ), 'slug' => 'tag-groups-settings-setup-wizard', 'parent' => null, // no menu 'user_can' => 'manage_options', 'function' => array( 'TagGroups_Settings', 'settings_page_setup_wizard' ), ), ); // hook for premium plugin to modify the menu $tag_groups_admin_structure = apply_filters( 'tag_groups_admin_structure', $tag_groups_admin_structure ); // make sure they all have the right order ksort( $tag_groups_admin_structure ); // register the menus and pages foreach ( $tag_groups_admin_structure as $tag_groups_admin_page ) { add_submenu_page( $tag_groups_admin_page['parent'], $tag_groups_admin_page['title'], $tag_groups_admin_page['title'], $tag_groups_admin_page['user_can'], $tag_groups_admin_page['slug'], $tag_groups_admin_page['function'] ); } // for each registered taxonomy a tag group admin page $tag_group_taxonomies = get_option( 'tag_group_taxonomy', array('post_tag') ); $tag_group_role_edit_groups = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_groups', 'edit_pages' ) : 'edit_pages'; $tag_group_post_types = TagGroups_Taxonomy::post_types_from_taxonomies( $tag_group_taxonomies ); foreach ( $tag_group_post_types as $post_type ) { if ( 'post' == $post_type ) { $post_type_query = ''; } else { $post_type_query = '?post_type=' . $post_type; } $submenu_page = add_submenu_page( 'edit.php' . $post_type_query, 'Tag Group Admin', 'Tag Group Admin', $tag_group_role_edit_groups, 'tag-groups_' . $post_type, array( 'TagGroups_Admin', 'group_administration' ) ); if ( class_exists( 'TagGroups_Premium_Admin' ) && method_exists( 'TagGroups_Premium_Admin', 'add_screen_option' ) ) { add_action( "load-$submenu_page", array( 'TagGroups_Premium_Admin', 'add_screen_option' ) ); } } } /** * Create the html to add tags to tag groups on single tag view (after clicking tag for editing) * @param type $tag */ static function tag_input_metabox( $tag ) { global $tag_groups_premium_fs_sdk, $tag_group_groups; $screen = get_current_screen(); if ( 'post' == $screen->post_type ) { $url_post_type = ''; } else { $url_post_type = '&post_type=' . $screen->post_type; } $tag_group_admin_url = admin_url( 'edit.php?page=tag-groups_' . $screen->post_type . $url_post_type ); $data = $tag_group_groups->get_all_with_position_as_key(); unset( $data[0] ); $tg_term = new TagGroups_Term( $tag ); $view = new TagGroups_View( 'admin/new_tag_main' ); $view->set( array( 'data' => $data, 'tag_groups_premium_fs_sdk' => $tag_groups_premium_fs_sdk, 'screen' => $screen, 'tg_term' => $tg_term, 'tag_group_admin_url' => $tag_group_admin_url ) ); $view->render(); } /** * Create the html to assign tags to tag groups upon new tag creation (left of the table) * @param type $tag */ static function create_new_tag( $tag ) { global $tag_groups_premium_fs_sdk, $tag_group_groups; $screen = get_current_screen(); $data = $tag_group_groups->get_all_with_position_as_key(); unset( $data[0] ); $view = new TagGroups_View( 'admin/new_tag_from_list' ); $view->set( array( 'data' => $data, 'tag_groups_premium_fs_sdk' => $tag_groups_premium_fs_sdk, 'screen' => $screen ) ); $view->render(); } /** * adds a custom column to the table of tags/terms * thanks to http://coderrr.com/add-columns-to-a-taxonomy-terms-table/ * @global object $wp * @param array $columns * @return string */ static function add_taxonomy_columns( $columns ) { global $wp; $new_order = (isset( $_GET['order'] ) && $_GET['order'] == 'asc' && isset( $_GET['orderby'] ) && $_GET['orderby'] == 'term_group') ? 'desc' : 'asc'; $screen = get_current_screen(); if ( ! empty( $screen )) { $taxonomy = $screen->taxonomy; $link = add_query_arg( array('orderby' => 'term_group', 'order' => $new_order, 'taxonomy' => $taxonomy), admin_url( "edit-tags.php" . $wp->request ) ); $link_escaped = esc_url( $link ); $columns['term_group'] = '<a href="' . $link_escaped . '"><span>' . __( 'Tag Groups', 'tag-groups' ) . '</span><span class="sorting-indicator"></span></a>'; } else { $columns['term_group'] = ''; } return $columns; } /** * adds data into custom column of the table for each row * thanks to http://coderrr.com/add-columns-to-a-taxonomy-terms-table/ * @param type $a * @param type $b * @param type $term_id * @return string */ static function add_taxonomy_column_content( $a = '', $b = '', $term_id = 0 ) { global $tag_group_groups; if ( 'term_group' != $b ) { return $a; } // credits to Navarro (http://navarradas.com) if ( ! empty( $_REQUEST['taxonomy'] ) ) { $taxonomy = sanitize_title( $_REQUEST['taxonomy'] ); } else { return ''; } $term = get_term( $term_id, $taxonomy ); if ( isset( $term ) ) { $term_o = new TagGroups_Term( $term ); return implode( ', ', $tag_group_groups->get_labels_by_position( $term_o->get_groups() ) ) ; } else { return ''; } } /** * * processing actions defined in bulk_admin_footer() * credits http://www.foxrunsoftware.net * @global int $tg_update_edit_term_group_called * @return void */ static function do_bulk_action() { global $tg_update_edit_term_group_called, $tag_group_groups; $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $screen = get_current_screen(); $taxonomy = $screen->taxonomy; if ( is_object( $screen ) && ( ! in_array( $taxonomy, $enabled_taxonomies ) ) ) { return; } $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); if ( $show_filter_tags ) { $tag_group_tags_filter = get_option( 'tag_group_tags_filter', array() ); /* * Processing the filter * Values come as POST (via menu, precedence) or GET (via link from group admin) */ if ( isset( $_POST['term-filter'] ) ) { $term_filter = (int) $_POST['term-filter']; } elseif ( isset( $_GET['term-filter'] ) ) { $term_filter = (int) $_GET['term-filter']; // We need to remove the term-filter piece, or it will stay forever $sendback = remove_query_arg( array( 'term-filter' ), $_SERVER['REQUEST_URI']); } if ( isset( $term_filter ) ) { if ( '-1' == $term_filter ) { unset( $tag_group_tags_filter[ $taxonomy ] ); update_option( 'tag_group_tags_filter', $tag_group_tags_filter ); } else { $tag_group_tags_filter[ $taxonomy ] = $term_filter; update_option( 'tag_group_tags_filter', $tag_group_tags_filter ); /* * Modify the query */ add_action( 'terms_clauses', array( 'TagGroups_Admin', 'terms_clauses' ), 10, 3 ); } if ( isset( $sendback ) ) { // remove filter that destroys WPML's "&lang=" remove_all_filters( 'wp_redirect' ); // escaping $sendback wp_redirect( esc_url_raw( $sendback ) ); exit; } } else { /* * If filter is set, make sure to modify the query */ if ( isset( $tag_group_tags_filter[ $taxonomy ] ) ) { add_action( 'terms_clauses', array( 'TagGroups_Admin', 'terms_clauses' ), 10, 3 ); } } } $wp_list_table = _get_list_table( 'WP_Terms_List_Table' ); $action = $wp_list_table->current_action(); $allowed_actions = array( 'assign' ); if ( ! in_array( $action, $allowed_actions ) ) { return; } if ( isset( $_REQUEST['delete_tags'] ) ) { $term_ids = $_REQUEST['delete_tags']; } if ( isset( $_REQUEST['term-group-top'] ) ) { $term_group = (int) $_REQUEST['term-group-top']; } else { return; } $sendback = remove_query_arg( array( 'assigned', 'deleted' ), wp_get_referer() ); if ( !$sendback ) { $sendback = admin_url( 'edit-tags.php?taxonomy=' . $taxonomy ); } if ( empty( $term_ids ) ) { $sendback = add_query_arg( array( 'number_assigned' => 0, 'group_id' => $term_group ), $sendback ); $sendback = remove_query_arg( array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view' ), $sendback ); // escaping $sendback wp_redirect( esc_url_raw( $sendback ) ); exit(); } $pagenum = $wp_list_table->get_pagenum(); $sendback = add_query_arg( 'paged', $pagenum, $sendback ); $tg_update_edit_term_group_called = true; // skip update_edit_term_group() switch ( $action ) { case 'assign': $assigned = 0; foreach ( $term_ids as $term_id ) { $term = new TagGroups_Term( $term_id ); if ( false !== $term ) { if ( 0 == $term_group ) { $term->remove_all_groups()->save(); } else { $term->add_group( $term_group )->save(); } $assigned++; } } if ( 0 == $term_group ) { $message = _n( 'The term has been removed from all groups.', sprintf( '%d terms have been removed from all groups.', number_format_i18n( (int) $assigned ) ), (int) $assigned, 'tag-groups' ); } else { $tg_group = new TagGroups_Group( $term_group ); $message = _n( sprintf( 'The term has been assigned to the group %s.', '<i>' . $tg_group->get_label() . '</i>' ), sprintf( '%d terms have been assigned to the group %s.', number_format_i18n( (int) $assigned ), '<i>' . $tg_group->get_label() . '</i>' ), (int) $assigned, 'tag-groups' ); } break; default: // Need to show a message? exit(); break; } TagGroups_Admin_Notice::add( 'success', $message ); $sendback = remove_query_arg( array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'bulk_edit', 'post_view' ), $sendback ); wp_redirect( esc_url_raw( $sendback ) ); exit(); } /** * Filter the tags on the tag page * * @return void */ static function do_filter_tags() { $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $screen = get_current_screen(); $taxonomy = $screen->taxonomy; if ( is_object( $screen ) && ( ! in_array( $taxonomy, $enabled_taxonomies ) ) ) { return; } $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); if ( $show_filter_tags ) { $tag_group_tags_filter = get_option( 'tag_group_tags_filter', array() ); /* * Processing the filter * Values come as POST (via menu, precedence) or GET (via link from group admin) */ if ( isset( $_POST['term-filter'] ) ) { $term_filter = (int) $_POST['term-filter']; } elseif ( isset( $_GET['term-filter'] ) ) { $term_filter = (int) $_GET['term-filter']; // We need to remove the term-filter piece, or it will stay forever $sendback = remove_query_arg( array( 'term-filter' ), $_SERVER['REQUEST_URI'] ); } if ( isset( $term_filter ) ) { if ( '-1' == $term_filter ) { unset( $tag_group_tags_filter[ $taxonomy ] ); update_option( 'tag_group_tags_filter', $tag_group_tags_filter ); } else { $tag_group_tags_filter[ $taxonomy ] = $term_filter; update_option( 'tag_group_tags_filter', $tag_group_tags_filter ); /* * Modify the query */ add_action( 'terms_clauses', array( 'TagGroups_Admin', 'terms_clauses' ), 10, 3 ); } if ( isset( $sendback ) ) { // remove filter that destroys WPML's "&lang=" remove_all_filters( 'wp_redirect' ); // escaping $sendback wp_redirect( esc_url_raw( $sendback ) ); exit; } } else { /* * If filter is set, make sure to modify the query */ if ( isset( $tag_group_tags_filter[ $taxonomy ] ) ) { add_action( 'terms_clauses', array( 'TagGroups_Admin', 'terms_clauses' ), 10, 3 ); } } } // $sendback = remove_query_arg( array( 'action', 'action2', 'tags_input', 'post_author', 'comment_status', 'ping_status', '_status', 'post', 'term-filter', 'post_view' ), wp_get_referer() ); // // wp_redirect( esc_url_raw( $sendback ) ); // // exit(); } /** * modifies Quick Edit link to call JS when clicked * thanks to http://shibashake.com/WordPress-theme/expand-the-WordPress-quick-edit-menu * @param array $actions * @param object $tag * @return array */ static function expand_quick_edit_link( $actions, $tag ) { $screen = get_current_screen(); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( is_object( $screen ) && (!in_array( $screen->taxonomy, $enabled_taxonomies ) ) ) { return $actions; } $term_o = new TagGroups_Term( $tag ); $groups = htmlspecialchars( json_encode( $term_o->get_groups() ) ); $nonce = wp_create_nonce( 'tag-groups-nonce' ); $actions['inline hide-if-no-js'] = '<a href="javascript:void(0)" class="editinline" title="'; $actions['inline hide-if-no-js'] .= esc_attr( __( 'Edit this item inline', 'tag-groups' ) ) . '" '; $actions['inline hide-if-no-js'] .= " onclick=\"set_inline_tag_group_selected('{$groups}', '{$nonce}')\">"; $actions['inline hide-if-no-js'] .= __( 'Quick&nbsp;Edit', 'tag-groups' ); $actions['inline hide-if-no-js'] .= '</a>'; return $actions; } /** * adds JS function that sets the saved tag group for a given element when it's opened in quick edit * thanks to http://shibashake.com/WordPress-theme/expand-the-WordPress-quick-edit-menu * @return void */ static function quick_edit_javascript() { global $tag_groups_premium_fs_sdk; $screen = get_current_screen(); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) { return; } $view = new TagGroups_View( 'admin/quick_edit_javascript' ); $view->set( 'tag_groups_premium_fs_sdk', $tag_groups_premium_fs_sdk ); $view->render(); } /** * Create the html to assign tags to tag groups directly in tag table ('quick edit') * @return type */ static function quick_edit_tag() { global $tg_quick_edit_tag_called, $tag_group_groups; if ( $tg_quick_edit_tag_called ) { return; } $tg_quick_edit_tag_called = true; $screen = get_current_screen(); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) { return; } $data = $tag_group_groups->get_all_with_position_as_key(); unset( $data[0] ); $view = new TagGroups_View( 'admin/quick_edit_tag' ); $view->set( array( 'data' => $data, 'screen' => $screen, ) ); $view->render(); } /** * Updates the post meta * * * @param type var Description * @return return type */ public static function update_post_meta( $term_id, $term_groups = array() ) { global $tag_group_posts; /** * update the post meta */ if ( class_exists( 'TagGroups_Premium_Post' ) ) { if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( '[Tag Groups Premium] Checking if posts need to be migrated.' ); $start_time = microtime( true ); } $count = $tag_group_posts->update_post_meta_for_term( $term_id, $term_groups ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { error_log( sprintf( '[Tag Groups Premium] Meta of %d post(s) updated in %d milliseconds.', $count, round( ( microtime( true ) - $start_time ) * 1000 ) ) ); } } } /** * Get the $_POSTed value after saving a tag/term and save it in the table * * @global int $tg_update_edit_term_group_called * @param int $term_id * @return void */ public static function update_edit_term_group_create( $term_id ) { // next lines to prevent infinite loops when the hook edit_term is called again from the function wp_update_term global $tg_update_edit_term_group_called; if ( $tg_update_edit_term_group_called ) { return; } self::update_edit_term_group_from_edit( $term_id ); } /** * Get the $_POSTed value after saving a tag/term and save it in the table * * @global int $tg_update_edit_term_group_called * @param int $term_id * @return void */ public static function update_edit_term_group_edit( $term_id ) { // next lines to prevent infinite loops when the hook edit_term is called again from the function wp_update_term global $tg_update_edit_term_group_called; if ( $tg_update_edit_term_group_called ) { return; } self::update_edit_term_group_from_edit( $term_id ); /** * If necessary we also save default WP term properties. * Make sure we have a taxonomy */ if ( isset( $_POST['tag-groups-taxonomy'] ) ) { $taxonomy = sanitize_title( $_POST['tag-groups-taxonomy'] ); $args = array(); /** * Save the tag name */ if ( isset( $_POST['name'] ) && ( $_POST['name'] != '' ) ) { // allow zeros $args['name'] = stripslashes( sanitize_text_field( $_POST['name'] ) ); } /** * Save the tag slug */ if ( isset( $_POST['slug'] ) ) { // allow empty values $args['slug'] = sanitize_title( $_POST['slug'] ); } /** * Save the tag description */ if ( isset( $_POST['description'] ) ) { // allow empty values /** * Check if the settings require us to omit sanitization */ if ( get_option( 'tag_group_html_description', 0 ) ) { $args['description'] = $_POST['description']; } else { $args['description'] = stripslashes( sanitize_text_field( $_POST['description'] ) ); } } /** * Save the parent */ if ( isset( $_POST['parent'] ) && ($_POST['parent'] != '') ) { $args['parent'] = (int) $_POST['parent'] ; } wp_update_term( $term_id, $taxonomy, $args ); } } /** * Get the $_POSTed value after saving a tag/term and save it in the table * * @param int $term_id * @return void */ public static function update_edit_term_group_from_edit( $term_id ) { global $tg_update_edit_term_group_called; $screen = get_current_screen(); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $tg_update_edit_term_group_called = true; // if ( ( ! is_object( $screen ) || ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) && ! isset( $_POST['new-tag-created'] ) ) { if ( is_object( $screen ) && ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) && ( ! isset( $_POST['new-tag-created'] ) ) ) { return; } if ( empty( $_POST['tag-groups-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-nonce'], 'tag-groups-nonce' ) ) { return; // die( "Security check" ); } $term = new TagGroups_Term( (int) $term_id ); if ( ! empty( $_POST['term-group'] ) ) { if ( is_array( $_POST['term-group'] ) ) { $term_group = array_map( 'intval', $_POST['term-group'] ); } else { $term_group = (int) $_POST['term-group']; } $term->set_group( $term_group )->save(); } else { // $_POST['term-group'] won't be set if multi select is empty => evaluate empty value as "unassigned" $term->set_group( 0 )->save(); } } /** * WPML: Check if we need to copy group info to the translation * * Copy the groups of an original term to its translation if a translation is saved * * @param type $term_id * @return type */ public static function copy_term_group( $term_id ) { /** * Check if WPML is available */ $default_language_code = apply_filters( 'wpml_default_language', null ); if ( ! isset( $default_language_code ) ) { return; } /** * Check if the new tag has no group set or groups set to unassigned */ $term = new TagGroups_Term( $term_id ); $translated_term_groups = $term->get_groups(); if ( ! empty( $translated_term_groups ) && $translated_term_groups != array( 0 ) ) { return; } /** * edit-tags.php form */ if ( isset( $_POST['icl_tax_post_tag_language'] ) && $_POST['icl_tax_post_tag_language'] != $default_language_code ) { if ( ! empty( $_POST['icl_translation_of'] ) ) { // translated from the default language $original_term_id = $_POST['icl_translation_of']; } elseif ( ! empty( $_POST['icl_trid'] ) ) { // translated from another translated language $translations = apply_filters( 'wpml_get_element_translations', null, $_POST['icl_trid'] ); if ( isset( $translations[ $default_language_code ]->element_id ) ) { $original_term_id = $translations[ $default_language_code ]->element_id; } } } /** * taxonomy-translation.php form */ elseif ( isset( $_POST['term_language_code'] ) && $_POST['term_language_code'] != $default_language_code && ! empty( $_POST['trid'] ) ) { $translations = apply_filters( 'wpml_get_element_translations', null, $_POST['trid'] ); if ( isset( $translations[ $default_language_code ]->element_id ) ) { $original_term_id = $translations[ $default_language_code ]->element_id; } } if ( isset( $original_term_id ) ) { $tg_original_term = new TagGroups_Term( $original_term_id ); $original_term_groups = $tg_original_term->get_groups(); if ( ! empty( $original_term_groups) ) { $term->set_group( $original_term_groups )->save(); } } } /** * Adds a bulk action menu to a term list page * credits http://www.foxrunsoftware.net * @return void */ static function bulk_admin_footer() { global $tag_group_groups; $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $screen = get_current_screen(); if ( is_object( $screen ) && ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) ) { return; } $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); $data = $tag_group_groups->get_all_with_position_as_key(); $view = new TagGroups_View( 'admin/bulk_admin_footer' ); $view->set( array( 'data' => $data ) ); $view->render(); } /** * Adds a bulk action menu to a term list page * credits http://www.foxrunsoftware.net * @return void */ static function filter_admin_footer() { global $tag_group_groups; $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $screen = get_current_screen(); if ( is_object( $screen ) && ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) ) { return; } $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); $data = $tag_group_groups->get_all_with_position_as_key(); if ( $show_filter_tags ) : $tag_group_tags_filter = get_option( 'tag_group_tags_filter', array() ); if ( isset( $tag_group_tags_filter[ $screen->taxonomy ] ) ) { $tag_filter = $tag_group_tags_filter[ $screen->taxonomy ]; } else { $tag_filter = -1; } $view = new TagGroups_View( 'admin/filter_admin_footer' ); $view->set( array( 'data' => $data, 'tag_filter' => $tag_filter ) ); $view->render(); endif; } /** * Adds a pull-down menu to the filters above the posts. * Based on the code by Ohad Raz, http://wordpress.stackexchange.com/q/45436/2487 * License: Creative Commons Share Alike * @return void */ static function add_post_filter() { global $tag_group_groups; if ( ! get_option( 'tag_group_show_filter', 1 ) ) { return; } $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $post_type = ( isset( $_GET['post_type'] ) ) ? sanitize_title( $_GET['post_type'] ) : 'post'; if ( count( array_intersect( $enabled_taxonomies, get_object_taxonomies( $post_type ) ) ) ) { $data = $tag_group_groups->get_all_term_group_label(); $current_term_group = isset( $_GET['tg_filter_posts_value'] ) ? sanitize_text_field( $_GET['tg_filter_posts_value'] ) : ''; $view = new TagGroups_View( 'admin/post_filter' ); $view->set( array( 'data' => $data, 'current_term_group' => $current_term_group ) ); $view->render(); } } /** * Applies the filter, if used. * Based on the code by Ohad Raz, http://wordpress.stackexchange.com/q/45436/2487 * License: Creative Commons Share Alike * * @global type $pagenow * @param type $query * @return type */ static function apply_post_filter( $query ) { global $pagenow, $tag_group_posts; if ( $pagenow != 'edit.php' ) { return $query; } $show_filter_posts = get_option( 'tag_group_show_filter', 1 ); if ( ! $show_filter_posts ) { return $query; } if ( isset( $_GET['post_type'] ) ) { $post_type = sanitize_title( $_GET['post_type'] ); } else { $post_type = 'post'; } /** * Losing here the filter by language from Polylang, but currently no other way to show any posts when combining tax_query and meta_query */ unset( $query->query_vars['tax_query'] ); $tg_taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); // note: removed restriction count( $tg_taxonomy ) <= 1 - rather let user figure out if the result works $taxonomy_intersect = array_intersect( $tg_taxonomy, get_object_taxonomies( $post_type ) ); if ( count( $taxonomy_intersect ) && isset( $_GET['tg_filter_posts_value'] ) && $_GET['tg_filter_posts_value'] !== '' ) { if ( ! class_exists( 'TagGroups_Premium_Post' ) ) { // one tag group per tag $filter_terms = array( ); $query->query_vars['tax_query'] = array( 'relation' => 'OR' ); $args = array( 'taxonomy' => $taxonomy_intersect ); $terms = get_terms( $args ); if ( $terms ) { $selected_term_group = (int) $_GET['tg_filter_posts_value']; /** * Filtering for terms that are not assigned to group $selected_term_group * Add per taxonomy for future extensibility */ foreach ( $terms as $term ) { if ( $term->term_group == $selected_term_group ) { $filter_terms[$term->taxonomy][] = $term->term_id; } } foreach ( $taxonomy_intersect as $taxonomy ) { /** * Add a dummy so that the taxonomy condition will not be ignored even if no applicable tags were found. */ if ( ! isset( $filter_terms[$taxonomy] ) ) { $filter_terms[$taxonomy][] = 0; } $query->query_vars['tax_query'][] = array( 'taxonomy' => $taxonomy, 'field' => 'term_id', 'terms' => $filter_terms[$taxonomy], 'compare' => 'IN', ); } } } else { // multiple tag groups per tag $query->query_vars['meta_query'] = $tag_group_posts->get_meta_query_group( (int) $_GET['tg_filter_posts_value'] ); } } return $query; } /** * AJAX handler to get a feed */ static function ajax_get_feed() { $response = new WP_Ajax_Response; if ( isset( $_REQUEST['url'] ) ) { $url = esc_url_raw( $_REQUEST['url'] ); } else { $url = ''; } if ( isset( $_REQUEST['amount'] ) ) { $amount = (int) $_REQUEST['amount']; } else { $amount = 5; } /** * Assuming that the posts URL is the $url minus the trailing /feed */ $posts_url = preg_replace( '/(.+)feed\/?/i', '$1', $url ); $rss = new TagGroups_Feed; $rss->debug( WP_DEBUG )->url( $url ); $cache = $rss->cache_get(); if ( empty( $cache ) ) { $cache = $rss->posts_url( $posts_url )->load()->parse()->render( $amount ); } $response->add( array( 'data' => 'success', 'supplemental' => array( 'output' => $cache, ), )); // Cannot use the method $response->send() because it includes die() header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ) ); echo "<?xml version='1.0' encoding='" . get_option( 'blog_charset' ) . "' standalone='yes'?><wp_ajax>"; foreach ( (array) $response->responses as $response_item ){ echo $response_item; } echo '</wp_ajax>'; // check if we received expired cache content if ( false !== $cache && $rss->expired ) { // load in background for next time $rss->posts_url( $posts_url )->load()->parse()->render( $amount ); if ( WP_DEBUG ) { error_log('[Tag Groups] Preloaded feed into cache.'); } } if ( wp_doing_ajax() ) { wp_die(); } else { die(); } } /** * AJAX handler to manage Tag Groups */ static function ajax_manage_groups() { global $tag_groups_premium_fs_sdk, $tag_group_groups; $response = new WP_Ajax_Response; if ( isset( $_REQUEST['task'] ) ) { $task = $_REQUEST['task']; } else { $task = 'refresh'; } if ( isset( $_REQUEST['taxonomy'] ) ) { $taxonomy = $_REQUEST['taxonomy']; } else { $taxonomy = array( 'post_tag' ); } $message = ''; if ( $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) { $tag_group_role_edit_groups = class_exists( 'TagGroups_Premium' ) ? get_option( 'tag_group_role_edit_groups', 'edit_pages' ) : 'edit_pages'; } else { $tag_group_role_edit_groups = 'edit_pages'; } if ( $task == 'refresh' || $task == 'test' || ( current_user_can( $tag_group_role_edit_groups ) && wp_verify_nonce( $_REQUEST['nonce'], 'tg_groups_management' ) ) ) { if ( isset( $_REQUEST['position'] ) ) { $position = (int) $_REQUEST['position']; } else { $position = 0; } if ( isset( $_REQUEST['new_position'] ) ) { $new_position = (int) $_REQUEST['new_position']; } else { $new_position = 0; } if ( isset( $_REQUEST['start_position'] ) ) { $start_position = (int) $_REQUEST['start_position']; } if ( empty( $start_position ) || $start_position < 1 ) { $start_position = 1; } if ( isset( $_REQUEST['end_position'] ) ) { $end_position = (int) $_REQUEST['end_position']; } if ( empty( $end_position ) || $end_position < 1 ) { $end_position = 1; } $tg_group = new TagGroups_Group(); switch ( $task ) { case "sortup": $tag_group_groups->sort('up')->save(); $message = __( 'The groups have been sorted alphabetically.', 'tag-groups' ); break; case "sortdown": $tag_group_groups->sort('down')->save(); $message = __( 'The groups have been sorted alphabetically.', 'tag-groups' ); break; case "new": if ( isset( $_REQUEST['label'] ) ) { $label = stripslashes( sanitize_text_field( $_REQUEST['label'] ) ); } if ( empty( $label ) ) { $message = __( 'The label cannot be empty.', 'tag-groups' ); TagGroups_Admin::send_error( $response, $message, $task ); } elseif ( $tg_group->find_by_label( $label ) ) { $message = sprintf( __( 'A tag group with the label \'%s\' already exists, or the label has not changed. Please choose another one or go back.', 'tag-groups' ), $label ); TagGroups_Admin::send_error( $response, $message, $task ); } else { $tg_group->create( $position + 1, $label )->save(); $message = sprintf( __( 'A new tag group with the label \'%s\' has been created!', 'tag-groups' ), $label ); } break; case "update": if ( isset( $_REQUEST['label'] ) ) { $label = stripslashes( sanitize_text_field( $_REQUEST['label'] ) ); } if ( empty( $label ) ) { $message = __( 'The label cannot be empty.', 'tag-groups' ); TagGroups_Admin::send_error( $response, $message, $task ); } elseif ( $tg_group->find_by_label( $label ) ) { if ( ! empty( $position ) && $position == $tg_group->get_position() ) { // Label hast not changed, just ignore } else { $message = sprintf( __( 'A tag group with the label \'%s\' already exists.', 'tag-groups' ), $label ); TagGroups_Admin::send_error( $response, $message, $task ); } } else { if ( ! empty( $position ) ) { if ( $tg_group->find_by_position( $position ) ) { $tg_group->set_label( $label )->save(); } } else { TagGroups_Admin::send_error( $response, 'error: invalid position: ' . $position, $task ); } $message = sprintf( __( 'The tag group with the label \'%s\' has been saved!', 'tag-groups' ), $label ); } break; case "delete": if ( ! empty( $position ) && $tg_group->find_by_position( $position ) ) { $message = sprintf( __( 'A tag group with the id %1$s and the label \'%2$s\' has been deleted.', 'tag-groups' ), $tg_group->get_group_id(), $tg_group->get_label() ); $tg_group->delete(); } else { TagGroups_Admin::send_error( $response, 'error: invalid position: ' . $position, $task ); } break; case "up": if ( $position > 1 && $tg_group->find_by_position( $position ) ) { if ( $tg_group->move_to_position( $position - 1 ) !== false ) { $tg_group->save(); } } break; case "down": if ( $position < $tag_group_groups->get_max_position() && $tg_group->find_by_position( $position ) ) { if ( $tg_group->move_to_position( $position + 1 ) !== false ) { $tg_group->save(); } } break; case "move": if ( $new_position < 1 ) { $new_position = 1; } if ( $new_position > $tag_group_groups->get_max_position() ) { $new_position = $tag_group_groups->get_max_position(); } if ( $position == $new_position ) { break; } if ( $tg_group->find_by_position( $position ) ) { if ( $tg_group->move_to_position( $new_position ) !== false ) { $tg_group->save(); } } break; case "refresh": // do nothing here break; case 'test': $response->add( array( 'data' => 'success', 'supplemental' => array( 'message' => 'This is the regular Ajax response.' ) ) ); $response->send(); exit(); break; } $number_of_term_groups = $tag_group_groups->get_number_of_term_groups() - 1; // "not assigned" won't be displayed if ( $start_position > $number_of_term_groups ) { $start_position = $number_of_term_groups; } $items_per_page = self::get_items_per_page(); // calculate start and end positions $start_position = floor( ($start_position - 1) / $items_per_page ) * $items_per_page + 1; if ( $start_position + $items_per_page - 1 < $number_of_term_groups ) { $end_position = $start_position + $items_per_page - 1; } else { $end_position = $number_of_term_groups; } $response->add( array( 'data' => 'success', 'supplemental' => array( 'task' => $task, 'message' => $message, 'nonce' => wp_create_nonce( 'tg_groups_management' ), 'start_position' => $start_position, 'groups' => json_encode( TagGroups_Admin::group_table( $start_position, $end_position, $taxonomy ) ), 'max_number' => $number_of_term_groups ), )); } else { TagGroups_Admin::send_error( $response, 'Security check', $task ); } $response->send(); exit(); } /** * Rerturns an error message to AJAX */ static function send_error( $response, $message = 'error', $task = 'unknown' ) { $response->add( array( 'data' => 'error', 'supplemental' => array( 'message' => $message, 'task' => $task, ) ) ); $response->send(); exit(); } /** * Assemble the content of the table of tag groups for AJAX */ static function group_table( $start_position, $end_position, $taxonomy ) { global $tag_group_groups; $data = $tag_group_groups->get_all_with_position_as_key(); $output = array(); if ( count( $data ) > 1 ) { for ( $i = $start_position; $i <= $end_position; $i++ ) { if ( ! empty( $data[ $i ] ) ) { $tg_group = new TagGroups_Group( $data[ $i ]['term_group'] ); array_push( $output, array( 'id' => $data[ $i ]['term_group'], 'label' => $data[ $i ]['label'], 'amount' => $tg_group->get_number_of_terms( $taxonomy ) ) ); } } } return $output; } /** * Outputs a table on a submenu page where you can add, delete, change tag groups, their labels and their order. * * @param void * @return void */ static function group_administration() { $tag_group_show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); //tags $tag_group_show_filter = get_option( 'tag_group_show_filter', 1 ); // posts if ( $tag_group_show_filter_tags || $tag_group_show_filter ) { $this_post_type = preg_replace( '/tag-groups_(.+)/', '$1', sanitize_title( $_GET['page'] ) ); } $first_enabled_taxonomy = ''; /** * Check if the tag filter is activated */ if ( $tag_group_show_filter_tags ) { // get first of taxonomies that are associated with that $post_type // $tg_taxonomies = get_option( 'tag_group_taxonomy', array('post_tag') ); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $taxonomy_names = get_object_taxonomies( $this_post_type ); $taxonomies = array_intersect( $enabled_taxonomies, $taxonomy_names ); /** * Show the link to the taxonomy filter only if there is only one taxonomy for this post type (otherwise ambiguous where to link) */ if ( ! empty( $taxonomies ) && count( $taxonomies ) == 1 ) { $first_enabled_taxonomy = reset( $taxonomies ); } } /** * In case we use the WPML plugin: consider the language */ if ( defined( 'ICL_LANGUAGE_CODE' ) ) { if ( 'all' == ICL_LANGUAGE_CODE ) { $wpml_piece = '&lang=' . (string) apply_filters( 'wpml_default_language', NULL ); } else { $wpml_piece = '&lang=' . (string) ICL_LANGUAGE_CODE; } } else { $wpml_piece = ''; } $items_per_page = self::get_items_per_page(); $protocol = isset( $_SERVER['HTTPS'] ) ? 'https://' : 'http://'; $post_url = empty( $tag_group_show_filter ) ? '' : admin_url( 'edit.php?post_type=' . $this_post_type . $wpml_piece, $protocol ); $tags_url = empty( $first_enabled_taxonomy ) ? '' : admin_url( 'edit-tags.php?taxonomy=' . $first_enabled_taxonomy . $wpml_piece, $protocol ); $settings_url = admin_url( 'admin.php?page=tag-groups-settings' ); $admin_url = admin_url( 'admin-ajax.php', $protocol ); if ( isset( $_GET['lang'] ) ) { $admin_url = add_query_arg( 'lang', sanitize_key( $_GET['lang'] ), $admin_url ); } if ( defined( 'ICL_LANGUAGE_CODE' ) && ICL_LANGUAGE_CODE == 'all' ) { $view = new TagGroups_View( 'partials/language_notice' ); $view->render(); } $view = new TagGroups_View( 'admin/tag_groups_admin' ); $view->set( array( 'tag_group_show_filter' => $tag_group_show_filter, 'post_url' => $post_url, 'tags_url' => $tags_url, 'items_per_page' => $items_per_page, 'enabled_taxonomies' => $enabled_taxonomies, 'settings_url' => $settings_url, 'admin_url' => $admin_url ) ); $view->render(); } /** * * Modifies the query to retrieve tags for filtering in the backend. * * @param array $pieces * @param array $taxonomies * @param array $args * @return array */ static function terms_clauses( $pieces, $taxonomies, $args ) { global $tag_group_groups; $taxonomy = TagGroups_Base::get_first_element( $taxonomies ); if ( empty( $taxonomy ) || is_array( $taxonomy ) ) { $taxonomy = 'post_tag'; } $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); if ( $show_filter_tags ) { $tag_group_tags_filter = get_option( 'tag_group_tags_filter', array() ); if ( isset( $tag_group_tags_filter[ $taxonomy ] ) ) { $group_id = $tag_group_tags_filter[ $taxonomy ]; } else { $group_id = -1; } // check if group exists (could be deleted since last time the filter was set) if ( $group_id > $tag_group_groups->get_max_term_group() ) { $group_id = -1; } if ( $group_id > -1 ) { if ( ! class_exists('TagGroups_Premium_Group') ) { if ( ! empty( $pieces['where'] ) ) { $pieces['where'] .= sprintf( " AND t.term_group = %d ", $group_id ); } else { $pieces['where'] = sprintf( "t.term_group = %d ", $group_id ); } } else { $tg_group = new TagGroups_Premium_Group( $group_id ); $mq_sql = $tg_group->terms_clauses(); if ( ! empty( $pieces['join'] ) ) { $pieces['join'] .= $mq_sql['join']; } else { $pieces['join'] = $mq_sql['join']; } if ( ! empty( $pieces['where'] ) ) { $pieces['where'] .= $mq_sql['where']; } else { $pieces['where'] = $mq_sql['where']; } } } } return $pieces; } /** * Adds css to backend */ static function add_admin_js_css( $where ) { if ( strpos( $where, 'tag-groups-settings' ) !== false ) { wp_enqueue_script( 'jquery' ); wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-accordion' ); wp_register_style( 'tag-groups-css-backend-tgb', TAG_GROUPS_PLUGIN_URL . '/assets/css/backend.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'tag-groups-css-backend-tgb' ); wp_register_style( 'tag-groups-css-backend-structure', TAG_GROUPS_PLUGIN_URL . '/assets/css/jquery-ui.structure.min.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'tag-groups-css-backend-structure' ); wp_register_script( 'sumoselect-js', TAG_GROUPS_PLUGIN_URL . '/assets/js/jquery.sumoselect.min.js', array(), TAG_GROUPS_VERSION ); wp_enqueue_script( 'sumoselect-js' ); wp_register_style( 'sumoselect-css', TAG_GROUPS_PLUGIN_URL . '/assets/css/sumoselect.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'sumoselect-css' ); } elseif ( strpos( $where, '_page_tag-groups' ) !== false ) { wp_register_style( 'tag-groups-css-backend-tgb', TAG_GROUPS_PLUGIN_URL . '/assets/css/backend.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'tag-groups-css-backend-tgb' ); if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { wp_register_script( 'tag-groups-js-backend', TAG_GROUPS_PLUGIN_URL . '/assets/js/taggroups.js', array(), TAG_GROUPS_VERSION ); } else { wp_register_script( 'tag-groups-js-backend', TAG_GROUPS_PLUGIN_URL . '/assets/js/taggroups.min.js', array(), TAG_GROUPS_VERSION ); } wp_enqueue_script( 'tag-groups-js-backend' ); wp_enqueue_script( 'jquery-ui-sortable' ); wp_enqueue_script( 'jquery-ui-core' ); wp_enqueue_script( 'jquery-ui-accordion' ); } elseif ( strpos( $where, 'edit-tags.php' ) !== false || strpos( $where, 'term.php' ) !== false || strpos( $where, 'edit.php' ) !== false ) { wp_register_script( 'sumoselect-js', TAG_GROUPS_PLUGIN_URL . '/assets/js/jquery.sumoselect.min.js', array(), TAG_GROUPS_VERSION ); wp_enqueue_script( 'sumoselect-js' ); wp_register_style( 'sumoselect-css', TAG_GROUPS_PLUGIN_URL . '/assets/css/sumoselect.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'sumoselect-css' ); wp_register_style( 'tag-groups-css-backend-tgb', TAG_GROUPS_PLUGIN_URL . '/assets/css/backend.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'tag-groups-css-backend-tgb' ); } elseif ( strpos( $where, 'post-new.php' ) !== false || strpos( $where, 'post.php' ) !== false ) { wp_register_style( 'react-select-css', TAG_GROUPS_PLUGIN_URL . '/assets/css/react-select.css', array(), TAG_GROUPS_VERSION ); wp_enqueue_style( 'react-select-css' ); } } /** * Adds Settings link to plugin list * * @param array $links * @return array */ static function add_plugin_settings_link( $links ) { global $tag_groups_premium_fs_sdk; $settings_link = '<a href="' . admin_url( 'admin.php?page=tag-groups-settings' ) . '">' . __( 'Settings', 'tag-groups' ) . '</a>'; array_unshift( $links, $settings_link ); if ( empty( $tag_groups_premium_fs_sdk ) ) { $settings_link = '<a href="https://chattymango.com/tag-groups-premium/?pk_campaign=tg&pk_kwd=settings_link" target="_blank"><span style="color:#3A0;">' . __( 'Upgrade to Premium', 'tag-groups' ) . '</span></a>'; array_unshift( $links, $settings_link ); } return $links; } /** * Returns the items per page on the tag groups screen * * * @param void * @return int */ public static function get_items_per_page() { if ( class_exists( 'TagGroups_Premium_Admin' ) && method_exists( 'TagGroups_Premium_Admin', 'add_screen_option' ) ) { $items_per_page_all_users = get_option( 'tag_groups_per_page', array() ); $user = get_current_user_id(); if ( isset( $items_per_page_all_users[ $user ] ) ) { $items_per_page = intval( $items_per_page_all_users[ $user ] ); } if ( ! isset( $items_per_page_all_users[ $user ] ) || $items_per_page < 1 ) { $items_per_page = TAG_GROUPS_ITEMS_PER_PAGE; } } else { $items_per_page = TAG_GROUPS_ITEMS_PER_PAGE; } return $items_per_page; } /** * Add a warning if the WPML/Polylang language switch is set to "all" * * * @param void * @return void */ public static function add_language_notice() { $screen = get_current_screen(); if ( ! $screen || ( 'edit-tags' !== $screen->base && 'term' !== $screen->base ) ) { return; } $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); if ( ! in_array( $screen->taxonomy, $enabled_taxonomies ) ) { return; } if ( defined( 'ICL_LANGUAGE_CODE' ) && ICL_LANGUAGE_CODE == 'all' ) { $view = new TagGroups_View( 'partials/language_notice' ); $view->render(); } } /** * Add inline styling to the tags page * * @param void * @return void */ public static function add_tag_page_styling() { $view = new TagGroups_View( 'admin/tag_page_inline_style' ); $view->render(); } } // class } PK�������!�h5xq�q� ��include/admin/class.settings.phpnu�[��������<?php /** * @package Tag Groups * @author Christoph Amthor * @copyright 2018 Christoph Amthor (@ Chatty Mango, chattymango.com) * @license GPL-3.0+ */ if ( ! class_exists('TagGroups_Settings') ) { /** * */ class TagGroups_Settings { function __construct() { } /** * renders the top of all setting pages * * @param void * @return void */ public static function add_header() { $view = new TagGroups_View( 'admin/settings_header' ); $view->set( 'admin_page_title', get_admin_page_title() ); $view->render(); } /** * renders the bottom of all settings pages * * @param void * @return void */ public static function add_footer() { $view = new TagGroups_View( 'admin/settings_footer' ); $view->render(); } /** * gets the slug of the currently selected tab * * @param string $default * @return string */ public static function get_active_tab( $tabs ) { if ( isset( $_GET['active-tab'] ) ) { return sanitize_title( $_GET['active-tab'] ); } else { $keys = array_keys( $tabs ); return reset( $keys ); } } /** * gets the HTML of the header of tabbed view * * @param string $default * @return string */ public static function add_tabs( $page, $tabs, $active_tab ) { if ( count( $tabs ) < 2 ) { return empty( $label ) ? '' : '<h2>' . $label . '</h2>'; } $view = new TagGroups_View( 'admin/settings_tabs' ); $view->set( array( 'tabs' => $tabs, 'page' => $page, 'active_tab' => $active_tab ) ); $view->render(); } /** * renders a settings page: home * * @param void * @return void */ public static function settings_page_home() { global $tag_group_groups; // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); self::add_header(); $html = ''; $tg_group = new TagGroups_Group; $group_count = $tag_group_groups->get_number_of_term_groups(); $tag_group_base_first_activation_time = get_option( 'tag_group_base_first_activation_time', 0 ); $tag_group_premium_first_activation_time = get_option( 'tag_group_base_first_activation_time', 0 ); $absolute_first_activation_time = ( $tag_group_base_first_activation_time < $tag_group_premium_first_activation_time ) ? $tag_group_base_first_activation_time : $tag_group_premium_first_activation_time; self::add_settings_help(); $alerts = array(); if ( defined( 'ICL_LANGUAGE_CODE' ) && ICL_LANGUAGE_CODE == 'all' ) { $view = new TagGroups_View( 'partials/language_notice' ); $view->render(); } if ( time() - $absolute_first_activation_time < 60*60*24*7 || $group_count < 2 ) { $alerts[] = sprintf( __( 'See the <a %s>First Steps</a> for some basic instructions on how to get started.', 'tag-groups' ), 'href="' . menu_page_url( 'tag-groups-settings-first-steps', false ) . '"' ); } if ( function_exists( 'pll_get_post_language' ) ) { $alerts[] = __( 'We detected Polylang. Your tag group names are translatable.', 'tag-groups' ); } elseif ( defined( 'ICL_LANGUAGE_CODE' ) ) { $alerts[] = __( 'We detected WPML. Your tag group names are translatable.', 'tag-groups' ); } $alerts = apply_filters( 'tag_groups_settings_alerts', $alerts ); if ( ! empty( $alerts ) ) { $view = new TagGroups_View( 'admin/settings_alerts' ); $view->set( 'alerts', $alerts ); $view->render(); } $taxonomy_infos = array(); foreach ( $enabled_taxonomies as $taxonomy ) { /** * We try to avoid excessive loading times on this page */ $term_count = get_terms( array( 'hide_empty' => false, 'taxonomy' => $taxonomy, 'fields' => 'count' ) ); if ( is_object( $term_count ) ) { continue; } $taxonomy_infos[] = array( 'slug' => $taxonomy, 'tag_group_admin' => TagGroups_Taxonomy::get_tag_group_admin_url( $taxonomy ), 'name' => TagGroups_Taxonomy::get_name_from_slug( $taxonomy ), 'info_html' => TagGroups_Shortcode_Info::tag_groups_info( array( 'taxonomy' => $taxonomy, 'group_id' => 'all', 'html_class' => 'widefat fixed striped' ) ), 'term_count' => $term_count ); } $view = new TagGroups_View( 'admin/settings_home' ); $view->set( array( 'group_count' => $group_count, 'taxonomy_infos' => $taxonomy_infos ) ); $view->render(); self::add_footer(); } /** * renders a settings page: taxonomies * * @param void * @return void */ public static function settings_page_taxonomies() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $public_taxonomies = TagGroups_Taxonomy::get_public_taxonomies(); self::add_header(); $html = ''; self::add_settings_help(); $tabs = array(); $tabs['taxonomies'] = ''; $tabs = apply_filters( 'tag_groups_settings_taxonomies_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-taxonomies', $tabs, $active_tab ); switch ( $active_tab ) { case 'taxonomies': $view = new TagGroups_View( 'admin/settings_taxonomies' ); $view->set( array( 'public_taxonomies' => $public_taxonomies, 'enabled_taxonomies' => $enabled_taxonomies, ) ); $view->render(); break; default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a settings page: back end * * @param void * @return void */ public static function settings_page_back_end() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } $show_filter_posts = get_option( 'tag_group_show_filter', 1 ); $show_filter_tags = get_option( 'tag_group_show_filter_tags', 1 ); self::add_header(); self::add_settings_help(); $tabs = array(); $tabs['filters'] = __( 'Filters', 'tag-groups' ); $tabs = apply_filters( 'tag_groups_settings_back_end_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-back-end', $tabs, $active_tab ); switch ( $active_tab ) { case 'filters': $view = new TagGroups_View( 'admin/settings_back_end_filters' ); $view->set( array( 'show_filter_posts' => $show_filter_posts, 'show_filter_tags' => $show_filter_tags ) ); $view->render(); break; // filters default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a settings page: front end * * @param void * @return void */ public static function settings_page_front_end() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } $default_themes = explode( ',', TAG_GROUPS_BUILT_IN_THEMES ); $tag_group_theme = get_option( 'tag_group_theme', TAG_GROUPS_STANDARD_THEME ); $tag_group_mouseover = get_option( 'tag_group_mouseover', '' ); $tag_group_collapsible = get_option( 'tag_group_collapsible', '' ); $tag_group_enqueue_jquery = get_option( 'tag_group_enqueue_jquery', 1 ); $tag_group_html_description = get_option( 'tag_group_html_description', 0 ); $tag_group_shortcode_widget = get_option( 'tag_group_shortcode_widget' ); $tag_group_shortcode_enqueue_always = get_option( 'tag_group_shortcode_enqueue_always', 1 ); self::add_header(); self::add_settings_help(); $tabs = array(); $tabs['shortcodes'] = __( 'Shortcodes', 'tag-groups' ); $tabs['themes'] = __( 'Themes and Appearance', 'tag-groups' ); $tabs = apply_filters( 'tag_groups_settings_front_end_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-front-end', $tabs, $active_tab ); switch ( $active_tab ) { case 'shortcodes': /** * Let the premium plugin add own shortcode information. */ $premium_shortcode_info = apply_filters( 'tag_groups_hook_shortcodes', '' ); $view = new TagGroups_View( 'admin/settings_front_end_shortcodes' ); $view->set( array( 'premium_shortcode_info' => $premium_shortcode_info, 'tag_group_shortcode_enqueue_always' => $tag_group_shortcode_enqueue_always, 'tag_group_shortcode_widget' => $tag_group_shortcode_widget, ) ); $view->render(); break; case 'themes': $view = new TagGroups_View( 'admin/settings_front_end_themes' ); $view->set( array( 'default_themes' => $default_themes, 'tag_group_theme' => $tag_group_theme, 'tag_group_enqueue_jquery' => $tag_group_enqueue_jquery, 'tag_group_mouseover' => $tag_group_mouseover, 'tag_group_collapsible' => $tag_group_collapsible, 'tag_group_html_description' => $tag_group_html_description, ) ); $view->render(); break; default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a settings page: tools * * @param void * @return void */ public static function settings_page_tools() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } $tag_group_reset_when_uninstall = get_option( 'tag_group_reset_when_uninstall', 0 ); self::add_header(); self::add_settings_help(); $tabs = array(); $tabs['export_import'] = __( 'Export/Import', 'tag-groups' ); $tabs['reset'] = __( 'Reset', 'tag-groups' ); $tabs = apply_filters( 'tag_groups_settings_tools_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-tools', $tabs, $active_tab ); switch ( $active_tab ) { case 'export_import': $view = new TagGroups_View( 'admin/settings_tools_export_import' ); $view->render(); break; case 'reset': $view = new TagGroups_View( 'admin/settings_tools_reset' ); $view->set( 'tag_group_reset_when_uninstall', $tag_group_reset_when_uninstall ); $view->render(); break; default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a settings page: troubleshooting * * @param void * @return void */ public static function settings_page_troubleshooting() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } self::add_header(); self::add_settings_help(); $tabs = array(); $tabs['faq'] = __( 'FAQ and Common Issues', 'tag-groups' ); $tabs['documentation'] = __( 'Documentation', 'tag-groups' ); $tabs['support'] = __( 'Get Support', 'tag-groups' ); $tabs['system'] = __( 'System Information', 'tag-groups' ); $tabs = apply_filters( 'tag_groups_settings_troubleshooting_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-troubleshooting', $tabs, $active_tab ); switch ( $active_tab ) { case 'faq': $view = new TagGroups_View( 'admin/settings_troubleshooting_faq' ); $view->render(); break; case 'documentation': $view = new TagGroups_View( 'admin/settings_troubleshooting_documentation' ); $view->render(); break; case 'support': $view = new TagGroups_View( 'admin/settings_troubleshooting_support' ); $view->render(); break; case 'system': $phpversion = phpversion(); if ( version_compare( $phpversion, '7.0.0', '<' ) ) { $php_upgrade_recommendation = true; } else { $php_upgrade_recommendation = false; } $active_theme = wp_get_theme(); $protocol = isset( $_SERVER['HTTPS'] ) ? 'https://' : 'http://'; $ajax_test_url = admin_url( 'admin-ajax.php', $protocol ); /* constants */ $wp_constants = array( 'WP_DEBUG', 'WP_DEBUG_DISPLAY', 'WP_DEBUG_LOG', 'ABSPATH', // 'WP_HOME', 'MULTISITE', 'WP_CACHE', 'COMPRESS_SCRIPTS', // 'FS_CHMOD_DIR', // 'FS_CHMOD_FILE', 'FORCE_SSL_ADMIN', 'CM_UPDATE_CHECK', 'WP_MEMORY_LIMIT', 'WP_MAX_MEMORY_LIMIT' ); sort( $wp_constants ); $constants = get_defined_constants(); foreach ( $constants as &$constant ) { if ( isset( $constant ) ) { $constant = self::echo_var( $constant ); } } ksort( $constants ); $view = new TagGroups_View( 'admin/settings_troubleshooting_system' ); $view->set( array( 'phpversion' => $phpversion, 'php_upgrade_recommendation' => $php_upgrade_recommendation, 'wp_constants' => $wp_constants, 'constants' => $constants, 'ajax_test_url' => $ajax_test_url, 'active_theme' => $active_theme ) ); $view->render(); break; default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a settings page: premium * * @param void * @return void */ public static function settings_page_premium() { global $tag_groups_premium_fs_sdk; // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } self::add_header(); $view = new TagGroups_View( 'admin/settings_premium' ); $view->set( 'tag_groups_premium_fs_sdk', $tag_groups_premium_fs_sdk ); $view->render(); self::add_footer(); } /** * renders a settings page: about * * @param void * @return void */ public static function settings_page_about() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } self::add_header(); self::add_settings_help(); $tabs = array(); $tabs['info'] = __( 'Info', 'tag-groups' ); $tabs['licenses'] = __( 'Licenses', 'tag-groups' ); $tabs['news'] = __( 'Development News', 'tag-groups' ); $tabs = apply_filters( 'tag_groups_settings_about_tabs', $tabs ); $active_tab = self::get_active_tab( $tabs ); self::add_tabs( 'tag-groups-settings-about', $tabs, $active_tab ); switch ( $active_tab ) { case 'info': $view = new TagGroups_View( 'admin/settings_about_info' ); $view->render(); break; case 'licenses': $view = new TagGroups_View( 'admin/settings_about_licenses' ); $view->render(); break; case 'news': $protocol = isset( $_SERVER['HTTPS'] ) ? 'https://' : 'http://'; $admin_url = admin_url( 'admin-ajax.php', $protocol ); $view = new TagGroups_View( 'admin/settings_about_news' ); $view->set( 'admin_url', $admin_url ); $view->render(); break; default: if ( class_exists( 'TagGroups_Premium_Settings' ) ) { TagGroups_Premium_Settings::get_content( $active_tab ); } break; } self::add_footer(); } /** * renders a menu-less settings page: onboarding * * @param void * @return void */ public static function settings_page_onboarding() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { return; } global $tag_groups_premium_fs_sdk; self::add_header(); $settings_taxonomy_link = admin_url( 'admin.php?page=tag-groups-settings-taxonomies' ); $settings_home_link = admin_url( 'admin.php?page=tag-groups-settings' ); $settings_premium_link = admin_url( 'admin.php?page=tag-groups-settings-premium' ); $settings_setup_wizard_link = admin_url( 'admin.php?page=tag-groups-settings-setup-wizard' ); if ( defined('TAG_GROUPS_PLUGIN_IS_FREE') && TAG_GROUPS_PLUGIN_IS_FREE ) { $title = 'Tag Groups'; $documentation_link = 'https://documentation.chattymango.com/documentation/tag-groups/'; $logo = '<img src="' . TAG_GROUPS_PLUGIN_URL . '/assets/images/cm-tg-icon-64x64.png" alt="Tag Groups logo" class="tg_onboarding_logo"/>'; } else { $title = 'Tag Groups Premium'; $documentation_link = 'https://documentation.chattymango.com/documentation/tag-groups-premium/'; $logo = '<img src="' . TAG_GROUPS_PLUGIN_URL . '/assets/images/cm-tgp-icon-64x64.png" alt="Tag Groups Premium logo" class="tg_onboarding_logo"/>'; } $view = new TagGroups_View( 'admin/onboarding' ); $view->set( array( 'logo' => $logo, 'title' => $title, 'settings_taxonomy_link' => $settings_taxonomy_link, 'settings_home_link' => $settings_home_link, 'documentation_link' => $documentation_link, 'settings_premium_link' => $settings_premium_link, 'settings_setup_wizard_link' => $settings_setup_wizard_link ) ); $view->render(); self::add_footer(); } /** * renders a menu-less settings page: onboarding * * @param void * @return void */ public static function settings_page_setup_wizard() { // Make very sure that only administrators can access this page if ( ! current_user_can( 'manage_options' ) ) { return; } global $tag_groups_premium_fs_sdk, $tag_group_groups; self::add_header(); $step = isset( $_GET[ 'step' ] ) && $_GET[ 'step' ] > 0 ? (int) $_GET[ 'step' ] : 1; $setup_wizard_next_link = add_query_arg( 'step', $step + 1, admin_url( 'admin.php?page=tag-groups-settings-setup-wizard' ) ); if ( defined('TAG_GROUPS_PLUGIN_IS_FREE') && TAG_GROUPS_PLUGIN_IS_FREE ) { $title = 'Tag Groups'; $is_premium = false; $documentation_link = 'https://documentation.chattymango.com/documentation/tag-groups/'; } else { $title = 'Tag Groups Premium'; $is_premium = true; $documentation_link = 'https://documentation.chattymango.com/documentation/tag-groups-premium/'; } if ( $is_premium && $tag_groups_premium_fs_sdk->is_plan_or_trial('premium') ) { $steps = array( 1 => array( 'id' => 'start', 'title' => 'Start' ), 2 => array( 'id' => 'taxonomies', 'title' => 'Taxonomies' ), 3 => array( 'id' => 'meta_box', 'title' => 'Meta Box' ), 4 => array( 'id' => 'post_tags', 'title' => 'Post Tags' ), 5 => array( 'id' => 'sample_content', 'title' => 'Sample Content' ), 6 => array( 'id' => 'finished', 'title' => null ), ); } else { $steps = array( 1 => array( 'id' => 'start', 'title' => 'Start' ), 2 => array( 'id' => 'taxonomies', 'title' => 'Taxonomies' ), 3 => array( 'id' => 'sample_content', 'title' => 'Sample Content' ), 4 => array( 'id' => 'finished', 'title' => null ), ); } $view = new TagGroups_View( 'admin/setup_wizard_header' ); $view->set( array( 'title' => $title, 'step' => $step, 'steps' => $steps, ) ); $view->render(); switch ( $steps[ $step ]['id'] ) { case 'sample_content': $view = new TagGroups_View( 'admin/setup_wizard_sample_content' ); $group_names = array( 'Sample Group A', 'Sample Group B', 'Sample Group C' ); /** * Make sure they don't yet exist */ $group_names = array_map( function( $original_name ) { $tg_group = new TagGroups_Group(); $name = $original_name; $i = 0; while ( $tg_group->find_by_label( $name ) !== false ) { $i++; $name = $original_name . ' - ' . $i; } return $name; }, $group_names ); $tag_names = array( 'First Sample Tag', 'Second Sample Tag', 'Third Sample Tag' ); $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $taxonomy = array_shift( $enabled_taxonomies ); /** * Make sure they don't yet exist */ $tag_names = array_map( function( $original_name ) use ( $taxonomy ) { $name = $original_name; $i = 0; while ( get_term_by( 'name', $name, $taxonomy ) !== false ) { $i++; $name = $original_name . ' - ' . $i; } return $name; }, $tag_names ); $view->set( array( 'title' => $title, 'group_names' => $group_names, 'tag_names' => $tag_names, 'setup_wizard_next_link' => $setup_wizard_next_link ) ); break; case 'post_tags': // $groups = $tag_group_groups->get_all_with_position_as_key(); $tag_group_display_groups_under_posts = get_option( 'tag_group_display_groups_under_posts', $tag_group_groups->get_group_ids() ); $tag_group_display_groups_under_posts_title = get_option( 'tag_group_display_groups_under_posts_title', __( 'Tags', 'tag-groups' ) ); $tag_group_display_groups_under_posts_separator = get_option( 'tag_group_display_groups_under_posts_separator', '&nbsp;|&nbsp;' ); $tag_group_display_groups_under_posts_single = get_option( 'tag_group_display_groups_under_posts_single', false ); $tag_group_display_groups_under_posts_home = get_option( 'tag_group_display_groups_under_posts_home', false ); $tag_group_display_groups_under_posts_archive = get_option( 'tag_group_display_groups_under_posts_archive', false ); $tag_group_display_groups_under_posts_feed = get_option( 'tag_group_display_groups_under_posts_feed', false ); $tag_group_display_groups_under_posts_priority = get_option( 'tag_group_display_groups_under_posts_priority', 10 ); $tag_group_remove_the_post_terms = get_option( 'tag_group_remove_the_post_terms', false ); $view = new TagGroups_Premium_View( 'admin/setup_wizard_post_tags' ); $view->set( array( 'title' => $title, // 'groups' => $groups, 'tag_group_display_groups_under_posts' => $tag_group_display_groups_under_posts, 'tag_group_display_groups_under_posts_title' => $tag_group_display_groups_under_posts_title, 'tag_group_display_groups_under_posts_separator' => $tag_group_display_groups_under_posts_separator, 'tag_group_display_groups_under_posts_single' => $tag_group_display_groups_under_posts_single, 'tag_group_display_groups_under_posts_home' => $tag_group_display_groups_under_posts_home, 'tag_group_display_groups_under_posts_archive' => $tag_group_display_groups_under_posts_archive, 'tag_group_display_groups_under_posts_feed' => $tag_group_display_groups_under_posts_feed, 'tag_group_display_groups_under_posts_priority' => $tag_group_display_groups_under_posts_priority, 'tag_group_remove_the_post_terms' => $tag_group_remove_the_post_terms, 'setup_wizard_next_link' => $setup_wizard_next_link ) ); break; case 'meta_box': $tag_group_meta_box_change_group = get_option( 'tag_group_meta_box_change_group', 1 ); $tag_group_meta_box_add_term = get_option( 'tag_group_meta_box_add_term', 1 ); $tag_group_meta_box_open_all = get_option( 'tag_group_meta_box_open_all', 1 ); $tag_group_hide_tagsdiv = get_option( 'tag_group_hide_tagsdiv', 1 ); $tag_group_open_all_with_terms = get_option( 'tag_group_open_all_with_terms', 1 ); $tag_group_meta_box_taxonomy = get_option( 'tag_group_meta_box_taxonomy', array() ); $all_taxonomies = get_taxonomies( array( 'public' => true ), 'objects' ); $non_hierarchical_taxonomies_names = array(); foreach ( $all_taxonomies as $taxonomy ) { /** * We offer only non-hierarchical taxonomies */ if ( ! empty( $taxonomy ) && is_object( $taxonomy ) && ! $taxonomy->hierarchical ) { $non_hierarchical_taxonomies_names[] = $taxonomy->name; } } $taxonomies = array_intersect( get_option( 'tag_group_taxonomy', array() ), $non_hierarchical_taxonomies_names ); // No groups yet defined $tag_group_meta_box_include = get_option( 'tag_group_meta_box_include', $tag_group_groups->get_group_ids() ); $view = new TagGroups_Premium_View( 'admin/setup_wizard_meta_box' ); $view->set( array( 'title' => $title, 'taxonomies' => $taxonomies, 'tag_group_meta_box_include' => $tag_group_meta_box_include, 'tag_group_meta_box_change_group' => $tag_group_meta_box_change_group, 'tag_group_meta_box_add_term' => $tag_group_meta_box_add_term, 'tag_group_meta_box_open_all' => $tag_group_meta_box_open_all, 'tag_group_hide_tagsdiv' => $tag_group_hide_tagsdiv, 'tag_group_open_all_with_terms' => $tag_group_open_all_with_terms, 'tag_group_meta_box_taxonomy' => $tag_group_meta_box_taxonomy, 'setup_wizard_next_link' => $setup_wizard_next_link ) ); break; case 'taxonomies': $view = new TagGroups_View( 'admin/setup_wizard_taxonomies' ); $view->set( array( 'title' => $title, 'public_taxonomies' => TagGroups_Taxonomy::get_public_taxonomies(), 'enabled_taxonomies' => TagGroups_Taxonomy::get_enabled_taxonomies(), 'setup_wizard_next_link' => $setup_wizard_next_link ) ); break; case 'finished': $view = new TagGroups_View( 'admin/setup_wizard_finished' ); $documentation_link = $is_premium ? 'https://documentation.chattymango.com/documentation/tag-groups-premium/?pk_campaign=tgp&pk_kwd=wizard' : 'https://documentation.chattymango.com/documentation/tag-groups/?pk_campaign=tg&pk_kwd=wizard'; $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $taxonomy = array_shift( $enabled_taxonomies ); $view->set( array( 'groups_admin_link' => TagGroups_Taxonomy::get_tag_group_admin_url( $taxonomy ), 'documentation_link' => $documentation_link, 'settings_home_link' => admin_url( 'admin.php?page=tag-groups-settings' ), 'tag_group_sample_page_id' => get_option( 'tag_group_sample_page_id', 0 ) ) ); break; case 'start': default: $view = new TagGroups_View( 'admin/setup_wizard_start' ); $view->set( array( 'title' => $title, 'setup_wizard_next_link' => $setup_wizard_next_link, 'is_premium' => $is_premium ) ); break; } $view->render(); $view = new TagGroups_View( 'admin/setup_wizard_footer' ); $view->render(); self::add_footer(); } /** * Processes form submissions from the settings page * * @param void * @return void */ static function settings_page_actions_wizard() { global $tag_group_groups, $tag_groups_premium_fs_sdk; if ( empty( $_REQUEST['tg_action_wizard'] ) ) { return; } // Make very sure that only administrators can do actions if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } if ( ! isset( $_POST['tag-groups-setup-wizard-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-setup-wizard-nonce'], 'tag-groups-setup-wizard-nonce' ) ) { die( "Security check failed" ); } $enabled_taxonomies = TagGroups_Taxonomy::get_enabled_taxonomies(); $taxonomy = array_shift( $enabled_taxonomies ); switch ( $_REQUEST['tg_action_wizard'] ) { case 'taxonomy': if ( isset( $_POST['taxonomies'] ) ) { $taxonomies = $_POST['taxonomies']; if ( is_array( $taxonomies ) ) { $taxonomies = array_map( 'sanitize_text_field', $taxonomies ); $taxonomies = array_map( 'stripslashes', $taxonomies ); } else { $taxonomies = array( 'post_tag' ); } } else { $taxonomies = array( 'post_tag' ); } $public_taxonomies = TagGroups_Taxonomy::get_public_taxonomies(); foreach ( $taxonomies as $taxonomy_item ) { if ( ! in_array( $taxonomy_item, $public_taxonomies ) ) { return; } } update_option( 'tag_group_taxonomy', $taxonomies ); // trigger actions do_action( 'taxonomies_saved', $taxonomies ); if ( class_exists( 'TagGroups_Premium_Post' ) && ( ! defined( 'TAG_GROUPS_DISABLE_CACHE_REBUILD' ) || TAG_GROUPS_DISABLE_CACHE_REBUILD ) ) { // schedule rebuild of cache wp_schedule_single_event( time() + 10, 'tag_groups_rebuild_post_terms' ); } break; case 'meta-box': if ( isset( $_POST['taxonomies'] ) ) { $selected_taxonomies = $_POST['taxonomies']; } else { $selected_taxonomies = array(); } $taxonomies = TagGroups_Taxonomy::get_public_taxonomies(); foreach ( $selected_taxonomies as $taxonomy_item ) { $taxonomy_item = stripslashes( sanitize_text_field( $taxonomy_item ) ); if ( ! in_array( $taxonomy_item, $taxonomies ) ) { die( "Security check: taxonomies" ); } } update_option( 'tag_group_meta_box_taxonomy', $selected_taxonomies ); if ( isset( $_POST['tag_group_meta_box_include'] ) ) { $tag_group_meta_box_include = array_map( 'intval', array_values( $_POST['tag_group_meta_box_include'] ) ); } else { // We don't allow here to select none $tag_groups = $tag_group_groups->get_all_with_position_as_key(); $tag_group_ids = array_keys( $tag_groups ); $tag_group_meta_box_include = $tag_group_ids; update_option( 'tag_group_meta_box_include', $tag_group_ids ); if ( isset( $_POST['tag_group_meta_box_open_all'] ) ) { $tag_group_meta_box_open_all = $_POST['tag_group_meta_box_open_all'] ? 1 : 0; } else { $tag_group_meta_box_open_all = 0; } update_option( 'tag_group_meta_box_open_all', $tag_group_meta_box_open_all ); if ( isset( $_POST['tag_group_meta_box_add_term'] ) ) { $tag_group_meta_box_add_term = $_POST['tag_group_meta_box_add_term'] ? 1 : 0; } else { $tag_group_meta_box_add_term = 0; } update_option( 'tag_group_meta_box_add_term', $tag_group_meta_box_add_term ); if ( isset( $_POST['tag_group_hide_tagsdiv'] ) ) { $tag_group_hide_tagsdiv = $_POST['tag_group_hide_tagsdiv'] ? 1 : 0; } else { $tag_group_hide_tagsdiv = 1; } update_option( 'tag_group_hide_tagsdiv', $tag_group_hide_tagsdiv ); if ( isset( $_POST['tag_group_meta_box_change_group'] ) ) { $tag_group_meta_box_change_group = $_POST['tag_group_meta_box_change_group'] ? 1 : 0; } else { $tag_group_meta_box_change_group = 0; } update_option( 'tag_group_meta_box_change_group', $tag_group_meta_box_change_group ); if ( isset( $_POST['tag_group_open_all_with_terms'] ) ) { $tag_group_open_all_with_terms = $_POST['tag_group_open_all_with_terms'] ? 1 : 0; } else { $tag_group_open_all_with_terms = 0; } $return = update_option( 'tag_group_open_all_with_terms', $tag_group_open_all_with_terms ); TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.', 'tag-groups' ) ); } do_action( 'tag_groups_metabox_saved' ); break; case 'post-tags': if ( isset( $_POST['tag_group_display_groups_under_posts_title'] ) ) { $tag_group_display_groups_under_posts_title = sanitize_text_field( $_POST['tag_group_display_groups_under_posts_title'] ) ; } else { $tag_group_display_groups_under_posts_title = __( 'Tags', 'tag-groups' ); } update_option( 'tag_group_display_groups_under_posts_title', $tag_group_display_groups_under_posts_title ); if ( isset( $_POST['tag_group_display_groups_under_posts_priority'] ) ) { $tag_group_display_groups_under_posts_priority = intval( $_POST['tag_group_display_groups_under_posts_priority'] ) ; } else { $tag_group_display_groups_under_posts_priority = 10; } update_option( 'tag_group_display_groups_under_posts_priority', $tag_group_display_groups_under_posts_priority ); if ( isset( $_POST['tag_group_display_groups_under_posts_separator'] ) ) { // preserving space $tag_group_display_groups_under_posts_separator = wp_kses( $_POST['tag_group_display_groups_under_posts_separator'], array() ) ; // sanitize_textarea_field() trims spaces } else { $tag_group_display_groups_under_posts_separator = '&nbsp;|&nbsp;'; } update_option( 'tag_group_display_groups_under_posts_separator', $tag_group_display_groups_under_posts_separator ); if ( isset( $_POST['tag_group_display_groups_under_posts_single'] ) ) { $tag_group_display_groups_under_posts_single = intval( $_POST['tag_group_display_groups_under_posts_single'] ); } else { $tag_group_display_groups_under_posts_single = array(); } update_option( 'tag_group_display_groups_under_posts_single', $tag_group_display_groups_under_posts_single ); if ( isset( $_POST['tag_group_display_groups_under_posts_home'] ) ) { $tag_group_display_groups_under_posts_home = intval( $_POST['tag_group_display_groups_under_posts_home'] ); } else { $tag_group_display_groups_under_posts_home = array(); } update_option( 'tag_group_display_groups_under_posts_home', $tag_group_display_groups_under_posts_home ); if ( isset( $_POST['tag_group_display_groups_under_posts_archive'] ) ) { $tag_group_display_groups_under_posts_archive = intval( $_POST['tag_group_display_groups_under_posts_archive'] ); } else { $tag_group_display_groups_under_posts_archive = array(); } update_option( 'tag_group_display_groups_under_posts_archive', $tag_group_display_groups_under_posts_archive ); if ( isset( $_POST['tag_group_display_groups_under_posts_feed'] ) ) { $tag_group_display_groups_under_posts_feed = intval( $_POST['tag_group_display_groups_under_posts_feed'] ); } else { $tag_group_display_groups_under_posts_feed = array(); } update_option( 'tag_group_display_groups_under_posts_feed', $tag_group_display_groups_under_posts_feed ); if ( isset( $_POST['tag_group_remove_the_post_terms'] ) ) { $tag_group_remove_the_post_terms = intval( $_POST['tag_group_remove_the_post_terms'] ); } else { $tag_group_remove_the_post_terms = array(); } update_option( 'tag_group_remove_the_post_terms', $tag_group_remove_the_post_terms ); if ( isset( $_POST['tag_group_display_groups_under_posts'] ) ) { $tag_group_display_groups_under_posts = array_map( 'intval', array_values( $_POST['tag_group_display_groups_under_posts'] ) ); } else { $tag_group_display_groups_under_posts = array(); } // Evaluate "empty" as "all" if any of the page types was selected if ( count( $tag_group_display_groups_under_posts ) == 0 && ( $tag_group_display_groups_under_posts_single || $tag_group_display_groups_under_posts_home || $tag_group_display_groups_under_posts_archive || $tag_group_display_groups_under_posts_feed ) ) { $tag_group_display_groups_under_posts = $tag_group_groups->get_group_ids(); } update_option( 'tag_group_display_groups_under_posts', $tag_group_display_groups_under_posts ); do_action( 'tag_groups_post_tags_saved' ); break; case 'sample-content': $created_groups = array(); /** * Create groups */ if ( isset( $_POST['tag-groups-create-sample-groups'] ) && $_POST['tag-groups-create-sample-groups'] ) { foreach ( $_POST['tag_groups_group_names'] as $group_name ) { $tg_group = new TagGroups_Group(); $tg_group->create( null, sanitize_text_field( $group_name ) ); $created_groups[] = $tg_group->get_group_id(); } } /** * Create tags */ if ( isset( $_POST['tag-groups-create-sample-tags'] ) && $_POST['tag-groups-create-sample-tags'] ) { foreach ( $_POST['tag_groups_tag_names'] as $tag_name ) { $tag_name = sanitize_text_field( $tag_name ); if ( ! term_exists( $tag_name, $taxonomy ) ) { $term_array = wp_insert_term( $tag_name, $taxonomy ); $tg_term = new TagGroups_Term( $term_array['term_id'] ); if ( empty( $created_groups ) ) { $group_ids = $tag_group_groups->get_group_ids(); unset( $group_ids[0] ); } else { $group_ids = $created_groups; } if ( $tag_groups_premium_fs_sdk->can_use_premium_code() ) { $amount = mt_rand( 2, count( $group_ids ) ); } else { // add one group $amount = 1; } if ( 1 == $amount ) { $random_group_ids = $group_ids[ array_rand( $group_ids ) ]; } else { $random_group_ids = array_intersect_key( $group_ids, array_rand( $group_ids, $amount ) ); } $tg_term->add_group( $random_group_ids )->save(); } } } if ( isset( $_POST['tag-groups-create-sample-page'] ) && $_POST['tag-groups-create-sample-page'] ) { $view = new TagGroups_View( 'admin/sample_page' ); if ( defined('TAG_GROUPS_PLUGIN_IS_FREE') && TAG_GROUPS_PLUGIN_IS_FREE ) { $view->set( 'premium_shortcodes', false ); } else { $view->set( 'premium_shortcodes', true ); } $current_user = wp_get_current_user(); $view->set( array( 'enabled_taxonomies' => $enabled_taxonomies, 'author_display_name' => $current_user->display_name, 'tag_groups_premium_fs_sdk' => $tag_groups_premium_fs_sdk ) ); $content = $view->return_html(); $post_data = array( 'post_title' => wp_strip_all_tags( 'Tag Groups Sample Page' ), 'post_content' => $content, 'post_status' => 'draft', 'post_type' => 'page', 'post_author' => get_current_user_id(), ); $post_id = wp_insert_post( $post_data ); update_option( 'tag_group_sample_page_id', $post_id ); } else { delete_option( 'tag_group_sample_page_id' ); } break; } } /** * Processes form submissions from the settings page * * @param void * @return void */ static function settings_page_actions() { global $tag_group_groups; if ( ! empty( $_REQUEST['tg_action'] ) ) { $tg_action = $_REQUEST['tg_action']; } else { return; } // Make very sure that only administrators can do actions if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } if ( isset( $_GET['id'] ) ) { $tag_groups_id = (int) $_GET['id']; } else { $tag_groups_id = 0; } if ( isset( $_POST['ok'] ) ) { $ok = $_POST['ok']; } else { $ok = ''; } switch ( $tg_action ) { case 'shortcode': if ( ! isset( $_POST['tag-groups-shortcode-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-shortcode-nonce'], 'tag-groups-shortcode' ) ) { die( "Security check" ); } if ( isset( $_POST['widget'] ) && ($_POST['widget'] == '1') ) { update_option( 'tag_group_shortcode_widget', 1 ); } else { update_option( 'tag_group_shortcode_widget', 0 ); } if ( isset( $_POST['enqueue'] ) && ($_POST['enqueue'] == '1') ) { update_option( 'tag_group_shortcode_enqueue_always', 1 ); } else { update_option( 'tag_group_shortcode_enqueue_always', 0 ); } TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.', 'tag-groups' ) ); break; case 'reset': if ( ! isset( $_POST['tag-groups-reset-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-reset-nonce'], 'tag-groups-reset' ) ) { die( "Security check" ); } if ( $ok == 'yes' ) { $tag_group_groups->reset_groups(); /** * Remove filters */ delete_option( 'tag_group_tags_filter' ); TagGroups_Admin_Notice::add( 'success', __( 'All groups have been deleted and assignments reset.', 'tag-groups' ) ); } break; case 'uninstall': if ( ! isset( $_POST['tag-groups-uninstall-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-uninstall-nonce'], 'tag-groups-uninstall' ) ) { die( "Security check" ); } if ( $ok == 'yes' ) { update_option( 'tag_group_reset_when_uninstall', 1 ); } else { update_option( 'tag_group_reset_when_uninstall', 0 ); } TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.' ) ); break; case 'theme': if ( isset( $_POST['theme-name'] ) ) { $theme_name = stripslashes( sanitize_text_field( $_POST['theme-name'] ) ); } else { $theme_name = ''; } if ( isset( $_POST['theme'] ) ) { $theme = stripslashes( sanitize_text_field( $_POST['theme'] ) ); } else { $theme = ''; } if ( $theme == 'own' ) { $theme = $theme_name; } if ( ! isset( $_POST['tag-groups-settings-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-settings-nonce'], 'tag-groups-settings' ) ) { die( "Security check" ); } update_option( 'tag_group_theme', $theme ); $mouseover = (isset( $_POST['mouseover'] ) && $_POST['mouseover'] == '1') ? 1 : 0; $collapsible = (isset( $_POST['collapsible'] ) && $_POST['collapsible'] == '1') ? 1 : 0; $html_description = (isset( $_POST['html_description'] ) && $_POST['html_description'] == '1') ? 1 : 0; update_option( 'tag_group_mouseover', $mouseover ); update_option( 'tag_group_collapsible', $collapsible ); update_option( 'tag_group_html_description', $html_description ); $tag_group_enqueue_jquery = ( isset( $_POST['enqueue-jquery'] ) && $_POST['enqueue-jquery'] == '1' ) ? 1 : 0; update_option( 'tag_group_enqueue_jquery', $tag_group_enqueue_jquery ); // TagGroups_Admin::clear_cache(); TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.' ) ); do_action( 'tag_groups_theme_saved' ); break; case 'taxonomy': if ( ! isset( $_POST['tag-groups-taxonomy-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-taxonomy-nonce'], 'tag-groups-taxonomy' ) ) { die( "Security check" ); } if ( isset( $_POST['taxonomies'] ) ) { $taxonomies = $_POST['taxonomies']; if ( is_array( $taxonomies ) ) { $taxonomies = array_map( 'sanitize_text_field', $taxonomies ); $taxonomies = array_map( 'stripslashes', $taxonomies ); } else { $taxonomies = array( 'post_tag' ); } } else { $taxonomies = array( 'post_tag' ); } $public_taxonomies = TagGroups_Taxonomy::get_public_taxonomies(); foreach ( $taxonomies as $taxonomy_item ) { if ( ! in_array( $taxonomy_item, $public_taxonomies ) ) { die( "Security check: taxonomies" ); } } update_option( 'tag_group_taxonomy', $taxonomies ); // trigger actions do_action( 'taxonomies_saved', $taxonomies ); if ( class_exists( 'TagGroups_Premium_Post' ) && ( ! defined( 'TAG_GROUPS_DISABLE_CACHE_REBUILD' ) || TAG_GROUPS_DISABLE_CACHE_REBUILD ) ) { // schedule rebuild of cache wp_schedule_single_event( time() + 10, 'tag_groups_rebuild_post_terms' ); } TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.' ) ); break; case 'backend': if ( ! isset( $_POST['tag-groups-backend-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-backend-nonce'], 'tag-groups-backend' ) ) { die( "Security check" ); } $show_filter_posts = isset( $_POST['filter_posts'] ) ? 1 : 0; update_option( 'tag_group_show_filter', $show_filter_posts ); $show_filter_tags = isset( $_POST['filter_tags'] ) ? 1 : 0; update_option( 'tag_group_show_filter_tags', $show_filter_tags ); TagGroups_Admin_Notice::add( 'success', __( 'Your settings have been saved.' ) ); break; case 'export': if ( ! isset( $_POST['tag-groups-export-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-export-nonce'], 'tag-groups-export' ) ) { die( "Security check" ); } $options = array( 'name' => 'tag_groups_options', 'version' => TAG_GROUPS_VERSION, 'date' => current_time( 'mysql' ) ); $tg_options = new TagGroups_Options(); $option_names = $tg_options->get_option_names(); foreach ( $option_names as $key => $value ) { if ( $option_names[ $key ][ 'export' ] ) { $options[ $key ] = get_option( $key ); } } // generate array of all terms $terms = get_terms( array( 'hide_empty' => false, ) ); $cm_terms = array( 'name' => 'tag_groups_terms', 'version' => TAG_GROUPS_VERSION, 'date' => current_time( 'mysql' ) ); $cm_terms['terms'] = array(); $tag_group_taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); foreach ( $terms as $term ) { if ( in_array( $term->taxonomy, $tag_group_taxonomy ) ) { if ( class_exists('TagGroups_Premium_Term') && get_term_meta( $term->term_id, '_cm_term_group_array', true ) != '' ) { $term_group = explode( ',', get_term_meta( $term->term_id, '_cm_term_group_array', true ) ); } else { $term_group = $term->term_group; } $cm_terms['terms'][] = array( 'term_id' => $term->term_id, 'name' => $term->name, 'slug' => $term->slug, 'term_group' => $term_group, 'term_taxonomy_id' => $term->term_taxonomy_id, 'taxonomy' => $term->taxonomy, 'description' => $term->description, 'parent' => $term->parent, 'count' => $term->count, 'filter' => $term->filter, 'meta' => $term->meta, ); } } /** * Writing file */ try { // misusing the password generator to get a hash $hash = wp_generate_password( 10, false ); /* * Write settings/groups and tags separately */ $fp = fopen( WP_CONTENT_DIR . '/uploads/tag_groups_settings-' . $hash . '.json', 'w' ); fwrite( $fp, json_encode( $options ) ); fclose( $fp ); $fp = fopen( WP_CONTENT_DIR . '/uploads/tag_groups_terms-' . $hash . '.json', 'w' ); fwrite( $fp, json_encode( $cm_terms ) ); fclose( $fp ); TagGroups_Admin_Notice::add( 'success', __( 'Your settings/groups and your terms have been exported. Please download the resulting files with right-click or ctrl-click:', 'tag-groups' ) . ' <p> <a href="' . get_bloginfo( 'wpurl' ) . '/wp-content/uploads/tag_groups_settings-' . $hash . '.json" target="_blank">tag_groups_settings-' . $hash . '.json</a> </p>' . ' <p> <a href="' . get_bloginfo( 'wpurl' ) . '/wp-content/uploads/tag_groups_terms-' . $hash . '.json" target="_blank">tag_groups_terms-' . $hash . '.json</a> </p>' ); } catch ( Exception $e ) { TagGroups_Admin_Notice::add( 'error', __( 'Writing of the exported settings failed.', 'tag-groups' ) ); } break; case 'import': if ( ! isset( $_POST['tag-groups-import-nonce'] ) || ! wp_verify_nonce( $_POST['tag-groups-import-nonce'], 'tag-groups-import' ) ) { die( "Security check" ); } // Make very sure that only administrators can upload stuff if ( ! current_user_can( 'manage_options' ) ) { die( "Capability check failed" ); } if ( ! isset( $_FILES['settings_file'] ) ) { die( "File missing" ); } if ( ! function_exists( 'wp_handle_upload' ) ) { require_once ABSPATH . 'wp-admin/includes/file.php'; } $settings_file = $_FILES['settings_file']; // Check file name, but allow for some additional characters in file name since downloading multiple times may add something to the original name. // Allow extension txt for backwards compatibility preg_match( '/^tag_groups_settings-\w{10}[\w,\s-]*\.((txt)|(json))$/', $_FILES['settings_file']['name'], $matches_settings ); preg_match( '/^tag_groups_terms-\w{10}[\w,\s-]*\.json$/', $_FILES['settings_file']['name'], $matches_terms ); if ( ! empty( $matches_settings ) && ! empty( $matches_settings[0] ) && $matches_settings[0] == $_FILES['settings_file']['name'] ) { $contents = @file_get_contents( $settings_file['tmp_name'] ); if ( $contents === false ) { TagGroups_Admin_Notice::add( 'error', __( 'Error reading the file.', 'tag-groups' ) ); } else { $options = @json_decode( $contents , true); if ( empty( $options ) || !is_array( $options ) || $options['name'] != 'tag_groups_options' ) { TagGroups_Admin_Notice::add( 'error', __( 'Error parsing the file.', 'tag-groups' ) ); } else { $tg_options = new TagGroups_Options(); $option_names = $tg_options->get_option_names(); $changed = 0; // import only whitelisted options foreach ( $option_names as $key => $value ) { if ( isset( $options[ $key ] ) ) { $changed += update_option( $key, $options[ $key ] ) ? 1 : 0; } } if ( ! isset( $options['date'] ) ) { $options['date'] = ' - ' . __( 'date unknown', 'tag-groups' ) . ' - '; } TagGroups_Admin_Notice::add( 'success', sprintf( __( 'Your settings and groups have been imported from the file %1$s (created with plugin version %2$s on %3$s).', 'tag-groups' ), '<b>' . $_FILES['settings_file']['name'] . '</b>', $options['version'], $options['date'] ) . '</p><p>' . sprintf( _n( '%d option was added or changed.','%d options were added or changed.', $changed, 'tag-groups' ), $changed ) ); do_action( 'tag_groups_settings_imported' ); } } } elseif ( ! empty( $matches_terms ) && ! empty( $matches_terms[0] ) && $matches_terms[0] == $_FILES['settings_file']['name'] ) { $contents = @file_get_contents( $settings_file['tmp_name'] ); if ( $contents === false ) { TagGroups_Admin_Notice::add( 'error', __( 'Error reading the file.', 'tag-groups' ) ); } else { $terms = @json_decode( $contents , true); if ( empty( $terms ) || !is_array( $terms ) || $terms['name'] != 'tag_groups_terms' ) { TagGroups_Admin_Notice::add( 'error', __( 'Error parsing the file.', 'tag-groups' ) ); } else { $changed = 0; foreach ( $terms['terms'] as $term ) { // change only terms with the same name, else create new one if ( ! term_exists( $term['term_id'], $term['taxonomy'] ) ) { $inserted_term = wp_insert_term( $term['name'], $term['taxonomy'] ); if ( is_array( $inserted_term ) ) { if ( is_array( $term['term_group'] ) && class_exists( 'TagGroups_Premium_Term' ) ) { TagGroups_Premium_Term::save( $inserted_term['term_id'], $term['taxonomy'], $term['term_group'] ); unset( $term['term_group'] ); } $result = wp_update_term( $inserted_term['term_id'], $term['taxonomy'], $term ); if ( is_array( $result ) ) { $changed++; } } } else { $result = wp_update_term( $term['term_id'], $term['taxonomy'], $term ); if ( is_array( $result ) ) { $changed++; } } } if ( ! isset( $terms['date'] ) ) { $terms['date'] = ' - ' . __( 'date unknown', 'tag-groups' ) . ' - '; } TagGroups_Admin_Notice::add( 'success', sprintf( __( 'Your terms have been imported from the file %1$s (created with plugin version %2$s on %3$s).', 'tag-groups' ), '<b>' . $_FILES['settings_file']['name'] . '</b>', $terms['version'], $terms['date'] ) . '</p><p>' . sprintf( _n( '%d term was added or updated.','%d terms were added or updated.', $changed, 'tag-groups' ), $changed ) ); do_action( 'tag_groups_terms_imported' ); } } } else { if ( ! empty( $_FILES['settings_file']['name'] ) ) { $file_info = ' ' . $_FILES['settings_file']['name']; } else { $file_info = ''; } TagGroups_Admin_Notice::add( 'error', __( 'Error uploading the file.', 'tag-groups' ) . $file_info ); } break; default: // hook for premium plugin do_action( 'tag_groups_hook_settings_action', $tg_action ); break; } } /** * Prepares variable for echoing as string * * * @param mixed $var Mixed type that needs to be echoed as string. * @return return string */ private static function echo_var( $var = null ) { if ( is_bool( $var ) ) { return $var ? 'true' : 'false'; } elseif ( is_array( $var ) ) { return print_r( $var, true ); } else { return (string) $var; } } /** * Returns an array that contains topics covered in the settings * * @param void * @return array */ public static function get_setting_topics() { $public_taxonomies_slugs = TagGroups_Taxonomy::get_public_taxonomies(); $public_taxonomies_names = array_map( array( 'TagGroups_Taxonomy', 'get_name_from_slug' ), $public_taxonomies_slugs ); $topics = array( 'taxonomies' => array( 'title' => __( 'Taxonomies', 'tag-groups' ), 'page' => 'tag-groups-settings-taxonomies', 'keywords' => array_merge( array_keys( $public_taxonomies_names ), array_values( $public_taxonomies_names ), array( __( 'tag groups', 'tag-groups' ), ) ), ), 'shortcodes' => array( 'title' => __( 'Shortcodes', 'tag-groups' ), 'page' => 'tag-groups-settings-front-end' , 'keywords' => array( __( 'tag cloud', 'tag-groups' ), __( 'group info', 'tag-groups' ), __( 'sidebar widget', 'tag-groups' ), __( 'accordion', 'tag-groups' ), __( 'tabs', 'tag-groups' ), __( 'alphabetical', 'tag-groups' ), __( 'post list', 'tag-groups' ), 'Gutenberg', ), ), 'themes' => array( 'title' => __( 'Themes and Appearance', 'tag-groups' ), 'page' => 'tag-groups-settings-front-end' , 'keywords' => array( __( 'tag cloud', 'tag-groups' ), 'CSS', 'style', 'HTML', __( 'colors', 'tag-groups' ), __( 'tag description', 'tag-groups' ), ), ), 'filters' => array( 'title' => __( 'Filters', 'tag-groups' ), 'page' => 'tag-groups-settings-back-end' , 'keywords' => array( __( 'tag filter', 'tag-groups' ), __( 'post filter', 'tag-groups' ), ), ), 'export_import' => array( 'title' => __( 'Export/Import', 'tag-groups' ), 'page' => 'tag-groups-settings-tools' , 'keywords' => array( __( 'backup', 'tag-groups' ), ), ), 'reset' => array( 'title' => __( 'Reset', 'tag-groups' ), 'page' => 'tag-groups-settings-tools' , 'keywords' => array( __( 'remove plugin', 'tag-groups' ), __( 'remove data', 'tag-groups' ), __( 'delete groups', 'tag-groups' ), ), ), 'faq' => array( 'title' => __( 'FAQ and Common Issues', 'tag-groups' ), 'page' => 'tag-groups-settings-troubleshooting' , 'keywords' => array( __( 'frequently asked questions', 'tag-groups' ), __( 'help', 'tag-groups' ), __( 'bug', 'tag-groups' ), __( 'problem', 'tag-groups' ), __( 'troubleshooting', 'tag-groups' ), __( 'support', 'tag-groups' ), ), ), 'documentation' => array( 'title' => __( 'Documentation', 'tag-groups' ), 'page' => 'tag-groups-settings-troubleshooting' , 'keywords' => array( __( 'instructions', 'tag-groups' ), __( 'help', 'tag-groups' ), __( 'problem', 'tag-groups' ), __( 'troubleshooting', 'tag-groups' ), __( 'support', 'tag-groups' ), 'Gutenberg', 'CSS', 'style', 'PHP', 'REST API' ), ), 'support' => array( 'title' => __( 'Get Support', 'tag-groups' ), 'page' => 'tag-groups-settings-troubleshooting' , 'keywords' => array( __( 'support', 'tag-groups' ), __( 'contact', 'tag-groups' ), __( 'forum', 'tag-groups' ), __( 'bug', 'tag-groups' ), __( 'problem', 'tag-groups' ), __( 'help', 'tag-groups' ), ), ), 'system' => array( 'title' => __( 'System Information', 'tag-groups' ), 'page' => 'tag-groups-settings-troubleshooting' , 'keywords' => array( __( 'debugging', 'tag-groups' ), __( 'PHP Version', 'tag-groups' ), __( 'Ajax Test', 'tag-groups' ), __( 'troubleshooting', 'tag-groups' ), ), ), 'premium' => array( 'title' => __( 'Premium', 'tag-groups' ), 'page' => 'tag-groups-settings-premium' , 'keywords' => array( __( 'upgrade', 'tag-groups' ), __( 'more groups', 'tag-groups' ), __( 'posts', 'tag-groups' ), __( 'tag cloud', 'tag-groups' ), __( 'filter', 'tag-groups' ), 'WooCommerce' ), ), 'info' => array( 'title' => __( 'Info', 'tag-groups' ), 'page' => 'tag-groups-settings-about' , 'keywords' => array( __( 'author', 'tag-groups' ), __( 'version', 'tag-groups' ), __( 'contact', 'tag-groups' ), __( 'about', 'tag-groups' ), ), ), 'licenses' => array( 'title' => __( 'Licenses', 'tag-groups' ), 'page' => 'tag-groups-settings-about' , 'keywords' => array( __( 'Credits', 'tag-groups' ), ), ), 'news' => array( 'title' => __( 'Development News', 'tag-groups' ), 'page' => 'tag-groups-settings-about' , 'keywords' => array( __( 'blog', 'tag-groups'), __( 'updates', 'tag-groups' ), ), ), 'getting_started' => array( 'title' => __( 'First Steps', 'tag-groups' ), 'page' => 'tag-groups-settings-first-steps' , 'keywords' => array( __( 'getting started', 'tag-groups' ), __( 'introduction', 'tag-groups' ), __( 'help', 'tag-groups' ), ), ), 'setup_wizard' => array( 'title' => __( 'Setup Wizard', 'tag-groups' ), 'page' => 'tag-groups-settings-setup-wizard' , 'keywords' => array( __( 'getting started', 'tag-groups' ), __( 'introduction', 'tag-groups' ), __( 'sample', 'tag-groups' ), ), ), ); $topics = apply_filters( 'tag_groups_setting_topics' , $topics ); return $topics; } /** * Renders the widget where you can search for help * * @param void * @return void */ public static function add_settings_help() { $topics = self::get_setting_topics(); asort( $topics ); $view = new TagGroups_View( 'admin/settings_help' ); $view->set( 'topics', $topics ); $view->render(); } } } PK�������!�7be'��'����wp-tag-groups.phpnu�[��������<?php /** * * Plugin Name: WordPress Tag Groups * Plugin URI: https://chattymango.com/wp-tag-groups/ * Description: Organize your tags in groups and display them in highly customizable tag clouds (tabs, accordion and more). * Author: Chatty Mango * Author URI: https://chattymango.com/ * Version: 1.22.0 * License: GNU GENERAL PUBLIC LICENSE, Version 3 * Text Domain: wp-tag-groups * Domain Path: /languages */ // keep the following line for automatic processing // define( "CM_TGP_KERNL_UUID", '' ); // Don't call this file directly if ( !defined( 'ABSPATH' ) ) { die; } if ( function_exists( 'tag_groups_premium_fs_sdk' ) ) { tag_groups_premium_fs_sdk()->set_basename( false, __FILE__ ); return; } if ( !defined( 'TAG_GROUPS_PLUGIN_IS_FREE' ) ) { if ( plugin_basename( __FILE__ ) == 'wp-tag-groups/wp-tag-groups.php' ) { define( 'TAG_GROUPS_PLUGIN_IS_FREE', true ); } else { // Don't define the constant! If the premium plugin runs earlier, the free plugin still needs a chance to define it. } } if ( !defined( 'TAG_GROUPS_PLUGIN_IS_KERNL' ) ) { if ( defined( 'CM_TGP_KERNL_UUID' ) && CM_TGP_KERNL_UUID != '' || defined( 'CM_TGP_BETA_PLUGIN_UUID' ) && CM_TGP_BETA_PLUGIN_UUID != '' ) { define( 'TAG_GROUPS_PLUGIN_IS_KERNL', true ); } else { define( 'TAG_GROUPS_PLUGIN_IS_KERNL', false ); } } if ( !defined( 'TAG_GROUPS_PLUGIN_BASENAME' ) ) { /** * The plugin's relative path (starting below the plugin directory), including the name of this file. */ define( "TAG_GROUPS_PLUGIN_BASENAME", plugin_basename( __FILE__ ) ); /** * The required minimum version of WordPress. */ define( "TAG_GROUPS_MINIMUM_VERSION_WP", "4.0" ); /** * Comma-separated list of default themes that come bundled with this plugin. */ define( "TAG_GROUPS_BUILT_IN_THEMES", "ui-gray,ui-lightness,ui-darkness,blitzer,aristo" ); /** * The theme that is selected by default. Must be among TAG_GROUPS_BUILT_IN_THEMES. */ define( "TAG_GROUPS_STANDARD_THEME", "ui-gray" ); /** * The default number of groups on one page on the edit group screen. */ define( "TAG_GROUPS_ITEMS_PER_PAGE", 20 ); /** * This plugin's last piece of the path, i.e. basically the plugin's name */ define( "TAG_GROUPS_PLUGIN_RELATIVE_PATH", basename( dirname( __FILE__ ) ) ); /** * This plugin's absolute path on this server - starting from root. */ define( "TAG_GROUPS_PLUGIN_ABSOLUTE_PATH", dirname( __FILE__ ) ); /** * The path to the premium plugin main file. * Codester-default was wp-tag-groups-premium.php, Freemium-generated is wp-tag-groups.php */ // use: WP_PLUGIN_DIR . '/' . TAG_GROUPS_PLUGIN_BASENAME /** * The full URL (including protocol) of the RSS channel that informas about updates. */ define( "TAG_GROUPS_UPDATES_RSS_URL", "https://chattymango.com/category/updates/wp-tag-groups-free/feed/" ); } /** * Make scope of $tag_groups_loader global for wp-cli */ global $tag_groups_loader ; require_once dirname( __FILE__ ) . '/include/class.loader.php'; $tag_groups_loader = new TagGroups_Loader( TAG_GROUPS_PLUGIN_ABSOLUTE_PATH ); $tag_groups_loader->require_classes(); // Load the Freemius SDK only if we don't have the Kernl update SDK if ( !TAG_GROUPS_PLUGIN_IS_KERNL && !function_exists( 'tag_groups_premium_fs_sdk' ) ) { // Create a helper function for easy SDK access. function tag_groups_premium_fs_sdk() { global $tag_groups_premium_fs_sdk ; if ( !isset( $tag_groups_premium_fs_sdk ) ) { // Include Freemius SDK. require_once dirname( __FILE__ ) . '/vendor/freemius/start.php'; $tag_groups_premium_fs_sdk = fs_dynamic_init( array( 'id' => '3545', 'slug' => 'wp-tag-groups', 'type' => 'plugin', 'public_key' => 'pk_de9caa44b85150adcf7406ad2e895', 'is_premium' => false, 'has_addons' => false, 'has_paid_plans' => true, 'trial' => array( 'days' => 7, 'is_require_payment' => true, ), 'menu' => array( 'slug' => 'wp-tag-groups-settings', 'first-path' => 'admin.php?page=wp-tag-groups-settings-first-steps', 'contact' => false, ), 'is_live' => true, ) ); } return $tag_groups_premium_fs_sdk; } // Init Freemius. tag_groups_premium_fs_sdk(); // Signal that SDK was initiated. do_action( 'tag_groups_premium_fs_sdk_loaded' ); global $tag_groups_premium_fs_sdk ; $tag_groups_premium_fs_sdk->add_filter( 'show_first_trial_after_n_sec', array( 'TagGroups_Base', 'change_time_show_first_trial' ) ); $tag_groups_premium_fs_sdk->add_filter( 'reshow_trial_after_every_n_sec', array( 'TagGroups_Base', 'change_time_reshow_trial' ) ); $tag_groups_premium_fs_sdk->add_filter( 'show_admin_notice', array( 'TagGroups_Base', 'change_show_admin_notice' ), 10, 2 ); if ( !TAG_GROUPS_PLUGIN_IS_KERNL ) { $tag_groups_premium_fs_sdk->add_action( 'after_uninstall', array( 'TagGroups_Activation_Deactivation', 'on_uninstall' ) ); } } else { global $tag_groups_premium_fs_sdk ; if ( empty($tag_groups_premium_fs_sdk) ) { $tag_groups_premium_fs_sdk = new FS_SDK_Kernl(); } } if ( !function_exists( 'tag_groups_init' ) ) { /** * Do all initial stuff: register hooks, check dependencies * * * @param void * @return void */ function tag_groups_init() { global $tag_groups_premium_fs_sdk, $tag_groups_loader ; // global $tagGroups_Base_instance; if ( plugin_basename( __FILE__ ) != 'wp-tag-groups/wp-tag-groups.php' ) { // TGP-Codester or TGP-Freemius if ( defined( 'TAG_GROUPS_PLUGIN_IS_FREE' ) && TAG_GROUPS_PLUGIN_IS_FREE ) { /** * The free version is also active. */ /** * Make sure we don't delete data by removing the base plugin by returning data removal to opt-in: * Set the option to OFF and keep, because removing the plugin might only happen later. */ update_option( 'tag_group_reset_when_uninstall', 0 ); require_once ABSPATH . 'wp-admin/includes/plugin.php'; deactivate_plugins( 'wp-tag-groups/wp-tag-groups.php', true ); // add the hook directly add_action( 'admin_notices', function () { echo '<div class="notice notice-info is-dismissible"><p>' . __( 'The free Tag Groups plugin cannot be active together with Tag Groups Premium.', 'wp-tag-groups' ) . ' <a href="https://documentation.chattymango.com/documentation/wp-tag-groups-premium/messages/the-free-wp-tag-groups-plugin-cannot-be-active-together-with-this-version-of-wp-tag-groups-premium/" target="_blank" style="text-decoration: none;" title="' . __( 'more information', 'wp-tag-groups' ) . '"><span class="dashicons dashicons-editor-help"></span></a></p></div><div clear="all" /></div>' ; } ); /** * Remove the misleading "Plugin activated" messaage */ unset( $_GET['activate'] ); } } // URL must be defined after WP has finished loading its settings if ( !defined( 'TAG_GROUPS_PLUGIN_URL' ) ) { define( "TAG_GROUPS_PLUGIN_URL", plugins_url( '', __FILE__ ) ); // start all initializations, registration of hooks, housekeeping, menus, ... $tag_groups_loader->set_version(); $tag_groups_loader->check_preconditions(); $tag_groups_loader->provide_globals(); $tag_groups_loader->add_hooks(); $tag_groups_loader->register_shortcodes_and_blocks(); $tag_groups_loader->register_REST_API(); } } add_action( 'plugins_loaded', 'tag_groups_init' ); register_activation_hook( __FILE__, array( $tag_groups_loader, 'on_activation' ) ); } if ( !function_exists( 'tag_groups_cloud' ) && class_exists( 'TagGroups_Shortcode_Tabs' ) ) { /** * * Wrapper for the static method tag_groups_cloud * * @param array $atts * @param bool $return_array * @return string */ function tag_groups_cloud( $atts = array(), $return_array = false ) { return TagGroups_Shortcode_Tabs::tag_groups_cloud( $atts, $return_array ); } } if ( !function_exists( 'tag_groups_accordion' ) && class_exists( 'TagGroups_Shortcode_Accordion' ) ) { /** * * Wrapper for the static method tag_groups_accordion * * @param array $atts * @return string */ function tag_groups_accordion( $atts = array() ) { return TagGroups_Shortcode_Accordion::tag_groups_accordion( $atts ); } } if ( !function_exists( 'post_in_tag_group' ) ) { /** * Checks if the post with $post_id has a tag that is in the tag group with $tag_group_id. * * @param int $post_id * @param int $tag_group_id * @return boolean */ function post_in_tag_group( $post_id, $tag_group_id ) { global $tag_groups_premium_fs_sdk ; if ( class_exists( 'TagGroups_Premium_Post' ) ) { } else { $tag_group_taxonomy = TagGroups_Taxonomy::get_enabled_taxonomies(); $tags = get_the_terms( $post_id, $tag_group_taxonomy ); if ( $tags ) { foreach ( $tags as $tag ) { if ( $tag->term_group == $tag_group_id ) { return true; } } } return false; } } } /** * guess what - the end */PK�������!�ς������assets/js/taggroups.min.jsnu�[��������/* Part of the WordPress plugin Tag Groups Plugin URI: https://chattymango.com/tag-groups/ Author: Christoph Amthor License: GNU GENERAL PUBLIC LICENSE, Version 3 Last modified: 20190510 */ function tg_do_ajax(y,b,v){var t={action:"tg_ajax_manage_groups",nonce:jQuery("#tg_nonce").val()};jQuery.extend(b,t),b.start_position=jQuery("#tg_start_position").val();var j="";jQuery.ajax({url:y.ajaxurl,data:b,dataType:"xml",method:"post",success:function(t){var a=jQuery(t).find("response_data").text(),s=jQuery(t).find("supplemental message").text(),e=jQuery(t).find("supplemental nonce").text(),n=jQuery(t).find("supplemental task").text();if(""!==e&&jQuery("#tg_nonce").val(e),"success"===a){var o=JSON.parse(jQuery(t).find("groups").text()),l=jQuery(t).find("start_position").text();""!==l?jQuery("#tg_start_position").val(l):l=b.start_position;jQuery(t).find("end_position").text();var r=jQuery(t).find("max_number").text(),d="",p=l;if(0<r)for(var c in o){var _=o[c];null!=_.id&&(d+='<tr class="tg_sort_tr" data-position="'+p+'">\n',d+="<td>"+_.id+"</td>\n",d+='<td><span class="tg_edit_label tg_text" data-position="'+p+'" data-label="'+escape_html(_.label)+'">'+escape_html(_.label)+'<span class="dashicons dashicons-edit tg_pointer" style="display:none;"></span></span></td>\n',d+='<td class="tg_hide_when_drag"><div class="tg_term_amounts">',""!==y.tagsurl?d+='<a href="'+y.tagsurl+"&term-filter="+_.id+'" title="'+v.tooltip_showtags+'">'+_.amount+"</a>":d+=_.amount+"</span>",d+="</div>",d+='</td>\n<td class="tg_hide_when_drag">',""!==y.tagsurl&&(d+='<a href="'+y.tagsurl+"&term-filter="+_.id+'" title="'+v.tooltip_showtags+'"><span class="tg_pointer dashicons dashicons-tag"></span></a> '),""!==y.postsurl&&(d+='<a href="'+y.postsurl+"&post_status=all&tg_filter_posts_value="+_.id+'" title="'+v.tooltip_showposts+'"><span class="tg_pointer dashicons dashicons-admin-page"></span></a>'),d+='</td>\n<td class="tg_hide_when_drag">',d+='<span class="tg_delete tg_pointer dashicons dashicons-trash" data-position="'+p+'" title="'+v.tooltip_delete+'"></span>',d+='<span class="tg_pointer dashicons dashicons-plus-alt" title="'+v.tooltip_newbelow+'" onclick="tg_toggle_clear('+p+')" style="margin-left:5px;"></span>',d+="</td>\n",d+='<td class="tg_hide_when_drag">',d+='<div style="overflow:hidden; position:relative; height:20px; clear:both;">',1<p&&(d+='<span class="tg_up tg_pointer dashicons dashicons-arrow-up" data-position="'+p+'" title="'+v.tooltip_move_up+'""></span>'),d+="</div>",d+='<div style="overflow:hidden; position:relative; height:20px; clear:both;">',p<r&&(d+='<span class="tg_down tg_pointer dashicons dashicons-arrow-down" data-position="'+p+'" title="'+v.tooltip_move_down+'"></span>'),d+="</div>",d+="</td>\n",d+="</tr>\n",d+='<tr style="display:none; height:45px; background-color:#FFC;" id="tg_new_'+p+'">\n',d+='<td style="display:none;">'+v.newgroup+"</td>\n",d+='<td colspan="4" style="display:none;"><input data-position="'+p+'" placeholder="'+v.placeholder_new+'">',d+='<span class="tg_new_yes dashicons dashicons-yes tg_pointer" data-position="'+p+'"></span> <span class="tg_new_no dashicons dashicons-no-alt tg_pointer" data-position="'+p+'" onclick="tg_toggle_clear('+p+')"></span>',d+="</td>\n",d+="</tr>\n",p++)}else d+='<tr id="tg_new_1">\n',d+="<td ></td>\n",d+='<td colspan="4"><input data-position="0" placeholder="'+v.newgroup+'">',d+='<span class="tg_new_yes dashicons dashicons-yes tg_pointer" data-id="1"></span></span>',d+="</td>\n",d+="</tr>\n";"move"==n?jQuery("#tg_groups_container").html(d):jQuery("#tg_groups_container").fadeOut(300,function(){jQuery(this).html(d).fadeIn(300)});var g,u,h="",f=Number(y.items_per_page);for(f<1&&(f=1),u=Math.floor(l/f)+1,max_page=Math.floor((r-1)/f)+1,h+=1<u?'<button class="button-secondary tg_pager_button" data-page="'+(u-1)+'"><span class="dashicons dashicons-arrow-left-alt2"></span></button>':'<button class="button-secondary tg_pager_button" disabled><span class="dashicons dashicons-arrow-left-alt2"></span></button>',i=1;i<=r;i+=f)g=Math.floor(i/f)+1,h+=g==u?'<button class="tg_reload_button tg_pointer button-secondary" id="tg_groups_reload" title="'+v.tooltip_reload+'"><span class="dashicons dashicons-update"></span></button>':'<button class="button-secondary tg_pager_button" data-page="'+g+'"><span>'+g+"</span></button>";u<max_page?h+='<button class="button-secondary tg_pager_button" data-page="'+(u+1)+'"><span class="dashicons dashicons-arrow-right-alt2"></span></button>':h+='<button class="button-secondary tg_pager_button" disabled><span class="dashicons dashicons-arrow-right-alt2"></span></button>',jQuery("#tg_pager_container").fadeOut(200,function(){jQuery(this).html(h).fadeIn(400,function(){jQuery("#tg_pager_container_adjuster").css({height:Number(jQuery("#tg_pager_container").height())+10})})}),j+=""!=s?'<div class="notice notice-success"><p>'+s+'</p></div><br clear="all" />':'<div><p>&nbsp;</p></div><br clear="all" />',jQuery("#tg_message_container").fadeTo(500,0,function(){jQuery(this).html(j).fadeTo(800,1)})}else""==s&&(s="Error loading data.",console.log(t)),j+='<div class="notice notice-error"><p>'+s+'</p></div><br clear="all" />',jQuery("#tg_message_container").fadeTo(500,0,function(){jQuery(this).html(j).fadeTo(800,1)})},error:function(t,a,s){console.log("[Tag Groups] error: "+t.responseText)}})}function tg_close_textfield(t,a){var s,e=t.children(":first").attr("data-position");s=escape_html(a?t.children(":first").attr("value"):t.children(":first").attr("data-label")),t.replaceWith('<span class="tg_edit_label tg_text" data-position="'+e+'" data-label="'+s+'">'+s+' <span class="dashicons dashicons-edit tg_pointer" style="display:none;"></span></span>')}function tg_toggle_clear(t){var a=jQuery("#tg_new_"+t);a.is(":visible")?(jQuery("[data-position="+t+"]").val(""),a.children().fadeOut(300,function(){a.slideUp(600)})):(jQuery('[id^="tg_new_"]:visible').children().fadeOut(300,function(){jQuery('[id^="tg_new_"]:visible').slideUp(400)}),a.delay(500).slideDown(400,function(){a.children().fadeIn(300),jQuery("[data-position="+t+"]").focus()}))}function tg_close_all_textfields(){jQuery(".tg_edit_label_active").each(function(){tg_close_textfield(jQuery(this),!1)})}function escape_html(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#039;")} PK�������!�Vy8��8����assets/js/jquery.sumoselect.jsnu�[��������/*! * jquery.sumoselect - v3.0.3 * http://hemantnegi.github.io/jquery.sumoselect * 2016-12-12 * * Copyright 2015 Hemant Negi * Email : hemant.frnz@gmail.com * Compressor http://refresh-sf.com/ * * modified by Christoph Amthor, 5.4.2018 */ (function (factory) { 'use strict'; if (typeof define === 'function' && define.amd) { define(['jquery'], factory); } else if (typeof exports !== 'undefined') { module.exports = factory(require('jquery')); } else { factory(jQuery); } })(function ($) { 'namespace sumo'; $.fn.SumoSelect = function (options) { // This is the easiest way to have default options. var settings = $.extend({ placeholder: 'Select Here', // Dont change it here. csvDispCount: 3, // display no. of items in multiselect. 0 to display all. captionFormat: '{0} Selected', // format of caption text. you can set your locale. captionFormatAllSelected: '{0} all selected!', // format of caption text when all elements are selected. set null to use captionFormat. It will not work if there are disabled elements in select. floatWidth: 400, // Screen width of device at which the list is rendered in floating popup fashion. forceCustomRendering: false, // force the custom modal on all devices below floatWidth resolution. nativeOnDevice: ['Android', 'BlackBerry', 'iPhone', 'iPad', 'iPod', 'Opera Mini', 'IEMobile', 'Silk'], // outputAsCSV: false, // true to POST data as csv ( false for Html control array ie. default select ) csvSepChar: ',', // separation char in csv mode okCancelInMulti: false, // display ok cancel buttons in desktop mode multiselect also. isClickAwayOk: false, // for okCancelInMulti=true. sets whether click outside will trigger Ok or Cancel (default is cancel). triggerChangeCombined: true, // im multi select mode whether to trigger change event on individual selection or combined selection. selectAll: false, // to display select all button in multiselect mode.|| also select all will not be available on mobile devices. search: false, // to display input for filtering content. selectAlltext will be input text placeholder searchText: 'Search...', // placeholder for search input searchFn: function(haystack, needle) { // search function return haystack.toLowerCase().indexOf(needle.toLowerCase()) < 0; }, noMatch: 'No matches for "{0}"', prefix: '', // some prefix usually the field name. eg. '<b>Hello</b>' locale: ['OK', 'Cancel', 'Select All'], // all text that is used. don't change the index. up: false, // set true to open upside. showTitle: true // set to false to prevent title (tooltip) from appearing }, options); var ret = this.each(function () { var selObj = this; // the original select object. if (this.sumo || !$(this).is('select')) return; //already initialized this.sumo = { E: $(selObj), //the jquery object of original select element. is_multi: $(selObj).attr('multiple'), //if its a multiple select select: '', caption: '', placeholder: '', optDiv: '', CaptionCont: '', ul: '', is_floating: false, is_opened: false, //backdrop: '', mob: false, // if to open device default select Pstate: [], lastUnselected: null, createElems: function () { var O = this; O.E.wrap('<div class="SumoSelect" tabindex="0" role="button" aria-expanded="false">'); O.select = O.E.parent(); O.caption = $('<span>'); O.CaptionCont = $('<p class="CaptionCont SelectBox" ><label><i></i></label></p>') .attr('style', O.E.attr('style')) .prepend(O.caption); O.select.append(O.CaptionCont); // default turn off if no multiselect if (!O.is_multi) settings.okCancelInMulti = false if (O.E.attr('disabled')) O.select.addClass('disabled').removeAttr('tabindex'); //if output as csv and is a multiselect. if (settings.outputAsCSV && O.is_multi && O.E.attr('name')) { //create a hidden field to store csv value. O.select.append($('<input class="HEMANT123" type="hidden" />').attr('name', O.E.attr('name')).val(O.getSelStr())); // so it can not post the original select. O.E.removeAttr('name'); } //break for mobile rendring.. if forceCustomRendering is false if (O.isMobile() && !settings.forceCustomRendering) { O.setNativeMobile(); return; } // if there is a name attr in select add a class to container div if (O.E.attr('name')) O.select.addClass('sumo_' + O.E.attr('name').replace(/\[\]/, '')) //hide original select O.E.addClass('SumoUnder').attr('tabindex', '-1'); //## Creating the list... O.optDiv = $('<div class="optWrapper ' + (settings.up ? 'up' : '') + '">'); //branch for floating list in low res devices. O.floatingList(); //Creating the markup for the available options O.ul = $('<ul class="options">'); O.optDiv.append(O.ul); // Select all functionality if (settings.selectAll && O.is_multi) O.SelAll(); // search functionality if (settings.search) O.Search(); O.ul.append(O.prepItems(O.E.children())); //if multiple then add the class multiple and add OK / CANCEL button if (O.is_multi) O.multiSelelect(); O.select.append(O.optDiv); O.basicEvents(); O.selAllState(); }, prepItems: function (opts, d) { var lis = [], O = this; $(opts).each(function (i, opt) { // parsing options to li opt = $(opt); lis.push(opt.is('optgroup') ? $('<li class="group ' + (opt[0].disabled ? 'disabled' : '') + '"><label>' + opt.attr('label') + '</label><ul></ul></li>') .find('ul') .append(O.prepItems(opt.children(), opt[0].disabled)) .end() : O.createLi(opt, d) ); }); return lis; }, //## Creates a LI element from a given option and binds events to it //## returns the jquery instance of li (not inserted in dom) createLi: function (opt, d) { var O = this; if (!opt.attr('value')) opt.attr('value', opt.val()); var li = $('<li class="opt"><label>' + opt.text() + '</label></li>'); li.data('opt', opt); // store a direct reference to option. opt.data('li', li); // store a direct reference to list item. if (O.is_multi) li.prepend('<span><i></i></span>'); if (opt[0].disabled || d) li = li.addClass('disabled'); O.onOptClick(li); if (opt[0].selected) li.addClass('selected'); if (opt.attr('class')) li.addClass(opt.attr('class')); if (opt.attr('title')) li.attr('title', opt.attr('title')); return li; }, //## Returns the selected items as string in a Multiselect. getSelStr: function () { // get the pre selected items. var sopt = []; this.E.find('option:selected').each(function () { sopt.push($(this).val()); }); return sopt.join(settings.csvSepChar); }, //## THOSE OK/CANCEL BUTTONS ON MULTIPLE SELECT. multiSelelect: function () { var O = this; O.optDiv.addClass('multiple'); O.okbtn = $('<p tabindex="0" class="btnOk">' + settings.locale[0] + '</p>').click(function () { //if combined change event is set. O._okbtn(); O.hideOpts(); }); O.cancelBtn = $('<p tabindex="0" class="btnCancel">' + settings.locale[1] + '</p>').click(function () { O._cnbtn(); O.hideOpts(); }); var btns = O.okbtn.add(O.cancelBtn); O.optDiv.append($('<div class="MultiControls">').append(btns)); // handling keyboard navigation on ok cancel buttons. btns.on('keydown.sumo', function (e) { var el = $(this); switch (e.which) { case 32: // space case 13: // enter el.trigger('click'); break; case 9: //tab if (el.hasClass('btnOk')) return; case 27: // esc O._cnbtn(); O.hideOpts(); return; } e.stopPropagation(); e.preventDefault(); }); }, _okbtn: function () { var O = this, cg = 0; //if combined change event is set. if (settings.triggerChangeCombined) { //check for a change in the selection. if (O.E.find('option:selected').length !== O.Pstate.length) { cg = 1; } else { O.E.find('option').each(function (i, e) { if (e.selected && O.Pstate.indexOf(i) < 0) cg = 1; }); } if (cg) { O.callChange(); O.setText(); } } }, _cnbtn: function () { var O = this; //remove all selections O.E.find('option:selected').each(function () { this.selected = false; }); O.optDiv.find('li.selected').removeClass('selected') //restore selections from saved state. for (var i = 0; i < O.Pstate.length; i++) { O.E.find('option')[O.Pstate[i]].selected = true; O.ul.find('li.opt').eq(O.Pstate[i]).addClass('selected'); } O.selAllState(); }, SelAll: function () { var O = this; if (!O.is_multi) return; O.selAll = $('<p class="select-all"><span><i></i></span><label>' + settings.locale[2] + '</label></p>'); O.optDiv.addClass('selall'); O.selAll.on('click', function () { O.selAll.toggleClass('selected'); O.toggSelAll(O.selAll.hasClass('selected'), 1); //O.selAllState(); }); O.optDiv.prepend(O.selAll); }, // search module (can be removed if not required.) Search: function () { var O = this, cc = O.CaptionCont.addClass('search'), P = $('<p class="no-match">'), fn = (options.searchFn && typeof options.searchFn == 'function') ? options.searchFn : settings.searchFn; O.ftxt = $('<input type="text" class="search-txt" value="" placeholder="' + settings.searchText + '">') .on('click', function (e) { e.stopPropagation(); }); cc.append(O.ftxt); O.optDiv.children('ul').after(P); O.ftxt.on('keyup.sumo', function () { var hid = O.optDiv.find('ul.options li.opt').each(function (ix, e) { var e = $(e), opt = e.data('opt')[0]; opt.hidden = fn(e.text(), O.ftxt.val()); e.toggleClass('hidden', opt.hidden); }).not('.hidden'); P.html(settings.noMatch.replace(/\{0\}/g, '<em></em>')).toggle(!hid.length); P.find('em').text(O.ftxt.val()); O.selAllState(); }); }, selAllState: function () { var O = this; if (settings.selectAll && O.is_multi) { var sc = 0, vc = 0; O.optDiv.find('li.opt').not('.hidden').each(function (ix, e) { if ($(e).hasClass('selected')) sc++; if (!$(e).hasClass('disabled')) vc++; }); //select all checkbox state change. if (sc === vc) O.selAll.removeClass('partial').addClass('selected'); else if (sc === 0) O.selAll.removeClass('selected partial'); else O.selAll.addClass('partial')//.removeClass('selected'); } }, showOpts: function () { var O = this; if (O.E.attr('disabled')) return; // if select is disabled then retrun O.E.trigger('sumo:opening', O); O.is_opened = true; O.select.addClass('open').attr('aria-expanded', 'true'); O.E.trigger('sumo:opened', O); if (O.ftxt) O.ftxt.focus(); else O.select.focus(); // hide options on click outside. $(document).on('click.sumo', function (e) { if (!O.select.is(e.target) // if the target of the click isn't the container... && O.select.has(e.target).length === 0) { // ... nor a descendant of the container if (!O.is_opened) return; O.hideOpts(); if (settings.okCancelInMulti) { if (settings.isClickAwayOk) O._okbtn(); else O._cnbtn(); } } }); if (O.is_floating) { var H = O.optDiv.children('ul').outerHeight() + 2; // +2 is clear fix if (O.is_multi) H = H + parseInt(O.optDiv.css('padding-bottom')); O.optDiv.css('height', H); $('body').addClass('sumoStopScroll'); } O.setPstate(); }, //maintain state when ok/cancel buttons are available storing the indexes. setPstate: function () { var O = this; if (O.is_multi && (O.is_floating || settings.okCancelInMulti)) { O.Pstate = []; // assuming that find returns elements in tree order O.E.find('option').each(function (i, e) { if (e.selected) O.Pstate.push(i); }); } }, callChange: function () { this.E.trigger('change').trigger('click'); }, hideOpts: function () { var O = this; if (O.is_opened) { O.E.trigger('sumo:closing', O); O.is_opened = false; O.select.removeClass('open').attr('aria-expanded', 'true').find('ul li.sel').removeClass('sel'); O.E.trigger('sumo:closed', O); $(document).off('click.sumo'); O.select.focus(); $('body').removeClass('sumoStopScroll'); // clear the search if (settings.search) { O.ftxt.val(''); O.ftxt.trigger('keyup.sumo'); } } }, setOnOpen: function () { var O = this, li = O.optDiv.find('li.opt:not(.hidden)').eq(settings.search ? 0 : O.E[0].selectedIndex); if (li.hasClass('disabled')) { li = li.next(':not(disabled)') if (!li.length) return; } O.optDiv.find('li.sel').removeClass('sel'); li.addClass('sel'); O.showOpts(); }, nav: function (up) { var O = this, c, s = O.ul.find('li.opt:not(.disabled, .hidden)'), sel = O.ul.find('li.opt.sel:not(.hidden)'), idx = s.index(sel); if (O.is_opened && sel.length) { if (up && idx > 0) c = s.eq(idx - 1); else if (!up && idx < s.length - 1 && idx > -1) c = s.eq(idx + 1); else return; // if no items before or after sel.removeClass('sel'); sel = c.addClass('sel'); // setting sel item to visible view. var ul = O.ul, st = ul.scrollTop(), t = sel.position().top + st; if (t >= st + ul.height() - sel.outerHeight()) ul.scrollTop(t - ul.height() + sel.outerHeight()); if (t < st) ul.scrollTop(t); } else O.setOnOpen(); }, basicEvents: function () { var O = this; O.CaptionCont.click(function (evt) { O.E.trigger('click'); if (O.is_opened) O.hideOpts(); else O.showOpts(); evt.stopPropagation(); }); O.select.on('keydown.sumo', function (e) { switch (e.which) { case 38: // up O.nav(true); break; case 40: // down O.nav(false); break; case 65: // shortcut ctrl + a to select all and ctrl + shift + a to unselect all. if (O.is_multi && e.ctrlKey) { O.toggSelAll(!e.shiftKey, 1); break; } else return; case 32: // space if (settings.search && O.ftxt.is(e.target)) return; case 13: // enter if (O.is_opened) O.optDiv.find('ul li.sel').trigger('click'); else O.setOnOpen(); break; case 9: //tab if (!settings.okCancelInMulti) O.hideOpts(); return; case 27: // esc if (settings.okCancelInMulti) O._cnbtn(); O.hideOpts(); return; default: return; // exit this handler for other keys } e.preventDefault(); // prevent the default action (scroll / move caret) }); $(window).on('resize.sumo', function () { O.floatingList(); }); }, onOptClick: function (li) { var O = this; li.click(function () { var li = $(this); if (li.hasClass('disabled')) return; var txt = ""; if (O.is_multi) { li.toggleClass('selected'); li.data('opt')[0].selected = li.hasClass('selected'); if (li.data('opt')[0].selected === false) { O.lastUnselected = li.data('opt')[0].textContent; } O.selAllState(); } else { li.parent().find('li.selected').removeClass('selected'); //if not multiselect then remove all selections from this list li.toggleClass('selected'); li.data('opt')[0].selected = true; } //branch for combined change event. if (!(O.is_multi && settings.triggerChangeCombined && (O.is_floating || settings.okCancelInMulti))) { O.setText(); O.callChange(); } if (!O.is_multi) O.hideOpts(); //if its not a multiselect then hide on single select. }); }, // fixed some variables that were not explicitly typed (michc) setText: function () { var O = this; O.placeholder = ""; if (O.is_multi) { var sels = O.E.find(':selected').not(':disabled'); //selected options. for (var i = 0; i < sels.length; i++) { if (i + 1 >= settings.csvDispCount && settings.csvDispCount) { if (sels.length === O.E.find('option').length && settings.captionFormatAllSelected) { O.placeholder = settings.captionFormatAllSelected.replace(/\{0\}/g, sels.length) + ','; } else { O.placeholder = settings.captionFormat.replace(/\{0\}/g, sels.length) + ','; } break; } else O.placeholder += $(sels[i]).text() + ", "; } O.placeholder = O.placeholder.replace(/,([^,]*)$/, '$1'); //remove unexpected "," from last. } else { if (settings.placeholder != 'Select Here') { O.placeholder = settings.placeholder; } else { O.placeholder = O.E.find(':selected').not(':disabled').text(); } } var is_placeholder = false; if (!O.placeholder) { is_placeholder = true; O.placeholder = O.E.attr('placeholder'); if (!O.placeholder) //if placeholder is there then set it O.placeholder = O.E.find('option:disabled:selected').text(); } O.placeholder = O.placeholder ? (settings.prefix + ' ' + O.placeholder) : settings.placeholder //set display text O.caption.html(O.placeholder); if (settings.showTitle) O.CaptionCont.attr('title', O.placeholder); //set the hidden field if post as csv is true. var csvField = O.select.find('input.HEMANT123'); if (csvField.length) csvField.val(O.getSelStr()); //add class placeholder if its a placeholder text. if (is_placeholder) O.caption.addClass('placeholder'); else O.caption.removeClass('placeholder'); return O.placeholder; }, isMobile: function () { // Adapted from http://www.detectmobilebrowsers.com var ua = navigator.userAgent || navigator.vendor || window.opera; // Checks for iOs, Android, Blackberry, Opera Mini, and Windows mobile devices for (var i = 0; i < settings.nativeOnDevice.length; i++) if (ua.toString().toLowerCase().indexOf(settings.nativeOnDevice[i].toLowerCase()) > 0) return settings.nativeOnDevice[i]; return false; }, setNativeMobile: function () { var O = this; O.E.addClass('SelectClass')//.css('height', O.select.outerHeight()); O.mob = true; O.E.change(function () { O.setText(); }); }, floatingList: function () { var O = this; //called on init and also on resize. //O.is_floating = true if window width is < specified float width O.is_floating = $(window).width() <= settings.floatWidth; //set class isFloating O.optDiv.toggleClass('isFloating', O.is_floating); //remove height if not floating if (!O.is_floating) O.optDiv.css('height', ''); //toggle class according to okCancelInMulti flag only when it is not floating O.optDiv.toggleClass('okCancelInMulti', settings.okCancelInMulti && !O.is_floating); }, //HELPERS FOR OUTSIDERS // validates range of given item operations vRange: function (i) { var O = this; var opts = O.E.find('option'); if (opts.length <= i || i < 0) throw "index out of bounds" return O; }, //toggles selection on c as boolean. toggSel: function (c, i) { var O = this; var opt; if (typeof (i) === "number") { O.vRange(i); opt = O.E.find('option')[i]; } else { opt = O.E.find('option[value="' + i + '"]')[0] || 0; } if (!opt || opt.disabled) return; if (opt.selected !== c) { opt.selected = c; if (!O.mob) $(opt).data('li').toggleClass('selected', c); O.callChange(); O.setPstate(); O.setText(); O.selAllState(); } }, //toggles disabled on c as boolean. toggDis: function (c, i) { var O = this.vRange(i); O.E.find('option')[i].disabled = c; if (c) O.E.find('option')[i].selected = false; if (!O.mob) O.optDiv.find('ul.options li').eq(i).toggleClass('disabled', c).removeClass('selected'); O.setText(); }, // toggle disable/enable on complete select control toggSumo: function (val) { var O = this; O.enabled = val; O.select.toggleClass('disabled', val); if (val) { O.E.attr('disabled', 'disabled'); O.select.removeAttr('tabindex'); } else { O.E.removeAttr('disabled'); O.select.attr('tabindex', '0'); } return O; }, // toggles all option on c as boolean. // set direct=false/0 bypasses okCancelInMulti behaviour. toggSelAll: function (c, direct) { var O = this; O.E.find('option:not(:disabled,:hidden)') .each(function (ix, e) { var is_selected = e.selected, e = $(e).data('li'); if (e.hasClass('hidden')) return; if (!!c) { if (!is_selected) e.trigger('click'); } else { if (is_selected) e.trigger('click'); } }); if (!direct) { if (!O.mob && O.selAll) O.selAll.removeClass('partial').toggleClass('selected', !!c); O.callChange(); O.setText(); O.setPstate(); } }, /* outside accessibility options which can be accessed from the element instance. */ reload: function () { var elm = this.unload(); return $(elm).SumoSelect(settings); }, unload: function () { var O = this; O.select.before(O.E); O.E.show(); if (settings.outputAsCSV && O.is_multi && O.select.find('input.HEMANT123').length) { O.E.attr('name', O.select.find('input.HEMANT123').attr('name')); // restore the name; } O.select.remove(); delete selObj.sumo; return selObj; }, //## add a new option to select at a given index. add: function (val, txt, i) { if (typeof val === "undefined") throw "No value to add" var O = this; var opts = O.E.find('option') if (typeof txt === "number") { i = txt; txt = val; } if (typeof txt === "undefined") { txt = val; } var opt = $("<option></option>").val(val).html(txt); if (opts.length < i) throw "index out of bounds" if (typeof i === "undefined" || opts.length === i) { // add it to the last if given index is last no or no index provides. O.E.append(opt); if (!O.mob) O.ul.append(O.createLi(opt)); } else { opts.eq(i).before(opt); if (!O.mob) O.ul.find('li.opt').eq(i).before(O.createLi(opt)); } return selObj; }, //## removes an item at a given index. remove: function (i) { var O = this.vRange(i); O.E.find('option').eq(i).remove(); if (!O.mob) O.optDiv.find('ul.options li').eq(i).remove(); O.setText(); }, // removes all but the selected one removeAll: function () { var O = this; var options = O.E.find('option'); for (var x = (options.length - 1); x >= 0; x--) { if (options[x].selected !== true) { O.remove(x); } } }, find: function (val) { var O = this; var options = O.E.find('option'); for (var x in options) { if (options[x].value === val) { return parseInt(x); } } return -1; }, //## Select an item at a given index. selectItem: function (i) { this.toggSel(true, i); }, //## UnSelect an iten at a given index. unSelectItem: function (i) { this.toggSel(false, i); }, //## Select all items of the select. selectAll: function () { this.toggSelAll(true); }, //## UnSelect all items of the select. unSelectAll: function () { this.toggSelAll(false); }, //## Disable an iten at a given index. disableItem: function (i) { this.toggDis(true, i) }, //## Removes disabled an iten at a given index. enableItem: function (i) { this.toggDis(false, i) }, //## New simple methods as getter and setter are not working fine in ie8- //## variable to check state of control if enabled or disabled. enabled: true, //## Enables the control enable: function () { return this.toggSumo(false) }, //## Disables the control disable: function () { return this.toggSumo(true) }, init: function () { var O = this; O.createElems(); O.setText(); return O } }; selObj.sumo.init(); }); return ret.length === 1 ? ret[0] : ret; }; }); PK�������!�AAl)��)����assets/js/taggroups.jsnu�[��������/* Part of the WordPress plugin Tag Groups Plugin URI: https://chattymango.com/tag-groups/ Author: Christoph Amthor License: GNU GENERAL PUBLIC LICENSE, Version 3 Last modified: 20190510 */ /* * Makes the actual Ajax request and populates the table, the pager and the message box */ function tg_do_ajax(tg_params, send_data, labels) { var nonce = jQuery('#tg_nonce').val(); var data = { action: 'tg_ajax_manage_groups', nonce: nonce, }; jQuery.extend(send_data, data); send_data.start_position = jQuery('#tg_start_position').val(); var message_output = ''; /* * Send request and parse response */ jQuery.ajax({ url: tg_params.ajaxurl, data: send_data, dataType: 'xml', method: 'post', success: function (data) { var status = jQuery(data).find('response_data').text(); var message = jQuery(data).find('supplemental message').text(); var nonce = jQuery(data).find('supplemental nonce').text(); var task = jQuery(data).find('supplemental task').text(); // write new nonce if (nonce !== '') { jQuery('#tg_nonce').val(nonce); } if (status === 'success') { var groups = JSON.parse(jQuery(data).find('groups').text()); var start_position = jQuery(data).find('start_position').text(); if (start_position !== '') { jQuery('#tg_start_position').val(start_position); } else { start_position = send_data.start_position; } var end_position = jQuery(data).find('end_position').text(); var max_number = jQuery(data).find('max_number').text(); var output = ''; var position = start_position; if (max_number > 0) { for (var key in groups) { var data_set = groups[key]; if (data_set.id!=null) { output += '<tr class="tg_sort_tr" data-position="' + position + '">\n'; output += '<td>' + data_set.id + '</td>\n'; output += '<td><span class="tg_edit_label tg_text" data-position="' + position + '" data-label="' + escape_html(data_set.label) + '">' + escape_html(data_set.label) + '\<span class="dashicons dashicons-edit tg_pointer" style="display:none;"></span></span></td>\n'; output += '<td class="tg_hide_when_drag"><div class="tg_term_amounts">'; if (tg_params.tagsurl!=='') { output += '<a href="' + tg_params.tagsurl + '&term-filter=' + data_set.id + '" title="' + labels.tooltip_showtags + '">' + data_set.amount + '</a>'; } else { output += data_set.amount + '</span>'; } output += '</div>'; output += '</td>\n<td class="tg_hide_when_drag">'; if (tg_params.tagsurl!=='') { output += '<a href="' + tg_params.tagsurl + '&term-filter=' + data_set.id + '" title="' + labels.tooltip_showtags + '"><span class="tg_pointer dashicons dashicons-tag"></span></a> '; } if (tg_params.postsurl!=='') { output += '<a href="' + tg_params.postsurl + '&post_status=all&tg_filter_posts_value=' + data_set.id + '" title="' + labels.tooltip_showposts + '"><span class="tg_pointer dashicons dashicons-admin-page"></span></a>'; } output += '</td>\n<td class="tg_hide_when_drag">'; output += '<span class="tg_delete tg_pointer dashicons dashicons-trash" data-position="' + position + '" title="' + labels.tooltip_delete + '"></span>'; output += '<span class="tg_pointer dashicons dashicons-plus-alt" title="' + labels.tooltip_newbelow + '" onclick="tg_toggle_clear(' + position + ')" style="margin-left:5px;"></span>'; output += '</td>\n'; output += '<td class="tg_hide_when_drag">'; output += '<div style="overflow:hidden; position:relative; height:20px; clear:both;">'; if (position > 1) { output += '<span class="tg_up tg_pointer dashicons dashicons-arrow-up" data-position="' + position + '" title="' + labels.tooltip_move_up + '""></span>'; } output += '</div>'; output += '<div style="overflow:hidden; position:relative; height:20px; clear:both;">'; if (position < max_number) { output += '<span class="tg_down tg_pointer dashicons dashicons-arrow-down" data-position="' + position + '" title="' + labels.tooltip_move_down + '"></span>'; } output += '</div>'; output += '</td>\n'; output += '</tr>\n'; // hidden row for adding a new group output += '<tr style="display:none; height:45px; background-color:#FFC;" id="tg_new_' + position + '">\n'; output += '<td style="display:none;">' + labels.newgroup + '</td>\n'; output += '<td colspan="4" style="display:none;"><input data-position="' + position + '" placeholder="' + labels.placeholder_new + '">'; output += '<span class="tg_new_yes dashicons dashicons-yes tg_pointer" data-position="' + position + '"></span> <span class="tg_new_no dashicons dashicons-no-alt tg_pointer" data-position="' + position + '" onclick="tg_toggle_clear(' + position + ')"></span>'; output += '</td>\n'; output += '</tr>\n'; position++; } } } else { // no tag groups yet output += '<tr id="tg_new_1">\n'; output += '<td ></td>\n'; output += '<td colspan="4"><input data-position="0" placeholder="' + labels.newgroup + '">'; output += '<span class="tg_new_yes dashicons dashicons-yes tg_pointer" data-id="1"></span></span>'; output += '</td>\n'; output += '</tr>\n'; } // write table of groups if (task == 'move') { jQuery('#tg_groups_container').html(output); } else { jQuery('#tg_groups_container').fadeOut(300, function () { jQuery(this).html(output) .fadeIn(300); }); } // pager var pager_output = ''; var page, current_page; var items_per_page = Number(tg_params.items_per_page); if (items_per_page < 1) { items_per_page = 1; } current_page = Math.floor(start_position / items_per_page) + 1; max_page = Math.floor((max_number - 1) / items_per_page) + 1; if (current_page > 1) { pager_output += '<button class="button-secondary tg_pager_button" data-page="' + (current_page - 1) + '"><span class="dashicons dashicons-arrow-left-alt2"></span></button>'; } else { pager_output += '<button class="button-secondary tg_pager_button" disabled><span class="dashicons dashicons-arrow-left-alt2"></span></button>'; } for (i = 1; i <= max_number; i += items_per_page) { page = Math.floor(i / items_per_page) + 1; if (page == current_page) { pager_output += '<button class="tg_reload_button tg_pointer button-secondary" id="tg_groups_reload" title="' + labels.tooltip_reload + '"><span class="dashicons dashicons-update"></span></button>'; } else { pager_output += '<button class="button-secondary tg_pager_button" data-page="' + page + '"><span>' + page + '</span></button>'; } } if (current_page < max_page) { pager_output += '<button class="button-secondary tg_pager_button" data-page="' + (current_page + 1) + '"><span class="dashicons dashicons-arrow-right-alt2"></span></button>'; } else { pager_output += '<button class="button-secondary tg_pager_button" disabled><span class="dashicons dashicons-arrow-right-alt2"></span></button>'; } jQuery('#tg_pager_container').fadeOut(200, function () { jQuery(this).html(pager_output) .fadeIn(400, function () { jQuery('#tg_pager_container_adjuster').css({ height: Number(jQuery('#tg_pager_container').height()) + 10 }); }); }); if (message != '') { message_output += '<div class="notice notice-success"><p>' + message + '</p></div><br clear="all" />'; } else { message_output += '<div><p>&nbsp;</p></div><br clear="all" />'; } jQuery('#tg_message_container').fadeTo(500, 0, function () { jQuery(this).html(message_output) .fadeTo(800, 1); }); } else { if (message == '') { message = 'Error loading data.'; console.log(data); } message_output += '<div class="notice notice-error"><p>' + message + '</p></div><br clear="all" />'; jQuery('#tg_message_container').fadeTo(500, 0, function () { jQuery(this).html(message_output) .fadeTo(800, 1); }); } }, error: function(xhr, textStatus, errorThrown) { console.log('[Tag Groups] error: ' + xhr.responseText); } }); } /* * Turn an editable label field back into normal text */ function tg_close_textfield(element, saved) { var position = element.children(':first').attr('data-position'); var label; if (saved) { label = escape_html(element.children(':first').attr('value')); } else { label = escape_html(element.children(':first').attr('data-label')); } element.replaceWith('<span class="tg_edit_label tg_text" data-position="' + position + '" data-label="' + label + '">' + label + ' <span class="dashicons dashicons-edit tg_pointer" style="display:none;"></span></span>'); } /* * Toggling the "new group" boxes */ function tg_toggle_clear(position) { var row = jQuery('#tg_new_' + position); if (row.is(':visible')) { jQuery('[data-position=' + position + ']').val(''); row.children().fadeOut(300, function () { row.slideUp(600); }); } else { jQuery('[id^="tg_new_"]:visible').children().fadeOut(300, function () { jQuery('[id^="tg_new_"]:visible').slideUp(400); }); row.delay(500).slideDown(400, function () { row.children().fadeIn(300); jQuery('[data-position=' + position + ']').focus(); }); } } /* * Parse all editable label fields in order to turn them into normal text */ function tg_close_all_textfields() { jQuery('.tg_edit_label_active').each(function () { tg_close_textfield(jQuery(this), false); }); } /* * Prevent HTML from breaking */ function escape_html(text) { return text .replace(/&/g, '&amp;') .replace(/</g, '&lt;') .replace(/>/g, '&gt;') .replace(/"/g, '&quot;') .replace(/'/g, '&#039;'); } PK�������!�ү 3�� 3��"��assets/js/jquery.sumoselect.min.jsnu�[��������/*! * jquery.sumoselect - v3.0.3 * http://hemantnegi.github.io/jquery.sumoselect * 2016-12-12 * * Copyright 2015 Hemant Negi * Email : hemant.frnz@gmail.com * Compressor http://refresh-sf.com/ * * modified by Christoph Amthor, 5.4.2018 */ !function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"undefined"!=typeof exports?module.exports=e(require("jquery")):e(jQuery)}(function(e){"namespace sumo";e.fn.SumoSelect=function(t){var l=e.extend({placeholder:"Select Here",csvDispCount:3,captionFormat:"{0} Selected",captionFormatAllSelected:"{0} all selected!",floatWidth:400,forceCustomRendering:!1,nativeOnDevice:["Android","BlackBerry","iPhone","iPad","iPod","Opera Mini","IEMobile","Silk"],outputAsCSV:!1,csvSepChar:",",okCancelInMulti:!1,isClickAwayOk:!1,triggerChangeCombined:!0,selectAll:!1,search:!1,searchText:"Search...",searchFn:function(e,t){return e.toLowerCase().indexOf(t.toLowerCase())<0},noMatch:'No matches for "{0}"',prefix:"",locale:["OK","Cancel","Select All"],up:!1,showTitle:!0},t),i=this.each(function(){var i=this;!this.sumo&&e(this).is("select")&&(this.sumo={E:e(i),is_multi:e(i).attr("multiple"),select:"",caption:"",placeholder:"",optDiv:"",CaptionCont:"",ul:"",is_floating:!1,is_opened:!1,mob:!1,Pstate:[],lastUnselected:null,createElems:function(){var t=this;t.E.wrap('<div class="SumoSelect" tabindex="0" role="button" aria-expanded="false">'),t.select=t.E.parent(),t.caption=e("<span>"),t.CaptionCont=e('<p class="CaptionCont SelectBox" ><label><i></i></label></p>').attr("style",t.E.attr("style")).prepend(t.caption),t.select.append(t.CaptionCont),t.is_multi||(l.okCancelInMulti=!1),t.E.attr("disabled")&&t.select.addClass("disabled").removeAttr("tabindex"),l.outputAsCSV&&t.is_multi&&t.E.attr("name")&&(t.select.append(e('<input class="HEMANT123" type="hidden" />').attr("name",t.E.attr("name")).val(t.getSelStr())),t.E.removeAttr("name")),!t.isMobile()||l.forceCustomRendering?(t.E.attr("name")&&t.select.addClass("sumo_"+t.E.attr("name").replace(/\[\]/,"")),t.E.addClass("SumoUnder").attr("tabindex","-1"),t.optDiv=e('<div class="optWrapper '+(l.up?"up":"")+'">'),t.floatingList(),t.ul=e('<ul class="options">'),t.optDiv.append(t.ul),l.selectAll&&t.is_multi&&t.SelAll(),l.search&&t.Search(),t.ul.append(t.prepItems(t.E.children())),t.is_multi&&t.multiSelelect(),t.select.append(t.optDiv),t.basicEvents(),t.selAllState()):t.setNativeMobile()},prepItems:function(t,l){var i=[],n=this;return e(t).each(function(t,s){s=e(s),i.push(s.is("optgroup")?e('<li class="group '+(s[0].disabled?"disabled":"")+'"><label>'+s.attr("label")+"</label><ul></ul></li>").find("ul").append(n.prepItems(s.children(),s[0].disabled)).end():n.createLi(s,l))}),i},createLi:function(t,l){t.attr("value")||t.attr("value",t.val());var i=e('<li class="opt"><label>'+t.text()+"</label></li>");return i.data("opt",t),t.data("li",i),this.is_multi&&i.prepend("<span><i></i></span>"),(t[0].disabled||l)&&(i=i.addClass("disabled")),this.onOptClick(i),t[0].selected&&i.addClass("selected"),t.attr("class")&&i.addClass(t.attr("class")),t.attr("title")&&i.attr("title",t.attr("title")),i},getSelStr:function(){var t=[];return this.E.find("option:selected").each(function(){t.push(e(this).val())}),t.join(l.csvSepChar)},multiSelelect:function(){var t=this;t.optDiv.addClass("multiple"),t.okbtn=e('<p tabindex="0" class="btnOk">'+l.locale[0]+"</p>").click(function(){t._okbtn(),t.hideOpts()}),t.cancelBtn=e('<p tabindex="0" class="btnCancel">'+l.locale[1]+"</p>").click(function(){t._cnbtn(),t.hideOpts()});var i=t.okbtn.add(t.cancelBtn);t.optDiv.append(e('<div class="MultiControls">').append(i)),i.on("keydown.sumo",function(l){var i=e(this);switch(l.which){case 32:case 13:i.trigger("click");break;case 9:if(i.hasClass("btnOk"))return;case 27:return t._cnbtn(),void t.hideOpts()}l.stopPropagation(),l.preventDefault()})},_okbtn:function(){var e=this,t=0;l.triggerChangeCombined&&(e.E.find("option:selected").length!==e.Pstate.length?t=1:e.E.find("option").each(function(l,i){i.selected&&e.Pstate.indexOf(l)<0&&(t=1)}),t&&(e.callChange(),e.setText()))},_cnbtn:function(){var e=this;e.E.find("option:selected").each(function(){this.selected=!1}),e.optDiv.find("li.selected").removeClass("selected");for(var t=0;t<e.Pstate.length;t++)e.E.find("option")[e.Pstate[t]].selected=!0,e.ul.find("li.opt").eq(e.Pstate[t]).addClass("selected");e.selAllState()},SelAll:function(){var t=this;t.is_multi&&(t.selAll=e('<p class="select-all"><span><i></i></span><label>'+l.locale[2]+"</label></p>"),t.optDiv.addClass("selall"),t.selAll.on("click",function(){t.selAll.toggleClass("selected"),t.toggSelAll(t.selAll.hasClass("selected"),1)}),t.optDiv.prepend(t.selAll))},Search:function(){var i=this,n=i.CaptionCont.addClass("search"),s=e('<p class="no-match">'),a=t.searchFn&&"function"==typeof t.searchFn?t.searchFn:l.searchFn;i.ftxt=e('<input type="text" class="search-txt" value="" placeholder="'+l.searchText+'">').on("click",function(e){e.stopPropagation()}),n.append(i.ftxt),i.optDiv.children("ul").after(s),i.ftxt.on("keyup.sumo",function(){var t=i.optDiv.find("ul.options li.opt").each(function(t,l){var n=(l=e(l)).data("opt")[0];n.hidden=a(l.text(),i.ftxt.val()),l.toggleClass("hidden",n.hidden)}).not(".hidden");s.html(l.noMatch.replace(/\{0\}/g,"<em></em>")).toggle(!t.length),s.find("em").text(i.ftxt.val()),i.selAllState()})},selAllState:function(){var t=this;if(l.selectAll&&t.is_multi){var i=0,n=0;t.optDiv.find("li.opt").not(".hidden").each(function(t,l){e(l).hasClass("selected")&&i++,e(l).hasClass("disabled")||n++}),i===n?t.selAll.removeClass("partial").addClass("selected"):0===i?t.selAll.removeClass("selected partial"):t.selAll.addClass("partial")}},showOpts:function(){var t=this;if(!t.E.attr("disabled")){if(t.E.trigger("sumo:opening",t),t.is_opened=!0,t.select.addClass("open").attr("aria-expanded","true"),t.E.trigger("sumo:opened",t),t.ftxt?t.ftxt.focus():t.select.focus(),e(document).on("click.sumo",function(e){if(!t.select.is(e.target)&&0===t.select.has(e.target).length){if(!t.is_opened)return;t.hideOpts(),l.okCancelInMulti&&(l.isClickAwayOk?t._okbtn():t._cnbtn())}}),t.is_floating){var i=t.optDiv.children("ul").outerHeight()+2;t.is_multi&&(i+=parseInt(t.optDiv.css("padding-bottom"))),t.optDiv.css("height",i),e("body").addClass("sumoStopScroll")}t.setPstate()}},setPstate:function(){var e=this;e.is_multi&&(e.is_floating||l.okCancelInMulti)&&(e.Pstate=[],e.E.find("option").each(function(t,l){l.selected&&e.Pstate.push(t)}))},callChange:function(){this.E.trigger("change").trigger("click")},hideOpts:function(){var t=this;t.is_opened&&(t.E.trigger("sumo:closing",t),t.is_opened=!1,t.select.removeClass("open").attr("aria-expanded","true").find("ul li.sel").removeClass("sel"),t.E.trigger("sumo:closed",t),e(document).off("click.sumo"),t.select.focus(),e("body").removeClass("sumoStopScroll"),l.search&&(t.ftxt.val(""),t.ftxt.trigger("keyup.sumo")))},setOnOpen:function(){var e=this,t=e.optDiv.find("li.opt:not(.hidden)").eq(l.search?0:e.E[0].selectedIndex);t.hasClass("disabled")&&!(t=t.next(":not(disabled)")).length||(e.optDiv.find("li.sel").removeClass("sel"),t.addClass("sel"),e.showOpts())},nav:function(e){var t,l=this,i=l.ul.find("li.opt:not(.disabled, .hidden)"),n=l.ul.find("li.opt.sel:not(.hidden)"),s=i.index(n);if(l.is_opened&&n.length){if(e&&s>0)t=i.eq(s-1);else{if(!(!e&&s<i.length-1&&s>-1))return;t=i.eq(s+1)}n.removeClass("sel"),n=t.addClass("sel");var a=l.ul,o=a.scrollTop(),c=n.position().top+o;c>=o+a.height()-n.outerHeight()&&a.scrollTop(c-a.height()+n.outerHeight()),c<o&&a.scrollTop(c)}else l.setOnOpen()},basicEvents:function(){var t=this;t.CaptionCont.click(function(e){t.E.trigger("click"),t.is_opened?t.hideOpts():t.showOpts(),e.stopPropagation()}),t.select.on("keydown.sumo",function(e){switch(e.which){case 38:t.nav(!0);break;case 40:t.nav(!1);break;case 65:if(t.is_multi&&e.ctrlKey){t.toggSelAll(!e.shiftKey,1);break}return;case 32:if(l.search&&t.ftxt.is(e.target))return;case 13:t.is_opened?t.optDiv.find("ul li.sel").trigger("click"):t.setOnOpen();break;case 9:return void(l.okCancelInMulti||t.hideOpts());case 27:return l.okCancelInMulti&&t._cnbtn(),void t.hideOpts();default:return}e.preventDefault()}),e(window).on("resize.sumo",function(){t.floatingList()})},onOptClick:function(t){var i=this;t.click(function(){var t=e(this);if(!t.hasClass("disabled")){i.is_multi?(t.toggleClass("selected"),t.data("opt")[0].selected=t.hasClass("selected"),!1===t.data("opt")[0].selected&&(i.lastUnselected=t.data("opt")[0].textContent),i.selAllState()):(t.parent().find("li.selected").removeClass("selected"),t.toggleClass("selected"),t.data("opt")[0].selected=!0),i.is_multi&&l.triggerChangeCombined&&(i.is_floating||l.okCancelInMulti)||(i.setText(),i.callChange()),i.is_multi||i.hideOpts()}})},setText:function(){var t=this;if(t.placeholder="",t.is_multi){for(var i=t.E.find(":selected").not(":disabled"),n=0;n<i.length;n++){if(n+1>=l.csvDispCount&&l.csvDispCount){i.length===t.E.find("option").length&&l.captionFormatAllSelected?t.placeholder=l.captionFormatAllSelected.replace(/\{0\}/g,i.length)+",":t.placeholder=l.captionFormat.replace(/\{0\}/g,i.length)+",";break}t.placeholder+=e(i[n]).text()+", "}t.placeholder=t.placeholder.replace(/,([^,]*)$/,"$1")}else"Select Here"!=l.placeholder?t.placeholder=l.placeholder:t.placeholder=t.E.find(":selected").not(":disabled").text();var s=!1;t.placeholder||(s=!0,t.placeholder=t.E.attr("placeholder"),t.placeholder||(t.placeholder=t.E.find("option:disabled:selected").text())),t.placeholder=t.placeholder?l.prefix+" "+t.placeholder:l.placeholder,t.caption.html(t.placeholder),l.showTitle&&t.CaptionCont.attr("title",t.placeholder);var a=t.select.find("input.HEMANT123");return a.length&&a.val(t.getSelStr()),s?t.caption.addClass("placeholder"):t.caption.removeClass("placeholder"),t.placeholder},isMobile:function(){for(var e=navigator.userAgent||navigator.vendor||window.opera,t=0;t<l.nativeOnDevice.length;t++)if(e.toString().toLowerCase().indexOf(l.nativeOnDevice[t].toLowerCase())>0)return l.nativeOnDevice[t];return!1},setNativeMobile:function(){var e=this;e.E.addClass("SelectClass"),e.mob=!0,e.E.change(function(){e.setText()})},floatingList:function(){var t=this;t.is_floating=e(window).width()<=l.floatWidth,t.optDiv.toggleClass("isFloating",t.is_floating),t.is_floating||t.optDiv.css("height",""),t.optDiv.toggleClass("okCancelInMulti",l.okCancelInMulti&&!t.is_floating)},vRange:function(e){if(this.E.find("option").length<=e||e<0)throw"index out of bounds";return this},toggSel:function(t,l){var i,n=this;"number"==typeof l?(n.vRange(l),i=n.E.find("option")[l]):i=n.E.find('option[value="'+l+'"]')[0]||0,i&&!i.disabled&&i.selected!==t&&(i.selected=t,n.mob||e(i).data("li").toggleClass("selected",t),n.callChange(),n.setPstate(),n.setText(),n.selAllState())},toggDis:function(e,t){var l=this.vRange(t);l.E.find("option")[t].disabled=e,e&&(l.E.find("option")[t].selected=!1),l.mob||l.optDiv.find("ul.options li").eq(t).toggleClass("disabled",e).removeClass("selected"),l.setText()},toggSumo:function(e){var t=this;return t.enabled=e,t.select.toggleClass("disabled",e),e?(t.E.attr("disabled","disabled"),t.select.removeAttr("tabindex")):(t.E.removeAttr("disabled"),t.select.attr("tabindex","0")),t},toggSelAll:function(t,l){var i=this;i.E.find("option:not(:disabled,:hidden)").each(function(l,i){var n=i.selected;(i=e(i).data("li")).hasClass("hidden")||(t?n||i.trigger("click"):n&&i.trigger("click"))}),l||(!i.mob&&i.selAll&&i.selAll.removeClass("partial").toggleClass("selected",!!t),i.callChange(),i.setText(),i.setPstate())},reload:function(){var t=this.unload();return e(t).SumoSelect(l)},unload:function(){var e=this;return e.select.before(e.E),e.E.show(),l.outputAsCSV&&e.is_multi&&e.select.find("input.HEMANT123").length&&e.E.attr("name",e.select.find("input.HEMANT123").attr("name")),e.select.remove(),delete i.sumo,i},add:function(t,l,n){if(void 0===t)throw"No value to add";var s=this,a=s.E.find("option");"number"==typeof l&&(n=l,l=t),void 0===l&&(l=t);var o=e("<option></option>").val(t).html(l);if(a.length<n)throw"index out of bounds";return void 0===n||a.length===n?(s.E.append(o),s.mob||s.ul.append(s.createLi(o))):(a.eq(n).before(o),s.mob||s.ul.find("li.opt").eq(n).before(s.createLi(o))),i},remove:function(e){var t=this.vRange(e);t.E.find("option").eq(e).remove(),t.mob||t.optDiv.find("ul.options li").eq(e).remove(),t.setText()},removeAll:function(){for(var e=this.E.find("option"),t=e.length-1;t>=0;t--)!0!==e[t].selected&&this.remove(t)},find:function(e){var t=this.E.find("option");for(var l in t)if(t[l].value===e)return parseInt(l);return-1},selectItem:function(e){this.toggSel(!0,e)},unSelectItem:function(e){this.toggSel(!1,e)},selectAll:function(){this.toggSelAll(!0)},unSelectAll:function(){this.toggSelAll(!1)},disableItem:function(e){this.toggDis(!0,e)},enableItem:function(e){this.toggDis(!1,e)},enabled:!0,enable:function(){return this.toggSumo(!1)},disable:function(){return this.toggSumo(!0)},init:function(){return this.createElems(),this.setText(),this}},i.sumo.init())});return 1===i.length?i[0]:i}}); PK�������!�R,K��K��*��assets/css/blitzer/jquery-ui.theme.min.cssnu�[��������/*! jQuery UI - v1.12.1 - 2019-05-26 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .tag-groups-cloud .ui-widget{font-family:Arial,sans-serif;font-size:1.1em}.tag-groups-cloud .ui-widget .ui-widget{font-size:1em}.tag-groups-cloud .ui-widget input,.tag-groups-cloud .ui-widget select,.tag-groups-cloud .ui-widget textarea,.tag-groups-cloud .ui-widget button{font-family:Arial,sans-serif;font-size:1em}.tag-groups-cloud .ui-widget.ui-widget-content{border:1px solid #d8dcdf}.tag-groups-cloud .ui-widget-content{border:1px solid #eee;background:#fff;color:#333}.tag-groups-cloud .ui-widget-content a{color:#333}.tag-groups-cloud .ui-widget-header{border:1px solid #e3a1a1;background:#c00 url("images/ui-bg_highlight-soft_15_cc0000_1x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.tag-groups-cloud .ui-widget-header a{color:#fff}.tag-groups-cloud .ui-state-default,.tag-groups-cloud .ui-widget-content .ui-state-default,.tag-groups-cloud .ui-widget-header .ui-state-default,.tag-groups-cloud .ui-button,html .tag-groups-cloud .ui-button.ui-state-disabled:hover,html .tag-groups-cloud .ui-button.ui-state-disabled:active{border:1px solid #d8dcdf;background:#eee url("images/ui-bg_highlight-hard_100_eeeeee_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#004276}.tag-groups-cloud .ui-state-default a,.tag-groups-cloud .ui-state-default a:link,.tag-groups-cloud .ui-state-default a:visited,a.tag-groups-cloud .ui-button,a:link.tag-groups-cloud .ui-button,a:visited.tag-groups-cloud .ui-button,.tag-groups-cloud .ui-button{color:#004276;text-decoration:none}.tag-groups-cloud .ui-state-hover,.tag-groups-cloud .ui-widget-content .ui-state-hover,.tag-groups-cloud .ui-widget-header .ui-state-hover,.tag-groups-cloud .ui-state-focus,.tag-groups-cloud .ui-widget-content .ui-state-focus,.tag-groups-cloud .ui-widget-header .ui-state-focus,.tag-groups-cloud .ui-button:hover,.tag-groups-cloud .ui-button:focus{border:1px solid #cdd5da;background:#f6f6f6 url("images/ui-bg_highlight-hard_100_f6f6f6_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#111}.tag-groups-cloud .ui-state-hover a,.tag-groups-cloud .ui-state-hover a:hover,.tag-groups-cloud .ui-state-hover a:link,.tag-groups-cloud .ui-state-hover a:visited,.tag-groups-cloud .ui-state-focus a,.tag-groups-cloud .ui-state-focus a:hover,.tag-groups-cloud .ui-state-focus a:link,.tag-groups-cloud .ui-state-focus a:visited,a.tag-groups-cloud .ui-button:hover,a.tag-groups-cloud .ui-button:focus{color:#111;text-decoration:none}.tag-groups-cloud .ui-visual-focus{box-shadow:0 0 3px 1px rgb(94,158,214)}.tag-groups-cloud .ui-state-active,.tag-groups-cloud .ui-widget-content .ui-state-active,.tag-groups-cloud .ui-widget-header .ui-state-active,a.tag-groups-cloud .ui-button:active,.tag-groups-cloud .ui-button:active,.tag-groups-cloud .ui-button.ui-state-active:hover{border:1px solid #eee;background:#fff;font-weight:bold;color:#c00}.tag-groups-cloud .ui-icon-background,.tag-groups-cloud .ui-state-active .ui-icon-background{border:#eee;background-color:#c00}.tag-groups-cloud .ui-state-active a,.tag-groups-cloud .ui-state-active a:link,.tag-groups-cloud .ui-state-active a:visited{color:#c00;text-decoration:none}.tag-groups-cloud .ui-state-highlight,.tag-groups-cloud .ui-widget-content .ui-state-highlight,.tag-groups-cloud .ui-widget-header .ui-state-highlight{border:1px solid #fcd3a1;background:#fbf8ee url("images/ui-bg_glass_55_fbf8ee_1x400.png") 50% 50% repeat-x;color:#444}.tag-groups-cloud .ui-state-checked{border:1px solid #fcd3a1;background:#fbf8ee}.tag-groups-cloud .ui-state-highlight a,.tag-groups-cloud .ui-widget-content .ui-state-highlight a,.tag-groups-cloud .ui-widget-header .ui-state-highlight a{color:#444}.tag-groups-cloud .ui-state-error,.tag-groups-cloud .ui-widget-content .ui-state-error,.tag-groups-cloud .ui-widget-header .ui-state-error{border:1px solid #c00;background:#f3d8d8 url("images/ui-bg_diagonals-thick_75_f3d8d8_40x40.png") 50% 50% repeat;color:#2e2e2e}.tag-groups-cloud .ui-state-error a,.tag-groups-cloud .ui-widget-content .ui-state-error a,.tag-groups-cloud .ui-widget-header .ui-state-error a{color:#2e2e2e}.tag-groups-cloud .ui-state-error-text,.tag-groups-cloud .ui-widget-content .ui-state-error-text,.tag-groups-cloud .ui-widget-header .ui-state-error-text{color:#2e2e2e}.tag-groups-cloud .ui-priority-primary,.tag-groups-cloud .ui-widget-content .ui-priority-primary,.tag-groups-cloud .ui-widget-header .ui-priority-primary{font-weight:bold}.tag-groups-cloud .ui-priority-secondary,.tag-groups-cloud .ui-widget-content .ui-priority-secondary,.tag-groups-cloud .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.tag-groups-cloud .ui-state-disabled,.tag-groups-cloud .ui-widget-content .ui-state-disabled,.tag-groups-cloud .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.tag-groups-cloud .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.tag-groups-cloud .ui-icon{width:16px;height:16px}.tag-groups-cloud .ui-icon,.tag-groups-cloud .ui-widget-content .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.tag-groups-cloud .ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.tag-groups-cloud .ui-state-hover .ui-icon,.tag-groups-cloud .ui-state-focus .ui-icon,.tag-groups-cloud .ui-button:hover .ui-icon,.tag-groups-cloud .ui-button:focus .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.tag-groups-cloud .ui-state-active .ui-icon,.tag-groups-cloud .ui-button:active .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.tag-groups-cloud .ui-state-highlight .ui-icon,.tag-groups-cloud .ui-button .ui-state-highlight.ui-icon{background-image:url("images/ui-icons_004276_256x240.png")}.tag-groups-cloud .ui-state-error .ui-icon,.tag-groups-cloud .ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.tag-groups-cloud .ui-button .ui-icon{background-image:url("images/ui-icons_cc0000_256x240.png")}.tag-groups-cloud .ui-icon-blank{background-position:16px 16px}.tag-groups-cloud .ui-icon-caret-1-n{background-position:0 0}.tag-groups-cloud .ui-icon-caret-1-ne{background-position:-16px 0}.tag-groups-cloud .ui-icon-caret-1-e{background-position:-32px 0}.tag-groups-cloud .ui-icon-caret-1-se{background-position:-48px 0}.tag-groups-cloud .ui-icon-caret-1-s{background-position:-65px 0}.tag-groups-cloud .ui-icon-caret-1-sw{background-position:-80px 0}.tag-groups-cloud .ui-icon-caret-1-w{background-position:-96px 0}.tag-groups-cloud .ui-icon-caret-1-nw{background-position:-112px 0}.tag-groups-cloud .ui-icon-caret-2-n-s{background-position:-128px 0}.tag-groups-cloud .ui-icon-caret-2-e-w{background-position:-144px 0}.tag-groups-cloud .ui-icon-triangle-1-n{background-position:0 -16px}.tag-groups-cloud .ui-icon-triangle-1-ne{background-position:-16px -16px}.tag-groups-cloud .ui-icon-triangle-1-e{background-position:-32px -16px}.tag-groups-cloud .ui-icon-triangle-1-se{background-position:-48px -16px}.tag-groups-cloud .ui-icon-triangle-1-s{background-position:-65px -16px}.tag-groups-cloud .ui-icon-triangle-1-sw{background-position:-80px -16px}.tag-groups-cloud .ui-icon-triangle-1-w{background-position:-96px -16px}.tag-groups-cloud .ui-icon-triangle-1-nw{background-position:-112px -16px}.tag-groups-cloud .ui-icon-triangle-2-n-s{background-position:-128px -16px}.tag-groups-cloud .ui-icon-triangle-2-e-w{background-position:-144px -16px}.tag-groups-cloud .ui-icon-arrow-1-n{background-position:0 -32px}.tag-groups-cloud .ui-icon-arrow-1-ne{background-position:-16px -32px}.tag-groups-cloud .ui-icon-arrow-1-e{background-position:-32px -32px}.tag-groups-cloud .ui-icon-arrow-1-se{background-position:-48px -32px}.tag-groups-cloud .ui-icon-arrow-1-s{background-position:-65px -32px}.tag-groups-cloud .ui-icon-arrow-1-sw{background-position:-80px -32px}.tag-groups-cloud .ui-icon-arrow-1-w{background-position:-96px -32px}.tag-groups-cloud .ui-icon-arrow-1-nw{background-position:-112px -32px}.tag-groups-cloud .ui-icon-arrow-2-n-s{background-position:-128px -32px}.tag-groups-cloud .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.tag-groups-cloud .ui-icon-arrow-2-e-w{background-position:-160px -32px}.tag-groups-cloud .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-n{background-position:-192px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-e{background-position:-208px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-s{background-position:-224px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-w{background-position:-240px -32px}.tag-groups-cloud .ui-icon-arrowthick-1-n{background-position:1px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-e{background-position:-32px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-se{background-position:-48px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-s{background-position:-64px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-w{background-position:-96px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.tag-groups-cloud .ui-icon-arrow-4{background-position:0 -80px}.tag-groups-cloud .ui-icon-arrow-4-diag{background-position:-16px -80px}.tag-groups-cloud .ui-icon-extlink{background-position:-32px -80px}.tag-groups-cloud .ui-icon-newwin{background-position:-48px -80px}.tag-groups-cloud .ui-icon-refresh{background-position:-64px -80px}.tag-groups-cloud .ui-icon-shuffle{background-position:-80px -80px}.tag-groups-cloud .ui-icon-transfer-e-w{background-position:-96px -80px}.tag-groups-cloud .ui-icon-transferthick-e-w{background-position:-112px -80px}.tag-groups-cloud .ui-icon-folder-collapsed{background-position:0 -96px}.tag-groups-cloud .ui-icon-folder-open{background-position:-16px -96px}.tag-groups-cloud .ui-icon-document{background-position:-32px -96px}.tag-groups-cloud .ui-icon-document-b{background-position:-48px -96px}.tag-groups-cloud .ui-icon-note{background-position:-64px -96px}.tag-groups-cloud .ui-icon-mail-closed{background-position:-80px -96px}.tag-groups-cloud .ui-icon-mail-open{background-position:-96px -96px}.tag-groups-cloud .ui-icon-suitcase{background-position:-112px -96px}.tag-groups-cloud .ui-icon-comment{background-position:-128px -96px}.tag-groups-cloud .ui-icon-person{background-position:-144px -96px}.tag-groups-cloud .ui-icon-print{background-position:-160px -96px}.tag-groups-cloud .ui-icon-trash{background-position:-176px -96px}.tag-groups-cloud .ui-icon-locked{background-position:-192px -96px}.tag-groups-cloud .ui-icon-unlocked{background-position:-208px -96px}.tag-groups-cloud .ui-icon-bookmark{background-position:-224px -96px}.tag-groups-cloud .ui-icon-tag{background-position:-240px -96px}.tag-groups-cloud .ui-icon-home{background-position:0 -112px}.tag-groups-cloud .ui-icon-flag{background-position:-16px -112px}.tag-groups-cloud .ui-icon-calendar{background-position:-32px -112px}.tag-groups-cloud .ui-icon-cart{background-position:-48px -112px}.tag-groups-cloud .ui-icon-pencil{background-position:-64px -112px}.tag-groups-cloud .ui-icon-clock{background-position:-80px -112px}.tag-groups-cloud .ui-icon-disk{background-position:-96px -112px}.tag-groups-cloud .ui-icon-calculator{background-position:-112px -112px}.tag-groups-cloud .ui-icon-zoomin{background-position:-128px -112px}.tag-groups-cloud .ui-icon-zoomout{background-position:-144px -112px}.tag-groups-cloud .ui-icon-search{background-position:-160px -112px}.tag-groups-cloud .ui-icon-wrench{background-position:-176px -112px}.tag-groups-cloud .ui-icon-gear{background-position:-192px -112px}.tag-groups-cloud .ui-icon-heart{background-position:-208px -112px}.tag-groups-cloud .ui-icon-star{background-position:-224px -112px}.tag-groups-cloud .ui-icon-link{background-position:-240px -112px}.tag-groups-cloud .ui-icon-cancel{background-position:0 -128px}.tag-groups-cloud .ui-icon-plus{background-position:-16px -128px}.tag-groups-cloud .ui-icon-plusthick{background-position:-32px -128px}.tag-groups-cloud .ui-icon-minus{background-position:-48px -128px}.tag-groups-cloud .ui-icon-minusthick{background-position:-64px -128px}.tag-groups-cloud .ui-icon-close{background-position:-80px -128px}.tag-groups-cloud .ui-icon-closethick{background-position:-96px -128px}.tag-groups-cloud .ui-icon-key{background-position:-112px -128px}.tag-groups-cloud .ui-icon-lightbulb{background-position:-128px -128px}.tag-groups-cloud .ui-icon-scissors{background-position:-144px -128px}.tag-groups-cloud .ui-icon-clipboard{background-position:-160px -128px}.tag-groups-cloud .ui-icon-copy{background-position:-176px -128px}.tag-groups-cloud .ui-icon-contact{background-position:-192px -128px}.tag-groups-cloud .ui-icon-image{background-position:-208px -128px}.tag-groups-cloud .ui-icon-video{background-position:-224px -128px}.tag-groups-cloud .ui-icon-script{background-position:-240px -128px}.tag-groups-cloud .ui-icon-alert{background-position:0 -144px}.tag-groups-cloud .ui-icon-info{background-position:-16px -144px}.tag-groups-cloud .ui-icon-notice{background-position:-32px -144px}.tag-groups-cloud .ui-icon-help{background-position:-48px -144px}.tag-groups-cloud .ui-icon-check{background-position:-64px -144px}.tag-groups-cloud .ui-icon-bullet{background-position:-80px -144px}.tag-groups-cloud .ui-icon-radio-on{background-position:-96px -144px}.tag-groups-cloud .ui-icon-radio-off{background-position:-112px -144px}.tag-groups-cloud .ui-icon-pin-w{background-position:-128px -144px}.tag-groups-cloud .ui-icon-pin-s{background-position:-144px -144px}.tag-groups-cloud .ui-icon-play{background-position:0 -160px}.tag-groups-cloud .ui-icon-pause{background-position:-16px -160px}.tag-groups-cloud .ui-icon-seek-next{background-position:-32px -160px}.tag-groups-cloud .ui-icon-seek-prev{background-position:-48px -160px}.tag-groups-cloud .ui-icon-seek-end{background-position:-64px -160px}.tag-groups-cloud .ui-icon-seek-start{background-position:-80px -160px}.tag-groups-cloud .ui-icon-seek-first{background-position:-80px -160px}.tag-groups-cloud .ui-icon-stop{background-position:-96px -160px}.tag-groups-cloud .ui-icon-eject{background-position:-112px -160px}.tag-groups-cloud .ui-icon-volume-off{background-position:-128px -160px}.tag-groups-cloud .ui-icon-volume-on{background-position:-144px -160px}.tag-groups-cloud .ui-icon-power{background-position:0 -176px}.tag-groups-cloud .ui-icon-signal-diag{background-position:-16px -176px}.tag-groups-cloud .ui-icon-signal{background-position:-32px -176px}.tag-groups-cloud .ui-icon-battery-0{background-position:-48px -176px}.tag-groups-cloud .ui-icon-battery-1{background-position:-64px -176px}.tag-groups-cloud .ui-icon-battery-2{background-position:-80px -176px}.tag-groups-cloud .ui-icon-battery-3{background-position:-96px -176px}.tag-groups-cloud .ui-icon-circle-plus{background-position:0 -192px}.tag-groups-cloud .ui-icon-circle-minus{background-position:-16px -192px}.tag-groups-cloud .ui-icon-circle-close{background-position:-32px -192px}.tag-groups-cloud .ui-icon-circle-triangle-e{background-position:-48px -192px}.tag-groups-cloud .ui-icon-circle-triangle-s{background-position:-64px -192px}.tag-groups-cloud .ui-icon-circle-triangle-w{background-position:-80px -192px}.tag-groups-cloud .ui-icon-circle-triangle-n{background-position:-96px -192px}.tag-groups-cloud .ui-icon-circle-arrow-e{background-position:-112px -192px}.tag-groups-cloud .ui-icon-circle-arrow-s{background-position:-128px -192px}.tag-groups-cloud .ui-icon-circle-arrow-w{background-position:-144px -192px}.tag-groups-cloud .ui-icon-circle-arrow-n{background-position:-160px -192px}.tag-groups-cloud .ui-icon-circle-zoomin{background-position:-176px -192px}.tag-groups-cloud .ui-icon-circle-zoomout{background-position:-192px -192px}.tag-groups-cloud .ui-icon-circle-check{background-position:-208px -192px}.tag-groups-cloud .ui-icon-circlesmall-plus{background-position:0 -208px}.tag-groups-cloud .ui-icon-circlesmall-minus{background-position:-16px -208px}.tag-groups-cloud .ui-icon-circlesmall-close{background-position:-32px -208px}.tag-groups-cloud .ui-icon-squaresmall-plus{background-position:-48px -208px}.tag-groups-cloud .ui-icon-squaresmall-minus{background-position:-64px -208px}.tag-groups-cloud .ui-icon-squaresmall-close{background-position:-80px -208px}.tag-groups-cloud .ui-icon-grip-dotted-vertical{background-position:0 -224px}.tag-groups-cloud .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.tag-groups-cloud .ui-icon-grip-solid-vertical{background-position:-32px -224px}.tag-groups-cloud .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.tag-groups-cloud .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.tag-groups-cloud .ui-icon-grip-diagonal-se{background-position:-80px -224px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-tl{border-top-left-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-tr{border-top-right-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-bl{border-bottom-left-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-br{border-bottom-right-radius:6px}.tag-groups-cloud .ui-widget-overlay{background:#a6a6a6 url("images/ui-bg_dots-small_65_a6a6a6_2x2.png") 50% 50% repeat;opacity:.4;filter:Alpha(Opacity=40)}.tag-groups-cloud .ui-widget-shadow{-webkit-box-shadow:-8px -8px 8px #333;box-shadow:-8px -8px 8px #333}PK�������!�\T��T��9��assets/css/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.pngnu�[��������PNG  ��� IHDR��������A���bKGD X��� pHYs���H���H�Fk>���IDATHϱ @)D6u%,ںi@&M,\ BI.p U_ln�(ʷ۶I7zBʆ\,,q"X%3WaeG85Nd6a^bpwB”GAHEZQ|�pz(/*���%tEXtdate:create�2019-05-26T06:41:28+00:00���%tEXtdate:modify�2019-05-26T06:41:28+00:00\_Q����IENDB`PK�������!�ndG������C��assets/css/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.pngnu�[��������PNG  ��� IHDR������d����2���bKGD1��� pHYs���H���H�Fk>���=IDATc0( s~30b%s*O1 ~h1|?=÷o�A;c���%tEXtdate:create�2019-05-26T06:41:28+00:00���%tEXtdate:modify�2019-05-26T06:41:28+00:00\_Q����IENDB`PK�������!�_������C��assets/css/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.pngnu�[��������PNG  ��� IHDR������d����2���bKGD1��� pHYs���H���H�Fk>���>IDATc0Hf c3|G >1|fhY 8�FPN���%tEXtdate:create�2019-05-26T06:41:28+00:00���%tEXtdate:modify�2019-05-26T06:41:28+00:00\_Q����IENDB`PK�������!�D~EB��B��B��assets/css/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.pngnu�[��������PNG  ��� IHDR������d���t���bKGD X��� pHYs���H���H�Fk>���IDAT(1 @Dg#X؊ i"9v5tn+B@0 T/uY&IE&Fܔqq1]v#Lnk4m&=\,Ų}~4f POZZt7t`҃���%tEXtdate:create�2019-05-26T06:41:28+00:00���%tEXtdate:modify�2019-05-26T06:41:28+00:00\_Q����IENDB`PK�������!�@H��H��/��assets/css/ui-lightness/jquery-ui.theme.min.cssnu�[��������/*! jQuery UI - v1.11.4 - 2016-06-02 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .tag-groups-cloud .ui-widget{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1.1em}.tag-groups-cloud .ui-widget .ui-widget{font-size:1em}.tag-groups-cloud .ui-widget input,.tag-groups-cloud .ui-widget select,.tag-groups-cloud .ui-widget textarea,.tag-groups-cloud .ui-widget button{font-family:Trebuchet MS,Tahoma,Verdana,Arial,sans-serif;font-size:1em}.tag-groups-cloud .ui-widget-content{border:1px solid #ddd;background:#eee url("images/ui-bg_highlight-soft_100_eeeeee_1x100.png") 50% top repeat-x;color:#333}.tag-groups-cloud .ui-widget-content a{color:#333}.tag-groups-cloud .ui-widget-header{border:1px solid #e78f08;background:#f6a828 url("images/ui-bg_gloss-wave_35_f6a828_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.tag-groups-cloud .ui-widget-header a{color:#fff}.tag-groups-cloud .ui-state-default,.tag-groups-cloud .ui-widget-content .ui-state-default,.tag-groups-cloud .ui-widget-header .ui-state-default{border:1px solid #ccc;background:#f6f6f6 url("images/ui-bg_glass_100_f6f6f6_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#1c94c4}.tag-groups-cloud .ui-state-default a,.tag-groups-cloud .ui-state-default a:link,.tag-groups-cloud .ui-state-default a:visited{color:#1c94c4;text-decoration:none}.tag-groups-cloud .ui-state-hover,.tag-groups-cloud .ui-widget-content .ui-state-hover,.tag-groups-cloud .ui-widget-header .ui-state-hover,.tag-groups-cloud .ui-state-focus,.tag-groups-cloud .ui-widget-content .ui-state-focus,.tag-groups-cloud .ui-widget-header .ui-state-focus{border:1px solid #fbcb09;background:#fdf5ce url("images/ui-bg_glass_100_fdf5ce_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#c77405}.tag-groups-cloud .ui-state-hover a,.tag-groups-cloud .ui-state-hover a:hover,.tag-groups-cloud .ui-state-hover a:link,.tag-groups-cloud .ui-state-hover a:visited,.tag-groups-cloud .ui-state-focus a,.tag-groups-cloud .ui-state-focus a:hover,.tag-groups-cloud .ui-state-focus a:link,.tag-groups-cloud .ui-state-focus a:visited{color:#c77405;text-decoration:none}.tag-groups-cloud .ui-state-active,.tag-groups-cloud .ui-widget-content .ui-state-active,.tag-groups-cloud .ui-widget-header .ui-state-active{border:1px solid #fbd850;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eb8f00}.tag-groups-cloud .ui-state-active a,.tag-groups-cloud .ui-state-active a:link,.tag-groups-cloud .ui-state-active a:visited{color:#eb8f00;text-decoration:none}.tag-groups-cloud .ui-state-highlight,.tag-groups-cloud .ui-widget-content .ui-state-highlight,.tag-groups-cloud .ui-widget-header .ui-state-highlight{border:1px solid #fed22f;background:#ffe45c url("images/ui-bg_highlight-soft_75_ffe45c_1x100.png") 50% top repeat-x;color:#363636}.tag-groups-cloud .ui-state-highlight a,.tag-groups-cloud .ui-widget-content .ui-state-highlight a,.tag-groups-cloud .ui-widget-header .ui-state-highlight a{color:#363636}.tag-groups-cloud .ui-state-error,.tag-groups-cloud .ui-widget-content .ui-state-error,.tag-groups-cloud .ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#b81900 url("images/ui-bg_diagonals-thick_18_b81900_40x40.png") 50% 50% repeat;color:#fff}.tag-groups-cloud .ui-state-error a,.tag-groups-cloud .ui-widget-content .ui-state-error a,.tag-groups-cloud .ui-widget-header .ui-state-error a{color:#fff}.tag-groups-cloud .ui-state-error-text,.tag-groups-cloud .ui-widget-content .ui-state-error-text,.tag-groups-cloud .ui-widget-header .ui-state-error-text{color:#fff}.tag-groups-cloud .ui-priority-primary,.tag-groups-cloud .ui-widget-content .ui-priority-primary,.tag-groups-cloud .ui-widget-header .ui-priority-primary{font-weight:bold}.tag-groups-cloud .ui-priority-secondary,.tag-groups-cloud .ui-widget-content .ui-priority-secondary,.tag-groups-cloud .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.tag-groups-cloud .ui-state-disabled,.tag-groups-cloud .ui-widget-content .ui-state-disabled,.tag-groups-cloud .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.tag-groups-cloud .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.tag-groups-cloud .ui-icon{width:16px;height:16px}.tag-groups-cloud .ui-icon,.tag-groups-cloud .ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.tag-groups-cloud .ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.tag-groups-cloud .ui-state-default .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.tag-groups-cloud .ui-state-hover .ui-icon,.tag-groups-cloud .ui-state-focus .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.tag-groups-cloud .ui-state-active .ui-icon{background-image:url("images/ui-icons_ef8c08_256x240.png")}.tag-groups-cloud .ui-state-highlight .ui-icon{background-image:url("images/ui-icons_228ef1_256x240.png")}.tag-groups-cloud .ui-state-error .ui-icon,.tag-groups-cloud .ui-state-error-text .ui-icon{background-image:url("images/ui-icons_ffd27a_256x240.png")}.tag-groups-cloud .ui-icon-blank{background-position:16px 16px}.tag-groups-cloud .ui-icon-carat-1-n{background-position:0 0}.tag-groups-cloud .ui-icon-carat-1-ne{background-position:-16px 0}.tag-groups-cloud .ui-icon-carat-1-e{background-position:-32px 0}.tag-groups-cloud .ui-icon-carat-1-se{background-position:-48px 0}.tag-groups-cloud .ui-icon-carat-1-s{background-position:-64px 0}.tag-groups-cloud .ui-icon-carat-1-sw{background-position:-80px 0}.tag-groups-cloud .ui-icon-carat-1-w{background-position:-96px 0}.tag-groups-cloud .ui-icon-carat-1-nw{background-position:-112px 0}.tag-groups-cloud .ui-icon-carat-2-n-s{background-position:-128px 0}.tag-groups-cloud .ui-icon-carat-2-e-w{background-position:-144px 0}.tag-groups-cloud .ui-icon-triangle-1-n{background-position:0 -16px}.tag-groups-cloud .ui-icon-triangle-1-ne{background-position:-16px -16px}.tag-groups-cloud .ui-icon-triangle-1-e{background-position:-32px -16px}.tag-groups-cloud .ui-icon-triangle-1-se{background-position:-48px -16px}.tag-groups-cloud .ui-icon-triangle-1-s{background-position:-64px -16px}.tag-groups-cloud .ui-icon-triangle-1-sw{background-position:-80px -16px}.tag-groups-cloud .ui-icon-triangle-1-w{background-position:-96px -16px}.tag-groups-cloud .ui-icon-triangle-1-nw{background-position:-112px -16px}.tag-groups-cloud .ui-icon-triangle-2-n-s{background-position:-128px -16px}.tag-groups-cloud .ui-icon-triangle-2-e-w{background-position:-144px -16px}.tag-groups-cloud .ui-icon-arrow-1-n{background-position:0 -32px}.tag-groups-cloud .ui-icon-arrow-1-ne{background-position:-16px -32px}.tag-groups-cloud .ui-icon-arrow-1-e{background-position:-32px -32px}.tag-groups-cloud .ui-icon-arrow-1-se{background-position:-48px -32px}.tag-groups-cloud .ui-icon-arrow-1-s{background-position:-64px -32px}.tag-groups-cloud .ui-icon-arrow-1-sw{background-position:-80px -32px}.tag-groups-cloud .ui-icon-arrow-1-w{background-position:-96px -32px}.tag-groups-cloud .ui-icon-arrow-1-nw{background-position:-112px -32px}.tag-groups-cloud .ui-icon-arrow-2-n-s{background-position:-128px -32px}.tag-groups-cloud .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.tag-groups-cloud .ui-icon-arrow-2-e-w{background-position:-160px -32px}.tag-groups-cloud .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-n{background-position:-192px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-e{background-position:-208px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-s{background-position:-224px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-w{background-position:-240px -32px}.tag-groups-cloud .ui-icon-arrowthick-1-n{background-position:0 -48px}.tag-groups-cloud .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-e{background-position:-32px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-se{background-position:-48px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-s{background-position:-64px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-w{background-position:-96px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.tag-groups-cloud .ui-icon-arrow-4{background-position:0 -80px}.tag-groups-cloud .ui-icon-arrow-4-diag{background-position:-16px -80px}.tag-groups-cloud .ui-icon-extlink{background-position:-32px -80px}.tag-groups-cloud .ui-icon-newwin{background-position:-48px -80px}.tag-groups-cloud .ui-icon-refresh{background-position:-64px -80px}.tag-groups-cloud .ui-icon-shuffle{background-position:-80px -80px}.tag-groups-cloud .ui-icon-transfer-e-w{background-position:-96px -80px}.tag-groups-cloud .ui-icon-transferthick-e-w{background-position:-112px -80px}.tag-groups-cloud .ui-icon-folder-collapsed{background-position:0 -96px}.tag-groups-cloud .ui-icon-folder-open{background-position:-16px -96px}.tag-groups-cloud .ui-icon-document{background-position:-32px -96px}.tag-groups-cloud .ui-icon-document-b{background-position:-48px -96px}.tag-groups-cloud .ui-icon-note{background-position:-64px -96px}.tag-groups-cloud .ui-icon-mail-closed{background-position:-80px -96px}.tag-groups-cloud .ui-icon-mail-open{background-position:-96px -96px}.tag-groups-cloud .ui-icon-suitcase{background-position:-112px -96px}.tag-groups-cloud .ui-icon-comment{background-position:-128px -96px}.tag-groups-cloud .ui-icon-person{background-position:-144px -96px}.tag-groups-cloud .ui-icon-print{background-position:-160px -96px}.tag-groups-cloud .ui-icon-trash{background-position:-176px -96px}.tag-groups-cloud .ui-icon-locked{background-position:-192px -96px}.tag-groups-cloud .ui-icon-unlocked{background-position:-208px -96px}.tag-groups-cloud .ui-icon-bookmark{background-position:-224px -96px}.tag-groups-cloud .ui-icon-tag{background-position:-240px -96px}.tag-groups-cloud .ui-icon-home{background-position:0 -112px}.tag-groups-cloud .ui-icon-flag{background-position:-16px -112px}.tag-groups-cloud .ui-icon-calendar{background-position:-32px -112px}.tag-groups-cloud .ui-icon-cart{background-position:-48px -112px}.tag-groups-cloud .ui-icon-pencil{background-position:-64px -112px}.tag-groups-cloud .ui-icon-clock{background-position:-80px -112px}.tag-groups-cloud .ui-icon-disk{background-position:-96px -112px}.tag-groups-cloud .ui-icon-calculator{background-position:-112px -112px}.tag-groups-cloud .ui-icon-zoomin{background-position:-128px -112px}.tag-groups-cloud .ui-icon-zoomout{background-position:-144px -112px}.tag-groups-cloud .ui-icon-search{background-position:-160px -112px}.tag-groups-cloud .ui-icon-wrench{background-position:-176px -112px}.tag-groups-cloud .ui-icon-gear{background-position:-192px -112px}.tag-groups-cloud .ui-icon-heart{background-position:-208px -112px}.tag-groups-cloud .ui-icon-star{background-position:-224px -112px}.tag-groups-cloud .ui-icon-link{background-position:-240px -112px}.tag-groups-cloud .ui-icon-cancel{background-position:0 -128px}.tag-groups-cloud .ui-icon-plus{background-position:-16px -128px}.tag-groups-cloud .ui-icon-plusthick{background-position:-32px -128px}.tag-groups-cloud .ui-icon-minus{background-position:-48px -128px}.tag-groups-cloud .ui-icon-minusthick{background-position:-64px -128px}.tag-groups-cloud .ui-icon-close{background-position:-80px -128px}.tag-groups-cloud .ui-icon-closethick{background-position:-96px -128px}.tag-groups-cloud .ui-icon-key{background-position:-112px -128px}.tag-groups-cloud .ui-icon-lightbulb{background-position:-128px -128px}.tag-groups-cloud .ui-icon-scissors{background-position:-144px -128px}.tag-groups-cloud .ui-icon-clipboard{background-position:-160px -128px}.tag-groups-cloud .ui-icon-copy{background-position:-176px -128px}.tag-groups-cloud .ui-icon-contact{background-position:-192px -128px}.tag-groups-cloud .ui-icon-image{background-position:-208px -128px}.tag-groups-cloud .ui-icon-video{background-position:-224px -128px}.tag-groups-cloud .ui-icon-script{background-position:-240px -128px}.tag-groups-cloud .ui-icon-alert{background-position:0 -144px}.tag-groups-cloud .ui-icon-info{background-position:-16px -144px}.tag-groups-cloud .ui-icon-notice{background-position:-32px -144px}.tag-groups-cloud .ui-icon-help{background-position:-48px -144px}.tag-groups-cloud .ui-icon-check{background-position:-64px -144px}.tag-groups-cloud .ui-icon-bullet{background-position:-80px -144px}.tag-groups-cloud .ui-icon-radio-on{background-position:-96px -144px}.tag-groups-cloud .ui-icon-radio-off{background-position:-112px -144px}.tag-groups-cloud .ui-icon-pin-w{background-position:-128px -144px}.tag-groups-cloud .ui-icon-pin-s{background-position:-144px -144px}.tag-groups-cloud .ui-icon-play{background-position:0 -160px}.tag-groups-cloud .ui-icon-pause{background-position:-16px -160px}.tag-groups-cloud .ui-icon-seek-next{background-position:-32px -160px}.tag-groups-cloud .ui-icon-seek-prev{background-position:-48px -160px}.tag-groups-cloud .ui-icon-seek-end{background-position:-64px -160px}.tag-groups-cloud .ui-icon-seek-start{background-position:-80px -160px}.tag-groups-cloud .ui-icon-seek-first{background-position:-80px -160px}.tag-groups-cloud .ui-icon-stop{background-position:-96px -160px}.tag-groups-cloud .ui-icon-eject{background-position:-112px -160px}.tag-groups-cloud .ui-icon-volume-off{background-position:-128px -160px}.tag-groups-cloud .ui-icon-volume-on{background-position:-144px -160px}.tag-groups-cloud .ui-icon-power{background-position:0 -176px}.tag-groups-cloud .ui-icon-signal-diag{background-position:-16px -176px}.tag-groups-cloud .ui-icon-signal{background-position:-32px -176px}.tag-groups-cloud .ui-icon-battery-0{background-position:-48px -176px}.tag-groups-cloud .ui-icon-battery-1{background-position:-64px -176px}.tag-groups-cloud .ui-icon-battery-2{background-position:-80px -176px}.tag-groups-cloud .ui-icon-battery-3{background-position:-96px -176px}.tag-groups-cloud .ui-icon-circle-plus{background-position:0 -192px}.tag-groups-cloud .ui-icon-circle-minus{background-position:-16px -192px}.tag-groups-cloud .ui-icon-circle-close{background-position:-32px -192px}.tag-groups-cloud .ui-icon-circle-triangle-e{background-position:-48px -192px}.tag-groups-cloud .ui-icon-circle-triangle-s{background-position:-64px -192px}.tag-groups-cloud .ui-icon-circle-triangle-w{background-position:-80px -192px}.tag-groups-cloud .ui-icon-circle-triangle-n{background-position:-96px -192px}.tag-groups-cloud .ui-icon-circle-arrow-e{background-position:-112px -192px}.tag-groups-cloud .ui-icon-circle-arrow-s{background-position:-128px -192px}.tag-groups-cloud .ui-icon-circle-arrow-w{background-position:-144px -192px}.tag-groups-cloud .ui-icon-circle-arrow-n{background-position:-160px -192px}.tag-groups-cloud .ui-icon-circle-zoomin{background-position:-176px -192px}.tag-groups-cloud .ui-icon-circle-zoomout{background-position:-192px -192px}.tag-groups-cloud .ui-icon-circle-check{background-position:-208px -192px}.tag-groups-cloud .ui-icon-circlesmall-plus{background-position:0 -208px}.tag-groups-cloud .ui-icon-circlesmall-minus{background-position:-16px -208px}.tag-groups-cloud .ui-icon-circlesmall-close{background-position:-32px -208px}.tag-groups-cloud .ui-icon-squaresmall-plus{background-position:-48px -208px}.tag-groups-cloud .ui-icon-squaresmall-minus{background-position:-64px -208px}.tag-groups-cloud .ui-icon-squaresmall-close{background-position:-80px -208px}.tag-groups-cloud .ui-icon-grip-dotted-vertical{background-position:0 -224px}.tag-groups-cloud .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.tag-groups-cloud .ui-icon-grip-solid-vertical{background-position:-32px -224px}.tag-groups-cloud .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.tag-groups-cloud .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.tag-groups-cloud .ui-icon-grip-diagonal-se{background-position:-80px -224px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-tl{border-top-left-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-tr{border-top-right-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-bl{border-bottom-left-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-br{border-bottom-right-radius:4px}.tag-groups-cloud .ui-widget-overlay{background:#666 url("images/ui-bg_diagonals-thick_20_666666_40x40.png") 50% 50% repeat;opacity:.5;filter:Alpha(Opacity=50)}.tag-groups-cloud .ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000;opacity:.2;filter:Alpha(Opacity=20);border-radius:5px} PK�������!�wF����:��assets/css/ui-lightness/images/ui-icons_ef8c08_256x240.pngnu�[��������PNG  ��� IHDR���������IJ��PLTEj���YtRNS�3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^���bKGD�H��� pHYs���H���H�Fk>��dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}<w�( 1$ ;F@%? B,Lh{t#�T@/?j9 mN #+``I _-sʹU0 M[ s 4`x š# D<~ ؀K .4]`PDDDDDDĈqEk@A~* !YX`hv3\LX�OtJ2bؓlQI<  6-Xlֈ6H|=j`Eiq�Cv:qC??x,�r*tݻ}|;�kP4dYf�K~[ >X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*�aӝ%MFDDDDDDTߖH,ERUn ب<V- @/NmթHw*+#$oe{% 7\Xǀ2~0&nsbA,D AVI| Og鴋 7y 7Jf�:_w^�H v{/O9<Y`+ HRٰ[?  =c""""""F˽sG<*k9cE8薽zfmr1 Nnqw&=O\}K` #2~L|?m>\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK �*xXEe K솎%mKX~sFE~tdc�aI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=�jcM2sJCLiR NQ0=�Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N�{DC>m^ƒS&, ;N&B} <_AB]HuN(B�0{h1IK�Ds j' M8.ӫ1h3df}mq� nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v�5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|�A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7m�Tzզ.\.` WE�"""""v)V<KZX.Ex~Ч)ߚ�W_}5|s/!?'poդtC3@Q)t`b!,dY96A2/튮 ntTK>#]L;zqJr²[\-tҽ5 @ͷϟnT@+;�cQhC*TڙA<SkuµbE� /$Z.ej_ʤrWaB6d(Ss[|竕 /5R(4X76`3|Pp'H~<R?M2) gVpBn=|Wͬ\V0_81OׄKz||lP_ωlxX;ǀJu�<Ng[]= ( #]pPais f Vz]ౚz>Vr?f�?� Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 �iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM�?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`n�PNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| �? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl���%tEXtdate:create�2015-03-11T14:59:12+00:000i���%tEXtdate:modify�2015-03-11T14:59:12+00:00A���tEXtSoftware�Adobe ImageReadyqe<����IENDB`PK�������!�(����:��assets/css/ui-lightness/images/ui-icons_ffd27a_256x240.pngnu�[��������PNG  ��� IHDR���������IJ��PLTEzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz���YtRNS�3P/"Uq@f`2 !<BHK Z#'1S,4j8E|)Q$ bJmߜGc?oh@^���bKGD�H��� pHYs���H���H�Fk>��dIDATx] c۶H阒]Kd%٫뺮lmw]|pXm-}<w�( 1$ ;F@%? B,Lh{t#�T@/?j9 mN #+``I _-sʹU0 M[ s 4`x š# D<~ ؀K .4]`PDDDDDDĈqEk@A~* !YX`hv3\LX�OtJ2bؓlQI<  6-Xlֈ6H|=j`Eiq�Cv:qC??x,�r*tݻ}|;�kP4dYf�K~[ >X:+iĆQV9\e'AtOS:72YsxMہB&z>nC@r@*�aӝ%MFDDDDDDTߖH,ERUn ب<V- @/NmթHw*+#$oe{% 7\Xǀ2~0&nsbA,D AVI| Og鴋 7y 7Jf�:_w^�H v{/O9<Y`+ HRٰ[?  =c""""""F˽sG<*k9cE8薽zfmr1 Nnqw&=O\}K` #2~L|?m>\f͹:}4ᦋ{)n[ ̰E K Y Dۇ- +Kl=ӃL`љ|%n a N#5 (4?EDDDD\oWFfq;\E_,W!%zE!F¶. (USHQ0dw)T 8#p,xBK �*xXEe K솎%mKX~sFE~tdc�aI1Af4dHcGSB`0wev`"{ .GDDDD,dO6k"qkMefS_UKŌ&g~>n H}) LF%8()r![4统qQk0m[Le_70@>1 X0AZVcEV Ltk3EJ44ZﮊN`rt>`˥  AHBLH@cUq=�jcM2sJCLiR NQ0=�Yi-|4V ]]B^ޞ_H$<$ a=d@ (ZAp_}~s:N�{DC>m^ƒS&, ;N&B} <_AB]HuN(B�0{h1IK�Ds j' M8.ӫ1h3df}mq� nU{Lo z \=?@ ((e|=ơ麄Ci1r<|OO; `HpQyzԈuZVƲ!)5mC2Lyg;֑RjWa@@VL&Wru=Z ̥=U5} 7;b(nP&sk48ͥ01U Wvk18dqTՌE]qH8 GF K'rOrŗ6"fpT^3c"nMم-/W=tJ,X){P Rm|K>mX8v�5h<_{ꘀYF|&_G;&>^W⁃&K(81EB@F&;"L'wfwE-6o&/̫'Xe,>~ee|�A=) dQ`}P[KN˂/~)O[dO=3El5'Y$?7m�Tzզ.\.` WE�"""""v)V<KZX.Ex~Ч)ߚ�W_}5|s/!?'poդtC3@Q)t`b!,dY96A2/튮 ntTK>#]L;zqJr²[\-tҽ5 @ͷϟnT@+;�cQhC*TڙA<SkuµbE� /$Z.ej_ʤrWaB6d(Ss[|竕 /5R(4X76`3|Pp'H~<R?M2) gVpBn=|Wͬ\V0_81OׄKz||lP_ωlxX;ǀJu�<Ng[]= ( #]pPais f Vz]ౚz>Vr?f�?� Q1T`} Hk,{VZˋTϛ?I̯uQKLMe͆~qym09 S;j5 �iQ]7k0UޭGkX3#lY_Цxj޶9`# M [z KuO_z˿Dܭ*kOJ(7n\e ITƨl/U߶uw.~;#r.8 o# 5Lh>1i pVM�?/u70 X@L+M+{Fkt{ŧ890`. ĀCR+\/t R; TӲ]aL|efđ >ۣG|P`P8C1K՛A̍<2ۂKrl@L L 8@E>`n�PNԍ,p EƆZF lÎ; F7Ȯ; swSz)g7{rsSgȋ(߄~AWytX$NVR_<6p.O8O[OdDk>_OO}JSdmV?W(_m j~=H IԁF>T/{*]IGJ@iqamNF|Q50+ ES8:v`p~vj:Bp96oys% |@H]+@t]Wk}}7FʮrAB\m-_2PY8xՎN.h~@+7z5t_//?0S>)zi0n/B`{DW#`Bo[,gFVЁpP߾C]Bz ,XXfԃA:H k7dZ9oc}o]0vd:R]0ve]刈jу| �? +(OǍ+ #ysߍnpFru<.HȺotM3h}߆P}˗vP}mǀ?WZ@}@@FDl���%tEXtdate:create�2015-03-11T14:59:12+00:000i���%tEXtdate:modify�2015-03-11T14:59:12+00:00A���tEXtSoftware�Adobe ImageReadyqe<����IENDB`PK�������!�"Y"��Y"����assets/css/sumoselect.cssnu�[��������.SumoSelect p {margin: 0;} .SumoSelect{width: 200px;} .SelectBox {padding: 5px 8px;} .sumoStopScroll{overflow:hidden;} /* Filtering style */ .SumoSelect .hidden { display:none; } .SumoSelect .search-txt{display:none;outline:none;} .SumoSelect .no-match{display:none;padding: 6px;} .SumoSelect.open .search-txt{display: inline-block;position: absolute;top: 0;left: 0;width: 100%;margin: 0;padding: 5px 8px;border: none;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;border-radius: 5px;} .SumoSelect.open>.search>span, .SumoSelect.open>.search>label{visibility:hidden;} /*this is applied on that hidden select. DO NOT USE display:none; or visiblity:hidden; and Do not override any of these properties. */ .SelectClass,.SumoUnder { position: absolute; top: 0; left: 0; right: 0; height: 100%; width: 100%; border: none; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); -moz-opacity: 0; -khtml-opacity: 0; opacity: 0; } .SelectClass{z-index: 1;} .SumoSelect > .optWrapper > .options li.opt label, .SumoSelect > .CaptionCont,.SumoSelect .select-all > label { user-select: none; -o-user-select: none; -moz-user-select: none; -khtml-user-select: none; -webkit-user-select: none; } .SumoSelect { display: inline-block; position: relative;outline:none;} .SumoSelect:focus > .CaptionCont,.SumoSelect:hover > .CaptionCont, .SumoSelect.open > .CaptionCont {box-shadow: 0 0 2px #7799D0;border-color: #7799D0;} .SumoSelect > .CaptionCont { position: relative; border: 1px solid #A4A4A4; min-height: 14px; background-color: #fff;border-radius:2px;margin:0;} .SumoSelect > .CaptionCont > span { display: block; padding-right: 30px; text-overflow: ellipsis; white-space: nowrap; overflow: hidden;cursor:default;} /*placeholder style*/ .SumoSelect > .CaptionCont > span.placeholder { color: #ccc; font-style: italic; } .SumoSelect > .CaptionCont > label { position: absolute; top: 0; right: 0; bottom: 0; width: 30px;} .SumoSelect > .CaptionCont > label > i { background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA0AAAANCAYAAABy6+R8AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3wMdBhAJ/fwnjwAAAGFJREFUKM9jYBh+gBFKuzEwMKQwMDB8xaOWlYGB4T4DA0MrsuapDAwM//HgNwwMDDbYTJuGQ8MHBgYGJ1xOYGNgYJiBpuEpAwODHSF/siDZ+ISBgcGClEDqZ2Bg8B6CkQsAPRga0cpRtDEAAAAASUVORK5CYII='); background-position: center center; width: 16px; height: 16px; display: block; position: absolute; top: 0; left: 0; right: 0; bottom: 0; margin: auto;background-repeat: no-repeat;opacity: 0.8;} .SumoSelect > .optWrapper {display:none; z-index: 1000; top: 30px; width: 100%; position: absolute; left: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; background: #fff; border: 1px solid #ddd; box-shadow: 2px 3px 3px rgba(0, 0, 0, 0.11); border-radius: 3px;overflow: hidden;} .SumoSelect.open > .optWrapper {top:35px; display:block;} .SumoSelect.open > .optWrapper.up {top: auto;bottom: 100%;margin-bottom: 5px;} .SumoSelect > .optWrapper ul {list-style: none; display: block; padding: 0; margin: 0; overflow: auto;} .SumoSelect > .optWrapper > .options { border-radius: 2px;position:relative; /*Set the height of pop up here (only for desktop mode)*/ max-height: 250px; /*height*/ } .SumoSelect > .optWrapper > .options li.group.disabled > label{opacity:0.5;} .SumoSelect > .optWrapper > .options li ul li.opt{padding-left: 22px;} .SumoSelect > .optWrapper.multiple > .options li ul li.opt{padding-left: 50px;} .SumoSelect > .optWrapper.isFloating > .options {/*max-height: 100%;*/box-shadow: 0 0 100px #595959;} .SumoSelect > .optWrapper > .options li.opt { padding: 6px 6px; position: relative;border-bottom: 1px solid #f5f5f5;} .SumoSelect > .optWrapper > .options > li.opt:first-child { border-radius: 2px 2px 0 0; } .SumoSelect > .optWrapper > .options > li.opt:last-child {border-radius: 0 0 2px 2px; border-bottom: none;} .SumoSelect > .optWrapper > .options li.opt:hover { background-color: #E4E4E4; } .SumoSelect > .optWrapper > .options li.opt.sel{background-color: #a1c0e4; border-bottom: 1px solid #a1c0e4;} .SumoSelect > .optWrapper > .options li label { text-overflow: ellipsis; white-space: nowrap; overflow: hidden; display: block;cursor: pointer;} .SumoSelect > .optWrapper > .options li span { display: none; } .SumoSelect > .optWrapper > .options li.group > label {cursor: default;padding: 8px 6px;font-weight: bold;} /*Floating styles*/ .SumoSelect > .optWrapper.isFloating { position: fixed; top: 0; left: 0; right: 0; width: 90%; bottom: 0; margin: auto; max-height: 90%; } /*disabled state*/ .SumoSelect > .optWrapper > .options li.opt.disabled { background-color: inherit;pointer-events: none;} .SumoSelect > .optWrapper > .options li.opt.disabled * { -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)"; /* IE 5-7 */ filter: alpha(opacity=50); /* Netscape */ -moz-opacity: 0.5; /* Safari 1.x */ -khtml-opacity: 0.5; /* Good browsers */ opacity: 0.5; } /*styling for multiple select*/ .SumoSelect > .optWrapper.multiple > .options li.opt { padding-left: 35px;cursor: pointer;} .SumoSelect > .optWrapper.multiple > .options li.opt span, .SumoSelect .select-all > span{position:absolute;display:block;width:30px;top:0;bottom:0;margin-left:-35px;} .SumoSelect > .optWrapper.multiple > .options li.opt span i, .SumoSelect .select-all > span i{position: absolute;margin: auto;left: 0;right: 0;top: 0;bottom: 0;width: 14px;height: 14px;border: 1px solid #AEAEAE;border-radius: 2px;box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.15);background-color: #fff;} .SumoSelect > .optWrapper > .MultiControls { display: none; border-top: 1px solid #ddd; background-color: #fff; box-shadow: 0 0 2px rgba(0, 0, 0, 0.13); border-radius: 0 0 3px 3px; } .SumoSelect > .optWrapper.multiple.isFloating > .MultiControls { display: block; margin-top: 5px; position: absolute; bottom: 0; width: 100%; } .SumoSelect > .optWrapper.multiple.okCancelInMulti > .MultiControls { display: block; } .SumoSelect > .optWrapper.multiple.okCancelInMulti > .MultiControls > p { padding: 6px; } .SumoSelect > .optWrapper.multiple > .MultiControls > p { display: inline-block; cursor: pointer; padding: 12px; width: 50%; box-sizing: border-box; text-align: center; } .SumoSelect > .optWrapper.multiple > .MultiControls > p:hover { background-color: #f1f1f1; } .SumoSelect > .optWrapper.multiple > .MultiControls > p.btnOk { border-right: 1px solid #DBDBDB; border-radius: 0 0 0 3px; } .SumoSelect > .optWrapper.multiple > .MultiControls > p.btnCancel { border-radius: 0 0 3px 0; } /*styling for select on popup mode*/ .SumoSelect > .optWrapper.isFloating > .options li.opt { padding: 12px 6px; } /*styling for only multiple select on popup mode*/ .SumoSelect > .optWrapper.multiple.isFloating > .options li.opt { padding-left: 35px; } .SumoSelect > .optWrapper.multiple.isFloating { padding-bottom: 43px; } .SumoSelect > .optWrapper.multiple > .options li.opt.selected span i, .SumoSelect .select-all.selected > span i, .SumoSelect .select-all.partial > span i{background-color: rgb(17, 169, 17);box-shadow: none;border-color: transparent;background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAGCAYAAAD+Bd/7AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTNXG14zYAAABMSURBVAiZfc0xDkAAFIPhd2Kr1WRjcAExuIgzGUTIZ/AkImjSofnbNBAfHvzAHjOKNzhiQ42IDFXCDivaaxAJd0xYshT3QqBxqnxeHvhunpu23xnmAAAAAElFTkSuQmCC');background-repeat: no-repeat;background-position: center center;} /*disabled state*/ .SumoSelect.disabled { opacity: 0.7;cursor: not-allowed;} .SumoSelect.disabled > .CaptionCont{border-color:#ccc;box-shadow:none;} /**Select all button**/ .SumoSelect .select-all{border-radius: 3px 3px 0 0;position: relative;border-bottom: 1px solid #ddd;background-color: #fff;padding: 8px 0 3px 35px;height: 20px;cursor: pointer;} .SumoSelect .select-all > label, .SumoSelect .select-all > span i{cursor: pointer;} .SumoSelect .select-all.partial > span i{background-color:#ccc;} /*styling for optgroups*/ .SumoSelect > .optWrapper > .options li.optGroup { padding-left: 5px; text-decoration: underline; } PK�������!�;������assets/css/backend.cssnu�[��������/* Part of the WordPress plugin Tag Groups Plugin URI: https://chattymango.com/tag-groups/ Author: Christoph Amthor License: GNU GENERAL PUBLIC LICENSE, Version 3 */ .tg_sort_tr { cursor: grab; transition: box-shadow .25s; height: 50px; width: 100%; } .tg_sort_tr.ui-sortable-helper td { min-width: 100px; } .tg_sort_tr.ui-sortable-helper .tg_hide_when_drag { visibility: hidden; } .tg_sort_tr:hover { box-shadow: 2px 2px 5px 0 rgba(0,0,0,0.16); } .ui-sortable-helper { cursor: grabbing; } .tg_pointer { cursor: pointer; } .tg_right { float: right; } .tg_left { float: left; } .tg_text { cursor: text; } .tg_large { font-size: 2em; } .tg_up, .tg_down { font-size: 30px; } .tg_groups_table { border-spacing: 0 2px !important; } .tg_groups_table > tbody > :nth-child(4n+1) { background-color: #f9f9f9; } .tg_groups_table td { vertical-align: middle; } .tg_ask_delete { background-color: #ff6630; } .tg_pager_button, .tg_reload_button { height: 30px; padding: 5px 10px; } .tg_pager_button span, .tg_reload_button span { line-height: inherit; } #tg_pager_container { height: 50px; margin: 5px; } #tg_pager_container_adjuster { position: relative; overflow: hidden; } .tg_no_underline, .tg_no_underline:link { text-decoration: none; } .tg_admin_accordion .ui-accordion-content { background-color: #FFF; } .ui-icon { text-indent: 0px !important; } .tg_faded { color: #999; } .tg_mouseover { color: transparent; } .tg_mouseover:hover { color: #000; } .tg_term_amounts { min-width: 50px; display: inline-block; } .SumoSelect label { margin: 0 !important; line-height: 1.1em !important; } .SumoSelect .select-all { line-height: 12px; } /* SumoSelect menu should not cover "Add new tag" button */ .SumoUnder { height: 1em !important; } .tg_list { list-style-type: disc !important; } .tg_list li { margin-left: 20px; } .chatty-mango-help-icon { margin: 0; cursor: pointer; /* float: right; */ font-size: 20px; } .chatty-mango-help-container { background-color: #fff; box-shadow: 0 1px 2px rgba( 0,0,0,0.2 ); padding: 10px; margin: 20px 0; clear: both; display: block; } .chatty-mango-settings-container { clear: both; } .tg_settings_tabs_content { margin: 20px 10px; } .chatty-mango-settings-columns { -webkit-columns: 2 400px; -moz-columns: 2 400px; columns: 2 400px; margin: 10px; } .chatty-mango-settings-columns > div { display: inline-block; width: 100%; } .tg_social_media_admin, .tg_social_media_admin:link { margin: 10px; text-decoration: none; } .tg_social_media_admin span { font-size: 2em; } .tg_setting_help_search_results_inner { margin: 10px 0; padding: 10px; background-color: rgb(249, 249, 249); } #tg_setting_help_search { margin-bottom: 10px; clear: both; float: left; width: 100% } #tg_setting_help_search_results { clear: both; } .tg_setting_help_search_icon { font-size: 25px; margin: 0 5px; } #tg_setting_help_nothing_found { margin: 10px; } #tg_message_container { min-height: 76px; width: 100%; display: inline-block; margin: 0; padding: 0; } #tg_tools_accordion { margin: 20px 0; } .tg_tools_accordion_container { padding: 10px; // prevent jumping } .tg_tools_accordion_content { margin: 20px 0; } .tg_premium_promotion_main_box { background-color: #FFF; float: left; max-width: 740px; margin-top: 30px; padding: 30px; border-radius: 5px; } .tg_premium_promotion_main_box, .tg_premium_promotion_main_box p { font-size: 15px; line-height: 1.7em; } .tg_premium_promotion_main_box h1 { font-size: 28px; font-weight: 600; } /* .tg_premium_promotion_banner { margin: 20px 0 40px; } */ .tg_premium_promotion_logo, .tg_onboarding_logo { border: solid 2px #ccc; padding: 1px; border-radius: 7px; } .tg_premium_promotion_call_to_action { margin: 50px 10px 20px; } .tg_premium_promotion_call_to_action h3 { color: #009CD0; font-size: 28px; line-height: 40px; } .tg_premium_promotion_call_to_action_button { border-radius: 7px; border: 2px solid #009CD0; color: #009CD0; display: inline-block; margin: 0 .25em; overflow: hidden; padding: 24px 16px 24px 16px; position: relative; text-decoration: none; line-height: 1; font-size: 20px; float: right; } .tg_premium_promotion_call_to_action_button:hover { background-color: #009CD0; color: #fff; } .tg_premium_promotion_right_image_box { float: left; margin: 50px 10px 0; width: 300px; clear: right; text-align: center; } .tg_premium_promotion_right_image { border-radius: 7px; width: 298px; height: 400px; clear: both; } .tg_premium_promotion_right_image_box_caption, .tg_premium_promotion_bottom_image_box_caption { margin: 0 10px; } .tg_premium_promotion_bottom_image_box { margin: 20px 0; float: left; } .tg_premium_promotion_bottom_image { width: 800px; clear: both; border-radius: 7px; } .tg-alert-rounded { background-color: #FFF; margin: 10px 0 20px; padding: 5px 0; float: left; width: 100%; border-radius: 7px; } .tg-onboarding-container { background-color: #fff; box-shadow: 0 1px 2px rgba( 0,0,0,0.2 ); padding: 20px; margin: 20px 0; clear: both; display: block; border-radius: 7px; } .tg-onboarding-container, .tg-onboarding-container p, .tag-groups-wizard-submit { font-size: 15px !important; } .tag-groups-steps li { display: inline-block; padding: 0px 10px; margin: 0; } .tag-groups-steps span { margin-right: 10px; } .tag-groups-steps a { text-decoration: none; } .tag-groups-wizard-submit { margin: 50px 0 0 80% !important; } .tag-groups-wizard-example { margin: 10px; border: solid 2px #ccc; padding: 1px; border-radius: 7px; } .wizard-box { margin: 20px 10px; padding: 40px; background-color: #FEFEFE; border-top: #ddd 2px solid; border-right: #999 3px solid; border-bottom: #999 3px solid; border-left: #ddd 2px solid; } .wizard-box, .wizard-box p { font-size: 16px; } PK�������!�Kw~(��~(����assets/css/react-select.cssnu�[��������/** * React Select * ============ * Created by Jed Watson and Joss Mackison for KeystoneJS, http://www.keystonejs.com/ * https://twitter.com/jedwatson https://twitter.com/jossmackison https://twitter.com/keystonejs * MIT License: https://github.com/JedWatson/react-select */ .Select { position: relative; } .Select input::-webkit-contacts-auto-fill-button, .Select input::-webkit-credentials-auto-fill-button { display: none !important; } .Select input::-ms-clear { display: none !important; } .Select input::-ms-reveal { display: none !important; } .Select, .Select div, .Select input, .Select span { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } .Select.is-disabled .Select-arrow-zone { cursor: default; pointer-events: none; opacity: 0.35; } .Select.is-disabled > .Select-control { background-color: #f9f9f9; } .Select.is-disabled > .Select-control:hover { box-shadow: none; } .Select.is-open > .Select-control { border-bottom-right-radius: 0; border-bottom-left-radius: 0; background: #fff; border-color: #b3b3b3 #ccc #d9d9d9; } .Select.is-open > .Select-control .Select-arrow { top: -2px; border-color: transparent transparent #999; border-width: 0 5px 5px; } .Select.is-searchable.is-open > .Select-control { cursor: text; } .Select.is-searchable.is-focused:not(.is-open) > .Select-control { cursor: text; } .Select.is-focused > .Select-control { background: #fff; } .Select.is-focused:not(.is-open) > .Select-control { border-color: #007eff; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 3px rgba(0, 126, 255, 0.1); background: #fff; } .Select.has-value.is-clearable.Select--single > .Select-control .Select-value { padding-right: 42px; } .Select.has-value.Select--single > .Select-control .Select-value .Select-value-label, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value .Select-value-label { color: #333; } .Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label { cursor: pointer; text-decoration: none; } .Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:hover, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:hover, .Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus { color: #007eff; outline: none; text-decoration: underline; } .Select.has-value.Select--single > .Select-control .Select-value a.Select-value-label:focus, .Select.has-value.is-pseudo-focused.Select--single > .Select-control .Select-value a.Select-value-label:focus { background: #fff; } .Select.has-value.is-pseudo-focused .Select-input { opacity: 0; } .Select.is-open .Select-arrow, .Select .Select-arrow-zone:hover > .Select-arrow { border-top-color: #666; } .Select.Select--rtl { direction: rtl; text-align: right; } .Select-control { background-color: #fff; border-color: #d9d9d9 #ccc #b3b3b3; border-radius: 4px; border: 1px solid #ccc; color: #333; cursor: default; display: table; border-spacing: 0; border-collapse: separate; height: 36px; outline: none; overflow: hidden; position: relative; width: 100%; } .Select-control:hover { box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06); } .Select-control .Select-input:focus { outline: none; background: #fff; } .Select-placeholder, .Select--single > .Select-control .Select-value { bottom: 0; color: #aaa; left: 0; line-height: 34px; padding-left: 10px; padding-right: 10px; position: absolute; right: 0; top: 0; max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .Select-input { height: 34px; padding-left: 10px; padding-right: 10px; vertical-align: middle; } .Select-input > input { width: 100%; background: none transparent; border: 0 none; box-shadow: none; cursor: default; display: inline-block; font-family: inherit; font-size: inherit; margin: 0; outline: none; line-height: 17px; /* For IE 8 compatibility */ padding: 8px 0 12px; /* For IE 8 compatibility */ -webkit-appearance: none; } .is-focused .Select-input > input { cursor: text; } .has-value.is-pseudo-focused .Select-input { opacity: 0; } .Select-control:not(.is-searchable) > .Select-input { outline: none; } .Select-loading-zone { cursor: pointer; display: table-cell; position: relative; text-align: center; vertical-align: middle; width: 16px; } .Select-loading { -webkit-animation: Select-animation-spin 400ms infinite linear; -o-animation: Select-animation-spin 400ms infinite linear; animation: Select-animation-spin 400ms infinite linear; width: 16px; height: 16px; box-sizing: border-box; border-radius: 50%; border: 2px solid #ccc; border-right-color: #333; display: inline-block; position: relative; vertical-align: middle; } .Select-clear-zone { -webkit-animation: Select-animation-fadeIn 200ms; -o-animation: Select-animation-fadeIn 200ms; animation: Select-animation-fadeIn 200ms; color: #999; cursor: pointer; display: table-cell; position: relative; text-align: center; vertical-align: middle; width: 17px; } .Select-clear-zone:hover { color: #D0021B; } .Select-clear { display: inline-block; font-size: 18px; line-height: 1; } .Select--multi .Select-clear-zone { width: 17px; } .Select-arrow-zone { cursor: pointer; display: table-cell; position: relative; text-align: center; vertical-align: middle; width: 25px; padding-right: 5px; } .Select--rtl .Select-arrow-zone { padding-right: 0; padding-left: 5px; } .Select-arrow { border-color: #999 transparent transparent; border-style: solid; border-width: 5px 5px 2.5px; display: inline-block; height: 0; width: 0; position: relative; } .Select-control > *:last-child { padding-right: 5px; } .Select--multi .Select-multi-value-wrapper { display: inline-block; } .Select .Select-aria-only { position: absolute; display: inline-block; height: 1px; width: 1px; margin: -1px; clip: rect(0, 0, 0, 0); overflow: hidden; float: left; } @-webkit-keyframes Select-animation-fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes Select-animation-fadeIn { from { opacity: 0; } to { opacity: 1; } } .Select-menu-outer { border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; background-color: #fff; border: 1px solid #ccc; border-top-color: #e6e6e6; box-shadow: 0 1px 0 rgba(0, 0, 0, 0.06); box-sizing: border-box; margin-top: -1px; max-height: 200px; position: absolute; left: 0; top: 100%; width: 100%; z-index: 1; -webkit-overflow-scrolling: touch; } .Select-menu { max-height: 198px; overflow-y: auto; } .Select-option { box-sizing: border-box; background-color: #fff; color: #666666; cursor: pointer; display: block; padding: 8px 10px; } .Select-option:last-child { border-bottom-right-radius: 4px; border-bottom-left-radius: 4px; } .Select-option.is-selected { background-color: #f5faff; /* Fallback color for IE 8 */ background-color: rgba(0, 126, 255, 0.04); color: #333; } .Select-option.is-focused { background-color: #ebf5ff; /* Fallback color for IE 8 */ background-color: rgba(0, 126, 255, 0.08); color: #333; } .Select-option.is-disabled { color: #cccccc; cursor: default; } .Select-noresults { box-sizing: border-box; color: #999999; cursor: default; display: block; padding: 8px 10px; } .Select--multi .Select-input { vertical-align: middle; margin-left: 10px; padding: 0; } .Select--multi.Select--rtl .Select-input { margin-left: 0; margin-right: 10px; } .Select--multi.has-value .Select-input { margin-left: 5px; } .Select--multi .Select-value { background-color: #ebf5ff; /* Fallback color for IE 8 */ background-color: rgba(0, 126, 255, 0.08); border-radius: 2px; border: 1px solid #c2e0ff; /* Fallback color for IE 8 */ border: 1px solid rgba(0, 126, 255, 0.24); color: #007eff; display: inline-block; font-size: 0.9em; line-height: 1.4; margin-left: 5px; margin-top: 5px; vertical-align: top; } .Select--multi .Select-value-icon, .Select--multi .Select-value-label { display: inline-block; vertical-align: middle; } .Select--multi .Select-value-label { border-bottom-right-radius: 2px; border-top-right-radius: 2px; cursor: default; padding: 2px 5px; } .Select--multi a.Select-value-label { color: #007eff; cursor: pointer; text-decoration: none; } .Select--multi a.Select-value-label:hover { text-decoration: underline; } .Select--multi .Select-value-icon { cursor: pointer; border-bottom-left-radius: 2px; border-top-left-radius: 2px; border-right: 1px solid #c2e0ff; /* Fallback color for IE 8 */ border-right: 1px solid rgba(0, 126, 255, 0.24); padding: 1px 5px 3px; } .Select--multi .Select-value-icon:hover, .Select--multi .Select-value-icon:focus { background-color: #d8eafd; /* Fallback color for IE 8 */ background-color: rgba(0, 113, 230, 0.08); color: #0071e6; } .Select--multi .Select-value-icon:active { background-color: #c2e0ff; /* Fallback color for IE 8 */ background-color: rgba(0, 126, 255, 0.24); } .Select--multi.Select--rtl .Select-value { margin-left: 0; margin-right: 5px; } .Select--multi.Select--rtl .Select-value-icon { border-right: none; border-left: 1px solid #c2e0ff; /* Fallback color for IE 8 */ border-left: 1px solid rgba(0, 126, 255, 0.24); } .Select--multi.is-disabled .Select-value { background-color: #fcfcfc; border: 1px solid #e3e3e3; color: #333; } .Select--multi.is-disabled .Select-value-icon { cursor: not-allowed; border-right: 1px solid #e3e3e3; } .Select--multi.is-disabled .Select-value-icon:hover, .Select--multi.is-disabled .Select-value-icon:focus, .Select--multi.is-disabled .Select-value-icon:active { background-color: #fcfcfc; } @keyframes Select-animation-spin { to { transform: rotate(1turn); } } @-webkit-keyframes Select-animation-spin { to { -webkit-transform: rotate(1turn); } } PK�������!�` :��:����assets/css/GPL-LICENSE.txtnu�[�������� GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute 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 and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), 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 distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the 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 a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, 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. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE 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. PK�������!�d2G��G��*��assets/css/ui-gray/jquery-ui.theme.min.cssnu�[��������/*! jQuery UI - v1.11.4 - 2016-06-02 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .tag-groups-cloud .ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.tag-groups-cloud .ui-widget .ui-widget{font-size:1em}.tag-groups-cloud .ui-widget input,.tag-groups-cloud .ui-widget select,.tag-groups-cloud .ui-widget textarea,.tag-groups-cloud .ui-widget button{font-family:Verdana,Arial,sans-serif;font-size:1em}.tag-groups-cloud .ui-widget-content{border:1px solid #aaa;background:#fff;color:#222}.tag-groups-cloud .ui-widget-content a{color:#222}.tag-groups-cloud .ui-widget-header{border:1px solid #aaa;background:#ccc url("images/ui-bg_highlight-soft_75_cccccc_1x100.png") 50% 50% repeat-x;color:#222;font-weight:bold}.tag-groups-cloud .ui-widget-header a{color:#222}.tag-groups-cloud .ui-state-default,.tag-groups-cloud .ui-widget-content .ui-state-default,.tag-groups-cloud .ui-widget-header .ui-state-default{border:1px solid #d3d3d3;background:#e6e6e6 url("images/ui-bg_glass_75_e6e6e6_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#555}.tag-groups-cloud .ui-state-default a,.tag-groups-cloud .ui-state-default a:link,.tag-groups-cloud .ui-state-default a:visited{color:#555;text-decoration:none}.tag-groups-cloud .ui-state-hover,.tag-groups-cloud .ui-widget-content .ui-state-hover,.tag-groups-cloud .ui-widget-header .ui-state-hover,.tag-groups-cloud .ui-state-focus,.tag-groups-cloud .ui-widget-content .ui-state-focus,.tag-groups-cloud .ui-widget-header .ui-state-focus{border:1px solid #999;background:#dadada url("images/ui-bg_glass_75_dadada_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.tag-groups-cloud .ui-state-hover a,.tag-groups-cloud .ui-state-hover a:hover,.tag-groups-cloud .ui-state-hover a:link,.tag-groups-cloud .ui-state-hover a:visited,.tag-groups-cloud .ui-state-focus a,.tag-groups-cloud .ui-state-focus a:hover,.tag-groups-cloud .ui-state-focus a:link,.tag-groups-cloud .ui-state-focus a:visited{color:#212121;text-decoration:none}.tag-groups-cloud .ui-state-active,.tag-groups-cloud .ui-widget-content .ui-state-active,.tag-groups-cloud .ui-widget-header .ui-state-active{border:1px solid #aaa;background:#fff url("images/ui-bg_glass_65_ffffff_1x400.png") 50% 50% repeat-x;font-weight:normal;color:#212121}.tag-groups-cloud .ui-state-active a,.tag-groups-cloud .ui-state-active a:link,.tag-groups-cloud .ui-state-active a:visited{color:#212121;text-decoration:none}.tag-groups-cloud .ui-state-highlight,.tag-groups-cloud .ui-widget-content .ui-state-highlight,.tag-groups-cloud .ui-widget-header .ui-state-highlight{border:1px solid #fcefa1;background:#fbf9ee url("images/ui-bg_glass_55_fbf9ee_1x400.png") 50% 50% repeat-x;color:#363636}.tag-groups-cloud .ui-state-highlight a,.tag-groups-cloud .ui-widget-content .ui-state-highlight a,.tag-groups-cloud .ui-widget-header .ui-state-highlight a{color:#363636}.tag-groups-cloud .ui-state-error,.tag-groups-cloud .ui-widget-content .ui-state-error,.tag-groups-cloud .ui-widget-header .ui-state-error{border:1px solid #cd0a0a;background:#fef1ec url("images/ui-bg_glass_95_fef1ec_1x400.png") 50% 50% repeat-x;color:#cd0a0a}.tag-groups-cloud .ui-state-error a,.tag-groups-cloud .ui-widget-content .ui-state-error a,.tag-groups-cloud .ui-widget-header .ui-state-error a{color:#cd0a0a}.tag-groups-cloud .ui-state-error-text,.tag-groups-cloud .ui-widget-content .ui-state-error-text,.tag-groups-cloud .ui-widget-header .ui-state-error-text{color:#cd0a0a}.tag-groups-cloud .ui-priority-primary,.tag-groups-cloud .ui-widget-content .ui-priority-primary,.tag-groups-cloud .ui-widget-header .ui-priority-primary{font-weight:bold}.tag-groups-cloud .ui-priority-secondary,.tag-groups-cloud .ui-widget-content .ui-priority-secondary,.tag-groups-cloud .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.tag-groups-cloud .ui-state-disabled,.tag-groups-cloud .ui-widget-content .ui-state-disabled,.tag-groups-cloud .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.tag-groups-cloud .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.tag-groups-cloud .ui-icon{width:16px;height:16px}.tag-groups-cloud .ui-icon,.tag-groups-cloud .ui-widget-content .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.tag-groups-cloud .ui-widget-header .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.tag-groups-cloud .ui-state-default .ui-icon{background-image:url("images/ui-icons_888888_256x240.png")}.tag-groups-cloud .ui-state-hover .ui-icon,.tag-groups-cloud .ui-state-focus .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.tag-groups-cloud .ui-state-active .ui-icon{background-image:url("images/ui-icons_454545_256x240.png")}.tag-groups-cloud .ui-state-highlight .ui-icon{background-image:url("images/ui-icons_2e83ff_256x240.png")}.tag-groups-cloud .ui-state-error .ui-icon,.tag-groups-cloud .ui-state-error-text .ui-icon{background-image:url("images/ui-icons_cd0a0a_256x240.png")}.tag-groups-cloud .ui-icon-blank{background-position:16px 16px}.tag-groups-cloud .ui-icon-carat-1-n{background-position:0 0}.tag-groups-cloud .ui-icon-carat-1-ne{background-position:-16px 0}.tag-groups-cloud .ui-icon-carat-1-e{background-position:-32px 0}.tag-groups-cloud .ui-icon-carat-1-se{background-position:-48px 0}.tag-groups-cloud .ui-icon-carat-1-s{background-position:-64px 0}.tag-groups-cloud .ui-icon-carat-1-sw{background-position:-80px 0}.tag-groups-cloud .ui-icon-carat-1-w{background-position:-96px 0}.tag-groups-cloud .ui-icon-carat-1-nw{background-position:-112px 0}.tag-groups-cloud .ui-icon-carat-2-n-s{background-position:-128px 0}.tag-groups-cloud .ui-icon-carat-2-e-w{background-position:-144px 0}.tag-groups-cloud .ui-icon-triangle-1-n{background-position:0 -16px}.tag-groups-cloud .ui-icon-triangle-1-ne{background-position:-16px -16px}.tag-groups-cloud .ui-icon-triangle-1-e{background-position:-32px -16px}.tag-groups-cloud .ui-icon-triangle-1-se{background-position:-48px -16px}.tag-groups-cloud .ui-icon-triangle-1-s{background-position:-64px -16px}.tag-groups-cloud .ui-icon-triangle-1-sw{background-position:-80px -16px}.tag-groups-cloud .ui-icon-triangle-1-w{background-position:-96px -16px}.tag-groups-cloud .ui-icon-triangle-1-nw{background-position:-112px -16px}.tag-groups-cloud .ui-icon-triangle-2-n-s{background-position:-128px -16px}.tag-groups-cloud .ui-icon-triangle-2-e-w{background-position:-144px -16px}.tag-groups-cloud .ui-icon-arrow-1-n{background-position:0 -32px}.tag-groups-cloud .ui-icon-arrow-1-ne{background-position:-16px -32px}.tag-groups-cloud .ui-icon-arrow-1-e{background-position:-32px -32px}.tag-groups-cloud .ui-icon-arrow-1-se{background-position:-48px -32px}.tag-groups-cloud .ui-icon-arrow-1-s{background-position:-64px -32px}.tag-groups-cloud .ui-icon-arrow-1-sw{background-position:-80px -32px}.tag-groups-cloud .ui-icon-arrow-1-w{background-position:-96px -32px}.tag-groups-cloud .ui-icon-arrow-1-nw{background-position:-112px -32px}.tag-groups-cloud .ui-icon-arrow-2-n-s{background-position:-128px -32px}.tag-groups-cloud .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.tag-groups-cloud .ui-icon-arrow-2-e-w{background-position:-160px -32px}.tag-groups-cloud .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-n{background-position:-192px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-e{background-position:-208px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-s{background-position:-224px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-w{background-position:-240px -32px}.tag-groups-cloud .ui-icon-arrowthick-1-n{background-position:0 -48px}.tag-groups-cloud .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-e{background-position:-32px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-se{background-position:-48px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-s{background-position:-64px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-w{background-position:-96px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.tag-groups-cloud .ui-icon-arrow-4{background-position:0 -80px}.tag-groups-cloud .ui-icon-arrow-4-diag{background-position:-16px -80px}.tag-groups-cloud .ui-icon-extlink{background-position:-32px -80px}.tag-groups-cloud .ui-icon-newwin{background-position:-48px -80px}.tag-groups-cloud .ui-icon-refresh{background-position:-64px -80px}.tag-groups-cloud .ui-icon-shuffle{background-position:-80px -80px}.tag-groups-cloud .ui-icon-transfer-e-w{background-position:-96px -80px}.tag-groups-cloud .ui-icon-transferthick-e-w{background-position:-112px -80px}.tag-groups-cloud .ui-icon-folder-collapsed{background-position:0 -96px}.tag-groups-cloud .ui-icon-folder-open{background-position:-16px -96px}.tag-groups-cloud .ui-icon-document{background-position:-32px -96px}.tag-groups-cloud .ui-icon-document-b{background-position:-48px -96px}.tag-groups-cloud .ui-icon-note{background-position:-64px -96px}.tag-groups-cloud .ui-icon-mail-closed{background-position:-80px -96px}.tag-groups-cloud .ui-icon-mail-open{background-position:-96px -96px}.tag-groups-cloud .ui-icon-suitcase{background-position:-112px -96px}.tag-groups-cloud .ui-icon-comment{background-position:-128px -96px}.tag-groups-cloud .ui-icon-person{background-position:-144px -96px}.tag-groups-cloud .ui-icon-print{background-position:-160px -96px}.tag-groups-cloud .ui-icon-trash{background-position:-176px -96px}.tag-groups-cloud .ui-icon-locked{background-position:-192px -96px}.tag-groups-cloud .ui-icon-unlocked{background-position:-208px -96px}.tag-groups-cloud .ui-icon-bookmark{background-position:-224px -96px}.tag-groups-cloud .ui-icon-tag{background-position:-240px -96px}.tag-groups-cloud .ui-icon-home{background-position:0 -112px}.tag-groups-cloud .ui-icon-flag{background-position:-16px -112px}.tag-groups-cloud .ui-icon-calendar{background-position:-32px -112px}.tag-groups-cloud .ui-icon-cart{background-position:-48px -112px}.tag-groups-cloud .ui-icon-pencil{background-position:-64px -112px}.tag-groups-cloud .ui-icon-clock{background-position:-80px -112px}.tag-groups-cloud .ui-icon-disk{background-position:-96px -112px}.tag-groups-cloud .ui-icon-calculator{background-position:-112px -112px}.tag-groups-cloud .ui-icon-zoomin{background-position:-128px -112px}.tag-groups-cloud .ui-icon-zoomout{background-position:-144px -112px}.tag-groups-cloud .ui-icon-search{background-position:-160px -112px}.tag-groups-cloud .ui-icon-wrench{background-position:-176px -112px}.tag-groups-cloud .ui-icon-gear{background-position:-192px -112px}.tag-groups-cloud .ui-icon-heart{background-position:-208px -112px}.tag-groups-cloud .ui-icon-star{background-position:-224px -112px}.tag-groups-cloud .ui-icon-link{background-position:-240px -112px}.tag-groups-cloud .ui-icon-cancel{background-position:0 -128px}.tag-groups-cloud .ui-icon-plus{background-position:-16px -128px}.tag-groups-cloud .ui-icon-plusthick{background-position:-32px -128px}.tag-groups-cloud .ui-icon-minus{background-position:-48px -128px}.tag-groups-cloud .ui-icon-minusthick{background-position:-64px -128px}.tag-groups-cloud .ui-icon-close{background-position:-80px -128px}.tag-groups-cloud .ui-icon-closethick{background-position:-96px -128px}.tag-groups-cloud .ui-icon-key{background-position:-112px -128px}.tag-groups-cloud .ui-icon-lightbulb{background-position:-128px -128px}.tag-groups-cloud .ui-icon-scissors{background-position:-144px -128px}.tag-groups-cloud .ui-icon-clipboard{background-position:-160px -128px}.tag-groups-cloud .ui-icon-copy{background-position:-176px -128px}.tag-groups-cloud .ui-icon-contact{background-position:-192px -128px}.tag-groups-cloud .ui-icon-image{background-position:-208px -128px}.tag-groups-cloud .ui-icon-video{background-position:-224px -128px}.tag-groups-cloud .ui-icon-script{background-position:-240px -128px}.tag-groups-cloud .ui-icon-alert{background-position:0 -144px}.tag-groups-cloud .ui-icon-info{background-position:-16px -144px}.tag-groups-cloud .ui-icon-notice{background-position:-32px -144px}.tag-groups-cloud .ui-icon-help{background-position:-48px -144px}.tag-groups-cloud .ui-icon-check{background-position:-64px -144px}.tag-groups-cloud .ui-icon-bullet{background-position:-80px -144px}.tag-groups-cloud .ui-icon-radio-on{background-position:-96px -144px}.tag-groups-cloud .ui-icon-radio-off{background-position:-112px -144px}.tag-groups-cloud .ui-icon-pin-w{background-position:-128px -144px}.tag-groups-cloud .ui-icon-pin-s{background-position:-144px -144px}.tag-groups-cloud .ui-icon-play{background-position:0 -160px}.tag-groups-cloud .ui-icon-pause{background-position:-16px -160px}.tag-groups-cloud .ui-icon-seek-next{background-position:-32px -160px}.tag-groups-cloud .ui-icon-seek-prev{background-position:-48px -160px}.tag-groups-cloud .ui-icon-seek-end{background-position:-64px -160px}.tag-groups-cloud .ui-icon-seek-start{background-position:-80px -160px}.tag-groups-cloud .ui-icon-seek-first{background-position:-80px -160px}.tag-groups-cloud .ui-icon-stop{background-position:-96px -160px}.tag-groups-cloud .ui-icon-eject{background-position:-112px -160px}.tag-groups-cloud .ui-icon-volume-off{background-position:-128px -160px}.tag-groups-cloud .ui-icon-volume-on{background-position:-144px -160px}.tag-groups-cloud .ui-icon-power{background-position:0 -176px}.tag-groups-cloud .ui-icon-signal-diag{background-position:-16px -176px}.tag-groups-cloud .ui-icon-signal{background-position:-32px -176px}.tag-groups-cloud .ui-icon-battery-0{background-position:-48px -176px}.tag-groups-cloud .ui-icon-battery-1{background-position:-64px -176px}.tag-groups-cloud .ui-icon-battery-2{background-position:-80px -176px}.tag-groups-cloud .ui-icon-battery-3{background-position:-96px -176px}.tag-groups-cloud .ui-icon-circle-plus{background-position:0 -192px}.tag-groups-cloud .ui-icon-circle-minus{background-position:-16px -192px}.tag-groups-cloud .ui-icon-circle-close{background-position:-32px -192px}.tag-groups-cloud .ui-icon-circle-triangle-e{background-position:-48px -192px}.tag-groups-cloud .ui-icon-circle-triangle-s{background-position:-64px -192px}.tag-groups-cloud .ui-icon-circle-triangle-w{background-position:-80px -192px}.tag-groups-cloud .ui-icon-circle-triangle-n{background-position:-96px -192px}.tag-groups-cloud .ui-icon-circle-arrow-e{background-position:-112px -192px}.tag-groups-cloud .ui-icon-circle-arrow-s{background-position:-128px -192px}.tag-groups-cloud .ui-icon-circle-arrow-w{background-position:-144px -192px}.tag-groups-cloud .ui-icon-circle-arrow-n{background-position:-160px -192px}.tag-groups-cloud .ui-icon-circle-zoomin{background-position:-176px -192px}.tag-groups-cloud .ui-icon-circle-zoomout{background-position:-192px -192px}.tag-groups-cloud .ui-icon-circle-check{background-position:-208px -192px}.tag-groups-cloud .ui-icon-circlesmall-plus{background-position:0 -208px}.tag-groups-cloud .ui-icon-circlesmall-minus{background-position:-16px -208px}.tag-groups-cloud .ui-icon-circlesmall-close{background-position:-32px -208px}.tag-groups-cloud .ui-icon-squaresmall-plus{background-position:-48px -208px}.tag-groups-cloud .ui-icon-squaresmall-minus{background-position:-64px -208px}.tag-groups-cloud .ui-icon-squaresmall-close{background-position:-80px -208px}.tag-groups-cloud .ui-icon-grip-dotted-vertical{background-position:0 -224px}.tag-groups-cloud .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.tag-groups-cloud .ui-icon-grip-solid-vertical{background-position:-32px -224px}.tag-groups-cloud .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.tag-groups-cloud .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.tag-groups-cloud .ui-icon-grip-diagonal-se{background-position:-80px -224px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-tl{border-top-left-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-tr{border-top-right-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-bl{border-bottom-left-radius:4px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-br{border-bottom-right-radius:4px}.tag-groups-cloud .ui-widget-overlay{background:#aaa;opacity:.3;filter:Alpha(Opacity=30)}.tag-groups-cloud .ui-widget-shadow{margin:-8px 0 0 -8px;padding:8px;background:#aaa;opacity:.3;filter:Alpha(Opacity=30);border-radius:8px} PK�������!�݋������9��assets/css/ui-gray/images/ui-bg_glass_65_ffffff_1x400.pngnu�[��������PNG  ��� IHDR���������G#7v���bKGD�݊��� pHYs���H���H�Fk>���IDAT(ch`p�h4i���%tEXtdate:create�2016-06-01T13:24:44+00:00:{!'���%tEXtdate:modify�2016-06-01T13:24:44+00:00K&����IENDB`PK�������!�#֦O��O��9��assets/css/ui-gray/images/ui-bg_glass_55_fbf9ee_1x400.pngnu�[��������PNG  ��� IHDR��������A���bKGD X��� pHYs���H���H�Fk>���IDATH! AblA1{VY0ixxvDK_O9 �aՔ}^JaȌ0bvBA$,Q"_44=SqcyEIW <kAi0<a$Sy.���%tEXtdate:create�2016-06-01T13:24:44+00:00:{!'���%tEXtdate:modify�2016-06-01T13:24:44+00:00K&����IENDB`PK�������!�'j+ ��+ ��&��assets/css/jquery-ui.structure.min.cssnu�[��������/*! jQuery UI - v1.11.4 - 2016-06-02 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .ui-helper-hidden{display:none} .ui-helper-hidden-accessible{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px} .ui-helper-reset{margin:0;padding:0;border:0;outline:0;line-height:1.3;text-decoration:none;font-size:100%;list-style:none} .ui-helper-clearfix:before, .ui-helper-clearfix:after{content:"";display:table;border-collapse:collapse} .ui-helper-clearfix:after{clear:both} .ui-helper-clearfix{min-height:0} .ui-helper-zfix{width:100%;height:100%;top:0;left:0;position:absolute;opacity:0;filter:Alpha(Opacity=0)} .ui-front{z-index:100} .ui-state-disabled{cursor:default!important} .ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat} .ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%} .ui-accordion .ui-accordion-header{display:block;cursor:pointer;position:relative;margin:2px 0 0 0;padding:.5em .5em .5em .7em;min-height:0;font-size:100%} .ui-accordion .ui-accordion-icons{padding-left:2.2em} .ui-accordion .ui-accordion-icons .ui-accordion-icons{padding-left:2.2em} .ui-accordion .ui-accordion-header .ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px} .ui-accordion .ui-accordion-content{padding:1em 2.2em;border-top:0;overflow:auto} .ui-tabs{position:relative;padding:.2em} .ui-tabs .ui-tabs-nav{margin:0;padding:.2em .2em 0} .ui-tabs .ui-tabs-nav li{list-style:none;float:left;position:relative;top:0;margin:1px .2em 0 0;border-bottom-width:0;padding:0;white-space:nowrap} .ui-tabs .ui-tabs-nav .ui-tabs-anchor{float:left;padding:.5em 1em;text-decoration:none} .ui-tabs .ui-tabs-nav li.ui-tabs-active{margin-bottom:-1px;padding-bottom:1px} .ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor, .ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor{cursor:text} .ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor{cursor:pointer} .ui-tabs .ui-tabs-panel{display:block;border-width:0;padding:1em 1.4em;background:none} /* by Chatty Mango */ .tag-groups-cloud-tabs ul { overflow:hidden; } .tag-groups-cloud-tabs ul li, .tag-groups-cloud-tabs ul li a { cursor: pointer !important; } PK�������!�o������assets/css/MIT-LICENSE.txtnu�[��������Copyright (c) 2012 Paul Bakaus, http://jqueryui.com/ This software consists of voluntary contributions made by many individuals (AUTHORS.txt, http://jqueryui.com/about) For exact contribution history, see the revision history and logs, available at http://jquery-ui.googlecode.com/svn/ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. PK�������!�gל*G��G��.��assets/css/ui-darkness/jquery-ui.theme.min.cssnu�[��������/*! jQuery UI - v1.11.4 - 2016-06-02 * http://jqueryui.com * Copyright jQuery Foundation and other contributors; Licensed MIT */ .tag-groups-cloud .ui-widget{font-family:Segoe UI,Arial,sans-serif;font-size:1.1em}.tag-groups-cloud .ui-widget .ui-widget{font-size:1em}.tag-groups-cloud .ui-widget input,.tag-groups-cloud .ui-widget select,.tag-groups-cloud .ui-widget textarea,.tag-groups-cloud .ui-widget button{font-family:Segoe UI,Arial,sans-serif;font-size:1em}.tag-groups-cloud .ui-widget-content{border:1px solid #666;background:#000 url("images/ui-bg_inset-soft_25_000000_1x100.png") 50% bottom repeat-x;color:#fff}.tag-groups-cloud .ui-widget-content a{color:#fff}.tag-groups-cloud .ui-widget-header{border:1px solid #333;background:#333 url("images/ui-bg_gloss-wave_25_333333_500x100.png") 50% 50% repeat-x;color:#fff;font-weight:bold}.tag-groups-cloud .ui-widget-header a{color:#fff}.tag-groups-cloud .ui-state-default,.tag-groups-cloud .ui-widget-content .ui-state-default,.tag-groups-cloud .ui-widget-header .ui-state-default{border:1px solid #666;background:#555 url("images/ui-bg_glass_20_555555_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#eee}.tag-groups-cloud .ui-state-default a,.tag-groups-cloud .ui-state-default a:link,.tag-groups-cloud .ui-state-default a:visited{color:#eee;text-decoration:none}.tag-groups-cloud .ui-state-hover,.tag-groups-cloud .ui-widget-content .ui-state-hover,.tag-groups-cloud .ui-widget-header .ui-state-hover,.tag-groups-cloud .ui-state-focus,.tag-groups-cloud .ui-widget-content .ui-state-focus,.tag-groups-cloud .ui-widget-header .ui-state-focus{border:1px solid #59b4d4;background:#0078a3 url("images/ui-bg_glass_40_0078a3_1x400.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.tag-groups-cloud .ui-state-hover a,.tag-groups-cloud .ui-state-hover a:hover,.tag-groups-cloud .ui-state-hover a:link,.tag-groups-cloud .ui-state-hover a:visited,.tag-groups-cloud .ui-state-focus a,.tag-groups-cloud .ui-state-focus a:hover,.tag-groups-cloud .ui-state-focus a:link,.tag-groups-cloud .ui-state-focus a:visited{color:#fff;text-decoration:none}.tag-groups-cloud .ui-state-active,.tag-groups-cloud .ui-widget-content .ui-state-active,.tag-groups-cloud .ui-widget-header .ui-state-active{border:1px solid #ffaf0f;background:#f58400 url("images/ui-bg_inset-soft_30_f58400_1x100.png") 50% 50% repeat-x;font-weight:bold;color:#fff}.tag-groups-cloud .ui-state-active a,.tag-groups-cloud .ui-state-active a:link,.tag-groups-cloud .ui-state-active a:visited{color:#fff;text-decoration:none}.tag-groups-cloud .ui-state-highlight,.tag-groups-cloud .ui-widget-content .ui-state-highlight,.tag-groups-cloud .ui-widget-header .ui-state-highlight{border:1px solid #ccc;background:#eee url("images/ui-bg_highlight-soft_80_eeeeee_1x100.png") 50% top repeat-x;color:#2e7db2}.tag-groups-cloud .ui-state-highlight a,.tag-groups-cloud .ui-widget-content .ui-state-highlight a,.tag-groups-cloud .ui-widget-header .ui-state-highlight a{color:#2e7db2}.tag-groups-cloud .ui-state-error,.tag-groups-cloud .ui-widget-content .ui-state-error,.tag-groups-cloud .ui-widget-header .ui-state-error{border:1px solid #ffb73d;background:#ffc73d url("images/ui-bg_glass_40_ffc73d_1x400.png") 50% 50% repeat-x;color:#111}.tag-groups-cloud .ui-state-error a,.tag-groups-cloud .ui-widget-content .ui-state-error a,.tag-groups-cloud .ui-widget-header .ui-state-error a{color:#111}.tag-groups-cloud .ui-state-error-text,.tag-groups-cloud .ui-widget-content .ui-state-error-text,.tag-groups-cloud .ui-widget-header .ui-state-error-text{color:#111}.tag-groups-cloud .ui-priority-primary,.tag-groups-cloud .ui-widget-content .ui-priority-primary,.tag-groups-cloud .ui-widget-header .ui-priority-primary{font-weight:bold}.tag-groups-cloud .ui-priority-secondary,.tag-groups-cloud .ui-widget-content .ui-priority-secondary,.tag-groups-cloud .ui-widget-header .ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:normal}.tag-groups-cloud .ui-state-disabled,.tag-groups-cloud .ui-widget-content .ui-state-disabled,.tag-groups-cloud .ui-widget-header .ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.tag-groups-cloud .ui-state-disabled .ui-icon{filter:Alpha(Opacity=35)}.tag-groups-cloud .ui-icon{width:16px;height:16px}.tag-groups-cloud .ui-icon,.tag-groups-cloud .ui-widget-content .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.tag-groups-cloud .ui-widget-header .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.tag-groups-cloud .ui-state-default .ui-icon{background-image:url("images/ui-icons_cccccc_256x240.png")}.tag-groups-cloud .ui-state-hover .ui-icon,.tag-groups-cloud .ui-state-focus .ui-icon{background-image:url("images/ui-icons_ffffff_256x240.png")}.tag-groups-cloud .ui-state-active .ui-icon{background-image:url("images/ui-icons_222222_256x240.png")}.tag-groups-cloud .ui-state-highlight .ui-icon{background-image:url("images/ui-icons_4b8e0b_256x240.png")}.tag-groups-cloud .ui-state-error .ui-icon,.tag-groups-cloud .ui-state-error-text .ui-icon{background-image:url("images/ui-icons_a83300_256x240.png")}.tag-groups-cloud .ui-icon-blank{background-position:16px 16px}.tag-groups-cloud .ui-icon-carat-1-n{background-position:0 0}.tag-groups-cloud .ui-icon-carat-1-ne{background-position:-16px 0}.tag-groups-cloud .ui-icon-carat-1-e{background-position:-32px 0}.tag-groups-cloud .ui-icon-carat-1-se{background-position:-48px 0}.tag-groups-cloud .ui-icon-carat-1-s{background-position:-64px 0}.tag-groups-cloud .ui-icon-carat-1-sw{background-position:-80px 0}.tag-groups-cloud .ui-icon-carat-1-w{background-position:-96px 0}.tag-groups-cloud .ui-icon-carat-1-nw{background-position:-112px 0}.tag-groups-cloud .ui-icon-carat-2-n-s{background-position:-128px 0}.tag-groups-cloud .ui-icon-carat-2-e-w{background-position:-144px 0}.tag-groups-cloud .ui-icon-triangle-1-n{background-position:0 -16px}.tag-groups-cloud .ui-icon-triangle-1-ne{background-position:-16px -16px}.tag-groups-cloud .ui-icon-triangle-1-e{background-position:-32px -16px}.tag-groups-cloud .ui-icon-triangle-1-se{background-position:-48px -16px}.tag-groups-cloud .ui-icon-triangle-1-s{background-position:-64px -16px}.tag-groups-cloud .ui-icon-triangle-1-sw{background-position:-80px -16px}.tag-groups-cloud .ui-icon-triangle-1-w{background-position:-96px -16px}.tag-groups-cloud .ui-icon-triangle-1-nw{background-position:-112px -16px}.tag-groups-cloud .ui-icon-triangle-2-n-s{background-position:-128px -16px}.tag-groups-cloud .ui-icon-triangle-2-e-w{background-position:-144px -16px}.tag-groups-cloud .ui-icon-arrow-1-n{background-position:0 -32px}.tag-groups-cloud .ui-icon-arrow-1-ne{background-position:-16px -32px}.tag-groups-cloud .ui-icon-arrow-1-e{background-position:-32px -32px}.tag-groups-cloud .ui-icon-arrow-1-se{background-position:-48px -32px}.tag-groups-cloud .ui-icon-arrow-1-s{background-position:-64px -32px}.tag-groups-cloud .ui-icon-arrow-1-sw{background-position:-80px -32px}.tag-groups-cloud .ui-icon-arrow-1-w{background-position:-96px -32px}.tag-groups-cloud .ui-icon-arrow-1-nw{background-position:-112px -32px}.tag-groups-cloud .ui-icon-arrow-2-n-s{background-position:-128px -32px}.tag-groups-cloud .ui-icon-arrow-2-ne-sw{background-position:-144px -32px}.tag-groups-cloud .ui-icon-arrow-2-e-w{background-position:-160px -32px}.tag-groups-cloud .ui-icon-arrow-2-se-nw{background-position:-176px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-n{background-position:-192px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-e{background-position:-208px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-s{background-position:-224px -32px}.tag-groups-cloud .ui-icon-arrowstop-1-w{background-position:-240px -32px}.tag-groups-cloud .ui-icon-arrowthick-1-n{background-position:0 -48px}.tag-groups-cloud .ui-icon-arrowthick-1-ne{background-position:-16px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-e{background-position:-32px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-se{background-position:-48px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-s{background-position:-64px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-sw{background-position:-80px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-w{background-position:-96px -48px}.tag-groups-cloud .ui-icon-arrowthick-1-nw{background-position:-112px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-n-s{background-position:-128px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-ne-sw{background-position:-144px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-e-w{background-position:-160px -48px}.tag-groups-cloud .ui-icon-arrowthick-2-se-nw{background-position:-176px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-n{background-position:-192px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-e{background-position:-208px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-s{background-position:-224px -48px}.tag-groups-cloud .ui-icon-arrowthickstop-1-w{background-position:-240px -48px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-w{background-position:0 -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-n{background-position:-16px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-e{background-position:-32px -64px}.tag-groups-cloud .ui-icon-arrowreturnthick-1-s{background-position:-48px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-w{background-position:-64px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-n{background-position:-80px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-e{background-position:-96px -64px}.tag-groups-cloud .ui-icon-arrowreturn-1-s{background-position:-112px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-w{background-position:-128px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-n{background-position:-144px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-e{background-position:-160px -64px}.tag-groups-cloud .ui-icon-arrowrefresh-1-s{background-position:-176px -64px}.tag-groups-cloud .ui-icon-arrow-4{background-position:0 -80px}.tag-groups-cloud .ui-icon-arrow-4-diag{background-position:-16px -80px}.tag-groups-cloud .ui-icon-extlink{background-position:-32px -80px}.tag-groups-cloud .ui-icon-newwin{background-position:-48px -80px}.tag-groups-cloud .ui-icon-refresh{background-position:-64px -80px}.tag-groups-cloud .ui-icon-shuffle{background-position:-80px -80px}.tag-groups-cloud .ui-icon-transfer-e-w{background-position:-96px -80px}.tag-groups-cloud .ui-icon-transferthick-e-w{background-position:-112px -80px}.tag-groups-cloud .ui-icon-folder-collapsed{background-position:0 -96px}.tag-groups-cloud .ui-icon-folder-open{background-position:-16px -96px}.tag-groups-cloud .ui-icon-document{background-position:-32px -96px}.tag-groups-cloud .ui-icon-document-b{background-position:-48px -96px}.tag-groups-cloud .ui-icon-note{background-position:-64px -96px}.tag-groups-cloud .ui-icon-mail-closed{background-position:-80px -96px}.tag-groups-cloud .ui-icon-mail-open{background-position:-96px -96px}.tag-groups-cloud .ui-icon-suitcase{background-position:-112px -96px}.tag-groups-cloud .ui-icon-comment{background-position:-128px -96px}.tag-groups-cloud .ui-icon-person{background-position:-144px -96px}.tag-groups-cloud .ui-icon-print{background-position:-160px -96px}.tag-groups-cloud .ui-icon-trash{background-position:-176px -96px}.tag-groups-cloud .ui-icon-locked{background-position:-192px -96px}.tag-groups-cloud .ui-icon-unlocked{background-position:-208px -96px}.tag-groups-cloud .ui-icon-bookmark{background-position:-224px -96px}.tag-groups-cloud .ui-icon-tag{background-position:-240px -96px}.tag-groups-cloud .ui-icon-home{background-position:0 -112px}.tag-groups-cloud .ui-icon-flag{background-position:-16px -112px}.tag-groups-cloud .ui-icon-calendar{background-position:-32px -112px}.tag-groups-cloud .ui-icon-cart{background-position:-48px -112px}.tag-groups-cloud .ui-icon-pencil{background-position:-64px -112px}.tag-groups-cloud .ui-icon-clock{background-position:-80px -112px}.tag-groups-cloud .ui-icon-disk{background-position:-96px -112px}.tag-groups-cloud .ui-icon-calculator{background-position:-112px -112px}.tag-groups-cloud .ui-icon-zoomin{background-position:-128px -112px}.tag-groups-cloud .ui-icon-zoomout{background-position:-144px -112px}.tag-groups-cloud .ui-icon-search{background-position:-160px -112px}.tag-groups-cloud .ui-icon-wrench{background-position:-176px -112px}.tag-groups-cloud .ui-icon-gear{background-position:-192px -112px}.tag-groups-cloud .ui-icon-heart{background-position:-208px -112px}.tag-groups-cloud .ui-icon-star{background-position:-224px -112px}.tag-groups-cloud .ui-icon-link{background-position:-240px -112px}.tag-groups-cloud .ui-icon-cancel{background-position:0 -128px}.tag-groups-cloud .ui-icon-plus{background-position:-16px -128px}.tag-groups-cloud .ui-icon-plusthick{background-position:-32px -128px}.tag-groups-cloud .ui-icon-minus{background-position:-48px -128px}.tag-groups-cloud .ui-icon-minusthick{background-position:-64px -128px}.tag-groups-cloud .ui-icon-close{background-position:-80px -128px}.tag-groups-cloud .ui-icon-closethick{background-position:-96px -128px}.tag-groups-cloud .ui-icon-key{background-position:-112px -128px}.tag-groups-cloud .ui-icon-lightbulb{background-position:-128px -128px}.tag-groups-cloud .ui-icon-scissors{background-position:-144px -128px}.tag-groups-cloud .ui-icon-clipboard{background-position:-160px -128px}.tag-groups-cloud .ui-icon-copy{background-position:-176px -128px}.tag-groups-cloud .ui-icon-contact{background-position:-192px -128px}.tag-groups-cloud .ui-icon-image{background-position:-208px -128px}.tag-groups-cloud .ui-icon-video{background-position:-224px -128px}.tag-groups-cloud .ui-icon-script{background-position:-240px -128px}.tag-groups-cloud .ui-icon-alert{background-position:0 -144px}.tag-groups-cloud .ui-icon-info{background-position:-16px -144px}.tag-groups-cloud .ui-icon-notice{background-position:-32px -144px}.tag-groups-cloud .ui-icon-help{background-position:-48px -144px}.tag-groups-cloud .ui-icon-check{background-position:-64px -144px}.tag-groups-cloud .ui-icon-bullet{background-position:-80px -144px}.tag-groups-cloud .ui-icon-radio-on{background-position:-96px -144px}.tag-groups-cloud .ui-icon-radio-off{background-position:-112px -144px}.tag-groups-cloud .ui-icon-pin-w{background-position:-128px -144px}.tag-groups-cloud .ui-icon-pin-s{background-position:-144px -144px}.tag-groups-cloud .ui-icon-play{background-position:0 -160px}.tag-groups-cloud .ui-icon-pause{background-position:-16px -160px}.tag-groups-cloud .ui-icon-seek-next{background-position:-32px -160px}.tag-groups-cloud .ui-icon-seek-prev{background-position:-48px -160px}.tag-groups-cloud .ui-icon-seek-end{background-position:-64px -160px}.tag-groups-cloud .ui-icon-seek-start{background-position:-80px -160px}.tag-groups-cloud .ui-icon-seek-first{background-position:-80px -160px}.tag-groups-cloud .ui-icon-stop{background-position:-96px -160px}.tag-groups-cloud .ui-icon-eject{background-position:-112px -160px}.tag-groups-cloud .ui-icon-volume-off{background-position:-128px -160px}.tag-groups-cloud .ui-icon-volume-on{background-position:-144px -160px}.tag-groups-cloud .ui-icon-power{background-position:0 -176px}.tag-groups-cloud .ui-icon-signal-diag{background-position:-16px -176px}.tag-groups-cloud .ui-icon-signal{background-position:-32px -176px}.tag-groups-cloud .ui-icon-battery-0{background-position:-48px -176px}.tag-groups-cloud .ui-icon-battery-1{background-position:-64px -176px}.tag-groups-cloud .ui-icon-battery-2{background-position:-80px -176px}.tag-groups-cloud .ui-icon-battery-3{background-position:-96px -176px}.tag-groups-cloud .ui-icon-circle-plus{background-position:0 -192px}.tag-groups-cloud .ui-icon-circle-minus{background-position:-16px -192px}.tag-groups-cloud .ui-icon-circle-close{background-position:-32px -192px}.tag-groups-cloud .ui-icon-circle-triangle-e{background-position:-48px -192px}.tag-groups-cloud .ui-icon-circle-triangle-s{background-position:-64px -192px}.tag-groups-cloud .ui-icon-circle-triangle-w{background-position:-80px -192px}.tag-groups-cloud .ui-icon-circle-triangle-n{background-position:-96px -192px}.tag-groups-cloud .ui-icon-circle-arrow-e{background-position:-112px -192px}.tag-groups-cloud .ui-icon-circle-arrow-s{background-position:-128px -192px}.tag-groups-cloud .ui-icon-circle-arrow-w{background-position:-144px -192px}.tag-groups-cloud .ui-icon-circle-arrow-n{background-position:-160px -192px}.tag-groups-cloud .ui-icon-circle-zoomin{background-position:-176px -192px}.tag-groups-cloud .ui-icon-circle-zoomout{background-position:-192px -192px}.tag-groups-cloud .ui-icon-circle-check{background-position:-208px -192px}.tag-groups-cloud .ui-icon-circlesmall-plus{background-position:0 -208px}.tag-groups-cloud .ui-icon-circlesmall-minus{background-position:-16px -208px}.tag-groups-cloud .ui-icon-circlesmall-close{background-position:-32px -208px}.tag-groups-cloud .ui-icon-squaresmall-plus{background-position:-48px -208px}.tag-groups-cloud .ui-icon-squaresmall-minus{background-position:-64px -208px}.tag-groups-cloud .ui-icon-squaresmall-close{background-position:-80px -208px}.tag-groups-cloud .ui-icon-grip-dotted-vertical{background-position:0 -224px}.tag-groups-cloud .ui-icon-grip-dotted-horizontal{background-position:-16px -224px}.tag-groups-cloud .ui-icon-grip-solid-vertical{background-position:-32px -224px}.tag-groups-cloud .ui-icon-grip-solid-horizontal{background-position:-48px -224px}.tag-groups-cloud .ui-icon-gripsmall-diagonal-se{background-position:-64px -224px}.tag-groups-cloud .ui-icon-grip-diagonal-se{background-position:-80px -224px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-tl{border-top-left-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-top,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-tr{border-top-right-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-left,.tag-groups-cloud .ui-corner-bl{border-bottom-left-radius:6px}.tag-groups-cloud .ui-corner-all,.tag-groups-cloud .ui-corner-bottom,.tag-groups-cloud .ui-corner-right,.tag-groups-cloud .ui-corner-br{border-bottom-right-radius:6px}.tag-groups-cloud .ui-widget-overlay{background:#5c5c5c;opacity:.8;filter:Alpha(Opacity=80)}.tag-groups-cloud .ui-widget-shadow{margin:-7px 0 0 -7px;padding:7px;background:#ccc;opacity:.6;filter:Alpha(Opacity=60);border-radius:8px} PK�������!�fH<��<��=��assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.pngnu�[��������PNG  ��� IHDR��������A���bKGD X��� pHYs���H���H�Fk>���zIDATHϡ@} f�&ԒZh&:iN OZ~kZ@A^3ЧAcZTRc&TAkU:'z_ 06`f> A���%tEXtdate:create�2016-06-01T13:25:56+00:00[���%tEXtdate:modify�2016-06-01T13:25:56+00:00����IENDB`PK�������!�V��V��=��assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.pngnu�[��������PNG  ��� IHDR��������A���bKGD X��� pHYs���H���H�Fk>���IDATH1Q{Pa ;0uP)&=Uf*Q(NJV_''92xn"""8׹v#Ez@BkBƌZIE236Ia -bJIEmD̘c1[XBӎ8Ѹ!(gc���%tEXtdate:create�2016-06-01T13:25:56+00:00[���%tEXtdate:modify�2016-06-01T13:25:56+00:00����IENDB`PK�������!�,~,����=��assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.pngnu�[��������PNG  ��� IHDR���������D���bKGD1��� pHYs���H���H�Fk>���FIDAT8cH0FQh(C=p!LG bcmen1LgH3fH_Ð!sCQ4A�c<5���%tEXtdate:create�2016-06-01T13:25:56+00:00[���%tEXtdate:modify�2016-06-01T13:25:56+00:00����IENDB`PK�������!�Zb[��[��)��assets/css/aristo/jquery-ui.theme.min.cssnu�[��������/* * jQuery UI CSS Framework 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API */ /* Layout helpers ----------------------------------*/ .ui-front { z-index: 100; } .ui-helper-hidden { display: none; } .ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } .ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } .ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } .ui-helper-clearfix { display: inline-block; } /* required comment for clearfix to work in Opera \*/ * html .ui-helper-clearfix { height:1%; } .ui-helper-clearfix { display:block; } /* end clearfix */ .ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } /* Interaction Cues ----------------------------------*/ .ui-state-disabled { cursor: default !important; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } /* Misc visuals ----------------------------------*/ /* Overlays */ .ui-widget-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; } /* * jQuery UI CSS Framework 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Theming/API * * To view and modify this theme, visit http://jqueryui.com/themeroller/?ctl=themeroller */ /* Component containers ----------------------------------*/ .ui-widget { font-family: Arial,sans-serif; font-size: 1.1em; } .ui-widget .ui-widget { font-size: 1em; } .ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Arial,sans-serif; font-size: 1em; } .ui-widget-content { border: 1px solid #B6B6B6; background: #ffffff; color: #4F4F4F; } .ui-widget-content a { color: #4F4F4F; } .ui-widget-header { border: 1px solid #B6B6B6; color: #4F4F4F; font-weight: bold; } .ui-widget-header { background: #ededed url(images/bg_fallback.png) 0 0 repeat-x; /* Old browsers */ background: -moz-linear-gradient(top, #ededed 0%, #c4c4c4 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ededed), color-stop(100%,#c4c4c4)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* IE10+ */ background: linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* W3C */ } .ui-widget-header a { color: #4F4F4F; } /* Interaction states ----------------------------------*/ .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #B6B6B6; font-weight: normal; color: #4F4F4F; } .ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { background: #ededed url(images/bg_fallback.png) 0 0 repeat-x; /* Old browsers */ background: -moz-linear-gradient(top, #ededed 0%, #c4c4c4 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ededed), color-stop(100%,#c4c4c4)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* IE10+ */ background: linear-gradient(top, #ededed 0%,#c4c4c4 100%); /* W3C */ -webkit-box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset; -moz-box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset; box-shadow: 0 1px 0 rgba(255,255,255,0.6) inset; } .ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #4F4F4F; text-decoration: none; } .ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #9D9D9D; font-weight: normal; color: #313131; } .ui-state-hover a, .ui-state-hover a:hover { color: #313131; text-decoration: none; } .ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { outline: none; color: #1c4257; border: 1px solid #7096ab; background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */ background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */ background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */ -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #313131; text-decoration: none; } .ui-widget :active { outline: none; } /* Interaction Cues ----------------------------------*/ .ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight { border: 1px solid #d2dbf4; background: #f4f8fd; color: #0d2054; -moz-border-radius: 0 !important; -webkit-border-radius: 0 !important; border-radius: 0 !important; } .ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; } .ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error { border: 1px solid #e2d0d0; background: #fcf0f0; color: #280b0b; -moz-border-radius: 0 !important; -webkit-border-radius: 0 !important; border-radius: 0 !important; } .ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #cd0a0a; } .ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #cd0a0a; } .ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } .ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } .ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } /* Icons ----------------------------------*/ /* states and images */ .ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-widget-header .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } .ui-state-default .ui-icon { background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-active .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-highlight .ui-icon {background-image: url(images/ui-icons_454545_256x240.png); } .ui-state-error .ui-icon, .ui-state-error-text .ui-icon { background: url(images/icon_sprite.png) -16px 0 no-repeat !important; } .ui-state-highlight .ui-icon, .ui-state-error .ui-icon { margin-top: -1px; } /* positioning */ .ui-icon-carat-1-n { background-position: 0 0; } .ui-icon-carat-1-ne { background-position: -16px 0; } .ui-icon-carat-1-e { background-position: -32px 0; } .ui-icon-carat-1-se { background-position: -48px 0; } .ui-icon-carat-1-s { background-position: -64px 0; } .ui-icon-carat-1-sw { background-position: -80px 0; } .ui-icon-carat-1-w { background-position: -96px 0; } .ui-icon-carat-1-nw { background-position: -112px 0; } .ui-icon-carat-2-n-s { background-position: -128px 0; } .ui-icon-carat-2-e-w { background-position: -144px 0; } .ui-icon-triangle-1-n { background-position: 0 -16px; } .ui-icon-triangle-1-ne { background-position: -16px -16px; } .ui-icon-triangle-1-e { background-position: -32px -16px; } .ui-icon-triangle-1-se { background-position: -48px -16px; } .ui-icon-triangle-1-s { background-position: -64px -16px; } .ui-icon-triangle-1-sw { background-position: -80px -16px; } .ui-icon-triangle-1-w { background-position: -96px -16px; } .ui-icon-triangle-1-nw { background-position: -112px -16px; } .ui-icon-triangle-2-n-s { background-position: -128px -16px; } .ui-icon-triangle-2-e-w { background-position: -144px -16px; } .ui-icon-arrow-1-n { background-position: 0 -32px; } .ui-icon-arrow-1-ne { background-position: -16px -32px; } .ui-icon-arrow-1-e { background-position: -32px -32px; } .ui-icon-arrow-1-se { background-position: -48px -32px; } .ui-icon-arrow-1-s { background-position: -64px -32px; } .ui-icon-arrow-1-sw { background-position: -80px -32px; } .ui-icon-arrow-1-w { background-position: -96px -32px; } .ui-icon-arrow-1-nw { background-position: -112px -32px; } .ui-icon-arrow-2-n-s { background-position: -128px -32px; } .ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } .ui-icon-arrow-2-e-w { background-position: -160px -32px; } .ui-icon-arrow-2-se-nw { background-position: -176px -32px; } .ui-icon-arrowstop-1-n { background-position: -192px -32px; } .ui-icon-arrowstop-1-e { background-position: -208px -32px; } .ui-icon-arrowstop-1-s { background-position: -224px -32px; } .ui-icon-arrowstop-1-w { background-position: -240px -32px; } .ui-icon-arrowthick-1-n { background-position: 0 -48px; } .ui-icon-arrowthick-1-ne { background-position: -16px -48px; } .ui-icon-arrowthick-1-e { background-position: -32px -48px; } .ui-icon-arrowthick-1-se { background-position: -48px -48px; } .ui-icon-arrowthick-1-s { background-position: -64px -48px; } .ui-icon-arrowthick-1-sw { background-position: -80px -48px; } .ui-icon-arrowthick-1-w { background-position: -96px -48px; } .ui-icon-arrowthick-1-nw { background-position: -112px -48px; } .ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } .ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } .ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } .ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } .ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } .ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } .ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } .ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } .ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } .ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } .ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } .ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } .ui-icon-arrowreturn-1-w { background-position: -64px -64px; } .ui-icon-arrowreturn-1-n { background-position: -80px -64px; } .ui-icon-arrowreturn-1-e { background-position: -96px -64px; } .ui-icon-arrowreturn-1-s { background-position: -112px -64px; } .ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } .ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } .ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } .ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } .ui-icon-arrow-4 { background-position: 0 -80px; } .ui-icon-arrow-4-diag { background-position: -16px -80px; } .ui-icon-extlink { background-position: -32px -80px; } .ui-icon-newwin { background-position: -48px -80px; } .ui-icon-refresh { background-position: -64px -80px; } .ui-icon-shuffle { background-position: -80px -80px; } .ui-icon-transfer-e-w { background-position: -96px -80px; } .ui-icon-transferthick-e-w { background-position: -112px -80px; } .ui-icon-folder-collapsed { background-position: 0 -96px; } .ui-icon-folder-open { background-position: -16px -96px; } .ui-icon-document { background-position: -32px -96px; } .ui-icon-document-b { background-position: -48px -96px; } .ui-icon-note { background-position: -64px -96px; } .ui-icon-mail-closed { background-position: -80px -96px; } .ui-icon-mail-open { background-position: -96px -96px; } .ui-icon-suitcase { background-position: -112px -96px; } .ui-icon-comment { background-position: -128px -96px; } .ui-icon-person { background-position: -144px -96px; } .ui-icon-print { background-position: -160px -96px; } .ui-icon-trash { background-position: -176px -96px; } .ui-icon-locked { background-position: -192px -96px; } .ui-icon-unlocked { background-position: -208px -96px; } .ui-icon-bookmark { background-position: -224px -96px; } .ui-icon-tag { background-position: -240px -96px; } .ui-icon-home { background-position: 0 -112px; } .ui-icon-flag { background-position: -16px -112px; } .ui-icon-calendar { background-position: -32px -112px; } .ui-icon-cart { background-position: -48px -112px; } .ui-icon-pencil { background-position: -64px -112px; } .ui-icon-clock { background-position: -80px -112px; } .ui-icon-disk { background-position: -96px -112px; } .ui-icon-calculator { background-position: -112px -112px; } .ui-icon-zoomin { background-position: -128px -112px; } .ui-icon-zoomout { background-position: -144px -112px; } .ui-icon-search { background-position: -160px -112px; } .ui-icon-wrench { background-position: -176px -112px; } .ui-icon-gear { background-position: -192px -112px; } .ui-icon-heart { background-position: -208px -112px; } .ui-icon-star { background-position: -224px -112px; } .ui-icon-link { background-position: -240px -112px; } .ui-icon-cancel { background-position: 0 -128px; } .ui-icon-plus { background-position: -16px -128px; } .ui-icon-plusthick { background-position: -32px -128px; } .ui-icon-minus { background-position: -48px -128px; } .ui-icon-minusthick { background-position: -64px -128px; } .ui-icon-close { background-position: -80px -128px; } .ui-icon-closethick { background-position: -96px -128px; } .ui-icon-key { background-position: -112px -128px; } .ui-icon-lightbulb { background-position: -128px -128px; } .ui-icon-scissors { background-position: -144px -128px; } .ui-icon-clipboard { background-position: -160px -128px; } .ui-icon-copy { background-position: -176px -128px; } .ui-icon-contact { background-position: -192px -128px; } .ui-icon-image { background-position: -208px -128px; } .ui-icon-video { background-position: -224px -128px; } .ui-icon-script { background-position: -240px -128px; } .ui-icon-alert { background-position: 0 -144px; } .ui-icon-info { background: url(images/icon_sprite.png) 0 0 no-repeat !important; } .ui-icon-notice { background-position: -32px -144px; } .ui-icon-help { background-position: -48px -144px; } .ui-icon-check { background-position: -64px -144px; } .ui-icon-bullet { background-position: -80px -144px; } .ui-icon-radio-off { background-position: -96px -144px; } .ui-icon-radio-on { background-position: -112px -144px; } .ui-icon-pin-w { background-position: -128px -144px; } .ui-icon-pin-s { background-position: -144px -144px; } .ui-icon-play { background-position: 0 -160px; } .ui-icon-pause { background-position: -16px -160px; } .ui-icon-seek-next { background-position: -32px -160px; } .ui-icon-seek-prev { background-position: -48px -160px; } .ui-icon-seek-end { background-position: -64px -160px; } .ui-icon-seek-start { background-position: -80px -160px; } /* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ .ui-icon-seek-first { background-position: -80px -160px; } .ui-icon-stop { background-position: -96px -160px; } .ui-icon-eject { background-position: -112px -160px; } .ui-icon-volume-off { background-position: -128px -160px; } .ui-icon-volume-on { background-position: -144px -160px; } .ui-icon-power { background-position: 0 -176px; } .ui-icon-signal-diag { background-position: -16px -176px; } .ui-icon-signal { background-position: -32px -176px; } .ui-icon-battery-0 { background-position: -48px -176px; } .ui-icon-battery-1 { background-position: -64px -176px; } .ui-icon-battery-2 { background-position: -80px -176px; } .ui-icon-battery-3 { background-position: -96px -176px; } .ui-icon-circle-plus { background-position: 0 -192px; } .ui-icon-circle-minus { background-position: -16px -192px; } .ui-icon-circle-close { background-position: -32px -192px; } .ui-icon-circle-triangle-e { background-position: -48px -192px; } .ui-icon-circle-triangle-s { background-position: -64px -192px; } .ui-icon-circle-triangle-w { background-position: -80px -192px; } .ui-icon-circle-triangle-n { background-position: -96px -192px; } .ui-icon-circle-arrow-e { background-position: -112px -192px; } .ui-icon-circle-arrow-s { background-position: -128px -192px; } .ui-icon-circle-arrow-w { background-position: -144px -192px; } .ui-icon-circle-arrow-n { background-position: -160px -192px; } .ui-icon-circle-zoomin { background-position: -176px -192px; } .ui-icon-circle-zoomout { background-position: -192px -192px; } .ui-icon-circle-check { background-position: -208px -192px; } .ui-icon-circlesmall-plus { background-position: 0 -208px; } .ui-icon-circlesmall-minus { background-position: -16px -208px; } .ui-icon-circlesmall-close { background-position: -32px -208px; } .ui-icon-squaresmall-plus { background-position: -48px -208px; } .ui-icon-squaresmall-minus { background-position: -64px -208px; } .ui-icon-squaresmall-close { background-position: -80px -208px; } .ui-icon-grip-dotted-vertical { background-position: 0 -224px; } .ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } .ui-icon-grip-solid-vertical { background-position: -32px -224px; } .ui-icon-grip-solid-horizontal { background-position: -48px -224px; } .ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } .ui-icon-grip-diagonal-se { background-position: -80px -224px; } /* Misc visuals ----------------------------------*/ /* Corner radius */ .ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } .ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } .ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } .ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } .ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } .ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } .ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } .ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } .ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } /* Overlays */ .ui-widget-overlay { background: #262b33; opacity: .70;filter:Alpha(Opacity=70); } .ui-widget-shadow { margin: -8px 0 0 -8px; padding: 8px; background: #000000; opacity: .30;filter:Alpha(Opacity=30); -moz-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/* * jQuery UI Resizable 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Resizable#theming */ .ui-resizable { position: relative;} .ui-resizable-handle { position: absolute; font-size: 0.1px; z-index: 999; display: block;} .ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; } .ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; } .ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; } .ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; } .ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; } .ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; } .ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; } .ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; } .ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/* * jQuery UI Selectable 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Selectable#theming */ .ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; } /* * jQuery UI Accordion 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Accordion#theming */ /* IE/Win - Fix animation bug - #4615 */ .ui-accordion { width: 100%; } .ui-accordion .ui-accordion-header { cursor: pointer; position: relative; margin-top: 1px; zoom: 1; } .ui-accordion .ui-accordion-header, .ui-accordion .ui-accordion-content { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-accordion .ui-accordion-li-fix { display: inline; } .ui-accordion .ui-accordion-header-active { border-bottom: 0 !important; } .ui-accordion .ui-accordion-header a { display: block; font-size: 12px; font-weight: bold; padding: .5em .5em .5em .7em; } .ui-accordion .ui-accordion-icons { padding-left: 2.2em; } .ui-accordion .ui-accordion-header .ui-icon { position: absolute; left: .5em; top: 50%; margin-top: -8px; } .ui-accordion .ui-accordion-content { padding: 1em 2.2em; border-top: 0; margin-top: -2px; position: relative; top: 1px; margin-bottom: 2px; overflow: auto; display: none; zoom: 1; } .ui-accordion .ui-accordion-content-active { display: block; }/* * jQuery UI Autocomplete 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Autocomplete#theming */ .ui-autocomplete { position: absolute; cursor: default; z-index: 3; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; -moz-box-shadow: 0 1px 5px rgba(0,0,0,0.3); -webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.3); box-shadow: 0 1px 5px rgba(0,0,0,0.3); } /* workarounds */ * html .ui-autocomplete { width:1px; } /* without this, the menu expands to 100% in IE6 */ /* * jQuery UI Menu 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Menu#theming */ .ui-menu { list-style:none; padding: 2px; margin: 0; display:block; float: left; } .ui-menu .ui-menu { margin-top: -3px; } .ui-menu .ui-menu-item { margin:0; padding: 0; zoom: 1; float: left; clear: left; width: 100%; } .ui-menu .ui-menu-item a { text-decoration:none; display:block; padding:.2em .4em; line-height:1.5; zoom:1; } .ui-menu .ui-menu-item a.ui-state-focus, .ui-menu .ui-menu-item a.ui-state-hover, .ui-menu .ui-menu-item a.ui-state-active { font-weight: normal; margin: -1px; background: #5f83b9; color: #FFFFFF; text-shadow: 0px 1px 1px #234386; border-color: #466086; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } /* * jQuery UI Button 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Button#theming */ .ui-button { display: inline-block; position: relative; padding: 0; margin-right: .1em; text-decoration: none !important; cursor: pointer; text-align: center; zoom: 1; overflow: visible; -webkit-user-select: none; -moz-user-select: none; user-select: none; } /* the overflow property removes extra width in IE */ .ui-button-icon-only { width: 2.2em; } /* to make room for the icon, a width needs to be set here */ button.ui-button-icon-only { width: 2.4em; } /* button elements seem to need a little more width */ .ui-button-icons-only { width: 3.4em; } button.ui-button-icons-only { width: 3.7em; } /* button animation properties */ .ui-button { -webkit-transition: all 250ms ease-in-out; -moz-transition: all 250ms ease-in-out; -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } /*states*/ .ui-button.ui-state-hover { -moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; } .ui-button.ui-state-focus { outline: none; color: #1c4257; border-color: #7096ab; background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */ background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */ background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */ -moz-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; -webkit-box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; box-shadow: 0 0 8px rgba(0, 0, 0, 0.15), 0 1px 0 rgba(255,255,255,0.8) inset; } /*button text element */ .ui-button .ui-button-text { display: block; line-height: 1.4; font-size: 14px; font-weight: bold; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6); } .ui-button-text-only .ui-button-text { padding: .4em 1em; } .ui-button-icon-only .ui-button-text, .ui-button-icons-only .ui-button-text { padding: .4em; text-indent: -9999999px; } .ui-button-text-icon-primary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 1em .4em 2.1em; } .ui-button-text-icon-secondary .ui-button-text, .ui-button-text-icons .ui-button-text { padding: .4em 2.1em .4em 1em; } .ui-button-text-icons .ui-button-text { padding-left: 2.1em; padding-right: 2.1em; } /* no icon support for input elements, provide padding by default */ input.ui-button, .ui-widget-content input.ui-button { font-size: 14px; font-weight: bold; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.6); padding: 0 1em !important; height: 33px; } /*remove submit button internal padding in Firefox*/ input.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* fix webkits handling of the box model */ @media screen and (-webkit-min-device-pixel-ratio:0) { input.ui-button { height: 31px !important; } } /*button icon element(s) */ .ui-button-icon-only .ui-icon, .ui-button-text-icon-primary .ui-icon, .ui-button-text-icon-secondary .ui-icon, .ui-button-text-icons .ui-icon, .ui-button-icons-only .ui-icon { position: absolute; top: 50%; margin-top: -8px; } .ui-button-icon-only .ui-icon { left: 50%; margin-left: -8px; } .ui-button-text-icon-primary .ui-button-icon-primary, .ui-button-text-icons .ui-button-icon-primary, .ui-button-icons-only .ui-button-icon-primary { left: .5em; } .ui-button-text-icon-secondary .ui-button-icon-secondary, .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } .ui-button-text-icons .ui-button-icon-secondary, .ui-button-icons-only .ui-button-icon-secondary { right: .5em; } /*button sets*/ .ui-buttonset { margin-right: 7px; } .ui-buttonset .ui-button { margin-left: 0; margin-right: -.3em; } .ui-buttonset .ui-button.ui-state-active { color: #1c4257; border-color: #7096ab; } .ui-buttonset .ui-button.ui-state-active { background: #ededed url(images/bg_fallback.png) 0 -50px repeat-x; /* Old browsers */ background: -moz-linear-gradient(top, #b9e0f5 0%, #92bdd6 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#b9e0f5), color-stop(100%,#92bdd6)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* Opera11.10+ */ background: -ms-linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* IE10+ */ background: linear-gradient(top, #b9e0f5 0%,#92bdd6 100%); /* W3C */ -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } /* workarounds */ button.ui-button::-moz-focus-inner { border: 0; padding: 0; } /* reset extra padding in Firefox */ /* * jQuery UI Dialog 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Dialog#theming */ .ui-dialog { position: absolute; padding: 0; width: 300px; overflow: hidden; } .ui-dialog { -webkit-box-shadow: 0 2px 12px rgba(0,0,0,0.6); -moz-box-shadow: 0 2px 12px rgba(0,0,0,0.6); box-shadow: 0 2px 12px rgba(0,0,0,0.6); } .ui-dialog .ui-dialog-titlebar { padding: 0.7em 1em 0.6em 1em; position: relative; border: none; border-bottom: 1px solid #979797; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; font-size: 14px; text-shadow: 0 1px 0 rgba(255,255,255,0.5); } .ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .8em; top: 55%; width: 16px; margin: -10px 0 0 0; padding: 0; height: 16px; background: url(images/icon_sprite.png) 0 -16px no-repeat; border: 0 none; } .ui-dialog .ui-dialog-titlebar-close { -webkit-box-shadow: none !important; -moz-box-shadow: none !important; box-shadow: none !important; -webkit-transition: none; -moz-transition: none; transition: none; } .ui-dialog .ui-dialog-titlebar-close span { display: none; } .ui-dialog .ui-dialog-titlebar-close:hover { background-position: -16px -16px; } .ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; border: 0; } .ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } .ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } .ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } .ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } .ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } .ui-draggable .ui-dialog-titlebar { cursor: move; } /* * jQuery UI Slider 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Slider#theming */ .ui-slider { position: relative; text-align: left; background: #d7d7d7; z-index: 1; } .ui-slider { -moz-box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; -webkit-box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; box-shadow: 0 1px 2px rgba(0,0,0,0.5) inset; } .ui-slider .ui-slider-handle { background: url(images/slider_handles.png) 0px -23px no-repeat; position: absolute; z-index: 2; width: 23px; height: 23px; cursor: default; border: none; outline: none; -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .ui-slider .ui-state-hover, .ui-slider .ui-state-active { background-position: 0 0; } .ui-slider .ui-slider-range { background: #a3cae0; position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } .ui-slider .ui-slider-range { -moz-box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; -webkit-box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; box-shadow: 0 1px 2px rgba(17,35,45,0.6) inset; } .ui-slider-horizontal { height: 5px; } .ui-slider-horizontal .ui-slider-handle { top: -8px; margin-left: -13px; } .ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } .ui-slider-horizontal .ui-slider-range-min { left: 0; } .ui-slider-horizontal .ui-slider-range-max { right: 0; } .ui-slider-vertical { width: 5px; height: 100px; } .ui-slider-vertical .ui-slider-handle { left: -8px; margin-left: 0; margin-bottom: -13px; } .ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } .ui-slider-vertical .ui-slider-range-min { bottom: 0; } .ui-slider-vertical .ui-slider-range-max { top: 0; }/* * jQuery UI Tabs 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Tabs#theming */ .ui-tabs { position: relative; zoom: 1; border: 0; background: transparent; } /* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as "fixed") */ .ui-tabs .ui-tabs-nav { margin: 0; padding: 0; background: transparent; border-width: 0 0 1px 0; } .ui-tabs .ui-tabs-nav { -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-tabs .ui-tabs-nav li { list-style: none; float: left; position: relative; top: 1px; margin: 0 .2em 1px 0; border-bottom: 0 !important; padding: 0; white-space: nowrap; } .ui-tabs .ui-tabs-nav li a { float: left; padding: .5em 1em; text-decoration: none; font-size: 12px; font-weight: bold; text-shadow: 0 1px 0 rgba(255,255,255,0.5); } .ui-tabs .ui-tabs-nav li.ui-tabs-selected, .ui-tabs .ui-tabs-nav li.ui-tabs-active { margin-bottom: 0; padding-bottom: 1px; background: #fff; border-color: #B6B6B6; } .ui-tabs .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs .ui-tabs-nav li.ui-tabs-active a, .ui-tabs .ui-tabs-nav li.ui-state-disabled a, .ui-tabs .ui-tabs-nav li.ui-state-processing a { cursor: text; outline: none; } .ui-tabs .ui-tabs-nav li a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-selected a, .ui-tabs.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active a { cursor: pointer; } /* first selector in group seems obsolete, but required to overcome bug in Opera applying cursor: text overall if defined elsewhere... */ .ui-tabs .ui-tabs-panel { display: block; border-width: 0 1px 1px 1px; padding: 1em 1.4em; background: none; } .ui-tabs .ui-tabs-panel { background: #FFF; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-tabs .ui-tabs-hide { display: none !important; } /* * jQuery UI Datepicker 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Datepicker#theming */ .ui-datepicker { width: 17em; padding: 0; display: none; border-color: #DDDDDD; } .ui-datepicker { -moz-box-shadow: 0 4px 8px rgba(0,0,0,0.5); -webkit-box-shadow: 0 4px 8px rgba(0,0,0,0.5); box-shadow: 0 4px 8px rgba(0,0,0,0.5); } .ui-datepicker .ui-datepicker-header { position:relative; padding:.35em 0; border: none; border-bottom: 1px solid #B6B6B6; -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0; } .ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 6px; width: 1.8em; height: 1.8em; } .ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { border: 1px none; } .ui-datepicker .ui-datepicker-prev { left:2px; } .ui-datepicker .ui-datepicker-next { right:2px; } .ui-datepicker .ui-datepicker-prev span { background-position: 0px -32px !important; } .ui-datepicker .ui-datepicker-next span { background-position: -16px -32px !important; } .ui-datepicker .ui-datepicker-prev-hover span { background-position: 0px -48px !important; } .ui-datepicker .ui-datepicker-next-hover span { background-position: -16px -48px !important; } .ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; background: url(images/icon_sprite.png) no-repeat; } .ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; font-size: 12px; text-shadow: 0 1px 0 rgba(255,255,255,0.6); } .ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; } .ui-datepicker select.ui-datepicker-month-year {width: 100%;} .ui-datepicker select.ui-datepicker-month, .ui-datepicker select.ui-datepicker-year { width: 49%;} .ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; } .ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; } .ui-datepicker td { border: 0; padding: 1px; } .ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; } .ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; } .ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; } .ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; } .ui-datepicker table .ui-state-highlight { border-color: #5F83B9; } .ui-datepicker table .ui-state-hover { background: #5F83B9; color: #FFF; font-weight: bold; text-shadow: 0 1px 1px #234386; -webkit-box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; -moz-box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; box-shadow: 0 0px 0 rgba(255,255,255,0.6) inset; border-color: #5F83B9; } .ui-datepicker-calendar .ui-state-default { background: transparent; border-color: #FFF; } .ui-datepicker-calendar .ui-state-active { background: #5F83B9; border-color: #5F83B9; color: #FFF; font-weight: bold; text-shadow: 0 1px 1px #234386; } /* with multiple calendars */ .ui-datepicker.ui-datepicker-multi { width:auto; } .ui-datepicker-multi .ui-datepicker-group { float:left; } .ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; } .ui-datepicker-multi-2 .ui-datepicker-group { width:50%; } .ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; } .ui-datepicker-multi-4 .ui-datepicker-group { width:25%; } .ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; } .ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; } .ui-datepicker-row-break { clear:both; width:100%; } /* RTL support */ .ui-datepicker-rtl { direction: rtl; } .ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; } .ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; } .ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; } .ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; } .ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; } .ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; } .ui-datepicker-rtl .ui-datepicker-group { float:right; } .ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; } .ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; } /* IE6 IFRAME FIX (taken from datepicker 1.5.3 */ .ui-datepicker-cover { display: none; /*sorry for IE5*/ display/**/: block; /*sorry for IE5*/ position: absolute; /*must have*/ z-index: -1; /*must have*/ filter: mask(); /*must have*/ top: -4px; /*must have*/ left: -4px; /*must have*/ width: 200px; /*must have*/ height: 200px; /*must have*/ }/* * jQuery UI Progressbar 1.8.7 * * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) * Dual licensed under the MIT or GPL Version 2 licenses. * http://jquery.org/license * * http://docs.jquery.com/UI/Progressbar#theming */ .ui-progressbar { height: 12px; text-align: left; background: #FFF url(images/progress_bar.gif) 0 -14px repeat-x; } .ui-progressbar .ui-progressbar-value {margin: -1px; height:100%; background: url(images/progress_bar.gif) 0 0 repeat-x; } /* Extra Input Field Styling */ .ui-form textarea, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]) { padding: 3px; -webkit-border-radius: 2px; -moz-border-radius: 2px; border-radius: 2px; border: 1px solid #cecece; outline: none; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2); box-shadow: 0 1px 3px rgba(0,0,0,0.1) inset, 0 1px 0 rgba(255,255,255,0.2); -webkit-transition: all 250ms ease-in-out; -moz-transition: all 250ms ease-in-out; -o-transition: all 250ms ease-in-out; transition: all 250ms ease-in-out; } .ui-form textarea:hover, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):hover { border: 1px solid #bdbdbd; -webkit-box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2); -moz-box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2); box-shadow: 0 1px 3px rgba(0,0,0,0.2) inset, 0 1px 0 rgba(255,255,255,0.2); } .ui-form textarea:focus, .ui-form input:not([type="submit"]):not([type="button"]):not([type="checkbox"]):not([type="radio"]):not([type="file"]):not([type="range"]):focus { border: 1px solid #95bdd4; -webkit-box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2); -moz-box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2); box-shadow: 0 2px 3px rgba(161,202,226,0.5) inset, 0 1px 0 rgba(255,255,255,0.2); } .ui-spinner { position: relative; display: inline-block; overflow: hidden; padding: 0; vertical-align: middle; border: 0 none; } .ui-spinner-input { border: none; background: none; color: inherit; padding: 0; margin: 0; vertical-align: middle; } .ui-spinner-button { width: 16px; height: 50%; font-size: .5em; padding: 0; margin: 0; text-align: center; position: absolute; cursor: default; display: block; overflow: hidden; right: 0; -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; } /* vertical centre icon */ .ui-spinner .ui-icon { position: absolute; margin-top: -8px; top: 50%; left: 0; } .ui-spinner-up { top: 0; } .ui-spinner-down { bottom: 0; } /* TR overrides */ .ui-spinner .ui-icon-triangle-1-s { /* need to fix icons sprite */ background-position: -65px -16px; }PK�������!� %����)��assets/css/aristo/images/progress_bar.gifnu�[��������GIF89a8����֖٫ܵ���������������������������������������������������������������������������������������������!�����,����8���@pH,Ȥr8ШtJR/cz8챀 znn~c,  � 8*\Ȱ"JHŋ3" Ǐ CI(S\ɲ˗�ȜI͛8s@ JhH*]ʴ �;PK�������!�Qe��e��+��assets/css/aristo/images/slider_handles.pngnu�[��������PNG  ��� IHDR������.���_��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F��IDATxڴ]l[g}N(uBvMCmSץM*b4U] $ظ;kA5i +`ҘMIltݪ\8:g/>NII}G9^k1v  ߍN�nj@(<o@�FQ`T@ @H+P4d[2cq`jZ�>K��9ښ@i G/3V C1 ǃGU=^; L˖h=@/0 ^m{h##U8!'S(VjdEDcYB&++KN�_5 c(bjtCUId<"*'bQSZZdtl|ܥ(sBFE( Ih&24czcvܲp4Ƅm2<22jN$˥=.\%=(.'r `V܊b>`?]Q ܺ1SNp? R`jP(<OmdORR1M{;VryӬxoʥ2os@^ FJ85 ?$Pvhhu EF_8] e$1iݧ2{xoV٦E�O\4x+ Ei}Q_x}Rh.dt/d۩x}(I>mxN/A ]c-iYF&Bq9�,N,9;gfXːMl:Ea.SG"vMp*>?3аYN.P*:euJh<{ .WO軭IhXhGU?SOdVӤRdWuUU GzH$ Ǒ�WmK%eVfCpM2Npi-GRvfDb�ɑͮ*Q 'jI-UE4{K**q"Fۑnv-Ihp4MpcpLQX-%XVY Pڟ G^p]e7Mfޯ~wdcN-e<詳_x|~4! gRcR%+~xj/Ž2wKtg}rPtb,NIəMru|@c}}.Wm~7_Oup@h3x752fb6$S1qrr,:szí}O=96|U}%7W!tb~EN {T|jCt\ 6vf.w1yB\ii]{eiBf[#pV׺[Ua6fyZj2lvbSZ&o:kg@qZ_˰t.uq"-6z=]~be1Y7)%K[!`068/8R'ǥ(ؖU\ /rj Nru˭ԹOÇ\nw6fiqέ^z\slܫֳ.>a[ߺkTŖAm]@E=mmCy''R:8u=V�H����IENDB`PK�������!�16����(��assets/css/aristo/images/bg_fallback.pngnu�[��������PNG  ��� IHDR������d���n;��� pHYs�� �� ��� OiCCPPhotoshop ICC profile��xڝSgTS=BKKoR RB&*! J!QEEȠQ, !{kּ> H3Q5 B.@ $p�d!s#�~<<+"�x �M0B\t8K�@zB�@F&S��`cb�P-�`'�{�[!� eD�h;�VE�X0�fK9�-�0IWfH�� � �0Q)�{�`##x��FW<+*��x<$9E[-qWW.(I+6aa@.y24��x6_-"bbϫp@��t~,/;m%h^ uf@�Wp~<<EJB[aW}g_Wl~<$2]GLϒ bG "IbX*QqD2"B)%d,>5�j>{-]cK'Xt��o(hw?G%�fIq��^D$.Tʳ?��D*A, `6B$BB dr`)B(Ͱ*`/@4Qhp.U=pa( Aa!ڈbX#!H$ ɈQ"K5H1RT UH=r9\F;�2G1Q= C7F dt1r=6Ыhڏ>C03l0.B8, c˱" VcϱwE 6wB aAHXLXNH $4 7 Q'"K&b21XH,#/{C7$C2'ITFnR#,4H#dk9, +ȅ3![ b@qS(RjJ4e2AURݨT5ZBRQ4u9̓IKhhitݕNWGw Ljg(gwLӋT071oUX**| J&*/Tު UUT^S}FU3S ԖUPSSg;goT?~YYLOCQ_ cx,!k u5&|v*=9C3J3WRf?qtN (~))4L1e\kXHQG6EYAJ'\'GgSSݧ M=:.kDwn^Loy}/TmG X $ <5qo</QC]@Caaᄑ<FFi\$mmƣ&&!&KMMRM);L;L֙͢5=12כ߷`ZxZ,eIZYnZ9YXUZ]F%ֻNNgðɶۮm}agbgŮ}}= Z~sr:V:ޚΜ?}/gX3)iSGggs󈋉K.>.ȽJtq]zۯ6iܟ4)Y3sCQ? 0k߬~OCOg#/c/Wװwa>>r><72Y_7ȷOo_C#dz�%gA[z|!?:eAAA!h쐭!ΑiP~aa~ 'W?pX15wCsDDDޛg1O9-J5*>.j<74?.fYXXIlK9.*6nl {/]py.,:@LN8A*%w% yg"/6шC\*NH*Mz쑼5y$3,幄'L Lݛ:v m2=:1qB!Mggfvˬen/kY- BTZ(*geWf͉9+̳ې7ᒶKW-X潬j9<qy +V<*mOW~&zMk^ʂk U }]OX/Yߵa>(xoʿܔĹdff-[n ڴ VE/(ۻC<e;?TTTT6ݵan{4[>ɾUUMfeI?m]Nmq#׹=TR+Gw- 6 U#pDy  :v{vg/jBFS[b[O>zG4<YyJTiӓgό}~.`ۢ{cjotE;;\tWW:_mt<Oǻ\kz{f7y՞9=ݽzo~r'˻w'O_@AC݇?[jwGCˆ 8>99?rCd&ˮ/~јѡ򗓿m|x31^VwwO| (hSЧc3-��� cHRM��z%��������u0��`��:��o_F���PLTEʅˇ͊όяӒؘ֕ڛݞߡ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������[���/tRNS�Z8���mIDATx[��@I<Q|%48q2 l\Q7nTx/6h茯 Ȍ6vʈ #411�*^����IENDB`PK�������!�>` �� ��(��assets/css/aristo/images/icon_sprite.pngnu�[��������PNG  ��� IHDR��� ������jfk���tEXtSoftware�Adobe ImageReadyqe<�� 3IDATxZyU}٘gatt1*PqaRmbXT0D*i61:4mCCjFmFRVp0Y=o 1&w9;|if^vOÑBi+趙*^4FM+҅xn'* CCMs3iyMomd~S Ă{/O=q^sj~1VT̪D_yS:ΜƸFG]j\((TŸ4\lfb{ N\qf՜?s!X wIp]^yA Yrg2ug_>W%:|0I:..vƬW[PT}CC^8#r__T i,@F 4cQ-` v~kwE,Wh-üQO"ΞhTTM ˗/Sk{p[FˆhpT*Db ć (t I D_DbTDIaلn/R.%D"F Dŕ0 MθB-l.uP0kI2GFrDdD?hy CѐT^PP <KkPW0 h;~<Ibօ DM<uuGPGTr(4WhR^(omÈcH@|sp= ʥt΁$F#0;I9tZH9xdDC{\ ?ӽx/S ".ϔzzp8L)ԉWqX0xJ{ tt;`,dw:SԱ|`XA/DM3<<.x,J@${tTqTMV&P޼B4bD,;QK*?5G"itrԩS_||vQy5@`>;Γu]/.]4 zں{S,ƶAWQvL.-+W|}IY~K.m"%>i9f̘{.g[n}sg0Q2᷺eŊoYIP_xGϟ?/L �4iҤkJ<eS`}xDQQbI9`A_JA=0, :uj-ŌVTX@ϗc,� :pZZlܸQ,_\[r /0"+`#Z" &HD2~. a@# _iӦIw㪯c<*W}$&O,ϝ;'{aK*=QW7IJeDCC}v)xPJ< ( :pp�H)�j]O_pBpr0/A4XF0aR@]]\YAYYI<8q8t萜1cܹ3UD䯪t)yHgzJ$b ZL q뭷~EA9wرcwI:0&ݻӻ=Tv\4/A�1_MmBѡdzCԸ~5{4g^ѣGo‹"Aӧl'h2q1́ y B) |(VbvRF �$Wƍ ub̙Iem$<7OѶLh\R]coo(r ږIX OMŌ-LcGG(+\reiIbd%z~*k"l lSVOPYsƧ+,aC=|Vg-ǹSA@!SÞ>s_~Z׭V< @?PO0]2 n*DB % >� ΄:ȄW k>[|UN2ҁ#(/d�mΙ3G r[V@9U<xCdANN`%nFMP)�V�T/:x$u=mmmM Vj?T<_YxtV$Kmd)U/S@*/`!8R~ zunD.]v%Ie�:k2˄OT#NLx`P~�̮>xIɱcް~ߗnD?H]SÜr'k9_z.|P N0 Q2X^&< T`⪆ 8ÝSWlx` ʆ�\NQ4qŁ4i||^sM AgR?{0Z>sTs{i#5�yl<83K3k>׉:T|oO$RЙpVWRDu<)qX||2 Kz >̝;ޏ6|ްaCZ^`Hų `Pz^ 4jYUEUyj|~zOmt.{?>e{-|\׀~zM5Ĉ $Ym ;>z=`}1Ø7&s^uS֝#A\@K-O9bHٟ6V6[ ?Xn%ek-f&r#x}Az—j6A~l| щ%U9�@KV|+zo];a=y5|-7kE?YvS tĶĈTs?t`=ôfjfWĶ@_!L2B Io>0#?< ɩ+2PZRz˦?c#|ŪǾ|hOc[έQqK 1U-OVBù6$ªd!Zx-pɒ%C~px'{nV?j@ހy 7 o@ހy 7 o@�\`�=pd����IENDB`PK�������!�d_.����!��assets/images/btn_donateCC_LG.gifnu�[��������GIF89a�/�z�/=r<,Z&x֖/l54g736Rt:gߢ�Wޞz+|h4][Je|E'THSU7Aﵻ€ԴĻ@7'ڦoKgcPa^r}FJ#j︋>g(ؚ҇7[5+ χEɨNE53`ܳwpcvبn˜Є~sȹa`׳HBYʝΙӚjసRJƨ憆����3f3���������������! XMP DataXMP<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?> <x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.0-c060 61.134777, 2010/02/12-17:32:00 "> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#" xmp:CreatorTool="Adobe Photoshop CS5 Windows" xmpMM:InstanceID="xmp.iid:043DFE489A8811E19E908BC45BE41EC5" xmpMM:DocumentID="xmp.did:043DFE499A8811E19E908BC45BE41EC5"> <xmpMM:DerivedFrom stRef:instanceID="xmp.iid:043DFE469A8811E19E908BC45BE41EC5" stRef:documentID="xmp.did:043DFE479A8811E19E908BC45BE41EC5"/> </rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket end="r"?>~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!  ��!��z�,�����/��zx xD pxlj ڳx uxuBq*\ȰÇ 83j̸;>PHILf\ Ew <I͚`8q"Ý7 !CHxJJu;5RD*YN`Rԯa4lWp"@ᒩ1(\˷_͹aoN _b&?f Z{<!݆S^]19?paFj t93ty>hڣeU@!z4yCo5 &<'jMV71_ vk׾ChuDh  [  GLxeo(L_� 'Dt 3F8cGtیW5G2xGlA 6v:4Aa�-P`G^JGBP+xYHRrY'RTof:й%!6hrZy:D:,ʩ�o^ʙAEH:I諯("j++G B @{f2Ej&Bv+;.r.��,pK' 7G,1L dw ,Wl ,0,|2-<31L%DmэL7PG-TWmX -֒`C >Y6�dmh=Hlp= *@M =..'^ `BW)�{f%B>kǭzs} y7 }7瞇/Cn�7A �x9�%X`, `v޺t.;~ b]<#/_G'7/ dhp e_X'o]> A7wAA(L W9q@^yw� X@r/jDp?~-<~ "G^7.T]t$$ I�pX 6`x̣GV f HzdV2 ;4$p3p � ܀2h�>ـ- &*T U \)K, 0A'Xy`6v׻` !A2�d΄Bp� N! %� [d5` rp9_A)(DA ^BF9 aBж�~@HhA ,sI\1IV6Fa`@L= ;�6vk^�ƀ� Y n%`!L]P(=6! j<@i 4)Dd%+P>-f dp`74ڜ&�h�AQ !c%p-  e R+z22JB0@ `m{"vI 20*nTyS۪'`yXeG 6Lm`6�t`) &tfOt d ,7{Z<8h @)XsK#,a 2@6�e.DP^z @%.u>- \^zq�1s<x g ':$`nہ ,*e v7v׽`) 36ÐW*zCz T f7z]І&'=8y&sR9�;d C & jCmB;ָu-9#�t2te]tK6ڊ@C&X5n{&܀Mr\̓mݨCxiOS'[z�;PK�������!� �bkf��kf��%��assets/images/cm-tgp-icon-200x200.pngnu�[��������PNG  ��� IHDR���������X���bKGD������ pHYs�� �� ����tIME  %at�� �IDATxyeWU.TTJB! QQ("\͵S꽿{U|ʵW4JAQx A=!}VN9{5cvcvk}$RUgwk9mA�3'<%"�CgoZx6?�(gyԵךU;;~bwu? .Gh` ,ޓЬ*(PtSټrnf&_0ID:i&{8E{0GaЅQR޳^fw%@ I 5ih�V�КEa&aQ]y7S/ͅ_#;_wA~`@ ?dT;X6slL�}5#s=gM;h`M.v;Z�d:wnlA[gG {NЋPs%Dia|7yoPZ1$#`.~*(#ߵeyfQYs}�S\{ߖʿ?*\YPE$ A<^ fh0xNV֟@W ۄi)Zi6^Uyvn,L%s2jfsEgb* Fuq.d{=C}d7_CߚKgX84Q8;|x)!D  eSRlК;X0F.eW>>zIlO!Jp&*՞Ӝ ШraA_%YOk{ᾰ>'* ]0 !vd-Z ㈢Y&&Zhzt#{:t\P, @HvCyg^{ rb苆8_usPp .:B(v'>�9,(YΎmSKJKfȝ0�,oSI\7ePqÓK)"D갛%fZWb |7 IYPL&qF$&{#PRyQ" !>@KC0GȜr )8 Iih}];9hٳ{.zݨln<m4x\D6|rx٣ y >q-A7"07$䕅g(\'gP.Adrb 'eU *Jzw;UkYza@.uy6} XEs snnz l@yGq*樜dTp\XL8-1HKOgW\ G©#ND" ڤ /)zś4=urE~Sm7hYT?f7?-{5![5Q9!*ޡOCm$Y%u90|U<bN6Xd}oY -?/H�RY:﹕2- y&wj%QPp۹P͏|%i͂A9C.ʔ+Nr9M1r+*9 Bi0>:rH<d** l@ Æ'J*׼SұqP!w=2/\ύ:`HS.~]|Ya+nFfbTsrҞcH%I0"%;^;R0?+7B&]`8)<66i3܆^+ބpQwm0(eq{A r͍)=]\MF@ ) d1'k$jS֢GzX׭"VCEt2p{D>,u_8/ovT ^0$O̢|mvI^c\rR!!'ApFvѝ:j4h|; gGQTH#)S+a~H86J.=J}IUYl'$JtcPBq =ٍS`JT_sZyR Td.\�s8$pL mE߆MCŤp -QH 7a7Ql"ThYPƁ+Ъ�ZHYW3lB^0W"ㄒ$QD|,@neβ`@xW&GkK1(J꒤<vg$6rS8 ~KຑHdRz|na)8n8I4 y%YU:[G]p=u?$-@D'cxn5seĔF f1+%{<3%�Jھ@w 'iM?$@t3SX6-pj)'q )T եԐXFRjυXEp(uh #z*w@$H\\aM9Qz"oR8YiKv%F_ȴΘ�OU%`OnQ@xEFDTesF&B{j'!NR.$rS]yFz2x{sLh|,2Vj0zJ>wPiLŸ]0@~h2N -K~L�5 kXJC>GЇҺIFI7ԇZwyS!Re1FU(*<3$Y*`p\(LA B}#^@&.n ):YI#BK-9deur삢P_7y) mRD6rѶ9v_jV ŤQPmT,Z hc,O+U4lW}sz;N-B-w99d%8_G(ⴏ2Km7R,&>FT]C$4`R-ؖš=p 7@N}"Ri[4MRFA5 i@�J5PӀ.P}3ć{ZU(y7宻q%€WhiX0Y~N֧rFH"! <`.*6nl^qWW%~1Mq?Tb¥%(rX)G�L@JZBNL'0T۠i[fb 6~K:$.%=j08IɏDQF 9!B{J]C)/(MabA [4$(g Xvɏ% I$ 3ih6 $Wԋ(@P<ɝXP(HZD26k'Ab@i!4hj2jmLI Fc6>MC0G]U1(=E_GlS4-pA�R}Wbe\)CdV#MR4NyBD" ֎KoB+vU&eF`ے( pe$>~nb#jZ(25#jT4 j"&,jLȤ `ښ?'=Z/�@Xdf%A�KxMKW!Oƙw,Xkx; YTHxe-۲oeE UPN@~MЈ0L ;lt\qK5gE0-9JO$,DyTG)nS]{t U(&Ki@mjZ4Mvj�&mѴ@(xx&.گ�yA&$^-6`vB~T] h519!FLS R~聯l+yy*u<%A,V eo_/4;VTAv~jwh)QӠQl3R ͤ5LдRƋU  X@ҧ=UH"[ByoGB%P3@Y$?H E6g71:'�!Hxe`}.i c`R$5t)5w2Pc I9LBc qmcщi2='EaW"jaJh"YrSThOt$S&0EfNqZl* A1wF_W$*0y8g0H3Gq5. "YNVZ+0b0fR UMm-ڠNAPMZ)hz1XoY~MD+qu-k_dwl"+p%(q]ECƔ p@8Mh9S(R fѣoѪX1GR,1)!K*fD_.02Q!^t Pĕ8 Ån(�R4td8ҡ,4Z{һF)s+"w$¤K"g[gd<J@l%HU, a3G()"X"n_!ޒ3s#*dN^b+RuTcza0=d1tX462d*Zvh:۝]YMʿZznC45<@MkjP NXCB8T <NAK1bψd I}ĉUrw:bmp/ޡ:'h׉zd*x=N$d ( ?G9DCBtLQ Н=zظU8API$7@4W2'5 ;)>Ua)aiȚa۪'8.  2~2 ER0@gt'l*a NaSYR_)!g>t�,G2,V {Ձ3Fev3B~ +IysU<<8A$B Љ+0JƔA* O7 *q/~N*9ХRVP"œHy*)Q<# Ko  ٰeÔ&$ %?PX@;U1q@l:N#鵤)æ*;J,DYeԀҝq1˳o#Qŏb3A!OLa\"Ar D (ѭ%th& IA}ʆ<^ٚ@~dp:$3GDA8ތE Aafr:"||UD\ڨ7,ȫh.G K _ :NAJ+]@ŗ#a/BȔd 6QeL%k 4bʉ =B&Q湪A�MӚMKA$'i[@N)tdab>_HR)GgdrHT k5콪II48jyg'J;$]O2r�𷐜(6zmQƆ~m=A9UYxB8 \sl~cr=lXC"Hl>{s? L5a;y>qEe yF]7,g #a¢fSL}T?VRP@sNN9-@@aƚ$/Uƕ'=!kKQ߈YdBנ$NW2q<д(ziAAx`lbvΈ72"X.mBt(:V@Ed!-7yCܘRȮSwQ \Qf=**jɌr8 yItqGDyG [d*>QN$&!%"(e@!"KV"lҥmAJhIEwJKT)SDDM#̥AHȹ]"(DB)R)Q2 ¢?<ZDސKr@%#DW+mX3)xonc|ۓPmOk U @lZ( *PcnȎ&mn!T#/ Ua9 p]sOE�ESz ' +k?H\|9XFeHk)NbY\szDĊ|GjCoG5NÈ]?K\b$sЃ�D&ta2"""CvLRKD_A6< 9�K›O<j-`$DzRhҖkB 68=KXP ^ɦ2yќ,^ UKk,}]\V"ҦmPYL�eRdY9u> 1TCEh<Q6)BӘp'Mc68i())P*ǖfLyr8+) 5Qnj%z7Y $^Q^Q5Q9MKJr(FJD+JX< %jLg.RB( jW:,im 4mHLWMjێж`6Tk^%TLdicӀD #0mq( $b)̱֙87""%.EFLΘÀX+#W"ñQW( '-@e%e(F{/}<>Vixp@}a*)(&J:8KМR4ۭxCDHwnFM2G4~%"\Y)MT4G4,r='DL<RGЩ4d+#b~!3G>[{iAԇD�ah@jmz|}cR<!�E/} ?SENL~[f%d(E꥽ōtPe&%mڞi:U|\9,Ƅh,] \L)))ffr$ tmBPqYWóʳyPlODFQa^'9UQ�o#pT�18{ RI rvB*q[ +EJzё=/k1:qҲ(6ʀZ=uZnV# -Z#d":Vo>nA%L hNKWBטD۞1%%HṖ%"<t#+)L;1JT5Alc'ΫmM̓.�XXKwAO ģNJ�a�DO%pǑ-R:CkV]c( Űq;bAs\ɚBrhneR2Sj=j>,2DWZEE E/Db7NF'4iƯ_p!<gW@L O28g^qŎx*6G~ul=:qo?ZRs3/s[s4 lŃyamnoћp<čLXqa/ q2|1a v u/\FnH*Nk[2愘.Új.+p9p޼|SBP1 e@#ީMι\&{fѵb0ק6϶*q_J H 71-7vܟ C+بpSk$ck!몯2\mROϾs;ԃRGg4:\K%~J\3X*9~(# <-o/{,mDxң�yk: ̻HL,ً:! N3~_&zЏ^-qj[MA\Sy6Q%1@m‚*\VBw"|6٤a|c&965FW?[ċC6SϠP*o !D5ŁCf_)>v{sjĤz"Xhި(OshP_܆E<ʃzqa/ WBc}Ig\.u"k/e<rW)|j cdaf)=;�=^\Hx0E`o1frFZk^OiH5~Hj8TLV]Eg233#f_p_qqRJ}ISsyW-|iJ?s3F'DWDUhj/闐z'Wȡ2jB1UWE-֊@PD/UCN_y1ُc�jv(8?5S<�A<m H Cb1[�� �IDATMqDZG;&V4^5?C.hT{w#![晵C`&%Bg\XN9qՒ,)(|R#9\QG\C"aӲ>s-3+><ŧZ>h;<np. C >y¿Ix&%HNFDS1Ul KAO$υWm!b]  0T0H#X=0.ӏ>3IyЩe2qM]MjçsK3ǾZk~v >ygtζw~ _q^N��_~n/?.Z>;'n14$"(?!Lq!漙\^?PIjK/9~7o�OP#t D/=pLCE:rٳ!YT<C\Ʊ\ζ2~t{/ |y=焑bu=Az,*-8<ϽNxxpf3ӧ<g\ ,(xܺ" ӊMKn_1Cx7kwdpW,aM -~A %p  x Ⱦuw<+wA7N:ĢѴzD\MǾ\47<D]bn/�% ܻ:7_:ǗQJqϻWrlTk*XIniqH` kGq)Uz=nkcu:y3eY㐍T##aTsb( I"<U >_ >p挣Uo<&VIthd yLAz@g\s=_ JVhYJw1x^7WMk[y_Ej)p/N.Ӂ QQ:Y X=: ֦wMq}4[1J{m\05x6Ӥ Gs|ҫ㙆='w!}j/ö~lJK}/m%[b�pND9:23}=2\u )VN8�}l8tHK"E(xp^QkLm"aoR4JDw!អ<B՛[†9 {{ % º >Fyꃓ-ۦ 0d7cU,%z2ٖRB!x=s])iQ>@<$=�`+ɬk})ͻǕiѿD& l9 &1݈Z׽#|vK֪ถUBZ?XQ5lFk;*V;G$SǜŃؾ"wȲyᅨV tJ63HO%Q¥-Qx sCewd@ ȿdzX,ILx6xN N;H*4a<9(}cZKߪkԖ#ٿae+b}Y㈧X htn_唽(Iȭy=,c!%8ל.s"D0Sy )T iēH^Bp`Xk^w` ? fIJt_zoY9R%D(R(Psm۪߼jo}?w5XɸKJNd/‡nX2+V]rOAD.oFA6tٴq~M\_.ָ cjQmS'q"\zX?:nokMwx&[{r|qw+)bSR}Iira%ai^W:3qD!= ޳EUʕ(f,7!p}>ɬs_bۮ_b8e);MM3˸[VQ!(WcĄ3v•"S!a1zvT#I)+yݿZűY7&1 ss;d 1G$7LH'`7wS X" i `~0^VGn>؏1~)! @(}7Yyzo>?NPxDd&xgWdV\F[LS8 J52EU6q\n3{YEfG^%Kz24w= 7߷o|_zö ҄i`}Nm|aOs`''8ᵵ}Җ]Y:f5q47 ϟ;rbU]׵uPxp`ƣ.pp c N5%G2G@2 !J˱W%n\ng\BP<.gc5p~(0V7?֜w on{mt )pxY4 Њx}:FJaoY@qS0Cő8F I8 UW{ݜvgE"t؏ϣ߄ifD5-yw>tu1i$GN$K8}+ מV]wFQ)?K6m\y!Ir9Aם~9ǞUk{LF9!A7|py;:3ֆi^XMtOFm#5&76c-0D&!Ty<rKiumJU72.@~ -{c{ڭ%{'T�}8`HDZ P.ei@]`H{8~J7~q?k^AiZɀtB(Z"~=[u߁m~kV�/snѸ1emLv&_N"Jxŷ+HuKfM9bk%&GJ؋<n UwOyd+6faLQah|q^ k{xh,' |[=SW=xh^,q]-= B\|G}VF�wfn.޽ASp`p:yU( y'êWxgO㢳5~s5О9<gPz`4~)>r闐O~ȓLT\: I82(R?NGص0ibk'0~}S|P/}1w; YU9D`;5@: 3ilK^A`2' {c01m#<h<zIBC ps?x ֗&V͝'.8wGW}D$ ]$ ȑUUU b13@x;\xƯ?ˍ8.鲯p K/%O^C@8<'rb{ރEڹhNȗEzT=`ܳgN/>Sa[gۚipgE5㟯;<i M`W6(qk9l4 Ra̹"2Aj=y9ă[:iͽ-J9Oa5"͖T%2h{/%o -H&4?yA\̌d RV9ۊ=~֔UUS1bzfXcCBiF<A\$X2l87 X~:l.YD Hv$êKV9}6>c|@?.O;r6s[Qz8\"c!T/K%# UIAcCg)}}KwJ$wiϙt9iVh,fp'i7\|e߰V5~꫏a9sب !B$]C hܮ= WqʉO)֣0iĽ^} )0&!r<EPFa0xvaӏa[ ' 'r\Gv:b<PT9]Y=[MF|u\g,¥Dݽ LJ@aپMab𼵇GΦ}Ѽubd>ݛ<S TG ]SF f9W&?S.RpO_iW~0޳x 7M^Y8vH%{gsCM} N`#ܮqųD0*Gr%T-Y0㍧ědR4`{[dd, 8 x7wh�mx<:d| aNHkBdr/ܭO;5sswxW4N9w+ezL:RMEwVѝ;Bj"( wiY \~@Qk�.;X<`ǔocJmi9qLv29P t箝R9[5rÑp%A ;$ޙոB2ZlfP<;M̯uPsPHKymG*. <ܒwsw3?#C״ IYQg^FL;JiݧZkۮS&gP"5Aev’¸ejL^⨍l4j~fkcqQl XGhС! Efb@$nl&h.pegP+f}RUi w؄a tFIrxԬ+\W~ iYk΋j曎fE1 [@vH?DƔم7N@oXgkгq ;&1z$g"zv]6w&q?qwT1 fEa@ r$@4FρO(ؿ4vjHr;kN ɑR_b1 f$نJ6sbi4-T;5ǰ.wh2ΦrbhLe\c}J^%o:vYuY0b<+b(rVlw*E( %oX9w%?ăEpjӎb$yNOo;"wڭenQlI 亰CVWO,URPMX`"Rj@ߏDIJ*f?d:6.MbNqǑInZgYFs# D^ Cq-v(#Tdl,]x7^aJ:/ܨ,�xpRVHat]t\рѰ 6;qǠ׏'u`؀sz. ]b_Tbȓ2-sM o|ቤꐚ(.G5)7^+-p/{ fC;녻|y'cFCi]ezㅖqMVO Lʆ\  BJA55E@Q+E ICrƶ<ExZ̻ e*}=7|,XZs�`@5f]4B,VcS{^ oҧJ9+=&DRs 9Y%H75h|D[sg7  `O�68 w7n [?S< ?$kP5/E=N& _uGcx:Y+/~@<B:n#ERP=D UjԶR Xl}O) )(tq-3x@NhxZd]~PgR3H*`hFYa\YXX2%O'5hG6dw?za( ss>RF"OT@%AZRm#̫ı!!GE?DXcYƦR @$MjcRDc#i~m�?g/<QD[X|X")US4~ ǧT_ ?v厓:_-hLhy& OrF7R!U2CT'mpѐ-  ֏CA^a8x,sH/la1K|Gd3J ;W?o' /<\,>,5"QȪD\:!B92e0d>u &cdT@ N)1>jmT_^\JkѢCT7/ֱ8cXzc ϠV]e^�"&=3"ix|,wo}k>ʼn#hs!@eì }3-ȒOs af~1k<O,]C@1@̹ꉊb{WiOb*GV["(Gt=[b6mD 1Q4�Mk# 4L{ޭm&_y:nKu*v͕_;_')njō«T;^]r#1)T!VoA<;PMq(x4 ٘xde@%dmuLɗD)X6-i05X S7i# a\aqYLBSm ߫(O,y#NݡE w9k7I"0T7˶36pyZ<ڹ;AR&g ,~ R}ULy D7qSwq]X41I[d}wUrPhI2Uq0A}c9?}~ϿoWfŸGxoI(q'y-kv#s'^cF%%pgZDs\"=~> 2 bm!VnAooհ^6tb"YqT=J"1E6p>\+  .ܭ_u<ڐgjG\[PD�,R(Ba(Sr@#e޶$8W֋fo*{}|X#qh:ɔLH) 6غK jmUQϽ}eAR$Ku*ϲ[װ<IOsuvb[xS`6MmyhIBȭ<m, j1Eu ElH D'%e:b !^tkʃD'sHX9+eۄP\ 6{q)S'90"3S9̠EnْA=Iu} B~y:!`$F8WtrpԷY8ؑ5aTPa3R=& sigsH/EH0YnIؚg'eH70:5X;Smɤ g Ԙh @''`)I Hw {V8%(1\Dsz�Uskk m$bƔuֿG'_ $ =(LaU8)넖gX|QNlX�M?nwAl$ a}(kȟq% c <tF$�*;x>b&R!kgZBA a^GQ1i,[YӶD->p,TD% T<Eu-S P<2M9Фz^ Z|fcWaR1A`J',Vop 1-MT r@>Jk7̉Cp6+ csNRT4Qs&Xl=$t<\ȑqY*z.(uR= 03^x)01E؁[ �� �IDAT)@@R,Zj$أzڇM#6}D("GHe_=Gn;Y  qV%r֢̽�/j`,QŗװNӨH$d$qteFj1f6ȍ-hZk*r'ai-Fש^Wj3iUCҀ)ZA{mN}:{CC蚆dtHiHia ;,}bӟ o ?{<s=sD9~3ucno1nZhWwh-XBDTe40oy}*1I>S1O<^DzF`jP3<9ٴ4hxKT(3$L QQҾQ'6P&_Ё)@5-f N &F܏qf3T;jk >$ht%j6\awSrQi@0۩NJ#3zKĻ\CGy[(\򙜤:li; :Zl8be^ @ O:%�ꤩ h9AVo|\lR8dnY Y^J2 n}X X#Df}tzy9%0 46L~{P{Jא'( Sk$'ePgtXpzJS{E8Tr[9)՘2Z^V7W,x rË O "ڳIM)mhgRB ,m1rL@Xp#Y\(�BvȄ^:BPe7©ê.<N xxܞgE'%6(r mocdi<>Z$!ə\]8`9Em&?EFAۺV3ŎBdۀF\Łj ŸѱG5Q[@{0qo#fe?UJ7h(޼ܢ@^8ը#NHB풓�DGj$, sNZ,,8ON1t-*V ! A)IrWncbyp3+#JKX&yy\prHl}yzэw%HH J)(P!~`U:P$E52,]݁ @G hci ʵ8Ixګ(KMB63e5,W*cYh5Ԓkkwލt9w <&VEVK}S}'ݘAQrZqߠ1<(iؒ�#ֈZAoQvknY>َua ՛h9'W=pX[Kf/wݶ}52�‘ t·\xO<0ie=CVuo2IQ ѰݑT9*)\R9F$i ͠1ǂ5AN/hℒ/%pH.AbFaڋT3tT.v]{uX~{2Ð;O4^ɑ˺dBe%LQg{cQ6Rmj0.> d-QОRR"<aX_jbZPB0\)<@- 5QEYQ5a}cV 7n:࢝Rp #H<ɚrĐG,ː-)f tq쬾^htX�3yENLLaޔM(@FҦRIcƚ6nZe1QyoܠXTAKP24<G %b٧vh)e"\>!Y5R'ǩT4;Mk3Ŷ[`> e^Tkg2A"�PT~pE< 5Lu߁.uN_gۺ"="~TR5z~4\  =޺]31m_wEػB! s%T&4)r�[sסă6ӌ6z^'}4tboku zpӑ {W(衠4.))Gɛlt__cKط=~XG(" Ektݼ9$ RDЪX(?>}ӄ|,Kucrקxgw.5q蕯A:)ᥒrfE5B>rNqf/‘Ǖ=PG7um6Y<Z]RZAëR<TXk߻/9ݶn\w5d{W bixlsE;GmA7uohT] p:#2ٷ[4%Խq'áə~|k$c[s!j"QUK~=4k\ 76qs=BXs-PiLi7R~M <ృֱ2?xNLL/McEQ‘ϯ݁3]:_| FMC,,ÚCe;ۓ2+^7p1fD/ُ^ނwœ:耹Fg3oOmv:EӴ^sAb/~gMش�vߏ1=,]8V۫9DZ抴'k3ljRؓ?~.L3߃V}b LR j3qN),y+o^?߶zrƱsz3?QՖMHF i͚R$VVt[T>)_8} n<zfgo%s^1za:X)p3L&+v jȟǷ'S6{VWS� Y8mR}'#'FkpMgcmXEނvKdFf%'+޵LMJ1|3h 4ʦ�ssD٠o7]oqg9DC%:NA'%ӏmTaK-y yI n!s`$;a]u1n8r Cxu|w ge)"=IT74/=J;EG;HUIBR q,:`1pl1_u>>vt76N{gxШ�Nc*h!�dWd.qhP@1daOy9ᅗn{s:neE SrF ^1քۅ?|7=9~("Q2LNVdQ"hBiآpuGS>rP yß2 \`t!4 XKM*'T.f1o2tޓ6x93|磎c⼖RGq$M$Fp&N\IYձdSafP�K7i§فW~"h:Ξ=Pyq7(\*rxHB[}׷ _ַڬ(3_Ƿ\"bUHB(q2[d'gAA8.,GoF\tY\$9f `t9bt\еӳQ3h/q;_x5<( B'$o lۗ(& }t)E^HKraq%I$OO w_ >whqicSBoDRT_U:'0]E 22=_u>>~t76ɣSųmX$/gFnPjɆqQ76)8jF!^*S%ڳX8yxB7jB{Ĝo |坏93<; dbaPŤ"ut("1IY$Ce۾ʊED!{OB==)#x{-DQ<QRTlu o?{xvَT;t^1XDj'ƣHyV'^N%9G,BDAsvپpgY]}.sKQ7k/ ~0Q"7o(w} sV<nGgMq¶f!Ԡm'h&uV6b-+JG="냲b1m5SV,/~IAޘⵟ<9)#oߏFkB&:kH+@ڜ~lY OxoO͹&^skxq<v1oC*99:"3&2&SgΡ1b%YaZeŭzD =>86o8.};Κ.e+3BRjƜ@atG&m؊xc/8p mɧ ?G:ƭ8 qFϱ[ș] EH)KB:�𒫾7YÙ2lI c47;vv475VƎ6u\m\�ϙ;{;x975?FY-'= A":3/0nZ4)Դ!pu=+R1u D@}/pZ4�Pb{;!†n&x97㒕xbAvs4)G#d �tn@՘mBS@٢!(m9K=r;i J/lt3:^x-du z$`Y8В7^H3 h|4mEBM:#q!X;_HƓKy۞U 9^[1&xqdZ_KaIJ 0s,N�Z7S3X ~;9"U6Hz0J[#D{f;z;YwOmP,)B)>TT-ʚa<Zkp7pk m*[ClDo?HέLOV&3q1|9 qד>c?}6NMs`�h9ܡ m;MW("(?,=}~L i2FY3/:߹ Neێވ5 Rّ(mrfI3FbCPE;-gdG) <1Kŗ;7}�? wGo;<Fi(2mBRa>$g4F] DF f\7w/:4hCh'PXzc$D17Wmm>\}X(˷{0ˉ9 QAGUdi8d ܵ\?dP@MZ4)ꀙ dLXUcW\|8:onfV�qΕFoz/7(K Ȕ2?6iO'cA{{+`CGމ0}<vQܛ]-{DXDTղYM4$+nI hг9hځ[LbI/jrϯ)W˵]xg3⌑<܌Gλ+1t4bGu6RҚIJ9B/4̻xn- �=/ E1%9 LY?y {q48r1 aGak;#<2U}uYs9Hº$rY8{{`NG^.ӯ4ցH~J1=hoɞD2}Y'pu}ݸ1Sw2ְ2Ów݇UH1Z8m2Z4z ĕM!B/&'HWWrJ3Zb bhor8 (6l0G7*Y+ Ƴq3cӪ1!JML{Fz 1slء:lLNPrpp y~ZYv T z)aQ -CU"5 @iP !$k9uQdIYosPiy[|#ػm?AxdSH#qvN:LHIŁh;-1&̧0BEQۣRU?lk:LWlmlȆ]sU̪X͝l})=ǒTW Ptrm ,rh MY9FAY7�p)r~\t'?_pYe?^D7FHHhPG8CC�]c'QyIA�*\14+&[Hg߶7Qrh{ EcUćڅƮvv|#.l M'٥x4""M Bs@H #$<ڸKP{'Ζ_,XHֳ4+dvM qq'o8*vx#kSx)*Z{3Y oĕL%f6=8{Z_/$Q/ߛFM-9Tfla悠/ܞpٹ>8<QH3>xew !~LqcވE6a,=0Y&k< ڮ%6*<223tPC7fոA{}g%O@1nQ1z8r!A{ɣCtjNݧc7(sc?+Aldœݓv!nEX$?TLUN* kЁV}m0~J`(+˓ 3GOʦ ǎ[_#br܄}c(UAg?N6sh4ZQcx#}G,œy�]C5Ud UoH*(!) 0EGa .2ptFVqrFe̙)) 9>Qwcz.ptoEeUuxGᯛz[AiMuK&b PC.m[%38M\_p̨߮V7.ʐcC6F8U"^1왓XPR>x3q܍w~{04/;>&u?.{ZMɅcitO{U8`FBhs$.p5wXШ1.ݽ wlms㖽KɁ.}a|ޣ皖0'8o"HwW}(`?WCOit7/FIxTDdC!eB<JX0t6d$`]*n U@pEr<774gS7ýd2ߋsfDΔ#-FWFi>0s wDS&WKרP#et^SC[G{ 2HɆ￰0v.w"OHIyn8Zo%0.޹]p#Pa$ ',~յÄEcXZY !eBx+J^gp�j`s=-%2uv HK~+eI"�L+m3sc۲{u|G܋.Odϔ A ]]ME tMXDAD Xs\WaE"Xnmw̗o鶻\.ۍvd*t ;8DLN5$D'_XFmJ;s+|J̲I`K3-mk"QfSڙ۷M"%ܾ|_>O7G[OzmqYބT@'Ln]#m?Vl@=ٲ}_ 3P͑2+F03[+y80<l^zs\%Ӵ}_Oߞ>}��IDAT'og^Qy>0GF%#7ɦE sy)`$k)_RgB(H1G`={F`> ,k0V p3Tg@pyMo qꘜaЗߴ<n6>8naa; +o5;ɱa߉{d-VC# غd ؒ'cNݞ'!< uVCi(0"Z  cORUE^ 0L~Pt,ȢyE3וaj0#ɯAO&_ʩ<Ettpkn5 3S9^h%}+2T7]R.~nJd@ 1"Ƹ +EO9j)=zS]:b9X9e 'pz]EsF{"�p}7o  O&Ug&1q㿒g4W՛5 ~'ԟLrlqA}�#040sj9iybtnj#WoDU]Z1O�,Q aX:zQkӗlx%ѸFA܈yxn\_[nڽe|*ݦP#=~H`gt.G,: 23u K,%_zr&)3: B9ZͺQV9V9y`V:)-yB7 eA;T]^NO8H9iM}ҝ h$o H Mh|KtZe�})*@Pˑ~yB}=X&#= BhӁ ?a1Z/{<%1JgɮZ]Nĩ-929j߃f,B ܶW6s$4WT<\ϜԙxhBOLgڪ9j ET� qW"1g.җ9P`IuuutצN=3&x>4`è=+$ j6,ɤuz*svDQ8R{[fR2{ɣBvX z<qE+5m;QmWx(mWQ2ssbz[O P6$s@8gHMn:ҷMA9w:7}@*Jگonw㞘q7W]x�AԞuC Y0Wv=^;S1j?ircoKA=*/Cʨt+B#> jxfY):Tn_ oO=�ck?iQ%y<ҵBo[>8x@H6{ǸIM}i,1_Vcqpv_T#)GwP2-˄L9CDvPv;fq&d5LiD-����IENDB`PK�������!�g0����#��assets/images/cm-tgp-icon-64x64.pngnu�[��������PNG  ��� IHDR���@���@���iq���sRGB���� pHYs�� �� ���YiTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> L'Y�� IDATx{^Uu&IH^<DK>|WV2t:X@tDX_-ENB*i@@$}97D{ُ^k>_: :kGteLx<䘕G!N6; R{b<pmܴCB=Ko7Tl:1c9>JyFcKL:r$~w98E_Tե�Hyzm"JyG a5@7Ev0IVR7cLt -댺9rLcfb|p)ϮJFd(U)M$|[—KԉUaʍFj[\�,ISmD-i$x,VFLD�BsYއ2JÎ�~q[ikU*Ŧ^KQ5H` ^@DJgZs:؟!(z+wH"+c+ɽ:LĪVWv%?Q08"!EYqz#S:w)<<Z8%ɀgc!j:#(^4./▂� ͑SޖT_FniA RIFd>ND$&+ah6wQi1aF\,ɐZ"&49H& s [e+LR NZ 1 *$f+ :L 791>A(E <-^F1P9[Sy`:4FOIE*Cd'3rsTT֘:ӸdG%5W5(rd8`FQӅvxHl CĬ5s&ٕB+fn\b7ZO膞"vZ`ڄu0J"TT,eA.'QxS)^FK(\PF\8 l#UHY$ů`7iᙊf%qRCUM۔qLNEpMoTv}WQ#D5yJGs>PhY6:?#Zfev8\3P$QSԔA( Z5f&V.MXU\^X -gʥ"x#&PRԎ<zO3 Z%UFEXԴL"iz!0 J'W7Dr5wpv;%T`Ih)9[ٕĒwۍ4ax-|"3yx*I,-Q!J&CלwcOD> "1Eree3%0uLa]*XZ[vA$T? [|@y5 ^%�S K_OЬ/V9̹MIp8X};{S+<R�J Jx܍r3>Raq)#2@("J?pSd^.Ppcb0N|˽TĚq,b%$3# Γoz(.<ysM"l*C l�c8@~".-lY5MN *u z g%)M''X[؍qt΃8e]ĉ;q L3]DDe+5J;Sd |vݏtc*?%#xEv`KY⏌eh9M-SxGaXk[3 ȭݸigeD9KGDZarq#xF s@y+mU~F]zk{/MNL _G%�Q5vƮ<%§$aԂ[W,$WV|4B)dS4Z|!fQCލy["<K-/8/-/[n=jR�l|T~'ʿ綉Ds6�8Q'n{Kx5<7ÓF £4 O2�U P`ZCTi'f;qN)beg KO12hσxxIEi<a޽ O@kw5q^|x)F:*}nFOzf;HbgT8=v>&<((%KO&Z+`y (-SxӰWy݀aˎϞN, Dé[;b\,ȡ<�%% `dgLI2jJy∄owsxU~-J@Q<vI< W< #rG^)/#Zwzp'l1F,#" 2Y 8((\AR/`ş|^݉J"Y`bPK㸎Nh)1$[gs>x7>}G?=ԉ#TcNv^g<4=s }b3ʸ9J2Vb`jN kp['n/dη-ziڈލ[vuc8{CVqg 4ȄGܫQ^ʫNNcxɸ^+H~|TR3-Ht&W[N U9މO&<1(Q~#^w3}$MV_E k~c'c* CwHxVeVn|A[`cP%-(*2P+Tfz*iG9Gn]gOnKZG_sr2{맊yq}x=b-My+6`= \h) nZ"ýK;^*k"!)/y z8;' (9<_TWݡ_g'g |8*XK|M|^T5~�^0}M/$Ӷ T*/bi}Ipͽ"ad3ޥANR~5o$nd&Cy{WG*o]d0jB'Tdw y=_kEkY~\?+pc#+/SX؇.]vx_? fy^>w]2o&*F~u/^̥|=ڍ/ mJ*!p6m.uv:*<s#z_6)ӑ۵u5Q9*u{/1Ix095FWqRܹ(O*꒞'/?mbQUx7G==%H涌d Fq׏1]x<: Ii5xX8-5o<w>qRbr?6!wz^uQ {G,Si-Սř1=`N=dfϦx*C'~5.7aaT^/^Eؿ邅;P**h5~x'Fo&gV(l]t; r {{tw`Wf^-!J̝y֗1979b 뷳S/_yRJx~Mr2pa,8H|nO/UZ|峸wږ&A$s@+ Wd-ٛ4Ic_}ـx9zNP17s.[f7ٍ3y9եKyG!k}ȫ>)), "MA#yR5Di t+/<gy:tȒtG%5c63QGp".L*=X;18H>Ax kŷ^cW֏^/i<')Ty{IXBD%ۿv,F\odwž&t D46 7^ ]5s0Jwx#|) f}fx7^D~y25ʮbWJ+IVT] ؛^�d݅o ׏?3g y"ⴴ,M6�}8.(`zyJ`c\(SVo Cb鲖H]/!(^(tL٥V~*�75:sRy|BY' ]j%Yudjy?^fnl\ h{X+lb B 1D. aG@#7-6P)\ 8),� c|C+FjdNCH畎?%5,d_ȼuz; ?u)\掙-DT=ӘzwjOʪej AWaQ ^XB moR%xX &5([)zCX%}\Ect&X#~II dP^WQgZz^ uW"͚QS�>^ESazWfwӶV-MaE5V�#0{"['"#?dc*0^=sJHVt+V ƾ&c7jO-p2l LuVK,KZkeFuRHo D3d96^<<D?|R a}ul3䐅.oڸxHd{M}\"+`+-J=[$Px& q@�(o#ñH$?W,v|սB+oY TtO]Ә73G7̰W1geѶD4+#/wytw_r H>tu?:4<}?w+RL❜auo8,KM%`TC)8 KEQW4@ hGU2RuyayƞʊV,@w'qqs`.c&??<r7}g:n~tr7 zgS6Σ[W+2CkKvh6#׉2,]7rcPs?dۺ7g#%r` �6-ębykboսSq}kc|7^vOE^#}Sq(9թfҗ/5uZY Rp�ǘ,Ğ_~b".&2\ҏ6Lo1/l׼iQ0<K@mD9Y"/"7ſ>~\|l؂O +܆#ޅOXuEU)6P+ݺR -#Jϲ=*>xL/N\3LE>kߏS39BZJeiݘwҰʒ_8&>g{17'-C(E�/peR?f1��EvU~eH/Gr^柇p^Fb) ʻA%3BU`Eb;qNHD!b^ㅕ\'}.9@gW^�VS4biz|f*>k[8M?b(%T?-NZ(֐H}M2EH~ω05l'Gwn:n|丸8O_Y{q\޶ݱ(33ڙdo1ŹK*tV A?u^kE Bָ~ֺ!j4ʧѳ?ē$D0eHF If'AlGysa ڹbnK!DQ$%Ewb_hMV#B]eH1Rn ,__??R?G K3¾3t4g-Ǭ1}Pn [7z RWA}3p)1^8<0Dwh1'Mci~Ce[uL|[e2zJC+ĩk_5=o@.c+yyɟzH]d*I온j(8( "$;gio0 C(mHG<ANXZR9Iq4>:~sLeL'aV?]ZY+w`?wt;|U_ĹQ>SWγe t_ؽ=Mld5;g^7ѓØ-YJA⸥M×(61U0|>t<+Q-�r~Rlp@.)?n8;;c-u;GIJ+LBI6 e[sW!`cbPX+r0OS S()DOLd)pζAk<9u9y+RA1N $C\wSq< o!9sb}cqtB̖sX;Jm:sPbg P6){^'[Fſ;d`CZ K̺17?7?=>8<p{ůp59/>85N�+T&PF2P,ex *%-$F[-M%mh<@@DT<!Aǜ ,9G NE_osf9~ǓqG>^| :mH|-<-O pג>F E (D0@))p1r<$a<R-lX^yg, ٌ x]n"Fdzo0\0l #+*z:oJ/HQIzd!UշT;e2҆q9gYfy)$~N2:4%OrWKKyyԞ=Lc0h-2F^)ʽR$hW;VhOC* 4;7 m*LyIiDH.aE#%24}+ZZ{ű:2ؗE7t("*$\}fXGF�(f-E¯؟jgJ!n9E⟄,E6)oMKV6Ċ?. #Z#xWXeUR$J+{COJEaiV6j2)@:LXiYa9"}����IENDB`PK�������!�n��n��"��assets/images/cm-tg-icon-64x64.pngnu�[��������PNG  ��� IHDR���@���@���iq���sRGB���� pHYs�� �� ���YiTXtXML:com.adobe.xmp�����<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMP Core 5.4.0"> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> <rdf:Description rdf:about="" xmlns:tiff="http://ns.adobe.com/tiff/1.0/"> <tiff:Orientation>1</tiff:Orientation> </rdf:Description> </rdf:RDF> </x:xmpmeta> L'Y��IDATxٯULwx=N:q!nڂPi+hR/R6?P!DyMi%)M MHMI8{|~ksuFHoops]wqTۛ&RoB<ghJt4nf9Pw󺖡0Z651ށ;%a4M Ftx6oá,OFq,Z⩮ ƿ2n-) TQ" 8 a`Pmic'sʟ`4n8A]Tx"sU:hU;Aj74ΎwE3Ʋ6ʰsh^Ypz1+Z8 ~%4e(s[h8Ԛ*{(?hǩ^V)RKs~e b:R>=Sz{ZWS'3bRp8יL<&3,FKFѝag3 =&0>w--zi;qխzmyr߰D7fA3 bUlfkT'`DkЏ[מO=_I+ޱ<߼lmp+/T72 v BΚ 2R{1LxF?{ic1yڑZh5RkmDG[IR-n-XW QR6T>?x8=qnFnܹq|yK >[+iZniְ x(&C;W-K'gWsQmnDTuK02C*l#CTf4*1UiF[Q2-N�_h'j5dz r4ݘujy{]`9J!sdgD<&b秾ȝHʵKq!(4vZ4e݈NOFSuexGW}PY3UA<fV_@-)FiF(o xP\,G> :]9TL?Y,d̬ah5^ *p"`u㬠F.Wo̘f�Q3j?G[fZe/kf2iO(5_'(拓H*jl@ l&ܑ|tu6 UuUsz%Fkgx*j WN"Dd&RJC"8 Bځ+{b՛VL-4LcB@?jLn b!l)_Quݑ:S-.FZZDdLҘsӖaܤWg7;Phiζ5!kVNK8QJ,I_QXRx@=ʸK;M8M0 @a4ٞeyM  O*b% g �sE^OH*M!pd^V E%Ɣq beYWPJxGL xW"Cjt9K)5[;ˀ 5`Ejp3Vg4^^j]Պ`㦦c.p$/:`�3\MQ.^ER4'8~k=9`"Rd>ԩbgq&=I{GOV1WgS)e`V,uI]% $ռ`[:oL9C-# ']4\v 1#I�K6!-Z0i0dVUAY%? 7<fݨԃqu*36zFthNmn@ /4RR?HU<4vƫg'!vNWn&"ے:`[*n>N*Z'dF,O.@2,V;WXoDaR;- ͪs~+-yRZ))d]ISR@%JV\M+ [uӀ3ɴ)to53“p᠒iHt mH^O�Ml.)W )Y~urVl.](XOmB\~dU'E_ Θfcs2,4_' !g6>yT,J,A3MMhIkog].5=1P{LafYLMAbxV4 *=̠BA9N-4އ,Ju2P,XA^Wh3 �=tNnJBVeN !j A!7'艓@^{A(%Ln.leF6Xi¼|ù`DA"5 (i0݁ꨘ91kGр JXQ8J'n-v!bn\WgyziXw5CS -�8ʳTafAFPBUÊj�(xnxcb@L*!gĥIUSA0>*@… qQMf-VT ZG6 rF@ � :4Rep!d %+ NU,4#BTDZ-) et< )0N|`Ƽ#bH8,ҕL?P5u`:)`J/.y_ %Gd.Dy/4!Ԋaw' xQj|~6h/to~+2ɍ>دGaS-ȧ2OX)2hIʳԎ?V;K2FBgqq|]l~}'yNB6?_P2$㟐<7X^4:VA d-`օ;j<Hj 3(ݜ{m͡n>֊S;\=dxYQ\ūoOг�^ "o.1QPIdp=~ډ^9^Ol#4ͳأ)njibB?A|gI, ?2T9 `[?>֎ӎT?0ǭq[=^:dppJq;|.rgOҍ+ҒfOK1֗Y0V;{q\ق̼4ޒn.1~\6.Dl]-<I#Κ8xSDvk"^k߽}wcƑ;fq$~$~y/d{"[`g_PeEIë6lj92#[WuT5sI`T([)ʯ޲fGR~_T߶7Wac${5ߑ!rp<|RVk#0$h-JN8'CzJV~~{5ח "Ԅ.KCTH�g�+v6 M 1r.UwMʎtߒ_v;NQG~tV1;Ҕ Gϴ]b!juneq ?j'Ǻb<j?юWZ[XrZVr?W$4u<RʗJnWw+a` vPgZ':x7wVJh,ƯȨcjhU&̔Wz6]}Fy#= J 7qPpPiγ7?<okn<,)f_>ҍk-xvM}-'B-EOxUK3#/YМ'x4J+|腎 [Lt<z VdR$ y"NV m]H^w={8>qu'ʄ_m#ڱ[MJ@~R_=6&\E`,МV(ʮ [|Z%o%mZXlт9YR!GRfI=<wWomqp,#Ҟ(XϿ9w7#ϜU6N`1pJ80cR>EC.@V3;]k: [U8S N$c3/]cRQJ{"q<[_˖W&r$ ua0I24ܑ_UJA^ZO޵6pJ\Z\'l=ӂHkd>ÂtD~ %iO?ţd6eknd]Ƃ}%}/}vk{Z. ]ø qxH䐾Mm�ZrNmʒcGk6+T㹿zm yy�Kp1+`Ɉҙf7ۙUjkNg* f)7r!ΟO=}rxm.g?T ISe< V83w2@ڱ`Z<X 㳿|:>~g52pvAi\"?LZ#`ͱ28BG+u.3-iDeW|R_Ɩ>YM\،LHO, C9aww>z2:NsuˮQ|2?b[bU8 17kǩ[_TMbSN`1ty}d<U8}n9TêmraAsNELpB kw8Zpn_tZ(=Tw_JWhǚ2K:;\ߕN@0#6mx(=px|mqy,|,!j 9櫧x(>cqp 1;_V6T&%(:Z*{Ƨ VŖ2q;O{{d:4S}( cC9~>޽oEZ|EQD+ Qh%]pZݢ6qwiW㌜b#<"N쫞?M ' _ e▵q;NkMcLhW_~5/Čo9;\,-f) R RtVڊ^3Q#Y9i/W _2% z<buq-/ukN{+:Ksq5&^C? > vG}66s~m.מ1zq>pey.r f)줹'/㈾_@r{O_>,[=/+'oppZqSQqmµoȼp\PErn @ExsZ-q!FRTʹ&�<L(6~58<+r1^}gjY.*jK$MQcKsΕ+*]3M4"Zt]$E!XXaU<Y;EQ@v&UK< IiL.: .i��9rzBN'~Nv%=jJOl;Ǭr֣�v π԰aUG`V+e(W"1Na. fi-bZzb3m"8~#FU4CUQVVM.F y+Ö1cA؎==,#2śd?*SB/=g{0;l{V@+92׋__Qk4 s%7 +=^%JVQ!'A!tU ե<dDSgI㭦t XFc=˙ \ DVq6AAp :0bTʃ՟yvK(+Lm6l qwO*s6zbTqq^RxP|mEj# Ik{VtQpNE_+*B>EƳ8ԵĈ'̥1$^*f`> ߤQx)]P$ 'iP"Ä/]*BdX !HTlMƪѦ$. r< <M 5ӹ Ng9@CO򓯯EIie,&L}S:>mO<h<^*{G:5i<KIA.S8yTI�3͐}_Z$(JI-%slNh$005eM |@ȔX .xTęS2<ޅ!RO֢ v ⃒i;g]V}b1Jpp3p^{#\䤉k(� F CNKaL*=4r$$FiAQB̢|3*xZX Ig4 ( 6 <4og^n'5%mdaP7"<%3fF(tqI`rB&WȈvٱĩ9%a42›U@����IENDB`PK�������!�F2 �� ����dist/blocks.editor.build.cssnu�[��������@-webkit-keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}@keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}.chatty-mango-help-icon{margin-left:5px}.chatt-mango-inspector-control .blocks-plain-text{margin-bottom:10px}.chatt-mango-inspector-control .editor-plain-text{border:1px solid #666;background:#EEE;padding:1px;margin-bottom:10px}.chatt-mango-inspector-control .Select-control{margin-bottom:10px}.chatty-mango-editor{clear:both}.chatty-mango-editor .cm-gutenberg.dashicons-before::before{line-height:30px;margin-right:5px}.chatty-mango-help-transform{background-color:#edeff0;padding:7px}.chatty-mango-editor{font-size:16px;font-family:arial, helvetica;line-height:1.5em}.chatty-mango-editor h3{font-size:20px;font-family:arial, helvetica} @-webkit-keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}@keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}.chatty-mango-help-icon{margin-left:5px}.chatt-mango-inspector-control .blocks-plain-text{margin-bottom:10px}.chatt-mango-inspector-control .editor-plain-text{border:1px solid #666;background:#EEE;padding:1px;margin-bottom:10px}.chatt-mango-inspector-control .Select-control{margin-bottom:10px}.chatty-mango-editor{clear:both}.chatty-mango-editor .cm-gutenberg.dashicons-before::before{line-height:30px;margin-right:5px}.chatty-mango-help-transform{background-color:#edeff0;padding:7px}.chatty-mango-editor{font-size:16px;font-family:arial, helvetica;line-height:1.5em}.chatty-mango-editor h3{font-size:20px;font-family:arial, helvetica} @-webkit-keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}@keyframes pulse{0%{background-color:#ffffff}50%{background-color:#cccccc}100%{background-color:#ffffff}}.chatty-mango-help-icon{margin-left:5px}.chatt-mango-inspector-control .blocks-plain-text{margin-bottom:10px}.chatt-mango-inspector-control .editor-plain-text{border:1px solid #666;background:#EEE;padding:1px;margin-bottom:10px}.chatt-mango-inspector-control .Select-control{margin-bottom:10px}.chatty-mango-editor{clear:both}.chatty-mango-editor .cm-gutenberg.dashicons-before::before{line-height:30px;margin-right:5px}.chatty-mango-help-transform{background-color:#edeff0;padding:7px}.chatty-mango-editor{font-size:16px;font-family:arial, helvetica;line-height:1.5em}.chatty-mango-editor h3{font-size:20px;font-family:arial, helvetica} PK�������!���������������dist/blocks.style.build.cssnu�[��������PK�������!�IW�W���dist/blocks.build.jsnu�[��������!function(e){function t(r){if(n[r])return n[r].exports;var o=n[r]={i:r,l:!1,exports:{}};return e[r].call(o.exports,o,o.exports,t),o.l=!0,o.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,r){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:r})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=14)}([function(e,t){function n(){throw new Error("setTimeout has not been defined")}function r(){throw new Error("clearTimeout has not been defined")}function o(e){if(p===setTimeout)return setTimeout(e,0);if((p===n||!p)&&setTimeout)return p=setTimeout,setTimeout(e,0);try{return p(e,0)}catch(t){try{return p.call(null,e,0)}catch(t){return p.call(this,e,0)}}}function i(e){if(c===clearTimeout)return clearTimeout(e);if((c===r||!c)&&clearTimeout)return c=clearTimeout,clearTimeout(e);try{return c(e)}catch(t){try{return c.call(null,e)}catch(t){return c.call(this,e)}}}function a(){m&&d&&(m=!1,d.length?f=d.concat(f):g=-1,f.length&&l())}function l(){if(!m){var e=o(a);m=!0;for(var t=f.length;t;){for(d=f,f=[];++g<t;)d&&d[g].run();g=-1,t=f.length}d=null,m=!1,i(e)}}function s(e,t){this.fun=e,this.array=t}function u(){}var p,c,h=e.exports={};!function(){try{p="function"===typeof setTimeout?setTimeout:n}catch(e){p=n}try{c="function"===typeof clearTimeout?clearTimeout:r}catch(e){c=r}}();var d,f=[],m=!1,g=-1;h.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)t[n-1]=arguments[n];f.push(new s(e,t)),1!==f.length||m||o(l)},s.prototype.run=function(){this.fun.apply(null,this.array)},h.title="browser",h.browser=!0,h.env={},h.argv=[],h.version="",h.versions={},h.on=u,h.addListener=u,h.once=u,h.off=u,h.removeListener=u,h.removeAllListeners=u,h.emit=u,h.prependListener=u,h.prependOnceListener=u,h.listeners=function(e){return[]},h.binding=function(e){throw new Error("process.binding is not supported")},h.cwd=function(){return"/"},h.chdir=function(e){throw new Error("process.chdir is not supported")},h.umask=function(){return 0}},function(e,t,n){"use strict";function r(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{},r=Object.keys(n);"function"===typeof Object.getOwnPropertySymbols&&(r=r.concat(Object.getOwnPropertySymbols(n).filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable}))),r.forEach(function(t){Object(o.a)(e,t,n[t])})}return e}t.a=r;var o=n(29)},function(e,t,n){"use strict";var r=n(18),o=n.n(r),i=n(23),a=n.n(i),l=n(10),s=n.n(l),u=n(9),p=n.n(u),c=n(24),h=(n.n(c),function(e){var t=e.onMouseDown;return p.a.createElement("span",{className:"Select-arrow",onMouseDown:t})});h.propTypes={onMouseDown:s.a.func};var d=function(){return p.a.createElement("span",{className:"Select-clear",dangerouslySetInnerHTML:{__html:"&times;"}})},f=[{base:"A",letters:/[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g},{base:"AA",letters:/[\uA732]/g},{base:"AE",letters:/[\u00C6\u01FC\u01E2]/g},{base:"AO",letters:/[\uA734]/g},{base:"AU",letters:/[\uA736]/g},{base:"AV",letters:/[\uA738\uA73A]/g},{base:"AY",letters:/[\uA73C]/g},{base:"B",letters:/[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g},{base:"C",letters:/[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g},{base:"D",letters:/[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g},{base:"DZ",letters:/[\u01F1\u01C4]/g},{base:"Dz",letters:/[\u01F2\u01C5]/g},{base:"E",letters:/[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g},{base:"F",letters:/[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g},{base:"G",letters:/[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g},{base:"H",letters:/[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g},{base:"I",letters:/[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g},{base:"J",letters:/[\u004A\u24BF\uFF2A\u0134\u0248]/g},{base:"K",letters:/[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g},{base:"L",letters:/[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g},{base:"LJ",letters:/[\u01C7]/g},{base:"Lj",letters:/[\u01C8]/g},{base:"M",letters:/[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g},{base:"N",letters:/[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g},{base:"NJ",letters:/[\u01CA]/g},{base:"Nj",letters:/[\u01CB]/g},{base:"O",letters:/[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g},{base:"OI",letters:/[\u01A2]/g},{base:"OO",letters:/[\uA74E]/g},{base:"OU",letters:/[\u0222]/g},{base:"P",letters:/[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g},{base:"Q",letters:/[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g},{base:"R",letters:/[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g},{base:"S",letters:/[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g},{base:"T",letters:/[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g},{base:"TZ",letters:/[\uA728]/g},{base:"U",letters:/[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g},{base:"V",letters:/[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g},{base:"VY",letters:/[\uA760]/g},{base:"W",letters:/[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g},{base:"X",letters:/[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g},{base:"Y",letters:/[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g},{base:"Z",letters:/[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g},{base:"a",letters:/[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g},{base:"aa",letters:/[\uA733]/g},{base:"ae",letters:/[\u00E6\u01FD\u01E3]/g},{base:"ao",letters:/[\uA735]/g},{base:"au",letters:/[\uA737]/g},{base:"av",letters:/[\uA739\uA73B]/g},{base:"ay",letters:/[\uA73D]/g},{base:"b",letters:/[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g},{base:"c",letters:/[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g},{base:"d",letters:/[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g},{base:"dz",letters:/[\u01F3\u01C6]/g},{base:"e",letters:/[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g},{base:"f",letters:/[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g},{base:"g",letters:/[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g},{base:"h",letters:/[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g},{base:"hv",letters:/[\u0195]/g},{base:"i",letters:/[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g},{base:"j",letters:/[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g},{base:"k",letters:/[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g},{base:"l",letters:/[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g},{base:"lj",letters:/[\u01C9]/g},{base:"m",letters:/[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g},{base:"n",letters:/[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g},{base:"nj",letters:/[\u01CC]/g},{base:"o",letters:/[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g},{base:"oi",letters:/[\u01A3]/g},{base:"ou",letters:/[\u0223]/g},{base:"oo",letters:/[\uA74F]/g},{base:"p",letters:/[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g},{base:"q",letters:/[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g},{base:"r",letters:/[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g},{base:"s",letters:/[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g},{base:"t",letters:/[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g},{base:"tz",letters:/[\uA729]/g},{base:"u",letters:/[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g},{base:"v",letters:/[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g},{base:"vy",letters:/[\uA761]/g},{base:"w",letters:/[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g},{base:"x",letters:/[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g},{base:"y",letters:/[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g},{base:"z",letters:/[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g}],m=function(e){for(var t=0;t<f.length;t++)e=e.replace(f[t].letters,f[t].base);return e},g=function(e){return e.replace(/^\s+|\s+$/g,"")},v=function(e){return"undefined"!==typeof e&&null!==e&&""!==e},y=function(e,t,n,r){return r.ignoreAccents&&(t=m(t)),r.ignoreCase&&(t=t.toLowerCase()),r.trimFilter&&(t=g(t)),n&&(n=n.map(function(e){return e[r.valueKey]})),e.filter(function(e){if(n&&n.indexOf(e[r.valueKey])>-1)return!1;if(r.filterOption)return r.filterOption.call(void 0,e,t);if(!t)return!0;var o=e[r.valueKey],i=e[r.labelKey],a=v(o),l=v(i);if(!a&&!l)return!1;var s=a?String(o):null,u=l?String(i):null;return r.ignoreAccents&&(s&&"label"!==r.matchProp&&(s=m(s)),u&&"value"!==r.matchProp&&(u=m(u))),r.ignoreCase&&(s&&"label"!==r.matchProp&&(s=s.toLowerCase()),u&&"value"!==r.matchProp&&(u=u.toLowerCase())),"start"===r.matchPos?s&&"label"!==r.matchProp&&s.substr(0,t.length)===t||u&&"value"!==r.matchProp&&u.substr(0,t.length)===t:s&&"label"!==r.matchProp&&s.indexOf(t)>=0||u&&"value"!==r.matchProp&&u.indexOf(t)>=0})},b=function(e){var t=e.focusedOption,n=e.focusOption,r=e.inputValue,o=e.instancePrefix,i=e.onFocus,l=e.onOptionRef,s=e.onSelect,u=e.optionClassName,c=e.optionComponent,h=e.optionRenderer,d=e.options,f=e.removeValue,m=e.selectValue,g=e.valueArray,v=e.valueKey,y=c;return d.map(function(e,c){var d=g&&g.some(function(t){return t[v]===e[v]}),b=e===t,_=a()(u,{"Select-option":!0,"is-selected":d,"is-focused":b,"is-disabled":e.disabled});return p.a.createElement(y,{className:_,focusOption:n,inputValue:r,instancePrefix:o,isDisabled:e.disabled,isFocused:b,isSelected:d,key:"option-"+c+"-"+e[v],onFocus:i,onSelect:s,option:e,optionIndex:c,ref:function(e){l(e,b)},removeValue:f,selectValue:m},h(e,c,r))})};b.propTypes={focusOption:s.a.func,focusedOption:s.a.object,inputValue:s.a.string,instancePrefix:s.a.string,onFocus:s.a.func,onOptionRef:s.a.func,onSelect:s.a.func,optionClassName:s.a.string,optionComponent:s.a.func,optionRenderer:s.a.func,options:s.a.array,removeValue:s.a.func,selectValue:s.a.func,valueArray:s.a.array,valueKey:s.a.string};var _=function(e){e.preventDefault(),e.stopPropagation(),"A"===e.target.tagName&&"href"in e.target&&(e.target.target?window.open(e.target.href,e.target.target):window.location.href=e.target.href)},E="function"===typeof Symbol&&"symbol"===typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"===typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},w=(function(){function e(e){this.value=e}function t(t){function n(e,t){return new Promise(function(n,o){var l={key:e,arg:t,resolve:n,reject:o,next:null};a?a=a.next=l:(i=a=l,r(e,t))})}function r(n,i){try{var a=t[n](i),l=a.value;l instanceof e?Promise.resolve(l.value).then(function(e){r("next",e)},function(e){r("throw",e)}):o(a.done?"return":"normal",a.value)}catch(e){o("throw",e)}}function o(e,t){switch(e){case"return":i.resolve({value:t,done:!0});break;case"throw":i.reject(t);break;default:i.resolve({value:t,done:!1})}i=i.next,i?r(i.key,i.arg):a=null}var i,a;this._invoke=n,"function"!==typeof t.return&&(this.return=void 0)}"function"===typeof Symbol&&Symbol.asyncIterator&&(t.prototype[Symbol.asyncIterator]=function(){return this}),t.prototype.next=function(e){return this._invoke("next",e)},t.prototype.throw=function(e){return this._invoke("throw",e)},t.prototype.return=function(e){return this._invoke("return",e)}}(),function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}),O=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),C=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e},A=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},x=function(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)},F=function(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n},k=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t},S=function(e){function t(e){w(this,t);var n=k(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleMouseDown=n.handleMouseDown.bind(n),n.handleMouseEnter=n.handleMouseEnter.bind(n),n.handleMouseMove=n.handleMouseMove.bind(n),n.handleTouchStart=n.handleTouchStart.bind(n),n.handleTouchEnd=n.handleTouchEnd.bind(n),n.handleTouchMove=n.handleTouchMove.bind(n),n.onFocus=n.onFocus.bind(n),n}return x(t,e),O(t,[{key:"handleMouseDown",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onSelect(this.props.option,e)}},{key:"handleMouseEnter",value:function(e){this.onFocus(e)}},{key:"handleMouseMove",value:function(e){this.onFocus(e)}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"onFocus",value:function(e){this.props.isFocused||this.props.onFocus(this.props.option,e)}},{key:"render",value:function(){var e=this.props,t=e.option,n=e.instancePrefix,r=e.optionIndex,o=a()(this.props.className,t.className);return t.disabled?p.a.createElement("div",{className:o,onMouseDown:_,onClick:_},this.props.children):p.a.createElement("div",{className:o,style:t.style,role:"option","aria-label":t.label,onMouseDown:this.handleMouseDown,onMouseEnter:this.handleMouseEnter,onMouseMove:this.handleMouseMove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove,onTouchEnd:this.handleTouchEnd,id:n+"-option-"+r,title:t.title},this.props.children)}}]),t}(p.a.Component);S.propTypes={children:s.a.node,className:s.a.string,instancePrefix:s.a.string.isRequired,isDisabled:s.a.bool,isFocused:s.a.bool,isSelected:s.a.bool,onFocus:s.a.func,onSelect:s.a.func,onUnfocus:s.a.func,option:s.a.object.isRequired,optionIndex:s.a.number};var T=function(e){function t(e){w(this,t);var n=k(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.handleMouseDown=n.handleMouseDown.bind(n),n.onRemove=n.onRemove.bind(n),n.handleTouchEndRemove=n.handleTouchEndRemove.bind(n),n.handleTouchMove=n.handleTouchMove.bind(n),n.handleTouchStart=n.handleTouchStart.bind(n),n}return x(t,e),O(t,[{key:"handleMouseDown",value:function(e){if("mousedown"!==e.type||0===e.button)return this.props.onClick?(e.stopPropagation(),void this.props.onClick(this.props.value,e)):void(this.props.value.href&&e.stopPropagation())}},{key:"onRemove",value:function(e){e.preventDefault(),e.stopPropagation(),this.props.onRemove(this.props.value)}},{key:"handleTouchEndRemove",value:function(e){this.dragging||this.onRemove(e)}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"renderRemoveIcon",value:function(){if(!this.props.disabled&&this.props.onRemove)return p.a.createElement("span",{className:"Select-value-icon","aria-hidden":"true",onMouseDown:this.onRemove,onTouchEnd:this.handleTouchEndRemove,onTouchStart:this.handleTouchStart,onTouchMove:this.handleTouchMove},"\xd7")}},{key:"renderLabel",value:function(){return this.props.onClick||this.props.value.href?p.a.createElement("a",{className:"Select-value-label",href:this.props.value.href,target:this.props.value.target,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleMouseDown},this.props.children):p.a.createElement("span",{className:"Select-value-label",role:"option","aria-selected":"true",id:this.props.id},this.props.children)}},{key:"render",value:function(){return p.a.createElement("div",{className:a()("Select-value",this.props.value.className),style:this.props.value.style,title:this.props.value.title},this.renderRemoveIcon(),this.renderLabel())}}]),t}(p.a.Component);T.propTypes={children:s.a.node,disabled:s.a.bool,id:s.a.string,onClick:s.a.func,onRemove:s.a.func,value:s.a.object.isRequired};var P=function(e){return"string"===typeof e?e:null!==e&&JSON.stringify(e)||""},j=s.a.oneOfType([s.a.string,s.a.node]),D=s.a.oneOfType([s.a.string,s.a.number]),N=1,I=function(e,t){var n=e.inputValue,r=e.isPseudoFocused,o=e.isFocused,i=t.onSelectResetsInput;return!n||!i&&!(!o&&r||o&&!r)},R=function(e,t,n){var r=e.inputValue,o=e.isPseudoFocused,i=e.isFocused,a=t.onSelectResetsInput;return!r||!a&&!n&&!o&&!i},V=function(e,t){var n="undefined"===typeof e?"undefined":E(e);if("string"!==n&&"number"!==n&&"boolean"!==n)return e;var r=t.options,o=t.valueKey;if(r)for(var i=0;i<r.length;i++)if(String(r[i][o])===String(e))return r[i]},M=function(e,t){return!e||(t?0===e.length:0===Object.keys(e).length)},B=function(e){function t(e){w(this,t);var n=k(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return["clearValue","focusOption","getOptionLabel","handleInputBlur","handleInputChange","handleInputFocus","handleInputValueChange","handleKeyDown","handleMenuScroll","handleMouseDown","handleMouseDownOnArrow","handleMouseDownOnMenu","handleTouchEnd","handleTouchEndClearValue","handleTouchMove","handleTouchOutside","handleTouchStart","handleValueClick","onOptionRef","removeValue","selectValue"].forEach(function(e){return n[e]=n[e].bind(n)}),n.state={inputValue:"",isFocused:!1,isOpen:!1,isPseudoFocused:!1,required:!1},n}return x(t,e),O(t,[{key:"componentWillMount",value:function(){this._instancePrefix="react-select-"+(this.props.instanceId||++N)+"-";var e=this.getValueArray(this.props.value);this.props.required&&this.setState({required:M(e[0],this.props.multi)})}},{key:"componentDidMount",value:function(){"undefined"!==typeof this.props.autofocus&&"undefined"!==typeof console&&console.warn("Warning: The autofocus prop has changed to autoFocus, support will be removed after react-select@1.0"),(this.props.autoFocus||this.props.autofocus)&&this.focus()}},{key:"componentWillReceiveProps",value:function(e){var t=this.getValueArray(e.value,e);e.required?this.setState({required:M(t[0],e.multi)}):this.props.required&&this.setState({required:!1}),this.state.inputValue&&this.props.value!==e.value&&e.onSelectResetsInput&&this.setState({inputValue:this.handleInputValueChange("")})}},{key:"componentDidUpdate",value:function(e,t){if(this.menu&&this.focused&&this.state.isOpen&&!this.hasScrolledToOption){var n=Object(c.findDOMNode)(this.focused),r=Object(c.findDOMNode)(this.menu),o=r.scrollTop,i=o+r.offsetHeight,a=n.offsetTop,l=a+n.offsetHeight;(o>a||i<l)&&(r.scrollTop=n.offsetTop),this.hasScrolledToOption=!0}else this.state.isOpen||(this.hasScrolledToOption=!1);if(this._scrollToFocusedOptionOnUpdate&&this.focused&&this.menu){this._scrollToFocusedOptionOnUpdate=!1;var s=Object(c.findDOMNode)(this.focused),u=Object(c.findDOMNode)(this.menu),p=s.getBoundingClientRect(),h=u.getBoundingClientRect();p.bottom>h.bottom?u.scrollTop=s.offsetTop+s.clientHeight-u.offsetHeight:p.top<h.top&&(u.scrollTop=s.offsetTop)}if(this.props.scrollMenuIntoView&&this.menuContainer){var d=this.menuContainer.getBoundingClientRect();window.innerHeight<d.bottom+this.props.menuBuffer&&window.scrollBy(0,d.bottom+this.props.menuBuffer-window.innerHeight)}if(e.disabled!==this.props.disabled&&(this.setState({isFocused:!1}),this.closeMenu()),t.isOpen!==this.state.isOpen){this.toggleTouchOutsideEvent(this.state.isOpen);var f=this.state.isOpen?this.props.onOpen:this.props.onClose;f&&f()}}},{key:"componentWillUnmount",value:function(){this.toggleTouchOutsideEvent(!1)}},{key:"toggleTouchOutsideEvent",value:function(e){e?!document.addEventListener&&document.attachEvent?document.attachEvent("ontouchstart",this.handleTouchOutside):document.addEventListener("touchstart",this.handleTouchOutside):!document.removeEventListener&&document.detachEvent?document.detachEvent("ontouchstart",this.handleTouchOutside):document.removeEventListener("touchstart",this.handleTouchOutside)}},{key:"handleTouchOutside",value:function(e){this.wrapper&&!this.wrapper.contains(e.target)&&this.closeMenu()}},{key:"focus",value:function(){this.input&&this.input.focus()}},{key:"blurInput",value:function(){this.input&&this.input.blur()}},{key:"handleTouchMove",value:function(){this.dragging=!0}},{key:"handleTouchStart",value:function(){this.dragging=!1}},{key:"handleTouchEnd",value:function(e){this.dragging||this.handleMouseDown(e)}},{key:"handleTouchEndClearValue",value:function(e){this.dragging||this.clearValue(e)}},{key:"handleMouseDown",value:function(e){if(!(this.props.disabled||"mousedown"===e.type&&0!==e.button)){if("INPUT"===e.target.tagName)return void(this.state.isFocused?this.state.isOpen||this.setState({isOpen:!0,isPseudoFocused:!1}):(this._openAfterFocus=this.props.openOnClick,this.focus()));if(e.preventDefault(),!this.props.searchable)return this.focus(),this.setState({isOpen:!this.state.isOpen});if(this.state.isFocused){this.focus();var t=this.input,n=!0;"function"===typeof t.getInput&&(t=t.getInput()),t.value="",this._focusAfterClear&&(n=!1,this._focusAfterClear=!1),this.setState({isOpen:n,isPseudoFocused:!1,focusedOption:null})}else this._openAfterFocus=this.props.openOnClick,this.focus(),this.setState({focusedOption:null})}}},{key:"handleMouseDownOnArrow",value:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||(this.state.isOpen?(e.stopPropagation(),e.preventDefault(),this.closeMenu()):this.setState({isOpen:!0}))}},{key:"handleMouseDownOnMenu",value:function(e){this.props.disabled||"mousedown"===e.type&&0!==e.button||(e.stopPropagation(),e.preventDefault(),this._openAfterFocus=!0,this.focus())}},{key:"closeMenu",value:function(){this.props.onCloseResetsInput?this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi}):this.setState({isOpen:!1,isPseudoFocused:this.state.isFocused&&!this.props.multi}),this.hasScrolledToOption=!1}},{key:"handleInputFocus",value:function(e){if(!this.props.disabled){var t=this.state.isOpen||this._openAfterFocus||this.props.openOnFocus;t=!this._focusAfterClear&&t,this.props.onFocus&&this.props.onFocus(e),this.setState({isFocused:!0,isOpen:!!t}),this._focusAfterClear=!1,this._openAfterFocus=!1}}},{key:"handleInputBlur",value:function(e){if(this.menu&&(this.menu===document.activeElement||this.menu.contains(document.activeElement)))return void this.focus();this.props.onBlur&&this.props.onBlur(e);var t={isFocused:!1,isOpen:!1,isPseudoFocused:!1};this.props.onBlurResetsInput&&(t.inputValue=this.handleInputValueChange("")),this.setState(t)}},{key:"handleInputChange",value:function(e){var t=e.target.value;this.state.inputValue!==e.target.value&&(t=this.handleInputValueChange(t)),this.setState({inputValue:t,isOpen:!0,isPseudoFocused:!1})}},{key:"setInputValue",value:function(e){if(this.props.onInputChange){var t=this.props.onInputChange(e);null!=t&&"object"!==("undefined"===typeof t?"undefined":E(t))&&(e=""+t)}this.setState({inputValue:e})}},{key:"handleInputValueChange",value:function(e){if(this.props.onInputChange){var t=this.props.onInputChange(e);null!=t&&"object"!==("undefined"===typeof t?"undefined":E(t))&&(e=""+t)}return e}},{key:"handleKeyDown",value:function(e){if(!this.props.disabled&&("function"!==typeof this.props.onInputKeyDown||(this.props.onInputKeyDown(e),!e.defaultPrevented)))switch(e.keyCode){case 8:!this.state.inputValue&&this.props.backspaceRemoves&&(e.preventDefault(),this.popValue());break;case 9:if(e.shiftKey||!this.state.isOpen||!this.props.tabSelectsValue)break;e.preventDefault(),this.selectFocusedOption();break;case 13:e.preventDefault(),e.stopPropagation(),this.state.isOpen?this.selectFocusedOption():this.focusNextOption();break;case 27:e.preventDefault(),this.state.isOpen?(this.closeMenu(),e.stopPropagation()):this.props.clearable&&this.props.escapeClearsValue&&(this.clearValue(e),e.stopPropagation());break;case 32:if(this.props.searchable)break;if(e.preventDefault(),!this.state.isOpen){this.focusNextOption();break}e.stopPropagation(),this.selectFocusedOption();break;case 38:e.preventDefault(),this.focusPreviousOption();break;case 40:e.preventDefault(),this.focusNextOption();break;case 33:e.preventDefault(),this.focusPageUpOption();break;case 34:e.preventDefault(),this.focusPageDownOption();break;case 35:if(e.shiftKey)break;e.preventDefault(),this.focusEndOption();break;case 36:if(e.shiftKey)break;e.preventDefault(),this.focusStartOption();break;case 46:!this.state.inputValue&&this.props.deleteRemoves&&(e.preventDefault(),this.popValue())}}},{key:"handleValueClick",value:function(e,t){this.props.onValueClick&&this.props.onValueClick(e,t)}},{key:"handleMenuScroll",value:function(e){if(this.props.onMenuScrollToBottom){var t=e.target;t.scrollHeight>t.offsetHeight&&t.scrollHeight-t.offsetHeight-t.scrollTop<=0&&this.props.onMenuScrollToBottom()}}},{key:"getOptionLabel",value:function(e){return e[this.props.labelKey]}},{key:"getValueArray",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n="object"===("undefined"===typeof t?"undefined":E(t))?t:this.props;if(n.multi){if("string"===typeof e&&(e=e.split(n.delimiter)),!Array.isArray(e)){if(null===e||void 0===e)return[];e=[e]}return e.map(function(e){return V(e,n)}).filter(function(e){return e})}var r=V(e,n);return r?[r]:[]}},{key:"setValue",value:function(e){var t=this;if(this.props.autoBlur&&this.blurInput(),this.props.required){var n=M(e,this.props.multi);this.setState({required:n})}this.props.simpleValue&&e&&(e=this.props.multi?e.map(function(e){return e[t.props.valueKey]}).join(this.props.delimiter):e[this.props.valueKey]),this.props.onChange&&this.props.onChange(e)}},{key:"selectValue",value:function(e){var t=this;this.props.closeOnSelect&&(this.hasScrolledToOption=!1);var n=this.props.onSelectResetsInput?"":this.state.inputValue;this.props.multi?this.setState({focusedIndex:null,inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect},function(){t.getValueArray(t.props.value).some(function(n){return n[t.props.valueKey]===e[t.props.valueKey]})?t.removeValue(e):t.addValue(e)}):this.setState({inputValue:this.handleInputValueChange(n),isOpen:!this.props.closeOnSelect,isPseudoFocused:this.state.isFocused},function(){t.setValue(e)})}},{key:"addValue",value:function(e){var t=this.getValueArray(this.props.value),n=this._visibleOptions.filter(function(e){return!e.disabled}),r=n.indexOf(e);this.setValue(t.concat(e)),n.length-1===r?this.focusOption(n[r-1]):n.length>r&&this.focusOption(n[r+1])}},{key:"popValue",value:function(){var e=this.getValueArray(this.props.value);e.length&&!1!==e[e.length-1].clearableValue&&this.setValue(this.props.multi?e.slice(0,e.length-1):null)}},{key:"removeValue",value:function(e){var t=this,n=this.getValueArray(this.props.value);this.setValue(n.filter(function(n){return n[t.props.valueKey]!==e[t.props.valueKey]})),this.focus()}},{key:"clearValue",value:function(e){e&&"mousedown"===e.type&&0!==e.button||(e.preventDefault(),this.setValue(this.getResetValue()),this.setState({inputValue:this.handleInputValueChange(""),isOpen:!1},this.focus),this._focusAfterClear=!0)}},{key:"getResetValue",value:function(){return void 0!==this.props.resetValue?this.props.resetValue:this.props.multi?[]:null}},{key:"focusOption",value:function(e){this.setState({focusedOption:e})}},{key:"focusNextOption",value:function(){this.focusAdjacentOption("next")}},{key:"focusPreviousOption",value:function(){this.focusAdjacentOption("previous")}},{key:"focusPageUpOption",value:function(){this.focusAdjacentOption("page_up")}},{key:"focusPageDownOption",value:function(){this.focusAdjacentOption("page_down")}},{key:"focusStartOption",value:function(){this.focusAdjacentOption("start")}},{key:"focusEndOption",value:function(){this.focusAdjacentOption("end")}},{key:"focusAdjacentOption",value:function(e){var t=this._visibleOptions.map(function(e,t){return{option:e,index:t}}).filter(function(e){return!e.option.disabled});if(this._scrollToFocusedOptionOnUpdate=!0,!this.state.isOpen){var n={focusedOption:this._focusedOption||(t.length?t["next"===e?0:t.length-1].option:null),isOpen:!0};return this.props.onSelectResetsInput&&(n.inputValue=""),void this.setState(n)}if(t.length){for(var r=-1,o=0;o<t.length;o++)if(this._focusedOption===t[o].option){r=o;break}if("next"===e&&-1!==r)r=(r+1)%t.length;else if("previous"===e)r>0?r-=1:r=t.length-1;else if("start"===e)r=0;else if("end"===e)r=t.length-1;else if("page_up"===e){var i=r-this.props.pageSize;r=i<0?0:i}else if("page_down"===e){var a=r+this.props.pageSize;r=a>t.length-1?t.length-1:a}-1===r&&(r=0),this.setState({focusedIndex:t[r].index,focusedOption:t[r].option})}}},{key:"getFocusedOption",value:function(){return this._focusedOption}},{key:"selectFocusedOption",value:function(){if(this._focusedOption)return this.selectValue(this._focusedOption)}},{key:"renderLoading",value:function(){if(this.props.isLoading)return p.a.createElement("span",{className:"Select-loading-zone","aria-hidden":"true"},p.a.createElement("span",{className:"Select-loading"}))}},{key:"renderValue",value:function(e,t){var n=this,r=this.props.valueRenderer||this.getOptionLabel,o=this.props.valueComponent;if(!e.length){return R(this.state,this.props,t)?p.a.createElement("div",{className:"Select-placeholder"},this.props.placeholder):null}var i=this.props.onValueClick?this.handleValueClick:null;return this.props.multi?e.map(function(e,t){return p.a.createElement(o,{disabled:n.props.disabled||!1===e.clearableValue,id:n._instancePrefix+"-value-"+t,instancePrefix:n._instancePrefix,key:"value-"+t+"-"+e[n.props.valueKey],onClick:i,onRemove:n.removeValue,placeholder:n.props.placeholder,value:e},r(e,t),p.a.createElement("span",{className:"Select-aria-only"},"\xa0"))}):I(this.state,this.props)?(t&&(i=null),p.a.createElement(o,{disabled:this.props.disabled,id:this._instancePrefix+"-value-item",instancePrefix:this._instancePrefix,onClick:i,placeholder:this.props.placeholder,value:e[0]},r(e[0]))):void 0}},{key:"renderInput",value:function(e,t){var n,r=this,i=a()("Select-input",this.props.inputProps.className),l=this.state.isOpen,s=a()((n={},C(n,this._instancePrefix+"-list",l),C(n,this._instancePrefix+"-backspace-remove-message",this.props.multi&&!this.props.disabled&&this.state.isFocused&&!this.state.inputValue),n)),u=this.state.inputValue;!u||this.props.onSelectResetsInput||this.state.isFocused||(u="");var c=A({},this.props.inputProps,{"aria-activedescendant":l?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-describedby":this.props["aria-describedby"],"aria-expanded":""+l,"aria-haspopup":""+l,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],"aria-owns":s,className:i,onBlur:this.handleInputBlur,onChange:this.handleInputChange,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",required:this.state.required,tabIndex:this.props.tabIndex,value:u});if(this.props.inputRenderer)return this.props.inputRenderer(c);if(this.props.disabled||!this.props.searchable){var h=F(this.props.inputProps,[]),d=a()(C({},this._instancePrefix+"-list",l));return p.a.createElement("div",A({},h,{"aria-expanded":l,"aria-owns":d,"aria-activedescendant":l?this._instancePrefix+"-option-"+t:this._instancePrefix+"-value","aria-disabled":""+this.props.disabled,"aria-label":this.props["aria-label"],"aria-labelledby":this.props["aria-labelledby"],className:i,onBlur:this.handleInputBlur,onFocus:this.handleInputFocus,ref:function(e){return r.input=e},role:"combobox",style:{border:0,width:1,display:"inline-block"},tabIndex:this.props.tabIndex||0}))}return this.props.autosize?p.a.createElement(o.a,A({id:this.props.id},c,{minWidth:"5"})):p.a.createElement("div",{className:i,key:"input-wrap",style:{display:"inline-block"}},p.a.createElement("input",A({id:this.props.id},c)))}},{key:"renderClear",value:function(){var e=this.getValueArray(this.props.value);if(this.props.clearable&&e.length&&!this.props.disabled&&!this.props.isLoading){var t=this.props.multi?this.props.clearAllText:this.props.clearValueText,n=this.props.clearRenderer();return p.a.createElement("span",{"aria-label":t,className:"Select-clear-zone",onMouseDown:this.clearValue,onTouchEnd:this.handleTouchEndClearValue,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,title:t},n)}}},{key:"renderArrow",value:function(){if(this.props.arrowRenderer){var e=this.handleMouseDownOnArrow,t=this.state.isOpen,n=this.props.arrowRenderer({onMouseDown:e,isOpen:t});return n?p.a.createElement("span",{className:"Select-arrow-zone",onMouseDown:e},n):null}}},{key:"filterOptions",value:function(e){var t=this.state.inputValue,n=this.props.options||[];if(this.props.filterOptions){return("function"===typeof this.props.filterOptions?this.props.filterOptions:y)(n,t,e,{filterOption:this.props.filterOption,ignoreAccents:this.props.ignoreAccents,ignoreCase:this.props.ignoreCase,labelKey:this.props.labelKey,matchPos:this.props.matchPos,matchProp:this.props.matchProp,trimFilter:this.props.trimFilter,valueKey:this.props.valueKey})}return n}},{key:"onOptionRef",value:function(e,t){t&&(this.focused=e)}},{key:"renderMenu",value:function(e,t,n){return e&&e.length?this.props.menuRenderer({focusedOption:n,focusOption:this.focusOption,inputValue:this.state.inputValue,instancePrefix:this._instancePrefix,labelKey:this.props.labelKey,onFocus:this.focusOption,onOptionRef:this.onOptionRef,onSelect:this.selectValue,optionClassName:this.props.optionClassName,optionComponent:this.props.optionComponent,optionRenderer:this.props.optionRenderer||this.getOptionLabel,options:e,removeValue:this.removeValue,selectValue:this.selectValue,valueArray:t,valueKey:this.props.valueKey}):this.props.noResultsText?p.a.createElement("div",{className:"Select-noresults"},this.props.noResultsText):null}},{key:"renderHiddenField",value:function(e){var t=this;if(this.props.name){if(this.props.joinValues){var n=e.map(function(e){return P(e[t.props.valueKey])}).join(this.props.delimiter);return p.a.createElement("input",{disabled:this.props.disabled,name:this.props.name,ref:function(e){return t.value=e},type:"hidden",value:n})}return e.map(function(e,n){return p.a.createElement("input",{disabled:t.props.disabled,key:"hidden."+n,name:t.props.name,ref:"value"+n,type:"hidden",value:P(e[t.props.valueKey])})})}}},{key:"getFocusableOptionIndex",value:function(e){var t=this._visibleOptions;if(!t.length)return null;var n=this.props.valueKey,r=this.state.focusedOption||e;if(r&&!r.disabled){var o=-1;if(t.some(function(e,t){var i=e[n]===r[n];return i&&(o=t),i}),-1!==o)return o}for(var i=0;i<t.length;i++)if(!t[i].disabled)return i;return null}},{key:"renderOuter",value:function(e,t,n){var r=this,o=this.renderMenu(e,t,n);return o?p.a.createElement("div",{ref:function(e){return r.menuContainer=e},className:"Select-menu-outer",style:this.props.menuContainerStyle},p.a.createElement("div",{className:"Select-menu",id:this._instancePrefix+"-list",onMouseDown:this.handleMouseDownOnMenu,onScroll:this.handleMenuScroll,ref:function(e){return r.menu=e},role:"listbox",style:this.props.menuStyle,tabIndex:-1},o)):null}},{key:"render",value:function(){var e=this,t=this.getValueArray(this.props.value),n=this._visibleOptions=this.filterOptions(this.props.multi&&this.props.removeSelected?t:null),r=this.state.isOpen;this.props.multi&&!n.length&&t.length&&!this.state.inputValue&&(r=!1);var o=this.getFocusableOptionIndex(t[0]),i=null;i=this._focusedOption=null!==o?n[o]:null;var l=a()("Select",this.props.className,{"has-value":t.length,"is-clearable":this.props.clearable,"is-disabled":this.props.disabled,"is-focused":this.state.isFocused,"is-loading":this.props.isLoading,"is-open":r,"is-pseudo-focused":this.state.isPseudoFocused,"is-searchable":this.props.searchable,"Select--multi":this.props.multi,"Select--rtl":this.props.rtl,"Select--single":!this.props.multi}),s=null;return this.props.multi&&!this.props.disabled&&t.length&&!this.state.inputValue&&this.state.isFocused&&this.props.backspaceRemoves&&(s=p.a.createElement("span",{id:this._instancePrefix+"-backspace-remove-message",className:"Select-aria-only","aria-live":"assertive"},this.props.backspaceToRemoveMessage.replace("{label}",t[t.length-1][this.props.labelKey]))),p.a.createElement("div",{ref:function(t){return e.wrapper=t},className:l,style:this.props.wrapperStyle},this.renderHiddenField(t),p.a.createElement("div",{ref:function(t){return e.control=t},className:"Select-control",onKeyDown:this.handleKeyDown,onMouseDown:this.handleMouseDown,onTouchEnd:this.handleTouchEnd,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,style:this.props.style},p.a.createElement("span",{className:"Select-multi-value-wrapper",id:this._instancePrefix+"-value"},this.renderValue(t,r),this.renderInput(t,o)),s,this.renderLoading(),this.renderClear(),this.renderArrow()),r?this.renderOuter(n,t,i):null)}}]),t}(p.a.Component);B.propTypes={"aria-describedby":s.a.string,"aria-label":s.a.string,"aria-labelledby":s.a.string,arrowRenderer:s.a.func,autoBlur:s.a.bool,autoFocus:s.a.bool,autofocus:s.a.bool,autosize:s.a.bool,backspaceRemoves:s.a.bool,backspaceToRemoveMessage:s.a.string,className:s.a.string,clearAllText:j,clearRenderer:s.a.func,clearValueText:j,clearable:s.a.bool,closeOnSelect:s.a.bool,deleteRemoves:s.a.bool,delimiter:s.a.string,disabled:s.a.bool,escapeClearsValue:s.a.bool,filterOption:s.a.func,filterOptions:s.a.any,id:s.a.string,ignoreAccents:s.a.bool,ignoreCase:s.a.bool,inputProps:s.a.object,inputRenderer:s.a.func,instanceId:s.a.string,isLoading:s.a.bool,joinValues:s.a.bool,labelKey:s.a.string,matchPos:s.a.string,matchProp:s.a.string,menuBuffer:s.a.number,menuContainerStyle:s.a.object,menuRenderer:s.a.func,menuStyle:s.a.object,multi:s.a.bool,name:s.a.string,noResultsText:j,onBlur:s.a.func,onBlurResetsInput:s.a.bool,onChange:s.a.func,onClose:s.a.func,onCloseResetsInput:s.a.bool,onFocus:s.a.func,onInputChange:s.a.func,onInputKeyDown:s.a.func,onMenuScrollToBottom:s.a.func,onOpen:s.a.func,onSelectResetsInput:s.a.bool,onValueClick:s.a.func,openOnClick:s.a.bool,openOnFocus:s.a.bool,optionClassName:s.a.string,optionComponent:s.a.func,optionRenderer:s.a.func,options:s.a.array,pageSize:s.a.number,placeholder:j,removeSelected:s.a.bool,required:s.a.bool,resetValue:s.a.any,rtl:s.a.bool,scrollMenuIntoView:s.a.bool,searchable:s.a.bool,simpleValue:s.a.bool,style:s.a.object,tabIndex:D,tabSelectsValue:s.a.bool,trimFilter:s.a.bool,value:s.a.any,valueComponent:s.a.func,valueKey:s.a.string,valueRenderer:s.a.func,wrapperStyle:s.a.object},B.defaultProps={arrowRenderer:h,autosize:!0,backspaceRemoves:!0,backspaceToRemoveMessage:"Press backspace to remove {label}",clearable:!0,clearAllText:"Clear all",clearRenderer:d,clearValueText:"Clear value",closeOnSelect:!0,deleteRemoves:!0,delimiter:",",disabled:!1,escapeClearsValue:!0,filterOptions:y,ignoreAccents:!0,ignoreCase:!0,inputProps:{},isLoading:!1,joinValues:!1,labelKey:"label",matchPos:"any",matchProp:"any",menuBuffer:0,menuRenderer:b,multi:!1,noResultsText:"No results found",onBlurResetsInput:!0,onCloseResetsInput:!0,onSelectResetsInput:!0,openOnClick:!0,optionComponent:S,pageSize:5,placeholder:"Select...",removeSelected:!0,required:!1,rtl:!1,scrollMenuIntoView:!0,searchable:!0,simpleValue:!1,tabSelectsValue:!0,trimFilter:!0,valueComponent:T,valueKey:"value"};var z={autoload:s.a.bool.isRequired,cache:s.a.any,children:s.a.func.isRequired,ignoreAccents:s.a.bool,ignoreCase:s.a.bool,loadOptions:s.a.func.isRequired,loadingPlaceholder:s.a.oneOfType([s.a.string,s.a.node]),multi:s.a.bool,noResultsText:s.a.oneOfType([s.a.string,s.a.node]),onChange:s.a.func,onInputChange:s.a.func,options:s.a.array.isRequired,placeholder:s.a.oneOfType([s.a.string,s.a.node]),searchPromptText:s.a.oneOfType([s.a.string,s.a.node]),value:s.a.any},L={},K=function(e){return p.a.createElement(B,e)},W={autoload:!0,cache:L,children:K,ignoreAccents:!0,ignoreCase:!0,loadingPlaceholder:"Loading...",options:[],searchPromptText:"Type to search"},H=function(e){function t(e,n){w(this,t);var r=k(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r._cache=e.cache===L?{}:e.cache,r.state={inputValue:"",isLoading:!1,options:e.options},r.onInputChange=r.onInputChange.bind(r),r}return x(t,e),O(t,[{key:"componentDidMount",value:function(){this.props.autoload&&this.loadOptions("")}},{key:"componentWillReceiveProps",value:function(e){e.options!==this.props.options&&this.setState({options:e.options})}},{key:"componentWillUnmount",value:function(){this._callback=null}},{key:"loadOptions",value:function(e){var t=this,n=this.props.loadOptions,r=this._cache;if(r&&Object.prototype.hasOwnProperty.call(r,e))return this._callback=null,void this.setState({isLoading:!1,options:r[e]});var o=function n(o,i){var a=i&&i.options||[];r&&(r[e]=a),n===t._callback&&(t._callback=null,t.setState({isLoading:!1,options:a}))};this._callback=o;var i=n(e,o);i&&i.then(function(e){return o(0,e)},function(e){return o()}),this._callback&&!this.state.isLoading&&this.setState({isLoading:!0})}},{key:"onInputChange",value:function(e){var t=this.props,n=t.ignoreAccents,r=t.ignoreCase,o=t.onInputChange,i=e;if(o){var a=o(i);null!=a&&"object"!==("undefined"===typeof a?"undefined":E(a))&&(i=""+a)}var l=i;return n&&(l=m(l)),r&&(l=l.toLowerCase()),this.setState({inputValue:i}),this.loadOptions(l),i}},{key:"noResultsText",value:function(){var e=this.props,t=e.loadingPlaceholder,n=e.noResultsText,r=e.searchPromptText,o=this.state,i=o.inputValue;return o.isLoading?t:i&&n?n:r}},{key:"focus",value:function(){this.select.focus()}},{key:"render",value:function(){var e=this,t=this.props,n=t.children,r=t.loadingPlaceholder,o=t.placeholder,i=this.state,a=i.isLoading,l=i.options,s={noResultsText:this.noResultsText(),placeholder:a?r:o,options:a&&r?[]:l,ref:function(t){return e.select=t}};return n(A({},this.props,s,{isLoading:a,onInputChange:this.onInputChange}))}}]),t}(u.Component);H.propTypes=z,H.defaultProps=W;var U=function(e){function t(e,n){w(this,t);var r=k(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e,n));return r.filterOptions=r.filterOptions.bind(r),r.menuRenderer=r.menuRenderer.bind(r),r.onInputKeyDown=r.onInputKeyDown.bind(r),r.onInputChange=r.onInputChange.bind(r),r.onOptionSelect=r.onOptionSelect.bind(r),r}return x(t,e),O(t,[{key:"createNewOption",value:function(){var e=this.props,t=e.isValidNewOption,n=e.newOptionCreator,r=e.onNewOptionClick,o=e.options,i=void 0===o?[]:o;if(t({label:this.inputValue})){var a=n({label:this.inputValue,labelKey:this.labelKey,valueKey:this.valueKey});this.isOptionUnique({option:a,options:i})&&(r?r(a):(i.unshift(a),this.select.selectValue(a)))}}},{key:"filterOptions",value:function(){var e=this.props,t=e.filterOptions,n=e.isValidNewOption,r=e.promptTextCreator,o=(arguments.length<=2?void 0:arguments[2])||[],i=t.apply(void 0,arguments)||[];if(n({label:this.inputValue})){var a=this.props.newOptionCreator,l=a({label:this.inputValue,labelKey:this.labelKey,valueKey:this.valueKey});if(this.isOptionUnique({option:l,options:o.concat(i)})){var s=r(this.inputValue);this._createPlaceholderOption=a({label:s,labelKey:this.labelKey,valueKey:this.valueKey}),i.unshift(this._createPlaceholderOption)}}return i}},{key:"isOptionUnique",value:function(e){var t=e.option,n=e.options,r=this.props.isOptionUnique;return n=n||this.props.options,r({labelKey:this.labelKey,option:t,options:n,valueKey:this.valueKey})}},{key:"menuRenderer",value:function(e){return(0,this.props.menuRenderer)(A({},e,{onSelect:this.onOptionSelect,selectValue:this.onOptionSelect}))}},{key:"onInputChange",value:function(e){var t=this.props.onInputChange;return this.inputValue=e,t&&(this.inputValue=t(e)),this.inputValue}},{key:"onInputKeyDown",value:function(e){var t=this.props,n=t.shouldKeyDownEventCreateNewOption,r=t.onInputKeyDown,o=this.select.getFocusedOption();o&&o===this._createPlaceholderOption&&n({keyCode:e.keyCode})?(this.createNewOption(),e.preventDefault()):r&&r(e)}},{key:"onOptionSelect",value:function(e){e===this._createPlaceholderOption?this.createNewOption():this.select.selectValue(e)}},{key:"focus",value:function(){this.select.focus()}},{key:"render",value:function(){var e=this,t=this.props,n=t.ref,r=F(t,["ref"]),o=this.props.children;return o||(o=G),o(A({},r,{allowCreate:!0,filterOptions:this.filterOptions,menuRenderer:this.menuRenderer,onInputChange:this.onInputChange,onInputKeyDown:this.onInputKeyDown,ref:function(t){e.select=t,t&&(e.labelKey=t.props.labelKey,e.valueKey=t.props.valueKey),n&&n(t)}}))}}]),t}(p.a.Component),G=function(e){return p.a.createElement(B,e)},q=function(e){var t=e.option,n=e.options,r=e.labelKey,o=e.valueKey;return!n||!n.length||0===n.filter(function(e){return e[r]===t[r]||e[o]===t[o]}).length},$=function(e){return!!e.label},J=function(e){var t=e.label,n=e.labelKey,r=e.valueKey,o={};return o[r]=t,o[n]=t,o.className="Select-create-option-placeholder",o},Y=function(e){return'Create option "'+e+'"'},Z=function(e){switch(e.keyCode){case 9:case 13:case 188:return!0;default:return!1}};U.isOptionUnique=q,U.isValidNewOption=$,U.newOptionCreator=J,U.promptTextCreator=Y,U.shouldKeyDownEventCreateNewOption=Z,U.defaultProps={filterOptions:y,isOptionUnique:q,isValidNewOption:$,menuRenderer:b,newOptionCreator:J,promptTextCreator:Y,shouldKeyDownEventCreateNewOption:Z},U.propTypes={children:s.a.func,filterOptions:s.a.any,isOptionUnique:s.a.func,isValidNewOption:s.a.func,menuRenderer:s.a.any,newOptionCreator:s.a.func,onInputChange:s.a.func,onInputKeyDown:s.a.func,onNewOptionClick:s.a.func,options:s.a.array,promptTextCreator:s.a.func,ref:s.a.func,shouldKeyDownEventCreateNewOption:s.a.func};var Q=function(e){function t(){return w(this,t),k(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return x(t,e),O(t,[{key:"focus",value:function(){this.select.focus()}},{key:"render",value:function(){var e=this;return p.a.createElement(H,this.props,function(t){var n=t.ref,r=F(t,["ref"]),o=n;return p.a.createElement(U,r,function(t){var n=t.ref,r=F(t,["ref"]),i=n;return e.props.children(A({},r,{ref:function(t){i(t),o(t),e.select=t}}))})})}}]),t}(p.a.Component),X=function(e){return p.a.createElement(B,e)};Q.propTypes={children:s.a.func.isRequired},Q.defaultProps={children:X},B.Async=H,B.AsyncCreatable=Q,B.Creatable=U,B.Value=T,B.Option=S,t.a=B},function(e,t,n){"use strict";function r(e){return function(){return e}}var o=function(){};o.thatReturns=r,o.thatReturnsFalse=r(!1),o.thatReturnsTrue=r(!0),o.thatReturnsNull=r(null),o.thatReturnsThis=function(){return this},o.thatReturnsArgument=function(e){return e},e.exports=o},function(e,t,n){"use strict";(function(t){function n(e,t,n,o,i,a,l,s){if(r(t),!e){var u;if(void 0===t)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var p=[n,o,i,a,l,s],c=0;u=new Error(t.replace(/%s/g,function(){return p[c++]})),u.name="Invariant Violation"}throw u.framesToPop=1,u}}var r=function(e){};"production"!==t.env.NODE_ENV&&(r=function(e){if(void 0===e)throw new Error("invariant requires an error message argument")}),e.exports=n}).call(t,n(0))},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";function r(e){v.push(e)}function o(e){if("string"===typeof e&&e.indexOf("Cloudflare Ray ID")>=0)throw{code:"cloudflare_error"}}function i(e){var t=function(e){var t=e.url,n=e.path,r=e.body,i=e.data,a=e.parse,h=void 0===a||a,d=Object(p.a)(e,["url","path","body","data","parse"]),f=d.headers||{};!f["Content-Type"]&&i&&(f["Content-Type"]="application/json");var m=window.fetch(t||n,Object(u.a)({},d,{credentials:"include",body:r||JSON.stringify(i),headers:f})),g=function(e){if(e.status>=200&&e.status<300)return e;throw e},v=function(e){return h?e.json?e.json():Promise.reject(e):e};return m.then(g).then(v).catch(function(e){if(!h)throw e;var t={code:"invalid_json",message:Object(c.a)("The response is not a valid JSON response.")};if(!e||!e.json)throw t;var n=e.clone();return e.json().catch(Object(s.a)(l.a.mark(function e(){var r;return l.a.wrap(function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,n.text();case 2:throw r=e.sent,o(r),t;case 5:case"end":return e.stop()}},e,this)}))).then(function(e){var t={code:"unknown_error",message:Object(c.a)("An unknown error occurred.")};throw o(e),e||t})})},n=[t,g.a,m.a].concat(v);return function e(t){return n.pop()(t,e)}(e)}var a=n(25),l=n.n(a),s=n(28),u=n(1),p=n(30),c=n(32),h=n(35),d=n(44),f=n(45),m=n(13),g=n(46),v=[];i.use=r,i.createNonceMiddleware=h.a,i.createPreloadingMiddleware=f.a,i.createRootURLMiddleware=d.a,t.a=i},function(e,t,n){"use strict";n.d(t,"a",function(){return i}),n.d(t,"b",function(){return a});var r=n(36),o=Object(r.a)(),i=o.addAction,a=(o.addFilter,o.removeAction,o.removeFilter,o.hasAction,o.hasFilter,o.removeAllActions,o.removeAllFilters,o.doAction);o.applyFilters,o.currentAction,o.currentFilter,o.doingAction,o.doingFilter,o.didAction,o.didFilter,o.actions,o.filters},function(e,t,n){"use strict";function r(e){return"string"!==typeof e||""===e?(console.error("The hook name must be a non-empty string."),!1):/^__/.test(e)?(console.error("The hook name cannot begin with `__`."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.-]*$/.test(e)||(console.error("The hook name can only contain numbers, letters, dashes, periods and underscores."),!1)}t.a=r},function(e,t){e.exports=React},function(e,t,n){(function(t){if("production"!==t.env.NODE_ENV){var r="function"===typeof Symbol&&Symbol.for&&Symbol.for("react.element")||60103,o=function(e){return"object"===typeof e&&null!==e&&e.$$typeof===r};e.exports=n(19)(o,!0)}else e.exports=n(22)()}).call(t,n(0))},function(e,t,n){"use strict";(function(t){var r=n(3),o=r;if("production"!==t.env.NODE_ENV){var i=function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=0,i="Warning: "+e.replace(/%s/g,function(){return n[o++]});"undefined"!==typeof console&&console.error(i);try{throw new Error(i)}catch(e){}};o=function(e,t){if(void 0===t)throw new Error("`warning(condition, format, ...args)` requires a warning message argument");if(0!==t.indexOf("Failed Composite propType: ")&&!e){for(var n=arguments.length,r=Array(n>2?n-2:0),o=2;o<n;o++)r[o-2]=arguments[o];i.apply(void 0,[t].concat(r))}}}e.exports=o}).call(t,n(0))},function(e,t,n){"use strict";function r(e){return"string"!==typeof e||""===e?(console.error("The namespace must be a non-empty string."),!1):!!/^[a-zA-Z][a-zA-Z0-9_.\-\/]*$/.test(e)||(console.error("The namespace can only contain numbers, letters, dashes, periods, underscores and slashes."),!1)}t.a=r},function(e,t,n){"use strict";var r=n(1),o=function(e,t){var n,o,i=e.path;return"string"===typeof e.namespace&&"string"===typeof e.endpoint&&(n=e.namespace.replace(/^\/|\/$/g,""),o=e.endpoint.replace(/^\//,""),i=o?n+"/"+o:n),delete e.namespace,delete e.endpoint,t(Object(r.a)({},e,{path:i}))};t.a=o},function(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(15),n(47),n(50)},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(16),l=(n.n(a),n(17)),s=(n.n(l),n(2)),u=n(6),p=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=wp.i18n.__,h=wp.blocks,d=h.createBlock,f=h.registerBlockType,m=wp.editor,g=m.InspectorControls,v=m.PlainText,y=wp.components,b=(y.SelectControl,y.PanelBody),_=y.ToggleControl,E=y.RangeControl,w=(y.ServerSideRender,wp.element.Component),O=ChattyMangoTagGroupsGlobal,C=O.siteUrl,A=O.siteLang,x=O.pluginUrl,F=O.hasPremium,k=x+"/assets/images/cm-tg-icon-64x64.png",S=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return i(t,e),p(t,[{key:"render",value:function(){var e="https://documentation.chattymango.com/documentation/tag-groups-premium/tabbed-tag-cloud/tabbed-tag-cloud-parameters/";""!=A&&(e+="?lang="+A),e+="#"+this.props.topic;var t=c("Click for help!");return wp.element.createElement("div",null,wp.element.createElement("a",{href:e,target:"_blank",style:{textDecoration:"none"},title:t},wp.element.createElement("span",{className:"dashicons dashicons-editor-help tg_right chatty-mango-help-icon"})))}}]),t}(w),T=function(e){function t(){r(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.groupsEndPoint=C+"/wp-json/tag-groups/v1/groups",e.termsEndPoint=C+"/wp-json/tag-groups/v1/terms",e.taxonomiesEndPoint=C+"/wp-json/tag-groups/v1/taxonomies",e.state=e.constructor.getInitialState(e.props.attributes),e.getGroupsFromApi=e.getGroupsFromApi.bind(e),e.getTaxonomiesFromApi=e.getTaxonomiesFromApi.bind(e),e.getPostsFromApi=e.getPostsFromApi.bind(e),e.handleChangeInclude=e.handleChangeInclude.bind(e),e.handleChangeTaxonomy=e.handleChangeTaxonomy.bind(e),e.toggleOptionActive=e.toggleOptionActive.bind(e),e.toggleOptionCollapsible=e.toggleOptionCollapsible.bind(e),e.toggleOptionMouseover=e.toggleOptionMouseover.bind(e),e.toggleOptionHideEmpty=e.toggleOptionHideEmpty.bind(e),e.toggleOptionAdjustSeperatorSize=e.toggleOptionAdjustSeperatorSize.bind(e),e.toggleOptionAddPremiumFilter=e.toggleOptionAddPremiumFilter.bind(e),e.toggleOptionHideEmptyTabs=e.toggleOptionHideEmptyTabs.bind(e),e.toggleOptionShowTabs=e.toggleOptionShowTabs.bind(e),e.toggleOptionShowTagCount=e.toggleOptionShowTagCount.bind(e),e.getGroupsFromApi(),e.getTaxonomiesFromApi(),e.getPostsFromApi(),e}return i(t,e),p(t,null,[{key:"getInitialState",value:function(e){var t=[],n=["post_tag"];return e.include&&(t=e.include.split(",")),e.taxonomy&&(n=e.taxonomy.split(",")),{groups:[],taxonomies:[],posts:[],selectedGroups:t,selectedTaxonomies:n}}}]),p(t,[{key:"handleChangeInclude",value:function(e){var t=e.map(function(e){if(!isNaN(e.value))return e.value});this.setState({selectedGroups:t}),this.props.setAttributes({include:t.join(",")}),t.indexOf(0)>-1?this.props.setAttributes({show_not_assigned:1}):this.props.setAttributes({show_not_assigned:0})}},{key:"handleChangeTaxonomy",value:function(e){var t=e.map(function(e){if("string"===typeof e.value)return e.value});this.setState({selectedTaxonomies:t}),this.props.setAttributes({taxonomy:t.join(",")})}},{key:"getGroupsFromApi",value:function(){var e=this;Object(u.a)({path:this.groupsEndPoint}).then(function(t){t&&e.setState({groups:t})})}},{key:"getTaxonomiesFromApi",value:function(){var e=this;Object(u.a)({path:this.taxonomiesEndPoint}).then(function(t){t&&e.setState({taxonomies:t})})}},{key:"getPostsFromApi",value:function(){var e=this;Object(u.a)({path:C+"/wp-json/wp/v2/posts?per_page=100"}).then(function(t){if(t){var n=[{value:-1,label:c("off")},{value:0,label:c("use this post")}];t.forEach(function(e){n.push({value:e.id,label:e.title.rendered})}),e.setState({posts:n})}})}},{key:"toggleOptionActive",value:function(){var e=1===this.props.attributes.active?0:1;this.props.setAttributes({active:e})}},{key:"toggleOptionCollapsible",value:function(){var e=1===this.props.attributes.collapsible?0:1;this.props.setAttributes({collapsible:e})}},{key:"toggleOptionMouseover",value:function(){var e=1===this.props.attributes.mouseover?0:1;this.props.setAttributes({mouseover:e})}},{key:"toggleOptionHideEmpty",value:function(){var e=1===this.props.attributes.hide_empty?0:1;this.props.setAttributes({hide_empty:e})}},{key:"toggleOptionAdjustSeperatorSize",value:function(){var e=1===this.props.attributes.adjust_separator_size?0:1;this.props.setAttributes({adjust_separator_size:e})}},{key:"toggleOptionAddPremiumFilter",value:function(e){var t=1===this.props.attributes.add_premium_filter?0:1;this.props.setAttributes({add_premium_filter:t})}},{key:"toggleOptionHideEmptyTabs",value:function(){var e=1===this.props.attributes.hide_empty_tabs?0:1;this.props.setAttributes({hide_empty_tabs:e})}},{key:"toggleOptionShowTabs",value:function(){var e=1===this.props.attributes.show_tabs?0:1;this.props.setAttributes({show_tabs:e})}},{key:"toggleOptionShowTagCount",value:function(){var e=1===this.props.attributes.show_tag_count?0:1;this.props.setAttributes({show_tag_count:e})}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=t.active,o=t.add_premium_filter,i=t.adjust_separator_size,a=t.amount,l=t.append,u=t.assigned_class,p=t.collapsible,h=t.custom_title,d=t.div_class,f=t.div_id,m=t.groups_post_id,y=t.hide_empty,w=t.hide_empty_tabs,O=t.largest,C=t.link_append,A=t.link_target,x=t.mouseover,T=t.not_assigned_name,P=t.order,j=t.orderby,D=t.prepend,N=t.separator,I=t.separator_size,R=t.show_not_assigned,V=t.show_tag_count,M=t.show_tabs,B=t.smallest,z=t.tags_post_id,L=t.ul_class,K=[],W=[];return this.state.groups&&this.state.groups.length>0&&this.state.groups.forEach(function(e){K.push({value:e.term_group,label:e.label})}),this.state.taxonomies&&this.state.taxonomies.length>0&&this.state.taxonomies.forEach(function(e){W.push({value:e.slug,label:e.name})}),"gutenberg"!==t.source&&n({source:"gutenberg"}),[wp.element.createElement(g,{key:"inspector"},wp.element.createElement("div",{className:"chatt-mango-inspector-control"},wp.element.createElement(b,{title:c("Tags and Terms"),initialOpen:!1},wp.element.createElement(S,{topic:"taxonomy"}),wp.element.createElement("label",{htmlFor:"tg_input_taxonomy"},c("Include taxonomies")),wp.element.createElement(s.a,{id:"tg_input_taxonomy",onChange:this.handleChangeTaxonomy,value:this.state.selectedTaxonomies,options:W,multi:!0,closeOnSelect:!1,removeSelected:!0}),wp.element.createElement(S,{topic:"smallest"}),wp.element.createElement(E,{label:c("Smallest font size"),value:B?Number(B):12,onChange:function(e){e<=O&&e<73&&n({smallest:e})},min:6,max:72}),wp.element.createElement(S,{topic:"largest"}),wp.element.createElement(E,{label:c("Largest font size"),value:O?Number(O):22,onChange:function(e){B<=e&&e>5&&n({largest:e})},min:6,max:72}),wp.element.createElement(S,{topic:"amount"}),wp.element.createElement(E,{label:c("Tags per group")+(0==a?": "+c("unlimited"):""),value:a?Number(a):0,onChange:function(e){return n({amount:e})},min:0,max:200}),wp.element.createElement(S,{topic:"orderby"}),wp.element.createElement("label",{htmlFor:"tg_input_orderby"},c("Order tags by")),wp.element.createElement(s.a,{id:"tg_input_orderby",onChange:function(e){e&&n({orderby:e.value})},value:j&&"string"===typeof j?j:"name",options:[{value:"name",label:c("Name")},{value:"natural",label:c("Natural sorting")},{value:"count",label:c("Post count")},{value:"slug",label:c("Slug")},{value:"term_id",label:c("Term ID")},{value:"description",label:c("Description")}]}),wp.element.createElement(S,{topic:"order"}),wp.element.createElement("label",{htmlFor:"tg_input_order"},c("Sort order")),wp.element.createElement(s.a,{id:"tg_input_order",onChange:function(e){e&&n({order:e.value})},value:P&&"string"===typeof P?P.toUpperCase():"ASC",options:[{value:"ASC",label:c("Ascending")},{value:"DESC",label:c("Descending")}]}),wp.element.createElement(S,{topic:"hide_empty"}),wp.element.createElement(_,{label:c("Hide empty tags"),checked:y,onChange:this.toggleOptionHideEmpty}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"separator"}),wp.element.createElement("label",{htmlFor:"tg_input_separator"},c("Separator"))),wp.element.createElement(v,{id:"tg_input_separator",className:"input-control",value:N||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({separator:e})}}),N&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"adjust_separator_size"}),wp.element.createElement(_,{label:c("Adjust separator size to following tag"),checked:i,onChange:this.toggleOptionAdjustSeperatorSize}),!i&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"separator_size"}),wp.element.createElement(E,{label:c("Separator size"),value:I?Number(I):22,onChange:function(e){return n({separator_size:e})},min:6,max:144}))),wp.element.createElement(S,{topic:"prepend"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_prepend"},c("Prepend"))),wp.element.createElement(v,{id:"tg_input_prepend",className:"input-control",value:D||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({prepend:e})}}),wp.element.createElement(S,{topic:"append"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_append"},c("Append"))),wp.element.createElement(v,{id:"tg_input_append",className:"input-control",value:l||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({append:e})}}),!h&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"show_tag_count"}),wp.element.createElement(_,{label:c("Show post count in the tooltip"),checked:V,onChange:this.toggleOptionShowTagCount})),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"custom_title"}),wp.element.createElement("label",{htmlFor:"tg_input_custom_title"},c("Custom title"))),wp.element.createElement(v,{id:"tg_input_custom_title",className:"input-control",value:h||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({custom_title:e})}}),wp.element.createElement(S,{topic:"link_target"}),wp.element.createElement("label",{htmlFor:"tg_input_link_target"},c("Link target")),wp.element.createElement(s.a,{id:"tg_input_link_target",onChange:function(e){e&&n({link_target:e.value})},value:A&&"string"===typeof A?A:"_self",options:[{value:"_self",label:"_self"},{value:"_blank",label:"_blank"},{value:"_parent",label:"_parent"},{value:"_top",label:"_top"}]}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_link_append"},c("Append to link"))),wp.element.createElement(v,{id:"tg_input_link_append",className:"input-control",value:C||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({link_append:e})}}),F&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"add_premium_filter"}),wp.element.createElement(_,{label:c("Add filter to tags for multiple groups."),checked:o,onChange:this.toggleOptionAddPremiumFilter})),wp.element.createElement(S,{topic:"tags_post_id"}),wp.element.createElement("label",{htmlFor:"tg_input_tags_post_id"},c("Use tags of the following post:")),wp.element.createElement(s.a,{id:"tg_input_tags_post_id",onChange:function(e){e&&n({tags_post_id:e.value})},value:z,options:this.state.posts})),wp.element.createElement(b,{title:c("Groups and Tabs"),initialOpen:!1},wp.element.createElement(S,{topic:"show_tabs"}),wp.element.createElement(_,{label:c("Show tabs"),checked:M,onChange:this.toggleOptionShowTabs}),wp.element.createElement(S,{topic:"hide_empty_tabs"}),wp.element.createElement(_,{label:c("Hide empty tabs"),checked:w,onChange:this.toggleOptionHideEmptyTabs}),wp.element.createElement(S,{topic:"mouseover"}),wp.element.createElement(_,{label:c("Open tabs on mouseover"),checked:x,onChange:this.toggleOptionMouseover}),wp.element.createElement(S,{topic:"collapsible"}),wp.element.createElement(_,{label:c("Make panels collapsible"),checked:p,onChange:this.toggleOptionCollapsible}),wp.element.createElement(S,{topic:"active"}),wp.element.createElement(_,{label:c("Start with expanded tabs"),checked:r,onChange:this.toggleOptionActive}),wp.element.createElement(S,{topic:"include"}),wp.element.createElement("label",{htmlFor:"tg_input_include"},c("Include groups")),wp.element.createElement(s.a,{id:"tg_input_include",onChange:this.handleChangeInclude,value:this.state.selectedGroups,options:K,multi:!0,closeOnSelect:!1,removeSelected:!0}),1===R&&wp.element.createElement("div",null,wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_not_assigned_name"},c("Label on tab for not-assigned tags"))),wp.element.createElement(v,{id:"tg_input_not_assigned_name",className:"input-control",value:T||"not assigned",placeholder:c("Write here or leave empty."),onChange:function(e){return n({not_assigned_name:e})}})),wp.element.createElement(S,{topic:"groups_post_id"}),wp.element.createElement("label",{htmlFor:"tg_input_group_post_id"},c("Use groups of the following post:")),wp.element.createElement(s.a,{id:"tg_input_group_post_id",onChange:function(e){e&&n({groups_post_id:e.value})},value:m,options:this.state.posts})),wp.element.createElement(b,{title:c("Advanced Styling"),initialOpen:!1},wp.element.createElement("div",null,wp.element.createElement(S,{topic:"div_id"}),wp.element.createElement("label",{htmlFor:"tg_input_div_id"},'<div id="...">')),wp.element.createElement(v,{id:"tg_input_div_id",className:"input-control",value:f||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_id:e})}}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"div_class"}),wp.element.createElement("label",{htmlFor:"tg_input_div_class"},'<div class="...">')),wp.element.createElement(v,{id:"tg_input_div_class",className:"input-control",value:d||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_class:e})}}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"ul_class"}),wp.element.createElement("label",{htmlFor:"tg_input_ul_class"},'<ul class="...">')),wp.element.createElement(v,{id:"tg_input_ul_class",className:"input-control",value:L||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({ul_class:e})}}),-1!==z&&wp.element.createElement("div",null,wp.element.createElement("div",null,wp.element.createElement(S,{topic:"assigned_class"}),wp.element.createElement("label",{htmlFor:"tg_input_assigned_class"},'<a class="..._0"> or <a class="..._1">')),wp.element.createElement(v,{id:"tg_input_assigned_class",className:"input-control",value:u||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({assigned_class:e})}}))),wp.element.createElement("div",{className:"chatty-mango-help-transform"},wp.element.createElement(S,{topic:"transform-your-block-for-more-options"}),wp.element.createElement("div",{dangerouslySetInnerHTML:{__html:c("If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.")}})))),wp.element.createElement("div",{className:"chatty-mango-editor"},wp.element.createElement("table",{style:{border:"none"}},wp.element.createElement("tr",null,wp.element.createElement("td",null,wp.element.createElement("img",{src:k,alt:"logo",style:{float:"left",margin:15}})),wp.element.createElement("td",null,wp.element.createElement("h3",null,c("Tabbed Tag Cloud")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-admin-generic"},c("Select this block and customize the tag cloud in the Inspector.")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-welcome-view-site"},c("See the output with Preview."))))))]}}]),t}(w),P=f("chatty-mango/tag-groups-cloud-tabs",{title:c("Tabbed Tag Cloud"),icon:"tagcloud",category:"widgets",description:c("Show your tags in groups under tabs."),keywords:[c("tabs"),c("tag cloud"),"Chatty Mango"],html:!1,transforms:{to:[{type:"block",blocks:["core/shortcode"],transform:function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&null!==e[n]&&""!==e[n]&&"source"!==n&&P.attributes[n]&&e[n]!==P.attributes[n].default&&("number"===typeof e[n]?t.push(n+"="+e[n]):t.push(n+'="'+e[n]+'"'));var r="[tag_groups_cloud "+t.join(" ")+"]";return d("core/shortcode",{text:r})}}]},supports:{html:!1},attributes:{source:{type:"string",default:""},active:{type:"integer",default:1},adjust_separator_size:{type:"integer",default:1},add_premium_filter:{type:"integer",default:0},amount:{type:"integer",default:0},append:{type:"string",default:""},assigned_class:{type:"string",default:""},collapsible:{type:"integer",default:0},custom_title:{type:"string",default:""},div_class:{type:"string",default:"tag-groups-cloud"},div_id:{type:"string",default:""},exclude_terms:{type:"string",default:""},groups_post_id:{type:"integer",default:-1},hide_empty:{type:"integer",default:1},hide_empty_tabs:{type:"integer",default:0},include:{type:"string",default:""},include_terms:{type:"string",default:""},largest:{type:"integer",default:22},link_append:{type:"string",default:""},link_target:{type:"string",default:"_self"},mouseover:{type:"integer",default:0},not_assigned_name:{type:"string",default:""},order:{type:"string",default:"ASC"},orderby:{type:"string",default:"name"},prepend:{type:"string",default:""},separator_size:{type:"integer",default:22},separator:{tpye:"string",default:""},show_not_assigned:{type:"integer",default:0},show_all_groups:{type:"integer",default:0},show_tabs:{type:"integer",default:1},show_tag_count:{type:"integer",default:1},smallest:{type:"integer",default:12},tags_post_id:{type:"integer",default:-1},taxonomy:{type:"string",default:""},ul_class:{type:"string",default:""}},edit:T,save:function(e){return null}})},function(e,t){},function(e,t){},function(e,t,n){"use strict";function r(e){return e&&e.__esModule?e:{default:e}}function o(e,t){var n={};for(var r in e)t.indexOf(r)>=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function a(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function l(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}Object.defineProperty(t,"__esModule",{value:!0});var s=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},u=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),p=n(9),c=r(p),h=n(10),d=r(h),f={position:"absolute",top:0,left:0,visibility:"hidden",height:0,overflow:"scroll",whiteSpace:"pre"},m=["extraWidth","injectStyles","inputClassName","inputRef","inputStyle","minWidth","onAutosize","placeholderIsMinWidth"],g=function(e){return m.forEach(function(t){return delete e[t]}),e},v=function(e,t){t.style.fontSize=e.fontSize,t.style.fontFamily=e.fontFamily,t.style.fontWeight=e.fontWeight,t.style.fontStyle=e.fontStyle,t.style.letterSpacing=e.letterSpacing,t.style.textTransform=e.textTransform},y=!("undefined"===typeof window||!window.navigator)&&/MSIE |Trident\/|Edge\//.test(window.navigator.userAgent),b=function(){return y?"_"+Math.random().toString(36).substr(2,12):void 0},_=function(e){function t(e){i(this,t);var n=a(this,(t.__proto__||Object.getPrototypeOf(t)).call(this,e));return n.inputRef=function(e){n.input=e,"function"===typeof n.props.inputRef&&n.props.inputRef(e)},n.placeHolderSizerRef=function(e){n.placeHolderSizer=e},n.sizerRef=function(e){n.sizer=e},n.state={inputWidth:e.minWidth,inputId:e.id||b()},n}return l(t,e),u(t,[{key:"componentDidMount",value:function(){this.mounted=!0,this.copyInputStyles(),this.updateInputWidth()}},{key:"componentWillReceiveProps",value:function(e){var t=e.id;t!==this.props.id&&this.setState({inputId:t||b()})}},{key:"componentDidUpdate",value:function(e,t){t.inputWidth!==this.state.inputWidth&&"function"===typeof this.props.onAutosize&&this.props.onAutosize(this.state.inputWidth),this.updateInputWidth()}},{key:"componentWillUnmount",value:function(){this.mounted=!1}},{key:"copyInputStyles",value:function(){if(this.mounted&&window.getComputedStyle){var e=this.input&&window.getComputedStyle(this.input);e&&(v(e,this.sizer),this.placeHolderSizer&&v(e,this.placeHolderSizer))}}},{key:"updateInputWidth",value:function(){if(this.mounted&&this.sizer&&"undefined"!==typeof this.sizer.scrollWidth){var e=void 0;e=this.props.placeholder&&(!this.props.value||this.props.value&&this.props.placeholderIsMinWidth)?Math.max(this.sizer.scrollWidth,this.placeHolderSizer.scrollWidth)+2:this.sizer.scrollWidth+2;e+="number"===this.props.type&&void 0===this.props.extraWidth?16:parseInt(this.props.extraWidth)||0,e<this.props.minWidth&&(e=this.props.minWidth),e!==this.state.inputWidth&&this.setState({inputWidth:e})}}},{key:"getInput",value:function(){return this.input}},{key:"focus",value:function(){this.input.focus()}},{key:"blur",value:function(){this.input.blur()}},{key:"select",value:function(){this.input.select()}},{key:"renderStyles",value:function(){var e=this.props.injectStyles;return y&&e?c.default.createElement("style",{dangerouslySetInnerHTML:{__html:"input#"+this.state.inputId+"::-ms-clear {display: none;}"}}):null}},{key:"render",value:function(){var e=[this.props.defaultValue,this.props.value,""].reduce(function(e,t){return null!==e&&void 0!==e?e:t}),t=s({},this.props.style);t.display||(t.display="inline-block");var n=s({boxSizing:"content-box",width:this.state.inputWidth+"px"},this.props.inputStyle),r=o(this.props,[]);return g(r),r.className=this.props.inputClassName,r.id=this.state.inputId,r.style=n,c.default.createElement("div",{className:this.props.className,style:t},this.renderStyles(),c.default.createElement("input",s({},r,{ref:this.inputRef})),c.default.createElement("div",{ref:this.sizerRef,style:f},e),this.props.placeholder?c.default.createElement("div",{ref:this.placeHolderSizerRef,style:f},this.props.placeholder):null)}}]),t}(p.Component);_.propTypes={className:d.default.string,defaultValue:d.default.any,extraWidth:d.default.oneOfType([d.default.number,d.default.string]),id:d.default.string,injectStyles:d.default.bool,inputClassName:d.default.string,inputRef:d.default.func,inputStyle:d.default.object,minWidth:d.default.oneOfType([d.default.number,d.default.string]),onAutosize:d.default.func,onChange:d.default.func,placeholder:d.default.string,placeholderIsMinWidth:d.default.bool,style:d.default.object,value:d.default.any},_.defaultProps={minWidth:1,injectStyles:!0},t.default=_},function(e,t,n){"use strict";(function(t){var r=n(3),o=n(4),i=n(11),a=n(20),l=n(5),s=n(21);e.exports=function(e,n){function u(e){var t=e&&(F&&e[F]||e[k]);if("function"===typeof t)return t}function p(e,t){return e===t?0!==e||1/e===1/t:e!==e&&t!==t}function c(e){this.message=e,this.stack=""}function h(e){function r(r,u,p,h,d,f,m){if(h=h||S,f=f||p,m!==l)if(n)o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use `PropTypes.checkPropTypes()` to call them. Read more at http://fb.me/use-check-prop-types");else if("production"!==t.env.NODE_ENV&&"undefined"!==typeof console){var g=h+":"+p;!a[g]&&s<3&&(i(!1,"You are manually calling a React.PropTypes validation function for the `%s` prop on `%s`. This is deprecated and will throw in the standalone `prop-types` package. You may be seeing this warning due to a third-party PropTypes library. See https://fb.me/react-warning-dont-call-proptypes for details.",f,h),a[g]=!0,s++)}return null==u[p]?r?new c(null===u[p]?"The "+d+" `"+f+"` is marked as required in `"+h+"`, but its value is `null`.":"The "+d+" `"+f+"` is marked as required in `"+h+"`, but its value is `undefined`."):null:e(u,p,h,d,f)}if("production"!==t.env.NODE_ENV)var a={},s=0;var u=r.bind(null,!1);return u.isRequired=r.bind(null,!0),u}function d(e){function t(t,n,r,o,i,a){var l=t[n];if(O(l)!==e)return new c("Invalid "+o+" `"+i+"` of type `"+C(l)+"` supplied to `"+r+"`, expected `"+e+"`.");return null}return h(t)}function f(e){function t(t,n,r,o,i){if("function"!==typeof e)return new c("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside arrayOf.");var a=t[n];if(!Array.isArray(a)){return new c("Invalid "+o+" `"+i+"` of type `"+O(a)+"` supplied to `"+r+"`, expected an array.")}for(var s=0;s<a.length;s++){var u=e(a,s,r,o,i+"["+s+"]",l);if(u instanceof Error)return u}return null}return h(t)}function m(e){function t(t,n,r,o,i){if(!(t[n]instanceof e)){var a=e.name||S;return new c("Invalid "+o+" `"+i+"` of type `"+x(t[n])+"` supplied to `"+r+"`, expected instance of `"+a+"`.")}return null}return h(t)}function g(e){function n(t,n,r,o,i){for(var a=t[n],l=0;l<e.length;l++)if(p(a,e[l]))return null;return new c("Invalid "+o+" `"+i+"` of value `"+a+"` supplied to `"+r+"`, expected one of "+JSON.stringify(e)+".")}return Array.isArray(e)?h(n):("production"!==t.env.NODE_ENV&&i(!1,"Invalid argument supplied to oneOf, expected an instance of array."),r.thatReturnsNull)}function v(e){function t(t,n,r,o,i){if("function"!==typeof e)return new c("Property `"+i+"` of component `"+r+"` has invalid PropType notation inside objectOf.");var a=t[n],s=O(a);if("object"!==s)return new c("Invalid "+o+" `"+i+"` of type `"+s+"` supplied to `"+r+"`, expected an object.");for(var u in a)if(a.hasOwnProperty(u)){var p=e(a,u,r,o,i+"."+u,l);if(p instanceof Error)return p}return null}return h(t)}function y(e){function n(t,n,r,o,i){for(var a=0;a<e.length;a++){if(null==(0,e[a])(t,n,r,o,i,l))return null}return new c("Invalid "+o+" `"+i+"` supplied to `"+r+"`.")}if(!Array.isArray(e))return"production"!==t.env.NODE_ENV&&i(!1,"Invalid argument supplied to oneOfType, expected an instance of array."),r.thatReturnsNull;for(var o=0;o<e.length;o++){var a=e[o];if("function"!==typeof a)return i(!1,"Invalid argument supplied to oneOfType. Expected an array of check functions, but received %s at index %s.",A(a),o),r.thatReturnsNull}return h(n)}function b(e){function t(t,n,r,o,i){var a=t[n],s=O(a);if("object"!==s)return new c("Invalid "+o+" `"+i+"` of type `"+s+"` supplied to `"+r+"`, expected `object`.");for(var u in e){var p=e[u];if(p){var h=p(a,u,r,o,i+"."+u,l);if(h)return h}}return null}return h(t)}function _(e){function t(t,n,r,o,i){var s=t[n],u=O(s);if("object"!==u)return new c("Invalid "+o+" `"+i+"` of type `"+u+"` supplied to `"+r+"`, expected `object`.");var p=a({},t[n],e);for(var h in p){var d=e[h];if(!d)return new c("Invalid "+o+" `"+i+"` key `"+h+"` supplied to `"+r+"`.\nBad object: "+JSON.stringify(t[n],null," ")+"\nValid keys: "+JSON.stringify(Object.keys(e),null," "));var f=d(s,h,r,o,i+"."+h,l);if(f)return f}return null}return h(t)}function E(t){switch(typeof t){case"number":case"string":case"undefined":return!0;case"boolean":return!t;case"object":if(Array.isArray(t))return t.every(E);if(null===t||e(t))return!0;var n=u(t);if(!n)return!1;var r,o=n.call(t);if(n!==t.entries){for(;!(r=o.next()).done;)if(!E(r.value))return!1}else for(;!(r=o.next()).done;){var i=r.value;if(i&&!E(i[1]))return!1}return!0;default:return!1}}function w(e,t){return"symbol"===e||("Symbol"===t["@@toStringTag"]||"function"===typeof Symbol&&t instanceof Symbol)}function O(e){var t=typeof e;return Array.isArray(e)?"array":e instanceof RegExp?"object":w(t,e)?"symbol":t}function C(e){if("undefined"===typeof e||null===e)return""+e;var t=O(e);if("object"===t){if(e instanceof Date)return"date";if(e instanceof RegExp)return"regexp"}return t}function A(e){var t=C(e);switch(t){case"array":case"object":return"an "+t;case"boolean":case"date":case"regexp":return"a "+t;default:return t}}function x(e){return e.constructor&&e.constructor.name?e.constructor.name:S}var F="function"===typeof Symbol&&Symbol.iterator,k="@@iterator",S="<<anonymous>>",T={array:d("array"),bool:d("boolean"),func:d("function"),number:d("number"),object:d("object"),string:d("string"),symbol:d("symbol"),any:function(){return h(r.thatReturnsNull)}(),arrayOf:f,element:function(){function t(t,n,r,o,i){var a=t[n];if(!e(a)){return new c("Invalid "+o+" `"+i+"` of type `"+O(a)+"` supplied to `"+r+"`, expected a single ReactElement.")}return null}return h(t)}(),instanceOf:m,node:function(){function e(e,t,n,r,o){return E(e[t])?null:new c("Invalid "+r+" `"+o+"` supplied to `"+n+"`, expected a ReactNode.")}return h(e)}(),objectOf:v,oneOf:g,oneOfType:y,shape:b,exact:_};return c.prototype=Error.prototype,T.checkPropTypes=s,T.PropTypes=T,T}}).call(t,n(0))},function(e,t,n){"use strict";function r(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}var o=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map(function(e){return t[e]}).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach(function(e){r[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(e){return!1}}()?Object.assign:function(e,t){for(var n,l,s=r(e),u=1;u<arguments.length;u++){n=Object(arguments[u]);for(var p in n)i.call(n,p)&&(s[p]=n[p]);if(o){l=o(n);for(var c=0;c<l.length;c++)a.call(n,l[c])&&(s[l[c]]=n[l[c]])}}return s}},function(e,t,n){"use strict";(function(t){function r(e,n,r,s,u){if("production"!==t.env.NODE_ENV)for(var p in e)if(e.hasOwnProperty(p)){var c;try{o("function"===typeof e[p],"%s: %s type `%s` is invalid; it must be a function, usually from the `prop-types` package, but received `%s`.",s||"React class",r,p,typeof e[p]),c=e[p](n,p,s,r,null,a)}catch(e){c=e}if(i(!c||c instanceof Error,"%s: type specification of %s `%s` is invalid; the type checker function must return `null` or an `Error` but returned a %s. You may have forgotten to pass an argument to the type checker creator (arrayOf, instanceOf, objectOf, oneOf, oneOfType, and shape all require an argument).",s||"React class",r,p,typeof c),c instanceof Error&&!(c.message in l)){l[c.message]=!0;var h=u?u():"";i(!1,"Failed %s type: %s%s",r,c.message,null!=h?h:"")}}}if("production"!==t.env.NODE_ENV)var o=n(4),i=n(11),a=n(5),l={};e.exports=r}).call(t,n(0))},function(e,t,n){"use strict";var r=n(3),o=n(4),i=n(5);e.exports=function(){function e(e,t,n,r,a,l){l!==i&&o(!1,"Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types")}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t};return n.checkPropTypes=r,n.PropTypes=n,n}},function(e,t,n){var r,o;!function(){"use strict";function n(){for(var e=[],t=0;t<arguments.length;t++){var r=arguments[t];if(r){var o=typeof r;if("string"===o||"number"===o)e.push(r);else if(Array.isArray(r))e.push(n.apply(null,r));else if("object"===o)for(var a in r)i.call(r,a)&&r[a]&&e.push(a)}}return e.join(" ")}var i={}.hasOwnProperty;"undefined"!==typeof e&&e.exports?e.exports=n:(r=[],void 0!==(o=function(){return n}.apply(t,r))&&(e.exports=o))}()},function(e,t){e.exports=ReactDOM},function(e,t,n){e.exports=n(26)},function(e,t,n){var r=function(){return this||"object"===typeof self&&self}()||Function("return this")(),o=r.regeneratorRuntime&&Object.getOwnPropertyNames(r).indexOf("regeneratorRuntime")>=0,i=o&&r.regeneratorRuntime;if(r.regeneratorRuntime=void 0,e.exports=n(27),o)r.regeneratorRuntime=i;else try{delete r.regeneratorRuntime}catch(e){r.regeneratorRuntime=void 0}},function(e,t){!function(t){"use strict";function n(e,t,n,r){var i=t&&t.prototype instanceof o?t:o,a=Object.create(i.prototype),l=new d(r||[]);return a._invoke=u(e,n,l),a}function r(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}function o(){}function i(){}function a(){}function l(e){["next","throw","return"].forEach(function(t){e[t]=function(e){return this._invoke(t,e)}})}function s(e){function t(n,o,i,a){var l=r(e[n],e,o);if("throw"!==l.type){var s=l.arg,u=s.value;return u&&"object"===typeof u&&y.call(u,"__await")?Promise.resolve(u.__await).then(function(e){t("next",e,i,a)},function(e){t("throw",e,i,a)}):Promise.resolve(u).then(function(e){s.value=e,i(s)},function(e){return t("throw",e,i,a)})}a(l.arg)}function n(e,n){function r(){return new Promise(function(r,o){t(e,n,r,o)})}return o=o?o.then(r,r):r()}var o;this._invoke=n}function u(e,t,n){var o=A;return function(i,a){if(o===F)throw new Error("Generator is already running");if(o===k){if("throw"===i)throw a;return m()}for(n.method=i,n.arg=a;;){var l=n.delegate;if(l){var s=p(l,n);if(s){if(s===S)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(o===A)throw o=k,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);o=F;var u=r(e,t,n);if("normal"===u.type){if(o=n.done?k:x,u.arg===S)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(o=k,n.method="throw",n.arg=u.arg)}}}function p(e,t){var n=e.iterator[t.method];if(n===g){if(t.delegate=null,"throw"===t.method){if(e.iterator.return&&(t.method="return",t.arg=g,p(e,t),"throw"===t.method))return S;t.method="throw",t.arg=new TypeError("The iterator does not provide a 'throw' method")}return S}var o=r(n,e.iterator,t.arg);if("throw"===o.type)return t.method="throw",t.arg=o.arg,t.delegate=null,S;var i=o.arg;return i?i.done?(t[e.resultName]=i.value,t.next=e.nextLoc,"return"!==t.method&&(t.method="next",t.arg=g),t.delegate=null,S):i:(t.method="throw",t.arg=new TypeError("iterator result is not an object"),t.delegate=null,S)}function c(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function h(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function d(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(c,this),this.reset(!0)}function f(e){if(e){var t=e[_];if(t)return t.call(e);if("function"===typeof e.next)return e;if(!isNaN(e.length)){var n=-1,r=function t(){for(;++n<e.length;)if(y.call(e,n))return t.value=e[n],t.done=!1,t;return t.value=g,t.done=!0,t};return r.next=r}}return{next:m}}function m(){return{value:g,done:!0}}var g,v=Object.prototype,y=v.hasOwnProperty,b="function"===typeof Symbol?Symbol:{},_=b.iterator||"@@iterator",E=b.asyncIterator||"@@asyncIterator",w=b.toStringTag||"@@toStringTag",O="object"===typeof e,C=t.regeneratorRuntime;if(C)return void(O&&(e.exports=C));C=t.regeneratorRuntime=O?e.exports:{},C.wrap=n;var A="suspendedStart",x="suspendedYield",F="executing",k="completed",S={},T={};T[_]=function(){return this};var P=Object.getPrototypeOf,j=P&&P(P(f([])));j&&j!==v&&y.call(j,_)&&(T=j);var D=a.prototype=o.prototype=Object.create(T);i.prototype=D.constructor=a,a.constructor=i,a[w]=i.displayName="GeneratorFunction",C.isGeneratorFunction=function(e){var t="function"===typeof e&&e.constructor;return!!t&&(t===i||"GeneratorFunction"===(t.displayName||t.name))},C.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,a):(e.__proto__=a,w in e||(e[w]="GeneratorFunction")),e.prototype=Object.create(D),e},C.awrap=function(e){return{__await:e}},l(s.prototype),s.prototype[E]=function(){return this},C.AsyncIterator=s,C.async=function(e,t,r,o){var i=new s(n(e,t,r,o));return C.isGeneratorFunction(t)?i:i.next().then(function(e){return e.done?e.value:i.next()})},l(D),D[w]="Generator",D[_]=function(){return this},D.toString=function(){return"[object Generator]"},C.keys=function(e){var t=[];for(var n in e)t.push(n);return t.reverse(),function n(){for(;t.length;){var r=t.pop();if(r in e)return n.value=r,n.done=!1,n}return n.done=!0,n}},C.values=f,d.prototype={constructor:d,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=g,this.done=!1,this.delegate=null,this.method="next",this.arg=g,this.tryEntries.forEach(h),!e)for(var t in this)"t"===t.charAt(0)&&y.call(this,t)&&!isNaN(+t.slice(1))&&(this[t]=g)},stop:function(){this.done=!0;var e=this.tryEntries[0],t=e.completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){function t(t,r){return i.type="throw",i.arg=e,n.next=t,r&&(n.method="next",n.arg=g),!!r}if(this.done)throw e;for(var n=this,r=this.tryEntries.length-1;r>=0;--r){var o=this.tryEntries[r],i=o.completion;if("root"===o.tryLoc)return t("end");if(o.tryLoc<=this.prev){var a=y.call(o,"catchLoc"),l=y.call(o,"finallyLoc");if(a&&l){if(this.prev<o.catchLoc)return t(o.catchLoc,!0);if(this.prev<o.finallyLoc)return t(o.finallyLoc)}else if(a){if(this.prev<o.catchLoc)return t(o.catchLoc,!0)}else{if(!l)throw new Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return t(o.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&y.call(r,"finallyLoc")&&this.prev<r.finallyLoc){var o=r;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,S):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),S},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),h(n),S}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var o=r.arg;h(n)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(e,t,n){return this.delegate={iterator:f(e),resultName:t,nextLoc:n},"next"===this.method&&(this.arg=g),S}}}(function(){return this||"object"===typeof self&&self}()||Function("return this")())},function(e,t,n){"use strict";function r(e,t,n,r,o,i,a){try{var l=e[i](a),s=l.value}catch(e){return void n(e)}l.done?t(s):Promise.resolve(s).then(r,o)}function o(e){return function(){var t=this,n=arguments;return new Promise(function(o,i){function a(e){r(s,o,i,a,l,"next",e)}function l(e){r(s,o,i,a,l,"throw",e)}var s=e.apply(t,n);a(void 0)})}}t.a=o},function(e,t,n){"use strict";function r(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}t.a=r},function(e,t,n){"use strict";function r(e,t){if(null==e)return{};var n,r,i=Object(o.a)(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}t.a=r;var o=n(31)},function(e,t,n){"use strict";function r(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r<i.length;r++)n=i[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}t.a=r},function(e,t,n){"use strict";function r(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{"":{}},t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"default";a||(a=new s.a({domain:"default",locale_data:{default:{}}})),a.options.locale_data[t]=Object.assign({},a.options.locale_data[t],e)}function o(){return a||r(),a}function i(e,t){return h(t,void 0,e)}t.a=i;var a,l=n(33),s=n.n(l),u=n(34),p=n.n(u),c=p()(console.error),h=p()(function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"default",t=arguments.length>1?arguments[1]:void 0,n=arguments.length>2?arguments[2]:void 0,r=arguments.length>3?arguments[3]:void 0,i=arguments.length>4?arguments[4]:void 0;try{return o().dcnpgettext(e,t,n,r,i)}catch(e){return c("Jed localization error: \n\n"+e.toString()),n}})},function(e,t,n){!function(n,r){function o(e){return d.PF.compile(e||"nplurals=2; plural=(n != 1);")}function i(e,t){this._key=e,this._i18n=t}var a=Array.prototype,l=Object.prototype,s=a.slice,u=l.hasOwnProperty,p=a.forEach,c={},h={forEach:function(e,t,n){var r,o,i;if(null!==e)if(p&&e.forEach===p)e.forEach(t,n);else if(e.length===+e.length){for(r=0,o=e.length;r<o;r++)if(r in e&&t.call(n,e[r],r,e)===c)return}else for(i in e)if(u.call(e,i)&&t.call(n,e[i],i,e)===c)return},extend:function(e){return this.forEach(s.call(arguments,1),function(t){for(var n in t)e[n]=t[n]}),e}},d=function(e){if(this.defaults={locale_data:{messages:{"":{domain:"messages",lang:"en",plural_forms:"nplurals=2; plural=(n != 1);"}}},domain:"messages",debug:!1},this.options=h.extend({},this.defaults,e),this.textdomain(this.options.domain),e.domain&&!this.options.locale_data[this.options.domain])throw new Error("Text domain set to non-existent domain: `"+e.domain+"`")};d.context_delimiter=String.fromCharCode(4),h.extend(i.prototype,{onDomain:function(e){return this._domain=e,this},withContext:function(e){return this._context=e,this},ifPlural:function(e,t){return this._val=e,this._pkey=t,this},fetch:function(e){return"[object Array]"!={}.toString.call(e)&&(e=[].slice.call(arguments,0)),(e&&e.length?d.sprintf:function(e){return e})(this._i18n.dcnpgettext(this._domain,this._context,this._key,this._pkey,this._val),e)}}),h.extend(d.prototype,{translate:function(e){return new i(e,this)},textdomain:function(e){if(!e)return this._textdomain;this._textdomain=e},gettext:function(e){return this.dcnpgettext.call(this,void 0,void 0,e)},dgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},dcgettext:function(e,t){return this.dcnpgettext.call(this,e,void 0,t)},ngettext:function(e,t,n){return this.dcnpgettext.call(this,void 0,void 0,e,t,n)},dngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},dcngettext:function(e,t,n,r){return this.dcnpgettext.call(this,e,void 0,t,n,r)},pgettext:function(e,t){return this.dcnpgettext.call(this,void 0,e,t)},dpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},dcpgettext:function(e,t,n){return this.dcnpgettext.call(this,e,t,n)},npgettext:function(e,t,n,r){return this.dcnpgettext.call(this,void 0,e,t,n,r)},dnpgettext:function(e,t,n,r,o){return this.dcnpgettext.call(this,e,t,n,r,o)},dcnpgettext:function(e,t,n,r,i){r=r||n,e=e||this._textdomain;var a;if(!this.options)return a=new d,a.dcnpgettext.call(a,void 0,void 0,n,r,i);if(!this.options.locale_data)throw new Error("No locale data provided.");if(!this.options.locale_data[e])throw new Error("Domain `"+e+"` was not found.");if(!this.options.locale_data[e][""])throw new Error("No locale meta information provided.");if(!n)throw new Error("No translation key found.");var l,s,u,p=t?t+d.context_delimiter+n:n,c=this.options.locale_data,h=c[e],f=(c.messages||this.defaults.locale_data.messages)[""],m=h[""].plural_forms||h[""]["Plural-Forms"]||h[""]["plural-forms"]||f.plural_forms||f["Plural-Forms"]||f["plural-forms"];if(void 0===i)u=0;else{if("number"!=typeof i&&(i=parseInt(i,10),isNaN(i)))throw new Error("The number that was passed in is not a number.");u=o(m)(i)}if(!h)throw new Error("No domain named `"+e+"` could be found.");return!(l=h[p])||u>l.length?(this.options.missing_key_callback&&this.options.missing_key_callback(p,e),s=[n,r],!0===this.options.debug&&console.log(s[o(m)(i)]),s[o()(i)]):(s=l[u])||(s=[n,r],s[o()(i)])}});var f=function(){function e(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function t(e,t){for(var n=[];t>0;n[--t]=e);return n.join("")}var n=function(){return n.cache.hasOwnProperty(arguments[0])||(n.cache[arguments[0]]=n.parse(arguments[0])),n.format.call(null,n.cache[arguments[0]],arguments)};return n.format=function(n,r){var o,i,a,l,s,u,p,c=1,h=n.length,d="",m=[];for(i=0;i<h;i++)if("string"===(d=e(n[i])))m.push(n[i]);else if("array"===d){if(l=n[i],l[2])for(o=r[c],a=0;a<l[2].length;a++){if(!o.hasOwnProperty(l[2][a]))throw f('[sprintf] property "%s" does not exist',l[2][a]);o=o[l[2][a]]}else o=l[1]?r[l[1]]:r[c++];if(/[^s]/.test(l[8])&&"number"!=e(o))throw f("[sprintf] expecting number but found %s",e(o));switch("undefined"!=typeof o&&null!==o||(o=""),l[8]){case"b":o=o.toString(2);break;case"c":o=String.fromCharCode(o);break;case"d":o=parseInt(o,10);break;case"e":o=l[7]?o.toExponential(l[7]):o.toExponential();break;case"f":o=l[7]?parseFloat(o).toFixed(l[7]):parseFloat(o);break;case"o":o=o.toString(8);break;case"s":o=(o=String(o))&&l[7]?o.substring(0,l[7]):o;break;case"u":o=Math.abs(o);break;case"x":o=o.toString(16);break;case"X":o=o.toString(16).toUpperCase()}o=/[def]/.test(l[8])&&l[3]&&o>=0?"+"+o:o,u=l[4]?"0"==l[4]?"0":l[4].charAt(1):" ",p=l[6]-String(o).length,s=l[6]?t(u,p):"",m.push(l[5]?o+s:s+o)}return m.join("")},n.cache={},n.parse=function(e){for(var t=e,n=[],r=[],o=0;t;){if(null!==(n=/^[^\x25]+/.exec(t)))r.push(n[0]);else if(null!==(n=/^\x25{2}/.exec(t)))r.push("%");else{if(null===(n=/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-fosuxX])/.exec(t)))throw"[sprintf] huh?";if(n[2]){o|=1;var i=[],a=n[2],l=[];if(null===(l=/^([a-z_][a-z_\d]*)/i.exec(a)))throw"[sprintf] huh?";for(i.push(l[1]);""!==(a=a.substring(l[0].length));)if(null!==(l=/^\.([a-z_][a-z_\d]*)/i.exec(a)))i.push(l[1]);else{if(null===(l=/^\[(\d+)\]/.exec(a)))throw"[sprintf] huh?";i.push(l[1])}n[2]=i}else o|=2;if(3===o)throw"[sprintf] mixing positional and named placeholders is not (yet) supported";r.push(n)}t=t.substring(n[0].length)}return r},n}(),m=function(e,t){return t.unshift(e),f.apply(null,t)};d.parse_plural=function(e,t){return e=e.replace(/n/g,t),d.parse_expression(e)},d.sprintf=function(e,t){return"[object Array]"=={}.toString.call(t)?m(e,[].slice.call(t)):f.apply(this,[].slice.call(arguments))},d.prototype.sprintf=function(){return d.sprintf.apply(this,arguments)},d.PF={},d.PF.parse=function(e){var t=d.PF.extractPluralExpr(e);return d.PF.parser.parse.call(d.PF.parser,t)},d.PF.compile=function(e){function t(e){return!0===e?1:e||0}var n=d.PF.parse(e);return function(e){return t(d.PF.interpreter(n)(e))}},d.PF.interpreter=function(e){return function(t){switch(e.type){case"GROUP":return d.PF.interpreter(e.expr)(t);case"TERNARY":return d.PF.interpreter(e.expr)(t)?d.PF.interpreter(e.truthy)(t):d.PF.interpreter(e.falsey)(t);case"OR":return d.PF.interpreter(e.left)(t)||d.PF.interpreter(e.right)(t);case"AND":return d.PF.interpreter(e.left)(t)&&d.PF.interpreter(e.right)(t);case"LT":return d.PF.interpreter(e.left)(t)<d.PF.interpreter(e.right)(t);case"GT":return d.PF.interpreter(e.left)(t)>d.PF.interpreter(e.right)(t);case"LTE":return d.PF.interpreter(e.left)(t)<=d.PF.interpreter(e.right)(t);case"GTE":return d.PF.interpreter(e.left)(t)>=d.PF.interpreter(e.right)(t);case"EQ":return d.PF.interpreter(e.left)(t)==d.PF.interpreter(e.right)(t);case"NEQ":return d.PF.interpreter(e.left)(t)!=d.PF.interpreter(e.right)(t);case"MOD":return d.PF.interpreter(e.left)(t)%d.PF.interpreter(e.right)(t);case"VAR":return t;case"NUM":return e.val;default:throw new Error("Invalid Token found.")}}},d.PF.extractPluralExpr=function(e){e=e.replace(/^\s\s*/,"").replace(/\s\s*$/,""),/;\s*$/.test(e)||(e=e.concat(";"));var t,n=/nplurals\=(\d+);/,r=/plural\=(.*);/,o=e.match(n),i={};if(!(o.length>1))throw new Error("nplurals not found in plural_forms string: "+e);if(i.nplurals=o[1],e=e.replace(n,""),!((t=e.match(r))&&t.length>1))throw new Error("`plural` expression not found: "+e);return t[1]},d.PF.parser=function(){var e={trace:function(){},yy:{},symbols_:{error:2,expressions:3,e:4,EOF:5,"?":6,":":7,"||":8,"&&":9,"<":10,"<=":11,">":12,">=":13,"!=":14,"==":15,"%":16,"(":17,")":18,n:19,NUMBER:20,$accept:0,$end:1},terminals_:{2:"error",5:"EOF",6:"?",7:":",8:"||",9:"&&",10:"<",11:"<=",12:">",13:">=",14:"!=",15:"==",16:"%",17:"(",18:")",19:"n",20:"NUMBER"},productions_:[0,[3,2],[4,5],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,3],[4,1],[4,1]],performAction:function(e,t,n,r,o,i,a){var l=i.length-1;switch(o){case 1:return{type:"GROUP",expr:i[l-1]};case 2:this.$={type:"TERNARY",expr:i[l-4],truthy:i[l-2],falsey:i[l]};break;case 3:this.$={type:"OR",left:i[l-2],right:i[l]};break;case 4:this.$={type:"AND",left:i[l-2],right:i[l]};break;case 5:this.$={type:"LT",left:i[l-2],right:i[l]};break;case 6:this.$={type:"LTE",left:i[l-2],right:i[l]};break;case 7:this.$={type:"GT",left:i[l-2],right:i[l]};break;case 8:this.$={type:"GTE",left:i[l-2],right:i[l]};break;case 9:this.$={type:"NEQ",left:i[l-2],right:i[l]};break;case 10:this.$={type:"EQ",left:i[l-2],right:i[l]};break;case 11:this.$={type:"MOD",left:i[l-2],right:i[l]};break;case 12:this.$={type:"GROUP",expr:i[l-1]};break;case 13:this.$={type:"VAR"};break;case 14:this.$={type:"NUM",val:Number(e)}}},table:[{3:1,4:2,17:[1,3],19:[1,4],20:[1,5]},{1:[3]},{5:[1,6],6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{4:17,17:[1,3],19:[1,4],20:[1,5]},{5:[2,13],6:[2,13],7:[2,13],8:[2,13],9:[2,13],10:[2,13],11:[2,13],12:[2,13],13:[2,13],14:[2,13],15:[2,13],16:[2,13],18:[2,13]},{5:[2,14],6:[2,14],7:[2,14],8:[2,14],9:[2,14],10:[2,14],11:[2,14],12:[2,14],13:[2,14],14:[2,14],15:[2,14],16:[2,14],18:[2,14]},{1:[2,1]},{4:18,17:[1,3],19:[1,4],20:[1,5]},{4:19,17:[1,3],19:[1,4],20:[1,5]},{4:20,17:[1,3],19:[1,4],20:[1,5]},{4:21,17:[1,3],19:[1,4],20:[1,5]},{4:22,17:[1,3],19:[1,4],20:[1,5]},{4:23,17:[1,3],19:[1,4],20:[1,5]},{4:24,17:[1,3],19:[1,4],20:[1,5]},{4:25,17:[1,3],19:[1,4],20:[1,5]},{4:26,17:[1,3],19:[1,4],20:[1,5]},{4:27,17:[1,3],19:[1,4],20:[1,5]},{6:[1,7],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[1,28]},{6:[1,7],7:[1,29],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16]},{5:[2,3],6:[2,3],7:[2,3],8:[2,3],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,3]},{5:[2,4],6:[2,4],7:[2,4],8:[2,4],9:[2,4],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,4]},{5:[2,5],6:[2,5],7:[2,5],8:[2,5],9:[2,5],10:[2,5],11:[2,5],12:[2,5],13:[2,5],14:[2,5],15:[2,5],16:[1,16],18:[2,5]},{5:[2,6],6:[2,6],7:[2,6],8:[2,6],9:[2,6],10:[2,6],11:[2,6],12:[2,6],13:[2,6],14:[2,6],15:[2,6],16:[1,16],18:[2,6]},{5:[2,7],6:[2,7],7:[2,7],8:[2,7],9:[2,7],10:[2,7],11:[2,7],12:[2,7],13:[2,7],14:[2,7],15:[2,7],16:[1,16],18:[2,7]},{5:[2,8],6:[2,8],7:[2,8],8:[2,8],9:[2,8],10:[2,8],11:[2,8],12:[2,8],13:[2,8],14:[2,8],15:[2,8],16:[1,16],18:[2,8]},{5:[2,9],6:[2,9],7:[2,9],8:[2,9],9:[2,9],10:[2,9],11:[2,9],12:[2,9],13:[2,9],14:[2,9],15:[2,9],16:[1,16],18:[2,9]},{5:[2,10],6:[2,10],7:[2,10],8:[2,10],9:[2,10],10:[2,10],11:[2,10],12:[2,10],13:[2,10],14:[2,10],15:[2,10],16:[1,16],18:[2,10]},{5:[2,11],6:[2,11],7:[2,11],8:[2,11],9:[2,11],10:[2,11],11:[2,11],12:[2,11],13:[2,11],14:[2,11],15:[2,11],16:[2,11],18:[2,11]},{5:[2,12],6:[2,12],7:[2,12],8:[2,12],9:[2,12],10:[2,12],11:[2,12],12:[2,12],13:[2,12],14:[2,12],15:[2,12],16:[2,12],18:[2,12]},{4:30,17:[1,3],19:[1,4],20:[1,5]},{5:[2,2],6:[1,7],7:[2,2],8:[1,8],9:[1,9],10:[1,10],11:[1,11],12:[1,12],13:[1,13],14:[1,14],15:[1,15],16:[1,16],18:[2,2]}],defaultActions:{6:[2,1]},parseError:function(e,t){throw new Error(e)},parse:function(e){function t(){var e;return e=n.lexer.lex()||1,"number"!==typeof e&&(e=n.symbols_[e]||e),e}var n=this,r=[0],o=[null],i=[],a=this.table,l="",s=0,u=0,p=0,c=2;this.lexer.setInput(e),this.lexer.yy=this.yy,this.yy.lexer=this.lexer,"undefined"==typeof this.lexer.yylloc&&(this.lexer.yylloc={});var h=this.lexer.yylloc;i.push(h),"function"===typeof this.yy.parseError&&(this.parseError=this.yy.parseError);for(var d,f,m,g,v,y,b,_,E,w={};;){if(m=r[r.length-1],this.defaultActions[m]?g=this.defaultActions[m]:(null==d&&(d=t()),g=a[m]&&a[m][d]),"undefined"===typeof g||!g.length||!g[0]){if(!p){E=[];for(y in a[m])this.terminals_[y]&&y>2&&E.push("'"+this.terminals_[y]+"'");var O="";O=this.lexer.showPosition?"Parse error on line "+(s+1)+":\n"+this.lexer.showPosition()+"\nExpecting "+E.join(", ")+", got '"+this.terminals_[d]+"'":"Parse error on line "+(s+1)+": Unexpected "+(1==d?"end of input":"'"+(this.terminals_[d]||d)+"'"),this.parseError(O,{text:this.lexer.match,token:this.terminals_[d]||d,line:this.lexer.yylineno,loc:h,expected:E})}if(3==p){if(1==d)throw new Error(O||"Parsing halted.");u=this.lexer.yyleng,l=this.lexer.yytext,s=this.lexer.yylineno,h=this.lexer.yylloc,d=t()}for(;;){if(c.toString()in a[m])break;if(0==m)throw new Error(O||"Parsing halted.");!function(e){r.length=r.length-2*e,o.length=o.length-e,i.length=i.length-e}(1),m=r[r.length-1]}f=d,d=c,m=r[r.length-1],g=a[m]&&a[m][c],p=3}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+d);switch(g[0]){case 1:r.push(d),o.push(this.lexer.yytext),i.push(this.lexer.yylloc),r.push(g[1]),d=null,f?(d=f,f=null):(u=this.lexer.yyleng,l=this.lexer.yytext,s=this.lexer.yylineno,h=this.lexer.yylloc,p>0&&p--);break;case 2:if(b=this.productions_[g[1]][1],w.$=o[o.length-b],w._$={first_line:i[i.length-(b||1)].first_line,last_line:i[i.length-1].last_line,first_column:i[i.length-(b||1)].first_column,last_column:i[i.length-1].last_column},"undefined"!==typeof(v=this.performAction.call(w,l,u,s,this.yy,g[1],o,i)))return v;b&&(r=r.slice(0,-1*b*2),o=o.slice(0,-1*b),i=i.slice(0,-1*b)),r.push(this.productions_[g[1]][0]),o.push(w.$),i.push(w._$),_=a[r[r.length-2]][r[r.length-1]],r.push(_);break;case 3:return!0}}return!0}},t=function(){var e={EOF:1,parseError:function(e,t){if(!this.yy.parseError)throw new Error(e);this.yy.parseError(e,t)},setInput:function(e){return this._input=e,this._more=this._less=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.match+=e,this.matched+=e,e.match(/\n/)&&this.yylineno++,this._input=this._input.slice(1),e},unput:function(e){return this._input=e+this._input,this},more:function(){return this._more=!0,this},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},next:function(){if(this.done)return this.EOF;this._input||(this.done=!0);var e,t;this._more||(this.yytext="",this.match="");for(var n=this._currentRules(),r=0;r<n.length;r++)if(e=this._input.match(this.rules[n[r]]))return t=e[0].match(/\n.*/g),t&&(this.yylineno+=t.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:t?t[t.length-1].length-1:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this._more=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],this.performAction.call(this,this.yy,this,n[r],this.conditionStack[this.conditionStack.length-1])||void 0;if(""===this._input)return this.EOF;this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return"undefined"!==typeof e?e:this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.pop()},_currentRules:function(){return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules},topState:function(){return this.conditionStack[this.conditionStack.length-2]},pushState:function(e){this.begin(e)}};return e.performAction=function(e,t,n,r){switch(n){case 0:break;case 1:return 20;case 2:return 19;case 3:return 8;case 4:return 9;case 5:return 6;case 6:return 7;case 7:return 11;case 8:return 13;case 9:return 10;case 10:return 12;case 11:return 14;case 12:return 15;case 13:return 16;case 14:return 17;case 15:return 18;case 16:return 5;case 17:return"INVALID"}},e.rules=[/^\s+/,/^[0-9]+(\.[0-9]+)?\b/,/^n\b/,/^\|\|/,/^&&/,/^\?/,/^:/,/^<=/,/^>=/,/^</,/^>/,/^!=/,/^==/,/^%/,/^\(/,/^\)/,/^$/,/^./],e.conditions={INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17],inclusive:!0}},e}();return e.lexer=t,e}(),"undefined"!==typeof e&&e.exports&&(t=e.exports=d),t.Jed=d}()},function(e,t,n){(function(t){e.exports=function(e,n){function r(){var t,n,r=i,s=arguments.length;e:for(;r;){if(r.args.length===arguments.length){for(n=0;n<s;n++)if(r.args[n]!==arguments[n]){r=r.next;continue e}return r!==i&&(r===a&&(a=r.prev),r.prev.next=r.next,r.next&&(r.next.prev=r.prev),r.next=i,r.prev=null,i.prev=r,i=r),r.val}r=r.next}for(t=new Array(s),n=0;n<s;n++)t[n]=arguments[n];return r={args:t,val:e.apply(null,t)},i?(i.prev=r,r.next=i):a=r,l===o?(a=a.prev,a.next=null):l++,i=r,r.val}var o,i,a,l=0;return n&&n.maxSize&&(o=n.maxSize),r.clear=function(){i=null,a=null,l=0},"test"===t.env.NODE_ENV&&(r.getCache=function(){return[i,a,l]}),r}}).call(t,n(0))},function(e,t,n){"use strict";var r=n(1),o=n(7),i=function(e){return function(t,n){var i=e;Object(o.a)("heartbeat.tick","core/api-fetch/create-nonce-middleware",function(e){e["rest-nonce"]&&(i=e["rest-nonce"])});var a=t.headers||{},l=!0;for(var s in a)if(a.hasOwnProperty(s)&&"x-wp-nonce"===s.toLowerCase()){l=!1;break}return l&&(a=Object(r.a)({},a,{"X-WP-Nonce":i})),n(Object(r.a)({},t,{headers:a}))}};t.a=i},function(e,t,n){"use strict";function r(){var e=Object.create(null),t=Object.create(null);return e.__current=[],t.__current=[],{addAction:Object(o.a)(e),addFilter:Object(o.a)(t),removeAction:Object(i.a)(e),removeFilter:Object(i.a)(t),hasAction:Object(a.a)(e),hasFilter:Object(a.a)(t),removeAllActions:Object(i.a)(e,!0),removeAllFilters:Object(i.a)(t,!0),doAction:Object(l.a)(e),applyFilters:Object(l.a)(t,!0),currentAction:Object(s.a)(e),currentFilter:Object(s.a)(t),doingAction:Object(u.a)(e),doingFilter:Object(u.a)(t),didAction:Object(p.a)(e),didFilter:Object(p.a)(t),actions:e,filters:t}}var o=n(37),i=n(38),a=n(39),l=n(40),s=n(41),u=n(42),p=n(43);t.a=r},function(e,t,n){"use strict";function r(e){return function(t,n,r){var l=arguments.length>3&&void 0!==arguments[3]?arguments[3]:10;if(Object(i.a)(t)&&Object(o.a)(n)){if("function"!==typeof r)return void console.error("The hook callback must be a function.");if("number"!==typeof l)return void console.error("If specified, the hook priority must be a number.");var s={callback:r,priority:l,namespace:n};if(e[t]){for(var u=e[t].handlers,p=0;p<u.length&&!(u[p].priority>l);)p++;u.splice(p,0,s),(e.__current||[]).forEach(function(e){e.name===t&&e.currentIndex>=p&&e.currentIndex++})}else e[t]={handlers:[s],runs:0};"hookAdded"!==t&&Object(a.b)("hookAdded",t,n,r,l)}}}var o=n(12),i=n(8),a=n(7);t.a=r},function(e,t,n){"use strict";function r(e,t){return function(n,r){if(Object(i.a)(n)&&(t||Object(o.a)(r))){if(!e[n])return 0;var l=0;if(t)l=e[n].handlers.length,e[n]={runs:e[n].runs,handlers:[]};else for(var s=e[n].handlers,u=s.length-1;u>=0;u--)!function(t){s[t].namespace===r&&(s.splice(t,1),l++,(e.__current||[]).forEach(function(e){e.name===n&&e.currentIndex>=t&&e.currentIndex--}))}(u);return"hookRemoved"!==n&&Object(a.b)("hookRemoved",n,r),l}}}var o=n(12),i=n(8),a=n(7);t.a=r},function(e,t,n){"use strict";function r(e){return function(t){return t in e}}t.a=r},function(e,t,n){"use strict";function r(e,t){return function(n){e[n]||(e[n]={handlers:[],runs:0}),e[n].runs++;for(var r=e[n].handlers,o=arguments.length,i=new Array(o>1?o-1:0),a=1;a<o;a++)i[a-1]=arguments[a];if(!r||!r.length)return t?i[0]:void 0;var l={name:n,currentIndex:0};for(e.__current.push(l),e[n]||(e[n]={runs:0,handlers:[]});l.currentIndex<r.length;){var s=r[l.currentIndex],u=s.callback.apply(null,i);t&&(i[0]=u),l.currentIndex++}return e.__current.pop(),t?i[0]:void 0}}t.a=r},function(e,t,n){"use strict";function r(e){return function(){return e.__current&&e.__current.length?e.__current[e.__current.length-1].name:null}}t.a=r},function(e,t,n){"use strict";function r(e){return function(t){return"undefined"===typeof t?"undefined"!==typeof e.__current[0]:!!e.__current[0]&&t===e.__current[0].name}}t.a=r},function(e,t,n){"use strict";function r(e){return function(t){if(Object(o.a)(t))return e[t]&&e[t].runs?e[t].runs:0}}var o=n(8);t.a=r},function(e,t,n){"use strict";var r=n(1),o=n(13),i=function(e){return function(t,n){return Object(o.a)(t,function(t){var o,i=t.url,a=t.path;return"string"===typeof a&&(o=e,-1!==e.indexOf("?")&&(a=a.replace("?","&")),a=a.replace(/^\//,""),"string"===typeof o&&-1!==o.indexOf("?")&&(a=a.replace("?","&")),i=o+a),n(Object(r.a)({},t,{url:i}))})}};t.a=i},function(e,t,n){"use strict";var r=function(e){return function(t,n){var r=t.parse,o=void 0===r||r;if("string"===typeof t.path&&o){var i=t.method||"GET",a=function(e){var t=e.split("?"),n=t[1],r=t[0];return n?r+"?"+n.split("&").map(function(e){return e.split("=")}).sort(function(e,t){return e[0].localeCompare(t[0])}).map(function(e){return e.join("=")}).join("&"):r}(t.path);if("GET"===i&&e[a])return Promise.resolve(e[a].body)}return n(t)}};t.a=r},function(e,t,n){"use strict";function r(e,t){var n=Object(o.a)({},e);return n.method&&["PATCH","PUT","DELETE"].indexOf(n.method.toUpperCase())>=0&&(n.headers||(n.headers={}),n.headers["X-HTTP-Method-Override"]=n.method,n.headers["Content-Type"]="application/json",n.method="POST"),t(n,t)}var o=n(1);t.a=r},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(48),l=(n.n(a),n(49)),s=(n.n(l),n(2)),u=n(6),p=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=wp.i18n.__,h=wp.blocks,d=h.createBlock,f=h.registerBlockType,m=wp.editor,g=m.InspectorControls,v=m.PlainText,y=wp.components,b=(y.SelectControl,y.PanelBody),_=y.ToggleControl,E=y.RangeControl,w=wp.element.Component,O=ChattyMangoTagGroupsGlobal,C=O.siteUrl,A=O.siteLang,x=O.pluginUrl,F=O.hasPremium,k=x+"/assets/images/cm-tg-icon-64x64.png",S=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return i(t,e),p(t,[{key:"render",value:function(){var e="https://documentation.chattymango.com/documentation/tag-groups-premium/accordion-tag-cloud/accordion-tag-cloud-parameters/";""!=A&&(e+="?lang="+A),e+="#"+this.props.topic;var t=c("Click for help!");return wp.element.createElement("div",null,wp.element.createElement("a",{href:e,target:"_blank",style:{textDecoration:"none"},title:t},wp.element.createElement("span",{className:"dashicons dashicons-editor-help tg_right chatty-mango-help-icon"})))}}]),t}(w),T=function(e){function t(){r(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.groupsEndPoint=C+"/wp-json/tag-groups/v1/groups",e.taxonomiesEndPoint=C+"/wp-json/tag-groups/v1/taxonomies",e.state=e.constructor.getInitialState(e.props.attributes),e.getGroupsFromApi=e.getGroupsFromApi.bind(e),e.getTaxonomiesFromApi=e.getTaxonomiesFromApi.bind(e),e.getPostsFromApi=e.getPostsFromApi.bind(e),e.handleChangeInclude=e.handleChangeInclude.bind(e),e.handleChangeTaxonomy=e.handleChangeTaxonomy.bind(e),e.toggleOptionActive=e.toggleOptionActive.bind(e),e.toggleOptionCollapsible=e.toggleOptionCollapsible.bind(e),e.toggleOptionMouseover=e.toggleOptionMouseover.bind(e),e.toggleOptionHideEmpty=e.toggleOptionHideEmpty.bind(e),e.toggleOptionAdjustSeperatorSize=e.toggleOptionAdjustSeperatorSize.bind(e),e.toggleOptionAddPremiumFilter=e.toggleOptionAddPremiumFilter.bind(e),e.toggleOptionHideEmptyContent=e.toggleOptionHideEmptyContent.bind(e),e.toggleOptionShowAccordion=e.toggleOptionShowAccordion.bind(e),e.toggleOptionShowTagCount=e.toggleOptionShowTagCount.bind(e),e.getGroupsFromApi(),e.getTaxonomiesFromApi(),e.getPostsFromApi(),e}return i(t,e),p(t,null,[{key:"getInitialState",value:function(e){var t=[],n=["post_tag"];return e.include&&(t=e.include.split(",")),e.taxonomy&&(n=e.taxonomy.split(",")),{groups:[],taxonomies:[],posts:[],selectedGroups:t,selectedTaxonomies:n}}}]),p(t,[{key:"handleChangeInclude",value:function(e){var t=e.map(function(e){if(!isNaN(e.value))return e.value});this.setState({selectedGroups:t}),this.props.setAttributes({include:t.join(",")}),t.indexOf(0)>-1?this.props.setAttributes({show_not_assigned:1}):this.props.setAttributes({show_not_assigned:0})}},{key:"handleChangeTaxonomy",value:function(e){var t=e.map(function(e){if("string"===typeof e.value)return e.value});this.setState({selectedTaxonomies:t}),this.props.setAttributes({taxonomy:t.join(",")})}},{key:"getGroupsFromApi",value:function(){var e=this;Object(u.a)({path:this.groupsEndPoint}).then(function(t){t&&e.setState({groups:t})})}},{key:"getTaxonomiesFromApi",value:function(){var e=this;Object(u.a)({path:this.taxonomiesEndPoint}).then(function(t){t&&e.setState({taxonomies:t})})}},{key:"getPostsFromApi",value:function(){var e=this;Object(u.a)({path:C+"/wp-json/wp/v2/posts?per_page=100"}).then(function(t){if(t){var n=[{value:-1,label:c("off")},{value:0,label:c("use this post")}];t.forEach(function(e){n.push({value:e.id,label:e.title.rendered})}),e.setState({posts:n})}})}},{key:"getGroupsFromApi",value:function(){var e=this;jQuery.getJSON(this.groupsEndPoint,function(t){t&&e.setState({groups:t})})}},{key:"toggleOptionActive",value:function(){var e=1===this.props.attributes.active?0:1;this.props.setAttributes({active:e})}},{key:"toggleOptionCollapsible",value:function(){var e=1===this.props.attributes.collapsible?0:1;this.props.setAttributes({collapsible:e})}},{key:"toggleOptionMouseover",value:function(){var e=1===this.props.attributes.mouseover?0:1;this.props.setAttributes({mouseover:e})}},{key:"toggleOptionHideEmpty",value:function(){var e=1===this.props.attributes.hide_empty?0:1;this.props.setAttributes({hide_empty:e})}},{key:"toggleOptionAdjustSeperatorSize",value:function(){var e=1===this.props.attributes.adjust_separator_size?0:1;this.props.setAttributes({adjust_separator_size:e})}},{key:"toggleOptionAddPremiumFilter",value:function(e){var t=1===this.props.attributes.add_premium_filter?0:1;this.props.setAttributes({add_premium_filter:t})}},{key:"toggleOptionHideEmptyContent",value:function(){var e=1===this.props.attributes.hide_empty_content?0:1;this.props.setAttributes({hide_empty_content:e})}},{key:"toggleOptionShowAccordion",value:function(){var e=1===this.props.attributes.show_accordion?0:1;this.props.setAttributes({show_accordion:e})}},{key:"toggleOptionShowTagCount",value:function(){var e=1===this.props.attributes.show_tag_count?0:1;this.props.setAttributes({show_tag_count:e})}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=t.active,o=t.add_premium_filter,i=t.adjust_separator_size,a=t.amount,l=t.append,u=t.assigned_class,p=t.collapsible,h=t.custom_title,d=t.div_class,f=t.div_id,m=t.groups_post_id,y=t.header_class,w=t.heightstyle,O=t.hide_empty,C=t.hide_empty_content,A=t.inner_div_class,x=t.largest,T=t.link_append,P=t.link_target,j=t.mouseover,D=t.not_assigned_name,N=t.order,I=t.orderby,R=t.prepend,V=t.separator,M=t.separator_size,B=t.show_not_assigned,z=t.show_tag_count,L=t.show_accordion,K=t.smallest,W=t.tags_post_id,H=[],U=[];return this.state.groups&&this.state.groups.length>0&&this.state.groups.forEach(function(e){H.push({value:e.term_group,label:e.label})}),this.state.taxonomies&&this.state.taxonomies.length>0&&this.state.taxonomies.forEach(function(e){U.push({value:e.slug,label:e.name})}),"gutenberg"!==t.source&&n({source:"gutenberg"}),[wp.element.createElement(g,{key:"inspector"},wp.element.createElement("div",{className:"chatt-mango-inspector-control"},wp.element.createElement(b,{title:c("Tags and Terms"),initialOpen:!1},wp.element.createElement(S,{topic:"taxonomy"}),wp.element.createElement("label",{htmlFor:"tg_input_taxonomy"},c("Include taxonomies")),wp.element.createElement(s.a,{id:"tg_input_taxonomy",onChange:this.handleChangeTaxonomy,value:this.state.selectedTaxonomies,options:U,multi:!0,closeOnSelect:!1,removeSelected:!0}),wp.element.createElement(S,{topic:"smallest"}),wp.element.createElement(E,{label:c("Smallest font size"),value:K?Number(K):12,onChange:function(e){e<=x&&e<73&&n({smallest:e})},min:6,max:72}),wp.element.createElement(S,{topic:"largest"}),wp.element.createElement(E,{label:c("Largest font size"),value:x?Number(x):22,onChange:function(e){K<=e&&e>5&&n({largest:e})},min:6,max:72}),wp.element.createElement(S,{topic:"amount"}),wp.element.createElement(E,{label:c("Amount of tags per group")+(0==a?": "+c("unlimited"):""),value:a?Number(a):0,onChange:function(e){return n({amount:e})},min:0,max:200}),wp.element.createElement(S,{topic:"orderby"}),wp.element.createElement("label",{htmlFor:"tg_input_orderby"},c("Order tags by")),wp.element.createElement(s.a,{id:"tg_input_orderby",onChange:function(e){e&&n({orderby:e.value})},value:I&&"string"===typeof I?I:"name",options:[{value:"name",label:c("Name")},{value:"natural",label:c("Natural sorting")},{value:"count",label:c("Post count")},{value:"slug",label:c("Slug")},{value:"term_id",label:c("Term ID")},{value:"description",label:c("Description")}]}),wp.element.createElement(S,{topic:"order"}),wp.element.createElement("label",{htmlFor:"tg_input_order"},c("Sort order")),wp.element.createElement(s.a,{id:"tg_input_order",onChange:function(e){e&&n({order:e.value})},value:N&&"string"===typeof N?N.toUpperCase():"ASC",options:[{value:"ASC",label:c("Ascending")},{value:"DESC",label:c("Descending")}]}),wp.element.createElement(S,{topic:"hide_empty"}),wp.element.createElement(_,{label:c("Hide empty tags"),checked:O,onChange:this.toggleOptionHideEmpty}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"separator"}),wp.element.createElement("label",{htmlFor:"tg_input_separator"},c("Separator"))),wp.element.createElement(v,{id:"tg_input_separator",className:"input-control",value:V||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({separator:e})}}),V&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"adjust_separator_size"}),wp.element.createElement(_,{label:c("Adjust separator size to following tag"),checked:i,onChange:this.toggleOptionAdjustSeperatorSize}),!i&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"separator_size"}),wp.element.createElement(E,{label:c("Separator size"),value:M?Number(M):22,onChange:function(e){return n({separator_size:e})},min:6,max:144}))),wp.element.createElement(S,{topic:"prepend"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_prepend"},c("Prepend"))),wp.element.createElement(v,{id:"tg_input_prepend",className:"input-control",value:R||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({prepend:e})}}),wp.element.createElement(S,{topic:"append"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_append"},c("Append"))),wp.element.createElement(v,{id:"tg_input_append",className:"input-control",value:l||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({append:e})}}),!h&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"show_tag_count"}),wp.element.createElement(_,{label:c("Show the post count in the tooltip"),checked:z,onChange:this.toggleOptionShowTagCount})),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"custom_title"}),wp.element.createElement("label",{htmlFor:"tg_input_custom_title"},c("Custom title"))),wp.element.createElement(v,{id:"tg_input_custom_title",className:"input-control",value:h||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({custom_title:e})}}),wp.element.createElement(S,{topic:"link_target"}),wp.element.createElement("label",{htmlFor:"tg_input_link_target"},c("Link target")),wp.element.createElement(s.a,{id:"tg_input_link_target",onChange:function(e){e&&n({link_target:e.value})},value:P&&"string"===typeof P?P:"_self",options:[{value:"_self",label:"_self"},{value:"_blank",label:"_blank"},{value:"_parent",label:"_parent"},{value:"_top",label:"_top"}]}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_link_append"},c("Append to the link"))),wp.element.createElement(v,{id:"tg_input_link_append",className:"input-control",value:T||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({link_append:e})}}),F&&wp.element.createElement("div",null,wp.element.createElement(S,{topic:"add_premium_filter"}),wp.element.createElement(_,{label:c("Add filter to tags for multiple groups."),checked:o,onChange:this.toggleOptionAddPremiumFilter})),wp.element.createElement(S,{topic:"tags_post_id"}),wp.element.createElement("label",{htmlFor:"tg_input_tags_post_id"},c("Use tags of the following post:")),wp.element.createElement(s.a,{id:"tg_input_tags_post_id",onChange:function(e){e&&n({tags_post_id:e.value})},value:W,options:this.state.posts})),wp.element.createElement(b,{title:c("Groups and Tabs"),initialOpen:!1},wp.element.createElement(S,{topic:"show_accordion"}),wp.element.createElement(_,{label:c("Show the panels"),checked:L,onChange:this.toggleOptionShowAccordion}),wp.element.createElement(S,{topic:"hide_empty_content"}),wp.element.createElement(_,{label:c("Hide empty panels"),checked:C,onChange:this.toggleOptionHideEmptyContent}),wp.element.createElement(S,{topic:"mouseover"}),wp.element.createElement(_,{label:c("Open tabs on mouseover"),checked:j,onChange:this.toggleOptionMouseover}),wp.element.createElement(S,{topic:"collapsible"}),wp.element.createElement(_,{label:c("Make panels collapsible"),checked:p,onChange:this.toggleOptionCollapsible}),wp.element.createElement(S,{topic:"active"}),wp.element.createElement(_,{label:c("Start with expanded tabs"),checked:r,onChange:this.toggleOptionActive}),wp.element.createElement(S,{topic:"include"}),wp.element.createElement("label",{htmlFor:"tg_input_include"},c("Include groups")),wp.element.createElement(s.a,{id:"tg_input_include",onChange:this.handleChangeInclude,value:this.state.selectedGroups,options:H,multi:!0,closeOnSelect:!1,removeSelected:!0}),wp.element.createElement(S,{topic:"heightstyle"}),wp.element.createElement("label",{htmlFor:"tg_input_heightstyle"},c("Panel height")),wp.element.createElement(s.a,{id:"tg_input_heightstyle",onChange:function(e){e&&n({heightstyle:e.value})},value:w||"content",options:[{value:"auto",label:c("Adjust to heighest panel.")},{value:"fill",label:c("Fill parent element.")},{value:"content",label:c("Adjust to own content.")}]}),1===B&&wp.element.createElement("div",null,wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_not_assigned_name"},c("Label on tab for not assigned tags"))),wp.element.createElement(v,{id:"tg_input_not_assigned_name",className:"input-control",value:D||"not assigned",placeholder:c("Write here or leave empty."),onChange:function(e){return n({not_assigned_name:e})}})),wp.element.createElement(S,{topic:"groups_post_id"}),wp.element.createElement("label",{htmlFor:"tg_input_group_post_id"},c("Use groups of the following post:")),wp.element.createElement(s.a,{id:"tg_input_group_post_id",onChange:function(e){e&&n({groups_post_id:e.value})},value:m,options:this.state.posts})),wp.element.createElement(b,{title:c("Advanced Styling"),initialOpen:!1},wp.element.createElement("div",null,wp.element.createElement(S,{topic:"div_id"}),wp.element.createElement("label",{htmlFor:"tg_input_div_id"},'<div id="...">')),wp.element.createElement(v,{id:"tg_input_div_id",className:"input-control",value:f||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_id:e})}}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"div_class"}),wp.element.createElement("label",{htmlFor:"tg_input_div_class"},c('outer <div class="...">'))),wp.element.createElement(v,{id:"tg_input_div_class",className:"input-control",value:d||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_class:e})}}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"header_class"}),wp.element.createElement("label",{htmlFor:"tg_input_header_class"},'<h3 class="...">')),wp.element.createElement(v,{id:"tg_input_header_class",className:"input-control",value:y||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({header_class:e})}}),wp.element.createElement("div",null,wp.element.createElement(S,{topic:"inner_div_class"}),wp.element.createElement("label",{htmlFor:"tg_input_inner_div_class"},c('inner <div class="...">'))),wp.element.createElement(v,{id:"tg_input_inner_div_class",className:"input-control",value:A||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({inner_div_class:e})}}),-1!==W&&wp.element.createElement("div",null,wp.element.createElement("div",null,wp.element.createElement(S,{topic:"assigned_class"}),wp.element.createElement("label",{htmlFor:"tg_input_assigned_class"},'<a class="..._0"> or <a class="..._1">')),wp.element.createElement(v,{id:"tg_input_assigned_class",className:"input-control",value:u||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({assigned_class:e})}}))),wp.element.createElement("div",{className:"chatty-mango-help-transform"},wp.element.createElement(S,{topic:"transform-your-block-for-more-options"}),wp.element.createElement("div",{dangerouslySetInnerHTML:{__html:c("If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.")}})))),wp.element.createElement("div",{className:"chatty-mango-editor"},wp.element.createElement("table",{style:{border:"none"}},wp.element.createElement("tr",null,wp.element.createElement("td",null,wp.element.createElement("img",{src:k,alt:"logo",style:{float:"left",margin:15}})),wp.element.createElement("td",null,wp.element.createElement("h3",null,c("Accordion Tag Cloud")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-admin-generic"},c("Select this block and customize the tag cloud in the Inspector.")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-welcome-view-site"},c("See the output with Preview."))))))]}}]),t}(w),P=f("chatty-mango/tag-groups-cloud-accordion",{title:c("Accordion Tag Cloud"),icon:"tagcloud",category:"widgets",description:c("Show your tags in groups in an accordion."),keywords:[c("accordion"),c("tag cloud"),"Chatty Mango"],html:!1,transforms:{to:[{type:"block",blocks:["core/shortcode"],transform:function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&null!==e[n]&&""!==e[n]&&"source"!==n&&P.attributes[n]&&e[n]!==P.attributes[n].default&&("number"===typeof e[n]?t.push(n+"="+e[n]):t.push(n+'="'+e[n]+'"'));var r="[tag_groups_accordion "+t.join(" ")+"]";return d("core/shortcode",{text:r})}}]},supports:{html:!1},attributes:{source:{type:"string",default:""},active:{type:"integer",default:1},adjust_separator_size:{type:"integer",default:1},add_premium_filter:{type:"integer",default:0},amount:{type:"integer",default:0},append:{type:"string",default:""},assigned_class:{type:"string",default:""},collapsible:{type:"integer",default:0},custom_title:{type:"string",default:""},div_class:{type:"string",default:"tag-groups-cloud"},div_id:{type:"string",default:""},exclude_terms:{type:"string",default:""},groups_post_id:{type:"integer",default:-1},heightstyle:{type:"string",default:""},hide_empty:{type:"integer",default:1},hide_empty_content:{type:"integer",default:0},include:{type:"string",default:""},include_terms:{type:"string",default:""},largest:{type:"integer",default:22},link_append:{type:"string",default:""},link_target:{type:"string",default:"_self"},mouseover:{type:"integer",default:0},not_assigned_name:{type:"string",default:""},order:{type:"string",default:"ASC"},orderby:{type:"string",default:"name"},prepend:{type:"string",default:""},separator_size:{type:"integer",default:22},separator:{tpye:"string",default:""},show_not_assigned:{type:"integer",default:0},show_all_groups:{type:"integer",default:0},show_accordion:{type:"integer",default:1},show_tag_count:{type:"integer",default:1},smallest:{type:"integer",default:12},tags_post_id:{type:"integer",default:-1},taxonomy:{type:"string",default:""},header_class:{type:"string",default:""},inner_div_class:{type:"string",default:""}},edit:T,save:function(e){return null}})},function(e,t){},function(e,t){},function(e,t,n){"use strict";function r(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function o(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!==typeof t&&"function"!==typeof t?e:t}function i(e,t){if("function"!==typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}var a=n(51),l=(n.n(a),n(52)),s=(n.n(l),n(2)),u=n(6),p=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),c=wp.i18n.__,h=wp.blocks,d=h.createBlock,f=h.registerBlockType,m=wp.editor,g=m.InspectorControls,v=m.PlainText,y=wp.components,b=(y.SelectControl,y.PanelBody),_=y.ToggleControl,E=y.RangeControl,w=(y.ServerSideRender,wp.element.Component),O=ChattyMangoTagGroupsGlobal,C=O.siteUrl,A=O.siteLang,x=O.pluginUrl,F=(O.hasPremium,x+"/assets/images/cm-tg-icon-64x64.png"),k=function(e){function t(){return r(this,t),o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments))}return i(t,e),p(t,[{key:"render",value:function(){var e="https://documentation.chattymango.com/documentation/tag-groups-premium/alphabetical-tag-cloud/alphabetical-tag-cloud-parameters/";""!=A&&(e+="?lang="+A),e+="#"+this.props.topic;var t=c("Click for help!");return wp.element.createElement("div",null,wp.element.createElement("a",{href:e,target:"_blank",style:{textDecoration:"none"},title:t},wp.element.createElement("span",{className:"dashicons dashicons-editor-help tg_right chatty-mango-help-icon"})))}}]),t}(w),S=function(e){function t(){r(this,t);var e=o(this,(t.__proto__||Object.getPrototypeOf(t)).apply(this,arguments));return e.groupsEndPoint=C+"/wp-json/tag-groups/v1/groups",e.termsEndPoint=C+"/wp-json/tag-groups/v1/terms",e.taxonomiesEndPoint=C+"/wp-json/tag-groups/v1/taxonomies",e.state=e.constructor.getInitialState(e.props.attributes),e.getGroupsFromApi=e.getGroupsFromApi.bind(e),e.getTaxonomiesFromApi=e.getTaxonomiesFromApi.bind(e),e.getPostsFromApi=e.getPostsFromApi.bind(e),e.handleChangeInclude=e.handleChangeInclude.bind(e),e.handleChangeTaxonomy=e.handleChangeTaxonomy.bind(e),e.toggleOptionActive=e.toggleOptionActive.bind(e),e.toggleOptionCollapsible=e.toggleOptionCollapsible.bind(e),e.toggleOptionMouseover=e.toggleOptionMouseover.bind(e),e.toggleOptionHideEmpty=e.toggleOptionHideEmpty.bind(e),e.toggleOptionAdjustSeperatorSize=e.toggleOptionAdjustSeperatorSize.bind(e),e.toggleOptionHideEmptyTabs=e.toggleOptionHideEmptyTabs.bind(e),e.toggleOptionShowTagCount=e.toggleOptionShowTagCount.bind(e),e.getGroupsFromApi(),e.getTaxonomiesFromApi(),e.getPostsFromApi(),e}return i(t,e),p(t,null,[{key:"getInitialState",value:function(e){var t=["post_tag"];return e.include&&e.include.split(","),e.taxonomy&&(t=e.taxonomy.split(",")),{groups:[],taxonomies:[],posts:[],selectedTaxonomies:t}}}]),p(t,[{key:"handleChangeInclude",value:function(e){var t=e.map(function(e){if(!isNaN(e.value))return e.value});this.setState({selectedGroups:t}),this.props.setAttributes({include:t.join(",")}),t.indexOf(0)>-1?this.props.setAttributes({show_not_assigned:1}):this.props.setAttributes({show_not_assigned:0})}},{key:"handleChangeTaxonomy",value:function(e){var t=e.map(function(e){if("string"===typeof e.value)return e.value});this.setState({selectedTaxonomies:t}),this.props.setAttributes({taxonomy:t.join(",")})}},{key:"getGroupsFromApi",value:function(){var e=this;Object(u.a)({path:this.groupsEndPoint}).then(function(t){t&&e.setState({groups:t})})}},{key:"getTaxonomiesFromApi",value:function(){var e=this;Object(u.a)({path:this.taxonomiesEndPoint}).then(function(t){t&&e.setState({taxonomies:t})})}},{key:"getPostsFromApi",value:function(){var e=this;Object(u.a)({path:C+"/wp-json/wp/v2/posts?per_page=100"}).then(function(t){if(t){var n=[{value:-1,label:c("off")},{value:0,label:c("use this post")}];t.forEach(function(e){n.push({value:e.id,label:e.title.rendered})}),e.setState({posts:n})}})}},{key:"toggleOptionActive",value:function(){var e=1===this.props.attributes.active?0:1;this.props.setAttributes({active:e})}},{key:"toggleOptionCollapsible",value:function(){var e=1===this.props.attributes.collapsible?0:1;this.props.setAttributes({collapsible:e})}},{key:"toggleOptionMouseover",value:function(){var e=1===this.props.attributes.mouseover?0:1;this.props.setAttributes({mouseover:e})}},{key:"toggleOptionHideEmpty",value:function(){var e=1===this.props.attributes.hide_empty?0:1;this.props.setAttributes({hide_empty:e})}},{key:"toggleOptionAdjustSeperatorSize",value:function(){var e=1===this.props.attributes.adjust_separator_size?0:1;this.props.setAttributes({adjust_separator_size:e})}},{key:"toggleOptionHideEmptyTabs",value:function(){var e=1===this.props.attributes.hide_empty_tabs?0:1;this.props.setAttributes({hide_empty_tabs:e})}},{key:"toggleOptionShowTagCount",value:function(){var e=1===this.props.attributes.show_tag_count?0:1;this.props.setAttributes({show_tag_count:e})}},{key:"render",value:function(){var e=this.props,t=e.attributes,n=e.setAttributes,r=t.active,o=t.adjust_separator_size,i=t.amount,a=t.append,l=t.assigned_class,u=t.collapsible,p=t.custom_title,h=t.div_class,d=t.div_id,f=t.exclude_letters,m=t.hide_empty,y=t.hide_empty_tabs,w=t.include_letters,O=t.largest,C=t.link_append,A=t.link_target,x=t.mouseover,S=t.order,T=t.orderby,P=t.prepend,j=t.separator,D=t.separator_size,N=t.show_tag_count,I=t.smallest,R=t.tags_post_id,V=t.ul_class,M=[],B=[];return this.state.groups&&this.state.groups.length>0&&this.state.groups.forEach(function(e){M.push({value:e.term_group,label:e.label})}),this.state.taxonomies&&this.state.taxonomies.length>0&&this.state.taxonomies.forEach(function(e){B.push({value:e.slug,label:e.name})}),"gutenberg"!==t.source&&n({source:"gutenberg"}),[wp.element.createElement(g,{key:"inspector"},wp.element.createElement("div",{className:"chatt-mango-inspector-control"},wp.element.createElement(b,{title:c("Tags and Terms"),initialOpen:!1},wp.element.createElement(k,{topic:"taxonomy"}),wp.element.createElement("label",{htmlFor:"tg_input_taxonomy"},c("Include taxonomies")),wp.element.createElement(s.a,{id:"tg_input_taxonomy",onChange:this.handleChangeTaxonomy,value:this.state.selectedTaxonomies,options:B,multi:!0,closeOnSelect:!1,removeSelected:!0}),wp.element.createElement(k,{topic:"smallest"}),wp.element.createElement(E,{label:c("Smallest font size"),value:I?Number(I):12,onChange:function(e){e<=O&&e<73&&n({smallest:e})},min:6,max:72}),wp.element.createElement(k,{topic:"largest"}),wp.element.createElement(E,{label:c("Largest font size"),value:O?Number(O):22,onChange:function(e){I<=e&&e>5&&n({largest:e})},min:6,max:72}),wp.element.createElement(k,{topic:"amount"}),wp.element.createElement(E,{label:c("Tags per group")+(0==i?": "+c("unlimited"):""),value:i?Number(i):0,onChange:function(e){return n({amount:e})},min:0,max:200}),wp.element.createElement(k,{topic:"orderby"}),wp.element.createElement("label",{htmlFor:"tg_input_orderby"},c("Order tags by")),wp.element.createElement(s.a,{id:"tg_input_orderby",onChange:function(e){e&&n({orderby:e.value})},value:T&&"string"===typeof T?T:"name",options:[{value:"name",label:c("Name")},{value:"natural",label:c("Natural sorting")},{value:"count",label:c("Post count")},{value:"slug",label:c("Slug")},{value:"term_id",label:c("Term ID")},{value:"description",label:c("Description")}]}),wp.element.createElement(k,{topic:"order"}),wp.element.createElement("label",{htmlFor:"tg_input_order"},c("Sort order")),wp.element.createElement(s.a,{id:"tg_input_order",onChange:function(e){e&&n({order:e.value})},value:S&&"string"===typeof S?S.toUpperCase():"ASC",options:[{value:"ASC",label:c("Ascending")},{value:"DESC",label:c("Descending")}]}),wp.element.createElement(k,{topic:"hide_empty"}),wp.element.createElement(_,{label:c("Hide empty tags"),checked:m,onChange:this.toggleOptionHideEmpty}),wp.element.createElement("div",null,wp.element.createElement(k,{topic:"separator"}),wp.element.createElement("label",{htmlFor:"tg_input_separator"},c("Separator"))),wp.element.createElement(v,{id:"tg_input_separator",className:"input-control",value:j||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({separator:e})}}),j&&wp.element.createElement("div",null,wp.element.createElement(k,{topic:"adjust_separator_size"}),wp.element.createElement(_,{label:c("Adjust separator size to following tag"),checked:o,onChange:this.toggleOptionAdjustSeperatorSize}),!o&&wp.element.createElement("div",null,wp.element.createElement(k,{topic:"separator_size"}),wp.element.createElement(E,{label:c("Separator size"),value:D?Number(D):22,onChange:function(e){return n({separator_size:e})},min:6,max:144}))),wp.element.createElement(k,{topic:"prepend"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_prepend"},c("Prepend"))),wp.element.createElement(v,{id:"tg_input_prepend",className:"input-control",value:P||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({prepend:e})}}),wp.element.createElement(k,{topic:"append"}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_append"},c("Append"))),wp.element.createElement(v,{id:"tg_input_append",className:"input-control",value:a||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({append:e})}}),!p&&wp.element.createElement("div",null,wp.element.createElement(k,{topic:"show_tag_count"}),wp.element.createElement(_,{label:c("Show post count in the tooltip"),checked:N,onChange:this.toggleOptionShowTagCount})),wp.element.createElement("div",null,wp.element.createElement(k,{topic:"custom_title"}),wp.element.createElement("label",{htmlFor:"tg_input_custom_title"},c("Custom title"))),wp.element.createElement(v,{id:"tg_input_custom_title",className:"input-control",value:p||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({custom_title:e})}}),wp.element.createElement(k,{topic:"link_target"}),wp.element.createElement("label",{htmlFor:"tg_input_link_target"},c("Link target")),wp.element.createElement(s.a,{id:"tg_input_link_target",onChange:function(e){e&&n({link_target:e.value})},value:A&&"string"===typeof A?A:"_self",options:[{value:"_self",label:"_self"},{value:"_blank",label:"_blank"},{value:"_parent",label:"_parent"},{value:"_top",label:"_top"}]}),wp.element.createElement("div",null,wp.element.createElement("label",{htmlFor:"tg_input_link_append"},c("Append to link"))),wp.element.createElement(v,{id:"tg_input_link_append",className:"input-control",value:C||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({link_append:e})}}),wp.element.createElement(k,{topic:"tags_post_id"}),wp.element.createElement("label",{htmlFor:"tg_input_tags_post_id"},c("Use tags of the following post:")),wp.element.createElement(s.a,{id:"tg_input_tags_post_id",onChange:function(e){e&&n({tags_post_id:e.value})},value:R,options:this.state.posts})),wp.element.createElement(b,{title:c("Tabs"),initialOpen:!1},wp.element.createElement("div",null,wp.element.createElement(k,{topic:"include_letters"}),wp.element.createElement("label",{htmlFor:"tg_input_include_letters"},"Include letters")),wp.element.createElement(v,{id:"tg_input_include_letters",className:"input-control",value:w||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({include_letters:e})}}),wp.element.createElement("div",null,wp.element.createElement(k,{topic:"exclude_letters"}),wp.element.createElement("label",{htmlFor:"tg_input_exclude_letters"},"Exclude letters")),wp.element.createElement(v,{id:"tg_input_exclude_letters",className:"input-control",value:f||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({exclude_letters:e})}}),wp.element.createElement(k,{topic:"hide_empty_tabs"}),wp.element.createElement(_,{label:c("Hide empty tabs"),checked:y,onChange:this.toggleOptionHideEmptyTabs}),wp.element.createElement(k,{topic:"mouseover"}),wp.element.createElement(_,{label:c("Open tabs on mouseover"),checked:x,onChange:this.toggleOptionMouseover}),wp.element.createElement(k,{topic:"collapsible"}),wp.element.createElement(_,{label:c("Make panels collapsible"),checked:u,onChange:this.toggleOptionCollapsible}),wp.element.createElement(k,{topic:"active"}),wp.element.createElement(_,{label:c("Start with expanded tabs"),checked:r,onChange:this.toggleOptionActive})),wp.element.createElement(b,{title:c("Groups"),initialOpen:!1},wp.element.createElement(k,{topic:"include"}),wp.element.createElement("label",{htmlFor:"tg_input_include"},c("Include groups")),wp.element.createElement(s.a,{id:"tg_input_include",onChange:this.handleChangeInclude,value:this.state.selectedGroups,options:M,multi:!0,closeOnSelect:!1,removeSelected:!0})),wp.element.createElement(b,{title:c("Advanced Styling"),initialOpen:!1},wp.element.createElement("div",null,wp.element.createElement(k,{topic:"div_id"}),wp.element.createElement("label",{htmlFor:"tg_input_div_id"},'<div id="...">')),wp.element.createElement(v,{id:"tg_input_div_id",className:"input-control",value:d||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_id:e})}}),wp.element.createElement("div",null,wp.element.createElement(k,{topic:"div_class"}),wp.element.createElement("label",{htmlFor:"tg_input_div_class"},'<div class="...">')),wp.element.createElement(v,{id:"tg_input_div_class",className:"input-control",value:h||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({div_class:e})}}),wp.element.createElement("div",null,wp.element.createElement(k,{topic:"ul_class"}),wp.element.createElement("label",{htmlFor:"tg_input_ul_class"},'<ul class="...">')),wp.element.createElement(v,{id:"tg_input_ul_class",className:"input-control",value:V||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({ul_class:e})}}),-1!==R&&wp.element.createElement("div",null,wp.element.createElement("div",null,wp.element.createElement(k,{topic:"assigned_class"}),wp.element.createElement("label",{htmlFor:"tg_input_assigned_class"},'<a class="..._0"> or <a class="..._1">')),wp.element.createElement(v,{id:"tg_input_assigned_class",className:"input-control",value:l||"",placeholder:c("Write here or leave empty."),onChange:function(e){return n({assigned_class:e})}}))),wp.element.createElement("div",{className:"chatty-mango-help-transform"},wp.element.createElement(k,{topic:"transform-your-block-for-more-options"}),wp.element.createElement("div",{dangerouslySetInnerHTML:{__html:c("If you want to customize further options, you need to transform the block into a <b>shortcode block</b>.")}})))),wp.element.createElement("div",{className:"chatty-mango-editor"},wp.element.createElement("table",{style:{border:"none"}},wp.element.createElement("tr",null,wp.element.createElement("td",null,wp.element.createElement("img",{src:F,alt:"logo",style:{float:"left",margin:15}})),wp.element.createElement("td",null,wp.element.createElement("h3",null,c("Alphabetical Tag Cloud")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-admin-generic"},c("Select this block and customize the tag cloud in the Inspector.")),wp.element.createElement("div",{className:"cm-gutenberg dashicons-before dashicons-welcome-view-site"},c("See the output with Preview."))))))]}}]),t}(w),T=f("chatty-mango/tag-groups-alphabet-tabs",{title:c("Alphabetical Tag Cloud"),icon:"tagcloud",category:"widgets",description:c("Show your tags under tabs sorted by first letters."),keywords:[c("alphabet"),c("tag cloud"),"Chatty Mango"],html:!1,transforms:{to:[{type:"block",blocks:["core/shortcode"],transform:function(e){var t=[];for(var n in e)e.hasOwnProperty(n)&&null!==e[n]&&""!==e[n]&&"source"!==n&&T.attributes[n]&&e[n]!==T.attributes[n].default&&("number"===typeof e[n]?t.push(n+"="+e[n]):t.push(n+'="'+e[n]+'"'));var r="[tag_groups_alphabet_tabs "+t.join(" ")+"]";return d("core/shortcode",{text:r})}}]},supports:{html:!1},attributes:{source:{type:"string",default:""},active:{type:"integer",default:1},adjust_separator_size:{type:"integer",default:1},amount:{type:"integer",default:0},append:{type:"string",default:""},assigned_class:{type:"string",default:""},collapsible:{type:"integer",default:0},custom_title:{type:"string",default:""},div_class:{type:"string",default:"tag-groups-cloud"},div_id:{type:"string",default:""},exclude_letters:{type:"string",default:""},exclude_terms:{type:"string",default:""},hide_empty:{type:"integer",default:1},hide_empty_tabs:{type:"integer",default:0},include:{type:"string",default:""},include_letters:{type:"string",default:""},include_terms:{type:"string",default:""},largest:{type:"integer",default:22},link_append:{type:"string",default:""},link_target:{type:"string",default:"_self"},mouseover:{type:"integer",default:0},order:{type:"string",default:"ASC"},orderby:{type:"string",default:"name"},prepend:{type:"string",default:""},separator_size:{type:"integer",default:22},separator:{tpye:"string",default:""},show_tag_count:{type:"integer",default:1},smallest:{type:"integer",default:12},tags_post_id:{type:"integer",default:-1},taxonomy:{type:"string",default:""},ul_class:{type:"string",default:""}},edit:S,save:function(e){return null}})},function(e,t){},function(e,t){}]);PK���������!� 8##��#�� ����������������readme.txtnu�[��������PK���������!�|wfK��K�� ������������.$��license.txtnu�[��������PK���������!�{~R���R���"��������������src/guten-tag-accordion/style.scssnu�[��������PK���������!�i����#������������X��src/guten-tag-accordion/editor.scssnu�[��������PK���������!�f-w��w�� ��������������src/guten-tag-accordion/block.jsnu�[��������PK���������!�G �� �� ������������*�src/init.phpnu�[��������PK���������!�;n "�������������������6�src/common.scssnu�[��������PK���������!�{~R���R���!������������7�src/guten-tag-alphabet/style.scssnu�[��������PK���������!�i����"������������7�src/guten-tag-alphabet/editor.scssnu�[��������PK���������!�3دNj��Nj�������������� <�src/guten-tag-alphabet/block.jsnu�[��������PK���������!�{~R���R����������������src/guten-tag-tabs/style.scssnu�[��������PK���������!�i����������������E�src/guten-tag-tabs/editor.scssnu�[��������PK���������!�C{Wp��Wp���������������src/guten-tag-tabs/block.jsnu�[��������PK���������!�ݲ˘������ ������������0�src/blocks.jsnu�[��������PK���������!� �����������������src/webpack.config.dev.jsnu�[��������PK���������!�(������'������������c+�views/partials/language_notice.view.phpnu�[��������PK���������!�1������)������������,�views/shortcodes/js_tabs_snippet.view.phpnu�[��������PK���������!�/4������.������������-�views/shortcodes/js_accordion_snippet.view.phpnu�[��������PK���������!�م����'������������/�views/admin/setup_wizard_start.view.phpnu�[��������PK���������!�I ����(������������33�views/admin/settings_about_news.view.phpnu�[��������PK���������!�L������$������������y8�views/admin/settings_footer.view.phpnu�[��������PK���������!�>(������(������������9�views/admin/setup_wizard_footer.view.phpnu�[��������PK���������!�7~����1������������:�views/admin/settings_troubleshooting_faq.view.phpnu�[��������PK���������!� ^����"������������9C�views/admin/settings_tabs.view.phpnu�[��������PK���������!�~ou ��u ��0������������$E�views/admin/setup_wizard_sample_content.view.phpnu�[��������PK���������!� X����2������������O�views/admin/settings_front_end_shortcodes.view.phpnu�[��������PK���������!�֌ �� ��������������]i�views/admin/onboarding.view.phpnu�[��������PK���������!�m :R��R��4������������t�views/admin/settings_troubleshooting_system.view.phpnu�[��������PK���������!�T:��:��;������������Q�views/admin/settings_troubleshooting_documentation.view.phpnu�[��������PK���������!�܍q����,�������������views/admin/settings_about_licenses.view.phpnu�[��������PK���������!�{&����!�������������views/admin/new_tag_main.view.phpnu�[��������PK���������!�����#������������?�views/admin/quick_edit_tag.view.phpnu�[��������PK���������!�J �� ��"������������S�views/admin/settings_help.view.phpnu�[��������PK���������!�,���� �������������views/admin/post_filter.view.phpnu�[��������PK���������!�ro������$�������������views/admin/settings_header.view.phpnu�[��������PK���������!�$����(������������˪�views/admin/filter_admin_footer.view.phpnu�[��������PK���������!�v,x*��*��%�������������views/admin/tag_groups_admin.view.phpnu�[��������PK���������!� y{����(������������x�views/admin/settings_taxonomies.view.phpnu�[��������PK���������!�����&������������W�views/admin/bulk_admin_footer.view.phpnu�[��������PK���������!�������$������������@�views/admin/settings_alerts.view.phpnu�[��������PK���������!�!~����.������������6�views/admin/settings_back_end_filters.view.phpnu�[��������PK���������!�#m&_��_��%������������,�views/admin/settings_premium.view.phpnu�[��������PK���������!�t����*������������ �views/admin/quick_edit_javascript.view.phpnu�[��������PK���������!�r �� ��,������������"�views/admin/setup_wizard_taxonomies.view.phpnu�[��������PK���������!�#t����*������������`�views/admin/setup_wizard_finished.view.phpnu�[��������PK���������!�89c��c��(������������U$�views/admin/setup_wizard_header.view.phpnu�[��������PK���������!� ����&������������*�views/admin/new_tag_from_list.view.phpnu�[��������PK���������!�a����!������������)1�views/admin/admin_notice.view.phpnu�[��������PK���������!�WՉv����)������������`4�views/admin/settings_tools_reset.view.phpnu�[��������PK���������!�E �� ��1������������><�views/admin/settings_tools_export_import.view.phpnu�[��������PK���������!�'-8 ��8 �� ������������E�views/admin/sample_page.view.phpnu�[��������PK���������!�ec"����(������������1R�views/admin/settings_about_info.view.phpnu�[��������PK���������!�=(����5������������F[�views/admin/settings_troubleshooting_support.view.phpnu�[��������PK���������!�*s����.������������`^�views/admin/settings_front_end_themes.view.phpnu�[��������PK���������!�|A;���;���*������������\q�views/admin/tag_page_inline_style.view.phpnu�[��������PK���������!�c6����"������������q�views/admin/settings_home.view.phpnu�[��������PK���������!�PnA��nA��������������x�languages/tag-groups-es_ES.monu�[��������PK���������!�]p��p���������������languages/tag-groups.potnu�[��������PK���������!�`��`��������������+�languages/tag-groups-es_ES.ponu�[��������PK���������!�󆃰f��f��+�������������include/shortcodes/class.shortcode_tabs.phpnu�[��������PK���������!�! ە����+������������n�include/shortcodes/class.shortcode_info.phpnu�[��������PK���������!�BdB��B��4������������^�include/shortcodes/class.shortcode_alphabet_tabs.phpnu�[��������PK���������!�y<?L��?L��0������������J�include/shortcodes/class.shortcode_accordion.phpnu�[��������PK���������!�~{QC��QC�� ������������g�include/entities/class.group.phpnu�[��������PK���������!�i/`%��%���������������include/entities/class.term.phpnu�[��������PK���������!� h �� ��������������Y��include/helpers/class.terms.phpnu�[��������PK���������!�r; �� ��!�������������include/helpers/class.options.phpnu�[��������PK���������!�K��K��1������������"�include/helpers/class.activation_deactivation.phpnu�[��������PK���������!�D����"������������z4�include/helpers/class.taxonomy.phpnu�[��������PK���������!�LJ��LJ�� ������������K�include/helpers/class.groups.phpnu�[��������PK���������!�e^|4��|4��"������������B�include/helpers/class.rest_api.phpnu�[��������PK���������!�5����&�������������include/helpers/class.fs_sdk_kernl.phpnu�[��������PK���������!�d* ��* ��������������)�include/helpers/class.view.phpnu�[��������PK���������!�Y H �� ���������������include/helpers/class.base.phpnu�[��������PK���������!�}8��}8��#�������������include/helpers/class.shortcode.phpnu�[��������PK���������!�K ����������������"�include/helpers/class.error.phpnu�[��������PK���������!�NW!��!��������������|4�include/helpers/class.feed.phpnu�[��������PK���������!�^5��5��������������N�include/helpers/class.cache.phpnu�[��������PK���������!�4@2��@2��������������S�include/class.loader.phpnu�[��������PK���������!�B޳ �� ��$������������۶�include/admin/class.admin_notice.phpnu�[��������PK���������!�"`�����������������include/admin/class.admin.phpnu�[��������PK���������!�h5xq�q� ������������g�include/admin/class.settings.phpnu�[��������PK���������!�7be'��'��������������( �wp-tag-groups.phpnu�[��������PK���������!�ς���������������� �assets/js/taggroups.min.jsnu�[��������PK���������!�Vy8��8��������������+ �assets/js/jquery.sumoselect.jsnu�[��������PK���������!�AAl)��)��������������v �assets/js/taggroups.jsnu�[��������PK���������!�ү 3�� 3��"������������ �assets/js/jquery.sumoselect.min.jsnu�[��������PK���������!�R,K��K��*������������ �assets/css/blitzer/jquery-ui.theme.min.cssnu�[��������PK���������!�\T��T��9������������9 �assets/css/blitzer/images/ui-bg_glass_55_fbf8ee_1x400.pngnu�[��������PK���������!�ndG������C������������! �assets/css/blitzer/images/ui-bg_highlight-hard_100_f6f6f6_1x100.pngnu�[��������PK���������!�_������C������������d# �assets/css/blitzer/images/ui-bg_highlight-hard_100_eeeeee_1x100.pngnu�[��������PK���������!�D~EB��B��B������������$ �assets/css/blitzer/images/ui-bg_highlight-soft_15_cc0000_1x100.pngnu�[��������PK���������!�@H��H��/������������& �assets/css/ui-lightness/jquery-ui.theme.min.cssnu�[��������PK���������!�wF����:������������qo �assets/css/ui-lightness/images/ui-icons_ef8c08_256x240.pngnu�[��������PK���������!�(����:������������ �assets/css/ui-lightness/images/ui-icons_ffd27a_256x240.pngnu�[��������PK���������!�"Y"��Y"��������������ϓ �assets/css/sumoselect.cssnu�[��������PK���������!�;����������������q �assets/css/backend.cssnu�[��������PK���������!�Kw~(��~(��������������E �assets/css/react-select.cssnu�[��������PK���������!�` :��:�������������� �assets/css/GPL-LICENSE.txtnu�[��������PK���������!�d2G��G��*������������S2 �assets/css/ui-gray/jquery-ui.theme.min.cssnu�[��������PK���������!�݋������9������������oz �assets/css/ui-gray/images/ui-bg_glass_65_ffffff_1x400.pngnu�[��������PK���������!�#֦O��O��9������������{ �assets/css/ui-gray/images/ui-bg_glass_55_fbf9ee_1x400.pngnu�[��������PK���������!�'j+ ��+ ��&������������_} �assets/css/jquery-ui.structure.min.cssnu�[��������PK���������!�o���������������� �assets/css/MIT-LICENSE.txtnu�[��������PK���������!�gל*G��G��.������������I �assets/css/ui-darkness/jquery-ui.theme.min.cssnu�[��������PK���������!�fH<��<��=������������ �assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.pngnu�[��������PK���������!�V��V��=������������L �assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.pngnu�[��������PK���������!�,~,����=������������ �assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.pngnu�[��������PK���������!�Zb[��[��)������������ �assets/css/aristo/jquery-ui.theme.min.cssnu�[��������PK���������!� %����)������������4 �assets/css/aristo/images/progress_bar.gifnu�[��������PK���������!�Qe��e��+������������ �assets/css/aristo/images/slider_handles.pngnu�[��������PK���������!�16����(������������C �assets/css/aristo/images/bg_fallback.pngnu�[��������PK���������!�>` �� ��(������������$ �assets/css/aristo/images/icon_sprite.pngnu�[��������PK���������!�d_.����!������������ �assets/images/btn_donateCC_LG.gifnu�[��������PK���������!� �bkf��kf��%������������f �assets/images/cm-tgp-icon-200x200.pngnu�[��������PK���������!�g0����#������������&*�assets/images/cm-tgp-icon-64x64.pngnu�[��������PK���������!�n��n��"������������EH�assets/images/cm-tg-icon-64x64.pngnu�[��������PK���������!�F2 �� ��������������d�dist/blocks.editor.build.cssnu�[��������PK���������!�������������������������Yn�dist/blocks.style.build.cssnu�[��������PK���������!�IW�W�������������n�dist/blocks.build.jsnu�[��������PK����x�x�/�����