From 4b1696db17d3f585cb0c8ac6f8ee663f9695d2b0 Mon Sep 17 00:00:00 2001 From: Qubot <1445788683@qq.com> Date: Mon, 31 Mar 2025 14:53:42 +0000 Subject: [PATCH] first commit --- LICENSE | 674 +++++++++ README.md | 57 + i18n/default.properties | 55 + i18n/es.properties | 55 + i18n/zh_CN.properties | 55 + i18n/zh_TW.properties | 55 + settings.yaml | 502 +++++++ templates/archives.html | 99 ++ templates/assets/dist/main.iife.js | 5 + templates/assets/dist/style.css | 1 + templates/assets/images/default-avatar.svg | 1 + .../images/default-background-2023-10-12.jpeg | Bin 0 -> 228370 bytes .../assets/images/default-background.png | Bin 0 -> 59566 bytes templates/assets/images/gongan_beian.png | Bin 0 -> 4060 bytes templates/assets/js/qrious.min.js | 6 + templates/assets/qrcode-share.html | 37 + templates/assets/styles/github-markdown.css | 1219 +++++++++++++++++ templates/author.html | 34 + templates/categories.html | 41 + templates/category.html | 31 + templates/error/error.html | 27 + templates/index.html | 31 + templates/links.html | 43 + templates/modules/category-filter.html | 59 + templates/modules/category-tree.html | 19 + templates/modules/featured-post-card.html | 72 + templates/modules/footer-social.html | 22 + templates/modules/footer.html | 193 +++ templates/modules/header.html | 242 ++++ templates/modules/hero.html | 60 + templates/modules/image-view-modal.html | 45 + templates/modules/layout.html | 69 + templates/modules/pagination.html | 44 + templates/modules/post-card.html | 89 ++ templates/modules/share-modal.html | 75 + templates/modules/sidebar.html | 10 + templates/modules/tag-filter.html | 18 + templates/modules/widgets/categories.html | 13 + .../modules/widgets/latest-comments.html | 76 + templates/modules/widgets/popular-posts.html | 33 + templates/modules/widgets/profile.html | 82 ++ templates/modules/widgets/tags.html | 28 + templates/moments.html | 167 +++ templates/page.html | 117 ++ templates/photos.html | 51 + templates/post.html | 203 +++ templates/tag.html | 33 + templates/tags.html | 43 + theme.yaml | 25 + 49 files changed, 4916 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 i18n/default.properties create mode 100644 i18n/es.properties create mode 100644 i18n/zh_CN.properties create mode 100644 i18n/zh_TW.properties create mode 100644 settings.yaml create mode 100644 templates/archives.html create mode 100644 templates/assets/dist/main.iife.js create mode 100644 templates/assets/dist/style.css create mode 100644 templates/assets/images/default-avatar.svg create mode 100644 templates/assets/images/default-background-2023-10-12.jpeg create mode 100644 templates/assets/images/default-background.png create mode 100644 templates/assets/images/gongan_beian.png create mode 100644 templates/assets/js/qrious.min.js create mode 100644 templates/assets/qrcode-share.html create mode 100644 templates/assets/styles/github-markdown.css create mode 100644 templates/author.html create mode 100644 templates/categories.html create mode 100644 templates/category.html create mode 100644 templates/error/error.html create mode 100644 templates/index.html create mode 100644 templates/links.html create mode 100644 templates/modules/category-filter.html create mode 100644 templates/modules/category-tree.html create mode 100644 templates/modules/featured-post-card.html create mode 100644 templates/modules/footer-social.html create mode 100644 templates/modules/footer.html create mode 100644 templates/modules/header.html create mode 100644 templates/modules/hero.html create mode 100644 templates/modules/image-view-modal.html create mode 100644 templates/modules/layout.html create mode 100644 templates/modules/pagination.html create mode 100644 templates/modules/post-card.html create mode 100644 templates/modules/share-modal.html create mode 100644 templates/modules/sidebar.html create mode 100644 templates/modules/tag-filter.html create mode 100644 templates/modules/widgets/categories.html create mode 100644 templates/modules/widgets/latest-comments.html create mode 100644 templates/modules/widgets/popular-posts.html create mode 100644 templates/modules/widgets/profile.html create mode 100644 templates/modules/widgets/tags.html create mode 100644 templates/moments.html create mode 100644 templates/page.html create mode 100644 templates/photos.html create mode 100644 templates/post.html create mode 100644 templates/tag.html create mode 100644 templates/tags.html create mode 100644 theme.yaml diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee76888 --- /dev/null +++ b/README.md @@ -0,0 +1,57 @@ +# Earth + +Halo 2.0 的默认主题。 + +![Earth](./screenshot.jpg) + +## 使用方式 + +1. 手动从以下地址下载主题包并在 Console 的主题管理界面安装,安装方式可参考: + + - https://www.halo.run/store/apps/app-KgWqR + - https://github.com/halo-dev/theme-earth/releases + +3. 如果安装了[应用市场](https://www.halo.run/store/apps/app-VYJbF)插件,可以直接在应用市场中搜索`Earth`并安装。 + +## 插件支持 + +Earth 主题支持以下 Halo 插件: + +- 友情链接(/links): +- 图库(/photos): +- 瞬间(/moments): + +为了获得更好的体验,你还可以安装以下插件(如果需要): + +- highlight.js 代码高亮: +- lightgallery.js 灯箱: + +## 开发 + +```bash +git clone git@github.com:halo-dev/theme-earth.git ~/halo2-dev/themes/theme-earth +``` + +```bash +cd ~/halo2-dev/themes/theme-earth +``` + +```bash +pnpm install +``` + +```bash +pnpm dev +``` + +主题开发文档可查阅: + +## 构建 + +> 如果你使用的是 Windows 操作系统,请安装 `make` 命令并在 Git Bash 或 WSL 中执行。 + +```bash +make build +``` + +然后将 `dist` 目录压缩成 `ZIP` 格式压缩包即可在 Halo 后台上传安装。 diff --git a/i18n/default.properties b/i18n/default.properties new file mode 100644 index 0000000..64848dc --- /dev/null +++ b/i18n/default.properties @@ -0,0 +1,55 @@ +common.previousPage=Previous +common.nextPage=Next +common.more=More +common.all=All +common.noPosts=No Posts +common.comment=Comment +common.edit=Edit +common.publishedOn=Published on {0} +common.visitCount={0} Visits + +widget.categories.title=Categories +widget.popularPosts.title=Popular Posts +widget.tags.title=Tags +widget.latestComments.title=Latest Comments +widget.profile.postCount.label=Posts +widget.profile.categoryCount.label=Categories +widget.profile.commentCount.label=Comments +widget.profile.visitCount.label=Visits + +page.archives.title=Archives +page.archives.date={0} / {1} +page.links.title=Links +page.moments.title=Moments +page.photos.title=Photos +page.tags.title=Tags +page.tags.morePosts=More Posts +page.tag.title=Tag: {0} +page.categories.title=Categories +page.category.title=Category: {0} +page.author.title=Author: {0} +page.error.backToHome=Back to Home +page.post.toc=Table of Contents + +fragment.header.search=Search +fragment.header.menu=Menu +fragment.header.console=Console +fragment.header.logout=Logout +fragment.header.login=Login +fragment.layout.toTop=Back to Top +fragment.tagFilter.allTags=All Tags +fragment.shareModal.title=Share +fragment.shareModal.copy=Copy +fragment.shareModal.copied=Copied +fragment.postCard.pinned=Pinned + +jsModule.colorSchemeSwitcher.dark=Dark +jsModule.colorSchemeSwitcher.light=Light +jsModule.colorSchemeSwitcher.auto=Auto +jsModule.share.qzone=QQ Zone +jsModule.share.weibo=Weibo +jsModule.share.douban=Douban +jsModule.share.wechat=WeChat +jsModule.share.native=System +jsModule.share.windowTitle=Share +jsModule.upvote.networkError=Network request failed, please try again later diff --git a/i18n/es.properties b/i18n/es.properties new file mode 100644 index 0000000..a1a243f --- /dev/null +++ b/i18n/es.properties @@ -0,0 +1,55 @@ +common.previousPage=Página Anterior +common.nextPage=Página Siguiente +common.more=Más +common.all=Todo +common.noPosts=No hay Publicaciones +common.comment=Comentario +common.edit=Editar +common.publishedOn=Publicado el {0} +common.visitCount={0} Lecturas + +widget.categories.title=Categorías +widget.popularPosts.title=Publicaciones Populares +widget.tags.title=Etiquetas +widget.latestComments.title=Últimos Comentarios +widget.profile.postCount.label=Número de Publicaciones +widget.profile.categoryCount.label=Número de Categorías +widget.profile.commentCount.label=Número de Comentarios +widget.profile.visitCount.label=Visitas + +page.archives.title=Archivos +page.archives.date=Año {0} Mes {1} +page.links.title=Enlaces +page.moments.title=Momentos +page.photos.title=Galería +page.tags.title=Etiquetas +page.tags.morePosts=Más Publicaciones +page.tag.title=Etiqueta: {0} +page.categories.title=Categorías +page.category.title=Categoría: {0} +page.author.title=Autor: {0} +page.error.backToHome=Volver al Inicio +page.post.toc=Tabla de Contenidos + +fragment.header.search=Buscar +fragment.header.menu=Menú +fragment.header.console=Consola +fragment.header.logout=Cerrar Sesión +fragment.header.login=Iniciar Sesión +fragment.layout.toTop=Volver Arriba +fragment.tagFilter.allTags=Todas las Etiquetas +fragment.shareModal.title=Compartir +fragment.shareModal.copy=Copiar +fragment.shareModal.copied=Copiado +fragment.postCard.pinned=Fijado + +jsModule.colorSchemeSwitcher.dark=Oscuro +jsModule.colorSchemeSwitcher.light=Claro +jsModule.colorSchemeSwitcher.auto=Seguir Sistema +jsModule.share.qzone=QQ Zona +jsModule.share.weibo=Weibo +jsModule.share.douban=Douban +jsModule.share.wechat=WeChat +jsModule.share.native=Compartir del Sistema +jsModule.share.windowTitle=Compartir +jsModule.upvote.networkError=Error de red, por favor intente nuevamente más tarde diff --git a/i18n/zh_CN.properties b/i18n/zh_CN.properties new file mode 100644 index 0000000..77be93b --- /dev/null +++ b/i18n/zh_CN.properties @@ -0,0 +1,55 @@ +common.previousPage=上一页 +common.nextPage=下一页 +common.more=更多 +common.all=全部 +common.noPosts=没有文章 +common.comment=评论 +common.edit=编辑 +common.publishedOn=发布于 {0} +common.visitCount={0} 阅读 + +widget.categories.title=分类目录 +widget.popularPosts.title=热门文章 +widget.tags.title=标签 +widget.latestComments.title=最新评论 +widget.profile.postCount.label=文章数 +widget.profile.categoryCount.label=分类数 +widget.profile.commentCount.label=评论数 +widget.profile.visitCount.label=访问量 + +page.archives.title=归档 +page.archives.date={0} 年 {1} 月 +page.links.title=链接 +page.moments.title=瞬间 +page.photos.title=图库 +page.tags.title=标签 +page.tags.morePosts=更多文章 +page.tag.title=标签:{0} +page.categories.title=分类 +page.category.title=分类:{0} +page.author.title=作者:{0} +page.error.backToHome=返回首页 +page.post.toc=目录 + +fragment.header.search=搜索 +fragment.header.menu=菜单 +fragment.header.console=控制台 +fragment.header.logout=退出登录 +fragment.header.login=登录 +fragment.layout.toTop=回到顶部 +fragment.tagFilter.allTags=所有标签 +fragment.shareModal.title=分享 +fragment.shareModal.copy=复制 +fragment.shareModal.copied=已复制 +fragment.postCard.pinned=置顶 + +jsModule.colorSchemeSwitcher.dark=暗色 +jsModule.colorSchemeSwitcher.light=亮色 +jsModule.colorSchemeSwitcher.auto=跟随系统 +jsModule.share.qzone=QQ 空间 +jsModule.share.weibo=微博 +jsModule.share.douban=豆瓣 +jsModule.share.wechat=微信 +jsModule.share.native=系统分享 +jsModule.share.windowTitle=分享 +jsModule.upvote.networkError=网络请求失败,请稍后再试 \ No newline at end of file diff --git a/i18n/zh_TW.properties b/i18n/zh_TW.properties new file mode 100644 index 0000000..fd9ae49 --- /dev/null +++ b/i18n/zh_TW.properties @@ -0,0 +1,55 @@ +common.previousPage=上一頁 +common.nextPage=下一頁 +common.more=更多 +common.all=全部 +common.noPosts=沒有文章 +common.comment=評論 +common.edit=編輯 +common.publishedOn=發布於 {0} +common.visitCount={0} 閱讀 + +widget.categories.title=分類目錄 +widget.popularPosts.title=熱門文章 +widget.tags.title=標籤 +widget.latestComments.title=最新評論 +widget.profile.postCount.label=文章數 +widget.profile.categoryCount.label=分類數 +widget.profile.commentCount.label=評論數 +widget.profile.visitCount.label=訪問量 + +page.archives.title=歸檔 +page.archives.date={0} 年 {1} 月 +page.links.title=連結 +page.moments.title=瞬間 +page.photos.title=圖庫 +page.tags.title=標籤 +page.tags.morePosts=更多文章 +page.tag.title=標籤:{0} +page.categories.title=分類 +page.category.title=分類:{0} +page.author.title=作者:{0} +page.error.backToHome=返回首頁 +page.post.toc=目錄 + +fragment.header.search=搜索 +fragment.header.menu=菜單 +fragment.header.console=控制台 +fragment.header.logout=退出登入 +fragment.header.login=登入 +fragment.layout.toTop=回到頂部 +fragment.tagFilter.allTags=所有標籤 +fragment.shareModal.title=分享 +fragment.shareModal.copy=複製 +fragment.shareModal.copied=已複製 +fragment.postCard.pinned=置頂 + +jsModule.colorSchemeSwitcher.dark=暗色 +jsModule.colorSchemeSwitcher.light=亮色 +jsModule.colorSchemeSwitcher.auto=跟隨系統 +jsModule.share.qzone=QQ 空間 +jsModule.share.weibo=微博 +jsModule.share.douban=豆瓣 +jsModule.share.wechat=微信 +jsModule.share.native=系統分享 +jsModule.share.windowTitle=分享 +jsModule.upvote.networkError=網路請求失敗,請稍後再試 diff --git a/settings.yaml b/settings.yaml new file mode 100644 index 0000000..1ccc9f9 --- /dev/null +++ b/settings.yaml @@ -0,0 +1,502 @@ +apiVersion: v1alpha1 +kind: Setting +metadata: + name: theme-earth-setting +spec: + forms: + - group: layout + label: 布局 + formSchema: + - $formkit: select + name: post_list_layout + label: 文章列表布局 + value: grid_3 + options: + - label: 网格(一行三列) + value: grid_3 + - label: 网格(一行两列) + value: grid_2 + - label: 单条 + value: single + help: "选择单条时,文章卡片的图片将位于左侧" + - $formkit: select + name: header_widget + id: header_widget + label: 首页顶部模块 + value: site_title + options: + - label: 无 + value: none + - label: 最新一篇文章 + value: latest_post + - label: 文章网格(最新五篇文章) + value: latest_post_grid + - label: 站点标题 + value: site_title + - $formkit: select + if: "$get(header_widget).value !== none" + name: header_background_type + id: header_background_type + key: header_background_type + label: 首页顶部背景 + value: image + options: + - label: 手动设置 + value: manual + - label: 图片 + value: image + - $formkit: text + if: "$get(header_widget).value !== none && $get(header_background_type).value === manual" + name: header_background + id: header_background + key: header_background + label: 首页顶部背景 + - $formkit: attachment + if: "$get(header_widget).value !== none && $get(header_background_type).value === image" + name: header_background_image + id: header_background_image + key: header_background_image + label: 首页顶部背景图片 + value: /themes/theme-earth/assets/images/default-background-2023-10-12.jpeg + - $formkit: color + if: "$get(header_widget).value === site_title" + name: title_color + id: title_color + key: title_color + label: 标题文字颜色 + value: "#ffffff" + - $formkit: checkbox + name: content_header + label: 显示文章页面顶部背景 + value: true + + - group: global + label: 全局 + formSchema: + - $formkit: select + name: logo_type + id: logo_type + label: 菜单栏 Logo 类型 + value: image + options: + - label: 文字 + value: text + - label: 图片 + value: image + - $formkit: checkbox + name: show_scroll_button + label: 显示滚动到顶部按钮 + value: true + + - group: style + label: 样式 + formSchema: + - $formkit: select + name: color_scheme + label: 默认配色 + value: system + options: + - label: 跟随系统 + value: system + - label: 深色 + value: dark + - label: 浅色 + value: light + + - $formkit: checkbox + name: enable_change_color_scheme + label: 允许访客切换配色 + value: true + + - group: post + label: 文章 + formSchema: + - $formkit: select + name: content_style + label: 内容样式 + value: "tailwind" + options: + - label: GitHub 风格 + value: github + - label: Tailwind CSS Typography + value: tailwind + - $formkit: select + name: title_position + label: 标题位置 + value: "content" + options: + - value: "content" + label: "正文中" + - value: "cover" + label: "封面中" + - $formkit: text + name: cover_height + label: 封面图高度 + value: "24rem" + - $formkit: checkbox + name: show_upvote_button + label: 显示点赞按钮 + value: true + - $formkit: checkbox + name: show_share_button + id: show_share_button + label: 显示分享按钮 + value: true + - $formkit: select + if: $get(show_share_button).value + name: share_item_ids + key: share_item_ids + id: share_item_ids + multiple: true + sortable: true + label: 分享平台 + value: + - wechat + - x + - telegram + - facebook + - qq + - qzone + - weibo + - douban + - native + options: + - label: 微信 + value: wechat + - label: X + value: x + - label: Telegram + value: telegram + - label: Facebook + value: facebook + - label: QQ + value: qq + - label: QQ 空间 + value: qzone + - label: 微博 + value: weibo + - label: 豆瓣 + value: douban + - label: 系统分享 + value: native + - $formkit: checkbox + name: show_deprecated_items + key: show_deprecated_items + id: show_deprecated_items + label: 显示已过时选项 + value: false + help: 这些选项将在未来的版本移除,请尽快使用替代方案 + - $formkit: repeater + if: $get(show_deprecated_items).value + name: share_items + key: share_items + id: share_items + label: 分享按钮 + help: 此选项已过时,请使用上方新提供的分享平台设置项 + value: + - id: wechat + - id: x + - id: telegram + - id: facebook + - id: qq + - id: qzone + - id: weibo + - id: douban + - id: native + children: + - $formkit: select + name: id + label: 分享平台 + options: + - label: 微信 + value: wechat + - label: X + value: x + - label: Telegram + value: telegram + - label: Facebook + value: facebook + - label: QQ + value: qq + - label: QQ 空间 + value: qzone + - label: 微博 + value: weibo + - label: 豆瓣 + value: douban + - label: 系统分享 + value: native + - group: sidebar + label: 侧边栏 + formSchema: + - $formkit: repeater + name: widgets + label: 小部件 + value: + - value: popular-posts + - value: categories + - value: tags + children: + - $formkit: select + name: value + label: 部件 + options: + - label: 站点资料 + value: profile + - label: 热门文章 + value: popular-posts + - label: 文章分类 + value: categories + - label: 文章标签 + value: tags + + - $formkit: group + name: profile + value: + logo: + children: + - $formkit: attachment + name: logo + label: 站点资料 Logo + + - $formkit: repeater + name: social_media + label: 社交媒体 + value: [] + children: + - $formkit: select + name: icon + label: 图标 + options: + - label: 电子邮箱 + value: i-tabler-mail + - label: 微信 + value: i-simple-icons-wechat + - label: 腾讯 QQ + value: i-simple-icons-tencentqq + - label: 新浪微博 + value: i-simple-icons-sinaweibo + - label: 知乎 + value: i-simple-icons-zhihu + - label: 豆瓣 + value: i-simple-icons-douban + - label: 哔哩哔哩 + value: i-simple-icons-bilibili + - label: 抖音 / TikTok + value: i-simple-icons-tiktok + - label: Telegram + value: i-simple-icons-telegram + - label: Facebook + value: i-simple-icons-facebook + - label: Instagram + value: i-simple-icons-instagram + - label: LinkedIn + value: i-simple-icons-linkedin + - label: Twitter + value: i-simple-icons-twitter + - label: Slack + value: i-simple-icons-slack + - label: Discord + value: i-simple-icons-discord + - label: YouTube + value: i-simple-icons-youtube + - label: Steam + value: i-simple-icons-steam + - label: GitHub + value: i-simple-icons-github + - label: GitLab + value: i-simple-icons-gitlab + - label: RSS + value: i-simple-icons-rss + - $formkit: text + name: name + label: 名称 + - $formkit: text + name: url + label: 链接 + validation: "required" + - $formkit: select + name: url_type + label: 链接类型 + value: normal + help: "如果选择了图片类型,那么在访客点击之后会使用弹框的形式加载" + options: + - label: 跳转链接 + value: normal + - label: 图片 + value: image + + - group: footer + label: 页脚 + formSchema: + - $formkit: select + name: style + id: style + key: style + label: 页脚风格 + value: style_1 + options: + - label: 风格一 + value: style_1 + - label: 风格二 + value: style_2 + + - $formkit: attachment + name: logo + label: Logo + help: 如果不设置,将使用站点设置的 Logo + + - $formkit: text + name: title + label: 标题 + help: 如果不设置,将使用站点设置的标题 + + - $formkit: textarea + rows: 3 + name: slogan + id: slogan + key: slogan + if: "$get(style).value === style_2" + label: 标语 + + - $formkit: select + if: "$get(style).value === style_1" + name: right_menu + id: right_menu + key: right_menu + label: 右侧菜单 + action: "/api/v1alpha1/menus" + autoSelect: false + clearable: true + requestOption: + labelField: "spec.displayName" + valueField: "metadata.name" + + - $formkit: select + if: "$get(style).value === style_2" + name: menu_names + id: menu_names + key: menu_names + label: 菜单组 + value: [] + multiple: true + sortable: true + action: "/api/v1alpha1/menus" + requestOption: + labelField: "spec.displayName" + valueField: "metadata.name" + + - $formkit: repeater + name: social_media + label: 社交媒体 + value: [] + children: + - $formkit: select + name: icon + label: 图标 + options: + - label: 电子邮箱 + value: i-tabler-mail + - label: 微信 + value: i-simple-icons-wechat + - label: 腾讯 QQ + value: i-simple-icons-tencentqq + - label: 新浪微博 + value: i-simple-icons-sinaweibo + - label: 知乎 + value: i-simple-icons-zhihu + - label: 豆瓣 + value: i-simple-icons-douban + - label: 哔哩哔哩 + value: i-simple-icons-bilibili + - label: 抖音 / TikTok + value: i-simple-icons-tiktok + - label: Telegram + value: i-simple-icons-telegram + - label: Facebook + value: i-simple-icons-facebook + - label: Instagram + value: i-simple-icons-instagram + - label: LinkedIn + value: i-simple-icons-linkedin + - label: Twitter + value: i-simple-icons-twitter + - label: Slack + value: i-simple-icons-slack + - label: Discord + value: i-simple-icons-discord + - label: YouTube + value: i-simple-icons-youtube + - label: Steam + value: i-simple-icons-steam + - label: GitHub + value: i-simple-icons-github + - label: GitLab + value: i-simple-icons-gitlab + - label: RSS + value: i-simple-icons-rss + - $formkit: text + name: name + label: 名称 + - $formkit: text + name: url + label: 链接 + validation: "required" + - $formkit: select + name: url_type + label: 链接类型 + value: normal + help: "如果选择了图片类型,那么在访客点击之后会使用弹框的形式加载" + options: + - label: 跳转链接 + value: normal + - label: 图片 + value: image + + - $formkit: checkbox + name: show_deprecated_items + key: show_deprecated_items + id: show_deprecated_items + label: 显示已过时选项 + value: false + help: 这些选项将在未来的版本移除,请尽快使用替代方案 + + - $formkit: menuRadio + if: "$get(show_deprecated_items).value" + name: menu + id: menu + key: menu + label: 右侧菜单 + help: 此选项已过时,请使用上方新提供的右侧菜单设置项 + + - $formkit: repeater + if: "$get(show_deprecated_items).value" + name: menus + id: menus + key: menus + label: 菜单组 + value: [] + help: 此选项已过时,请使用上方新提供的菜单组设置项 + children: + - $formkit: menuRadio + name: name + label: 菜单 + validation: "required" + - group: beian + label: 备案设置 + formSchema: + - $formkit: text + name: icp_text + label: ICP备案号 + - $formkit: text + name: icp_link + label: ICP备案跳转链接 + value: https://beian.miit.gov.cn/ + + - $formkit: text + name: gongan_text + label: 公安联网备案号 + - $formkit: text + name: gongan_link + label: 公安联网备案跳转链接 + value: https://beian.mps.gov.cn/#/query/webSearch diff --git a/templates/archives.html b/templates/archives.html new file mode 100644 index 0000000..03677b2 --- /dev/null +++ b/templates/archives.html @@ -0,0 +1,99 @@ + + + +
+

