NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
/** * GNU GENERAL PUBLIC LICENSE * Version 3, 29 June 2007 * * Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> * 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. * * <one line to give the program's name and a brief idea of what it does.> * Copyright (C) <year> <name of author> * * 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 <https://www.gnu.org/licenses/>. * * 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: * * <program> Copyright (C) <year> <name of author> * 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 * <https://www.gnu.org/licenses/>. * * 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 * <https://www.gnu.org/licenses/why-not-lgpl.html>. */ var UserScriptStorage, updateBodyCssClassByView; var CSS_PREFIX = 'nyamka-from-romano-userscript'; var timeout = function(ms) { return new Promise(function(resolve) { return setTimeout(resolve, ms); }); }; var createElement = function(htmlText) { var element; if (htmlText.startsWith("<!DOCTYPE HTML PUBLIC")) { element = document.createElement('html'); } else { element = document.createElement('div'); } element.innerHTML = htmlText; if (element.children.length === 1) { return element.children[0]; } return element; }; var createStyle = function(styleText) { var element; element = document.createElement('style'); element.type = 'text/css'; element.updateStyleText = function(styleText) { styleText = styleText || ''; if (element.styleSheet) { element.styleSheet.cssText = styleText; } else { while (element.lastElementChild) { element.removeChild(element.lastElementChild); } element.appendChild(document.createTextNode(styleText)); } }; element.updateStyleText(styleText); return element; }; var extname = function(filename) { var data, splitPathRe; splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; data = splitPathRe.exec(filename).slice(1); return data[3].toLowerCase(); }; var isObject = function(value) { return typeof value === 'object' && (value !== null && value !== (void 0)); }; var isString = function(value) { return typeof value === 'string'; }; var isEmpty = function(value) { if (value === null || value === void 0) { return true; } if (value.length > 0) { return false; } if (value.length === 0) { return true; } if (typeof value !== 'object') { return false; } return Object.keys(value).length === 0; }; var generateUniqueId = (function() { var id; id = 0; return function() { id += 1; return id; }; })(); var getInputCaretPosition = function(input) { if (input.selectionStart || input.selectionStart === '0') { return { startPos: input.selectionStart, endPos: input.selectionEnd }; } return { startPos: input.value.length, endPos: input.value.length }; }; var copyToClipboard = function(data, dataType) { var clipboardItem; dataType = dataType || 'text/plain'; clipboardItem = {}; clipboardItem[dataType] = new Blob([data], { type: dataType }); if (dataType.startsWith('text/') && dataType !== 'text/plain') { clipboardItem['text/plain'] = new Blob([data], { type: 'text/plain' }); } return navigator.clipboard.write([new ClipboardItem(clipboardItem)]); }; var downloadDataAsFile = function(value, fileName, fileType) { var a, blob, event; if (isObject(value)) { fileName = fileName || "download.json"; fileType = fileType || "application/json"; value = JSON.stringify(value, null, 4); } fileName = fileName || "download"; fileType = fileType || "text/plain"; blob = new Blob([value], { type: fileType }); event = document.createEvent('MouseEvents'); a = document.createElement('a'); a.download = fileName; a.href = window.URL.createObjectURL(blob); a.dataset.downloadurl = [fileType, a.download, a.href].join(':'); event.initEvent('click', true, false, unsafeWindow, 0, 0, 0, 0, 0, false, false, false, false, 0, null); a.dispatchEvent(event); }; updateBodyCssClassByView = function() { var cssClass, i, len, pathname, ref; ref = document.body.classList || []; for (i = 0, len = ref.length; i < len; i++) { cssClass = ref[i]; if (cssClass && cssClass.startsWith(`${CSS_PREFIX}-app-view`)) { document.body.classList.remove(cssClass); } } pathname = location.pathname.split('/')[1]; if (pathname === 'user_properties') { pathname = 'user-properties'; } else if (pathname.startsWith('user')) { pathname = 'user'; } document.body.classList.add(`${CSS_PREFIX}-app-view-${pathname}`); }; var onLocationChange = (function() { var allCallbacks; allCallbacks = null; updateBodyCssClassByView(); return function(cb) { var cbId, onChange, origPushState, origReplaceState; if (allCallbacks === null) { // декорируем функции смены url в 1 и единственный раз onChange = function() { var error, k, ref, v; updateBodyCssClassByView(); ref = allCallbacks || {}; for (k in ref) { v = ref[k]; if (v) { try { v(); } catch (error1) { error = error1; console.warn(error); } } } }; unsafeWindow.addEventListener('popstate', onChange); unsafeWindow.addEventListener('pushstate', onChange); unsafeWindow.addEventListener('hashchange', onChange); origPushState = unsafeWindow.history.pushState; unsafeWindow.history.pushState = function() { var result; result = origPushState.apply(unsafeWindow.history, arguments); onChange(); return result; }; origReplaceState = unsafeWindow.history.replaceState; unsafeWindow.history.replaceState = function() { var result; result = origReplaceState.apply(unsafeWindow.history, arguments); onChange(); return result; }; updateBodyCssClassByView(); } // добавляем коллбак к очереди cbId = generateUniqueId(); allCallbacks = allCallbacks || {}; allCallbacks[cbId] = cb; // и сразу запускаем функцию cb(); // возвращаем функцию дерегистратор return function() { delete onLocationChangeCallbacks[cbId]; }; }; })(); var onDomMutations = (function() { var allCallbacks, observer; observer = null; allCallbacks = null; return function(cb) { var MutationObserver, cbId; if (!observer) { MutationObserver = unsafeWindow.MutationObserver || unsafeWindow.WebkitMutationObserver || unsafeWindow.MozMutationObserver; observer = new MutationObserver(function(mutationsList) { var error, k, ref, v; if (isEmpty(allCallbacks)) { observer.disconnect(); return; } ref = allCallbacks || {}; for (k in ref) { v = ref[k]; if (v) { try { v(mutationsList); } catch (error1) { error = error1; console.warn(error); } } } }); observer.observe(document.body, { childList: true, subtree: true }); } // добавляем коллбак к очереди cbId = generateUniqueId(); allCallbacks = allCallbacks || {}; allCallbacks[cbId] = cb; // возвращаем функцию дерегистратор return function() { delete allCallbacks[cbId]; if (isEmpty(allCallbacks)) { observer.disconnect(); observer = null; } }; }; })(); var onClipboardPaste = function(cb) { var onPaste; onPaste = function(event) { var clipboardData; clipboardData = event.clipboardData || {}; clipboardData.items = clipboardData.items || []; cb(clipboardData); }; document.addEventListener('paste', onPaste); // возвращаем функцию дерегистратор return function() { document.removeEventListener('paste', onPaste); }; }; var loadOnce = (function() { var callbacks, loadOnceDone, loadStarted, loaded, preLoadOnce; loadStarted = {}; loaded = {}; callbacks = {}; loadOnceDone = function(_type, url, data) { var cb, i, len, ref; switch (_type) { case 'js': case 'css': loaded[url] = data || true; break; case 'data': if (extname(url) === '.json') { try { data = JSON.parse(data); } catch (error1) { } } loaded[url] = data; } loadStarted[url] = false; ref = callbacks[url] || []; for (i = 0, len = ref.length; i < len; i++) { cb = ref[i]; cb(data); } delete callbacks[url]; }; preLoadOnce = function(url, cb, notLoadedFn) { if (!loadStarted[url] && !loaded[url]) { loadStarted[url] = true; callbacks[url] = callbacks[url] || []; if (cb) { callbacks[url].push(cb); } return notLoadedFn(); } if (!cb) { return; } if (loaded[url]) { cb(loaded[url]); } else { callbacks[url] = callbacks[url] || []; callbacks[url].push(cb); } }; return { js: function(url, options) { options = options || {}; return new Promise(function(resolve, reject) { preLoadOnce(url, resolve, function() { var script; if (options.module) { import(url).then(function(result){ loadOnceDone('js', url, result); }, reject); return; } script = document.createElement('script'); script.onload = function() { loadOnceDone('js', url, void 0); }; script.onerror = reject; script.src = url; script.type = "text/javascript"; document.getElementsByTagName('head')[0].appendChild(script); }); }); }, css: function(url) { return new Promise(function(resolve, reject) { preLoadOnce(url, resolve, function() { var link; link = document.createElement("link"); link.rel = "stylesheet"; link.href = url; if (link.addEventListener) { link.addEventListener("load", function() { return loadOnceDone('css', url, void 0, true); }); } else if (link.attachEvent) { link.attachEvent("onload", function() { return loadOnceDone('css', url, void 0, true); }); } else { // поддержки коллбэка нет. просто запускаем loadOnceDone loadOnceDone('css', url, void 0); } document.getElementsByTagName('head')[0].appendChild(link); }); }); } }; })(); UserScriptStorage = (function() { class UserScriptStorage { constructor() { // следим сразу за изменениями localStorage window.addEventListener('storage', (event) => { var key; if (event.storageArea !== localStorage || event.key.startsWith(this.prefix)) { return; } key = event.key.split(this.prefix)[1]; if (key) { this[key] = this.loadData(key); } }); } registerVariable(key, defaultValue) { this.variables[key] = defaultValue; this[key] = this.loadData(key); } loadData(key) { var data; try { data = JSON.parse(localStorage.getItem(this.prefix + key)); } catch (error1) { data = null; } if (data === null || data === (void 0)) { return this.variables[key] || null; } return data; } saveData() { var key; for (key in this.variables) { localStorage.setItem(this.prefix + key, JSON.stringify(this[key])); } } } UserScriptStorage.prototype.prefix = 'nyamka-from-romano-'; UserScriptStorage.prototype.variables = {}; return UserScriptStorage; }).call(undefined); var storage = new UserScriptStorage(); var faviconImg$3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAHlBMVEX///8AAAAAAAAAAAC7dgDOgwCSXQDFfAAAAAD////JlwHxAAAACHRSTlMAbo+ZOE5gI9ef7CQAAAABYktHRACIBR1IAAAAB3RJTUUH5gEHDzEjwxhyywAAAGtJREFUCNclzjEOgCAQBMAraemoqay14QHqD874AQk/wJJEwH22d9hsJrvNEhEBRZIKrHUqWO+9IzJ2wuKDoq6Yg04b90dRmTlBYBojJsF7IwMDKXdtTGdcAzsfRxm4flA9my5SxTgKvSHxAZOrHo46S4qhAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIyLTAxLTA3VDE1OjQ5OjM0KzAwOjAwvvv+ggAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMi0wMS0wN1QxNTo0OTozNCswMDowMM+mRj4AAAAASUVORK5CYII="; var favicon$3 = faviconImg$3; var getUserId = function(url) { var userId; url = url || ''; userId = ''; if (url.indexOf('/user') > -1) { userId = url.split('/user')[1]; } userId = userId.split('?')[0]; return userId; }; var getCurrentUserId = function() { var profileLink; profileLink = document.querySelector('#site-content-right li.first a'); if (profileLink) { return getUserId(profileLink.href); } return null; }; var isCurrentSite$3 = function() { return location.host === 'fanfics.me'; }; var getChapterEditor$4 = function() { return { title: document.querySelector("input#chapterName"), body: document.querySelector('textarea#chapterText') }; }; var e=[],t=[];function n(n,r){if(n&&"undefined"!=typeof document){var a,s=!0===r.prepend?"prepend":"append",d=!0===r.singleTag,i="string"==typeof r.container?document.querySelector(r.container):document.getElementsByTagName("head")[0];if(d){var u=e.indexOf(i);-1===u&&(u=e.push(i)-1,t[u]={}),a=t[u]&&t[u][s]?t[u][s]:t[u][s]=c();}else a=c();65279===n.charCodeAt(0)&&(n=n.substring(1)),a.styleSheet?a.styleSheet.cssText+=n:a.appendChild(document.createTextNode(n));}function c(){var e=document.createElement("style");if(e.setAttribute("type","text/css"),r.attributes)for(var t=Object.keys(r.attributes),n=0;n<t.length;n++)e.setAttribute(t[n],r.attributes[t[n]]);var a="prepend"===s?"afterbegin":"beforeend";return i.insertAdjacentElement(a,e),e}} var css$c = ".nyamka-from-romano-userscript-blur .MessageLeft, .nyamka-from-romano-userscript-blur .MessageText, .nyamka-from-romano-userscript-blur a.user, .nyamka-from-romano-userscript-blur .MessageCommentLeft,\n.nyamka-from-romano-userscript-blur .MessageRight > .small.light, .nyamka-from-romano-userscript-blur.user, .nyamka-from-romano-userscript-blur > a > img {\n -webkit-filter: grayscale(1) blur(7px);\n -moz-filter: grayscale(1) blur(7px);\n filter: grayscale(1) blur(7px);\n position: relative;\n pointer-events: none;\n}\n.nyamka-from-romano-userscript-blur .MessageLeft::after, .nyamka-from-romano-userscript-blur .MessageText::after, .nyamka-from-romano-userscript-blur a.user::after, .nyamka-from-romano-userscript-blur .MessageCommentLeft::after,\n.nyamka-from-romano-userscript-blur .MessageRight > .small.light::after, .nyamka-from-romano-userscript-blur.user::after, .nyamka-from-romano-userscript-blur > a > img::after {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n@media (max-width: 700px) {\n .nyamka-from-romano-userscript-blur .MessageLeft, .nyamka-from-romano-userscript-blur .MessageText, .nyamka-from-romano-userscript-blur a.user, .nyamka-from-romano-userscript-blur .MessageCommentLeft,\n.nyamka-from-romano-userscript-blur .MessageRight > .small.light, .nyamka-from-romano-userscript-blur.user, .nyamka-from-romano-userscript-blur > a > img {\n -webkit-filter: grayscale(1) blur(5px);\n -moz-filter: grayscale(1) blur(5px);\n filter: grayscale(1) blur(5px);\n }\n}\n.nyamka-from-romano-userscript-blur .LikeButton, .nyamka-from-romano-userscript-blur .LikeCounter, .nyamka-from-romano-userscript-blur a.normal_link, .nyamka-from-romano-userscript-blur .MessageButtons, .nyamka-from-romano-userscript-blur .DropDownManagement {\n display: none;\n}\n.nyamka-from-romano-userscript-blur .MessageRightUser > .small.light {\n display: none;\n}\n.nyamka-from-romano-userscript-blur .MessageRightUser > span[data-show-member] {\n pointer-events: none;\n}\n\nbody.nyamka-from-romano-userscript-app-view-notifications .ContentTable.Messages:not(.visible) {\n position: relative;\n pointer-events: none;\n}\nbody.nyamka-from-romano-userscript-app-view-notifications .ContentTable.Messages:not(.visible)::after {\n content: \"\";\n position: absolute;\n background: #fcfaf2;\n top: 0;\n left: 0;\n height: 100%;\n width: 100%;\n}\n\n@media (max-width: 1023px) {\n body[data-nyamka-script=fanfics-me] .MessageButtons .LikeButton {\n visibility: visible;\n }\n body[data-nyamka-script=fanfics-me] .MessageButtons .LikeCounter {\n margin-left: 10px;\n }\n}"; n(css$c,{}); var hideElement, initSettings, processCommentBody, processLikeBody, processNotificationBody, indexOf$5 = [].indexOf; hideElement = function(node, forceBlur) { if (!node) { return; } if (storage.usersHateListUseCssClass || forceBlur) { if (node.classList) { node.classList.add(`${CSS_PREFIX}-blur`); } else if (node.className) { node.className = (node.className || '') + ` ${CSS_PREFIX}-blur`; } return; } if (node.style) { node.style.display = 'none'; } else { node.textContent = ''; } }; processCommentBody = function(node) { var author, authorId, j, len, ref, user, userId; // пытаемся найти id комментатора author = node.querySelector('.MessageRightUser a') || {}; authorId = getUserId(author.href); // добавляем id пользователя, если его нет. так потом можно будет нормально скрывать кнопки // для собственных мимимишек if (authorId && !node.getAttribute('data-poster')) { node.setAttribute('data-poster', authorId); } if (authorId && storage.usersHateList[authorId]) { // чао бамбино, сеньорита! hideElement(node); return; } ref = node.querySelectorAll('.MessageText a.user'); // ищем теперь упоминание любого пользователя из hateList в комменте for (j = 0, len = ref.length; j < len; j++) { user = ref[j]; userId = getUserId(user.href); if (storage.usersHateList[userId]) { // ага! зачем читать упоминания о вас, мой дорогой? hideElement(node); return; } } }; processNotificationBody = function(node) { var authorId, i, j, len, textContent, user, userId, users, usersContainer; usersContainer = node.querySelector('.MessageRightUser') || {}; textContent = (usersContainer.textContent || '').toLowerCase(); if (textContent.indexOf('упомянул вас') > -1 || textContent.indexOf('упомянула вас') > -1) { authorId = getUserId(usersContainer.querySelector('a').href); if (authorId && storage.usersHateList[authorId]) { // чао бамбино, сеньорита! hideElement(node); return; } return; } // обычный список мимимишек users = usersContainer.querySelectorAll('a.user'); for (i = j = 0, len = users.length; j < len; i = ++j) { user = users[i]; userId = getUserId(user.href); if (!userId || !storage.usersHateList[userId]) { continue; } if (users.length === 1) { hideElement(node); return; } // скрываем только имя и запятую hideElement(user); hideElement(user.nextSibling); if (i === 0) { hideElement(node.querySelector('.MessageLeft'), true); } } }; processLikeBody = function(node) { var author, authorId; author = node.querySelector('a') || {}; authorId = getUserId(author.href); if (authorId && storage.usersHateList[authorId]) { // чао бамбино, сеньорита! hideElement(node); return; } }; initSettings = function() { var checkbox, infos, j, knownUserIds, len, oblivionSettings, ref, ref1, tdStat, tr, userId, v, valueToChecked; if (!document.getElementById('bl_list')) { return setTimeout(initSettings, 300); } valueToChecked = function(value) { if (value) { return 'checked'; } return ''; }; knownUserIds = []; ref = document.getElementById('bl_list').querySelectorAll('tr'); for (j = 0, len = ref.length; j < len; j++) { tr = ref[j]; tdStat = tr.querySelector('td.stat'); userId = tr.id.split('bl_member_')[1]; if (!tdStat || !userId) { continue; } checkbox = createElement(`<div> <label style="cursor: pointer"> <input type='checkbox' data-user-id="${userId}" ${valueToChecked(storage.usersHateList[userId])}> <small style='font-size: 90%'>Скрывать связанные комментарии, уведомления, мимимишки</small> </label> </div>`); checkbox.querySelector('input').addEventListener('click', function() { userId = this.getAttribute('data-user-id'); storage.usersHateList[userId] = !!this.checked; storage.saveData(); }); tr.children[1].appendChild(checkbox); knownUserIds.push(userId); } ref1 = storage.usersHateList; for (userId in ref1) { v = ref1[userId]; if (!v || !knownUserIds.includes(userId)) { delete storage.usersHateList[userId]; } } storage.saveData(); infos = document.getElementsByClassName('InfoContainer'); if (infos[0]) { oblivionSettings = createElement(`<div class='InfoContainer'> <b>Дополнительные настройки "Забвения пользователей"</b> <br> <label> <input type='checkbox' class='ChekboxImg' ${valueToChecked(storage.usersHateListUseCssClass)}> Вместо агрессивного скрытия использовать везде блюр </label> </div>`); oblivionSettings.querySelector('input').addEventListener('click', function() { storage.usersHateListUseCssClass = !!this.checked; storage.saveData(); }); infos[0].parentNode.appendChild(oblivionSettings); } }; var init$4 = function() { var addHideMimimiStyle, currentUserId, styleHideOwnMimimi; if (!isCurrentSite$3()) { return; } // переменные в сторадже и миграции // TODO: удалить нижние строки с localStorage, когда пройдет минимум 2-3 месяца if (localStorage.getItem('oblivion-userscript-usersHateList')) { localStorage.setItem(storage.prefix + 'usersHateList', localStorage.getItem('oblivion-userscript-usersHateList')); localStorage.removeItem('oblivion-userscript-usersHateList'); } if (localStorage.getItem('oblivion-userscript-useCssClass')) { localStorage.setItem(storage.prefix + 'usersHateListUseCssClass', localStorage.getItem('oblivion-userscript-useCssClass')); localStorage.removeItem('oblivion-userscript-useCssClass'); } storage.registerVariable('usersHateList', {}); storage.registerVariable('usersHateListUseCssClass', false); currentUserId = null; styleHideOwnMimimi = null; addHideMimimiStyle = function() { if (!currentUserId) { currentUserId = getCurrentUserId(); } if (currentUserId && !styleHideOwnMimimi) { styleHideOwnMimimi = createStyle(`table[data-poster="${currentUserId}"] > tbody > tr > td > .MessageBody > .MessageButtons .LikeButton, table[data-poster="${currentUserId}"] > tbody > tr > td > .MessageButtons .LikeButton, .MessageAlone[data-poster="${currentUserId}"] > .Message .LikeButton{ display: none; }`); document.head.appendChild(styleHideOwnMimimi); } }; // наблюдение за новым контентом на странице onLocationChange(function() { if (location.pathname === '/user_properties' && location.search.indexOf('action=black_list') > -1) { initSettings(); return; } if (location.pathname.startsWith('/message')) { document.addEventListener('DOMContentLoaded', function() { var container, posterId; container = document.querySelector('.MessageAlone'); if (!container) { return; } addHideMimimiStyle(); if (!container.getAttribute('data-poster')) { posterId = getUserId(document.querySelector('.MessageAloneHead > a').href); container.setAttribute('data-poster', posterId); } }); return; } if (location.pathname === '/notifications') { document.addEventListener('DOMContentLoaded', function() { var container, j, len, node, ref; container = document.querySelector('#site-content .ContentTable.Messages'); if (isEmpty(storage.usersHateList)) { if (container) { container.classList.add('visible'); } return; } ref = document.querySelectorAll('table.Message'); for (j = 0, len = ref.length; j < len; j++) { node = ref[j]; processNotificationBody(node); } if (container) { container.classList.add('visible'); } }); return; } }); onDomMutations(function(mutationsList) { var comment, j, k, l, len, len1, len2, len3, like, m, n, node, ref, ref1, ref2; addHideMimimiStyle(); //if isEmpty(storage.usersHateList) // return // нас интересуют ТОЛЬКО новые ноды for (j = 0, len = mutationsList.length; j < len; j++) { m = mutationsList[j]; if (m.addedNodes.length) { ref = m.addedNodes; for (k = 0, len1 = ref.length; k < len1; k++) { node = ref[k]; if (!(node)) { continue; } // нашли блок комментов if (indexOf$5.call(node.classList || [], 'MessageComments') >= 0 || indexOf$5.call(node.classList || [], 'MessageCommentsContainer') >= 0) { ref1 = node.querySelectorAll('table.MessageBody'); for (l = 0, len2 = ref1.length; l < len2; l++) { comment = ref1[l]; processCommentBody(comment); } } if (location.pathname === '/notifications' && indexOf$5.call(node.classList || [], 'Message') >= 0) { processNotificationBody(node); } // список мимимикнувших в модальных окнах if (indexOf$5.call(node.classList || [], 'LikesList') >= 0) { ref2 = node.children; for (n = 0, len3 = ref2.length; n < len3; n++) { like = ref2[n]; processLikeBody(like); } } } } } }); }; var css$b = ".notyf__message {\n text-align: left;\n}"; n(css$b,{}); var showNotify; showNotify = async function(options) { var notify; try { Notyf; } catch (error1) { await Promise.all([loadOnce.js('https://cdn.jsdelivr.net/npm/notyf@3.10.0/notyf.min.js'), loadOnce.css('https://cdn.jsdelivr.net/npm/notyf@3.10.0/notyf.min.css')]); } notify = new Notyf({ duration: 3000, position: { y: 'top' } }); notify[options.type](options.text); }; var notification = { success: function(text) { return showNotify({ type: 'success', text }); }, error: function(text) { return showNotify({ type: 'error', text }); } }; var css$a = ".nyamka-from-romano-userscript-dropdown {\n position: relative;\n display: inline-block;\n}\n.nyamka-from-romano-userscript-dropdown-button .caret {\n display: inline-block;\n width: 0;\n height: 0;\n margin-left: 2px;\n vertical-align: middle;\n border-top: 4px dashed;\n border-top: 4px solid\\9 ;\n border-right: 4px solid transparent;\n border-left: 4px solid transparent;\n}\n.nyamka-from-romano-userscript-dropdown-content {\n display: none;\n position: absolute;\n background-color: #D8D8C4;\n min-width: 220px;\n border: 1px solid #CCCCCC;\n box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);\n z-index: 1;\n padding: 0;\n}\n.nyamka-from-romano-userscript-dropdown-content li {\n color: #333;\n padding: 6px 15px;\n text-decoration: none;\n display: block;\n line-height: 1.2;\n cursor: pointer;\n}\n.nyamka-from-romano-userscript-dropdown-content li:hover, .nyamka-from-romano-userscript-dropdown-content li:focus {\n background: #c3a63f;\n color: black;\n}\n.nyamka-from-romano-userscript-dropdown-content li img {\n width: 18px;\n height: auto;\n margin-right: 6px;\n}\n.nyamka-from-romano-userscript-dropdown-content.show {\n display: block !important;\n}\n\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-dropdown-button {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-dropdown-button:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-dropdown-button:focus {\n background: #d8d8c4;\n}\n\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-button {\n color: #4f2d01;\n background: white;\n font-size: 12px;\n margin-bottom: 5px;\n margin-right: 5px;\n padding: 4px 8px;\n border: 1px solid #4f2d014d;\n border-radius: 5px;\n}\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-button:hover, body[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-button:focus {\n color: #4f2d01;\n border-color: #4f2d014d;\n}\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-content {\n background-color: #f6ecda;\n border-radius: 3px;\n padding: 4px 0;\n}\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-content li:hover, body[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-dropdown-content li:focus {\n background: #c69e6b;\n}\n\nbody[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-dropdown-content {\n margin-left: 0 !important;\n border-radius: 1px;\n}\nbody[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-dropdown-content li:hover, body[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-dropdown-content li:focus {\n background: #55a4f8;\n color: white;\n}"; n(css$a,{}); var watchForOutsideClick; watchForOutsideClick = function(dropdownContent) { var callback; callback = function(event) { if (!event.target.matches(`.${CSS_PREFIX}-dropdown-button`)) { if (dropdownContent.classList.contains('show')) { dropdownContent.classList.remove('show'); unsafeWindow.removeEventListener('click', callback); } } }; unsafeWindow.addEventListener('click', callback); }; var Dropdown = class Dropdown { constructor(title, items) { var i, item, len, liItem, ref; this.element = createElement(`<div class='${CSS_PREFIX}-dropdown'> <button class='${CSS_PREFIX}-dropdown-button'>${title} <span class='caret'></span></button> <ul class='${CSS_PREFIX}-dropdown-content' role='menu'> </ul> </div>`); this.element.children[0].addEventListener('click', (event) => { event.preventDefault(); this.element.children[1].classList.toggle('show'); watchForOutsideClick(this.element.children[1]); }); ref = items || []; for (i = 0, len = ref.length; i < len; i++) { item = ref[i]; liItem = createElement(`<li role='menuitem'>${item.text}</li>`); if (item.onClick) { liItem.addEventListener('click', (function(item) { return function(event) { event.preventDefault(); item.onClick(event, item); }; })(item)); } this.element.children[1].appendChild(liItem); } return; } open() { this.element.children[1].classList.add('show'); } close() { this.element.children[1].classList.remove('show'); } }; var css$9 = ".nyamka-from-romano-userscript-modal-content {\n text-align: left;\n}\n\nbody[data-nyamka-script=fanfics-me] #nyamka-from-romano-userscript-modals-container {\n display: none;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content {\n padding: 10px;\n text-align: left;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content .form-inline {\n margin-bottom: 0.7em;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content .form-inline label {\n margin-bottom: 0.5em;\n display: inline-block;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content .form-inline select {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content .form-inline select:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content .form-inline select:focus {\n background: #d8d8c4;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content h4, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content p {\n margin-bottom: 0.5em;\n text-align: left;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content ol {\n text-align: left;\n list-style: decimal;\n padding-left: 2em;\n margin-bottom: 0.5em;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-modal-content ol li {\n margin-bottom: 0.5em;\n}\n\nbody[data-nyamka-script=gikami-ru] #nyamka-from-romano-userscript-modals-container .modal-header .modal-title {\n order: 0;\n}\nbody[data-nyamka-script=gikami-ru] #nyamka-from-romano-userscript-modals-container .modal-header button.close {\n order: 1;\n}\nbody[data-nyamka-script=gikami-ru] #nyamka-from-romano-userscript-modals-container .modal-header button.close span {\n margin: 0;\n padding: 0px 10px;\n}\nbody[data-nyamka-script=gikami-ru] #nyamka-from-romano-userscript-modals-container hr {\n margin: 15px 0;\n}"; n(css$9,{}); var getJQuery, getModalType, indexOf$4 = [].indexOf; getJQuery = function() { try { if ($) { return $; } } catch (error1) { } try { return jQuery; } catch (error1) { } return void 0; }; getModalType = (function() { var modalType; modalType = null; return function() { var jq, test; if (!modalType) { jq = getJQuery(); test = jq(createElement('<div></div>')); if (test.arcticmodal) { modalType = 'arctic'; } else { modalType = 'bootstrap'; } } return modalType; }; })(); var Modal = class Modal { constructor(options) { var closeButton, modalType, modalsContainer; this.options = options || {}; modalsContainer = document.getElementById(`${CSS_PREFIX}-modals-container`); if (!modalsContainer) { modalsContainer = createElement(`<div id='${CSS_PREFIX}-modals-container'></div>`); document.body.appendChild(modalsContainer); } modalType = getModalType(); if (modalType === 'arctic') { closeButton = "<div class='box-modal_close arcticmodal-close'>Закрыть</div>"; if (this.options.disableClose) { closeButton = ''; } this.element = createElement(`<div class='box-modal'> ${closeButton} <div> <div class='modal-title'>${this.options.title || ''}</div> <div class='${CSS_PREFIX}-modal-content'> ${this.options.content} </div> <div class='clear'></div> </div> </div>`); } else if (modalType === 'bootstrap') { closeButton = `<button type="button" class="close" data-dismiss="modal" aria-label="Закрыть"> <span aria-hidden="true">×</span> </button>`; if (this.options.disableClose) { closeButton = ''; } this.element = createElement(`<div class='modal fade' role='dialog' aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> ${closeButton} <h5 class="modal-title">${this.options.title || ''}</h5> </div> <div class="modal-body"> ${this.options.content} </div> </div> </div> </div>`); } modalsContainer.appendChild(this.element); } isVisible() { var modalType, modalsContainer; modalType = getModalType(); if (modalType === 'arctic') { modalsContainer = document.getElementById(`${CSS_PREFIX}-modals-container`); if (!modalsContainer) { return false; } return this.element.parentNode !== modalsContainer; } else if (modalType === 'bootstrap') { return indexOf$4.call(this.element.classList, 'in') >= 0 || indexOf$4.call(this.element.classList, 'show') >= 0; // bootstrap4 } return false; } show() { var jq, modalType; modalType = getModalType(); jq = getJQuery(); if (modalType === 'arctic') { jq(this.element).arcticmodal(); } else if (modalType === 'bootstrap') { jq(this.element).modal({ keyboard: !this.options.disableClose }); } } close() { var jq, modalType; modalType = getModalType(); jq = getJQuery(); if (modalType === 'arctic') { try { jq(this.element).arcticmodal('close'); } catch (error1) { } } else if (modalType === 'bootstrap') { jq(this.element).modal('hide'); } } destroy() { var modalsContainer; this.close(); modalsContainer = document.getElementById(`${CSS_PREFIX}-modals-container`); if (!modalsContainer) { return; } try { modalsContainer.removeChild(this.element); } catch (error1) { } } }; var faviconImg$2 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAABpUExURU0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAE0HAEdwTDgyGKEAAAAjdFJOU//mkncNGYJUTNbuESH0m7DhRsD5QCnMpLdjjAe7ZjIEXsMAsLedawAAAOVJREFUOMulU0cSwkAM05Zk0wskgRTq/x/JFpghMyI54KtkW7ZlPHcCfxCKq1Gq5wQ91hlsDB2tMDYORKlurIU+4R0F1VAB6cGXN0ykAY7y4PN7NoWtXithUdGxMbWFYunTBdtDZMub5VvfmqCBJkltj0sf0U2WSBOBlb4V4YGmzQIu2S0KHNt3/sSOZbW7/i4qds0CuIf14EzPXX3mx0D9kCO9BLzhhqlhSo9n3FEaKggQOSd0w+TTk1+ejGIvv/1tWicg2XC1NdHSbtg+R6w3/+IU7zyOmLcJSu68nsx3CPO/3/0C6z9sqvXOqB8AAAAASUVORK5CYII="; var favicon$2 = faviconImg$2; var isCurrentSite$2 = function() { return location.host === 'ficbook.net'; }; var getChapterEditor$3 = function() { var baseEditorTab, container; //container = document.querySelector('div.text-editor-container') container = document.querySelector('form#savePartForm'); if (!container) { return; } baseEditorTab = container.querySelector("a#jsToFicbookEditor"); // обязательно переключаемся на обычный редактор if (baseEditorTab) { baseEditorTab.click(); } return { title: container.querySelector("input#titleInput"), body: container.querySelector('textarea[name="content"]') }; }; var faviconImg$1 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAD0AAAAqCAMAAAA3b6P4AAACslBMVEWXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACXAACpit0XAAAA5XRSTlMAAQIDBAUGBwgJCgsMDQ4PEBESFBUWFxgZGhscHR4fICEiIyQlJygpKissLi8wMTM0NTY3ODk6Ozw9PkBBQkNFR0hJSktMTU5PUFFSVFVWV1hZWltcXV5fY2RlZmhpamtsbW5vcHFyc3V2d3p7fX5/gIGCg4SFhoeIiouMjY6PkJGSlJWWl5iZmpucnZ6foKGipKWnqKmrrK2ur7CxsrO0tba3uLm6u7y9vr/AwsPFxsfIycrLzM7P0NLT1NXW19na29zd3t/g4eLj5OXm5+jp6uvs7e7v8PHy8/T19vf4+fr7/P3+b1plRQAABBRJREFUSMedlvtb1FUQxgcEBMtQggUCxVACu1ApYmRmUqESkCkUREaS4h3JCDONEFPBoBQCJcDIGxkGKYGBkgGSAq4BARIXWWA//0c/7J39LvY0P82cd97nzJlzZuaIKvBRmVqmP/XOrrQNIbOVsNfyjq/3nYrs/1GlWjPe90v28wrgnOiDP7ddeN9WAE47O9DLQI6PksfDMWVjnfuDlCC3b4HbpYcOFjUC9UHKWywtQZNpjTmdgu60uSIis979HRr8bIT4YjVDqV6TFlPgVqjxjBegyM4MfSPepDsm9tAcb5mwHnpfMJmq39C+ZLQCytrfM3deUAylwWYL2+BTc4eICU4aNk/pLgm0DNQuqY+/Nk8zmuX0PmFx83V0eIiIyOPlmq3Wpw+tg1OG7Lk1c8YSzmZsqYhIhLp7pVLy3AugLUqnz73L15boHogUke1cW6ic+5n7QJvhLCLic4cTlmAGRIhdFhfdlcmPpUjCfSj3FpEZ9dQ5W6CFDPrLIc652rj2FWUi0f1wdZGI5DERbg56dlIvO6hyt1UTe8pEZKUa1JEiMVBhDu6GzbHc8LFZUSXHRUTC/oShBHG5DKkmbPUg1xPujSyxSba/sltEREJuA9tl0Qikz9JD8f1ovrjOVtvF7NexRqcsVgOfSIIW6pMDVe7z3zwLHDjFeSfb7GV/P6fXwrqATInuAvraWruB0U2bx4aenqKRJA/MMairhoAsCczr1TWH8dPLfO7w2VRtqKDZFFjsOHBY5JmNX549dzQ5ROQkLY9MQbZvKDCzNgHkGCvaLRGOznS2zQ6e2GJu7gXY7/3kiqQj52ubbo9C143asm2hLsrsD3jV8l2PAbcGsBRN9VuK7B+Gvc3N+WnDKEuqAtlz8FdT37J/5dhdk3vbxUb4Y23UusT08nZAobyTSDeoD8VUmKja3DCVcylk6LB5J7Qcts54Ncv13PVXDMQWLfC9o4SOMxqmd/TqocSKvZirTiIiTusM3NbM5aq9AGccPoYaB73jwn/ItWJ/xQ4RkTWVOupg4VqViEw7ApBTA5l6P9/T8LrV1veHA0RCirQANKU/q193KdZHEiUiMjc2vxUO2E9ml5MlXhn9ANRsVJmAWdUAjAaLiKoRaN9pRX6bdv9VjQD8FGv5HgNuAjS5ioj3Hd3jnyS+7RQfA+BSpONkMFwD5OvOVzEClZNmuV0hE/cAqqOmK7yjD4ENen1Jhpo+y6xt1SXmWoKNEtzS8qOn0Zi3jw7z1hg+BNCZ5m2z/DxmmFuZ7DKbATeBsYKgKX8/C6JNehjfmEZ3DlAb8YC/k1dVlrHx5LHaNNZ7GElzlQdJwOXaOA8REb9sSh2Myw5xn78s/0Fmpzc0V+TmVY1y2lP+h3jF5l9qvPpdnP4I/wITXDY67Xw1sAAAAABJRU5ErkJggg=="; var favicon$1 = faviconImg$1; var isCurrentSite$1 = function() { return location.host === 'archiveofourown.org'; }; var getChapterEditor$2 = function() { return void 0; }; var isCurrentSite = function() { return location.host === 'gikami.ru'; }; var getChapterEditor$1 = function() { var body, bodyEditor, container, editor, i, len, ref; container = document.querySelector('form[name="form_book"]'); if (!container) { return; } ref = unsafeWindow._mediumEditors || []; for (i = 0, len = ref.length; i < len; i++) { editor = ref[i]; if (editor && editor.elements[0]) { if (editor.elements[0].id.startsWith('medium-editor-book')) { bodyEditor = editor; break; } } } if (!bodyEditor) { throw "Can't find editor for body!"; } // создаем "прокси" для того, чтоб не ломать код, который ожидает обычный textarea для тела редактора body = new Proxy({}, { get: function(target, property) { if (property === 'addEventListener' || property === 'removeEventListener') { return function() { return bodyEditor.elements[0][property].apply(bodyEditor.elements[0], arguments); }; } if (property === 'value') { return bodyEditor.getContent(); } throw "Not implemented"; }, set: function(target, property, value) { if (property !== 'value') { throw "Not implemented"; } bodyEditor.elements[0].click(); bodyEditor.elements[0].focus(); bodyEditor.selectAllContents(); bodyEditor.pasteHTML(value + '', { cleanAttrs: [], cleanTags: [], unwrapTags: [] }); } }); return { title: container.querySelector('input[name="title"]'), body: body }; }; var faviconImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABxVBMVEUAAABIU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU15IU17////OEFtSAAAAlXRSTlMAAAc5Bj3XQgiluBBK8vtvBA633CsVQF75nn1IF8j0UoPDFHD9/vjJG41rIdbq6e1UAkTAvqB/dDw/me7mPi7h5ToJJOtcGZWfLWSh2free2Hs221grOi7l8zHHaqCvN9Q1LQ7tTRf50cpesq9xEnRNobVC/YBhAocI1qSGqao7+B1LzPjwSjkr0sgxYv8cSeKN4cYA0t1F5MAAAHHSURBVDjLlZPpOxtRFMbnjWBCERp7GgnJqKUJQRt7GlsRYmsJuth3SsRWO7XV3p7/151EZDKeZzw9X+6Z+77zmzn3nsNx/xdQRamhpCM6JhYKDvAaiouHAuBVAiUmPSIArRyG5BQieq17NKSmyQxAegYzUKYKgc9lZcsN+jeiToYcJoA3mnLlgDwzWQTmyH8L6AsMhXJAUTHRuywrka2k1F5G5c8ARvZyBf8+7oOjsqqaamrlgLp6IudHuBpyNI1E1qbm0ggDtC1k+JTW2tbu7mCkziRPVwQBcHT39PZ9/mIW67D1D3gHhyIB/HDx128CBeO7u8MdJQP8GBm1UThixiJ/EfHjTiEsJ6ZMoFl6acCkYAnrUwPT6pnyWQkD+jkJvnp+oW9xiZw/nxyBQ5ZExvLMCluGfQjpOrdUXzW6/GtsFUIngXWNVO9sUwEbXpaNbCIIaFoNywmaOvGysSXu/dIGOmPbG1It1h07H+BifZc972VDBMwGKxT2xw8On5oeR8ds7/c2y056iMynZ57zC5W0cn/eH5OpbIsll3Tlvb5RP+tgrY+Fi4Pu2OrRKwwLbhfG/ErTdnc/pDRrHGf/q6xz/17QHwAqy6S9PqXuBQAAAABJRU5ErkJggg=="; var favicon = faviconImg; var getChapterEditor = function() { if (isCurrentSite$3()) { return getChapterEditor$4(); } if (isCurrentSite$2()) { return getChapterEditor$3(); } if (isCurrentSite$1()) { return getChapterEditor$2(); } if (isCurrentSite()) { return getChapterEditor$1(); } return void 0; }; var fanficsMePreprocess, ficbookNetPreprocess, lineToParagraph; fanficsMePreprocess = function(text, options) { var converted, end, getNoteMark, j, len, line, note, noteTag, notes, ref, start; options = options || {}; noteTag = options.noteTag || 'note'; converted = []; notes = []; getNoteMark = function(index, inText) { if (options.noteType === '*') { return "*".repeat(index); } // number if (inText) { return `(${index})`; } return `${index})`; }; ref = text.split('\n').filter(function(line) { return !!line.trim(); }); for (j = 0, len = ref.length; j < len; j++) { line = ref[j]; start = line.indexOf(`<${noteTag}>`); end = line.indexOf(`</${noteTag}>`); if (start > -1) { note = line.substring(start + noteTag.length + 2, end); line = line.substring(0, start) + "<b>" + getNoteMark(notes.length + 1, true) + "</b>" + line.substr(end + noteTag.length + 3); notes.push(note); } converted.push(line); } converted = converted.join('\n'); if (notes.length) { converted = converted + "\n<center>---</center>\n<i>ПРИМЕЧАНИЯ:</i>\n" + notes.map(function(note, index) { return `<i><b>${getNoteMark(index + 1)}</b> — ${note}</i>`; }).join('\n'); } return converted; }; ficbookNetPreprocess = function(text, options) { var converted, j, len, line, ref; options = options || {}; if (options.convertNoteTag) { text = text.replaceAll("<footnote>", `<${options.convertNoteTag}>`).replaceAll("</footnote>", `</${options.convertNoteTag}>`); } if (options.extractNoteTag) { options.noteTag = options.noteTag || 'footnote'; text = fanficsMePreprocess(text, options); } converted = []; ref = text.split('\n'); for (j = 0, len = ref.length; j < len; j++) { line = ref[j]; if (line.startsWith('<tab>')) { line = line.substr(5); } converted.push(line); } return converted.join('\n'); }; lineToParagraph = function(line, nextLine, paragraphType) { nextLine = nextLine || ''; if (!line.trim()) { return line; } if (paragraphType === 'tab' && !line.startsWith('<center>') && !line.endsWith('</center>') && line) { return `<tab>${line}`; } if (paragraphType === '4-spaces' && !line.startsWith('<center>') && !line.endsWith('</center>')) { return ` ${line}`; } if (paragraphType === '2em' && !line.startsWith('<center>') && !line.endsWith('</center>')) { return `<2em>${line}`; } if (paragraphType === 'new-line') { if (!line.startsWith('<center>') && !line.endsWith('</center>') && nextLine.trim()) { return `${line}\n `; } } return line; }; var fanficsMe = { toFicbookNet: function(text) { var converted, i, j, len, line, lines; converted = []; text = fanficsMePreprocess(text, { noteType: storage.exportNotesStrategyForFicbookNet }); text = text.replaceAll('<u>', '').replaceAll('</u>', '').replaceAll('<hr>', '<tab>\n').replaceAll('<empty-line>', '\n<tab>'); lines = text.split('\n'); for (i = j = 0, len = lines.length; j < len; i = ++j) { line = lines[i]; if (!line.trim()) { continue; } if (line === '<tab>') { converted.push(line); continue; } if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1 && line.indexOf('<center>') === -1) { line = `<center>${line}</center>`; } else if (line.indexOf('<center>') === -1 && line.indexOf('<right>') === -1) { line = lineToParagraph(line, lines[i + 1], storage.exportParagraphStrategyForFicbookNet); } converted.push(line); } return converted.join('\n'); }, toAuthorToday: function(text) { var converted, j, len, line, lines; converted = []; text = fanficsMePreprocess(text, { noteType: storage.exportNotesStrategyForAuthorToday }); text = text.replaceAll('<hr>', ' ').replaceAll('<empty-line>', ' '); lines = text.split('\n'); for (j = 0, len = lines.length; j < len; j++) { line = lines[j]; if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1) { line = line.replaceAll('<center>', '').replaceAll('</center>', ''); line = `<p style="text-align: center;">${line}</p>`; } else if (line.indexOf('<center>') > -1) { line = line.replace("<center>", "<p style=\"text-align: center;\">").replace('</center>', '</p>'); } else if (line.indexOf('<right>') > -1) { line = line.replace("<right>", "<p style=\"text-align: right;\">").replace('</right>', '</p>'); } else { line = `<p>${line}</p>`; } converted.push(line); } return converted.join('\n'); }, toAO3: function(text) { var converted, i, j, len, line, lines; converted = []; text = fanficsMePreprocess(text, { noteType: storage.exportNotesStrategyForAO3 }); text = text.replaceAll('<i>', '<em>').replaceAll('</i>', '</em>').replaceAll('<s>', '<strike>').replaceAll('</s>', '</strike>').replaceAll('<hr>', '<hr/>').replaceAll('<empty-line>', ' '); lines = text.split('\n'); for (i = j = 0, len = lines.length; j < len; i = ++j) { line = lines[i]; if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1) { line = line.replaceAll('<center>', '').replaceAll('</center>', ''); line = `<p align='center'>${line}</p>`; } else if (line === '<center>---</center>') { line = "<hr/>"; } else if (line.indexOf('<center>') > -1) { line = line.replace("<center>", "<p align='center'>").replace('</center>', '</p>'); } else if (line.indexOf('<right>') > -1) { line = line.replace("<right>", "<p align='right'>").replace('</right>', '</p>'); } else if (line.indexOf('<hr/>') === -1) { line = lineToParagraph(line, lines[i + 1], storage.exportParagraphStrategyForAO3); line = line.split('\n').join("</p><p>"); line = `<p>${line}</p>`; } converted.push(line); } return converted.join('\n'); } }; var ficbookNet = { toFanficsMe: function(text) { return ficbookNetPreprocess(text, { convertNoteTag: 'note' }); }, toAuthorToday: function(text) { var converted, j, len, line, ref; converted = []; text = ficbookNetPreprocess(text, { extractNoteTag: true, noteType: storage.exportNotesStrategyForAuthorToday }); ref = text.split('\n'); for (j = 0, len = ref.length; j < len; j++) { line = ref[j]; if (!line.trim()) { line = ' '; } if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1) { line = line.replaceAll('<center>', '').replaceAll('</center>', ''); line = `<p style='text-align: center;'>${line}</p>`; } else if (line.indexOf('<center>') > -1) { line = line.replace("<center>", "<p style='text-align: center;'>").replace('</center>', '</p>'); } else if (line.indexOf('<right>') > -1) { line = line.replace("<right>", "<p style='text-align: right;'>").replace('</right>', '</p>'); } else { line = `<p>${line}</p>`; } converted.push(line); } return converted.join('\n'); }, toAO3: function(text) { var converted, i, j, len, line, lines; converted = []; text = ficbookNetPreprocess(text, { extractNoteTag: true, noteType: storage.exportNotesStrategyForAO3 }); text = text.replaceAll('<i>', '<em>').replaceAll('</i>', '</em>').replaceAll('<s>', '<strike>').replaceAll('</s>', '</strike>'); lines = text.split('\n'); for (i = j = 0, len = lines.length; j < len; i = ++j) { line = lines[i]; if (!line.trim()) { line = ' '; } if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1) { line = line.replaceAll('<center>', '').replaceAll('</center>', ''); line = `<p align='center'>${line}</p>`; } else if (line.indexOf('<center>') > -1) { line = line.replace("<center>", "<p align='center'>").replace('</center>', '</p>'); } else if (line.indexOf('<right>') > -1) { line = line.replace("<right>", "<p align='right'>").replace('</right>', '</p>'); } else { line = lineToParagraph(line, lines[i + 1], storage.exportParagraphStrategyForAO3); line = line.split('\n').join("</p><p>"); line = `<p>${line}</p>`; } converted.push(line); } return converted.join('\n'); }, toGikami: function(text) { var converted, i, j, len, line, lines; converted = []; text = ficbookNetPreprocess(text, { extractNoteTag: true }); lines = text.split('\n'); for (i = j = 0, len = lines.length; j < len; i = ++j) { line = lines[i]; if (!line.trim()) { line = ' '; } if (line.indexOf('***') > -1 || line.indexOf('* * *') > -1) { line = line.replaceAll('<center>', '').replaceAll('</center>', ''); line = `<p align='center'>${line}</p>`; } else if (line.indexOf('<center>') > -1) { line = line.replace("<center>", "<p style='text-align: center;'>").replace('</center>', '</p>'); } else if (line.indexOf('<right>') > -1) { line = line.replace("<right>", "<p style='text-align: right;'>").replace('</right>', '</p>'); } else { line = lineToParagraph(line, lines[i + 1], storage.exportParagraphStrategyForGikami); line = line.split('\n').join("</p><p>"); line = `<p>${line}</p>`.replace("<p><2em>", "<p style='text-indent: 2em'>"); } converted.push(line); } return converted.join('\n'); } }; var execute = async function(text) { var tp; try { /* настройки такие же, как и на ficbook.net */ Typograf; } catch (error1) { await loadOnce.js('https://cdn.jsdelivr.net/npm/typograf@6.12.1/dist/typograf.min.js'); Typograf.addRule({ name: "common/other/typographicSpaces", handler: (t) => { return t.replace("! ≫", "!≫"); } }); } tp = new Typograf({ locale: ['ru'] }); tp.setSetting("common/punctuation/quote", "ru", { left: "«", right: "»", removeDuplicateQuotes: true }); tp.disableRule("common/nbsp/*"); tp.disableRule("ru/nbsp/*"); tp.disableRule("ru/dash/koe"); tp.disableRule("ru/dash/to"); tp.disableRule("ru/punctuation/ano"); return tp.execute(text || ''); }; var SVG_ICON_FLOWER_EMPTY = "<svg focusable=\"false\" data-icon=\"flower\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M461.5 256c30.7-26.8 50.5-65.8 50.5-109.7C512 65.5 446.5 0 365.7 0 321.8 0 282.8 19.8 256 50.5 229.2 19.8 190.2 0 146.3 0 65.5 0 0 65.5 0 146.3c0 43.9 19.8 82.9 50.5 109.7C19.8 282.8 0 321.8 0 365.7 0 446.5 65.5 512 146.3 512c43.9 0 82.9-19.8 109.7-50.5 26.8 30.7 65.8 50.5 109.7 50.5 80.8 0 146.3-65.5 146.3-146.3 0-43.9-19.8-82.9-50.5-109.7zm-95.8 224c-32.9 0-63.3-14-85.6-39.5L256 412.9l-24.1 27.6C209.6 466 179.2 480 146.3 480 83.3 480 32 428.7 32 365.7c0-32.9 14-63.3 39.5-85.6L99.1 256l-27.6-24.1C46 209.6 32 179.2 32 146.3 32 83.3 83.3 32 146.3 32c32.9 0 63.3 14 85.6 39.5L256 99.1l24.1-27.6C302.4 46 332.8 32 365.7 32c63 0 114.3 51.3 114.3 114.3 0 32.9-14 63.3-39.5 85.6L412.9 256l27.6 24.1c25.5 22.3 39.5 52.7 39.5 85.6 0 63-51.3 114.3-114.3 114.3zM256 160c-52.9 0-96 43.1-96 96s43.1 96 96 96 96-43.1 96-96-43.1-96-96-96zm0 160c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z\" class=\"\"></path></svg>\n"; var SVG_ICON_FLOWER_FULL = "<svg focusable=\"false\" data-icon=\"flower\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M480 160A128 128 0 0 0 352 32c-38.45 0-72.54 17.3-96 44.14C232.54 49.3 198.45 32 160 32A128 128 0 0 0 32 160c0 38.45 17.3 72.54 44.14 96C49.3 279.46 32 313.55 32 352a128 128 0 0 0 128 128c38.45 0 72.54-17.3 96-44.14C279.46 462.7 313.55 480 352 480a128 128 0 0 0 128-128c0-38.45-17.3-72.54-44.14-96C462.7 232.54 480 198.45 480 160zM256 336a80 80 0 1 1 80-80 80 80 0 0 1-80 80z\" class=\"\"></path></svg>\n"; var SVG_ICON_INDENT_EMPTY = "<svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path fill=\"currentColor\" d=\"M27.31 148.7a15.63 15.63 0 0 0-11.17-4.7A16 16 0 0 0 0 160v192a16 16 0 0 0 16.13 16 15.58 15.58 0 0 0 11.18-4.7l96-96a16 16 0 0 0 0-22.62zM32 313.36V198.64L89.37 256zM440 48H8a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h432a8 8 0 0 0 8-8V56a8 8 0 0 0-8-8zm0 384H8a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h432a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8zm0-128H200a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h240a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8zm0-128H200a8 8 0 0 0-8 8v16a8 8 0 0 0 8 8h240a8 8 0 0 0 8-8v-16a8 8 0 0 0-8-8z\" class=\"\"></path></svg>\n"; var SVG_ICON_INDENT_FULL = "<svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path fill=\"currentColor\" d=\"M27.31 363.3l96-96a16 16 0 0 0 0-22.62l-96-96C17.27 138.66 0 145.78 0 160v192c0 14.31 17.33 21.3 27.31 11.3zM432 416H16a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm3.17-128H204.83A12.82 12.82 0 0 0 192 300.83v38.34A12.82 12.82 0 0 0 204.83 352h230.34A12.82 12.82 0 0 0 448 339.17v-38.34A12.82 12.82 0 0 0 435.17 288zm0-128H204.83A12.82 12.82 0 0 0 192 172.83v38.34A12.82 12.82 0 0 0 204.83 224h230.34A12.82 12.82 0 0 0 448 211.17v-38.34A12.82 12.82 0 0 0 435.17 160zM432 32H16A16 16 0 0 0 0 48v32a16 16 0 0 0 16 16h416a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\" class=\"\"></path></svg>\n"; var SVG_ICON_PASTE = "<svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 448 512\"><path fill=\"currentColor\" d=\"M128 184c0-30.879 25.122-56 56-56h136V56c0-13.255-10.745-24-24-24h-80.61C204.306 12.89 183.637 0 160 0s-44.306 12.89-55.39 32H24C10.745 32 0 42.745 0 56v336c0 13.255 10.745 24 24 24h104V184zm32-144c13.255 0 24 10.745 24 24s-10.745 24-24 24-24-10.745-24-24 10.745-24 24-24zm184 248h104v200c0 13.255-10.745 24-24 24H184c-13.255 0-24-10.745-24-24V184c0-13.255 10.745-24 24-24h136v104c0 13.2 10.8 24 24 24zm104-38.059V256h-96v-96h6.059a24 24 0 0 1 16.97 7.029l65.941 65.941a24.002 24.002 0 0 1 7.03 16.971z\"></path></svg>\n"; var IMG_HOW_TO_EXPORT = "data:image/jpeg;base64,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"; var css$8 = ".nyamka-from-romano-userscript-markup-tools-autoformat .autoformat-active svg, .nyamka-from-romano-userscript-markup-tools-autoformat .autoformat svg, .nyamka-from-romano-userscript-markup-tools-autoformat .paste svg, .nyamka-from-romano-userscript-markup-tools-autotab .autoformat-active svg, .nyamka-from-romano-userscript-markup-tools-autotab .autoformat svg, .nyamka-from-romano-userscript-markup-tools-autotab .paste svg, .nyamka-from-romano-userscript-markup-tools-paste .autoformat-active svg, .nyamka-from-romano-userscript-markup-tools-paste .autoformat svg, .nyamka-from-romano-userscript-markup-tools-paste .paste svg {\n width: 11px;\n}\n.nyamka-from-romano-userscript-markup-tools-autoformat .autoformat-active, .nyamka-from-romano-userscript-markup-tools-autotab .autoformat-active, .nyamka-from-romano-userscript-markup-tools-paste .autoformat-active {\n display: none;\n}\n.nyamka-from-romano-userscript-markup-tools-autoformat.active .autoformat-active, .nyamka-from-romano-userscript-markup-tools-autotab.active .autoformat-active, .nyamka-from-romano-userscript-markup-tools-paste.active .autoformat-active {\n display: inline-block;\n}\n.nyamka-from-romano-userscript-markup-tools-autoformat.active .autoformat, .nyamka-from-romano-userscript-markup-tools-autotab.active .autoformat, .nyamka-from-romano-userscript-markup-tools-paste.active .autoformat {\n display: none;\n}\n\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autoformat, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autotab {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autoformat:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autoformat:focus, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autotab:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autotab:focus {\n background: #d8d8c4;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autoformat.active, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autotab.active {\n background: #c3a63f;\n color: black;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autoformat.active:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools-autotab.active:hover {\n background: #cfb866;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-markup-tools button {\n line-height: 15px;\n padding: 4px 6px;\n font-size: 14px;\n margin-right: 5px;\n margin: 5px 2px;\n margin-left: 0;\n}\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-markup-tools {\n margin-top: 6px;\n}\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-markup-tools button {\n margin-bottom: 0;\n}\n\nbody[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-markup-tools {\n margin-top: 6px;\n}\nbody[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-markup-tools button {\n padding: 3px 7px;\n margin-right: 6px;\n font-weight: normal;\n margin-bottom: 6px;\n font-size: 14px;\n}\nbody[data-nyamka-script=gikami-ru] form.form_book input.editor-title, body[data-nyamka-script=gikami-ru] form.form_book .medium-editor-book-element {\n border: 1px solid #dedfe2;\n border-radius: 8px;\n padding-left: 5px;\n padding-right: 5px;\n}\nbody[data-nyamka-script=gikami-ru] form.form_book .card-footer {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 0;\n border-radius: 0;\n background: #23282d;\n}"; n(css$8,{}); var getItemAsString = function(item) { return new Promise(function(resolve, reject) { item.getAsString(resolve); }); }; var pasteModal = (function() { var modal, onClipboardPasteRmWatcher; modal = null; onClipboardPasteRmWatcher = null; return function() { if (modal) { modal.destroy(); } modal = new Modal({ title: "Вставка html-текста с сохранением форматирования", content: `<div class='${CSS_PREFIX}-chapters-importer-modal'> <div class="${CSS_PREFIX}-chapters-importer-modal-paste-area visible" style="margin: 0"> <div class='${CSS_PREFIX}-chapters-importer-modal-svg-paste'> ${SVG_ICON_PASTE} </div> <p><b>Вставьте html-текст из буфера обмена по Ctrl+V</b></p> <div><textarea class='form-control' placeholder="Вставьте текст из буфера обмена в это текстовое поле"></textarea></div> </div> </div>` }); return new Promise(function(resolve, reject) { onClipboardPasteRmWatcher = onClipboardPaste(async function(clipboardData) { var data, itemHtml, itemText, items; if (!modal || !modal.isVisible()) { onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; return; } data = null; items = Array.prototype.slice.call(clipboardData.items); itemText = items.find(function(item) { return item.type === 'text/plain'; }); itemHtml = items.find(function(item) { return item.type === 'text/html'; }); if (itemHtml) { data = (await getItemAsString(itemHtml)); } else if (itemText) { data = (await getItemAsString(itemText)); } if (data) { onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; modal.destroy(); resolve(data); } }); modal.show(); }); }; })(); var addTabsToText, exportChapterText, getOnFormatButtonClickFunction, initMarkupTools, onShowSettingsClick, indexOf$3 = [].indexOf; exportChapterText = async function(exportProvider) { var editor, modifier, text; modifier = exportProvider.split(':')[1]; exportProvider = exportProvider.split(':')[0]; editor = getChapterEditor(); if (!editor || !editor.body) { notification.error('Не получилось найти редактор текста на странице'); return; } text = editor.body.value || ''; if (isCurrentSite$3()) { text = fanficsMe[`to${exportProvider}`](text); } else if (isCurrentSite$2()) { text = ficbookNet[`to${exportProvider}`](text); if (exportProvider === 'FanficsMe' && modifier === 'blog') { text = text.replaceAll("<i>", "[i]").replaceAll("</i>", "[/i]").replaceAll("<b>", "[b]").replaceAll("</b>", "[/b]").replaceAll("<s>", "[s]").replaceAll("</s>", "[/s]").replaceAll("<center>", "").replaceAll("</center>", "").replaceAll("<right>", "").replaceAll("</right>", "").replaceAll("<hr>", "***"); } } (await copyToClipboard(text, 'text/html')); notification.success('Текст скопирован в буфер обмена!'); }; if (isCurrentSite()) { addTabsToText = function(text) { var formatted, i, len, line, ref; formatted = []; text = text.split("</p>").join("</p>\n"); ref = text.split('\n'); for (i = 0, len = ref.length; i < len; i++) { line = ref[i]; if (line.indexOf("<center>") === -1 && line.indexOf("<right>") === -1 && line.indexOf('***') === -1 && line.indexOf('* * *') === -1 && line.indexOf('text-indent: 2em') === -1 && line.trim()) { line = line.replace("<p>", "<p style='text-indent: 2em'>"); } formatted.push(line); } return formatted.join('\n'); }; } else { addTabsToText = function(text) { var formatted, i, len, line, ref; formatted = []; ref = text.split('\n'); for (i = 0, len = ref.length; i < len; i++) { line = ref[i]; if (line.indexOf("<center>") === -1 && line.indexOf("<right>") === -1 && line.indexOf('***') === -1 && line.indexOf('* * *') === -1 && !line.startsWith('<tab>') && line.trim()) { line = `<tab>${line}`; } formatted.push(line); } return formatted.join('\n'); }; } getOnFormatButtonClickFunction = function(transformFunction) { var textBeforeFormat; textBeforeFormat = null; return async function(event) { var cleanTextBeforeFormat, editor; event.preventDefault(); if (textBeforeFormat !== null && indexOf$3.call(this.classList, 'active') >= 0) { // нужно восстановление текста editor = getChapterEditor(); if (!editor || !editor.body) { return; } editor.body.value = textBeforeFormat; this.classList.remove('active'); return; } editor = getChapterEditor() || {}; if (!editor.body || !editor.body.value || !editor.body.value.trim()) { return; } cleanTextBeforeFormat = () => { this.classList.remove('active'); textBeforeFormat = null; editor = getChapterEditor() || {}; if (!editor.body) { return; } ['input', 'cut', 'paste'].forEach(function(eventName) { editor.body.removeEventListener(eventName, cleanTextBeforeFormat); }); }; // следим за тем, что если текст изменился, то и отменить форматирование уже нельзя textBeforeFormat = editor.body.value; editor.body.value = (await transformFunction(editor.body.value)); this.classList.add('active'); ['input', 'cut', 'paste'].forEach(function(eventName) { editor.body.addEventListener(eventName, cleanTextBeforeFormat); }); }; }; onShowSettingsClick = (function() { var getNotesSettings, modal; modal = null; getNotesSettings = function(siteName) { if (!isCurrentSite$3() && !isCurrentSite$2()) { return ''; } return `<div class='form-group form-inline'> <label>Экспортировать сноски как...</label> <select class='form-control input-sm' data-property='exportNotesStrategyFor${siteName}'> <option value='*'>звездочки, пример: *</option> <option value='number'>цифры, пример: (1)</option> </select> </div>`; }; return function() { var i, len, property, ref, selectElement, settings; if (modal) { modal.destroy(); } settings = []; if (isCurrentSite$3()) { settings.push(`<h4>Настройки экспорта в Ficbook-разметку</h4> <div class='form-group form-inline'> <label>Разделение абзацев c помощью...</label> <select class='form-control input-sm' data-property='exportParagraphStrategyForFicbookNet'> <option value='tab'><tab> в начале предложений</option> <option value=''>никак не отделять</option> </select> </div> ${getNotesSettings('FicbookNet')}`); } settings.push(`<h4>Настройки экспорта в AO3-разметку</h4> <div class='form-group form-inline'> <label>Красная строка с помощью...</label> <select class='form-control input-sm' data-property='exportParagraphStrategyForAO3'> <option value='4-spaces'>4-х пробелов в начале предложений</option> <option value=''>никак не отделять</option> </select> </div> ${getNotesSettings('AO3')}`); if (isCurrentSite$3() || isCurrentSite$2()) { settings.push(`<h4>Настройки экспорта в AuthorToday-разметку</h4> ${getNotesSettings('AuthorToday')}`); } modal = new Modal({ title: "Настройки и помощь", content: `${settings.join('<hr/>')} <hr/> <h4>Помощь</h4> <p>При нажатии на "экспорт" текст главы из этой страницы будет конвертирован в верстку выбранного типа и скопирован в буфер обмена.</p> <p>После этого вы можете перейти на другой сайт и просто вставить текст в редактор.</p> <p>Если верстка, на ваш взгляд, вставилась неправильно, то перейдите в режим редактирования html и вставьте заново текст (на скриншоте ниже показано на какие кнопки нужно нажимать).</p> <img style="width: 100%; max-width: 450px;" src="${IMG_HOW_TO_EXPORT}"> <hr/> <p><b>ВНИМАНИЕ! Не вся верстка может быть конвертирована! Например:</b></p> <ol> <li>тег <b><hr></b> в верстке для AuthorToday и Ficbook будет заменен пустой строкой</li> <li>перечеркнутые слова с помощью тега <b><s></b> в верстке для AuthorToday скорее всего пропадут (какой-то внутренний баг их редактора текста)</li> <li>на AO3 нет такого понятия как "красная строка", поэтому вы сами должны выбрать, как должны разделяться абзацы при экспорте</li> <li>теги сносок <b><note></b> и <b><footnote></b> при невозможности конвертирования будут указаны как "ПРИМЕЧАНИЯ" в конце текста</li> </ol>` }); ref = modal.element.querySelectorAll('select'); for (i = 0, len = ref.length; i < len; i++) { selectElement = ref[i]; property = selectElement.getAttribute('data-property'); if (!property) { continue; } selectElement.value = storage[property]; selectElement.addEventListener('change', function() { property = this.getAttribute('data-property'); storage[property] = this.value; storage.saveData(); }); } return modal.show(); }; })(); initMarkupTools = function() { var autoFormatButton, autoTabButton, container, dropdown, exporterItems, mEditor, pasteButton, toolbar; if (isCurrentSite$3()) { container = document.getElementsByClassName('TextEditorContainer')[0]; } else if (isCurrentSite$2()) { //container = document.querySelector('.text-editor-container .editor-section') container = document.querySelector('.editor-section'); } else if (isCurrentSite()) { mEditor = document.querySelector('textarea[name="content"]'); if (mEditor) { mEditor.parentNode.insertBefore(createElement("<div></div>"), mEditor.parentNode.children[0]); container = mEditor.parentNode.children[0]; } } if (!container) { setTimeout(initMarkupTools, 500); return; } if (container.querySelector(`.${CSS_PREFIX}-markup-tools`)) { return; } exporterItems = []; if (!isCurrentSite$2()) { exporterItems.push({ text: `<img src='${favicon$2}'>Ficbook-разметку`, onClick: function() { exportChapterText('FicbookNet'); } }); } if (!isCurrentSite$3()) { exporterItems.push({ //text: 'Fanfics-разметку (фанфики)' text: `<img src='${favicon$3}'>Fanfics-разметку`, onClick: function() { exportChapterText('FanficsMe'); } }); } /* exporterItems.push({ text: 'Fanfics-разметку (блогозаписи)' onClick: ()-> exportChapterText('FanficsMe:blog') return }) */ // остальные exporterItems.push({ text: `<img src='${favicon}'>Author.today-разметку`, onClick: function() { exportChapterText('AuthorToday'); } }); exporterItems.push({ text: `<img src='${favicon$1}'>AO3-разметку`, onClick: function() { exportChapterText('AO3'); } }); /* if !gikami.isCurrentSite() exporterItems.push({ text: 'Gikami-разметку' onClick: ()-> exportChapterText('Gikami') return }) */ exporterItems.push({ text: 'ℹ️ Настройка/помощь', onClick: function(event) { onShowSettingsClick(); } }); // помещаем в один контейнер все кнопки toolbar = createElement(`<div class='${CSS_PREFIX}-markup-tools'> </div>`); dropdown = new Dropdown('Экспорт в...', exporterItems); toolbar.appendChild(dropdown.element); if (isCurrentSite$3()) { autoFormatButton = createElement(`<button class='${CSS_PREFIX}-markup-tools-autoformat' title="Убрать лишние пробелы, заменить символы и т.п."> <span class='autoformat-active'>${SVG_ICON_FLOWER_FULL}</span> <span class='autoformat'>${SVG_ICON_FLOWER_EMPTY}</span> <span class='autoformat-active'>Отменить форматирование</span> <span class='autoformat'>Отформатировать текст</span> </button>`); autoFormatButton.addEventListener('click', getOnFormatButtonClickFunction(execute)); toolbar.appendChild(autoFormatButton); } if (isCurrentSite$2()) { autoTabButton = createElement(`<button class='btn btn-for-formatting-text ${CSS_PREFIX}-markup-tools-autotab' title="Автоматическая простановка <tab>"> <span class='autoformat-active'>${SVG_ICON_INDENT_FULL}</span> <span class='autoformat'>${SVG_ICON_INDENT_EMPTY}</span> <span class='autoformat-active'>Отменить простановку <tab></span> <span class='autoformat'>Проставить <tab></span> </button>`); } if (isCurrentSite()) { autoTabButton = createElement(`<button class='btn btn-for-formatting-text ${CSS_PREFIX}-markup-tools-autotab' title="Автоматическая простановка абзацев"> <span class='autoformat-active'>${SVG_ICON_INDENT_FULL}</span> <span class='autoformat'>${SVG_ICON_INDENT_EMPTY}</span> <span class='autoformat-active'>Отменить простановку абзацев</span> <span class='autoformat'>Проставить абзацы</span> </button>`); } if (autoTabButton) { autoTabButton.addEventListener('click', getOnFormatButtonClickFunction(addTabsToText)); toolbar.appendChild(autoTabButton); } if (isCurrentSite()) { pasteButton = createElement(`<button class='btn btn-for-formatting-text ${CSS_PREFIX}-markup-tools-paste' title="Вставка из буфера обмена с сохранением форматирования"> <span class='paste'>${SVG_ICON_PASTE}</span> Вставка из буфера обмена </button>`); pasteButton.addEventListener('click', async function(event) { var editor; event.preventDefault(); editor = getChapterEditor$1(); editor.body.value = (await pasteModal()); }); toolbar.appendChild(pasteButton); } container.appendChild(toolbar); }; var init$3 = function() { ['FanficsMe', 'FicbookNet', 'AuthorToday', 'AO3'].forEach(function(siteName) { storage.registerVariable(`exportNotesStrategyFor${siteName}`, 'number'); }); if (isCurrentSite$3()) { storage.registerVariable("exportParagraphStrategyForFicbookNet", 'tab'); } storage.registerVariable("exportParagraphStrategyForAO3", '4-spaces'); storage.registerVariable("exportParagraphStrategyForGikami", '2em'); onLocationChange(function() { if (isCurrentSite$3() && location.pathname === '/fic_write' && (location.search.indexOf('soaction=chapter_edit') > -1 || location.search.indexOf('soaction=chapter_new') > -1)) { initMarkupTools(); } if (isCurrentSite$2() && (/\/home\/myfics\/\d+.\/parts\/\d+.?$/.test(location.pathname) || /\/home\/myfics\/\d+.\/addpart/.test(location.pathname))) { initMarkupTools(); } if (isCurrentSite() && (/\/book\/\d+.\/add$/.test(location.pathname) || /\/book\/\d+.\/redact\/\d+.?$/.test(location.pathname))) { initMarkupTools(); } }); }; var css$7 = ".nyamka-from-romano-userscript-image-cropper-modal-loading {\n padding: 2em 0;\n padding-bottom: 3em;\n text-align: center;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-loading p {\n text-align: center;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-loading p img {\n position: relative;\n top: 4px;\n left: 4px;\n max-width: 16px;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-cropper {\n display: none;\n max-width: 100%;\n min-width: 100%;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-preview {\n overflow: hidden;\n max-height: 80vh;\n}\n@media (max-width: 700px) {\n .nyamka-from-romano-userscript-image-cropper-modal-preview {\n max-height: 65vh;\n }\n}\n.nyamka-from-romano-userscript-image-cropper-modal-btns-block {\n display: none;\n text-align: center;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-btns-block button {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n margin: 10px;\n margin-top: 0;\n}\n.nyamka-from-romano-userscript-image-cropper-modal-btns-block button:hover, .nyamka-from-romano-userscript-image-cropper-modal-btns-block button:focus {\n background: #d8d8c4;\n}"; n(css$7,{}); var imageCropperModal = (function() { var modal; modal = null; return function(imageFile) { if (modal) { modal.destroy(); } modal = new Modal({ title: "Обрезка картинки", content: `<div class='${CSS_PREFIX}-image-cropper-modal'> <div class='${CSS_PREFIX}-image-cropper-modal-loading'> <p> Подождите, пока зарузится редактор <img src="https://fanfics.me/images/load_2.gif"> </p> </div> <div class='${CSS_PREFIX}-image-cropper-modal-btns-block'> <button class='upload-cropped'>Загрузить обрезанный файл</button> <button class='upload-original'>Загрузить файл</button> </div> <div class='${CSS_PREFIX}-image-cropper-modal-preview'> <img class='${CSS_PREFIX}-image-cropper-modal-cropper' src="${URL.createObjectURL(imageFile)}"> </div> <div class='clear'></div> </div>` }); return new Promise(async function(resolve, reject) { var cropper; modal.show(); try { Cropper; } catch (error1) { await Promise.all([loadOnce.js('https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.js'), loadOnce.css('https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.5.12/cropper.min.css')]); } modal.element.querySelector(`.${CSS_PREFIX}-image-cropper-modal-loading`).style.display = 'none'; modal.element.querySelector(`.${CSS_PREFIX}-image-cropper-modal-cropper`).style.display = 'block'; modal.element.querySelector(`.${CSS_PREFIX}-image-cropper-modal-btns-block`).style.display = 'block'; cropper = new Cropper(modal.element.querySelector(`.${CSS_PREFIX}-image-cropper-modal-cropper`)); modal.element.querySelector("button.upload-cropped").addEventListener('click', function() { cropper.getCroppedCanvas().toBlob(function(blob) { modal.destroy(); modal = null; blob.name = imageFile.name; resolve(blob); }); }); modal.element.querySelector("button.upload-original").addEventListener('click', function() { modal.destroy(); modal = null; resolve(imageFile); }); }); }; })(); var IMG_IMGBB_API_KEY = "data:image/png;base64,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"; var css$6 = ".nyamka-from-romano-userscript-imgbb-api-key-modal img {\n width: 100%;\n max-width: 350px;\n margin-top: 0.5em;\n}\n.nyamka-from-romano-userscript-imgbb-api-key-modal input {\n border: 1px solid #D8D8C4;\n padding: 5px;\n background: #fff;\n color: #888;\n}\n.nyamka-from-romano-userscript-imgbb-api-key-modal input:focus {\n color: black;\n}\n.nyamka-from-romano-userscript-imgbb-api-key-modal button {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n}\n.nyamka-from-romano-userscript-imgbb-api-key-modal button:hover, .nyamka-from-romano-userscript-imgbb-api-key-modal button:focus {\n background: #d8d8c4;\n}\n.nyamka-from-romano-userscript-imgbb-api-key-modal input, .nyamka-from-romano-userscript-imgbb-api-key-modal button {\n margin: 0.5em 0;\n margin-right: 0.5em;\n}"; n(css$6,{}); var imgBbApiKeyModal = (function() { var modal; modal = null; return function() { var imgbbApiKey, inputElement, saveButtonElement; if (modal) { modal.destroy(); } modal = new Modal({ title: "Настройка загрузки картинок", content: `<div class='${CSS_PREFIX}-imgbb-api-key-modal'> <input type='text' required='' placeholder='Вставьте сюда API key'> <button>Сохранить API key</button> <hr> <p>Для работы с загрузкой файлов вам нужно зарегистрировать API key на сайте <b>https://ru.imgbb.com</b></p> <ol> <li>Перейдите на <a href='https://imgbb.com/login' target='_blank'>https://imgbb.com/login</a> и войдите на сайт (или зарегистрируйтесь, если вас там нет)</li> <li>Перейдите на <a href='https://api.imgbb.com/' target='_blank'>https://api.imgbb.com</a> и найдите на странице большую голубую кнопку "Get API key". Нажмите на нее</li> <li> Скопируйте полученый ключ из текстового инпута (на скриншоте ниже это "bla-blabla-blabla-bla") в текстовый инпут в этом модальном окне <div></div> <img src="${IMG_IMGBB_API_KEY}"> </li> </ol> <p><b>ВНИМАНИЕ:</b> если вы будете удалять фото в личном кабинете https://ru.imgbb.com, но тут они тоже удалятся!</p> </div>` }); imgbbApiKey = storage.imgbbApiKey; saveButtonElement = modal.element.querySelector('button'); inputElement = modal.element.querySelector('input'); inputElement.value = imgbbApiKey; saveButtonElement.disabled = !imgbbApiKey; return new Promise(function(resolve, reject) { modal.show(); inputElement.addEventListener('input', function() { imgbbApiKey = this.value; saveButtonElement.disabled = !this.value; }); saveButtonElement.addEventListener('click', function() { if (!imgbbApiKey) { return; } storage.imgbbApiKey = imgbbApiKey; storage.saveData(); modal.destroy(); modal = null; resolve(imgbbApiKey); }); }); }; })(); var SVG_ICON_UPLOAD = "<svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 512\"><path fill=\"currentColor\" d=\"M537.6 226.6c4.1-10.7 6.4-22.4 6.4-34.6 0-53-43-96-96-96-19.7 0-38.1 6-53.3 16.2C367 64.2 315.3 32 256 32c-88.4 0-160 71.6-160 160 0 2.7.1 5.4.2 8.1C40.2 219.8 0 273.2 0 336c0 79.5 64.5 144 144 144h368c70.7 0 128-57.3 128-128 0-61.9-44-113.6-102.4-125.4zM393.4 288H328v112c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V288h-65.4c-14.3 0-21.4-17.2-11.3-27.3l105.4-105.4c6.2-6.2 16.4-6.2 22.6 0l105.4 105.4c10.1 10.1 2.9 27.3-11.3 27.3z\" class=\"\"></path></svg>\n"; var css$5 = ".nyamka-from-romano-userscript-upload-image-modal-dnd-area {\n display: none;\n text-align: center;\n padding: 4em 2em;\n margin-bottom: 1em;\n background-color: #c3a63f;\n outline: 2px dashed #fcfaf2;\n outline-offset: -10px;\n -webkit-transition: outline-offset 0.15s ease-in-out, background-color 0.15s linear;\n transition: outline-offset 0.15s ease-in-out, background-color 0.15s linear;\n text-align: center;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area.is-dragover {\n outline-offset: -20px;\n outline-color: #c3a63f;\n background-color: #d8d8c4;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area.is-dragover p, .nyamka-from-romano-userscript-upload-image-modal-dnd-area.is-dragover label, .nyamka-from-romano-userscript-upload-image-modal-dnd-area.is-dragover svg {\n color: #c3a63f;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area p, .nyamka-from-romano-userscript-upload-image-modal-dnd-area label {\n text-align: center !important;\n color: #fcfaf2;\n margin: 0.5em 0;\n font-size: 120%;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area label {\n text-decoration: underline;\n cursor: pointer;\n}\n.nyamka-from-romano-userscript-upload-image-modal-dnd-area input[type=file] {\n display: none;\n}\n.nyamka-from-romano-userscript-upload-image-modal-svg-upload {\n max-width: 5em;\n text-align: center;\n margin: 0 auto;\n color: #fcfaf2;\n}\n.nyamka-from-romano-userscript-upload-image-modal-errors {\n display: none;\n padding: 5em 0;\n text-align: center;\n text-align: center;\n}\n.nyamka-from-romano-userscript-upload-image-modal-errors.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-upload-image-modal-errors ul {\n margin-bottom: 1em;\n text-align: center;\n}\n.nyamka-from-romano-userscript-upload-image-modal-errors ul li {\n color: #ca0000;\n margin-bottom: 0.5em;\n}\n.nyamka-from-romano-userscript-upload-image-modal-description p {\n margin: 0.5em 0;\n text-align: left;\n}\n.nyamka-from-romano-userscript-upload-image-modal-description .change-api-key {\n cursor: pointer;\n text-decoration: underline;\n}\n.nyamka-from-romano-userscript-upload-image-modal-upload-progress {\n display: none;\n padding: 2em 0;\n text-align: center;\n display: none;\n}\n.nyamka-from-romano-userscript-upload-image-modal-upload-progress.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-upload-image-modal-upload-progress li {\n margin: 0.5em 0;\n text-align: center;\n}\n.nyamka-from-romano-userscript-upload-image-modal-upload-progress button {\n display: none;\n margin-top: 3em;\n}\n.nyamka-from-romano-userscript-upload-image-modal-upload-progress button.visible {\n display: inline-block;\n}\n.nyamka-from-romano-userscript-upload-image-modal button {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n margin: 0.5em 0;\n margin-right: 0.5em;\n}\n.nyamka-from-romano-userscript-upload-image-modal button:hover, .nyamka-from-romano-userscript-upload-image-modal button:focus {\n background: #d8d8c4;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status {\n font-weight: bold;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status.fail {\n color: #ca0000;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status.fail img {\n display: none;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status.success {\n color: green;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status.success img {\n display: none;\n}\n.nyamka-from-romano-userscript-upload-image-modal .status img {\n position: relative;\n top: 3px;\n left: 3px;\n max-width: 16px;\n}\n.nyamka-from-romano-userscript-upload-image-modal .visible-lg {\n display: none;\n}\n@media (min-width: 1023px) {\n .nyamka-from-romano-userscript-upload-image-modal .visible-lg {\n display: block;\n }\n}"; n(css$5,{}); var IMAGE_ALLOWED_EXT, IMAGE_ALLOWED_MAX_SIZE, isFileAllowedForUpload, uploadImage, indexOf$2 = [].indexOf; IMAGE_ALLOWED_EXT = ['jpg', 'jpeg', 'png', 'gif', 'tiff', 'bmp']; IMAGE_ALLOWED_MAX_SIZE = 30 * 1024 * 1024; // 30 mb isFileAllowedForUpload = function(file) { var ref; if (ref = file.type.split('/')[1], indexOf$2.call(IMAGE_ALLOWED_EXT, ref) < 0) { return `Файл <b>${file.name}</b> нельзя загружать, т.к. это неразрешенный формат ${file.type || 'unknown'}. Выберите другой файл`; } if (file.size > IMAGE_ALLOWED_MAX_SIZE) { return `Файл <b>${file.name}</b> нельзя загружать, т.к. его размер >= 30 мегабайтам. Уменьшите картинку в фоторедакторе`; } return true; }; uploadImage = async function(image) { var form; form = new FormData(); form.append('image', image, image.name); return (await fetch(`https://api.imgbb.com/1/upload?key=${storage.imgbbApiKey}`, { method: 'POST', body: form })); }; var uploadImageModal = (function() { var modal, onClipboardPasteRmWatcher; modal = null; onClipboardPasteRmWatcher = null; return async function() { if (!storage.imgbbApiKey) { (await imgBbApiKeyModal()); } if (modal) { modal.destroy(); } if (onClipboardPasteRmWatcher) { onClipboardPasteRmWatcher(); } modal = new Modal({ title: "Загрузка изображения", content: `<div class='${CSS_PREFIX}-upload-image-modal'> <div class="${CSS_PREFIX}-upload-image-modal-dnd-area visible"> <div class='${CSS_PREFIX}-upload-image-modal-svg-upload'> ${SVG_ICON_UPLOAD} </div> <p><b>Перетащите изображение в эту область для начала загрузки</b></p> <p><small>или</small></p> <label for='${CSS_PREFIX}-label-image-upload' role='button'><b>Выберите изображение</b></label> <input type='file' id='${CSS_PREFIX}-label-image-upload' accept='${IMAGE_ALLOWED_EXT.map(function(ext) { return "image/" + ext; })}' multiple> <div class='visible-lg'> <p><small>или</small></p> <p><b>Вставьте изображение из буфера обмена по Ctrl+V</b> <small>(может работать не во всех браузерах и не со всеми картинками)</small></p> </div> </div> <div class='${CSS_PREFIX}-upload-image-modal-upload-progress'> <div></div> <button>Вставить ссылки в текст</button> </div> <div class='${CSS_PREFIX}-upload-image-modal-errors'> <div class='${CSS_PREFIX}-upload-image-modal-errors-content'></div> <button>Выбрать файлы заново</button> </div> <div class='${CSS_PREFIX}-upload-image-modal-description'> <p>Файлы загружаются через <a href='https://ru.imgbb.com/' target='_blank'>https://ru.imgbb.com</a></p> <p>Чтоб настроить API key <a role='button' class='change-api-key'>нажмите сюда</a></p> </div> </div>` }); return new Promise(function(resolve, reject) { var areaElement, errorsElement, highlightArea, onFilesSelect, unhighlightArea; modal.show(); highlightArea = function(event) { areaElement.classList.add('is-dragover'); }; unhighlightArea = function() { areaElement.classList.remove('is-dragover'); }; onFilesSelect = async function(files) { var cropped, errors, file, isAllUploaded, isAllowed, j, len, progressElement, progressLis, promises, results; console.log('SELECTED', files); // проверяем, разрешена ли загрузка для выбранных файлов errors = []; for (j = 0, len = files.length; j < len; j++) { file = files[j]; isAllowed = isFileAllowedForUpload(file); if (isAllowed !== true) { errors.push(isAllowed); } } if (errors.length) { areaElement.classList.remove('visible'); errorsElement.classList.add('visible'); errorsElement.querySelector(`.${CSS_PREFIX}-upload-image-modal-errors-content`).replaceChildren(createElement(`<ul> ${errors.map(function(text) { return `<li>${text}</li>`; }).join('')} </ul>`)); return; } if (files.length === 1) { // открываем мод окно с обрезкой cropped = (await imageCropperModal(files[0])); files = [cropped]; } if (files.length) { // начинаем загрузку progressLis = []; promises = Array.prototype.slice.call(files).map(async function(file, i) { var body, result; progressLis.push(`${file.name} - <span class='status'>загружается<img src='https://fanfics.me/images/load_2.gif'></span>`); result = (await uploadImage(file)); try { body = (await result.json()); } catch (error1) { body = { error: { message: 'Bad Request' } }; } if (result.status !== 200) { progressElement.querySelectorAll('li')[i].children[0].textContent = `Не получилось загрузить. Ошибка сервера ru.imgbb.com: ${body.error.message}`; progressElement.querySelectorAll('li')[i].children[0].classList.add('fail'); return false; } progressElement.querySelectorAll('li')[i].children[0].textContent = "Загружено"; progressElement.querySelectorAll('li')[i].children[0].classList.add('success'); if (body.data && body.data.url) { if (extname(body.data.url) === '.gif') { return body.data.url + '?.jpg'; } return body.data.url; } progressElement.querySelectorAll('li')[i].children[0].textContent = "Не получилось загрузить"; progressElement.querySelectorAll('li')[i].children[0].classList.add('fail'); return false; }); areaElement.classList.remove('visible'); errorsElement.classList.remove('visible'); progressElement = modal.element.querySelector(`.${CSS_PREFIX}-upload-image-modal-upload-progress`); progressElement.classList.add('visible'); progressElement.children[0].replaceChildren(createElement(`<ul> ${progressLis.map(function(html) { return `<li>${html}</li>`; }).join('')} </ul>`)); progressElement.querySelector('button').addEventListener('click', function() { modal.destroy(); onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; // готовые ссылки для вставки в документ resolve(results.filter(function(url) { return !!url; }).join('\n')); }); results = (await Promise.all(promises)); isAllUploaded = results.every(function(r) { return !!r; }); if (isAllUploaded) { // если все загружено, то сразу и закрываем мод окно modal.destroy(); onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; // готовые ссылки для вставки в документ resolve(results.filter(function(url) { return !!url; }).join('\n')); return; } progressElement.querySelector('button').classList.add('visible'); } }; modal.element.querySelector('.change-api-key').addEventListener('click', imgBbApiKeyModal); errorsElement = modal.element.querySelector(`.${CSS_PREFIX}-upload-image-modal-errors`); errorsElement.querySelector('button').addEventListener('click', function() { areaElement.classList.add('visible'); errorsElement.classList.remove('visible'); areaElement.querySelector("input[type='file']").value = ''; }); areaElement = modal.element.querySelector(`.${CSS_PREFIX}-upload-image-modal-dnd-area`); areaElement.querySelector("input[type='file']").addEventListener('change', function(event) { return onFilesSelect(this.files || []); }); ['drag', 'dragstart', 'dragend', 'dragover', 'dragenter', 'dragleave', 'drop'].forEach(function(eventName) { areaElement.addEventListener(eventName, function(event) { event.preventDefault(); event.stopPropagation(); }); }); ['dragover', 'dragenter'].forEach(function(eventName) { areaElement.addEventListener(eventName, highlightArea); }); ['dragleave', 'dragend', 'drop'].forEach(function(eventName) { areaElement.addEventListener(eventName, unhighlightArea); }); areaElement.addEventListener('drop', function(event) { var droppedFiles; if (event.originalEvent) { droppedFiles = event.originalEvent.dataTransfer.files; } else { droppedFiles = event.dataTransfer.files; } onFilesSelect(droppedFiles || []); }); onClipboardPasteRmWatcher = onClipboardPaste(function(clipboardData) { var files, item, j, len, ref; if (!modal || !modal.isVisible()) { onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; return; } files = []; ref = clipboardData.items; for (j = 0, len = ref.length; j < len; j++) { item = ref[j]; if (item.kind === 'file') { files.push(item.getAsFile()); } } if (files.length) { onFilesSelect(files); } }); }); }; })(); var SVG_ICON_SMILEY_FACE = "<svg focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 496 512\"><path fill=\"currentColor\" d=\"M248 8C111 8 0 119 0 256s111 248 248 248 248-111 248-248S385 8 248 8zm141.4 389.4c-37.8 37.8-88 58.6-141.4 58.6s-103.6-20.8-141.4-58.6S48 309.4 48 256s20.8-103.6 58.6-141.4S194.6 56 248 56s103.6 20.8 141.4 58.6S448 202.6 448 256s-20.8 103.6-58.6 141.4zM328 224c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm-160 0c17.7 0 32-14.3 32-32s-14.3-32-32-32-32 14.3-32 32 14.3 32 32 32zm194.4 64H133.6c-8.2 0-14.5 7-13.5 15 7.5 59.2 58.9 105 121.1 105h13.6c62.2 0 113.6-45.8 121.1-105 1-8-5.3-15-13.5-15z\" class=\"\"></path></svg>\n"; var css$4 = ".emoji-picker__wrapper {\n z-index: 100;\n}\n.emoji-picker__wrapper .emoji-picker.light, .emoji-picker__wrapper .emoji-picker.dark {\n --emoji-size: 1.2em !important;\n}"; n(css$4,{}); var TRANSLATIONS; TRANSLATIONS = { search: 'Искать эмоджи...', categories: { recents: 'Недавние', smileys: 'Смайлы и эмоции', people: 'Люди и тело', animals: 'Животные и природа', food: 'Еда и напитки', activities: 'Мероприятия', travel: 'Путешествия и места', objects: 'Объекты', symbols: 'Символы', flags: 'Флаги', custom: 'Пользовательские' }, notFound: 'Эмоджи не найдены' }; var generateEmojiPickerButton = function(options) { var button, picker; options = options || {}; options.cssClass = options.cssClass || `${CSS_PREFIX}-emoji-button`; picker = null; button = createElement(`<button class='${options.cssClass}' title='Эмоджи'>${SVG_ICON_SMILEY_FACE}</button>`); button.addEventListener('click', async function(event) { var emojiModule, theme; event.preventDefault(); if (!picker) { emojiModule = (await loadOnce.js("https://cdn.jsdelivr.net/npm/@joeattardi/emoji-button@4.6.0/dist/index.min.js", { module: true })); theme = 'light'; if (storage.isDarkModeEnabled) { theme = 'dark'; } picker = new emojiModule.EmojiButton({ i18n: TRANSLATIONS, showVariants: false, initialCategory: 'recents', theme }); picker.on('emoji', function(selection) { event = new CustomEvent('emojiSelected', { detail: selection }); button.dispatchEvent(event); }); } picker.togglePicker(button); }); return button; }; var css$3 = "button.nyamka-from-romano-userscript-tools-upload-button, button.nyamka-from-romano-userscript-tools-emoji-button {\n display: inline-block;\n padding: 3px 10px 4px 10px;\n font-size: 12px;\n font-family: Tahoma, Roboto, Verdana, Sans-Serif, Lucida Sans, ubuntu;\n border-radius: 2px;\n background: #efefdb;\n border: #92927e 1px solid;\n cursor: pointer;\n margin-left: 1em;\n}\nbutton.nyamka-from-romano-userscript-tools-upload-button:hover, button.nyamka-from-romano-userscript-tools-upload-button:focus, button.nyamka-from-romano-userscript-tools-emoji-button:hover, button.nyamka-from-romano-userscript-tools-emoji-button:focus {\n background: #d8d8c4;\n}\nbutton.nyamka-from-romano-userscript-tools-upload-button svg, button.nyamka-from-romano-userscript-tools-emoji-button svg {\n display: none;\n}\n@media (max-width: 700px) {\n button.nyamka-from-romano-userscript-tools-upload-button, button.nyamka-from-romano-userscript-tools-emoji-button {\n padding-top: 0;\n padding-bottom: 0;\n position: relative;\n line-height: 1;\n top: 4px;\n }\n button.nyamka-from-romano-userscript-tools-upload-button span.text, button.nyamka-from-romano-userscript-tools-emoji-button span.text {\n display: none;\n }\n button.nyamka-from-romano-userscript-tools-upload-button svg, button.nyamka-from-romano-userscript-tools-emoji-button svg {\n width: 1.9em;\n display: inline-block;\n }\n}\n\nbutton.nyamka-from-romano-userscript-tools-emoji-button {\n padding-left: 3px;\n padding-right: 3px;\n padding-top: 0;\n}\nbutton.nyamka-from-romano-userscript-tools-emoji-button svg {\n display: inline-block;\n width: 1.2em;\n position: relative;\n top: 3.5px;\n}\n@media (max-width: 1023px) {\n button.nyamka-from-romano-userscript-tools-emoji-button {\n display: none;\n }\n}\n\n.MessageCommentNewInstr button.nyamka-from-romano-userscript-tools-upload-button, .MessageCommentNewInstr button.nyamka-from-romano-userscript-tools-emoji-button, .DialogNewMsgButton button.nyamka-from-romano-userscript-tools-upload-button, .DialogNewMsgButton button.nyamka-from-romano-userscript-tools-emoji-button {\n float: left;\n top: 0;\n}\n.MessageCommentNewInstr button.nyamka-from-romano-userscript-tools-emoji-button, .DialogNewMsgButton button.nyamka-from-romano-userscript-tools-emoji-button {\n padding-bottom: 3.3px;\n}\n\nbody[data-ffme-extender-script=true] button.nyamka-from-romano-userscript-tools-upload-button, body[data-ffme-extender-script=true] button.nyamka-from-romano-userscript-tools-emoji-button {\n display: none;\n}\nbody[data-ffme-extender-script=true] button.ffe-emoji svg {\n width: 15px;\n padding-top: 2px;\n}\nbody[data-ffme-extender-script=true] .MessageNewInfoHead {\n margin-top: 5px;\n padding-left: 0;\n}\nbody[data-ffme-extender-script=true] .MessageNewInfoHead button:first-of-type {\n margin-left: 0;\n}"; n(css$3,{}); var getEditorForm, getTextareaPlaceholderDiv, injectButtons, injectButtonsIntoFfmeToolbar, insertTextInCommentForm, onEmojiButtonClick, onUploadButtonClick, indexOf$1 = [].indexOf; getEditorForm = function(child) { if (!child || !child.classList || !child.nodeName) { return; } if (child.classList && ((indexOf$1.call(child.classList, 'MessageCommentNewForm') >= 0) || (indexOf$1.call(child.classList, 'MessageNewForm') >= 0) || (indexOf$1.call(child.classList, 'DialogNewMsgForm') >= 0))) { return child; } if (child.nodeName === 'FORM' && child.id && (child.id.startsWith('messageEditForm') || child.id.startsWith('message_commentEditForm'))) { return child; } return getEditorForm(child.parentNode); }; getTextareaPlaceholderDiv = function(child) { var mn; if (!child) { return; } if (child.nodeName === 'FORM' && child.id && child.id.startsWith('message_commentEditForm')) { return; } // форма редактора уже созданного коммента в треде mn = child.querySelector('div.MessageNew'); if (mn) { return mn; } return getTextareaPlaceholderDiv(child.parentNode); }; insertTextInCommentForm = async function(commentForm, delimeter, insertFunction) { var caretPosition, i, isEmptyTextarea, len, newText, ref, tarea, textarea, valueBegin, valueEnd; textarea = null; ref = commentForm.querySelectorAll('textarea'); for (i = 0, len = ref.length; i < len; i++) { tarea = ref[i]; if (tarea.tabIndex !== '-1') { textarea = tarea; } } if (!textarea) { return; } caretPosition = getInputCaretPosition(textarea); newText = (await insertFunction()); if (!newText) { return; } valueBegin = textarea.value.substring(0, caretPosition.startPos); valueEnd = textarea.value.substring(caretPosition.endPos, textarea.value.length); isEmptyTextarea = !textarea.value.trim(); textarea.value = ''; delimeter = delimeter || ''; textarea.value = valueBegin; if (delimeter && valueBegin[valueBegin.length - 1] !== delimeter) { textarea.value += delimeter; } textarea.value += newText; caretPosition = textarea.value.length; if (valueEnd && valueEnd[0] !== delimeter) { textarea.value += delimeter; } textarea.value += valueEnd; setTimeout(function() { var placeholder; textarea.focus(); textarea.click(); textarea.setSelectionRange(caretPosition, caretPosition); if (!isEmptyTextarea) { return; } // ищем элемент, который мимикрирует под textarea и нажимаем на него, чтоб сфокусировался textarea placeholder = getTextareaPlaceholderDiv(textarea); if (placeholder) { placeholder.click(); } }); }; onUploadButtonClick = function(commentForm) { insertTextInCommentForm(commentForm, '\n', uploadImageModal); }; onEmojiButtonClick = function(commentForm, emojiSymbol) { insertTextInCommentForm(commentForm, '', function() { return emojiSymbol.emoji; }); }; injectButtons = function(commentForm) { var emojiButton, inputSubmit, tools, uploadButton; if (!commentForm || commentForm.querySelector(`button.${CSS_PREFIX}-tools-upload-button`)) { return; } tools = commentForm.querySelector('.MessageCommentNewInstr') || commentForm.querySelector('.MessageNewInstr') || commentForm.querySelector('.CommentEditManagement') || commentForm.querySelector('.DialogNewMsgButton > div'); // панель инструментов новых сообщений в личке if (!tools) { return; } uploadButton = createElement(`<button class='${CSS_PREFIX}-tools-upload-button'>${SVG_ICON_UPLOAD}<span class='text'>Загрузить картинку</span></button>`); emojiButton = generateEmojiPickerButton({ cssClass: `${CSS_PREFIX}-tools-emoji-button` }); inputSubmit = tools.querySelector("input[type='submit']"); if (inputSubmit.nextSibling) { tools.insertBefore(uploadButton, inputSubmit.nextSibling); tools.insertBefore(emojiButton, uploadButton.nextSibling); } else { tools.appendChild(uploadButton); tools.appendChild(emojiButton); } uploadButton.addEventListener('click', function(event) { event.preventDefault(); onUploadButtonClick(commentForm); }); emojiButton.addEventListener('emojiSelected', function(event) { event.preventDefault(); onEmojiButtonClick(commentForm, event.detail); }); }; injectButtonsIntoFfmeToolbar = function(commentForm) { var emojiButton, eraserButton, helloButton, uploadButton, uploadButtonPatched; if (!commentForm || commentForm.querySelector("button[data-nyamka-script-patched='true']")) { return; } // перехватить события от нажатия не получится // полностью заменяем кнопку uploadButton = commentForm.querySelector('button.ffe-image'); uploadButtonPatched = uploadButton.cloneNode(true); // помечаем кнопку, чтоб опять не патчить форму. НЕ ПЕРЕНОСИТЬ ЭТО СВОЙСТВО В form! uploadButtonPatched.setAttribute('data-nyamka-script-patched', true); uploadButton.parentNode.replaceChild(uploadButtonPatched, uploadButton); uploadButtonPatched.addEventListener('click', function(event) { event.preventDefault(); onUploadButtonClick(commentForm); }); // заменяем кнопку привет-ведьмы emojiButton = generateEmojiPickerButton({ cssClass: "ffe-blog-text-attr ffe-emoji" }); helloButton = commentForm.querySelector('button.ffe-hello'); if (helloButton) { helloButton.parentNode.replaceChild(emojiButton, helloButton); } else { // это редактор нового поста в профиле eraserButton = commentForm.querySelector('button.ffe-eraser'); if (eraserButton && eraserButton.nextSibling) { eraserButton.parentNode.insertBefore(emojiButton, eraserButton.nextSibling); } else { emojiButton = null; } } if (emojiButton) { emojiButton.addEventListener('emojiSelected', function(event) { event.preventDefault(); onEmojiButtonClick(commentForm, event.detail); }); } // помечаем страницу как такую, которая содержит сторонний скрипт document.body.setAttribute('data-ffme-extender-script', true); }; var init$2 = function() { if (!isCurrentSite$3()) { return; } storage.registerVariable('imgbbApiKey', null); // наблюдение за новым контентом на странице onLocationChange(function() { if (location.pathname.startsWith('/user')) { document.addEventListener('DOMContentLoaded', function() { return injectButtons(document.querySelector('#MessageNewPost')); }); return; } if (location.pathname.startsWith('/message')) { document.addEventListener('DOMContentLoaded', function() { return injectButtons(document.querySelector('.MessageCommentNewForm > form')); }); return; } }); onDomMutations(function(mutationsList) { var form, i, j, len, len1, m, node, ref; for (i = 0, len = mutationsList.length; i < len; i++) { m = mutationsList[i]; if (m.addedNodes.length) { ref = m.addedNodes; for (j = 0, len1 = ref.length; j < len1; j++) { node = ref[j]; if (!(node)) { continue; } if (node.nodeName === 'BUTTON' && indexOf$1.call(node.classList, 'ffe-image') >= 0) { // панель от Fanfics Extender. кнопка загрузки картинок injectButtonsIntoFfmeToolbar(getEditorForm(node), node); return; } if (node.nodeName === 'DIV' && (indexOf$1.call(node.classList, 'MessageCommentNewForm_Container') >= 0 || indexOf$1.call(node.classList, 'MessageNewForm') >= 0)) { // нашли панель для работы с сообщениями injectButtons(node); return; } if (node.nodeName === 'FORM' && indexOf$1.call(node.classList, 'DialogNewMsgForm') >= 0) { // редактор сообщений в личке injectButtons(node); return; } if (node.nodeName === 'TR' && (indexOf$1.call(node.classList, 'MessageComments') >= 0)) { form = node.querySelector('.MessageCommentNewForm_Container'); if (form) { injectButtons(form); return; } } if (node.nodeName === 'TEXTAREA' && (indexOf$1.call(node.classList, 'MessageCommentNew') >= 0 || indexOf$1.call(node.classList, 'CommentEditText') >= 0 || indexOf$1.call(node.classList, 'MessageNew') >= 0)) { // редактор нового поста на странице профиля form = getEditorForm(node); if (form) { injectButtons(form); return; } } if (node.nodeName === 'INPUT' && node.type === 'submit' && indexOf$1.call(node.classList, 'modern_button') >= 0) { // когда в треде создали новый коммент (не на отдельной странице, а в списке "блого-записей") // или когда в личке создали новое сообщение form = getEditorForm(node); if (form) { injectButtons(form); return; } } } } } }); }; var OfficeHtmlToSimpleHtmlConverter, getNodeName, indexOf = [].indexOf; getNodeName = function(node) { if (node && node.nodeName) { return node.nodeName.toLowerCase(); } return ''; }; OfficeHtmlToSimpleHtmlConverter = class OfficeHtmlToSimpleHtmlConverter { constructor() { this.allowedSimpleTags = ['b', 'i', 's', 'u']; this.allowedTags = ['h1', 'h2', 'center', 'right']; this.ignoreBackgrounds = [ "#cccccc", "rgb(204, 204, 204)", //серый "#b7b7b7", "rgb(183, 183, 183)", "#999999", "rgb(153, 153, 153)", "#666666", "rgb(102, 102, 102)", "#434343", "rgb(67, 67, 67)", "#ff0000", "rgb(255, 0, 0)", //красный "#cc0000", "rgb(204, 0, 0)" ]; } isNodeNameSimpleTag(nodeName) { if (isString(nodeName)) { return indexOf.call(this.allowedSimpleTags, nodeName) >= 0; } return true; } generateOpenTag(nodeName) { if (isString(nodeName)) { nodeName = [nodeName]; } return nodeName.filter((n) => { return indexOf.call(this.allowedTags, n) >= 0 || indexOf.call(this.allowedSimpleTags, n) >= 0; }).map(function(n) { return `<${n}>`; }).join(''); } generateCloseTag(nodeName) { var closeTag; if (isString(nodeName)) { nodeName = [nodeName]; } closeTag = nodeName.filter((n) => { return indexOf.call(this.allowedTags, n) >= 0 || indexOf.call(this.allowedSimpleTags, n) >= 0; }).reverse().map(function(n) { return `</${n}>`; }).join(''); if (indexOf.call(nodeName, 'center') >= 0 || indexOf.call(nodeName, 'right') >= 0) { closeTag += '\n'; } return closeTag; } getNodeName(elementDom) { var _nodeName, nodeName, ref, ref1; nodeName = getNodeName(elementDom); if ((nodeName === 'span' || nodeName === 'p') && elementDom && elementDom.style) { _nodeName = []; /* порядок тегов важен! сначала должны находиться center/right */ if ((ref = elementDom.style['text-align']) === 'center' || ref === 'right') { _nodeName.push(elementDom.style['text-align']); } if ((ref1 = elementDom.style['font-weight']) === '700' || ref1 === '900') { _nodeName.push('b'); } if ((elementDom.style['font-style']) === 'italic') { _nodeName.push('i'); } if ((elementDom.style['text-decoration']) === 'underline') { _nodeName.push('u'); } if (_nodeName.length) { return _nodeName; } } return nodeName; } isElementIgnored(elementDom) { var ref, ref1; if (elementDom && elementDom.style) { return (ref = elementDom.style['background-color'], indexOf.call(this.ignoreBackgrounds, ref) >= 0) || (ref1 = elementDom.style['background'], indexOf.call(this.ignoreBackgrounds, ref1) >= 0); } return false; } domToSimpleHtml(elementDom) { var child, j, len, nodeName, ref, simpleHtml; if (this.isElementIgnored(elementDom)) { return ''; } nodeName = this.getNodeName(elementDom); if (nodeName === 'br') { return '<empty-line>\n'; } if (nodeName === 'hr') { return '<hr>\n'; } if ((!elementDom.children || !elementDom.children.length) && !elementDom.textContent) { if (nodeName === 'p' && !nodeName.length) { return '<empty-line>\n'; } return ''; } if (nodeName === 'h1' || nodeName === 'h2') { return `<${nodeName}>${elementDom.textContent}</${nodeName}>\n`; } simpleHtml = this.generateOpenTag(nodeName); if (!elementDom.children || !elementDom.children.length) { simpleHtml += elementDom.textContent; } ref = elementDom.children || []; for (j = 0, len = ref.length; j < len; j++) { child = ref[j]; simpleHtml = `${simpleHtml}${this.domToSimpleHtml(child)}`; } simpleHtml = simpleHtml + this.generateCloseTag(nodeName); if (nodeName === 'p') { simpleHtml += '\n'; } return simpleHtml; } cleanGoogleDocsHtmlText(htmlText) { var div, doc, j, k, len, len1, mainNode, node, nodes, ref; doc = createElement(htmlText); nodes = []; try { mainNode = doc.querySelector("b[id^=docs-internal-guid-]"); if (mainNode) { nodes = mainNode.children; } } catch (error1) { } if (!nodes.length) { ref = createElement(htmlText).children; // быстро найти не получилось for (j = 0, len = ref.length; j < len; j++) { node = ref[j]; if (getNodeName(node) !== 'meta') { nodes.push(node); } } if ((nodes.length === 2 && getNodeName(nodes[1]) === 'br') || nodes.length === 1) { nodes = nodes[0].children; } } div = document.createElement('div'); for (k = 0, len1 = nodes.length; k < len1; k++) { node = nodes[k]; // баг с игнором дублирующихся нодов div.appendChild(node.cloneNode(true)); } return div; } cleanLibreOfficeHtmlText(htmlText) { var doc; // TODO: доделать парсе для libreOffice doc = createElement(htmlText); return doc.querySelector('body'); } cleanDefaultHtmlText(htmlText) { return this.cleanGoogleDocsHtmlText(htmlText); } detectOfficeType(htmlText) { if (htmlText.includes('id="docs-internal-guid-')) { return 'googleDocs'; } if (htmlText.startsWith("<!DOCTYPE HTML PUBLIC") && (htmlText.indexOf("LibreOffice") > -1 || htmlText.indexOf("OpenOffice") > -1)) { return 'libreOffice'; } return 'html'; } convert(htmlText) { var cleaned, docType, domElement, text; docType = this.detectOfficeType(htmlText); if (docType === 'googleDocs') { domElement = this.cleanGoogleDocsHtmlText(htmlText); } else if (docType === 'libreOffice') { domElement = this.cleanLibreOfficeHtmlText(htmlText); } else { domElement = this.cleanDefaultHtmlText(htmlText); } text = this.domToSimpleHtml(domElement); // вырезаем теги ignore cleaned = text; Array.from(text.matchAll(/<ignore>(.*?)<\/ignore>/g)).map(function(value) { cleaned = cleaned.replaceAll(value, ''); }); return { text: cleaned, type: docType }; } }; var htmlToSimpleHtml = function(htmlText) { var c; c = new OfficeHtmlToSimpleHtmlConverter(); return c.convert(htmlText); }; var simpleHtmlToChapters = function(textHtml) { var allMatchedTitles, body, chapters, endIndex, i, j, len, match, title; // парсим на заголовки и блоки chapters = []; textHtml = textHtml.replaceAll("<h2>", "<h1>").replaceAll("</h2>", "</h1>"); allMatchedTitles = Array.from(textHtml.matchAll(/<h1>(.*?)<\/h1>/g)); for (i = j = 0, len = allMatchedTitles.length; j < len; i = ++j) { match = allMatchedTitles[i]; title = match[1].trim() || ""; if (allMatchedTitles[i + 1]) { endIndex = allMatchedTitles[i + 1].index; } else { endIndex = textHtml.length - 1; } body = textHtml.substring(match.index + match[0].length, endIndex).trim(); chapters.push({title, body}); } if (!chapters.length) { chapters = [ { title: "", body: textHtml } ]; } return chapters; }; var IMG_GDOCS_PALETTE = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gATQ3JlYXRlZCB3aXRoIEdJTVD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wgARCACXAWgDAREAAhEBAxEB/8QAHQABAAICAwEBAAAAAAAAAAAAAAQFAwYBAgcICf/EABwBAQEAAgMBAQAAAAAAAAAAAAABAwQCBQYHCP/aAAwDAQACEAMQAAAB+owAAAAAAnWgO0oAAAAAAAAAAAAApEsCxUaxZdSzSECaDU7Nslj5OELNj1HtuvutPZ2LrN3PKAMJFTMso1ewbRKMZkNeSsrbpcxjMhrFnBaRYLkK1LJfJOUsY9KlHntnoUo0azk3iXg8Y5cfTuNssnHVO10fNfR9J7H5D0dlp7EiXwPlxsj0vjZ5Wk8s10KyMbzLS2bDLmPPrKs9BisrYZcxpdk0s4nLmPPLOpskSy2WEUtmzyjRrBvMvgBqgPqHJwr82MCdrZs8oAxJkXkGr2DaJRjTIuvoNgUY0yLrFnBaxPMi4UlLhAAAAAAMKSKA7SgAAAAAAAAAAAAREkr1OxWpKWQdTsagm3rkMJyaem6qAAAAAAAAAAAAAAK5Mi9U7LgTOo6p2WtSyUdU5WAl6sU8/s9GlyGDjYuThY8eQAAAAAAAAAAFKlqoAAAAA6mBJyj5Z58PoHjy2WWi183nnY6PXWz7BXoUoAAAAAAAAAFclioAAAAA4IySlA6Hcxy4uXHDLJMwAAAAAAAAABDSYoAAAAA4IySl6lQXJhMBNIhmMpFJJyYDOdTqZDodjk6HcHQ7nBwdgQ0mKAAAAAOCMkpfig8DPsk8yKU+ozwktT3U8xNyLk1w3krDAbaURmL8imVO50XMmVe5wZCGkxQAAAABwRklL+fZ5efTBpRFPoM8rJB7maQbAX5UG1kM6GylWdjYDGdjuDlJi9zEZSGkxQAAAABwRklLQHmJ7Ga6U56IaSWZsBqxsB3KkvSKYSyIRkJBGM4MKSF6HBlBDSYoAAAAA4IySl+aus9t4To+q+sO18D5L5/69QYO2+pu7+FaH8m9VYdjqemep8TUfE+wsfpGppHf/JNE8h4P1n6T9Z1/6b8sg7HUbx53754T7XrrfVz7Fh734/8AtfXfQHzjc2Drfb+Ne67/AOmPlPkfNPU/VKTf7L6Z+U/ErrR62GkxQAAAABwRklL8P9H9R0fB2nt2553z7zv2PHOf0Jz+RQ/nGx25cfWO28FF+dZ5HosPl3r/AM70fU9FvHtva1/3L5jxeFn1/wBo8m9L2HeWN2vf+B/R9bfPO5dx6X6lp/d7/r/ien0vvPrXTly+jPmHxzfPPeUhpMUAAAAAcEZJS6lh7Dy/V732rd8xqOl6ijwdp632vz/UvH9/O39W/wC46qB8+2pfsdeu2ek1jz/lt19X7es7fzMTN1ey9V9B8/73rbTWzXWrueG/QNT1bx+xJxdj536btfXPF9Fq/b+jqNzsPTfK+J5khpMUAAAAAcEZJS69g3qHDubZs9bB47OCc9gy9dX6mx358J+bDD6/PI28WDLgr8eO3zZazLiwWXfHLQdhr5+FttPPTbGvY4c3SZarLb/BK2Z8DnsM1chDSYoAAAAA4IySl0DS7qDwzXubTxswuOejxoZeOUm7Go6/Y42McDc6/Dj4TM+Ws2sPBPyc6vfwC30M8DPgkYsmDjuRcltMEr8W8XYZpWDhDSYoAAAAA4IySlrMexTYtrY8+hE458E53OXSga+bJz4yueOLq5c+xw6cscHhws8mSDz4YbxtuOWm28Gfhyn6+WrzYZ+LJ1c63JbnFIUyYLyuJh5Iaf/EAC8QAAAGAQMCBQQCAgMAAAAAAAABAgMEBRMGERIQFAcVMDEzFiEyQBc1ICI0NkL/2gAIAQEAAQUCwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGJshwaHBocGhhbGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAwoGFAsL+BVPQbGNZs9Jmpa2vkw5jNhGHeM953jPedLDUDcC1D34i/v00qK2wRZwzPZv/B10mW+7DL5OmPPiNzz4ic6OHsQsLjy976mDLmZkOHsQnajhV06ZqatgSK+yjWrKj2MSLFiN0vO4+tNLcmrPp/c6n6OuJY1i0tL+sQZ7F2Fjes007zKse/G6sSrK+hgyrdTTSWW1fEH/AC/tZHl/mFD3Hk889orzrbj8ZxLskQbSNVsPXLF1Dmdx21I/ZyWnfxGoP+ZXzvL3nnJD0Ckfs5LTv4i0/wCyTPOe5r+8wr/IRHq5mxlfTfc2FBAtXq+qiVSBMhs2EaHpqtr5PS7rbCzXSV1hWLGqPFb6avf5zH85h8/9eQ5DkDPdvmOY5jmHUpeRyIhzHMeSETnkhG5zHMLPcuYsKrzB6vqvL3uY5hZ7lzE7T8GxnTNOVk+RX18aqZUe58whpptwZkDMgZkDMgZkDMgZkDMgZkDMgZkDMgZkBK0OrxoGNAxoHEhxIcSHEhxIcSHEhxIcSHEhxIcSHEhxIcSHEhxIcSHEhxIcSHEhxIcSHEhxIcSCH0GOe6zXs8teMrNRtxIaXURELyEhfJXPddnOks2a14yDK8jKV8010uQdv+9DXkZ7ohnTy7og8tqQnuiHdECfSk+6IPMxpD/dEO6IJfShJyiEVtrvhJU6iO/qh3g24l1AffRGYcsI7TP68d9KEYyGMhjIYyGMhjIYyGMhjIYyGMhjIG2QaSSXeheYUdxQS48iAL7+jkt2JVzUixl2VXAJGof1Wmy29Qwj5epISkwtCXUKjNLQqviqlJZQlz9Vn29Qwj5QZkkmbmvkPh15thEadHmdH5bEUNuoeSFSmUK9+hPtqUDMkhK0r6Gokgj36GtJH0JaTMGewJRK6s+3qGEfKPFTV0mwuCPY/CvWT1lXXl5IvZsaS7DeY1Ybukn33JLtRbv08q+tjbjDT1ktmTbzVOPionG62++qQtKjQaZfKIpRqNl42VOuDYNK4KWrmrYg2vYJTuDQRhB7kGfb1DCPlHiRTu1OrB4RaddlMSYzkOQIunn0aEEdhcp+/rjjRxRRVSbG0YNmYKWMayUk0KDcdRQAlJqNxHDokuSzLioIRzCD3SG+jPt6hhHyi5ooOoIrHhBp9mRGiswmLnS9fenWaDqqx4TtH1s5yr0/CqDWhLiF6ZhKXFiNQm347clCaSMSkpJCXorb4ar2WjC4bazajoaBluO3SEoJBKSSywECLYGjcY+rPt6hhHyjxB1nJROYmyIz2g9WqvIGoNVy7mTXXMyqdg6gRNopEt6WqvtXYTj7/FBmZnGfPlqC5cJ9Dzja6G2OcxOsnJa2JTsZUi5QxUzbGRYOU98/WPeIOsF6fgPzpEp/w51vKcn641ZIRMZlvR3dGanVcw7zUcm2fgWkmsdp7JNtXhn29Qwj5RrWE5B1OPDWqelktCmligrnWtGhJGo3GjaaDBcnbplTFmNMxlOgyNJiyhOL0yEpNavFWsdjrGhoLk/VWroi4eoR4f1zskloNtY0VGXHowz7eoYR8o1BpiFqRlnwkjJerq6PUxL3RUK6drvDiHFe4kSZGm2nFQKVmEpSSWXZlu20lorCsYskI0k2S48duK1MqWpamKFptXEjTM0ZGfcqtNRqxyyrI1vDe8HYqn9OaVg6YYu9PRL9prwxjk7BgsVsa40nEtnIOhIsd0iJJBn29Qwj5RYWBtKKa+k4Mzum35ilKRKcQZPJNpTqlBt80m45xH3Dbn3kSOJk8sjYeypelqUaJTiDzpwrluLNiapKn38STfcM40nmcuXjMpLpHHkZ0PzFKU3KcQbaycSGfb1DCPlE0jTLFUlRn0bI+0BgyMjH/p4tnRHIz6mk+x6SkmXRgt3pJbPiEkz6wi2YDPt6hhHyiZBTKBUy92GEx234ROKRX/fiXFUYw3H4mpPMsSwhviHmCdBQ1bttk2l6GSzRB+/EuK6/7sQibU42TqTgq3ZYJkSIxPkVcrdtsmkvwycNuB9yLYgz7f/EADkRAAEDAgMFAwoEBwAAAAAAAAEAAgMEEQUSMRATIUFRBjKRFCJAQlBhcYGx0SChweEwMzRSYHDw/9oACAEDAQE/Af43BcFw9lO2VdWKYDhcqGUTsD2+ynKpm3EZdzVJFJUXE3d/X3JrQ0WHsp3s6wVgrD/HQC42CBBZvBp7Mg/mt+KZ/SnL0H1Cl9YDla3gPG6k4uHwv+Z+3soG3EK1hl5I8df9t4RhsZjFRML30TomPblcLhYph3k0rdzo76rCMApsNiGZodJzP2VZhtJXsLKhgP18VVYQ+mxA0RPz93/fmoaeKnFoxZVlBHUtNhZ3VRRZnedyVgFNELZgu0ONTNmNJTmwGpTJpYnZ2OIKwLGDXQuFR3manqOqxjHqnE5SA60fIfdUWI1WHvz077fTwVDijK2hbWAa8vepJXym7ioKl0R9yllyjzVclQym+UrDqJhZvpBfonMa4ZXDgq+i3Mg3WjlheDQYfGCW3fzP2VXQ09azJO2/1WI0TsPqXQHl9PQsMlbLSMy8hbw2YrVMp5YL8nB3yCa5r2h7TcHZi1ZG/HC0cm5fnr+2wkNFymSCR7yOZvslNmFY3A6DEJQ7mb+Ozs7RyVDKkjQtLfmU9rmOLHCxGzs/SyRYMC71jm+Wn77AL8ApWFobsiF3hULw+nbbZXVDYZISeTgfBNcHtDm6HZ2mnbNiBDfVAHoVHXTUTrx6dE7tDIW+bHxU00lQ8ySG5WF9pqvDGbnvs6Hl8CqztlVTsLKdgZfnqf0WY3zc1DjMrBaRub8lVYlLUjJoEHFpuF5SeifIX6rEMLp8SbaYcRoeaZ2RhDrvlJHwVPTxUkYihFgFinZmkxN++7j+o5/EKj7GUkDw+oeX25aD9UAALBPoGON2myhpGRHNqUWhwsV5MOqZGGaKnqpKY3YjjD7cGcVJI6V2d54rDu0FTh7N13m9DyVV2qqZmZIW5PfqUSSbn0KCAOGZy3TDyU0W7KjhAHnJ0THItLTlQiHNPjtxCAut2E5uVOdZZigbou6IOKzcLovJTXnmnOyhbwpj82y2xsd+JRjHL0OLiwbKggZdshG92HRR7JNE7XY3Tae5tfoNkeqGwoabH970KKYxryodE95eblMnyixTqj+0I8UJSE55ctFvCiSURdZNhZdBnXYY+ibHbVEXW6TW5dl9jXlqMhP4P//EADoRAAEDAgMFBAcFCQAAAAAAAAEAAgMEEQUSMQYQEyFBMkBRoSAiUGFxgdEUMJGx8DM0QmBwssHh8f/aAAgBAgEBPwH76xVirH2UzXdQUBrCTewCqYHU0picjr3zoj6XRdPRZqqOnNTMGW5dVXTw0gaac2f7vD3pzi85nao6975/fM19A6+yrlXKuf5atvc4NFyi0h/DOv0/57Mn/ZlP/evW1u7+1yh5tYXfxXv5/hb/AAmdgn3keTfr7KIvqrknN1Q9XT+rdRMb5GoEjmFBNnb63RVFU+Z3I8lHM+I3aVUYg2CjNV+rqprJ6t2aZ11h2LTUMgubs6j6LaTHHYbA1lN239fAeKkqJpX8SR5LvFbL4/O6cUNU7MD2T1B8FjWKSCQ00JsBqmSyRuztdYrBcQdXMMcnbHmqelZCPepIWSizwm0bnVPA/VlDTxwC0YVXQx1LeQs5bNYI3EpnPqOwzp4nwUdPDEzhxsAb4LafAIWwGupW5SNR0I8Vs/g0TohV1AuToE+GORuR7QQsdwkUMzXQdl/kVh+Fw0bBcXf1P0VRSQ1TcsrbqtpTRzuhPcphaQ7oGFwd8ERbkd2JU734XcdDf5af73NaXkNbqtrqOSH7PIdA3L8xu2fp31GJwhnQ3+QWKxOirJA7qb/ju2XYWzun6D63QN+Y3RTNFfb3W3EgC5Wx1VHI2eHrmzfI7toKhlPhkxf1FvmVgszZ6CIt6C34btpKpkXAYdQ7N8gmuDhmG7HpWy1hDegt3KSJsmqFIPFNaGiwU9FHMc2hUeHMabuN1YEWVTszBK7NC7J5rD8Dp6F3E7TlVUkNbEYJ23aU/YeAvuyYhvwv58vyWF4RS4SzLAOZ1J1KrcPhrm2kHPxTdm4w71pDb4KGCOnYI4hYKCtkhGXUKTEXuFmiyub3UOLysFni6qcRlqRk0CpaqailE0DrOCZtvOGWfCC7428uf5rE8XqsWfmnPIaAaBYfidRhzrwnkdR0T9rJS2zIgD8VUVEtVIZZjclUWMz0beH2mqo2hnlblibl80Tfme5PfbkFncmOzIuWYq/K6Mx6JktzZye8MFyuO9RS5+R1TnWWcoG6srINzGybE0J8II9VNbmK4bU9mVNbdZAnC3dX9rdH13nsHcNVU6DdB20/XdHvi7e9h5ndJ2UzTdJ3VzMy4RQGVFt1k3GEHRNjDUQCLFfZh4pjAwWCIuuGN11dX6oT+KfNm5BA2XFTnFyDsq4iJv6X/8QASRAAAQMBBQUFAwkDCAsAAAAAAQACAxEEEBIxMhMhQVGRBRQicYFCUmEgIyQzQGKhscEVNVNDUHKksuHi8AYwRXN0goOSlNHx/9oACAEBAAY/AtDei0N6LQ3otDei0N6LQ3otDei0N6LQ3otDei0N6LQ3otDei0N6LJiyYtLFob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0WhvRaG9Fob0QitU+ykLcQGBx3egW1s0olZluvfBPaMErc24HH9EyeB+OJ2TqUu7pj+kbPa4KezWlV3TH9I2e1wU9mtK32axGPFtdUldFdw+QwBm0mfkOFEy0RggO4HgU30+SXmtByX1EvQJwwuYW8HXStisVrnEbzGXxsFKjPiomy2K1wCR4jD5GClTlxv9RcI+5Wy01bixWeLEF+6u0//H/vTJMLmYmh2F4oR53eouiss0lJH5ngzzToJ7TglbmMDj+iMtlk2sYdhJoRv9Uz4m6HE+pmdhYG7ybrB3TZd42Hh21cPt8l2tFPh73jDn7L6v0v52bs4ehkP/r9L4jIcAkseBpPE460UrozjbHY9m8jg7HWl1TkrdaoBZtjbHeEyl20AafDRQT+05vi/pcbpJcTWyUowO4lTNtzXPspOJxk3HF91NYxoYxu4AJvm387pv2l++cZr3ra4M/u8KK1/tvYd+o2nc9tXLpyVl73Xb4fFiz+H4J3mPzTHi00A/BTuaato3f1utBtMmzElulaP+5WaSD2bdE0g569yf3XZ7f2dqNxTpO0IooODY2A4vXevUfncz98fV/7P0Zn8UZO7/6QWmrcOG0MxBbSytEc7mhzWWhv4FOk7Qiig4NjYDi9d69R+d3Yf/X/ALCf3TuPd/Z22PF+CPfthtcW7u9aU9VH5/pdXs+Ez2qV1HNy2La+I/dUu37vtsZx1zxcUJbVBtZA3CDjcN3oU5tlhEQdnxrc+CdmOJ2ba0TJ4LPglbk7G4/re6MQ9ny2X2NvjxjomxmLs+Ky+3sMeM9brT2d+y+8bHD853jDWrQcsPxX7k/rX+BfuT+tf4Pkt9Pk4Xbx8iV0VutcAkeZCyN4pU58FE6W3WucRvEgZI8UqMuF/qLhJ322WajcOGzy4QjJ322WmrcOG0S4hf6i6K1TR1kZmOD/ADTp57Njldmcbh+qMVlj2UZdiIxE7/VM+Bue9rGte/U4Debtbeq1t6rW3qtbeq1t6rW3qtbeq1t6rW3qtbeq1t6rW3qtbeqpUOWkdFpHRaR0WSyWSyWSyWSyWSyWSyWSyWSyWSyWSyWSyWSyWSyu1t6ot4gVTW8C0n8lU8wE+XbyQCMYvmg2p+G8FQid+0nwjG7mVUcyFIPddT8Ai3iBVMZG5whbssVAMIxPocXHLKnqqnmBcxxzc0FVHMhOhmc/e2V2BzKNbR4DcJ47j8fT7exxzIBWlyDsDqjctLkGyRucA4Op8QahaXLS5Ehjt+8rS5NmfC8vFPaoDQ1FRXf6rS5aXINDHUG5aXKSUMdtXN3uca7uQ5XSOhYJJQPC0mlSoLVFD9HjdgtkX8pEU17Dia4VBHG6SaQ4Y42lzjyChldJSOZzWsNDvLsvtAaGOoN3+uPle4YHGckgtLaiUfqCgyBrojEcL4H6ozyu7Q/4eT+yV2KZ57K+z94s/hjhc12Y44z+SmmE7IdlbdlSS2FowYqYdlhpvHx4q3t7xa3sgEZYx9qkc3eDXcTv/mT0+Q4hoBdmRxucx7Q9jhQtdkUxjomFjCC1pbubTKiFpNmiNpGUxYMfVPkDGh79TgN5/mT0uJJoBxWxit1mlm/hslaXdLscj2xt5uNAvmLRFP8A7t4dd89NHF/TcAsUbw9vNprdhdMxruRdfQSNJ5A3bzReFwd5XbyB5rdvupiF+oXb1uIP2H0um7LhkdHYrMcD2tP1j+NVUK12S3yOlksbNq2Vxq4s+PknTTOOCvgjruYE2aCR0UrcnNKHaNB3n6qnDHz/AFRkle6R5zc4pssTjhr44+DgoWwOptm4sQ925tncaxP3AcinRA0jb+Nz2SGpYK1+CqcuAVWmhW09rL1VSalVHRADjvuA4FHkLiDw3rE7Nfqt+Y+wel1tL2nZWl5njdzrn+Nbu1bY9pZDNAbIxx9qur9FJBM3BLGcLgbsJYduZO9YONMvyuZFE3FI80AVjI3tjjEJPldFQeGM4yU+uTjiF0zzuBbgCLTuIuy31xUuAGabypS4D1RHrc7ypeTzNfsHpd3e32ds8fCubfI8FtHNtMzf4T5fD+AqmQwRNhhYKNYwUAWK0xUl/ix7nIShj7Q9uW3Naelxfs3QOOexNFigi+cP8o/eUWvAc05gqvjaPdDtywQsDB+awyNxBV8R+BKAaKAcAvEN/MKtMR+9dWlPJeEb+d2ZC3Lesybq5HmFvJd5/YfS5/ZlhlMDI90sjNznHlVbaKaSOX32uoVMy2O+lWbe59NTeafhlfDZAfBE003fFB9mneyns18J9EztANoSKFn3lileXfkhVxdFxaUMPtLNYXb06zQOLGt1OGZWNr3NdzBT2zfWx5nmEfEWx8GqsbyPgnWym/LD95F88pf8OATavL7PXxMP6KGKxn6Xad7X00N5rbTTySy543OqVH2Xb5XTsk3QyP3uaeVU/s+xyGFjN0j25k8ltY5Xxye8129SstR+kWfe5/vN5pwD3R2avhjG7qg+zyuZ8OB9FFaWjCXam8j9g9LreJAfnJDK0niDvu7WlbVrHWY2cH7x/wA/inMeC1zTQg8Lg5wPjl21Pu5f33ADeSoQfZYG3NU+L2nYh63Wp+TTHs/VEHcRcSAd0m1p8Mrg1oq47gAuypzUxizizk8A4f8A38LuzxGD83IJXEcA3eraH18bzI0niDd2nIKhjoDAD94otcMLgaEG5pfUbR5eK8v8j7B6XBtqaRI3RKzU1Vl7QlfF7rWAHqmWayxiKFmQRnq6zWg5vZk7zCElpmda6exhwtWGgw5UVYnmL4UqFj+sk5ngqFaluVJR4hk8ZheK0OLeQbRCOJuFg4LHofzHFVkeZPhkFSm7ki6GV1nr7NMQW1qZpeDncE+y2uITQvzaVWLtGVkXuOjDj1RZZWEyO1zP1OQbaGkPbplZqaqyW2R8futZQ9Uyz2eMRxNyARlqYJjm5nHzCD55XWmns0whUG4fYPS7Zx58Sq7VyNdzxmqMOFq1YvNY+Czp5LeahbsytR6rC7qsLc+a1lciF4TRqzr5racFqw+So81auZOS1lYXZ81gZnzVcZXIjNUYaBZ4h8UHD7B6XS153TU92l4/pXtr7tzfNO87n092/wD5r46+7czzT687pKe7f6/YPS6ul44re9tFhasTTQrxu6LDTcvCeqq7fdwVcyuR5rMKgVWmhXiPRYabl4HbvisTjiKoVucKLmea5O5re4UWFqxNNCvGd3w+R//EACoQAQACAQMDBAICAwEBAAAAAAEAESExQWEQUfFxgZGh0fCxwTBA4SBQ/9oACAEBAAE/IfDZ4bPDZ4bPDZ4bPDZ4bPDZ4bPDZ4bPDYgyPsnhieGJ4QngE8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8Nnhs8NlZwt6SXk7MqDzZsI9kcnXGH+lLBMlNEmcN8y1KOHOo9PugPUNNZ90B6hpr1VViqqXZcbvJ00/Xos3MfA3K/1Nbw2uGpFYa2fs/8AJIqjGrWooQyOh/0mF8rCteimrILaqWXWAasglqtTdeqmmMH2dNJoYXylLeuPs6e5+8Zl0Nk6KaYwfZ02oIvYvtcw2DoywTIjRJedLa0NYHcjiOw/D0WAmn3d6DY3dunLD8jvVpcZPY+rojXBy3efjr++frPR5dSaru0HYOahoA0bGoXNdAZAGVZhNxIUbDg0l54qHsMfYZp+sz7llOyVM2l8jtVtjXavaBmCnoCftOzpsD8ePxa/ifzZN9eqsfuecduXOEBDgP4czk9pW3bEAEwU6DCod73z6HePsm2Nhb3M+JmHQWEeJpPmZlXSWG9liaP74dPjX95+8VNdgYTyNheuPtgh0UsWXWJTtxMyrpLDeyxNH98On7XCemL0Eu9Gtzny4OVeq7v6n7vLoEYYtksgTC7a3Z8m31NXvcrOFvSWsHdihMuqr1Kr0xhvmWpEyZ1CZw/0pYjhpovUDHRw8BedOb02i3eqL0prOvNa7dPO73rWzXbrVUH1lZWVlMNbf2SkpKSkSHalno3AAFAbEpKRHRkEtdLbrBdGQW12ouspKSvDufZKQsNDK+VtK1z9ELLQwvkbCtcfbKSkrw7n2Sk2wAvYrvUExR1ZQBgBoEuuFtSC8nsS9HcfhlJUfNqKcFu8G54bPDZ4bPDZ4bPDZ4bPDZ4bPDZ4bPDY0/1IoNYuhv8A8WtbhfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxOB8TgfE4HxGjQId/UgMvQXvf4jYexez+UIbEcDlD+4C3BKMPu0rzGLDDnQDWEtgGRwp/UZ6qoV6n9wGXoL3v8QUYK/tMncOFvRCGxHA5Q/vo1eEFckFrAMjhT+pcq1hJiiUb3OXs/wB9KdbK5J+ufmL4jIcaNXvwT9c/MAhT0YG53Bn65+Z+ufmHIr2MtB34J+ufma4JwtABSjko1P1z8z9c/MP1MBjT5lH8f5ldyknSxqLTgro6JrXNouZ4HI4OnYznfTEBqJpwdHpiRgq0FrRM74vtp0xd7/7A6hAMafM45xzjnHOOcc45xzjnHOOccp6RSOpKksxZyVA6RW8Jb8duDqQwcw7UmYQhCwzQBrDnHJQjtKMp95zSTQa/623f5dE1v/B2yWSlVWej0AGWDqJvAgKIU1BtW0BdtIgcVuBzYBSnS3er/wDhmia3QbYVqaAjo4aQp9DfR0M6n+RgakGrUfD0EEV0f52EWbQg6cflg/EEAjY7xaLcE4tuV6GWA7rPvgX0+/1UA2gdzpaAPZetIEew9ANoDmfXY/6Bomt0Yz5CbyrqDgOLiEiJkScocxjE6q37J2mffPbQDv3d4vgbrki4LU9j7K0TLvewWY2CyeifzHjPJsmyvWLbH9vsPpVGzYKDq5mkflVHqw9d+AQ+wtEjjWRGpN2BUxv3S0bVLPEoGhF3CquzKhvVXdixVFTK90o8SiBa77TaadhrFbcU/wCc0TW6B6tkpd/CiumJcals0cFZc+sbijsSdDwXsE2d9ddF2EH3YWdfG1Mf30QkodlWn3G8a4730Oq2TvesNGxSdKW5f1e3QGrWAmV2G/p0c7ZtLG3ae/Sw9r39ZTdzCdmLRbggxo/54aJrdD3WJ4N3LK9JnEFmE4wfaVFsHPwEOJEoTH2Xf3iPetiV3oB89HbkaAvsiRNhFKYfXb2hpUoVjKFP3JeZ3bDWvqZSJsdz0liB+lhxMYDBH7+OMAlBpa+jaxs5H1DWAESx2Y3YF2GVAV/crAv+oW5N2WAACg2ITyYAL/0IGia3QeihSxLpsDGmudoDGm7dvrB3IacPeg3Kp9ofMAyTurqsv+rOTgdDPTwJdKel/UcpO2z0IRo3OvHcltdoseJaFL3iA1HRZjypip2vtN9M3Bi4FN0+9AsBcWMcwn9RPqRmXBTv0V6f1EoTpevSINNsndHfsYesFTYHWru2V7xoyuXt9YYV1KhLvqR50a2gBZ0d+aOwccwKOt3D5QTdWBR6TcrPtBNvL5HfuYkVNb3xOhlBAV2HCf5zRNboIINwjpXGp7dNhy1jl+SiHIkOpRqPQpFUvgW9MdAtqqA3Zl+sHkOj0tm4ZhyM7mX76dFitAO1vH3DKUUjt0YISXo/Tfo/hpqCw+u/BF+UXQ06b7Fa+ND3g18tDsr+Pbp2U0y5fkr7ib1tSE1OgqUT7lB85e/+c0TW6Duq2q/McMy2Lav3P8TRrot53VcrNjgaPJ3OSpfJtmS9S1fmBoIGjiu0blX/AJWYLalodHoIpGyOkQdqlYOd1ghp2LC2drxfP/IL3SiLbL6/yiE6j2QUGFlYYqawYaD6ZP5gyj8H0k9BRQdkdR5Jnk+aR95/EovLdv8AGcE165SvyHDMrJ0n3H+J/wBSSpd3mbJXayS/W7M765V+YYAAoDQ/zmia3QncD7fErNHls+ICAaGaesXUDc1ZfrDtnBZ2ac9o3a+DqZNc+pKIZaX5jdtv9kSiXekJ727JZMvLBS+6ikqtzVlwue2US4GnPaNmw7YwNYt3UhGnZJaPgYnsbuie8eyZQPWEi9kiCh7mrBavcI0WX/OaJrdBhqu+23RW0fc6dTM6Z+2nTQzjVPffpVia1iWdbPT12Hv1zW2Xt19DB79Goco3qjoXzD36tk3Sf5zRNboDLUKD/c0vd5aw8eNVdVii1ajpH0FdpCwMariGcCdoqEEaBpDofZNok4Wd3ELM8vaA3dOkasZ3Jsb/AJiu5ajpHonXaNsY1XEeyHCRFI0DSJDx/E1AcoderrAa8GkfQJD4UfzFdj1NmKFF7IAAKDbqf//aAAwDAQACAAMAAAAQ222222zSW22222222222223ch02ksry0kg8hMinIihvUcGk0lMldmKjr+cWV0W90J+m38xkAgkO20khklsjjcjhrcI222222XSQkkkkkkkkkkkkg8UoijkQ0kkkkkkkkkkkkkkjzz2e+zXkUhEkkkkkkkkkkkYAAAAAEsnMZPkkkkkkkkkklkkkkkkBkgkgkkkkkkkkkkkskkkkkgMkgEkkgkkkEAAgElkkkkkkBgkEAEkkgAgQ7Hw0skkkkkgMkEgkkgkEEmC04ClkkkkkkBkkEgAgkEkEikcykskkkkkgMR3KalElWfp4xCflkkkkkkBm8/W831ud+6dp90skkkkkgMe5yPBMMjqUdmc4lkkkkkkBgEBwgyU6n1r/eKsskkkkkgMAn4Zp1uf1qrbSWlkkkkkkBkFdNrIZYJ/idwUkv/8QAKhEBAAEDBAEDAwUBAQAAAAAAAREAITEQQVFhcSCBsUBQkTChwdHw4fH/2gAIAQMBAT8Q/VsVPKp5VPL62YqZ1k9c6YaChIwbR5q3UPzRg9U6zU+man0zUlZ1nRzRrl13rfW7ResKOVDZO7SZFTLOf8Z2j2oEcBgowaW3q29GKfRMVM6E76upO+rmr+i21WqJqI1g1SaBPTh6DB9LBUFWPos10V0V0fYH9I+vP1jWdTJ3bU6SwGelA7yn2Y1xRp+xfNX4hv3Y57XxePanDbw4IlJcwSjNrwQk0IeJKi149toBGOrv2Q9SISEoEIwiNoMEcWPxVkLox1TdF2I9rseJV937IfbT7afbT7aaGlWBuBym694I3qLfgQSjUb8Bxwvs7e9JbgJSb8SwDiIXL1MlN4gdguR+OZKk+AycmSPmLR8L0JP8ny5aTg2Bb2eT42qUBbLzQSAtRIcRmmH2pWVbwOQN4hWTGe88ij+aY61P8A3IvHTvSijbLFtmGVzeQwdgXsyTK6cE/wDSGo2SIeBsnibjx3VwL4/FBxZ3n9VF7n4pZK3pkuZxRiUcHAcxy1Dw8EtVirkBw8e+1DacuE33JYDFru9Lgy32djk/02pj5Lh5Vx8xnufoDRjWBdNn/ffRBirh2fD+8UaIAiYRuJ0mjclpvko8i+62dHDwF2two9i6HM3tRQt49lxHRj2jSYMGu0PyR7T3SokIjkSyPY6CGkoHkA9mPYzoiMjRM7AfjR4m16f9pD5Lf90vczJ0v5/inikBEwjh0SUZGOSV9yYfEfQGihbsrD/T2VAAOSqfiD5qckb/AOxRVAGJB6Bt0iG0Vj6q6LwwB7hTa96VmW6Z3nmeaFmhvMveyftUfE+Q38v8W7qYMNEF7qbmheJgLD+zpk8N66SSAfzL8UZfGD5XKu601CpmBOyZexF3mszVWTeSUnUg72tQgoC0bRxTDwmSvyYO3gqIMlMlrKLij9LORw/7mnRI5Sp+LfNP5SopAPGTwTbpkNopwOXKDwwB5hja96RJK/QGmwvYpNEaSMuOKHIloSIjxU5ZopuaEUu4KIazjFYBpAJp1oDekFaWYoTGFBJTLWA5oJqFNqIUuNjSIw/QGjIfGl4c/trEaIEtMlNEa4MtQ/lqUk0DXDUhCaIVH0BpY8nFMdlOh9oGShjc7pKVoiEmhIwUKpKIsU7LQ5V5UAEFEpK5VQRFXbqBTdQCGkTZoBBQxUtBI2oSAj0f/8QAKhEBAAIBAgUDBAMBAQAAAAAAAQARITFBEFFhcZGBobEgQMHRMFBg4fH/2gAIAQIBAT8QtlstlstlstlstlstlsthbpOizos6MtlstlstlstlstlstlstlstlstlstlstlstlstlstlsBYlcaWOOHWdeIWX9EuNydW9ivzFRtNzcdGan1VxqV9IXK6/SC5lLErjXA5poOOh9ZYYiU8K9Rto2O8JABRgnRzZ03v1j9LWVZqcM7aTO0dcQ+hLlVwa2hwIl8GtocDRmN41txzWeAUirw0irxEIo/w2p/Dcv6RqLf0imJaRb+mmUymUymUymUymUymUymZMk6060633lPDb+J1/oXX7QieglSNaV1CvTAn0x/U4SJw+P8zGuWxwXyc41xfrBqKlGreCGlqmmas3cdbg9Jd8rOuddP6oDQsjYndnfIjnqKPMWa2m9a37wwUaXfrQX3oDsHL/U6f5u/thtKDWKWUywtn4RZYbT9wIo+PEfBaFBz0B2vPaP3rlsdjQhw7uRvHO2ia4w7xhN8pdHVi2wLK1XQiLWKyr5cxRWCmQZs6oml2jRpovPWDCvIdg3rVvaWBcwUfMy0055HR77PowWpe9/UzafPmGr41vyvv+YHKdd3u6xChsJ8PM+NoH+kNqs0wzRVtZ0DVgLSKgB4MQpGSWEYoaCOtUJbrqFHNbIBi00V2uwKddOn4UE8QYNoPYzs3ZfU2iMKGTOeXIe7vG5urc7OpH5sNHmOR/fX7J7u7fnhW+6PViNCk4LTcNex8M/LgFFpoDddCMXkrdjL5Re9PLgSDjabLbfRwetbw2NQdTL/AJ6cFqYg6LT2B7wCJY8L6TPl187e3B01BlhmouBugHgT0s58GQM5HcaK6mX0vaLSYn0cG+rr63wToIEb6Hhv1rpAa2JY8x4KRdS7lr4uvT7IGtfODcuoGOieRA37kDKrtofmNxMaVtUarDtVPTInlgJqei4Dsc+qryqF61g+yJkTZMzpJxC9w90UuecvwByADu5gasNBqfs6PzL47kAPm34lTV2/fN6zwIO3ZiYV99X8SihzBZ673T64T2mOjfDfu/8Ake9pE9xHCO44nXTAh7F7IZIcpfkXmqvYxEdzUMr9PU9zE6tBUnij5itdU/gNANghagGg6nZ5dG+kcAvvdvTAHiIlLX7J1ABu5SzrHXEA3lehGu0j+4cJy7Y+0M6A95oTXhmbIHeIYwmB1V95dBTEogBpNQaTXuka9IrqV9oEV8CrTlxK1cCoCFW24FSnXj4ivFBny4k18ECuMrwRYcX7Ist4WZYYol6yHMwxpGrVR+zLHQWMVcYcHJmmHMgAUQrhjywQ01h1j4iimiIrIKskQtjLEccERWy5f0f/xAApEAEAAQMCBQUBAQEBAQAAAAABEQAhMUFREGFxwfCBkaGx8TDRQCDh/9oACAEBAAE/EPFO1eKdq8U7V4p2rxTtXinavFO1eKdq8U7V4p2rxTtXinavFO1TwDdLt/4vvnk874rxTtXinavFO1eKdq8U7V4p2rxTtXinavFO1eKdq8U7V4p2rxTtXinavFO1eKdq8U7V4p2rxTtXinavFO1eKdq8U7V4p2rxTtXinavFO1ZAIAGCQMlEzbpSiAV4FMEJCMIcfVz3LpKUWda9BNdukEAuacPCB2zyYmdYi9eEDtnkxM6xF+IUbXB8CQwpeAhvw+N+nhLhVpMYgc6AvqwRIbpQFwiTDCNzPxTWwkObJPwv/lpCCEUoASmqUtBkkkd4rC1TKUShIXZ4NjmdSBOQElDFFjmdSBGSgkHPFOZM6NEn4XhzBUZ2FwbkjCa8Hcu7EVdW6hJsicE5kzo0SfheE+wwETS+bJEZgZYIaBORmMX0iUWXNYQABiiCMNMRfrSUQKEZJ/sOCTgLNsKSt1wAvpw/wxZ8Mo1ibTSNE3QQBgQdYWm64/u3codeJGEu5IoPUjmUYWckggapscngEBVCADKtRoGhZkhv33ystmsP0eQtTTTSbJXx/wBNS6wEZZYF3fYi9quNGFUGwKUEMgUD+eCFgDiB+iIcY0/mo2V/8xk8+m9pmvzalmo31M3mZvNInK1dCnLZkeQmV0peZoe6LCoSPk4XvnaSlVtrYEm5REO14CRNCIbMmqowGcTjexOLrbNGFlXHELDFFgJczETwtecvhNPMGR3YVBsGcBrQ/bC5hI6/K7LejCyrjiFhiiwEuZiJ42tfEXr6SjSJvNeJjQd1i0dVfI8NAa7JEvNYkWAsld5pz6mTnWACAAggDLTE36URMzLRiWAlgmCXfh6ia7dIIRZ0r1c9y6SkFzXiVbVkV7MSbEzCdazgyYJRmWSblGnDzHMOw3k3WmDgZl0f6aQ1K6HvXQ96iaIQToM/A1zSuaVzSuaVI8ZJEwA6SFF2NBYA2K5pXNKbFM6kgMlLCuaLFM6kgcgDAmK5pXNKiyKRp0Gfga5pWzGRncXLsWcBpW7GRnYXBsGcBrXNK5pUWRSNOgz8DXNKLaiUgYWxZIjEhDJBQZkJjFtIgFgxQQbgCaJIwUTFutQIEVJwR/aVzSnnaHpEhXgWJoBavFO9eKd68U714p3rxTvXinevFO9eKd68U714p3rxTvXinehrxvWpmgMuoMetfkv8r8t/lflv8qL/ADV+Or8dX46vx1fjq/HV+Or8dX46vx1fjq/HV+Or8dX46vx1fjq/HV+Or8dX46vx1fjq/HV+OpaBm4RRmfC50dSTyWRkjnf8UMSSSXEpHK/4oYgKC8m+kiaiYb69QQqqAAFUJ0qOvSDQpgQXRAWihiQoLy76SqOsCcXRvecv4o6knksjJHO/4qFH6lLmWIDTVGLQxAUF5N9JE8DnAIwCCxyvRfIWF5d9JUVP2IeGhMURwMp/74/AawEFjlevwqky0ELEQjm9qvwqmWmBBKDBmIxtISV+FV+FUEk6Qsg2WD0r8KqH1cBLCRPtwFSFr8Kr8KqKOklAICXYVM/VUix60SwCkhRC3Rb8Ijd98LkLS/pkESFurGE2QwjBEpYSx8EhCDsiPDJrxq0IVgFgF2rK+gggiEyC4Am8f9EBnZKAQEuz+skkkkkk7QwYZnycXox2XTR3lpzolMpBFkQBBjKPYMiHCUyVQ/8AUqY1snSKVBBoXBO8lwgCKYLC9C+QyAUIID/mYP6s9fJfZ/4KBQiEAoywBLoBwNPIEtCFgiiNkaisY6jWCFEkQkWirDKGZRCQkWgaDFSgyhMkBRLaWM/82D+uevkvs4OAQaAJVXAFDoliYIUh9OGBl7LqgaNYLxidU3DFyQl6SKy4KM9EU4AVRgfXqZoyAJAyJQMgBKuCnBawlHoM8FJnkQUKoxlP6cDhAdn7UdSNSThycuR9qEQRkdSlAVYDVrk7cr7cObClBU/Ydp+uOD+uevkvs4C1ZBQBqghsgvJskBhCETCNSrEHuc0kIhNxOpPSN7MvYLIsSrugT0cSf1NHCNks1PBqcLDg8KOdOoOTO6umxpTnzkGawMTExkPqJsfOAwEIwyyaDvSIqq3V1q+V1rXUsC2TmPVw6W5vu4GwcpoVCMJhKkqkudQO6b8+VXx43bOx/tKdOVwlOQGU05u8VciApK0la/NY0zsIywywG078qIwI2ipW74yYTbpz92ZcZPBld+nL2lBtkU5QE5ZYZHeN+dGQHkLg6Afbr7BBrBvYh5NGUJkeFNTrZ9eGD+uevkvs4OoU8r4x3dMiBwi06IPkQAIvD8yCUhnEZk6HqaiWREzwZ9luYKI6A1tM24HF226MehquAFaessZRXLydXLmcE/MEwuZO6Ajrs0gkVpwpfZk4IUWW0rkdIL01tRGicBCDnKIj/UcEJNgatNGuh2OHvLwMSQ22Bk92PmnORK24p+5+OCYxhWrl7QVJG15ZDJQMgBKrAFMuGUBIQgCTSwcMH9c9fJfZwFjFmGzNHOIksyWpNAMnaZyI6urg6XwTAgLq9VaBYK1ZiAh2ixpFFUIfsyBemiGIEhvwUZUhHViK6wE9acV6yOBWDqAnXSodphA2RzV08S3DlY/Kjkkyrk3S69aZZdTZd0XGrjjksPsD80CXLIDYKNWogaxzdfWkY5KgD0AODMuZVA+mKTblZWf/AIoGxoQkSkS2ZU+RfmoNwsrlW660MsjI4VuOlC6GUPgH5oGxoAgCo6g4khTZ39aUGHZBkDowAccH9c9fJfZwR5dgARrmQsFQwuBk5iRhizQ1BhE0DACQAQ3ZWHFBIOAmSa6KhKGqpfJFRdV2HpOojepafSlDb3XIO41tTkNhsDsFij09IAapcJm1nWgALJ7EM/Nc1ZmWli2F4jtR8BFJElOQBJiFZ0yDE0E89RmoWIHgLMMLCQjHJ1p2TBcHQxyvPGlOWRvKT2wNaiX3CMJ815+1qVBGQDY7B4y0Y3w6UzJgzaBw7gAasECAIWAImSWBQydS4yzZKQsZpMCrMIKUBlYjBlE4ItxILBWGC4VwGdzDBmoqknKIwwQIgBGRlB1chsC2jyZuoTBza2Mig7qx6WyQ3qfCEyZkJ1JJHZOGD+uevkvs4HYmuzyLULyVmnAmA22eWLkW5QnJU/1wykBoiInAkOOXEGG49BnHASKDpUYAN5pilol7AffgIBsNNAvR3JrMUE5Ep6uBw4hahbcwHSG9MjIdChhHgFCSl4JMbB9JPA0+RSpgA1Vaz9vGnCuig3FGHgdQG7GItEnNSZaCjCBZBlqCvUzTgKp4rRFjsF5R3KOZJkLQhoiJwROlqEJwbCDclrwwf1z18l9nAOth026CiI5BNSG9LAEpfpcWb1DRySZZKZQKFuqtCS8HgiBNnmE6zaCV81CdIgDaA6ySMcYoAMYsxEWir3XVwHqCdJawUezmAw81eUUUV8jT5b9BfekCFc00ZhUbdaThOT8N6u2OSAdlqULdkXEuqrdXdo8YZhOZNeZFSzPIym0kq9JqaLSwqERGIjShXDlGjWCgcpRpa1aLh4LF07DzVTSLyUMC5EMMgnCCUKW23ALADINV0Bq4IwwKADoQassqdh0ImZBRE1BNob03PAkGzcUD1DR4+iQquUXRupVo+4Wi4gUsvMRdZtBp6Qh+kQDlAdbWoD7h4AsAaHDB/XPXyX2cDwEKkrdGkxrzq/QJj5xaoWSmUHA5Z9qdQqCzzZ0o3uVkPq3KnClLdo9U2pOH0YD1LtFhjZbuZOvTxtN1i4G7l90pQ7hD2LUfMK1DOzz58vd6gAxT0HPzpAKbJD2bUiEwpjqcqf8AMg9wnSgS1t7vXNIZ627R6ptRE0FrPXLTCmQ+4zrQImUY6vKpFF2gPYtR5xZijoedLULZa/Sc6jZ2yk9mjiLLQ6nKnDOQ955FSgRdzJ1yUlEnMOR1Hhg/rnr5L7OE8Mizuv8ABOCspPZvf4aSGHPCebtXdwQTYiifPL2f/RwFrgHQZfgaC815s3Pjg9eJLG7H01jgrJp46PvgEsGaIvsNXZn7OAdOQKNi78UeylQnZufHBRkCGN2O9IijZOBxnEw2sfY8MH9c9fJfZwVLjAkTYalNjKsMDoh90+YLkt00Il8mlO/KilhczS+rj2oOIPJ2RFJV62VE5SDNCrlIrHfnV+5DOQtyoJu4V7Q/dOsoIsgGx8UcsaAJk2eVIhzyL7QfdAQSUq5W7RFmyKU78qGzHM9/VxSnxF2RFNIFiaT1M0KFcmgO/OpyyuJlblDhuQI+1OwxoQ02OVJCiwJps7lOtcshX2qOg3Vyt2gJMli5vyaACGWe/q0CYQAwHDBX/9k="; var css$2 = ".nyamka-from-romano-userscript-chapters-importer-modal-paste-area {\n display: none;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-paste-area.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-paste-area textarea {\n width: 100%;\n min-height: 5em;\n resize: none;\n margin-bottom: 15px;\n box-sizing: border-box;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-paste-area p {\n text-align: center !important;\n color: #fcfaf2;\n margin: 0.5em 0;\n font-size: 120%;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-paste-area svg, .nyamka-from-romano-userscript-chapters-importer-modal-paste-area p {\n display: none;\n}\n@media (min-width: 1023px) {\n .nyamka-from-romano-userscript-chapters-importer-modal-paste-area {\n text-align: center;\n padding: 2em 2em;\n margin-bottom: 1em;\n background-color: #c3a63f;\n outline: 2px dashed #fcfaf2;\n outline-offset: -10px;\n -webkit-transition: outline-offset 0.15s ease-in-out, background-color 0.15s linear;\n transition: outline-offset 0.15s ease-in-out, background-color 0.15s linear;\n text-align: center;\n }\n .nyamka-from-romano-userscript-chapters-importer-modal-paste-area svg, .nyamka-from-romano-userscript-chapters-importer-modal-paste-area p {\n display: inline-block;\n }\n .nyamka-from-romano-userscript-chapters-importer-modal-paste-area textarea {\n display: none;\n }\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-svg-paste {\n max-width: 5em;\n text-align: center;\n margin: 0 auto;\n color: #fcfaf2;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-errors {\n display: none;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-errors.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-errors p {\n color: #ca0000;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-description {\n display: none;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-description.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-debug {\n display: none;\n text-align: center;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-debug.visible {\n display: block;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal-debug button {\n text-align: center;\n margin: 0 auto;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal .bg-grey, .nyamka-from-romano-userscript-chapters-importer-modal .bg-red {\n padding: 2px 4px;\n padding-top: 1px;\n border-radius: 2px;\n white-space: nowrap;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal .bg-grey {\n background: gray;\n color: black;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal .bg-red {\n background: red;\n color: black;\n}\n.nyamka-from-romano-userscript-chapters-importer-modal img {\n max-width: 350px;\n width: 100%;\n}\n\n@media (min-width: 1023px) {\n body[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-chapters-importer-modal-paste-area {\n background-color: #4e2b18;\n outline: 2px dashed #faf5ea;\n }\n}\n\n@media (min-width: 1023px) {\n body[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-chapters-importer-modal-paste-area {\n background-color: #54a6ff;\n outline: 2px dashed #f0f2f5;\n }\n}"; n(css$2,{}); var chaptersImporterModal = (function() { var debugData, modal, onClipboardPasteRmWatcher; modal = null; onClipboardPasteRmWatcher = null; debugData = null; return function(multipleChapters) { var exportSettings, i, len, property, ref, selectElement, title; if (modal) { modal.destroy(); } debugData = { status: 'OK', rawOfficeType: 'unknown', rawOfficeHtml: '', convertedHtml: '', error: null }; title = "Импортирование главы из Google Docs"; exportSettings = []; if (multipleChapters) { title = "Импортирование глав из Google Docs"; } if (exportSettings.length) { //exportSettings.unshift("<h3>Настроийки импорта</h3>") exportSettings.push("<hr>"); } modal = new Modal({ title: title, content: `<div class='${CSS_PREFIX}-chapters-importer-modal'> <div class="${CSS_PREFIX}-chapters-importer-modal-paste-area visible"> <div class='${CSS_PREFIX}-chapters-importer-modal-svg-paste'> ${SVG_ICON_PASTE} </div> <p><b>Вставьте текст из Google Docs из буфера обмена по Ctrl+V</b></p> <div><textarea class='form-control' placeholder="Вставьте текст из Google Docs из буфера обмена в это текстовое поле"></textarea></div> </div> ${exportSettings.join('')} <div class='${CSS_PREFIX}-chapters-importer-modal-description visible'> <p><i>Импортированы будут заголовки 1 и 2 уровня, жирный, курсив и перечеркнутый текст. Также будет импортированы выравнивания (по центру, по правому краю) и горизонтальные линии. Картинки, таблицы, списки нормально импортироваться не смогут.</i></p> <p>Заголовки глав должны быть оформлены стилями "Заголовок 1" или "Заголовок 2" (оба варианта будут считаться названиями глав).</p> <p>Можно импортировать сноски с тегами <b><note></note></b> и <b><footnote></footnote></b></p> <p> Если вы хотите, чтоб какой-то текст был проигнорирован при импорте, то выделите его красным цветом <span class='bg-red'>вот так</span> или выделите серым цветом <span class='bg-grey'>вот так</span> или заключите текст в тег <b><ignore></ignore></b> </p> <p>Кнопка выделения текста в Google docs:</p> <img src="${IMG_GDOCS_PALETTE}"> </div> <div class='${CSS_PREFIX}-chapters-importer-modal-errors'> <p>Возникли ошибки при импорте документа:</p> <ul> </ul> </div> <div class="${CSS_PREFIX}-chapters-importer-modal-debug"> <hr> <button class='btn btn-default'>Скачать debug-данные</button> </div> <div class='clear'></div> </div>` }); ref = modal.element.querySelectorAll('select'); for (i = 0, len = ref.length; i < len; i++) { selectElement = ref[i]; property = selectElement.getAttribute('data-property'); if (!property) { continue; } selectElement.value = storage[property]; selectElement.addEventListener('change', function() { property = this.getAttribute('data-property'); storage[property] = this.value; storage.saveData(); }); } return new Promise(function(resolve, reject) { var displayErrorAndSaveToDebug, processOfficeHtml; displayErrorAndSaveToDebug = function(error) { var ul; debugData.status = 'FAIL'; if (!(error instanceof Array || Array.isArray(error))) { debugData.error = { text: error.text || error.toString(), stack: error.stack }; ul = modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-errors > ul`); ul.style.padding = 0; ul.appendChild(createElement(`${error.text || error.toString()}`)); if (error.stack) { ul.appendChild(createElement(`<code>${error.stack}</code>`)); } } modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-errors`).classList.add('visible'); modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-debug`).classList.add('visible'); modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-paste-area`).classList.remove('visible'); modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-description`).classList.remove('visible'); console.warn("Ошибка в chaptersImporterModal: ", error); console.log(debugData); reject(error); }; processOfficeHtml = function(officeHtml) { var chapters, converted, error, titles; debugData.rawOfficeHtml = officeHtml; console.log(officeHtml); try { converted = htmlToSimpleHtml(officeHtml); debugData.convertedHtml = converted.text; debugData.rawOfficeType = converted.type; } catch (error1) { error = error1; displayErrorAndSaveToDebug(error); return; } try { chapters = simpleHtmlToChapters(converted.text); debugData.chapters = chapters; } catch (error1) { error = error1; displayErrorAndSaveToDebug(error); return; } if (!multipleChapters && chapters.length > 1) { // такой импорт производить нельзя titles = chapters.map(function(ch) { return `'${ch.title}'`; }); displayErrorAndSaveToDebug({ text: `<b>Обнаружено ${chapters.length} заголовкa(-ов) в тексте</b>: ${titles.join(', ')}.<br><b>Такое не разрешено.</b> Вставьте в модальное окно импорта текст без заголовка h1/h2 или с ОДНИМ заголовком h1/h2` }); return; } return chapters; }; //console.log processOfficeHtml(TEST_TEXT) //console.log debugData onClipboardPasteRmWatcher = onClipboardPaste(async function(clipboardData) { var chapters, data, itemHtml, itemText, items; if (!modal || !modal.isVisible()) { onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; return; } data = null; items = Array.prototype.slice.call(clipboardData.items); itemText = items.find(function(item) { return item.type === 'text/plain'; }); itemHtml = items.find(function(item) { return item.type === 'text/html'; }); if (itemHtml) { data = (await getItemAsString(itemHtml)); } else if (itemText) { data = (await getItemAsString(itemText)); } if (onClipboardPasteRmWatcher) { onClipboardPasteRmWatcher(); onClipboardPasteRmWatcher = null; } if (!data) { displayErrorAndSaveToDebug({ text: "Текст в буфере обмена не обнаружен" }); return; } chapters = processOfficeHtml(data); if (chapters) { modal.destroy(); resolve(chapters); } }); modal.element.querySelector(`.${CSS_PREFIX}-chapters-importer-modal-debug > button`).addEventListener('click', function() { downloadDataAsFile(debugData, 'debugData.json'); }); modal.show(); }); }; })(); var SVG_ICON_GOOGLE_DRIVE = "<svg aria-hidden=\"true\" focusable=\"false\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 512 512\"><path fill=\"currentColor\" d=\"M339 314.9L175.4 32h161.2l163.6 282.9H339zm-137.5 23.6L120.9 480h310.5L512 338.5H201.5zM154.1 67.4L0 338.5 80.6 480 237 208.8 154.1 67.4z\" class=\"\"></path></svg>\n"; var css$1 = "body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-chapters-importer-button {\n border: 1px solid #CCCCCC;\n padding: 5px 6px;\n background: #F0F0EE;\n text-align: center;\n white-space: nowrap;\n cursor: pointer;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-chapters-importer-button:hover, body[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-chapters-importer-button:focus {\n background: #d8d8c4;\n}\nbody[data-nyamka-script=fanfics-me] .nyamka-from-romano-userscript-chapters-importer-button svg {\n width: 11px;\n}\n\nbody[data-nyamka-script=ficbook-net] .nyamka-from-romano-userscript-chapters-importer-button svg, body[data-nyamka-script=gikami-ru] .nyamka-from-romano-userscript-chapters-importer-button svg {\n width: 15px;\n max-width: 15px;\n margin-bottom: -2px;\n}"; n(css$1,{}); var importChapters, injectImportButton; importChapters = function(chapters, allowMultipleChapters) { var editor; if (isCurrentSite$2()) { chapters = chapters.map(function(chapter) { chapter.body = chapter.body.replaceAll("<note>", "<footnote>").replaceAll("</note>", "</footnote>"); return chapter; }); } if (!allowMultipleChapters) { editor = getChapterEditor(); if (!editor || !editor.title || !editor.body) { notification.error("Не получилось найти на сайте форму для редактирования главы"); return; } if (chapters[0].title) { editor.title.value = chapters[0].title; } editor.body.value = chapters[0].body; notification.success("Текст импортирован. Теперь вы можете сохранить главу"); } }; injectImportButton = function(allowMultipleChapters) { var btnClass, buttonImport, container; container = document.querySelector('.nyamka-from-romano-userscript-markup-tools') || document.querySelector('.operations > .add-part') || document.querySelector('.medium-editor-book-stat'); //gikami if (!container) { return setTimeout(function() { return injectImportButton(allowMultipleChapters); }, 500); } if (container.querySelector(`button.${CSS_PREFIX}-chapters-importer-button`)) { return; } if (allowMultipleChapters) { btnClass = 'btn-default btn-sm mb-5'; } else { btnClass = 'btn-for-formatting-text'; } buttonImport = createElement(`<button class='btn ${btnClass} ${CSS_PREFIX}-chapters-importer-button''> ${SVG_ICON_GOOGLE_DRIVE} Импортировать </button>`); container.appendChild(buttonImport); return buttonImport.addEventListener('click', async function(event) { var chapters, error; event.preventDefault(); try { chapters = (await chaptersImporterModal()); } catch (error1) { error = error1; console.log(error); return; } importChapters(chapters, allowMultipleChapters); }); }; //chaptersImporterModal() //console.log ficbookNet.getChaptersListForFanfic() var init$1 = function() { onLocationChange(function() { if (isCurrentSite$2()) { if (/\/home\/myfics\/\d+.\/parts\/\d+.?$/.test(location.pathname) || /\/home\/myfics\/\d+.\/addpart/.test(location.pathname)) { injectImportButton(); } return; } if (isCurrentSite$3()) { if (location.pathname === '/fic_write' && (location.search.indexOf('soaction=chapter_edit') > -1 || location.search.indexOf('soaction=chapter_new') > -1)) { injectImportButton(); } return; } if (isCurrentSite()) { if (/\/book\/\d+.\/add$/.test(location.pathname) || /\/book\/\d+.\/redact\/\d+.?$/.test(location.pathname)) { injectImportButton(); } return; } }); }; var css = "body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] {\n background: #666666;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar3, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .AuthorIntroduction .title, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar {\n background: #555555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar3 {\n border-bottom: none;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-pers, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-menu li a {\n color: #bbb;\n text-shadow: 1px 1px 1px #000000;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #back, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTextContainer h2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .tr .title {\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #take_bookmark {\n color: #3caa3c;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #back:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #take_bookmark:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .read_properties_button:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .read_properties_button.hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HeaderSlideMenu {\n background-color: #555;\n border-color: #333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HeaderSlideMenu .light {\n color: #bbbbbb;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HeaderSlideMenu li {\n border-color: #555555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HeaderSlideMenu li:hover {\n background-color: #777777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTextContainer, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTextContainerIn, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTable, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .summary_text_fic3, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .horizontal-bar, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #CommentForm .title {\n background: #333;\n border-color: #333;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .horizontal-bar, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTextContainer, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ReadTable {\n border-color: #777777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] a {\n color: #1e1e93;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] a:visited {\n color: #1e1e93;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] h1, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsCount {\n color: #bbbbbb;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #CommentForm textarea, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #CommentForm .comment_area {\n background: #777;\n border-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .comments .title, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .SerieContainerTitle, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .CommentItemTop {\n background: #777;\n border-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .dotted_button:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .chContents_1:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .chContents_3:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .chNav_large:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .chNav:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .blockquote {\n background-color: #333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-menu li:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-menu li.hover {\n background-color: #333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-pers:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .topbar-pers.hover {\n background-color: #333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_Management, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksList, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsCount {\n border-color: #555;\n background-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_Subscription, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksListHead {\n color: #bbb;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_Subscription1:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_Subscription2:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuSecondLine {\n border-color: #777;\n background-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuSecondLine .activ2 a {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuSecondLine .activ2 a:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuSecondLine a:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksListHead, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .chNav_large {\n border-color: #777;\n background-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksList1 .marks_list li:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksList1 .marks_list_add li:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .totop:hover {\n background-color: #777;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_List, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MarksList1 .marks_list {\n filter: brightness(70%);\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .t-l, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .t-rl, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .t-lb, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .t-rlb, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsNext {\n border-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FM_note_container {\n background-color: #555;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content {\n background: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-right {\n background: #4d4d4d;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-right .main_menu li {\n border-color: #404040;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-right .main_menu li a {\n color: #8f8fff;\n text-shadow: 0 0 1px black;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-right .main_menu li a:visited {\n color: #8f8fff;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-right .main_menu li.checked {\n border-color: #262626;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .main_menu2.insert_main_menu a {\n color: #8f8fff;\n text-shadow: 0 0 1px black;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .main_menu2.insert_main_menu a:visited {\n color: #8f8fff;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-center, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuFirstLine {\n background: #666666;\n color: #eeeeee;\n border-color: #4d4d4d;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-center li > a:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuFirstLine li > a:hover {\n background: #595959;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #site-content-center li.activ2 > a, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .HorMenuFirstLine li.activ2 > a {\n background: #4d4d4d;\n border-color: #404040;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft h2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileRight h2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FanartRight h2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Sidebar_NativeAd, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageAloneHead {\n background: #4d4d4d;\n border-color: #333333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft h2 a, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileRight h2 a, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FanartRight h2 a, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Sidebar_NativeAd a, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageAloneHead a {\n color: #8f8fff;\n text-shadow: 0 0 1px black;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft h2 a:visited, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileRight h2 a:visited, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FanartRight h2 a:visited, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Sidebar_NativeAd a:visited, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageAloneHead a:visited {\n color: #8f8fff;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeftFic, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft_PersonalCard {\n border-color: #333333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeftFic:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft_PersonalCard:hover {\n background: transparent;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileLeft_h2_descr, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FanartRight_h2_descr, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Sidebar_NativeAd_title {\n background: gray;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Profile_Head {\n position: relative;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Profile_Head h1 > a {\n color: white;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Profile_Head::before {\n content: \"\";\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n background: #00000082;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsShow, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .dropdown-click .body, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageManagement, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .profile_info_more,\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FanartTable2 .TdImg {\n background: #737373;\n color: #eeeeee !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .dropdown-click .header {\n background: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsHide {\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentsHide:hover {\n background: #636363;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageNewManagementPrivate img {\n filter: contrast(4.5);\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageNewManagementPrivate .small > div {\n background: #737373 !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageNewManagementPrivate li:hover {\n background: #636363;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .gen {\n color: #6e006e;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .red {\n color: #cb0000;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Comments, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .green, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .date {\n color: #4dd34d !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .blue {\n color: #00006e;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .light, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .small_light_link, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .small_light, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DateUpdate, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .FicDopInfo_Link,\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .ProfileInfo_main tr td {\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .header-search, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] div.MessageNew, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] textarea.MessageNew, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] input.MessageCommentNew, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] textarea.MessageCommentNew,\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .input_3, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] textarea.DialogNewMsgTextarea, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] textarea.CommentEditText, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .fdmain-search {\n background-color: #e6e6e6;\n color: #1a1a1a;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .header-search-answ {\n background: #737373;\n border-color: #595959;\n box-shadow: 0 0 6px #202020;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .header-search-answ li:hover {\n background: #8c8c8c;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] img.avatar, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] img.open-picture, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MyCommentsItemText img, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogItem_Avatar img, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogNewMsgHeader img,\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Message .MessageLeft a > img, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageCommentLeft a > img {\n filter: brightness(0.7);\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteFormContainer {\n border: 1px solid #404040;\n background: #595959;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteFormContainer h2 {\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteForm_Answer {\n background: #EFEFDB;\n color: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteForm_Answer .light {\n color: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteFormNoVoted .PollVoteForm_Answer:hover {\n background: #D8D8C4;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollVoteForm_AnswerPersentBg {\n background: #D8D8C4;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PollMultiple .PollVoteForm_Answer.checked {\n background: #D8D8C4;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MessageAloneTextFormat_Container .checked {\n color: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .spoiler {\n background: #595959;\n color: #595959;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .spoiler.selected {\n background: #595959;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .spoiler::before {\n background: #404040;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .fic_info_title.nav {\n background: #757575;\n color: #eeeeee !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .fic_info_content {\n background: #6e6e6e;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .RecommentCloud {\n background: #545454;\n border-color: #3b3b3b;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .RecommentCloud::before {\n border-color: transparent transparent #3b3b3b #3b3b3b;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .RecommentCloud::after {\n border-color: transparent transparent #545454 #545454;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #FicWriteMenu td.activ #publ_count, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #FicWriteMenu td.activ #moderation_count, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #FicWriteMenu td.activ #moderation_count, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #FicWriteMenu td.activ #deleted_count, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #FicWriteMenu td.activ #series_count {\n color: #eeeeee !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .TextEditorContainer .TextFormat, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .TextEditorContainer .TextFormat2 {\n color: #2e2e2e;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .TextFormat3 {\n color: #2e2e2e;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogItem:hover, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogItem.notread, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogMsg.NotRead, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogMsg.DialogMsgSelected {\n background: #545454;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogNewMsgForm {\n background: #666666;\n border-color: #545454;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogItem_LastMessage.notread, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogItem_LastMessage.notread .small.light, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogNewMsgAtchButton, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogNewMsgAtchButton .small.light {\n color: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .DialogNewMsgButton img {\n filter: contrast(4.5);\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] #data-container table.FullWidth {\n background: #666666 !important;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .box-modal {\n background: #666666;\n color: #eeeeee;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .box-modal .box-modal_close.arcticmodal-close {\n color: #262626;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Footer {\n background: #333333;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Footer a {\n color: #8f8fff;\n text-shadow: 0 0 1px black;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .Footer a:visited {\n color: #8f8fff;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .PropertiesMenu .sp .activ {\n background: #595959;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MyCommentsItemShow {\n color: #eeeeee !important;\n background: #595959;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .MyCommentsItemShow.MyCommentsItemShowEmpty {\n background: transparent;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .InfoContainer, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .InfoContainer h2, body.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me] .InfoContainer .light {\n color: #666666;\n}\nbody.nyamka-from-romano-userscript-darkmode[data-nyamka-script=fanfics-me].nyamka-from-romano-userscript-app-view-notifications .ContentTable.Messages:not(.visible)::after {\n background: #666666 !important;\n}\n\n.nyamka-from-romano-userscript-darkmode-settings label {\n display: inline-block;\n padding: 10px;\n cursor: pointer;\n}"; n(css,{}); var getMenuContainer, getSettings; getMenuContainer = async function() { var j, len, menu, ref; ref = [200, 500, 700, 1000, 1500]; for (j = 0, len = ref.length; j < len; j++) { menu = document.querySelector('.main_menu2.insert_main_menu'); if (!menu) { await timeout(); } else { break; } } return menu; }; getSettings = function() { var checked, settings; checked = ''; if (storage.isDarkModeEnabled) { checked = 'checked'; document.body.classList.add(`${CSS_PREFIX}-darkmode`); } settings = createElement(`<li data-nyamka-script='true' class='${CSS_PREFIX}-darkmode-settings'> <label> <input type='checkbox' ${checked}> Ночной режим включен </label> </li>`); settings.querySelector('input').addEventListener('click', function() { storage.isDarkModeEnabled = !!this.checked; storage.saveData(); if (!storage.isDarkModeEnabled) { document.body.classList.remove(`${CSS_PREFIX}-darkmode`); } else { document.body.classList.add(`${CSS_PREFIX}-darkmode`); } }); return settings; }; var init = function() { var settings; if (!isCurrentSite$3()) { return; } storage.registerVariable('isDarkModeEnabled', false); settings = getSettings(); onLocationChange(async function() { var menu; menu = (await getMenuContainer()); if (!menu || menu.parentNode.querySelector("li[data-nyamka-script]")) { return; } menu.parentNode.insertBefore(settings, menu.nextSibling); }); }; /* // ==UserScript== // @name Нямка от Рóмана // @namespace http://tampermonkey.net/ // @version 0.41 // @description пакет улучшений фикрайтерских сайтов // @license GPL-3.0-or-later // @author Roman O // @match https://fanfics.me/* // @match https://ficbook.net/* // @grant unsafeWindow // @run-at document-body // ==/UserScript== */ document.body.setAttribute('data-nyamka-script', location.host.replaceAll('.', '-')); init(); init$4(); init$2(); init$3(); //siteNotifications.init() init$1();