diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..364fdec1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +public/ diff --git a/LICENSE b/LICENSE deleted file mode 100644 index 0ad25db4..00000000 --- a/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - 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 Affero General Public License as published - by the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - 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 AGPL, see -. diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..d2af1bbc --- /dev/null +++ b/Makefile @@ -0,0 +1,8 @@ +default: + hugo + +serve: + hugo -D server + +clean: + rm -rf public diff --git a/README.md b/README.md new file mode 100644 index 00000000..cc61adf0 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +Quantum Package website +======================= + + +* favicon generated by https://www.favicon-generator.org + + diff --git a/config.toml b/config.toml new file mode 100644 index 00000000..f7cd57a8 --- /dev/null +++ b/config.toml @@ -0,0 +1,64 @@ +baseurl = "https://quantumpackage.github.io/qp2" +contentdir = "content" +layoutdir = "layouts" +publishdir = "public" +title = "Quantum Package" +canonifyurls = true + +DefaultContentLanguage = "en" +theme = "beautifulhugo" +metaDataFormat = "yaml" +pygmentsUseClasses = true +pygmentCodeFences = true +#googleAnalytics = "XXX" + +[Params] + subtitle = "a programming environment for wave function methods" + logo = "img/QP2_circle.png" + favicon = "img/favicon.ico" + dateFormat = "January 2, 2006" + commit = false + rss = false + comments = false + useHLJS = true +# gcse = "012345678901234567890:abcdefghijk" # Get your code from google.com/cse. Make sure to go to "Look and Feel" and change Layout to "Full Width" and Theme to "Classic" + +[[Params.bigimg]] + src = "img/Screen2.png" +# desc = "Sphere" + +[Author] +# name = "A. Scemama & E. Giner" + email = "quantum.package@gmail.com" + github = "LCPQ/qp2" + twitter = "quantum_package" +# reddit = "username" +# linkedin = "username" +# xing = "username" +# stackoverflow = "users/XXXXXXX/username" +# snapchat = "username" +# instagram = "username" +# youtube = "user/quantum.package" # or channel/channelname + youtube = "channel/UC3a7Yakg9gk36G3HKDIFaYw" +# soundcloud = "username" +# spotify = "username" +# bandcamp = "username" +# itchio = "username" +# keybase = "username" + + +[[menu.main]] + name = "Source code" + url = "https://github.com/QuantumPackage" + weight = 3 + +[[menu.main]] + name = "Tutorials" + url = "/page/Tutorials" + weight = 1 + +[[menu.main]] + name = "Documentation" + url = "https://quantum-package-scemamamaster.readthedocs.io/" + weight = 2 + diff --git a/content/_index.md b/content/_index.md new file mode 100644 index 00000000..0018b386 --- /dev/null +++ b/content/_index.md @@ -0,0 +1,16 @@ + +*Quantum Package* is an open-source programming environment for quantum +chemistry, which was built for developpers in order to help the design of new +computational methods, especially in the field of wave function theory. + +From the user point of view, *Quantum Package* proposes a stand-alone path to +use optimized selected configuration interaction methods based on the CIPSI +algorithm that can efficiently approcah full CI quality for relatively large +systems. + + +* [Download the source code](http://github.com/QuantumPackage/qp2) +* [Read the documentation](https://quantum-package-scemamamaster.readthedocs.io/) +* [Try it now in your web browser](/page/try) + + diff --git a/content/page/Tutorials.md b/content/page/Tutorials.md new file mode 100644 index 00000000..a9fd8e08 --- /dev/null +++ b/content/page/Tutorials.md @@ -0,0 +1,15 @@ +--- +title: "Video Tutorials" +date: Wed Jan 23 22:33:52 CET 2019 +draft: false +--- + + +--------------------- + +# Installation + +{{< youtube ULhqwUX1KWE >}} + + + diff --git a/content/page/try.md b/content/page/try.md new file mode 100644 index 00000000..186ff11c --- /dev/null +++ b/content/page/try.md @@ -0,0 +1,65 @@ +--- +title: "QP terminal" +date: Wed Jan 23 22:35:00 CET 2019 +draft: false +--- + + +--------------------- + +You can try *Quantum Package* in the terminal below. +To configure the terminal for your favorite text editor, +set the ``EDITOR`` environment variable: + +``` +export EDITOR=vim +``` + + +Here is an example of a few commands you can run to +get the Full-CI energy of the HCN molecule. + +First create a file named `hcn.xyz` containing the *xyz* coordinates. + +``` +$ cat << EOF > hcn.xyz +3 +HCN molecule +C 0.0 0.0 0.0 +H 0.0 0.0 1.064 +N 0.0 0.0 -1.156 +EOF +``` + +Create the EZFIO database as follows: + +``` +qp create_ezfio -b 6-31g hcn.xyz -o hcn +``` + +Run a Hartree-Fock calculation: + +``` +qp run SCF | tee scf.out +``` + +The MOs are saved in the EZFIO database. Now freeze the core electrons: + +``` +qp set_frozen_core +``` + +And run the CIPSI calculation in the valence full CI space: + +``` +qp run fci | tee fci.out +``` + +That's it! + + + + + + + diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 00000000..4ad94b24 Binary files /dev/null and b/static/favicon.ico differ diff --git a/static/favicon/android-icon-144x144.png b/static/favicon/android-icon-144x144.png new file mode 100644 index 00000000..49106b5f Binary files /dev/null and b/static/favicon/android-icon-144x144.png differ diff --git a/static/favicon/android-icon-192x192.png b/static/favicon/android-icon-192x192.png new file mode 100644 index 00000000..cfd97dc1 Binary files /dev/null and b/static/favicon/android-icon-192x192.png differ diff --git a/static/favicon/android-icon-36x36.png b/static/favicon/android-icon-36x36.png new file mode 100644 index 00000000..37f1bd82 Binary files /dev/null and b/static/favicon/android-icon-36x36.png differ diff --git a/static/favicon/android-icon-48x48.png b/static/favicon/android-icon-48x48.png new file mode 100644 index 00000000..b3fde838 Binary files /dev/null and b/static/favicon/android-icon-48x48.png differ diff --git a/static/favicon/android-icon-72x72.png b/static/favicon/android-icon-72x72.png new file mode 100644 index 00000000..3b4b943f Binary files /dev/null and b/static/favicon/android-icon-72x72.png differ diff --git a/static/favicon/android-icon-96x96.png b/static/favicon/android-icon-96x96.png new file mode 100644 index 00000000..6dad7d10 Binary files /dev/null and b/static/favicon/android-icon-96x96.png differ diff --git a/static/favicon/apple-icon-114x114.png b/static/favicon/apple-icon-114x114.png new file mode 100644 index 00000000..374f89eb Binary files /dev/null and b/static/favicon/apple-icon-114x114.png differ diff --git a/static/favicon/apple-icon-120x120.png b/static/favicon/apple-icon-120x120.png new file mode 100644 index 00000000..a522ba14 Binary files /dev/null and b/static/favicon/apple-icon-120x120.png differ diff --git a/static/favicon/apple-icon-144x144.png b/static/favicon/apple-icon-144x144.png new file mode 100644 index 00000000..49106b5f Binary files /dev/null and b/static/favicon/apple-icon-144x144.png differ diff --git a/static/favicon/apple-icon-152x152.png b/static/favicon/apple-icon-152x152.png new file mode 100644 index 00000000..f994e3be Binary files /dev/null and b/static/favicon/apple-icon-152x152.png differ diff --git a/static/favicon/apple-icon-180x180.png b/static/favicon/apple-icon-180x180.png new file mode 100644 index 00000000..7dd7e248 Binary files /dev/null and b/static/favicon/apple-icon-180x180.png differ diff --git a/static/favicon/apple-icon-57x57.png b/static/favicon/apple-icon-57x57.png new file mode 100644 index 00000000..a54fb9e1 Binary files /dev/null and b/static/favicon/apple-icon-57x57.png differ diff --git a/static/favicon/apple-icon-60x60.png b/static/favicon/apple-icon-60x60.png new file mode 100644 index 00000000..0df6eadc Binary files /dev/null and b/static/favicon/apple-icon-60x60.png differ diff --git a/static/favicon/apple-icon-72x72.png b/static/favicon/apple-icon-72x72.png new file mode 100644 index 00000000..3b4b943f Binary files /dev/null and b/static/favicon/apple-icon-72x72.png differ diff --git a/static/favicon/apple-icon-76x76.png b/static/favicon/apple-icon-76x76.png new file mode 100644 index 00000000..a3bfa088 Binary files /dev/null and b/static/favicon/apple-icon-76x76.png differ diff --git a/static/favicon/apple-icon-precomposed.png b/static/favicon/apple-icon-precomposed.png new file mode 100644 index 00000000..d3e48e0f Binary files /dev/null and b/static/favicon/apple-icon-precomposed.png differ diff --git a/static/favicon/apple-icon.png b/static/favicon/apple-icon.png new file mode 100644 index 00000000..d3e48e0f Binary files /dev/null and b/static/favicon/apple-icon.png differ diff --git a/static/favicon/browserconfig.xml b/static/favicon/browserconfig.xml new file mode 100644 index 00000000..7d453d3b --- /dev/null +++ b/static/favicon/browserconfig.xml @@ -0,0 +1,2 @@ + +#ffffff diff --git a/static/favicon/favicon-16x16.png b/static/favicon/favicon-16x16.png new file mode 100644 index 00000000..1f2a3e9a Binary files /dev/null and b/static/favicon/favicon-16x16.png differ diff --git a/static/favicon/favicon-32x32.png b/static/favicon/favicon-32x32.png new file mode 100644 index 00000000..c7012acb Binary files /dev/null and b/static/favicon/favicon-32x32.png differ diff --git a/static/favicon/favicon-96x96.png b/static/favicon/favicon-96x96.png new file mode 100644 index 00000000..6dad7d10 Binary files /dev/null and b/static/favicon/favicon-96x96.png differ diff --git a/static/favicon/manifest.json b/static/favicon/manifest.json new file mode 100644 index 00000000..013d4a6a --- /dev/null +++ b/static/favicon/manifest.json @@ -0,0 +1,41 @@ +{ + "name": "App", + "icons": [ + { + "src": "\/android-icon-36x36.png", + "sizes": "36x36", + "type": "image\/png", + "density": "0.75" + }, + { + "src": "\/android-icon-48x48.png", + "sizes": "48x48", + "type": "image\/png", + "density": "1.0" + }, + { + "src": "\/android-icon-72x72.png", + "sizes": "72x72", + "type": "image\/png", + "density": "1.5" + }, + { + "src": "\/android-icon-96x96.png", + "sizes": "96x96", + "type": "image\/png", + "density": "2.0" + }, + { + "src": "\/android-icon-144x144.png", + "sizes": "144x144", + "type": "image\/png", + "density": "3.0" + }, + { + "src": "\/android-icon-192x192.png", + "sizes": "192x192", + "type": "image\/png", + "density": "4.0" + } + ] +} \ No newline at end of file diff --git a/static/favicon/ms-icon-144x144.png b/static/favicon/ms-icon-144x144.png new file mode 100644 index 00000000..49106b5f Binary files /dev/null and b/static/favicon/ms-icon-144x144.png differ diff --git a/static/favicon/ms-icon-150x150.png b/static/favicon/ms-icon-150x150.png new file mode 100644 index 00000000..f09f6258 Binary files /dev/null and b/static/favicon/ms-icon-150x150.png differ diff --git a/static/favicon/ms-icon-310x310.png b/static/favicon/ms-icon-310x310.png new file mode 100644 index 00000000..8fde9817 Binary files /dev/null and b/static/favicon/ms-icon-310x310.png differ diff --git a/static/favicon/ms-icon-70x70.png b/static/favicon/ms-icon-70x70.png new file mode 100644 index 00000000..15355ee6 Binary files /dev/null and b/static/favicon/ms-icon-70x70.png differ diff --git a/static/img/QP2.png b/static/img/QP2.png new file mode 100644 index 00000000..f15ded98 Binary files /dev/null and b/static/img/QP2.png differ diff --git a/static/img/QP2_circle.png b/static/img/QP2_circle.png new file mode 100644 index 00000000..b8965f94 Binary files /dev/null and b/static/img/QP2_circle.png differ diff --git a/static/img/Screen1.png b/static/img/Screen1.png new file mode 100644 index 00000000..318a3c64 Binary files /dev/null and b/static/img/Screen1.png differ diff --git a/static/img/Screen2.png b/static/img/Screen2.png new file mode 100644 index 00000000..b18757d0 Binary files /dev/null and b/static/img/Screen2.png differ diff --git a/themes/beautifulhugo/.gitattributes b/themes/beautifulhugo/.gitattributes new file mode 100644 index 00000000..bdb0cabc --- /dev/null +++ b/themes/beautifulhugo/.gitattributes @@ -0,0 +1,17 @@ +# Auto detect text files and perform LF normalization +* text=auto + +# Custom for Visual Studio +*.cs diff=csharp + +# Standard to msysgit +*.doc diff=astextplain +*.DOC diff=astextplain +*.docx diff=astextplain +*.DOCX diff=astextplain +*.dot diff=astextplain +*.DOT diff=astextplain +*.pdf diff=astextplain +*.PDF diff=astextplain +*.rtf diff=astextplain +*.RTF diff=astextplain diff --git a/themes/beautifulhugo/.gitignore b/themes/beautifulhugo/.gitignore new file mode 100644 index 00000000..81b9599b --- /dev/null +++ b/themes/beautifulhugo/.gitignore @@ -0,0 +1,50 @@ +# Themes directory of example site; ignored so that we can clone the repo +# inside the themes directory and test the example site with "hugo server". +exampleSite/themes/ + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# Vim swap files +*.swp + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + +.DS_Store +.AppleDouble +.LSOverride + +# Thumbnails +._* + +# Files that might appear on external disk +.Spotlight-V100 +.Trashes + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk diff --git a/themes/beautifulhugo/LICENSE b/themes/beautifulhugo/LICENSE new file mode 100644 index 00000000..7787b8f5 --- /dev/null +++ b/themes/beautifulhugo/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Original work Copyright (c) 2015 Dean Attali +Modified work Copyright (c) 2017 Michael Romero + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/themes/beautifulhugo/README.md b/themes/beautifulhugo/README.md new file mode 100644 index 00000000..25d97f4d --- /dev/null +++ b/themes/beautifulhugo/README.md @@ -0,0 +1,67 @@ +# Beautiful Hugo - A port of Beautiful Jekyll Theme + +![Beautiful Hugo Theme Screenshot](https://github.com/halogenica/beautifulhugo/blob/master/images/screenshot.png) + +## Installation + + $ mkdir themes + $ cd themes + $ git clone https://github.com/halogenica/beautifulhugo.git beautifulhugo + +See [the Hugo documentation](http://gohugo.io/themes/installing/) for more information. + +## Extra Features + +### Responsive + +This theme is designed to look great on both large-screen and small-screen (mobile) devices. + +### Syntax highlighting + +This theme has support for both server side and client side highlighting. + +#### Server side syntax highlighting + +Use the `highlight` shortcode (with Pygments), +see [the Hugo documentation](http://gohugo.io/extras/highlighting/) for more information. + +To use this feature install Pygments (`pip install Pygments`) and add `pygmentsuseclasses = true` to your `config.toml`. + +#### Client side syntax highlighting + +Use triple backticks ( ``` ) or triple tilde ( ~~~ ) around code blocks. + +Client side highlighting does not require pygments to be installed. + +### Disqus support + +To use this feature, uncomment and fill out the `disqusShortname` parameter in `config.toml`. + +### Google Analytics + +To add Google Analytics, simply sign up to [Google Analytics](http://www.google.com/analytics/) to obtain your Google Tracking ID, and add this tracking ID to the `googleAnalytics` parameter in `config.toml`. + +### Commit SHA on the footer + +If the source of your site is in a Git repo, the SHA corresponding to the commit the site is built from can be shown on the footer. To do so, two environment variables have to be set (`GIT_COMMIT_SHA` and `GIT_COMMIT_SHA_SHORT`) and parameter `commit` has to be defined in the config file: + +``` +[Params] + commit = "https://github.com///tree/" +``` + +This can be achieved by running the next command prior to calling Hugo: + +``` + GIT_COMMIT_SHA=`git rev-parse --verify HEAD` GIT_COMMIT_SHA_SHORT=`git rev-parse --short HEAD` +``` + +See at [xor-gate/xor-gate.org](https://github.com/xor-gate/xor-gate.org) an example of how to add it to a continuous integration system. + +## About + +This is a port of the Jekyll theme [Beautiful Jekyll](http://deanattali.com/beautiful-jekyll/) by [Dean Attali](http://deanattali.com/aboutme#contact). It supports most of the features of the original theme. + +## License + +MIT Licensed, see [LICENSE](https://github.com/halogenica/Hugo-BeautifulHugo/blob/master/LICENSE). diff --git a/themes/beautifulhugo/archetypes/default.md b/themes/beautifulhugo/archetypes/default.md new file mode 100644 index 00000000..d9fd3719 --- /dev/null +++ b/themes/beautifulhugo/archetypes/default.md @@ -0,0 +1,4 @@ +--- +subtitle: "" +tags: [] +--- diff --git a/themes/beautifulhugo/data/beautifulhugo/social.toml b/themes/beautifulhugo/data/beautifulhugo/social.toml new file mode 100644 index 00000000..5968c80e --- /dev/null +++ b/themes/beautifulhugo/data/beautifulhugo/social.toml @@ -0,0 +1,121 @@ +[[social_icons]] +id = "email" +url = "mailto:%s" +title = "Email me" +icon = "fas fa-envelope" + +[[social_icons]] +id = "facebook" +url = "https://www.facebook.com/%s" +title = "Facebook" +icon = "fab fa-facebook" + +[[social_icons]] +id = "googleplus" +url = "https://www.plus.google.com/%s" +title = "Google+" +icon = "fab fa-google-plus" + +[[social_icons]] +id = "gitlab" +url = "https://gitlab.com/%s" +title = "GitLab" +icon = "fab fa-gitlab" + +[[social_icons]] +id = "github" +url = "https://github.com/%s" +title = "GitHub" +icon = "fab fa-github" + +[[social_icons]] +id = "twitter" +url = "https://twitter.com/%s" +title = "Twitter" +icon = "fab fa-twitter" + +[[social_icons]] +id = "reddit" +url = "https://reddit.com/u/%s" +title = "Reddit" +icon = "fab fa-reddit-alien" + +[[social_icons]] +id = "linkedin" +url = "https://linkedin.com/in/%s" +title = "LinkedIn" +icon = "fab fa-linkedin" + +[[social_icons]] +id = "xing" +url = "https://www.xing.com/profile/%s" +title = "Xing" +icon = "fab fa-xing" + +[[social_icons]] +id = "stackoverflow" +url = "https://stackoverflow.com/%s" +title = "StackOverflow" +icon = "fab fa-stack-overflow" + +[[social_icons]] +id = "snapchat" +url = "https://www.snapchat.com/add/%s" +title = "Snapchat" +icon = "fab fa-snapchat-ghost" + +[[social_icons]] +id = "instagram" +url = "https://www.instagram.com/%s" +title = "Instagram" +icon = "fab fa-instagram" + +[[social_icons]] +id = "youtube" +url = "https://www.youtube.com/%s" +title = "Youtube" +icon = "fab fa-youtube" + +[[social_icons]] +id = "soundcloud" +url = "https://soundcloud.com/%s" +title = "SoundCloud" +icon = "fab fa-soundcloud" + +[[social_icons]] +id = "spotify" +url = "https://open.spotify.com/user/%s" +title = "Spotify" +icon = "fab fa-spotify" + +[[social_icons]] +id = "bandcamp" +url = "https://%s.bandcamp.com/" +title = "Bandcamp" +icon = "fab fa-bandcamp" + +[[social_icons]] +id = "itchio" +url = "https://itch.io/profile/%s" +title = "itch.io" +icon = "fas fa-gamepad" + +[[social_icons]] +id = "steam" +url = "https://steamcommunity.com/id/%s" +title = "Steam" +icon = "fab fa-steam" + +[[social_icons]] +id = "keybase" +url = "https://keybase.io/%s" +title = "Keybase" +icon = "fab fa-keybase" + +[[social_icons]] +id = "Goodreads" +url = "https://www.goodreads.com/%s" +title = "Goodreads" +icon = "fab fa-goodreads" + + diff --git a/themes/beautifulhugo/i18n/en.yaml b/themes/beautifulhugo/i18n/en.yaml new file mode 100644 index 00000000..64c2f7ba --- /dev/null +++ b/themes/beautifulhugo/i18n/en.yaml @@ -0,0 +1,40 @@ +# Content +- id: dateFormat + translation: "January 2, 2006" +- id: postedOnDate + translation: "Posted on {{ .Count }}" +- id: translationsLabel + translation: "Other languages: " +- id: translationsSeparator + translation: ", " +- id: readMore + translation: "Read More" +- id: olderPosts + translation: "Older Posts" +- id: newerPosts + translation: "Newer Posts" +- id: previousPost + translation: "Previous Post" +- id: nextPost + translation: "Next Post" + +# 404 page +- id: pageNotFound + translation: "Whoops, this page doesn't exist. Move along. (404 error)" + +# Footer +- id: poweredBy # Accepts HTML + translation: 'Hugo v{{ .Hugo.Version }} powered  •  Theme by Beautiful Jekyll adapted to Beautiful Hugo' + +# Navigation +- id: toggleNavigation + translation: "Toggle navigation" +- id: languageSwitcherLabel + translation: "Language" +- id: gcseLabelShort + translation: "Search" +- id: gcseLabelLong + translation: "Search {{ .Site.Title }}" +- id: gcseClose + translation: "Close" + diff --git a/themes/beautifulhugo/i18n/ja.yaml b/themes/beautifulhugo/i18n/ja.yaml new file mode 100644 index 00000000..c7c77b23 --- /dev/null +++ b/themes/beautifulhugo/i18n/ja.yaml @@ -0,0 +1,38 @@ +# Content +- id: dateFormat + translation: "2006年1月2日" +- id: postedOnDate + translation: "{{ .Count }}に投稿" +- id: translationsLabel + translation: "翻訳:" +- id: translationsSeparator + translation: "・" +- id: readMore + translation: "続きを読む" +- id: olderPosts + translation: "古いページ" +- id: newerPosts + translation: "新しいページ" +- id: previousPost + translation: "前ページ" +- id: nextPost + translation: "次ページ" + +# 404 page +- id: pageNotFound + translation: "おっと、このページが存在しない。他にあたってください。(404エラー)" + +# Footer +- id: poweredBy # Accepts HTML + translation: '起動力にHugo v{{ .Hugo.Version }}  •  テーマにBeautiful Jekyllに基づいているBeautiful Hugo' + +# Navigation +- id: toggleNavigation + translation: "メニューを切り替え" +- id: gcseLabelShort + translation: "検索" +- id: gcseLabelLong + translation: "{{ .Site.Title }}を検索" +- id: gcseClose + translation: "閉じる" + diff --git a/themes/beautifulhugo/i18n/ru.yaml b/themes/beautifulhugo/i18n/ru.yaml new file mode 100644 index 00000000..deeaecfc --- /dev/null +++ b/themes/beautifulhugo/i18n/ru.yaml @@ -0,0 +1,40 @@ +# Content +- id: dateFormat + translation: "Январь 2, 2006" +- id: postedOnDate + translation: "Опубликовано {{ .Count }}" +- id: translationsLabel + translation: "Другие языки: " +- id: translationsSeparator + translation: ", " +- id: readMore + translation: "Далее" +- id: olderPosts + translation: "Предыдущие записи" +- id: newerPosts + translation: "Новые записи" +- id: previousPost + translation: "Предыдущий" +- id: nextPost + translation: "Следующий" + +# 404 page +- id: pageNotFound + translation: "Уууупс, страница не найдена. Поищите ещё. (ошибка 404)" + +# Footer +- id: poweredBy # Accepts HTML + translation: 'На базе Hugo v{{ .Hugo.Version }}  •  Тема Beautiful Hugo на базе Beautiful Jekyll' + +# Navigation +- id: toggleNavigation + translation: "Навигация" +- id: languageSwitcherLabel + translation: "Язык" +- id: gcseLabelShort + translation: "Поиск" +- id: gcseLabelLong + translation: "Поиск по {{ .Site.Title }}" +- id: gcseClose + translation: "Закрыть" + diff --git a/themes/beautifulhugo/images/screenshot.png b/themes/beautifulhugo/images/screenshot.png new file mode 100644 index 00000000..0d68a8ad Binary files /dev/null and b/themes/beautifulhugo/images/screenshot.png differ diff --git a/themes/beautifulhugo/images/tn.png b/themes/beautifulhugo/images/tn.png new file mode 100644 index 00000000..97904ccc Binary files /dev/null and b/themes/beautifulhugo/images/tn.png differ diff --git a/themes/beautifulhugo/layouts/404.html b/themes/beautifulhugo/layouts/404.html new file mode 100644 index 00000000..9fbcb45c --- /dev/null +++ b/themes/beautifulhugo/layouts/404.html @@ -0,0 +1,11 @@ +{{ define "header" }}{{ end }} +{{ define "main" }} +
+
+