+
+ + +
+
+

+
+
+ +
+
+
+
+ +
+
+

+
+
+
+ + + + +
+
+ +
+
+
+
+
+
+
+
+
+ +
+ +
+ + +
+
+ diff --git a/templates/assets/dist/main.iife.js b/templates/assets/dist/main.iife.js new file mode 100644 index 0000000..977eb49 --- /dev/null +++ b/templates/assets/dist/main.iife.js @@ -0,0 +1,5 @@ +var main=function(P){"use strict";var Re=!1,He=!1,U=[],qe=-1;function or(e){sr(e)}function sr(e){U.includes(e)||U.push(e),lr()}function ar(e){let t=U.indexOf(e);t!==-1&&t>qe&&U.splice(t,1)}function lr(){!He&&!Re&&(Re=!0,queueMicrotask(cr))}function cr(){Re=!1,He=!0;for(let e=0;ee.effect(t,{scheduler:n=>{Fe?or(n):n()}}),$t=e.raw}function kt(e){W=e}function dr(e){let t=()=>{};return[r=>{let i=W(r);return e._x_effects||(e._x_effects=new Set,e._x_runEffects=()=>{e._x_effects.forEach(o=>o())}),e._x_effects.add(i),t=()=>{i!==void 0&&(e._x_effects.delete(i),ne(i))},i},()=>{t()}]}function Mt(e,t){let n=!0,r,i=W(()=>{let o=e();JSON.stringify(o),n?r=o:queueMicrotask(()=>{t(o,r),r=o}),n=!1});return()=>ne(i)}var Nt=[],It=[],Pt=[];function pr(e){Pt.push(e)}function De(e,t){typeof t=="function"?(e._x_cleanups||(e._x_cleanups=[]),e._x_cleanups.push(t)):(t=e,It.push(t))}function jt(e){Nt.push(e)}function Rt(e,t,n){e._x_attributeCleanups||(e._x_attributeCleanups={}),e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]),e._x_attributeCleanups[t].push(n)}function Ht(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach(([n,r])=>{(t===void 0||t.includes(n))&&(r.forEach(i=>i()),delete e._x_attributeCleanups[n])})}function hr(e){var t,n;for((t=e._x_effects)==null||t.forEach(ar);(n=e._x_cleanups)!=null&&n.length;)e._x_cleanups.pop()()}var Be=new MutationObserver(We),ze=!1;function Ke(){Be.observe(document,{subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0}),ze=!0}function qt(){_r(),Be.disconnect(),ze=!1}var ae=[];function _r(){let e=Be.takeRecords();ae.push(()=>e.length>0&&We(e));let t=ae.length;queueMicrotask(()=>{if(ae.length===t)for(;ae.length>0;)ae.shift()()})}function w(e){if(!ze)return e();qt();let t=e();return Ke(),t}var Ue=!1,ve=[];function gr(){Ue=!0}function mr(){Ue=!1,We(ve),ve=[]}function We(e){if(Ue){ve=ve.concat(e);return}let t=new Set,n=new Set,r=new Map,i=new Map;for(let o=0;os.nodeType===1&&t.add(s)),e[o].removedNodes.forEach(s=>s.nodeType===1&&n.add(s))),e[o].type==="attributes")){let s=e[o].target,a=e[o].attributeName,l=e[o].oldValue,c=()=>{r.has(s)||r.set(s,[]),r.get(s).push({name:a,value:s.getAttribute(a)})},u=()=>{i.has(s)||i.set(s,[]),i.get(s).push(a)};s.hasAttribute(a)&&l===null?c():s.hasAttribute(a)?(u(),c()):u()}i.forEach((o,s)=>{Ht(s,o)}),r.forEach((o,s)=>{Nt.forEach(a=>a(s,o))});for(let o of n)t.has(o)||It.forEach(s=>s(o));t.forEach(o=>{o._x_ignoreSelf=!0,o._x_ignore=!0});for(let o of t)n.has(o)||o.isConnected&&(delete o._x_ignoreSelf,delete o._x_ignore,Pt.forEach(s=>s(o)),o._x_ignore=!0,o._x_ignoreSelf=!0);t.forEach(o=>{delete o._x_ignoreSelf,delete o._x_ignore}),t=null,n=null,r=null,i=null}function Ft(e){return ce(re(e))}function le(e,t,n){return e._x_dataStack=[t,...re(n||e)],()=>{e._x_dataStack=e._x_dataStack.filter(r=>r!==t)}}function re(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot=="function"&&e instanceof ShadowRoot?re(e.host):e.parentNode?re(e.parentNode):[]}function ce(e){return new Proxy({objects:e},yr)}var yr={ownKeys({objects:e}){return Array.from(new Set(e.flatMap(t=>Object.keys(t))))},has({objects:e},t){return t==Symbol.unscopables?!1:e.some(n=>Object.prototype.hasOwnProperty.call(n,t)||Reflect.has(n,t))},get({objects:e},t,n){return t=="toJSON"?vr:Reflect.get(e.find(r=>Reflect.has(r,t))||{},t,n)},set({objects:e},t,n,r){const i=e.find(s=>Object.prototype.hasOwnProperty.call(s,t))||e[e.length-1],o=Object.getOwnPropertyDescriptor(i,t);return o!=null&&o.set&&(o!=null&&o.get)?o.set.call(r,n)||!0:Reflect.set(i,t,n)}};function vr(){return Reflect.ownKeys(this).reduce((t,n)=>(t[n]=Reflect.get(this,n),t),{})}function Dt(e){let t=r=>typeof r=="object"&&!Array.isArray(r)&&r!==null,n=(r,i="")=>{Object.entries(Object.getOwnPropertyDescriptors(r)).forEach(([o,{value:s,enumerable:a}])=>{if(a===!1||s===void 0||typeof s=="object"&&s!==null&&s.__v_skip)return;let l=i===""?o:`${i}.${o}`;typeof s=="object"&&s!==null&&s._x_interceptor?r[o]=s.initialize(e,l,o):t(s)&&s!==r&&!(s instanceof Element)&&n(s,l)})};return n(e)}function Bt(e,t=()=>{}){let n={initialValue:void 0,_x_interceptor:!0,initialize(r,i,o){return e(this.initialValue,()=>xr(r,i),s=>Je(r,i,s),i,o)}};return t(n),r=>{if(typeof r=="object"&&r!==null&&r._x_interceptor){let i=n.initialize.bind(n);n.initialize=(o,s,a)=>{let l=r.initialize(o,s,a);return n.initialValue=l,i(o,s,a)}}else n.initialValue=r;return n}}function xr(e,t){return t.split(".").reduce((n,r)=>n[r],e)}function Je(e,t,n){if(typeof t=="string"&&(t=t.split(".")),t.length===1)e[t[0]]=n;else{if(t.length===0)throw error;return e[t[0]]||(e[t[0]]={}),Je(e[t[0]],t.slice(1),n)}}var zt={};function k(e,t){zt[e]=t}function Ve(e,t){let n=br(t);return Object.entries(zt).forEach(([r,i])=>{Object.defineProperty(e,`$${r}`,{get(){return i(t,n)},enumerable:!1})}),e}function br(e){let[t,n]=Yt(e),r={interceptor:Bt,...t};return De(e,n),r}function wr(e,t,n,...r){try{return n(...r)}catch(i){ue(i,e,t)}}function ue(e,t,n=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:n}),console.warn(`Alpine Expression Error: ${e.message} + +${n?'Expression: "'+n+`" + +`:""}`,t),setTimeout(()=>{throw e},0)}var xe=!0;function Kt(e){let t=xe;xe=!1;let n=e();return xe=t,n}function J(e,t,n={}){let r;return L(e,t)(i=>r=i,n),r}function L(...e){return Ut(...e)}var Ut=Wt;function Sr(e){Ut=e}function Wt(e,t){let n={};Ve(n,e);let r=[n,...re(e)],i=typeof t=="function"?Cr(r,t):Ar(r,t,e);return wr.bind(null,e,t,i)}function Cr(e,t){return(n=()=>{},{scope:r={},params:i=[]}={})=>{let o=t.apply(ce([r,...e]),i);be(n,o)}}var Ye={};function Er(e,t){if(Ye[e])return Ye[e];let n=Object.getPrototypeOf(async function(){}).constructor,r=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e,o=(()=>{try{let s=new n(["__self","scope"],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);return Object.defineProperty(s,"name",{value:`[Alpine] ${e}`}),s}catch(s){return ue(s,t,e),Promise.resolve()}})();return Ye[e]=o,o}function Ar(e,t,n){let r=Er(t,n);return(i=()=>{},{scope:o={},params:s=[]}={})=>{r.result=void 0,r.finished=!1;let a=ce([o,...e]);if(typeof r=="function"){let l=r(r,a).catch(c=>ue(c,n,t));r.finished?(be(i,r.result,a,s,n),r.result=void 0):l.then(c=>{be(i,c,a,s,n)}).catch(c=>ue(c,n,t)).finally(()=>r.result=void 0)}}}function be(e,t,n,r,i){if(xe&&typeof t=="function"){let o=t.apply(n,r);o instanceof Promise?o.then(s=>be(e,s,n,r)).catch(s=>ue(s,i,t)):e(o)}else typeof t=="object"&&t instanceof Promise?t.then(o=>e(o)):e(t)}var Xe="x-";function ie(e=""){return Xe+e}function Or(e){Xe=e}var we={};function O(e,t){return we[e]=t,{before(n){if(!we[n]){console.warn(String.raw`Cannot find directive \`${n}\`. \`${e}\` will use the default order of execution`);return}const r=V.indexOf(n);V.splice(r>=0?r:V.indexOf("DEFAULT"),0,e)}}}function Tr(e){return Object.keys(we).includes(e)}function Ge(e,t,n){if(t=Array.from(t),e._x_virtualDirectives){let o=Object.entries(e._x_virtualDirectives).map(([a,l])=>({name:a,value:l})),s=Jt(o);o=o.map(a=>s.find(l=>l.name===a.name)?{name:`x-bind:${a.name}`,value:`"${a.value}"`}:a),t=t.concat(o)}let r={};return t.map(Qt((o,s)=>r[o]=s)).filter(en).map(kr(r,n)).sort(Mr).map(o=>$r(e,o))}function Jt(e){return Array.from(e).map(Qt()).filter(t=>!en(t))}var Qe=!1,fe=new Map,Vt=Symbol();function Lr(e){Qe=!0;let t=Symbol();Vt=t,fe.set(t,[]);let n=()=>{for(;fe.get(t).length;)fe.get(t).shift()();fe.delete(t)},r=()=>{Qe=!1,n()};e(n),r()}function Yt(e){let t=[],n=a=>t.push(a),[r,i]=dr(e);return t.push(i),[{Alpine:_e,effect:r,cleanup:n,evaluateLater:L.bind(L,e),evaluate:J.bind(J,e)},()=>t.forEach(a=>a())]}function $r(e,t){let n=()=>{},r=we[t.type]||n,[i,o]=Yt(e);Rt(e,t.original,o);let s=()=>{e._x_ignore||e._x_ignoreSelf||(r.inline&&r.inline(e,t,i),r=r.bind(r,e,t,i),Qe?fe.get(Vt).push(r):r())};return s.runCleanups=o,s}var Xt=(e,t)=>({name:n,value:r})=>(n.startsWith(e)&&(n=n.replace(e,t)),{name:n,value:r}),Gt=e=>e;function Qt(e=()=>{}){return({name:t,value:n})=>{let{name:r,value:i}=Zt.reduce((o,s)=>s(o),{name:t,value:n});return r!==t&&e(r,t),{name:r,value:i}}}var Zt=[];function Ze(e){Zt.push(e)}function en({name:e}){return tn().test(e)}var tn=()=>new RegExp(`^${Xe}([^:^.]+)\\b`);function kr(e,t){return({name:n,value:r})=>{let i=n.match(tn()),o=n.match(/:([a-zA-Z0-9\-_:]+)/),s=n.match(/\.[^.\]]+(?=[^\]]*$)/g)||[],a=t||e[n]||n;return{type:i?i[1]:null,value:o?o[1]:null,modifiers:s.map(l=>l.replace(".","")),expression:r,original:a}}}var et="DEFAULT",V=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",et,"teleport"];function Mr(e,t){let n=V.indexOf(e.type)===-1?et:e.type,r=V.indexOf(t.type)===-1?et:t.type;return V.indexOf(n)-V.indexOf(r)}function de(e,t,n={}){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:!0,composed:!0,cancelable:!0}))}function Y(e,t){if(typeof ShadowRoot=="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach(i=>Y(i,t));return}let n=!1;if(t(e,()=>n=!0),n)return;let r=e.firstElementChild;for(;r;)Y(r,t),r=r.nextElementSibling}function $(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var nn=!1;function Nr(){nn&&$("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems."),nn=!0,document.body||$("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's ` + + diff --git a/templates/assets/styles/github-markdown.css b/templates/assets/styles/github-markdown.css new file mode 100644 index 0000000..697839c --- /dev/null +++ b/templates/assets/styles/github-markdown.css @@ -0,0 +1,1219 @@ +/* https://github.com/sindresorhus/github-markdown-css */ +.dark .markdown-body { + /*dark*/ + color-scheme: dark; + --color-prettylights-syntax-comment: #8b949e; + --color-prettylights-syntax-constant: #79c0ff; + --color-prettylights-syntax-entity: #d2a8ff; + --color-prettylights-syntax-storage-modifier-import: #c9d1d9; + --color-prettylights-syntax-entity-tag: #7ee787; + --color-prettylights-syntax-keyword: #ff7b72; + --color-prettylights-syntax-string: #a5d6ff; + --color-prettylights-syntax-variable: #ffa657; + --color-prettylights-syntax-brackethighlighter-unmatched: #f85149; + --color-prettylights-syntax-invalid-illegal-text: #f0f6fc; + --color-prettylights-syntax-invalid-illegal-bg: #8e1519; + --color-prettylights-syntax-carriage-return-text: #f0f6fc; + --color-prettylights-syntax-carriage-return-bg: #b62324; + --color-prettylights-syntax-string-regexp: #7ee787; + --color-prettylights-syntax-markup-list: #f2cc60; + --color-prettylights-syntax-markup-heading: #1f6feb; + --color-prettylights-syntax-markup-italic: #c9d1d9; + --color-prettylights-syntax-markup-bold: #c9d1d9; + --color-prettylights-syntax-markup-deleted-text: #ffdcd7; + --color-prettylights-syntax-markup-deleted-bg: #67060c; + --color-prettylights-syntax-markup-inserted-text: #aff5b4; + --color-prettylights-syntax-markup-inserted-bg: #033a16; + --color-prettylights-syntax-markup-changed-text: #ffdfb6; + --color-prettylights-syntax-markup-changed-bg: #5a1e02; + --color-prettylights-syntax-markup-ignored-text: #c9d1d9; + --color-prettylights-syntax-markup-ignored-bg: #1158c7; + --color-prettylights-syntax-meta-diff-range: #d2a8ff; + --color-prettylights-syntax-brackethighlighter-angle: #8b949e; + --color-prettylights-syntax-sublimelinter-gutter-mark: #484f58; + --color-prettylights-syntax-constant-other-reference-link: #a5d6ff; + --color-fg-default: #e6edf3; + --color-fg-muted: #7d8590; + --color-fg-subtle: #6e7681; + --color-canvas-default: #0d1117; + --color-canvas-subtle: #161b22; + --color-border-default: #30363d; + --color-border-muted: #21262d; + --color-neutral-muted: rgba(110, 118, 129, 0.4); + --color-accent-fg: #2f81f7; + --color-accent-emphasis: #1f6feb; + --color-attention-fg: #d29922; + --color-attention-subtle: rgba(187, 128, 9, 0.15); + --color-danger-fg: #f85149; + --color-done-fg: #a371f7; +} + +.light .markdown-body { + /*light*/ + color-scheme: light; + --color-prettylights-syntax-comment: #6e7781; + --color-prettylights-syntax-constant: #0550ae; + --color-prettylights-syntax-entity: #6639ba; + --color-prettylights-syntax-storage-modifier-import: #24292f; + --color-prettylights-syntax-entity-tag: #116329; + --color-prettylights-syntax-keyword: #cf222e; + --color-prettylights-syntax-string: #0a3069; + --color-prettylights-syntax-variable: #953800; + --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; + --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; + --color-prettylights-syntax-invalid-illegal-bg: #82071e; + --color-prettylights-syntax-carriage-return-text: #f6f8fa; + --color-prettylights-syntax-carriage-return-bg: #cf222e; + --color-prettylights-syntax-string-regexp: #116329; + --color-prettylights-syntax-markup-list: #3b2300; + --color-prettylights-syntax-markup-heading: #0550ae; + --color-prettylights-syntax-markup-italic: #24292f; + --color-prettylights-syntax-markup-bold: #24292f; + --color-prettylights-syntax-markup-deleted-text: #82071e; + --color-prettylights-syntax-markup-deleted-bg: #ffebe9; + --color-prettylights-syntax-markup-inserted-text: #116329; + --color-prettylights-syntax-markup-inserted-bg: #dafbe1; + --color-prettylights-syntax-markup-changed-text: #953800; + --color-prettylights-syntax-markup-changed-bg: #ffd8b5; + --color-prettylights-syntax-markup-ignored-text: #eaeef2; + --color-prettylights-syntax-markup-ignored-bg: #0550ae; + --color-prettylights-syntax-meta-diff-range: #8250df; + --color-prettylights-syntax-brackethighlighter-angle: #57606a; + --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; + --color-prettylights-syntax-constant-other-reference-link: #0a3069; + --color-fg-default: #1f2328; + --color-fg-muted: #656d76; + --color-fg-subtle: #6e7781; + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210, 18%, 87%, 1); + --color-neutral-muted: rgba(175, 184, 193, 0.2); + --color-accent-fg: #0969da; + --color-accent-emphasis: #0969da; + --color-attention-fg: #9a6700; + --color-attention-subtle: #fff8c5; + --color-danger-fg: #d1242f; + --color-done-fg: #8250df; + --color-prettylights-syntax-comment: #6e7781; + --color-prettylights-syntax-constant: #0550ae; + --color-prettylights-syntax-entity: #6639ba; + --color-prettylights-syntax-storage-modifier-import: #24292f; + --color-prettylights-syntax-entity-tag: #116329; + --color-prettylights-syntax-keyword: #cf222e; + --color-prettylights-syntax-string: #0a3069; + --color-prettylights-syntax-variable: #953800; + --color-prettylights-syntax-brackethighlighter-unmatched: #82071e; + --color-prettylights-syntax-invalid-illegal-text: #f6f8fa; + --color-prettylights-syntax-invalid-illegal-bg: #82071e; + --color-prettylights-syntax-carriage-return-text: #f6f8fa; + --color-prettylights-syntax-carriage-return-bg: #cf222e; + --color-prettylights-syntax-string-regexp: #116329; + --color-prettylights-syntax-markup-list: #3b2300; + --color-prettylights-syntax-markup-heading: #0550ae; + --color-prettylights-syntax-markup-italic: #24292f; + --color-prettylights-syntax-markup-bold: #24292f; + --color-prettylights-syntax-markup-deleted-text: #82071e; + --color-prettylights-syntax-markup-deleted-bg: #ffebe9; + --color-prettylights-syntax-markup-inserted-text: #116329; + --color-prettylights-syntax-markup-inserted-bg: #dafbe1; + --color-prettylights-syntax-markup-changed-text: #953800; + --color-prettylights-syntax-markup-changed-bg: #ffd8b5; + --color-prettylights-syntax-markup-ignored-text: #eaeef2; + --color-prettylights-syntax-markup-ignored-bg: #0550ae; + --color-prettylights-syntax-meta-diff-range: #8250df; + --color-prettylights-syntax-brackethighlighter-angle: #57606a; + --color-prettylights-syntax-sublimelinter-gutter-mark: #8c959f; + --color-prettylights-syntax-constant-other-reference-link: #0a3069; + --color-fg-default: #1f2328; + --color-fg-muted: #656d76; + --color-fg-subtle: #6e7781; + --color-canvas-default: #ffffff; + --color-canvas-subtle: #f6f8fa; + --color-border-default: #d0d7de; + --color-border-muted: hsla(210, 18%, 87%, 1); + --color-neutral-muted: rgba(175, 184, 193, 0.2); + --color-accent-fg: #0969da; + --color-accent-emphasis: #0969da; + --color-attention-fg: #9a6700; + --color-attention-subtle: #fff8c5; + --color-danger-fg: #d1242f; + --color-done-fg: #8250df; +} + +.markdown-body { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100%; + margin: 0; + color: var(--color-fg-default); + background-color: var(--color-canvas-default); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, + "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + line-height: 1.5; + word-wrap: break-word; +} + +.markdown-body .octicon { + display: inline-block; + fill: currentColor; + vertical-align: text-bottom; +} + +.markdown-body h1:hover .anchor .octicon-link:before, +.markdown-body h2:hover .anchor .octicon-link:before, +.markdown-body h3:hover .anchor .octicon-link:before, +.markdown-body h4:hover .anchor .octicon-link:before, +.markdown-body h5:hover .anchor .octicon-link:before, +.markdown-body h6:hover .anchor .octicon-link:before { + width: 16px; + height: 16px; + content: " "; + display: inline-block; + background-color: currentColor; + -webkit-mask-image: url("data:image/svg+xml,"); + mask-image: url("data:image/svg+xml,"); +} + +.markdown-body details, +.markdown-body figcaption, +.markdown-body figure { + display: block; +} + +.markdown-body summary { + display: list-item; +} + +.markdown-body [hidden] { + display: none !important; +} + +.markdown-body a { + background-color: transparent; + color: var(--color-accent-fg); + text-decoration: none; +} + +.markdown-body abbr[title] { + border-bottom: none; + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; +} + +.markdown-body b, +.markdown-body strong { + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body dfn { + font-style: italic; +} + +.markdown-body h1 { + margin: 0.67em 0; + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: 0.3em; + font-size: 2em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body mark { + background-color: var(--color-attention-subtle); + color: var(--color-fg-default); +} + +.markdown-body small { + font-size: 90%; +} + +.markdown-body sub, +.markdown-body sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +.markdown-body sub { + bottom: -0.25em; +} + +.markdown-body sup { + top: -0.5em; +} + +.markdown-body img { + border-style: none; + max-width: 100%; + box-sizing: content-box; + background-color: var(--color-canvas-default); +} + +.markdown-body code, +.markdown-body kbd, +.markdown-body pre, +.markdown-body samp { + font-family: monospace; + font-size: 1em; +} + +.markdown-body figure { + margin: 1em 40px; +} + +.markdown-body hr { + box-sizing: content-box; + overflow: hidden; + background: transparent; + border-bottom: 1px solid var(--color-border-muted); + height: 0.25em; + padding: 0; + margin: 24px 0; + background-color: var(--color-border-default); + border: 0; +} + +.markdown-body input { + font: inherit; + margin: 0; + overflow: visible; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +.markdown-body [type="button"], +.markdown-body [type="reset"], +.markdown-body [type="submit"] { + -webkit-appearance: button; +} + +.markdown-body [type="checkbox"], +.markdown-body [type="radio"] { + box-sizing: border-box; + padding: 0; +} + +.markdown-body [type="number"]::-webkit-inner-spin-button, +.markdown-body [type="number"]::-webkit-outer-spin-button { + height: auto; +} + +.markdown-body [type="search"]::-webkit-search-cancel-button, +.markdown-body [type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +.markdown-body ::-webkit-input-placeholder { + color: inherit; + opacity: 0.54; +} + +.markdown-body ::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit; +} + +.markdown-body a:hover { + text-decoration: underline; +} + +.markdown-body ::placeholder { + color: var(--color-fg-subtle); + opacity: 1; +} + +.markdown-body hr::before { + display: table; + content: ""; +} + +.markdown-body hr::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body table { + border-spacing: 0; + border-collapse: collapse; + display: block; + width: max-content; + max-width: 100%; + overflow: auto; +} + +.markdown-body td, +.markdown-body th { + padding: 0; +} + +.markdown-body details summary { + cursor: pointer; +} + +.markdown-body details:not([open]) > *:not(summary) { + display: none !important; +} + +.markdown-body a:focus, +.markdown-body [role="button"]:focus, +.markdown-body input[type="radio"]:focus, +.markdown-body input[type="checkbox"]:focus { + outline: 2px solid var(--color-accent-fg); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:focus:not(:focus-visible), +.markdown-body [role="button"]:focus:not(:focus-visible), +.markdown-body input[type="radio"]:focus:not(:focus-visible), +.markdown-body input[type="checkbox"]:focus:not(:focus-visible) { + outline: solid 1px transparent; +} + +.markdown-body a:focus-visible, +.markdown-body [role="button"]:focus-visible, +.markdown-body input[type="radio"]:focus-visible, +.markdown-body input[type="checkbox"]:focus-visible { + outline: 2px solid var(--color-accent-fg); + outline-offset: -2px; + box-shadow: none; +} + +.markdown-body a:not([class]):focus, +.markdown-body a:not([class]):focus-visible, +.markdown-body input[type="radio"]:focus, +.markdown-body input[type="radio"]:focus-visible, +.markdown-body input[type="checkbox"]:focus, +.markdown-body input[type="checkbox"]:focus-visible { + outline-offset: 0; +} + +.markdown-body kbd { + display: inline-block; + padding: 3px 5px; + font: 11px ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace; + line-height: 10px; + color: var(--color-fg-default); + vertical-align: middle; + background-color: var(--color-canvas-subtle); + border: solid 1px var(--color-neutral-muted); + border-bottom-color: var(--color-neutral-muted); + border-radius: 6px; + box-shadow: inset 0 -1px 0 var(--color-neutral-muted); +} + +.markdown-body h1, +.markdown-body h2, +.markdown-body h3, +.markdown-body h4, +.markdown-body h5, +.markdown-body h6 { + margin-top: 24px; + margin-bottom: 16px; + font-weight: var(--base-text-weight-semibold, 600); + line-height: 1.25; +} + +.markdown-body h2 { + font-weight: var(--base-text-weight-semibold, 600); + padding-bottom: 0.3em; + font-size: 1.5em; + border-bottom: 1px solid var(--color-border-muted); +} + +.markdown-body h3 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1.25em; +} + +.markdown-body h4 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 1em; +} + +.markdown-body h5 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 0.875em; +} + +.markdown-body h6 { + font-weight: var(--base-text-weight-semibold, 600); + font-size: 0.85em; + color: var(--color-fg-muted); +} + +.markdown-body p { + margin-top: 0; + margin-bottom: 10px; +} + +.markdown-body blockquote { + margin: 0; + padding: 0 1em; + color: var(--color-fg-muted); + border-left: 0.25em solid var(--color-border-default); +} + +.markdown-body ul, +.markdown-body ol { + margin-top: 0; + margin-bottom: 0; + padding-left: 2em; +} + +.markdown-body ol ol, +.markdown-body ul ol { + list-style-type: lower-roman; +} + +.markdown-body ul ul ol, +.markdown-body ul ol ol, +.markdown-body ol ul ol, +.markdown-body ol ol ol { + list-style-type: lower-alpha; +} + +.markdown-body dd { + margin-left: 0; +} + +.markdown-body tt, +.markdown-body code, +.markdown-body samp { + font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace; + font-size: 12px; +} + +.markdown-body pre { + margin-top: 0; + margin-bottom: 0; + font-family: ui-monospace, SFMono-Regular, SF Mono, Menlo, Consolas, Liberation Mono, monospace; + font-size: 12px; + word-wrap: normal; +} + +.markdown-body .octicon { + display: inline-block; + overflow: visible !important; + vertical-align: text-bottom; + fill: currentColor; +} + +.markdown-body input::-webkit-outer-spin-button, +.markdown-body input::-webkit-inner-spin-button { + margin: 0; + -webkit-appearance: none; + appearance: none; +} + +.markdown-body .color-fg-accent { + color: var(--color-accent-fg) !important; +} + +.markdown-body .color-fg-attention { + color: var(--color-attention-fg) !important; +} + +.markdown-body .color-fg-done { + color: var(--color-done-fg) !important; +} + +.markdown-body .flex-items-center { + align-items: center !important; +} + +.markdown-body .mb-1 { + margin-bottom: var(--base-size-4, 4px) !important; +} + +.markdown-body .text-semibold { + font-weight: var(--base-text-weight-medium, 500) !important; +} + +.markdown-body .d-inline-flex { + display: inline-flex !important; +} + +.markdown-body::before { + display: table; + content: ""; +} + +.markdown-body::after { + display: table; + clear: both; + content: ""; +} + +.markdown-body > *:first-child { + margin-top: 0 !important; +} + +.markdown-body > *:last-child { + margin-bottom: 0 !important; +} + +.markdown-body a:not([href]) { + color: inherit; + text-decoration: none; +} + +.markdown-body .absent { + color: var(--color-danger-fg); +} + +.markdown-body .anchor { + float: left; + padding-right: 4px; + margin-left: -20px; + line-height: 1; +} + +.markdown-body .anchor:focus { + outline: none; +} + +.markdown-body p, +.markdown-body blockquote, +.markdown-body ul, +.markdown-body ol, +.markdown-body dl, +.markdown-body table, +.markdown-body pre, +.markdown-body details { + margin-top: 0; + margin-bottom: 16px; +} + +.markdown-body blockquote > :first-child { + margin-top: 0; +} + +.markdown-body blockquote > :last-child { + margin-bottom: 0; +} + +.markdown-body h1 .octicon-link, +.markdown-body h2 .octicon-link, +.markdown-body h3 .octicon-link, +.markdown-body h4 .octicon-link, +.markdown-body h5 .octicon-link, +.markdown-body h6 .octicon-link { + color: var(--color-fg-default); + vertical-align: middle; + visibility: hidden; +} + +.markdown-body h1:hover .anchor, +.markdown-body h2:hover .anchor, +.markdown-body h3:hover .anchor, +.markdown-body h4:hover .anchor, +.markdown-body h5:hover .anchor, +.markdown-body h6:hover .anchor { + text-decoration: none; +} + +.markdown-body h1:hover .anchor .octicon-link, +.markdown-body h2:hover .anchor .octicon-link, +.markdown-body h3:hover .anchor .octicon-link, +.markdown-body h4:hover .anchor .octicon-link, +.markdown-body h5:hover .anchor .octicon-link, +.markdown-body h6:hover .anchor .octicon-link { + visibility: visible; +} + +.markdown-body h1 tt, +.markdown-body h1 code, +.markdown-body h2 tt, +.markdown-body h2 code, +.markdown-body h3 tt, +.markdown-body h3 code, +.markdown-body h4 tt, +.markdown-body h4 code, +.markdown-body h5 tt, +.markdown-body h5 code, +.markdown-body h6 tt, +.markdown-body h6 code { + padding: 0 0.2em; + font-size: inherit; +} + +.markdown-body summary h1, +.markdown-body summary h2, +.markdown-body summary h3, +.markdown-body summary h4, +.markdown-body summary h5, +.markdown-body summary h6 { + display: inline-block; +} + +.markdown-body summary h1 .anchor, +.markdown-body summary h2 .anchor, +.markdown-body summary h3 .anchor, +.markdown-body summary h4 .anchor, +.markdown-body summary h5 .anchor, +.markdown-body summary h6 .anchor { + margin-left: -40px; +} + +.markdown-body summary h1, +.markdown-body summary h2 { + padding-bottom: 0; + border-bottom: 0; +} + +.markdown-body ul.no-list, +.markdown-body ol.no-list { + padding: 0; + list-style-type: none; +} + +.markdown-body ol[type="a s"] { + list-style-type: lower-alpha; +} + +.markdown-body ol[type="A s"] { + list-style-type: upper-alpha; +} + +.markdown-body ol[type="i s"] { + list-style-type: lower-roman; +} + +.markdown-body ol[type="I s"] { + list-style-type: upper-roman; +} + +.markdown-body ol[type="1"] { + list-style-type: decimal; +} + +.markdown-body div > ol:not([type]) { + list-style-type: decimal; +} + +.markdown-body ul ul, +.markdown-body ul ol, +.markdown-body ol ol, +.markdown-body ol ul { + margin-top: 0; + margin-bottom: 0; +} + +.markdown-body li > p { + margin-top: 16px; +} + +.markdown-body li + li { + margin-top: 0.25em; +} + +.markdown-body dl { + padding: 0; +} + +.markdown-body dl dt { + padding: 0; + margin-top: 16px; + font-size: 1em; + font-style: italic; + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body dl dd { + padding: 0 16px; + margin-bottom: 16px; +} + +.markdown-body table th { + font-weight: var(--base-text-weight-semibold, 600); +} + +.markdown-body table th, +.markdown-body table td { + padding: 6px 13px; + border: 1px solid var(--color-border-default); +} + +.markdown-body table td > :last-child { + margin-bottom: 0; +} + +.markdown-body table tr { + background-color: var(--color-canvas-default); + border-top: 1px solid var(--color-border-muted); +} + +.markdown-body table tr:nth-child(2n) { + background-color: var(--color-canvas-subtle); +} + +.markdown-body table img { + background-color: transparent; +} + +.markdown-body img[align="right"] { + padding-left: 20px; +} + +.markdown-body img[align="left"] { + padding-right: 20px; +} + +.markdown-body .emoji { + max-width: none; + vertical-align: text-top; + background-color: transparent; +} + +.markdown-body span.frame { + display: block; + overflow: hidden; +} + +.markdown-body span.frame > span { + display: block; + float: left; + width: auto; + padding: 7px; + margin: 13px 0 0; + overflow: hidden; + border: 1px solid var(--color-border-default); +} + +.markdown-body span.frame span img { + display: block; + float: left; +} + +.markdown-body span.frame span span { + display: block; + padding: 5px 0 0; + clear: both; + color: var(--color-fg-default); +} + +.markdown-body span.align-center { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-center > span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: center; +} + +.markdown-body span.align-center span img { + margin: 0 auto; + text-align: center; +} + +.markdown-body span.align-right { + display: block; + overflow: hidden; + clear: both; +} + +.markdown-body span.align-right > span { + display: block; + margin: 13px 0 0; + overflow: hidden; + text-align: right; +} + +.markdown-body span.align-right span img { + margin: 0; + text-align: right; +} + +.markdown-body span.float-left { + display: block; + float: left; + margin-right: 13px; + overflow: hidden; +} + +.markdown-body span.float-left span { + margin: 13px 0 0; +} + +.markdown-body span.float-right { + display: block; + float: right; + margin-left: 13px; + overflow: hidden; +} + +.markdown-body span.float-right > span { + display: block; + margin: 13px auto 0; + overflow: hidden; + text-align: right; +} + +.markdown-body code, +.markdown-body tt { + padding: 0.2em 0.4em; + margin: 0; + font-size: 85%; + white-space: break-spaces; + /* background-color: var(--color-neutral-muted); */ + border-radius: 6px; +} + +.markdown-body code br, +.markdown-body tt br { + display: none; +} + +.markdown-body del code { + text-decoration: inherit; +} + +.markdown-body samp { + font-size: 85%; +} + +.markdown-body pre code { + font-size: 100%; +} + +.markdown-body pre > code { + padding: 0; + margin: 0; + word-break: normal; + white-space: pre; + /* background: transparent; */ + border: 0; +} + +.markdown-body .highlight { + margin-bottom: 16px; +} + +.markdown-body .highlight pre { + margin-bottom: 0; + word-break: normal; +} + +.markdown-body .highlight pre, +.markdown-body pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + /* color: var(--color-fg-default); */ + background-color: var(--color-canvas-subtle); + border-radius: 6px; +} + +.markdown-body pre code, +.markdown-body pre tt { + display: inline; + max-width: auto; + padding: 0; + margin: 0; + overflow: visible; + line-height: inherit; + word-wrap: normal; + /* background-color: transparent; */ + border: 0; +} + +.markdown-body .csv-data td, +.markdown-body .csv-data th { + padding: 5px; + overflow: hidden; + font-size: 12px; + line-height: 1; + text-align: left; + white-space: nowrap; +} + +.markdown-body .csv-data .blob-num { + padding: 10px 8px 9px; + text-align: right; + background: var(--color-canvas-default); + border: 0; +} + +.markdown-body .csv-data tr { + border-top: 0; +} + +.markdown-body .csv-data th { + font-weight: var(--base-text-weight-semibold, 600); + background: var(--color-canvas-subtle); + border-top: 0; +} + +.markdown-body [data-footnote-ref]::before { + content: "["; +} + +.markdown-body [data-footnote-ref]::after { + content: "]"; +} + +.markdown-body .footnotes { + font-size: 12px; + color: var(--color-fg-muted); + border-top: 1px solid var(--color-border-default); +} + +.markdown-body .footnotes ol { + padding-left: 16px; +} + +.markdown-body .footnotes ol ul { + display: inline-block; + padding-left: 16px; + margin-top: 16px; +} + +.markdown-body .footnotes li { + position: relative; +} + +.markdown-body .footnotes li:target::before { + position: absolute; + top: -8px; + right: -8px; + bottom: -8px; + left: -24px; + pointer-events: none; + content: ""; + border: 2px solid var(--color-accent-emphasis); + border-radius: 6px; +} + +.markdown-body .footnotes li:target { + color: var(--color-fg-default); +} + +.markdown-body .footnotes .data-footnote-backref g-emoji { + font-family: monospace; +} + +.markdown-body .pl-c { + color: var(--color-prettylights-syntax-comment); +} + +.markdown-body .pl-c1, +.markdown-body .pl-s .pl-v { + color: var(--color-prettylights-syntax-constant); +} + +.markdown-body .pl-e, +.markdown-body .pl-en { + color: var(--color-prettylights-syntax-entity); +} + +.markdown-body .pl-smi, +.markdown-body .pl-s .pl-s1 { + color: var(--color-prettylights-syntax-storage-modifier-import); +} + +.markdown-body .pl-ent { + color: var(--color-prettylights-syntax-entity-tag); +} + +.markdown-body .pl-k { + color: var(--color-prettylights-syntax-keyword); +} + +.markdown-body .pl-s, +.markdown-body .pl-pds, +.markdown-body .pl-s .pl-pse .pl-s1, +.markdown-body .pl-sr, +.markdown-body .pl-sr .pl-cce, +.markdown-body .pl-sr .pl-sre, +.markdown-body .pl-sr .pl-sra { + color: var(--color-prettylights-syntax-string); +} + +.markdown-body .pl-v, +.markdown-body .pl-smw { + color: var(--color-prettylights-syntax-variable); +} + +.markdown-body .pl-bu { + color: var(--color-prettylights-syntax-brackethighlighter-unmatched); +} + +.markdown-body .pl-ii { + color: var(--color-prettylights-syntax-invalid-illegal-text); + background-color: var(--color-prettylights-syntax-invalid-illegal-bg); +} + +.markdown-body .pl-c2 { + color: var(--color-prettylights-syntax-carriage-return-text); + background-color: var(--color-prettylights-syntax-carriage-return-bg); +} + +.markdown-body .pl-sr .pl-cce { + font-weight: bold; + color: var(--color-prettylights-syntax-string-regexp); +} + +.markdown-body .pl-ml { + color: var(--color-prettylights-syntax-markup-list); +} + +.markdown-body .pl-mh, +.markdown-body .pl-mh .pl-en, +.markdown-body .pl-ms { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-heading); +} + +.markdown-body .pl-mi { + font-style: italic; + color: var(--color-prettylights-syntax-markup-italic); +} + +.markdown-body .pl-mb { + font-weight: bold; + color: var(--color-prettylights-syntax-markup-bold); +} + +.markdown-body .pl-md { + color: var(--color-prettylights-syntax-markup-deleted-text); + background-color: var(--color-prettylights-syntax-markup-deleted-bg); +} + +.markdown-body .pl-mi1 { + color: var(--color-prettylights-syntax-markup-inserted-text); + background-color: var(--color-prettylights-syntax-markup-inserted-bg); +} + +.markdown-body .pl-mc { + color: var(--color-prettylights-syntax-markup-changed-text); + background-color: var(--color-prettylights-syntax-markup-changed-bg); +} + +.markdown-body .pl-mi2 { + color: var(--color-prettylights-syntax-markup-ignored-text); + background-color: var(--color-prettylights-syntax-markup-ignored-bg); +} + +.markdown-body .pl-mdr { + font-weight: bold; + color: var(--color-prettylights-syntax-meta-diff-range); +} + +.markdown-body .pl-ba { + color: var(--color-prettylights-syntax-brackethighlighter-angle); +} + +.markdown-body .pl-sg { + color: var(--color-prettylights-syntax-sublimelinter-gutter-mark); +} + +.markdown-body .pl-corl { + text-decoration: underline; + color: var(--color-prettylights-syntax-constant-other-reference-link); +} + +.markdown-body g-emoji { + display: inline-block; + min-width: 1ch; + font-family: "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; + font-size: 1em; + font-style: normal !important; + font-weight: var(--base-text-weight-normal, 400); + line-height: 1; + vertical-align: -0.075em; +} + +.markdown-body g-emoji img { + width: 1em; + height: 1em; +} + +.markdown-body .task-list-item { + list-style-type: none; +} + +.markdown-body .task-list-item label { + font-weight: var(--base-text-weight-normal, 400); +} + +.markdown-body .task-list-item.enabled label { + cursor: pointer; +} + +.markdown-body .task-list-item + .task-list-item { + margin-top: 4px; +} + +.markdown-body .task-list-item .handle { + display: none; +} + +.markdown-body .task-list-item-checkbox { + margin: 0 0.2em 0.25em -1.4em; + vertical-align: middle; +} + +.markdown-body .contains-task-list:dir(rtl) .task-list-item-checkbox { + margin: 0 -1.6em 0.25em 0.2em; +} + +.markdown-body .contains-task-list { + position: relative; +} + +.markdown-body .contains-task-list:hover .task-list-item-convert-container, +.markdown-body .contains-task-list:focus-within .task-list-item-convert-container { + display: block; + width: auto; + height: 24px; + overflow: visible; + clip: auto; +} + +.markdown-body .QueryBuilder .qb-entity { + color: var(--color-prettylights-syntax-entity); +} + +.markdown-body .QueryBuilder .qb-constant { + color: var(--color-prettylights-syntax-constant); +} + +.markdown-body ::-webkit-calendar-picker-indicator { + filter: invert(50%); +} + +.markdown-body .markdown-alert { + padding: 0 1em; + margin-bottom: 16px; + color: inherit; + border-left: 0.25em solid var(--color-border-default); +} + +.markdown-body .markdown-alert > :first-child { + margin-top: 0; +} + +.markdown-body .markdown-alert > :last-child { + margin-bottom: 0; +} + +.markdown-body .markdown-alert.markdown-alert-note { + border-left-color: var(--color-accent-fg); +} + +.markdown-body .markdown-alert.markdown-alert-important { + border-left-color: var(--color-done-fg); +} + +.markdown-body .markdown-alert.markdown-alert-warning { + border-left-color: var(--color-attention-fg); +} diff --git a/templates/author.html b/templates/author.html new file mode 100644 index 0000000..048bde2 --- /dev/null +++ b/templates/author.html @@ -0,0 +1,34 @@ + + + + + + +
+ + + +
+ +
+ +
+ + + + diff --git a/templates/categories.html b/templates/categories.html new file mode 100644 index 0000000..27a46b3 --- /dev/null +++ b/templates/categories.html @@ -0,0 +1,41 @@ + + + + + + + +
+ + + +
+ +
+ +
+ +
+
+
+ diff --git a/templates/category.html b/templates/category.html new file mode 100644 index 0000000..a3bc79b --- /dev/null +++ b/templates/category.html @@ -0,0 +1,31 @@ + + + + + +
+ + + +
+ +
+ +
+ + + + diff --git a/templates/error/error.html b/templates/error/error.html new file mode 100644 index 0000000..a790af3 --- /dev/null +++ b/templates/error/error.html @@ -0,0 +1,27 @@ + + + +
+
+
+

+

+

+ + + + +
+
+
+
+ diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..7ad5475 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,31 @@ + + + + + +
+ + + +
+ +
+ +
+ + + + diff --git a/templates/links.html b/templates/links.html new file mode 100644 index 0000000..9f7daf1 --- /dev/null +++ b/templates/links.html @@ -0,0 +1,43 @@ + + + +
+

+ +
+
+ +
+
+
+ diff --git a/templates/modules/category-filter.html b/templates/modules/category-filter.html new file mode 100644 index 0000000..786f747 --- /dev/null +++ b/templates/modules/category-filter.html @@ -0,0 +1,59 @@ +
    +
  • + + + +
  • + +
  • +
    + + + +
    + +
      +
    • +
    +
  • +
    +
diff --git a/templates/modules/category-tree.html b/templates/modules/category-tree.html new file mode 100644 index 0000000..9964ed5 --- /dev/null +++ b/templates/modules/category-tree.html @@ -0,0 +1,19 @@ + diff --git a/templates/modules/featured-post-card.html b/templates/modules/featured-post-card.html new file mode 100644 index 0000000..6eb5dfa --- /dev/null +++ b/templates/modules/featured-post-card.html @@ -0,0 +1,72 @@ +
+
+ + + +
+
+
+
+ + + + +
+

+ +

+

+
+
+ + + + + + +
+
+
diff --git a/templates/modules/footer-social.html b/templates/modules/footer-social.html new file mode 100644 index 0000000..eeae060 --- /dev/null +++ b/templates/modules/footer-social.html @@ -0,0 +1,22 @@ + +
+ + +
+
+ +
+ +
+
+
+
diff --git a/templates/modules/footer.html b/templates/modules/footer.html new file mode 100644 index 0000000..7089baa --- /dev/null +++ b/templates/modules/footer.html @@ -0,0 +1,193 @@ +
+
+ + + + + + +
    +
  • + +
  • +
+
+ + +
+
+
+ + + +
+

+ gongan_beian + +

+
+ + © + + . All Rights Reserved. Powered by + Halo. + + + + +
+
+ +
+
+
+ + + + + + +
+
+ +
+

+
    +
  • + +
  • +
+
+
+
+ + +
+ +
+

+
    +
  • + +
  • +
+
+
+
+
+
+
+
+ + © + + . All Rights Reserved. Powered by + Halo. + + +
+ + + +
+ gongan_beian + +
+
+ +

+ +

+
+ + +
+
diff --git a/templates/modules/header.html b/templates/modules/header.html new file mode 100644 index 0000000..65097fb --- /dev/null +++ b/templates/modules/header.html @@ -0,0 +1,242 @@ +
+
+
+ + +
+
+
    +
  • +
    +
  • +
  • +
    +
      + +
    +
  • + +
  • + + + +
  • +
  • +
    +
    + +
    + +
    +
  • +
+
+
+
+ +
+
+ +

+
+ +
+
+
diff --git a/templates/modules/hero.html b/templates/modules/hero.html new file mode 100644 index 0000000..b743f09 --- /dev/null +++ b/templates/modules/hero.html @@ -0,0 +1,60 @@ +
+
+ + +
+ +
+
+ +
+
+ +
+
+ + + + + +
+
+
+ +
+ + +
+
+
+
+ +
+
+
+

+
+
+
+
diff --git a/templates/modules/image-view-modal.html b/templates/modules/image-view-modal.html new file mode 100644 index 0000000..108e95f --- /dev/null +++ b/templates/modules/image-view-modal.html @@ -0,0 +1,45 @@ + diff --git a/templates/modules/layout.html b/templates/modules/layout.html new file mode 100644 index 0000000..317f6eb --- /dev/null +++ b/templates/modules/layout.html @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ + + + + + +
+ + + + + + + + diff --git a/templates/modules/pagination.html b/templates/modules/pagination.html new file mode 100644 index 0000000..b57e41b --- /dev/null +++ b/templates/modules/pagination.html @@ -0,0 +1,44 @@ +
+
+ + + + + + + + + +
+ + +
diff --git a/templates/modules/post-card.html b/templates/modules/post-card.html new file mode 100644 index 0000000..a679df7 --- /dev/null +++ b/templates/modules/post-card.html @@ -0,0 +1,89 @@ +
+
+ + + +
+
+
+
+
+
+
+ + + + +
+

+ +

+

+
+
+ + + + + + +
+
+
diff --git a/templates/modules/share-modal.html b/templates/modules/share-modal.html new file mode 100644 index 0000000..1d39298 --- /dev/null +++ b/templates/modules/share-modal.html @@ -0,0 +1,75 @@ + diff --git a/templates/modules/sidebar.html b/templates/modules/sidebar.html new file mode 100644 index 0000000..9ce2c6f --- /dev/null +++ b/templates/modules/sidebar.html @@ -0,0 +1,10 @@ + diff --git a/templates/modules/tag-filter.html b/templates/modules/tag-filter.html new file mode 100644 index 0000000..b8269f3 --- /dev/null +++ b/templates/modules/tag-filter.html @@ -0,0 +1,18 @@ +
+

+ + +

+ +
diff --git a/templates/modules/widgets/categories.html b/templates/modules/widgets/categories.html new file mode 100644 index 0000000..4426403 --- /dev/null +++ b/templates/modules/widgets/categories.html @@ -0,0 +1,13 @@ +
+

+ + +

+
+
    +
  • +
+
+
diff --git a/templates/modules/widgets/latest-comments.html b/templates/modules/widgets/latest-comments.html new file mode 100644 index 0000000..7d6db04 --- /dev/null +++ b/templates/modules/widgets/latest-comments.html @@ -0,0 +1,76 @@ +
+

+ + +

+
+
    +
  • +
    + Comment Avatar +
    +
    +

    Phyllis McKenzie

    +

    1h

    +
    +

    + Fugit quae nam dolores impedit quia fuga pariatur dignissimos recusandae. +

    +
    +
    +
  • +
  • +
    + Comment Avatar +
    +
    +

    Willard Labadie I

    +

    1h

    +
    +

    + Officiis quis quos repudiandae quam delectus impedit quidem amet ut. +

    +
    +
    +
  • +
  • +
    + Comment Avatar +
    +
    +

    Miss Leonard Sporer

    +

    1h

    +
    +

    Nesciunt dolores et debitis.

    +
    +
    +
  • +
  • +
    + Comment Avatar +
    +
    +

    Tyrone Fisher

    +

    1h

    +
    +

    Et nesciunt dolorem eum ut corporis.

    +
    +
    +
  • +
  • +
    + Comment Avatar +
    +
    +

    Angie Braun V

    +

    1h

    +
    +

    Autem labore ipsam earum reiciendis eum omnis.

    +
    +
    +
  • +
+
+
diff --git a/templates/modules/widgets/popular-posts.html b/templates/modules/widgets/popular-posts.html new file mode 100644 index 0000000..eeb874e --- /dev/null +++ b/templates/modules/widgets/popular-posts.html @@ -0,0 +1,33 @@ +
+

+ + +

+
+
    +
  • +
    +
    +

    + +

    +

    +
    +
    + + +
    +
    +
  • +
+
+
diff --git a/templates/modules/widgets/profile.html b/templates/modules/widgets/profile.html new file mode 100644 index 0000000..d36a7a0 --- /dev/null +++ b/templates/modules/widgets/profile.html @@ -0,0 +1,82 @@ +
+
+
+ +
+

+
+

+
+
+
+ + +
+
+ + +
+
+ + +
+
+ +
+
+
+ + + + + + +
+ +
+
+
+
+
diff --git a/templates/modules/widgets/tags.html b/templates/modules/widgets/tags.html new file mode 100644 index 0000000..65ab5de --- /dev/null +++ b/templates/modules/widgets/tags.html @@ -0,0 +1,28 @@ +
+
+

+ + +

+ + + + +
+ +
diff --git a/templates/moments.html b/templates/moments.html new file mode 100644 index 0000000..0990241 --- /dev/null +++ b/templates/moments.html @@ -0,0 +1,167 @@ + + + +
+

+
+ +
+
+
    +
  • + +
    +
    +
    +
    + +
    + +
    + +
    + +
    +
    +
    +
    +
    + + + + +
    +
    + + +
    +
    + + +
    +
    + +
    + +
    +
    +
  • +
+
+ + +
+
+ diff --git a/templates/page.html b/templates/page.html new file mode 100644 index 0000000..24d679f --- /dev/null +++ b/templates/page.html @@ -0,0 +1,117 @@ + + + + + + +
+
+
+
+

+
+
+
+
+ +
+
+
+ + + +
+ +
+ + / + +
+
+
+
+
+ +
+ +
+
+
+ +
+
+
+
+
+
+

+ +
+
+
+

+ +
+
+
+ diff --git a/templates/photos.html b/templates/photos.html new file mode 100644 index 0000000..492c023 --- /dev/null +++ b/templates/photos.html @@ -0,0 +1,51 @@ + + + +
+

+
+ +
+ +
+
+ +
+
+ + +
+
+ diff --git a/templates/post.html b/templates/post.html new file mode 100644 index 0000000..4f78382 --- /dev/null +++ b/templates/post.html @@ -0,0 +1,203 @@ + + + + + + +
+
+
+
+

+
+
+
+
+ + + + +
+

+ + +

+
+
+
+ + + + +
+
+
+ + + +
+ +
+ + / + +
+
+
+
+
+ +
+
+
+
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+
+
+

+
+ + +
+
+
+ + +
+
+
+

+ +
+
+
+ diff --git a/templates/tag.html b/templates/tag.html new file mode 100644 index 0000000..8c6ba84 --- /dev/null +++ b/templates/tag.html @@ -0,0 +1,33 @@ + + + +
+ +
+ +
+ + + +
+ +
+ +
+ + + + diff --git a/templates/tags.html b/templates/tags.html new file mode 100644 index 0000000..0e7d982 --- /dev/null +++ b/templates/tags.html @@ -0,0 +1,43 @@ + + + +
+ +
+ + + +
+ + + +
+ +
+ +
+ + +
+
+
+ diff --git a/theme.yaml b/theme.yaml new file mode 100644 index 0000000..09bda6d --- /dev/null +++ b/theme.yaml @@ -0,0 +1,25 @@ +apiVersion: theme.halo.run/v1alpha1 +kind: Theme +metadata: + name: theme-earth + annotations: + # Add supports for Halo App Store + # https://halo.run/store/apps/app-KgWqR + "store.halo.run/app-id": "app-KgWqR" +spec: + displayName: Earth + author: + name: Halo + website: https://www.halo.run + description: Default theme for Halo 2.0 + logo: https://www.halo.run/logo + homepage: https://www.halo.run/store/apps/app-KgWqR + repo: https://github.com/halo-dev/theme-earth + issues: https://github.com/halo-dev/theme-earth/issues + settingName: "theme-earth-setting" + configMapName: "theme-earth-configMap" + version: 1.12.4 + requires: ">=2.20.0" + license: + - name: "GPL-3.0" + url: "https://github.com/halo-dev/theme-earth/blob/main/LICENSE"