{{ i18n "pageNotFound" }}

+
+ +
+
+{{ end }} + diff --git a/themes/beautifulhugo/layouts/_default/baseof.html b/themes/beautifulhugo/layouts/_default/baseof.html new file mode 100644 index 00000000..13923d9d --- /dev/null +++ b/themes/beautifulhugo/layouts/_default/baseof.html @@ -0,0 +1,11 @@ + + + {{ partial "head.html" . }} + + {{ partial "nav.html" . }} + {{ block "header" . }}{{ partial "header.html" . }}{{ end }} + {{ block "main" . }}{{ end }} + {{ partial "footer.html" . }} + + + diff --git a/themes/beautifulhugo/layouts/_default/list.html b/themes/beautifulhugo/layouts/_default/list.html new file mode 100644 index 00000000..e9f4c65f --- /dev/null +++ b/themes/beautifulhugo/layouts/_default/list.html @@ -0,0 +1,80 @@ +{{ define "header" }} +
+
+
+
+
+
+

{{ if .Data.Singular }}#{{ end }}{{ .Title }}

+
+
+
+
+
+
+
+{{ end }} +{{ define "main" }} +
+
+
+ {{ with .Content }} +
+ {{.}} +
+ {{ end }} +
+ {{ range .Paginator.Pages }} + + {{ end }} +
+ {{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }} + + {{ end }} +
+
+
+{{ end }} + diff --git a/themes/beautifulhugo/layouts/_default/single.html b/themes/beautifulhugo/layouts/_default/single.html new file mode 100644 index 00000000..d1408f4a --- /dev/null +++ b/themes/beautifulhugo/layouts/_default/single.html @@ -0,0 +1,33 @@ +{{ define "main" }} +
+
+
+
+ {{ .Content }} +
+ + + + {{ if (.Params.comments) | or (and (or (not (isset .Params "comments")) (eq .Params.comments nil)) (.Site.Params.comments)) }} + {{ if .Site.DisqusShortname }} +
+ {{ template "_internal/disqus.html" . }} +
+ {{ end }} + {{ end }} + +
+
+
+{{ end }} diff --git a/themes/beautifulhugo/layouts/_default/terms.html b/themes/beautifulhugo/layouts/_default/terms.html new file mode 100644 index 00000000..6ab687e2 --- /dev/null +++ b/themes/beautifulhugo/layouts/_default/terms.html @@ -0,0 +1,14 @@ +{{ define "main" }} + {{ $data := .Data }} +
+ +
+{{ end }} + diff --git a/themes/beautifulhugo/layouts/index.html b/themes/beautifulhugo/layouts/index.html new file mode 100644 index 00000000..55876971 --- /dev/null +++ b/themes/beautifulhugo/layouts/index.html @@ -0,0 +1,63 @@ +{{ define "main" }} +
+
+
+ {{ with .Content }} +
+ {{.}} +
+ {{ end }} + +
+ {{ $pag := .Paginate (where .Data.Pages "Type" "post") }} + {{ range $pag.Pages }} + + {{ end }} +
+ + {{ if or (.Paginator.HasPrev) (.Paginator.HasNext) }} + + {{ end }} +
+
+
+{{ end }} + diff --git a/themes/beautifulhugo/layouts/partials/disqus.html b/themes/beautifulhugo/layouts/partials/disqus.html new file mode 100644 index 00000000..80295259 --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/disqus.html @@ -0,0 +1,7 @@ +{{ if (.Params.comments) | or (and (or (not (isset .Params "comments")) (eq .Params.comments nil)) (.Site.Params.comments)) }} + {{ if .Site.DisqusShortname }} +
+ {{ template "_internal/disqus.html" . }} +
+ {{ end }} +{{ end }} \ No newline at end of file diff --git a/themes/beautifulhugo/layouts/partials/footer.html b/themes/beautifulhugo/layouts/partials/footer.html new file mode 100644 index 00000000..18b2d3e6 --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/footer.html @@ -0,0 +1,78 @@ +
+
+
+
+ + + +

+ {{ i18n "poweredBy" . | safeHTML }} + {{ with .Site.Params.commit }} • [{{ getenv "GIT_COMMIT_SHA_SHORT" }}]{{ end }} +

+
+
+
+
+ + + + + + + + + + +{{ if ($.Scratch.Get "photoswipeloaded") }} + + + +{{ end }} + +{{ if .Site.Params.gcse }} + +{{ end }} + +{{- partial "footer_custom.html" . }} diff --git a/themes/beautifulhugo/layouts/partials/footer_custom.html b/themes/beautifulhugo/layouts/partials/footer_custom.html new file mode 100644 index 00000000..af173b57 --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/footer_custom.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/themes/beautifulhugo/layouts/partials/head.html b/themes/beautifulhugo/layouts/partials/head.html new file mode 100644 index 00000000..fd0b8a0c --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/head.html @@ -0,0 +1,51 @@ + + + + + +{{- with .Title | default .Site.Title }} + {{ . }} + + +{{- end }} +{{- with .Description | default .Params.subtitle | default .Summary }} + + + +{{- end }} + +{{- with .Site.Params.favicon }} + +{{- end -}} + +{{- with .Params.share_img | default .Params.image | default .Site.Params.logo }} + + +{{- end }} + +{{- with .Site.Author.twitter }} + + +{{- end }} +{{- with .Site.Params.fb_app_id }} + +{{- end }} + + + + + {{ .Hugo.Generator -}} + + + + + + + + + + + +{{- partial "head_custom.html" . }} +{{ template "_internal/google_analytics_async.html" . }} + diff --git a/themes/beautifulhugo/layouts/partials/head_custom.html b/themes/beautifulhugo/layouts/partials/head_custom.html new file mode 100644 index 00000000..3d012e45 --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/head_custom.html @@ -0,0 +1,4 @@ + \ No newline at end of file diff --git a/themes/beautifulhugo/layouts/partials/header.html b/themes/beautifulhugo/layouts/partials/header.html new file mode 100644 index 00000000..2b1e43bb --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/header.html @@ -0,0 +1,70 @@ +{{ if .IsHome }} + {{ $.Scratch.Set "title" .Site.Title }} + {{ if .Site.Params.subtitle }}{{ $.Scratch.Set "subtitle" .Site.Params.subtitle }}{{ end }} + {{ if .Site.Params.bigimg }}{{ $.Scratch.Set "bigimg" .Site.Params.bigimg }}{{ end }} +{{ else }} + {{ $.Scratch.Set "title" .Title }} + {{ if .Params.subtitle }}{{ $.Scratch.Set "subtitle" .Params.subtitle }}{{ end }} + {{ if .Params.bigimg }}{{ $.Scratch.Set "bigimg" .Params.bigimg }}{{ end }} +{{ end }} +{{ $bigimg := $.Scratch.Get "bigimg" }} + +{{ if or $bigimg ($.Scratch.Get "title") }} + {{ if $bigimg }} +
+ {{ end }} + +
+ {{ if $bigimg }} +
+ {{ $subtitle := $.Scratch.Get "subtitle" }} +
+
+
+
+

{{ with $.Scratch.Get "title" }}{{.}}{{ else }}
{{ end }}

+ {{ if $subtitle }} + {{ if eq .Type "page" }} +
+ {{ $subtitle }} + {{ else }} +

{{ $subtitle }}

+ {{ end }} + {{ end }} + {{ if eq .Type "post" }} + {{ partial "post_meta.html" . }} + {{ end }} +
+
+
+
+ +
+ {{end}} +
+ {{ $subtitle := $.Scratch.Get "subtitle" }} +
+
+
+
+

{{ with $.Scratch.Get "title" }}{{.}}{{ else }}
{{ end }}

+ {{ if $subtitle }} + {{ if eq .Type "page" }} +
+ {{ $subtitle }} + {{ else }} +

{{ $subtitle }}

+ {{ end }} + {{ end }} + {{ if eq .Type "post" }} + {{ partial "post_meta.html" . }} + {{ end }} +
+
+
+
+
+
+{{ else }} +
+{{ end }} diff --git a/themes/beautifulhugo/layouts/partials/nav.html b/themes/beautifulhugo/layouts/partials/nav.html new file mode 100644 index 00000000..3d18c1e8 --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/nav.html @@ -0,0 +1,96 @@ + + + +{{ if isset .Site.Params "gcse" }} + +{{ end }} diff --git a/themes/beautifulhugo/layouts/partials/post_meta.html b/themes/beautifulhugo/layouts/partials/post_meta.html new file mode 100644 index 00000000..4a1e679b --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/post_meta.html @@ -0,0 +1,11 @@ + + diff --git a/themes/beautifulhugo/layouts/partials/translation_link.html b/themes/beautifulhugo/layouts/partials/translation_link.html new file mode 100644 index 00000000..1f9a817b --- /dev/null +++ b/themes/beautifulhugo/layouts/partials/translation_link.html @@ -0,0 +1,2 @@ +{{ default .Lang .Site.Language.LanguageName }} + diff --git a/themes/beautifulhugo/layouts/shortcodes/figure.html b/themes/beautifulhugo/layouts/shortcodes/figure.html new file mode 100644 index 00000000..b8dcbc9e --- /dev/null +++ b/themes/beautifulhugo/layouts/shortcodes/figure.html @@ -0,0 +1,29 @@ + + +{{- if not ($.Page.Scratch.Get "figurecount") }}{{ end }} +{{- $.Page.Scratch.Add "figurecount" 1 -}} + +{{- $thumb := .Get "src" | default (printf "%s." (.Get "thumb") | replace (.Get "link") ".") }} +
+
+
+ +
+ {{- if or (or (.Get "title") (.Get "caption")) (.Get "attr")}} +
+ {{- with .Get "title" }}

{{.}}

{{ end }} + {{- if or (.Get "caption") (.Get "attr")}} +

+ {{- .Get "caption" -}} + {{- with .Get "attrlink"}}{{ .Get "attr" }}{{ else }}{{ .Get "attr"}}{{ end -}} +

+ {{- end }} +
+ {{- end }} + {{ with .Get "link" | default (.Get "src") }}{{ end }} +
+
\ No newline at end of file diff --git a/themes/beautifulhugo/layouts/shortcodes/gallery.html b/themes/beautifulhugo/layouts/shortcodes/gallery.html new file mode 100644 index 00000000..bd74f8bc --- /dev/null +++ b/themes/beautifulhugo/layouts/shortcodes/gallery.html @@ -0,0 +1,40 @@ + + +{{- if not ($.Page.Scratch.Get "figurecount") }}{{ end }} +{{- $.Page.Scratch.Add "figurecount" 1 }} + \ No newline at end of file diff --git a/themes/beautifulhugo/layouts/shortcodes/load-photoswipe-theme.html b/themes/beautifulhugo/layouts/shortcodes/load-photoswipe-theme.html new file mode 100644 index 00000000..4b3bfadf --- /dev/null +++ b/themes/beautifulhugo/layouts/shortcodes/load-photoswipe-theme.html @@ -0,0 +1,75 @@ + + + +{{ if not ($.Page.Scratch.Get "photoswipeloaded") }} + {{ $.Page.Scratch.Set "photoswipeloaded" 1 }} + + + + + + + + + + + +{{ end }} \ No newline at end of file diff --git a/themes/beautifulhugo/layouts/shortcodes/load-photoswipe.html b/themes/beautifulhugo/layouts/shortcodes/load-photoswipe.html new file mode 100644 index 00000000..9eec8639 --- /dev/null +++ b/themes/beautifulhugo/layouts/shortcodes/load-photoswipe.html @@ -0,0 +1,71 @@ + + + +{{ if not ($.Page.Scratch.Get "photoswipeloaded") }} + {{ $.Page.Scratch.Set "photoswipeloaded" 1 }} + + + + + + + + + + + + + +{{ end }} \ No newline at end of file diff --git a/themes/beautifulhugo/static/css/highlight.min.css b/themes/beautifulhugo/static/css/highlight.min.css new file mode 100644 index 00000000..77ff6fa3 --- /dev/null +++ b/themes/beautifulhugo/static/css/highlight.min.css @@ -0,0 +1 @@ +.hljs{display:block;overflow-x:auto;padding:0.5em;background:#f9f9f9;-webkit-text-size-adjust:none}.hljs,.hljs-subst,.hljs-tag .hljs-title,.nginx .hljs-title{color:black}.hljs-string,.hljs-title,.hljs-constant,.hljs-parent,.hljs-tag .hljs-value,.hljs-rule .hljs-value,.hljs-preprocessor,.hljs-pragma,.hljs-name,.haml .hljs-symbol,.ruby .hljs-symbol,.ruby .hljs-symbol .hljs-string,.hljs-template_tag,.django .hljs-variable,.smalltalk .hljs-class,.hljs-addition,.hljs-flow,.hljs-stream,.bash .hljs-variable,.pf .hljs-variable,.apache .hljs-tag,.apache .hljs-cbracket,.tex .hljs-command,.tex .hljs-special,.erlang_repl .hljs-function_or_atom,.asciidoc .hljs-header,.markdown .hljs-header,.coffeescript .hljs-attribute{color:#800}.smartquote,.hljs-comment,.hljs-annotation,.diff .hljs-header,.hljs-chunk,.asciidoc .hljs-blockquote,.markdown .hljs-blockquote{color:#888}.hljs-number,.hljs-date,.hljs-regexp,.hljs-literal,.hljs-hexcolor,.smalltalk .hljs-symbol,.smalltalk .hljs-char,.go .hljs-constant,.hljs-change,.lasso .hljs-variable,.makefile .hljs-variable,.asciidoc .hljs-bullet,.markdown .hljs-bullet,.asciidoc .hljs-link_url,.markdown .hljs-link_url{color:#080}.hljs-label,.hljs-javadoc,.ruby .hljs-string,.hljs-decorator,.hljs-filter .hljs-argument,.hljs-localvars,.hljs-array,.hljs-attr_selector,.hljs-important,.hljs-pseudo,.hljs-pi,.haml .hljs-bullet,.hljs-doctype,.hljs-deletion,.hljs-envvar,.hljs-shebang,.apache .hljs-sqbracket,.nginx .hljs-built_in,.tex .hljs-formula,.erlang_repl .hljs-reserved,.hljs-prompt,.asciidoc .hljs-link_label,.markdown .hljs-link_label,.vhdl .hljs-attribute,.clojure .hljs-attribute,.asciidoc .hljs-attribute,.lasso .hljs-attribute,.coffeescript .hljs-property,.hljs-phony{color:#88f}.hljs-keyword,.hljs-id,.hljs-title,.hljs-built_in,.css .hljs-tag,.hljs-javadoctag,.hljs-phpdoc,.hljs-dartdoc,.hljs-yardoctag,.smalltalk .hljs-class,.hljs-winutils,.bash .hljs-variable,.pf .hljs-variable,.apache .hljs-tag,.hljs-type,.hljs-typename,.tex .hljs-command,.asciidoc .hljs-strong,.markdown .hljs-strong,.hljs-request,.hljs-status{font-weight:bold}.asciidoc .hljs-emphasis,.markdown .hljs-emphasis{font-style:italic}.nginx .hljs-built_in{font-weight:normal}.coffeescript .javascript,.javascript .xml,.lasso .markup,.tex .hljs-formula,.xml .javascript,.xml .vbscript,.xml .css,.xml .hljs-cdata{opacity:0.5} diff --git a/themes/beautifulhugo/static/css/hugo-easy-gallery.css b/themes/beautifulhugo/static/css/hugo-easy-gallery.css new file mode 100644 index 00000000..a2c5b32d --- /dev/null +++ b/themes/beautifulhugo/static/css/hugo-easy-gallery.css @@ -0,0 +1,157 @@ +/* +Put this file in /static/css/hugo-easy-gallery.css +Documentation and licence at https://github.com/liwenyip/hugo-easy-gallery/ +*/ + + +/* +Grid Layout Styles +*/ +.gallery { + overflow: hidden; + margin: 10px; + max-width: 768px; +} +.gallery .box { + float: left; + position: relative; + /* Default: 1 tile wide */ + width: 100%; + padding-bottom: 100%; +} +@media only screen and (min-width : 365px) { + /* Tablet view: 2 tiles */ + .gallery .box { + width: 50%; + padding-bottom: 50%; + } +} +@media only screen and (min-width : 480px) { + /* Small desktop / ipad view: 3 tiles */ + .gallery .box { + width: 33.3%; + padding-bottom: 33.3%; /* */ + } +} +@media only screen and (min-width : 9999px) { + /* Medium desktop: 4 tiles */ + .box { + width: 25%; + padding-bottom: 25%; + } +} + +/* +Transition styles +*/ +.gallery.hover-transition figure, +.gallery.hover-effect-zoom .img, +.gallery:not(.caption-effect-appear) figcaption, +.fancy-figure:not(.caption-effect-appear) figcaption { + -webkit-transition: all 0.3s ease-in-out; + -moz-transition: all 0.3s ease-in-out; + -o-transition: all 0.3s ease-in-out; + transition: all 0.3s ease-in-out; +} +/* +figure styles +*/ +figure { + position:relative; /* purely to allow absolution positioning of figcaption */ + overflow: hidden; +} +.gallery figure { + position: absolute; + left: 5px; + right: 5px; + top: 5px; + bottom: 5px; +} +.gallery.hover-effect-grow figure:hover { + transform: scale(1.05); +} +.gallery.hover-effect-shrink figure:hover { + transform: scale(0.95); +} +.gallery.hover-effect-slidedown figure:hover { + transform: translateY(5px); +} +.gallery.hover-effect-slideup figure:hover { + transform: translateY(-5px); +} + +/* +img / a styles +*/ + +.gallery .img { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; + background-size: cover; + background-position: 50% 50%; + background-repeat: no-repeat; +} +.gallery.hover-effect-zoom figure:hover .img { + transform: scale(1.05); +} +.gallery img { + display: none; /* only show the img if not inside a gallery */ +} +figure a { + position: absolute; + left: 0; + right: 0; + top: 0; + bottom: 0; +} + +/* +figcaption styles +*/ +.gallery figcaption, +.fancy-figure figcaption { + position: absolute; + bottom: 0; + left: 0; + right: 0; + background: #000; + color: #FFF; + text-align: center; + font-size: 75%; /* change this if you want bigger text */ + background: rgba(0, 0, 0, 0.5); + opacity: 1; +} +.gallery.caption-position-none figcaption, +.fancy-figure.caption-position-none figcaption { + display: none; +} +.gallery.caption-position-center figcaption, +.fancy-figure.caption-position-center figcaption { + top: 0; + padding: 40% 5px; +} +.gallery.caption-position-bottom figcaption, +.fancy-figure.caption-position-bottom figcaption { + padding: 5px; +} +.gallery.caption-effect-fade figure:not(:hover) figcaption, +.gallery.caption-effect-appear figure:not(:hover) figcaption, +.fancy-figure.caption-effect-fade figure:not(:hover) figcaption, +.fancy-figure.caption-effect-appear figure:not(:hover) figcaption { + background: rgba(0, 0, 0, 0); + opacity: 0; +} +.gallery.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption, +.fancy-figure.caption-effect-slide.caption-position-bottom figure:not(:hover) figcaption { + margin-bottom: -100%; +} +.gallery.caption-effect-slide.caption-position-center figure:not(:hover) figcaption, +.fancy-figure.caption-effect-slide.caption-position-center figure:not(:hover) figcaption { + top: 100%; +} +figcaption p { + margin: auto; /* override style in theme */ +} diff --git a/themes/beautifulhugo/static/css/main-minimal.css b/themes/beautifulhugo/static/css/main-minimal.css new file mode 100644 index 00000000..6baca797 --- /dev/null +++ b/themes/beautifulhugo/static/css/main-minimal.css @@ -0,0 +1,13 @@ +.main-content { + padding-bottom: 50px; +} + +footer.footer-min { + position: fixed; + bottom: 0; + width: 100%; + padding: 3px; + background-color: #f5f5f5; + border-top: 1px solid #eeeeee; + text-align: center; +} \ No newline at end of file diff --git a/themes/beautifulhugo/static/css/main.css b/themes/beautifulhugo/static/css/main.css new file mode 100644 index 00000000..2ffd9993 --- /dev/null +++ b/themes/beautifulhugo/static/css/main.css @@ -0,0 +1,704 @@ +@import url("pygment_highlights.css"); + +/* --- General --- */ + +body { + font-family: 'Lora', 'Times New Roman', serif; + font-size: 18px; + color: #404040; + position: relative; + background: #FFF; +} +p { + line-height: 1.5; + margin: 30px 0; +} +p a { + /* text-decoration: underline */ + color: #008AFF; +} +h1,h2,h3,h4,h5,h6 { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 800; +} +a { + color: #008AFF; +} +a:hover, +a:focus { + color: #0085a1; +} +blockquote { + color: #808080; + font-style: italic; +} +blockquote p:first-child { + margin-top: 0; +} +hr.small { + max-width: 100px; + margin: 15px auto; + border-width: 4px; + border-color: inherit; + border-radius: 3px; +} + +.main-content { + padding-top: 80px; +} +@media only screen and (min-width: 768px) { + .main-content { + padding-top: 130px; + } +} + +.main-explain-area { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + padding: 15px inherit; +} + +.hideme { + display: none; +} + +::-moz-selection { + color: white; + text-shadow: none; + background: #0085a1; +} +::selection { + color: white; + text-shadow: none; + background: #0085a1; +} +img::selection { + color: white; + background: transparent; +} +img::-moz-selection { + color: white; + background: transparent; +} + +img { + display: block; + margin: auto; + max-width: 100%; +} + +.disqus-comments { + margin-top: 30px; +} + +@media only screen and (min-width: 768px) { + .disqus-comments { + margin-top: 40px; + } +} + +/* --- Navbar --- */ + +.navbar-custom { + background: #F5F5F5; + border-bottom: 1px solid #EAEAEA; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; +} + +.navbar-custom .nav li a { + text-transform: uppercase; + font-size: 12px; + letter-spacing: 1px; +} + +.navbar-custom .navbar-brand, +.navbar-custom .nav li a { + font-weight: 800; + color: #404040; +} + +.navbar-custom .navbar-brand:hover, +.navbar-custom .navbar-brand:focus , +.navbar-custom .nav li a:hover, +.navbar-custom .nav li a:focus { + color: #0085a1; +} + +.navbar-custom .navbar-brand-logo { + padding-top: 0; + -webkit-transition: padding .5s ease-in-out; + -moz-transition: padding .5s ease-in-out; + transition: padding .5s ease-in-out; +} +.navbar-custom .navbar-brand-logo img { + height: 50px; + -webkit-transition: height .5s ease-in-out; + -moz-transition: height .5s ease-in-out; + transition: height .5s ease-in-out; +} +.navbar-custom.top-nav-short .navbar-brand-logo { + padding-top: 5px; +} +.navbar-custom.top-nav-short .navbar-brand-logo img { + height: 40px; +} + +@media only screen and (min-width: 768px) { + .navbar-custom { + padding: 20px 0; + -webkit-transition: background .5s ease-in-out,padding .5s ease-in-out; + -moz-transition: background .5s ease-in-out,padding .5s ease-in-out; + transition: background .5s ease-in-out,padding .5s ease-in-out; + } + + .navbar-custom.top-nav-short { + padding: 0; + } +} + +.navbar-custom .avatar-container { + opacity: 1; + position: absolute; + -webkit-transition: opacity 0.5s ease-in-out; + -moz-transition: opacity 0.5s ease-in-out; + transition: opacity 0.5s ease-in-out; + left: 50%; + width: 50px; + margin-top: -25px; +} +.navbar-custom .avatar-container .avatar-img-border { + width: 100%; + border-radius: 50%; + margin-left: -50%; + display: inline-block; + box-shadow: 0 0 8px rgba(0, 0, 0, .8); + -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, .8); + -moz-box-shadow: 0 0 8px rgba(0, 0, 0, .8); +} +.navbar-custom .avatar-container .avatar-img { + width: 100%; + border-radius: 50%; + display: block; +} + +.navbar-custom.top-nav-short .avatar-container{ + opacity: 0; +} + +.navbar-custom.top-nav-expanded .avatar-container { + display: none; +} + +@media only screen and (min-width: 768px) { + .navbar-custom .avatar-container { + width: 100px; + margin-top: -50px; + } + + .navbar-custom .avatar-container .avatar-img-border { + width: 100%; + box-shadow: 1px 1px 2px rgba(0, 0, 0, .8); + -webkit-box-shadow: 1px 1px 2px rgba(0, 0, 0, .8); + -moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, .8); + } + + .navbar-custom .avatar-container .avatar-img { + width: 100%; + } +} + +/* Multi-level navigation links */ +.navbar-custom .nav .navlinks-container { + position: relative; +} +.navbar-custom .nav .navlinks-parent:after { + content: " \25BC"; +} +.navbar-custom .nav .navlinks-children { + width: 100%; + display: none; + word-break: break-word; +} +.navbar-custom .nav .navlinks-container .navlinks-children a { + display: block; + padding: 10px; + padding-left: 30px; + background: #f5f5f5; + text-decoration: none !important; + border-width: 0 1px 1px 1px; + font-weight: normal; +} +@media only screen and (max-width: 767px) { + .navbar-custom .nav .navlinks-container.show-children { + background: #eee; + } + .navbar-custom .nav .navlinks-container.show-children .navlinks-children { + display: block; + } +} +@media only screen and (min-width: 768px) { + .navbar-custom .nav .navlinks-container { + text-align: center; + } + .navbar-custom .nav .navlinks-container:hover { + background: #eee; + } + .navbar-custom .nav .navlinks-container:hover .navlinks-children { + display: block; + } + .navbar-custom .nav .navlinks-children { + position: absolute; + } + .navbar-custom .nav .navlinks-container .navlinks-children a { + padding-left: 10px; + border: 1px solid #eaeaea; + border-width: 0 1px 1px; + } +} + +/* --- Footer --- */ + +footer { + padding: 30px 0; + background: #F5F5F5; + border-top: 1px #EAEAEA solid; + margin-top: 50px; + font-size: 14px; +} + +footer a { + color: #404040; +} + +footer .list-inline { + margin: 0; + padding: 0; +} +footer .copyright { + font-family: Open Sans; + text-align: center; + margin-bottom: 0; +} +footer .theme-by { + text-align: center; + margin: 10px 0 0; +} + +@media only screen and (min-width: 768px) { + footer { + padding: 50px 0; + } + footer .footer-links { + font-size: 18px; + } + footer .copyright { + font-size: 16px; + } +} + +/* --- Post preview --- */ + +.post-preview { + padding: 20px 0; + border-bottom: 1px solid #eee; +} + +@media only screen and (min-width: 768px) { + .post-preview { + padding: 35px 0; + } +} + +.post-preview:last-child { + border-bottom: 0; +} + +.post-preview a { + text-decoration: none; + color: #404040; +} + +.post-preview a:focus, +.post-preview a:hover { + text-decoration: none; + color: #0085a1; +} + +.post-preview .post-title { + font-size: 30px; + margin-top: 0; +} +.post-preview .post-subtitle { + margin: 0; + font-weight: 300; + margin-bottom: 10px; +} +.post-preview .post-meta, +.post-heading .post-meta { + color: #808080; + font-size: 18px; + font-style: italic; + margin: 0 0 10px; +} +.post-preview .post-meta a, +.post-heading .post-meta a { + color: #404040; + text-decoration: none; +} +.post-preview .post-entry { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; +} +.post-entry-container { + display: inline-block; + width: 100%; +} +.post-entry { + width: 100%; +} +.post-image { + float: right; + height: 192px; + width: 192px; + margin-top: -35px; + filter: grayscale(90%); +} +.post-image:hover { + filter: grayscale(0%); +} +.post-image img { + border-radius: 100px; + height: 192px; + width: 192px; +} +.post-preview .post-read-more { + font-weight: 800; + float: right; +} + +@media only screen and (min-width: 768px) { + .post-preview .post-title { + font-size: 36px; + } +} + +/* --- Tags --- */ + +.blog-tags { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + color: #999; + font-size: 15px; + margin-bottom: 30px; +} + +.blog-tags a { + color: #008AFF; + text-decoration: none; + padding: 0px 5px; +} + +.blog-tags a:hover { + border-radius: 2px; + color: #008AFF; + background-color: #CCC; +} + +.post-preview .blog-tags { + margin-top: 5px; + margin-bottom: 0; +} + +@media only screen and (min-width: 768px) { + .post-preview .blog-tags { + margin-top: 10px; + } +} + +@media only screen and (max-width: 500px) { + .post-image, .post-image img { + height: 100px; + width: 100px; + } + + .post-image { + width: 100%; + text-align: center; + margin-top: 0; + float: left; + } +} +/* --- Post and page headers --- */ + +.intro-header { + margin: 80px 0 20px; + position: relative; +} +.intro-header.big-img { + background: no-repeat center center; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + -o-background-size: cover; + margin-top: 51px; /* The small navbar is 50px tall + 1px border */ + margin-bottom: 35px; +} +.intro-header.big-img .big-img-transition { + position: absolute; + width: 100%; + height: 100%; + opacity: 0; + background: no-repeat center center; + -webkit-background-size: cover; + -moz-background-size: cover; + background-size: cover; + -o-background-size: cover; + -webkit-transition: opacity 1s linear; + -moz-transition: opacity 1s linear; + transition: opacity 1s linear; +} +.intro-header .page-heading { + text-align: center; +} +.intro-header.big-img .page-heading, +.intro-header.big-img .post-heading { + padding: 100px 0; + color: #FFF; + text-shadow: 1px 1px 3px #000; +} +.intro-header .page-heading h1 { + margin-top: 0; + font-size: 50px; +} +.intro-header .post-heading h1 { + margin-top: 0; + font-size: 35px; +} +.intro-header .page-heading .page-subheading, +.intro-header .post-heading .post-subheading { + font-size: 27px; + line-height: 1.1; + display: block; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + font-weight: 300; + margin: 10px 0 0; +} +.intro-header .post-heading .post-subheading { + margin-bottom: 20px; +} +.intro-header.big-img .page-heading .page-subheading, +.intro-header.big-img .post-heading .post-subheading { + font-weight: 400; +} +.intro-header.big-img .page-heading hr { + box-shadow: 1px 1px 3px #000; + -webkit-box-shadow: 1px 1px 3px #000; + -moz-box-shadow: 1px 1px 3px #000; +} +.intro-header.big-img .post-heading .post-meta { + color: #EEE; +} +.intro-header.big-img .img-desc { + background: rgba(30, 30, 30, 0.6); + position: absolute; + padding: 5px 10px; + font-size: 11px; + color: #EEE; + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + right: 0; + bottom: 0; + display: none; +} +@media only screen and (min-width: 768px) { + .intro-header { + margin-top: 130px; + } + .intro-header.big-img { + margin-top: 91px; /* Full navbar is small navbar + 20px padding on each side when expanded */ + } + .intro-header.big-img .page-heading, + .intro-header.big-img .post-heading { + padding: 150px 0; + } + .intro-header .page-heading h1 { + font-size: 80px; + } + .intro-header .post-heading h1 { + font-size: 50px; + } + .intro-header.big-img .img-desc { + font-size: 14px; + } +} + +.header-section.has-img .no-img { + margin-top: 0; + background: #FCFCFC; + margin: 0 0 40px; + padding: 20px 0; + box-shadow: 0 0 5px #AAA; +} +/* Many phones are 320 or 360px, so make sure images are a proper aspect ratio in those cases */ +.header-section.has-img .intro-header.no-img { + display: none; +} +@media only screen and (max-width: 365px) { + .header-section.has-img .intro-header.no-img { + display: block; + } + .intro-header.big-img { + width: 100%; + height: 220px; + } + .intro-header.big-img .page-heading, + .intro-header.big-img .post-heading { + display: none; + } + .header-section.has-img .big-img { + margin-bottom: 0; + } +} +@media only screen and (max-width: 325px) { + .intro-header.big-img { + height: 200px; + } +} + +.caption { + text-align: center; + font-size: 14px; + padding: 10px; + font-style: italic; + margin: 0; + display: block; + border-bottom-right-radius: 5px; + border-bottom-left-radius: 5px; +} + +/* --- Pager --- */ + +.pager li a { + font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif; + text-transform: uppercase; + font-size: 14px; + font-weight: 800; + letter-spacing: 1px; + padding: 10px 5px; + background: #FFF; + border-radius: 0; + color: #404040; +} +@media only screen and (min-width: 768px) { + .pager li a { + padding: 15px 25px; + } +} +.pager li a:hover, +.pager li a:focus { + color: #FFF; + background: #0085a1; + border: 1px solid #0085a1; +} + +.pager { + margin: 10px 0 0; +} + +.pager.blog-pager { + margin-top: 0; +} + +@media only screen and (min-width: 768px) { + .pager.blog-pager { + margin-top: 10px; + } +} + +/* --- Tables --- */ + +table { + padding: 0; +} +table tr { + border-top: 1px solid #cccccc; + background-color: #ffffff; + margin: 0; + padding: 0; +} +table tr:nth-child(2n) { + background-color: #f8f8f8; +} +table tr th { + font-weight: bold; + border: 1px solid #cccccc; + text-align: left; + margin: 0; + padding: 6px 13px; +} +table tr td { + border: 1px solid #cccccc; + text-align: left; + margin: 0; + padding: 6px 13px; +} +table tr th :first-child, +table tr td :first-child { + margin-top: 0; +} +table tr th :last-child, +table tr td :last-child { + margin-bottom: 0; +} + +/* --- Code blocks --- */ + +pre { + font-size: 16px; + line-height: 1.5em; +} +pre code { + white-space: pre; +} +pre.highlight, .highlight > pre, td.code pre { + background: #FAFAFA; + background-image: linear-gradient(#F9F9F9 50%, #FDFDFD 50%); + background-repeat: repeat; + background-size: 3em 3em; + background-position: 0px 10px; + border-left: 7px solid #444; +} +code table, code table td, code table th, code table tbody, code table tr, +td.gutter pre { + padding: 0; + border: none; + background-color: #fff; +} +.highlight > pre { + padding: 0; +} +td.code pre { + border-width: 0 0 0 2px; + border-style: solid; + border-color: #444; + border-radius: 0; +} +td.gutter { + padding-top: 3px; +} + +/* --- Social media sharing section --- */ + +#social-share-section { + margin-bottom: 30px; +} + +/* --- Google Custom Search Engine Popup --- */ +#modalSearch table tr, #modalSearch table tr td, #modalSearch table tr th { + border:none; +} +.reset-box-sizing, .reset-box-sizing *, .reset-box-sizing *:before, .reset-box-sizing *:after, .gsc-inline-block { + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +input.gsc-input, .gsc-input-box, .gsc-input-box-hover, .gsc-input-box-focus, .gsc-search-button { + box-sizing: content-box; + line-height: normal; +} diff --git a/themes/beautifulhugo/static/css/pygment_highlights.css b/themes/beautifulhugo/static/css/pygment_highlights.css new file mode 100644 index 00000000..015cf7cf --- /dev/null +++ b/themes/beautifulhugo/static/css/pygment_highlights.css @@ -0,0 +1,66 @@ +/* .highlight { background: #ffffff; } */ +/* .highlight pre { background-color: #fff; font-size: 16px } */ +.highlight .c { color: #999988; font-style: italic } /* Comment */ +.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */ +.highlight .k { font-weight: bold } /* Keyword */ +.highlight .o { font-weight: bold } /* Operator */ +.highlight .cm { color: #999988; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #999999; font-weight: bold } /* Comment.Preproc */ +.highlight .c1 { color: #999988; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #999999; font-weight: bold; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */ +.highlight .gd .x { color: #000000; background-color: #ffaaaa } /* Generic.Deleted.Specific */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #aa0000 } /* Generic.Error */ +.highlight .gh { color: #999999 } /* Generic.Heading */ +.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */ +.highlight .gi .x { color: #000000; background-color: #aaffaa } /* Generic.Inserted.Specific */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #555555 } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #aaaaaa } /* Generic.Subheading */ +.highlight .gt { color: #aa0000 } /* Generic.Traceback */ +.highlight .kc { font-weight: bold } /* Keyword.Constant */ +.highlight .kd { font-weight: bold } /* Keyword.Declaration */ +.highlight .kp { font-weight: bold } /* Keyword.Pseudo */ +.highlight .kr { font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #445588; font-weight: bold } /* Keyword.Type */ +.highlight .m { color: #009999 } /* Literal.Number */ +.highlight .s { color: #d14 } /* Literal.String */ +.highlight .na { color: #008080 } /* Name.Attribute */ +.highlight .nb { color: #0086B3 } /* Name.Builtin */ +.highlight .nc { color: #445588; font-weight: bold } /* Name.Class */ +.highlight .no { color: #008080 } /* Name.Constant */ +.highlight .ni { color: #800080 } /* Name.Entity */ +.highlight .ne { color: #990000; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #990000; font-weight: bold } /* Name.Function */ +.highlight .nn { color: #555555 } /* Name.Namespace */ +.highlight .nt { color: #000080 } /* Name.Tag */ +.highlight .nv { color: #008080 } /* Name.Variable */ +.highlight .ow { font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mf { color: #009999 } /* Literal.Number.Float */ +.highlight .mh { color: #009999 } /* Literal.Number.Hex */ +.highlight .mi { color: #009999 } /* Literal.Number.Integer */ +.highlight .mo { color: #009999 } /* Literal.Number.Oct */ +.highlight .sb { color: #d14 } /* Literal.String.Backtick */ +.highlight .sc { color: #d14 } /* Literal.String.Char */ +.highlight .sd { color: #d14 } /* Literal.String.Doc */ +.highlight .s2 { color: #d14 } /* Literal.String.Double */ +.highlight .se { color: #d14 } /* Literal.String.Escape */ +.highlight .sh { color: #d14 } /* Literal.String.Heredoc */ +.highlight .si { color: #d14 } /* Literal.String.Interpol */ +.highlight .sx { color: #d14 } /* Literal.String.Other */ +.highlight .sr { color: #009926 } /* Literal.String.Regex */ +.highlight .s1 { color: #d14 } /* Literal.String.Single */ +.highlight .ss { color: #990073 } /* Literal.String.Symbol */ +.highlight .bp { color: #999999 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #008080 } /* Name.Variable.Class */ +.highlight .vg { color: #008080 } /* Name.Variable.Global */ +.highlight .vi { color: #008080 } /* Name.Variable.Instance */ +.highlight .il { color: #009999 } /* Literal.Number.Integer.Long */ + +/* Make line numbers unselectable: excludes line numbers from copy-paste user ops */ +.highlight .lineno {color:rgba(0,0,0,0.3);padding: 0 10px;-webkit-user-select: none;-moz-user-select: none; -o-user-select: none;} +.lineno::-moz-selection {background-color: transparent;} /* Mozilla specific */ +.lineno::selection {background-color: transparent;} /* Other major browsers */ diff --git a/themes/beautifulhugo/static/img/404-southpark.jpg b/themes/beautifulhugo/static/img/404-southpark.jpg new file mode 100644 index 00000000..354eb125 Binary files /dev/null and b/themes/beautifulhugo/static/img/404-southpark.jpg differ diff --git a/themes/beautifulhugo/static/img/avatar-favicon.png b/themes/beautifulhugo/static/img/avatar-favicon.png new file mode 100644 index 00000000..94aed04e Binary files /dev/null and b/themes/beautifulhugo/static/img/avatar-favicon.png differ diff --git a/themes/beautifulhugo/static/img/avatar-icon.png b/themes/beautifulhugo/static/img/avatar-icon.png new file mode 100644 index 00000000..cc831790 Binary files /dev/null and b/themes/beautifulhugo/static/img/avatar-icon.png differ diff --git a/themes/beautifulhugo/static/img/favicon.ico b/themes/beautifulhugo/static/img/favicon.ico new file mode 100644 index 00000000..3479cbbb Binary files /dev/null and b/themes/beautifulhugo/static/img/favicon.ico differ diff --git a/themes/beautifulhugo/static/img/hexagon-thumb.jpg b/themes/beautifulhugo/static/img/hexagon-thumb.jpg new file mode 100644 index 00000000..2572be9d Binary files /dev/null and b/themes/beautifulhugo/static/img/hexagon-thumb.jpg differ diff --git a/themes/beautifulhugo/static/img/hexagon.jpg b/themes/beautifulhugo/static/img/hexagon.jpg new file mode 100644 index 00000000..cf244bba Binary files /dev/null and b/themes/beautifulhugo/static/img/hexagon.jpg differ diff --git a/themes/beautifulhugo/static/img/path.jpg b/themes/beautifulhugo/static/img/path.jpg new file mode 100644 index 00000000..5855c091 Binary files /dev/null and b/themes/beautifulhugo/static/img/path.jpg differ diff --git a/themes/beautifulhugo/static/img/sphere-thumb.jpg b/themes/beautifulhugo/static/img/sphere-thumb.jpg new file mode 100644 index 00000000..fa5e2ee4 Binary files /dev/null and b/themes/beautifulhugo/static/img/sphere-thumb.jpg differ diff --git a/themes/beautifulhugo/static/img/sphere.jpg b/themes/beautifulhugo/static/img/sphere.jpg new file mode 100644 index 00000000..820cf7eb Binary files /dev/null and b/themes/beautifulhugo/static/img/sphere.jpg differ diff --git a/themes/beautifulhugo/static/img/triangle-thumb.jpg b/themes/beautifulhugo/static/img/triangle-thumb.jpg new file mode 100644 index 00000000..8eb0761f Binary files /dev/null and b/themes/beautifulhugo/static/img/triangle-thumb.jpg differ diff --git a/themes/beautifulhugo/static/img/triangle.jpg b/themes/beautifulhugo/static/img/triangle.jpg new file mode 100644 index 00000000..2dfbcec7 Binary files /dev/null and b/themes/beautifulhugo/static/img/triangle.jpg differ diff --git a/themes/beautifulhugo/static/js/bootstrap.js b/themes/beautifulhugo/static/js/bootstrap.js new file mode 100644 index 00000000..4139b6fc --- /dev/null +++ b/themes/beautifulhugo/static/js/bootstrap.js @@ -0,0 +1,2306 @@ +/*! + * Bootstrap v3.3.2 (http://getbootstrap.com) + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + */ + +if (typeof jQuery === 'undefined') { + throw new Error('Bootstrap\'s JavaScript requires jQuery') +} + ++function ($) { + 'use strict'; + var version = $.fn.jquery.split(' ')[0].split('.') + if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1)) { + throw new Error('Bootstrap\'s JavaScript requires jQuery version 1.9.1 or higher') + } +}(jQuery); + +/* ======================================================================== + * Bootstrap: transition.js v3.3.2 + * http://getbootstrap.com/javascript/#transitions + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) + // ============================================================ + + function transitionEnd() { + var el = document.createElement('bootstrap') + + var transEndEventNames = { + WebkitTransition : 'webkitTransitionEnd', + MozTransition : 'transitionend', + OTransition : 'oTransitionEnd otransitionend', + transition : 'transitionend' + } + + for (var name in transEndEventNames) { + if (el.style[name] !== undefined) { + return { end: transEndEventNames[name] } + } + } + + return false // explicit for ie8 ( ._.) + } + + // http://blog.alexmaccaw.com/css-transitions + $.fn.emulateTransitionEnd = function (duration) { + var called = false + var $el = this + $(this).one('bsTransitionEnd', function () { called = true }) + var callback = function () { if (!called) $($el).trigger($.support.transition.end) } + setTimeout(callback, duration) + return this + } + + $(function () { + $.support.transition = transitionEnd() + + if (!$.support.transition) return + + $.event.special.bsTransitionEnd = { + bindType: $.support.transition.end, + delegateType: $.support.transition.end, + handle: function (e) { + if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) + } + } + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: alert.js v3.3.2 + * http://getbootstrap.com/javascript/#alerts + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // ALERT CLASS DEFINITION + // ====================== + + var dismiss = '[data-dismiss="alert"]' + var Alert = function (el) { + $(el).on('click', dismiss, this.close) + } + + Alert.VERSION = '3.3.2' + + Alert.TRANSITION_DURATION = 150 + + Alert.prototype.close = function (e) { + var $this = $(this) + var selector = $this.attr('data-target') + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 + } + + var $parent = $(selector) + + if (e) e.preventDefault() + + if (!$parent.length) { + $parent = $this.closest('.alert') + } + + $parent.trigger(e = $.Event('close.bs.alert')) + + if (e.isDefaultPrevented()) return + + $parent.removeClass('in') + + function removeElement() { + // detach from parent, fire event then clean up data + $parent.detach().trigger('closed.bs.alert').remove() + } + + $.support.transition && $parent.hasClass('fade') ? + $parent + .one('bsTransitionEnd', removeElement) + .emulateTransitionEnd(Alert.TRANSITION_DURATION) : + removeElement() + } + + + // ALERT PLUGIN DEFINITION + // ======================= + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.alert') + + if (!data) $this.data('bs.alert', (data = new Alert(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + var old = $.fn.alert + + $.fn.alert = Plugin + $.fn.alert.Constructor = Alert + + + // ALERT NO CONFLICT + // ================= + + $.fn.alert.noConflict = function () { + $.fn.alert = old + return this + } + + + // ALERT DATA-API + // ============== + + $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: button.js v3.3.2 + * http://getbootstrap.com/javascript/#buttons + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // BUTTON PUBLIC CLASS DEFINITION + // ============================== + + var Button = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Button.DEFAULTS, options) + this.isLoading = false + } + + Button.VERSION = '3.3.2' + + Button.DEFAULTS = { + loadingText: 'loading...' + } + + Button.prototype.setState = function (state) { + var d = 'disabled' + var $el = this.$element + var val = $el.is('input') ? 'val' : 'html' + var data = $el.data() + + state = state + 'Text' + + if (data.resetText == null) $el.data('resetText', $el[val]()) + + // push to event loop to allow forms to submit + setTimeout($.proxy(function () { + $el[val](data[state] == null ? this.options[state] : data[state]) + + if (state == 'loadingText') { + this.isLoading = true + $el.addClass(d).attr(d, d) + } else if (this.isLoading) { + this.isLoading = false + $el.removeClass(d).removeAttr(d) + } + }, this), 0) + } + + Button.prototype.toggle = function () { + var changed = true + var $parent = this.$element.closest('[data-toggle="buttons"]') + + if ($parent.length) { + var $input = this.$element.find('input') + if ($input.prop('type') == 'radio') { + if ($input.prop('checked') && this.$element.hasClass('active')) changed = false + else $parent.find('.active').removeClass('active') + } + if (changed) $input.prop('checked', !this.$element.hasClass('active')).trigger('change') + } else { + this.$element.attr('aria-pressed', !this.$element.hasClass('active')) + } + + if (changed) this.$element.toggleClass('active') + } + + + // BUTTON PLUGIN DEFINITION + // ======================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.button') + var options = typeof option == 'object' && option + + if (!data) $this.data('bs.button', (data = new Button(this, options))) + + if (option == 'toggle') data.toggle() + else if (option) data.setState(option) + }) + } + + var old = $.fn.button + + $.fn.button = Plugin + $.fn.button.Constructor = Button + + + // BUTTON NO CONFLICT + // ================== + + $.fn.button.noConflict = function () { + $.fn.button = old + return this + } + + + // BUTTON DATA-API + // =============== + + $(document) + .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { + var $btn = $(e.target) + if (!$btn.hasClass('btn')) $btn = $btn.closest('.btn') + Plugin.call($btn, 'toggle') + e.preventDefault() + }) + .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { + $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: carousel.js v3.3.2 + * http://getbootstrap.com/javascript/#carousel + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // CAROUSEL CLASS DEFINITION + // ========================= + + var Carousel = function (element, options) { + this.$element = $(element) + this.$indicators = this.$element.find('.carousel-indicators') + this.options = options + this.paused = + this.sliding = + this.interval = + this.$active = + this.$items = null + + this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) + + this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element + .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) + .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) + } + + Carousel.VERSION = '3.3.2' + + Carousel.TRANSITION_DURATION = 600 + + Carousel.DEFAULTS = { + interval: 5000, + pause: 'hover', + wrap: true, + keyboard: true + } + + Carousel.prototype.keydown = function (e) { + if (/input|textarea/i.test(e.target.tagName)) return + switch (e.which) { + case 37: this.prev(); break + case 39: this.next(); break + default: return + } + + e.preventDefault() + } + + Carousel.prototype.cycle = function (e) { + e || (this.paused = false) + + this.interval && clearInterval(this.interval) + + this.options.interval + && !this.paused + && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) + + return this + } + + Carousel.prototype.getItemIndex = function (item) { + this.$items = item.parent().children('.item') + return this.$items.index(item || this.$active) + } + + Carousel.prototype.getItemForDirection = function (direction, active) { + var activeIndex = this.getItemIndex(active) + var willWrap = (direction == 'prev' && activeIndex === 0) + || (direction == 'next' && activeIndex == (this.$items.length - 1)) + if (willWrap && !this.options.wrap) return active + var delta = direction == 'prev' ? -1 : 1 + var itemIndex = (activeIndex + delta) % this.$items.length + return this.$items.eq(itemIndex) + } + + Carousel.prototype.to = function (pos) { + var that = this + var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) + + if (pos > (this.$items.length - 1) || pos < 0) return + + if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" + if (activeIndex == pos) return this.pause().cycle() + + return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) + } + + Carousel.prototype.pause = function (e) { + e || (this.paused = true) + + if (this.$element.find('.next, .prev').length && $.support.transition) { + this.$element.trigger($.support.transition.end) + this.cycle(true) + } + + this.interval = clearInterval(this.interval) + + return this + } + + Carousel.prototype.next = function () { + if (this.sliding) return + return this.slide('next') + } + + Carousel.prototype.prev = function () { + if (this.sliding) return + return this.slide('prev') + } + + Carousel.prototype.slide = function (type, next) { + var $active = this.$element.find('.item.active') + var $next = next || this.getItemForDirection(type, $active) + var isCycling = this.interval + var direction = type == 'next' ? 'left' : 'right' + var that = this + + if ($next.hasClass('active')) return (this.sliding = false) + + var relatedTarget = $next[0] + var slideEvent = $.Event('slide.bs.carousel', { + relatedTarget: relatedTarget, + direction: direction + }) + this.$element.trigger(slideEvent) + if (slideEvent.isDefaultPrevented()) return + + this.sliding = true + + isCycling && this.pause() + + if (this.$indicators.length) { + this.$indicators.find('.active').removeClass('active') + var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) + $nextIndicator && $nextIndicator.addClass('active') + } + + var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid" + if ($.support.transition && this.$element.hasClass('slide')) { + $next.addClass(type) + $next[0].offsetWidth // force reflow + $active.addClass(direction) + $next.addClass(direction) + $active + .one('bsTransitionEnd', function () { + $next.removeClass([type, direction].join(' ')).addClass('active') + $active.removeClass(['active', direction].join(' ')) + that.sliding = false + setTimeout(function () { + that.$element.trigger(slidEvent) + }, 0) + }) + .emulateTransitionEnd(Carousel.TRANSITION_DURATION) + } else { + $active.removeClass('active') + $next.addClass('active') + this.sliding = false + this.$element.trigger(slidEvent) + } + + isCycling && this.cycle() + + return this + } + + + // CAROUSEL PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.carousel') + var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) + var action = typeof option == 'string' ? option : options.slide + + if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) + if (typeof option == 'number') data.to(option) + else if (action) data[action]() + else if (options.interval) data.pause().cycle() + }) + } + + var old = $.fn.carousel + + $.fn.carousel = Plugin + $.fn.carousel.Constructor = Carousel + + + // CAROUSEL NO CONFLICT + // ==================== + + $.fn.carousel.noConflict = function () { + $.fn.carousel = old + return this + } + + + // CAROUSEL DATA-API + // ================= + + var clickHandler = function (e) { + var href + var $this = $(this) + var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 + if (!$target.hasClass('carousel')) return + var options = $.extend({}, $target.data(), $this.data()) + var slideIndex = $this.attr('data-slide-to') + if (slideIndex) options.interval = false + + Plugin.call($target, options) + + if (slideIndex) { + $target.data('bs.carousel').to(slideIndex) + } + + e.preventDefault() + } + + $(document) + .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) + .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) + + $(window).on('load', function () { + $('[data-ride="carousel"]').each(function () { + var $carousel = $(this) + Plugin.call($carousel, $carousel.data()) + }) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: collapse.js v3.3.2 + * http://getbootstrap.com/javascript/#collapse + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // COLLAPSE PUBLIC CLASS DEFINITION + // ================================ + + var Collapse = function (element, options) { + this.$element = $(element) + this.options = $.extend({}, Collapse.DEFAULTS, options) + this.$trigger = $(this.options.trigger).filter('[href="#' + element.id + '"], [data-target="#' + element.id + '"]') + this.transitioning = null + + if (this.options.parent) { + this.$parent = this.getParent() + } else { + this.addAriaAndCollapsedClass(this.$element, this.$trigger) + } + + if (this.options.toggle) this.toggle() + } + + Collapse.VERSION = '3.3.2' + + Collapse.TRANSITION_DURATION = 350 + + Collapse.DEFAULTS = { + toggle: true, + trigger: '[data-toggle="collapse"]' + } + + Collapse.prototype.dimension = function () { + var hasWidth = this.$element.hasClass('width') + return hasWidth ? 'width' : 'height' + } + + Collapse.prototype.show = function () { + if (this.transitioning || this.$element.hasClass('in')) return + + var activesData + var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') + + if (actives && actives.length) { + activesData = actives.data('bs.collapse') + if (activesData && activesData.transitioning) return + } + + var startEvent = $.Event('show.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + if (actives && actives.length) { + Plugin.call(actives, 'hide') + activesData || actives.data('bs.collapse', null) + } + + var dimension = this.dimension() + + this.$element + .removeClass('collapse') + .addClass('collapsing')[dimension](0) + .attr('aria-expanded', true) + + this.$trigger + .removeClass('collapsed') + .attr('aria-expanded', true) + + this.transitioning = 1 + + var complete = function () { + this.$element + .removeClass('collapsing') + .addClass('collapse in')[dimension]('') + this.transitioning = 0 + this.$element + .trigger('shown.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + var scrollSize = $.camelCase(['scroll', dimension].join('-')) + + this.$element + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) + } + + Collapse.prototype.hide = function () { + if (this.transitioning || !this.$element.hasClass('in')) return + + var startEvent = $.Event('hide.bs.collapse') + this.$element.trigger(startEvent) + if (startEvent.isDefaultPrevented()) return + + var dimension = this.dimension() + + this.$element[dimension](this.$element[dimension]())[0].offsetHeight + + this.$element + .addClass('collapsing') + .removeClass('collapse in') + .attr('aria-expanded', false) + + this.$trigger + .addClass('collapsed') + .attr('aria-expanded', false) + + this.transitioning = 1 + + var complete = function () { + this.transitioning = 0 + this.$element + .removeClass('collapsing') + .addClass('collapse') + .trigger('hidden.bs.collapse') + } + + if (!$.support.transition) return complete.call(this) + + this.$element + [dimension](0) + .one('bsTransitionEnd', $.proxy(complete, this)) + .emulateTransitionEnd(Collapse.TRANSITION_DURATION) + } + + Collapse.prototype.toggle = function () { + this[this.$element.hasClass('in') ? 'hide' : 'show']() + } + + Collapse.prototype.getParent = function () { + return $(this.options.parent) + .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') + .each($.proxy(function (i, element) { + var $element = $(element) + this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) + }, this)) + .end() + } + + Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { + var isOpen = $element.hasClass('in') + + $element.attr('aria-expanded', isOpen) + $trigger + .toggleClass('collapsed', !isOpen) + .attr('aria-expanded', isOpen) + } + + function getTargetFromTrigger($trigger) { + var href + var target = $trigger.attr('data-target') + || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 + + return $(target) + } + + + // COLLAPSE PLUGIN DEFINITION + // ========================== + + function Plugin(option) { + return this.each(function () { + var $this = $(this) + var data = $this.data('bs.collapse') + var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) + + if (!data && options.toggle && option == 'show') options.toggle = false + if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) + if (typeof option == 'string') data[option]() + }) + } + + var old = $.fn.collapse + + $.fn.collapse = Plugin + $.fn.collapse.Constructor = Collapse + + + // COLLAPSE NO CONFLICT + // ==================== + + $.fn.collapse.noConflict = function () { + $.fn.collapse = old + return this + } + + + // COLLAPSE DATA-API + // ================= + + $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { + var $this = $(this) + + if (!$this.attr('data-target')) e.preventDefault() + + var $target = getTargetFromTrigger($this) + var data = $target.data('bs.collapse') + var option = data ? 'toggle' : $.extend({}, $this.data(), { trigger: this }) + + Plugin.call($target, option) + }) + +}(jQuery); + +/* ======================================================================== + * Bootstrap: dropdown.js v3.3.2 + * http://getbootstrap.com/javascript/#dropdowns + * ======================================================================== + * Copyright 2011-2015 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * ======================================================================== */ + + ++function ($) { + 'use strict'; + + // DROPDOWN CLASS DEFINITION + // ========================= + + var backdrop = '.dropdown-backdrop' + var toggle = '[data-toggle="dropdown"]' + var Dropdown = function (element) { + $(element).on('click.bs.dropdown', this.toggle) + } + + Dropdown.VERSION = '3.3.2' + + Dropdown.prototype.toggle = function (e) { + var $this = $(this) + + if ($this.is('.disabled, :disabled')) return + + var $parent = getParent($this) + var isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { + // if mobile we use a backdrop because click events don't delegate + $('