├── 404.php ├── LICENSE ├── README.md ├── category.php ├── comments.php ├── css ├── comments.css ├── lightbox.min.css ├── style.css └── tocbot.css ├── files.php ├── footer.php ├── functions.php ├── header.php ├── images ├── apple-touch-icon.png ├── close.png ├── favicon-192x192.png ├── favicon.ico ├── loading.gif ├── logo.png ├── next.png ├── prev.png └── squares.svg ├── index.php ├── js ├── jquery.min.js ├── lazyload.js ├── lightbox.min.js ├── main.js ├── pangu.min.js └── tocbot.min.js ├── lib ├── font-awesome │ ├── css │ │ └── font-awesome.min.css │ └── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ ├── fontawesome-webfont.woff │ │ └── fontawesome-webfont.woff2 ├── highlight.min.js ├── meslo-LG │ ├── fonts │ │ └── MesloLGS-Regular.woff │ └── styles.css └── typed.js ├── manifest.json ├── page.php ├── post.php ├── preview.png ├── preview2.png ├── preview3.png ├── screenshot.png ├── sw.js └── tag.php /404.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
7 | 33 |
34 |
35 |
36 | [root@options->title(); ?>]# echo url
> 404 -
37 |
38 |
39 |
40 |
41 | 42 | need('footer.php'); ?> -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 3, 29 June 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU General Public License is a free, copyleft license for 11 | software and other kinds of works. 12 | 13 | The licenses for most software and other practical works are designed 14 | to take away your freedom to share and change the works. By contrast, 15 | the GNU General Public License is intended to guarantee your freedom to 16 | share and change all versions of a program--to make sure it remains free 17 | software for all its users. We, the Free Software Foundation, use the 18 | GNU General Public License for most of our software; it applies also to 19 | any other work released this way by its authors. You can apply it to 20 | your programs, too. 21 | 22 | When we speak of free software, we are referring to freedom, not 23 | price. Our General Public Licenses are designed to make sure that you 24 | have the freedom to distribute copies of free software (and charge for 25 | them if you wish), that you receive source code or can get it if you 26 | want it, that you can change the software or use pieces of it in new 27 | free programs, and that you know you can do these things. 28 | 29 | To protect your rights, we need to prevent others from denying you 30 | these rights or asking you to surrender the rights. Therefore, you have 31 | certain responsibilities if you distribute copies of the software, or if 32 | you modify it: responsibilities to respect the freedom of others. 33 | 34 | For example, if you distribute copies of such a program, whether 35 | gratis or for a fee, you must pass on to the recipients the same 36 | freedoms that you received. You must make sure that they, too, receive 37 | or can get the source code. And you must show them these terms so they 38 | know their rights. 39 | 40 | Developers that use the GNU GPL protect your rights with two steps: 41 | (1) assert copyright on the software, and (2) offer you this License 42 | giving you legal permission to copy, distribute and/or modify it. 43 | 44 | For the developers' and authors' protection, the GPL clearly explains 45 | that there is no warranty for this free software. For both users' and 46 | authors' sake, the GPL requires that modified versions be marked as 47 | changed, so that their problems will not be attributed erroneously to 48 | authors of previous versions. 49 | 50 | Some devices are designed to deny users access to install or run 51 | modified versions of the software inside them, although the manufacturer 52 | can do so. This is fundamentally incompatible with the aim of 53 | protecting users' freedom to change the software. The systematic 54 | pattern of such abuse occurs in the area of products for individuals to 55 | use, which is precisely where it is most unacceptable. Therefore, we 56 | have designed this version of the GPL to prohibit the practice for those 57 | products. If such problems arise substantially in other domains, we 58 | stand ready to extend this provision to those domains in future versions 59 | of the GPL, as needed to protect the freedom of users. 60 | 61 | Finally, every program is threatened constantly by software patents. 62 | States should not allow patents to restrict development and use of 63 | software on general-purpose computers, but in those that do, we wish to 64 | avoid the special danger that patents applied to a free program could 65 | make it effectively proprietary. To prevent this, the GPL assures that 66 | patents cannot be used to render the program non-free. 67 | 68 | The precise terms and conditions for copying, distribution and 69 | modification follow. 70 | 71 | TERMS AND CONDITIONS 72 | 73 | 0. Definitions. 74 | 75 | "This License" refers to version 3 of the GNU General Public License. 76 | 77 | "Copyright" also means copyright-like laws that apply to other kinds of 78 | works, such as semiconductor masks. 79 | 80 | "The Program" refers to any copyrightable work licensed under this 81 | License. Each licensee is addressed as "you". "Licensees" and 82 | "recipients" may be individuals or organizations. 83 | 84 | To "modify" a work means to copy from or adapt all or part of the work 85 | in a fashion requiring copyright permission, other than the making of an 86 | exact copy. The resulting work is called a "modified version" of the 87 | earlier work or a work "based on" the earlier work. 88 | 89 | A "covered work" means either the unmodified Program or a work based 90 | on the Program. 91 | 92 | To "propagate" a work means to do anything with it that, without 93 | permission, would make you directly or secondarily liable for 94 | infringement under applicable copyright law, except executing it on a 95 | computer or modifying a private copy. Propagation includes copying, 96 | distribution (with or without modification), making available to the 97 | public, and in some countries other activities as well. 98 | 99 | To "convey" a work means any kind of propagation that enables other 100 | parties to make or receive copies. Mere interaction with a user through 101 | a computer network, with no transfer of a copy, is not conveying. 102 | 103 | An interactive user interface displays "Appropriate Legal Notices" 104 | to the extent that it includes a convenient and prominently visible 105 | feature that (1) displays an appropriate copyright notice, and (2) 106 | tells the user that there is no warranty for the work (except to the 107 | extent that warranties are provided), that licensees may convey the 108 | work under this License, and how to view a copy of this License. If 109 | the interface presents a list of user commands or options, such as a 110 | menu, a prominent item in the list meets this criterion. 111 | 112 | 1. Source Code. 113 | 114 | The "source code" for a work means the preferred form of the work 115 | for making modifications to it. "Object code" means any non-source 116 | form of a work. 117 | 118 | A "Standard Interface" means an interface that either is an official 119 | standard defined by a recognized standards body, or, in the case of 120 | interfaces specified for a particular programming language, one that 121 | is widely used among developers working in that language. 122 | 123 | The "System Libraries" of an executable work include anything, other 124 | than the work as a whole, that (a) is included in the normal form of 125 | packaging a Major Component, but which is not part of that Major 126 | Component, and (b) serves only to enable use of the work with that 127 | Major Component, or to implement a Standard Interface for which an 128 | implementation is available to the public in source code form. A 129 | "Major Component", in this context, means a major essential component 130 | (kernel, window system, and so on) of the specific operating system 131 | (if any) on which the executable work runs, or a compiler used to 132 | produce the work, or an object code interpreter used to run it. 133 | 134 | The "Corresponding Source" for a work in object code form means all 135 | the source code needed to generate, install, and (for an executable 136 | work) run the object code and to modify the work, including scripts to 137 | control those activities. However, it does not include the work's 138 | System Libraries, or general-purpose tools or generally available free 139 | programs which are used unmodified in performing those activities but 140 | which are not part of the work. For example, Corresponding Source 141 | includes interface definition files associated with source files for 142 | the work, and the source code for shared libraries and dynamically 143 | linked subprograms that the work is specifically designed to require, 144 | such as by intimate data communication or control flow between those 145 | subprograms and other parts of the work. 146 | 147 | The Corresponding Source need not include anything that users 148 | can regenerate automatically from other parts of the Corresponding 149 | Source. 150 | 151 | The Corresponding Source for a work in source code form is that 152 | same work. 153 | 154 | 2. Basic Permissions. 155 | 156 | All rights granted under this License are granted for the term of 157 | copyright on the Program, and are irrevocable provided the stated 158 | conditions are met. This License explicitly affirms your unlimited 159 | permission to run the unmodified Program. The output from running a 160 | covered work is covered by this License only if the output, given its 161 | content, constitutes a covered work. This License acknowledges your 162 | rights of fair use or other equivalent, as provided by copyright law. 163 | 164 | You may make, run and propagate covered works that you do not 165 | convey, without conditions so long as your license otherwise remains 166 | in force. You may convey covered works to others for the sole purpose 167 | of having them make modifications exclusively for you, or provide you 168 | with facilities for running those works, provided that you comply with 169 | the terms of this License in conveying all material for which you do 170 | not control copyright. Those thus making or running the covered works 171 | for you must do so exclusively on your behalf, under your direction 172 | and control, on terms that prohibit them from making any copies of 173 | your copyrighted material outside their relationship with you. 174 | 175 | Conveying under any other circumstances is permitted solely under 176 | the conditions stated below. Sublicensing is not allowed; section 10 177 | makes it unnecessary. 178 | 179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 180 | 181 | No covered work shall be deemed part of an effective technological 182 | measure under any applicable law fulfilling obligations under article 183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 184 | similar laws prohibiting or restricting circumvention of such 185 | measures. 186 | 187 | When you convey a covered work, you waive any legal power to forbid 188 | circumvention of technological measures to the extent such circumvention 189 | is effected by exercising rights under this License with respect to 190 | the covered work, and you disclaim any intention to limit operation or 191 | modification of the work as a means of enforcing, against the work's 192 | users, your or third parties' legal rights to forbid circumvention of 193 | technological measures. 194 | 195 | 4. Conveying Verbatim Copies. 196 | 197 | You may convey verbatim copies of the Program's source code as you 198 | receive it, in any medium, provided that you conspicuously and 199 | appropriately publish on each copy an appropriate copyright notice; 200 | keep intact all notices stating that this License and any 201 | non-permissive terms added in accord with section 7 apply to the code; 202 | keep intact all notices of the absence of any warranty; and give all 203 | recipients a copy of this License along with the Program. 204 | 205 | You may charge any price or no price for each copy that you convey, 206 | and you may offer support or warranty protection for a fee. 207 | 208 | 5. Conveying Modified Source Versions. 209 | 210 | You may convey a work based on the Program, or the modifications to 211 | produce it from the Program, in the form of source code under the 212 | terms of section 4, provided that you also meet all of these conditions: 213 | 214 | a) The work must carry prominent notices stating that you modified 215 | it, and giving a relevant date. 216 | 217 | b) The work must carry prominent notices stating that it is 218 | released under this License and any conditions added under section 219 | 7. This requirement modifies the requirement in section 4 to 220 | "keep intact all notices". 221 | 222 | c) You must license the entire work, as a whole, under this 223 | License to anyone who comes into possession of a copy. This 224 | License will therefore apply, along with any applicable section 7 225 | additional terms, to the whole of the work, and all its parts, 226 | regardless of how they are packaged. This License gives no 227 | permission to license the work in any other way, but it does not 228 | invalidate such permission if you have separately received it. 229 | 230 | d) If the work has interactive user interfaces, each must display 231 | Appropriate Legal Notices; however, if the Program has interactive 232 | interfaces that do not display Appropriate Legal Notices, your 233 | work need not make them do so. 234 | 235 | A compilation of a covered work with other separate and independent 236 | works, which are not by their nature extensions of the covered work, 237 | and which are not combined with it such as to form a larger program, 238 | in or on a volume of a storage or distribution medium, is called an 239 | "aggregate" if the compilation and its resulting copyright are not 240 | used to limit the access or legal rights of the compilation's users 241 | beyond what the individual works permit. Inclusion of a covered work 242 | in an aggregate does not cause this License to apply to the other 243 | parts of the aggregate. 244 | 245 | 6. Conveying Non-Source Forms. 246 | 247 | You may convey a covered work in object code form under the terms 248 | of sections 4 and 5, provided that you also convey the 249 | machine-readable Corresponding Source under the terms of this License, 250 | in one of these ways: 251 | 252 | a) Convey the object code in, or embodied in, a physical product 253 | (including a physical distribution medium), accompanied by the 254 | Corresponding Source fixed on a durable physical medium 255 | customarily used for software interchange. 256 | 257 | b) Convey the object code in, or embodied in, a physical product 258 | (including a physical distribution medium), accompanied by a 259 | written offer, valid for at least three years and valid for as 260 | long as you offer spare parts or customer support for that product 261 | model, to give anyone who possesses the object code either (1) a 262 | copy of the Corresponding Source for all the software in the 263 | product that is covered by this License, on a durable physical 264 | medium customarily used for software interchange, for a price no 265 | more than your reasonable cost of physically performing this 266 | conveying of source, or (2) access to copy the 267 | Corresponding Source from a network server at no charge. 268 | 269 | c) Convey individual copies of the object code with a copy of the 270 | written offer to provide the Corresponding Source. This 271 | alternative is allowed only occasionally and noncommercially, and 272 | only if you received the object code with such an offer, in accord 273 | with subsection 6b. 274 | 275 | d) Convey the object code by offering access from a designated 276 | place (gratis or for a charge), and offer equivalent access to the 277 | Corresponding Source in the same way through the same place at no 278 | further charge. You need not require recipients to copy the 279 | Corresponding Source along with the object code. If the place to 280 | copy the object code is a network server, the Corresponding Source 281 | may be on a different server (operated by you or a third party) 282 | that supports equivalent copying facilities, provided you maintain 283 | clear directions next to the object code saying where to find the 284 | Corresponding Source. Regardless of what server hosts the 285 | Corresponding Source, you remain obligated to ensure that it is 286 | available for as long as needed to satisfy these requirements. 287 | 288 | e) Convey the object code using peer-to-peer transmission, provided 289 | you inform other peers where the object code and Corresponding 290 | Source of the work are being offered to the general public at no 291 | charge under subsection 6d. 292 | 293 | A separable portion of the object code, whose source code is excluded 294 | from the Corresponding Source as a System Library, need not be 295 | included in conveying the object code work. 296 | 297 | A "User Product" is either (1) a "consumer product", which means any 298 | tangible personal property which is normally used for personal, family, 299 | or household purposes, or (2) anything designed or sold for incorporation 300 | into a dwelling. In determining whether a product is a consumer product, 301 | doubtful cases shall be resolved in favor of coverage. For a particular 302 | product received by a particular user, "normally used" refers to a 303 | typical or common use of that class of product, regardless of the status 304 | of the particular user or of the way in which the particular user 305 | actually uses, or expects or is expected to use, the product. A product 306 | is a consumer product regardless of whether the product has substantial 307 | commercial, industrial or non-consumer uses, unless such uses represent 308 | the only significant mode of use of the product. 309 | 310 | "Installation Information" for a User Product means any methods, 311 | procedures, authorization keys, or other information required to install 312 | and execute modified versions of a covered work in that User Product from 313 | a modified version of its Corresponding Source. The information must 314 | suffice to ensure that the continued functioning of the modified object 315 | code is in no case prevented or interfered with solely because 316 | modification has been made. 317 | 318 | If you convey an object code work under this section in, or with, or 319 | specifically for use in, a User Product, and the conveying occurs as 320 | part of a transaction in which the right of possession and use of the 321 | User Product is transferred to the recipient in perpetuity or for a 322 | fixed term (regardless of how the transaction is characterized), the 323 | Corresponding Source conveyed under this section must be accompanied 324 | by the Installation Information. But this requirement does not apply 325 | if neither you nor any third party retains the ability to install 326 | modified object code on the User Product (for example, the work has 327 | been installed in ROM). 328 | 329 | The requirement to provide Installation Information does not include a 330 | requirement to continue to provide support service, warranty, or updates 331 | for a work that has been modified or installed by the recipient, or for 332 | the User Product in which it has been modified or installed. Access to a 333 | network may be denied when the modification itself materially and 334 | adversely affects the operation of the network or violates the rules and 335 | protocols for communication across the network. 336 | 337 | Corresponding Source conveyed, and Installation Information provided, 338 | in accord with this section must be in a format that is publicly 339 | documented (and with an implementation available to the public in 340 | source code form), and must require no special password or key for 341 | unpacking, reading or copying. 342 | 343 | 7. Additional Terms. 344 | 345 | "Additional permissions" are terms that supplement the terms of this 346 | License by making exceptions from one or more of its conditions. 347 | Additional permissions that are applicable to the entire Program shall 348 | be treated as though they were included in this License, to the extent 349 | that they are valid under applicable law. If additional permissions 350 | apply only to part of the Program, that part may be used separately 351 | under those permissions, but the entire Program remains governed by 352 | this License without regard to the additional permissions. 353 | 354 | When you convey a copy of a covered work, you may at your option 355 | remove any additional permissions from that copy, or from any part of 356 | it. (Additional permissions may be written to require their own 357 | removal in certain cases when you modify the work.) You may place 358 | additional permissions on material, added by you to a covered work, 359 | for which you have or can give appropriate copyright permission. 360 | 361 | Notwithstanding any other provision of this License, for material you 362 | add to a covered work, you may (if authorized by the copyright holders of 363 | that material) supplement the terms of this License with terms: 364 | 365 | a) Disclaiming warranty or limiting liability differently from the 366 | terms of sections 15 and 16 of this License; or 367 | 368 | b) Requiring preservation of specified reasonable legal notices or 369 | author attributions in that material or in the Appropriate Legal 370 | Notices displayed by works containing it; or 371 | 372 | c) Prohibiting misrepresentation of the origin of that material, or 373 | requiring that modified versions of such material be marked in 374 | reasonable ways as different from the original version; or 375 | 376 | d) Limiting the use for publicity purposes of names of licensors or 377 | authors of the material; or 378 | 379 | e) Declining to grant rights under trademark law for use of some 380 | trade names, trademarks, or service marks; or 381 | 382 | f) Requiring indemnification of licensors and authors of that 383 | material by anyone who conveys the material (or modified versions of 384 | it) with contractual assumptions of liability to the recipient, for 385 | any liability that these contractual assumptions directly impose on 386 | those licensors and authors. 387 | 388 | All other non-permissive additional terms are considered "further 389 | restrictions" within the meaning of section 10. If the Program as you 390 | received it, or any part of it, contains a notice stating that it is 391 | governed by this License along with a term that is a further 392 | restriction, you may remove that term. If a license document contains 393 | a further restriction but permits relicensing or conveying under this 394 | License, you may add to a covered work material governed by the terms 395 | of that license document, provided that the further restriction does 396 | not survive such relicensing or conveying. 397 | 398 | If you add terms to a covered work in accord with this section, you 399 | must place, in the relevant source files, a statement of the 400 | additional terms that apply to those files, or a notice indicating 401 | where to find the applicable terms. 402 | 403 | Additional terms, permissive or non-permissive, may be stated in the 404 | form of a separately written license, or stated as exceptions; 405 | the above requirements apply either way. 406 | 407 | 8. Termination. 408 | 409 | You may not propagate or modify a covered work except as expressly 410 | provided under this License. Any attempt otherwise to propagate or 411 | modify it is void, and will automatically terminate your rights under 412 | this License (including any patent licenses granted under the third 413 | paragraph of section 11). 414 | 415 | However, if you cease all violation of this License, then your 416 | license from a particular copyright holder is reinstated (a) 417 | provisionally, unless and until the copyright holder explicitly and 418 | finally terminates your license, and (b) permanently, if the copyright 419 | holder fails to notify you of the violation by some reasonable means 420 | prior to 60 days after the cessation. 421 | 422 | Moreover, your license from a particular copyright holder is 423 | reinstated permanently if the copyright holder notifies you of the 424 | violation by some reasonable means, this is the first time you have 425 | received notice of violation of this License (for any work) from that 426 | copyright holder, and you cure the violation prior to 30 days after 427 | your receipt of the notice. 428 | 429 | Termination of your rights under this section does not terminate the 430 | licenses of parties who have received copies or rights from you under 431 | this License. If your rights have been terminated and not permanently 432 | reinstated, you do not qualify to receive new licenses for the same 433 | material under section 10. 434 | 435 | 9. Acceptance Not Required for Having Copies. 436 | 437 | You are not required to accept this License in order to receive or 438 | run a copy of the Program. Ancillary propagation of a covered work 439 | occurring solely as a consequence of using peer-to-peer transmission 440 | to receive a copy likewise does not require acceptance. However, 441 | nothing other than this License grants you permission to propagate or 442 | modify any covered work. These actions infringe copyright if you do 443 | not accept this License. Therefore, by modifying or propagating a 444 | covered work, you indicate your acceptance of this License to do so. 445 | 446 | 10. Automatic Licensing of Downstream Recipients. 447 | 448 | Each time you convey a covered work, the recipient automatically 449 | receives a license from the original licensors, to run, modify and 450 | propagate that work, subject to this License. You are not responsible 451 | for enforcing compliance by third parties with this License. 452 | 453 | An "entity transaction" is a transaction transferring control of an 454 | organization, or substantially all assets of one, or subdividing an 455 | organization, or merging organizations. If propagation of a covered 456 | work results from an entity transaction, each party to that 457 | transaction who receives a copy of the work also receives whatever 458 | licenses to the work the party's predecessor in interest had or could 459 | give under the previous paragraph, plus a right to possession of the 460 | Corresponding Source of the work from the predecessor in interest, if 461 | the predecessor has it or can get it with reasonable efforts. 462 | 463 | You may not impose any further restrictions on the exercise of the 464 | rights granted or affirmed under this License. For example, you may 465 | not impose a license fee, royalty, or other charge for exercise of 466 | rights granted under this License, and you may not initiate litigation 467 | (including a cross-claim or counterclaim in a lawsuit) alleging that 468 | any patent claim is infringed by making, using, selling, offering for 469 | sale, or importing the Program or any portion of it. 470 | 471 | 11. Patents. 472 | 473 | A "contributor" is a copyright holder who authorizes use under this 474 | License of the Program or a work on which the Program is based. The 475 | work thus licensed is called the contributor's "contributor version". 476 | 477 | A contributor's "essential patent claims" are all patent claims 478 | owned or controlled by the contributor, whether already acquired or 479 | hereafter acquired, that would be infringed by some manner, permitted 480 | by this License, of making, using, or selling its contributor version, 481 | but do not include claims that would be infringed only as a 482 | consequence of further modification of the contributor version. For 483 | purposes of this definition, "control" includes the right to grant 484 | patent sublicenses in a manner consistent with the requirements of 485 | this License. 486 | 487 | Each contributor grants you a non-exclusive, worldwide, royalty-free 488 | patent license under the contributor's essential patent claims, to 489 | make, use, sell, offer for sale, import and otherwise run, modify and 490 | propagate the contents of its contributor version. 491 | 492 | In the following three paragraphs, a "patent license" is any express 493 | agreement or commitment, however denominated, not to enforce a patent 494 | (such as an express permission to practice a patent or covenant not to 495 | sue for patent infringement). To "grant" such a patent license to a 496 | party means to make such an agreement or commitment not to enforce a 497 | patent against the party. 498 | 499 | If you convey a covered work, knowingly relying on a patent license, 500 | and the Corresponding Source of the work is not available for anyone 501 | to copy, free of charge and under the terms of this License, through a 502 | publicly available network server or other readily accessible means, 503 | then you must either (1) cause the Corresponding Source to be so 504 | available, or (2) arrange to deprive yourself of the benefit of the 505 | patent license for this particular work, or (3) arrange, in a manner 506 | consistent with the requirements of this License, to extend the patent 507 | license to downstream recipients. "Knowingly relying" means you have 508 | actual knowledge that, but for the patent license, your conveying the 509 | covered work in a country, or your recipient's use of the covered work 510 | in a country, would infringe one or more identifiable patents in that 511 | country that you have reason to believe are valid. 512 | 513 | If, pursuant to or in connection with a single transaction or 514 | arrangement, you convey, or propagate by procuring conveyance of, a 515 | covered work, and grant a patent license to some of the parties 516 | receiving the covered work authorizing them to use, propagate, modify 517 | or convey a specific copy of the covered work, then the patent license 518 | you grant is automatically extended to all recipients of the covered 519 | work and works based on it. 520 | 521 | A patent license is "discriminatory" if it does not include within 522 | the scope of its coverage, prohibits the exercise of, or is 523 | conditioned on the non-exercise of one or more of the rights that are 524 | specifically granted under this License. You may not convey a covered 525 | work if you are a party to an arrangement with a third party that is 526 | in the business of distributing software, under which you make payment 527 | to the third party based on the extent of your activity of conveying 528 | the work, and under which the third party grants, to any of the 529 | parties who would receive the covered work from you, a discriminatory 530 | patent license (a) in connection with copies of the covered work 531 | conveyed by you (or copies made from those copies), or (b) primarily 532 | for and in connection with specific products or compilations that 533 | contain the covered work, unless you entered into that arrangement, 534 | or that patent license was granted, prior to 28 March 2007. 535 | 536 | Nothing in this License shall be construed as excluding or limiting 537 | any implied license or other defenses to infringement that may 538 | otherwise be available to you under applicable patent law. 539 | 540 | 12. No Surrender of Others' Freedom. 541 | 542 | If conditions are imposed on you (whether by court order, agreement or 543 | otherwise) that contradict the conditions of this License, they do not 544 | excuse you from the conditions of this License. If you cannot convey a 545 | covered work so as to satisfy simultaneously your obligations under this 546 | License and any other pertinent obligations, then as a consequence you may 547 | not convey it at all. For example, if you agree to terms that obligate you 548 | to collect a royalty for further conveying from those to whom you convey 549 | the Program, the only way you could satisfy both those terms and this 550 | License would be to refrain entirely from conveying the Program. 551 | 552 | 13. Use with the GNU Affero General Public License. 553 | 554 | Notwithstanding any other provision of this License, you have 555 | permission to link or combine any covered work with a work licensed 556 | under version 3 of the GNU Affero General Public License into a single 557 | combined work, and to convey the resulting work. The terms of this 558 | License will continue to apply to the part which is the covered work, 559 | but the special requirements of the GNU Affero General Public License, 560 | section 13, concerning interaction through a network will apply to the 561 | combination as such. 562 | 563 | 14. Revised Versions of this License. 564 | 565 | The Free Software Foundation may publish revised and/or new versions of 566 | the GNU General Public License from time to time. Such new versions will 567 | be similar in spirit to the present version, but may differ in detail to 568 | address new problems or concerns. 569 | 570 | Each version is given a distinguishing version number. If the 571 | Program specifies that a certain numbered version of the GNU General 572 | Public License "or any later version" applies to it, you have the 573 | option of following the terms and conditions either of that numbered 574 | version or of any later version published by the Free Software 575 | Foundation. If the Program does not specify a version number of the 576 | GNU General Public License, you may choose any version ever published 577 | by the Free Software Foundation. 578 | 579 | If the Program specifies that a proxy can decide which future 580 | versions of the GNU General Public License can be used, that proxy's 581 | public statement of acceptance of a version permanently authorizes you 582 | to choose that version for the Program. 583 | 584 | Later license versions may give you additional or different 585 | permissions. However, no additional obligations are imposed on any 586 | author or copyright holder as a result of your choosing to follow a 587 | later version. 588 | 589 | 15. Disclaimer of Warranty. 590 | 591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 599 | 600 | 16. Limitation of Liability. 601 | 602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 610 | SUCH DAMAGES. 611 | 612 | 17. Interpretation of Sections 15 and 16. 613 | 614 | If the disclaimer of warranty and limitation of liability provided 615 | above cannot be given local legal effect according to their terms, 616 | reviewing courts shall apply local law that most closely approximates 617 | an absolute waiver of all civil liability in connection with the 618 | Program, unless a warranty or assumption of liability accompanies a 619 | copy of the Program in return for a fee. 620 | 621 | END OF TERMS AND CONDITIONS 622 | 623 | How to Apply These Terms to Your New Programs 624 | 625 | If you develop a new program, and you want it to be of the greatest 626 | possible use to the public, the best way to achieve this is to make it 627 | free software which everyone can redistribute and change under these terms. 628 | 629 | To do so, attach the following notices to the program. It is safest 630 | to attach them to the start of each source file to most effectively 631 | state the exclusion of warranty; and each file should have at least 632 | the "copyright" line and a pointer to where the full notice is found. 633 | 634 | 635 | Copyright (C) 636 | 637 | This program is free software: you can redistribute it and/or modify 638 | it under the terms of the GNU General Public License as published by 639 | the Free Software Foundation, either version 3 of the License, or 640 | (at your option) any later version. 641 | 642 | This program is distributed in the hope that it will be useful, 643 | but WITHOUT ANY WARRANTY; without even the implied warranty of 644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 645 | GNU General Public License for more details. 646 | 647 | You should have received a copy of the GNU General Public License 648 | along with this program. If not, see . 649 | 650 | Also add information on how to contact you by electronic and paper mail. 651 | 652 | If the program does terminal interaction, make it output a short 653 | notice like this when it starts in an interactive mode: 654 | 655 | Copyright (C) 656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 657 | This is free software, and you are welcome to redistribute it 658 | under certain conditions; type `show c' for details. 659 | 660 | The hypothetical commands `show w' and `show c' should show the appropriate 661 | parts of the General Public License. Of course, your program's commands 662 | might be different; for a GUI interface, you would use an "about box". 663 | 664 | You should also get your employer (if you work as a programmer) or school, 665 | if any, to sign a "copyright disclaimer" for the program, if necessary. 666 | For more information on this, and how to apply and follow the GNU GPL, see 667 | . 668 | 669 | The GNU General Public License does not permit incorporating your program 670 | into proprietary programs. If your program is a subroutine library, you 671 | may consider it more useful to permit linking proprietary applications with 672 | the library. If this is what you want to do, use the GNU Lesser General 673 | Public License instead of this License. But first, please read 674 | . 675 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Whisper 2 | 3 | ⭐一个响应式干净和简洁优雅的 Typecho 主题 4 | 5 | [预览](https://blog.frostmiku.com/) | [样式一览](https://blog.frostmiku.com/archives/10/) 6 | 7 | 本项目 fork 自 https://github.com/Seevil/cactus 8 | 9 | ( update:github 不统计 fork 的贡献,重新创建仓库了。老仓库转移至 [OpenZZULI](https://github.com/openzzuli/Whisper) ) 10 | 11 | 个人修改使用,因其开源协议为 GPL 索性就把修改后的做成一个主题开源了。 12 | 13 | ![screenshot](https://github.com/FrostMiKu/Whisper/blob/master/screenshot.png?raw=true) 14 | 15 | 16 | ## 如何使用 17 | 18 | 1. 下载最新的 release 19 | 20 | 2. 解压到 usr/themes/ 下 21 | 22 | 3. 修改 Whisper/manifest.json 文件 23 | 24 | ## 如何更新 25 | 26 | 1. 下载最新的 release 27 | 28 | 2. 覆盖替换 usr/themes/Whisper 29 | 30 | 3. 修改 Whisper/manifest.json 文件 31 | 32 | ## Preview 33 | 34 | ![preview](https://github.com/FrostMiKu/Whisper/blob/master/preview.png?raw=true) 35 | 36 | ![preview2](https://github.com/FrostMiKu/Whisper/blob/master/preview2.png?raw=true) 37 | 38 | ![preview3](https://github.com/FrostMiKu/Whisper/blob/master/preview3.png?raw=true) 39 | 40 | 完... -------------------------------------------------------------------------------- /category.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
7 | 32 |
33 | widget('Widget_Metas_Tag_Cloud', 'ignoreZeroCount=1&limit=30')->to($tags); ?> 34 | next()): ?> 35 | name(); ?> 36 | 37 |
38 |
39 |
40 | 41 |
    42 | next()): ?> 43 |
  • 44 |
    45 | 46 |
    47 | 48 | title(35,'...') ?> 49 | 50 |
  • 51 | 52 | 60 |
61 |
62 | 63 |
64 |
65 | need('footer.php'); ?> -------------------------------------------------------------------------------- /comments.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | authorId) { 7 | if ($comments->authorId == $comments->ownerId) { 8 | $commentClass .= ' comment-by-author'; 9 | } else { 10 | $commentClass .= ' comment-by-user'; 11 | } 12 | } 13 | 14 | $commentLevelClass = $comments->levels > 0 ? ' comment-child' : ' comment-parent'; 15 | ?> 16 | commentsAvatarRating; 20 | $hash = md5(strtolower($comments->mail)); 21 | $email = strtolower($comments->mail); 22 | $qq=str_replace('@qq.com','',$email); 23 | if(strstr($email,"qq.com") && is_numeric($qq) && strlen($qq) < 11 && strlen($qq) > 4) 24 | { 25 | $avatar = '//q3.qlogo.cn/g?b=qq&nk='.$qq.'&s=100'; 26 | }else{ 27 | $avatar = $host . $url . $hash . '?s=50' . '&r=' . $rating . '&d=mm'; 28 | } 29 | ?> 30 |
31 |
32 | 33 |
34 |
35 | author(); ?>agent); ?>agent); ?> 36 |
37 |
38 | dateWord(); ?> 39 | reply('回复'); ?> 40 |
41 |
42 | coid); ?> 43 |
44 |
45 |
46 | children) { ?> 47 | threadedComments($options); ?> 48 | 49 |
50 | 51 | comments()->to($comments); ?> 52 | allow('comment')): ?> 53 |
54 |
55 | user->hasLogin()): ?> 56 | user->screenName(); ?>. » 57 |
58 |
59 |
60 |
61 | 62 |
63 |
64 |
65 | 66 |
67 |
68 | 69 | widget('Widget_Security'); ?> 70 |
71 |
72 | 74 |
75 | 76 |
77 |
78 | options->commentsRequireMail): ?> required>options->commentsRequireMail): ?> required> 79 |
80 | 81 |
82 | 83 |
84 |
85 |
86 | 87 |
88 |
89 | 90 | 91 | widget('Widget_Security'); ?> 92 | 93 |
94 |
95 | 96 | 98 |
99 | 100 |
101 | commentsNum!=0): ?> 102 |
103 |
104 | commentsNum('%d'); ?> 评论 105 |
106 |
107 | 108 |
快来做第一个评论的人吧~
109 | 110 | have()): ?> 111 | listComments(); ?> 112 | 113 | 114 | pageNav('', '',10,'',array('wrapTag' => 'div', 'wrapClass' => 'pagination','itemTag' => '','currentClass' => 'page-number',)); ?> 115 | 116 | -------------------------------------------------------------------------------- /css/comments.css: -------------------------------------------------------------------------------- 1 | .v * { 2 | -webkit-box-sizing: border-box; 3 | box-sizing: border-box; 4 | line-height: 2; 5 | color: #b8b8b8; 6 | -webkit-transition: all .3s ease; 7 | transition: all .3s ease 8 | } 9 | 10 | .v hr { 11 | margin: .825rem 0; 12 | border-color: #f5f6f7; 13 | border-style: dashed 14 | } 15 | 16 | .v.hide-avatar .vimg { 17 | display: none 18 | } 19 | 20 | .v a { 21 | position: relative; 22 | cursor: pointer; 23 | color: #ff9999; 24 | display: inline-block 25 | } 26 | 27 | .v a:before { 28 | content: ""; 29 | position: absolute; 30 | width: 0; 31 | right: 0; 32 | bottom: 0; 33 | height: 1px; 34 | background: #ff9999; 35 | -webkit-transition: width .3s ease; 36 | transition: width .3s ease 37 | } 38 | 39 | .v a:hover { 40 | color: #ff9999 41 | } 42 | 43 | .v a:hover:before { 44 | width: 100%; 45 | left: 0; 46 | right: auto 47 | } 48 | 49 | .v code, .v pre { 50 | background-color: #f5f6f7; 51 | color: #888888; 52 | padding: .2em .4em; 53 | border-radius: 3px; 54 | font-size: 85%; 55 | margin: 0; 56 | font-family: Source Code Pro, courier new, Input Mono, PT Mono, SFMono-Regular, Consolas, Monaco, Menlo, PingFang SC, Liberation Mono, Microsoft YaHei, Courier,monospace 57 | } 58 | 59 | .v pre { 60 | padding: 10px; 61 | overflow: auto; 62 | line-height: 1.45 63 | } 64 | 65 | .v pre code { 66 | padding: 0; 67 | background: transparent; 68 | white-space: pre-wrap; 69 | word-break: keep-all 70 | } 71 | 72 | .v blockquote { 73 | color: #888888; 74 | margin: .5rem 0; 75 | padding: 0 0 0 1rem; 76 | border-left: 8px solid hsla(0, 0%, 93%, .5) 77 | } 78 | 79 | .v .vinput { 80 | border: none; 81 | resize: none; 82 | outline: none; 83 | padding: 10px 5px; 84 | max-width: 100%; 85 | font-size: .775rem 86 | } 87 | 88 | .v input[type=checkbox], .v input[type=radio] { 89 | display: inline-block; 90 | vertical-align: middle; 91 | margin-top: -2px 92 | } 93 | 94 | .v .vwrap { 95 | border: 1px solid #f5f6f7; 96 | border-radius: 4px; 97 | margin-bottom: 10px; 98 | overflow: hidden; 99 | position: relative; 100 | padding: 10px 101 | } 102 | 103 | .v .vwrap input { 104 | background: transparent 105 | } 106 | 107 | .v .vwrap .vedit { 108 | position: relative; 109 | padding-top: 10px 110 | } 111 | 112 | .v .vwrap .vedit .vctrl { 113 | text-align: right; 114 | font-size: 12px 115 | } 116 | 117 | .v .vwrap .vedit .vctrl span { 118 | padding: 10px; 119 | display: inline-block; 120 | vertical-align: middle; 121 | cursor: pointer 122 | } 123 | 124 | .v .vwrap .vedit .vemojis { 125 | display: none; 126 | font-size: 18px; 127 | text-align: justify; 128 | max-height: 145px; 129 | overflow: auto; 130 | margin-bottom: 10px; 131 | -webkit-box-shadow: 0 0 1px #f5f6f7; 132 | box-shadow: 0 0 1px #f5f6f7 133 | } 134 | 135 | .v .vwrap .vedit .vemojis i { 136 | font-style: normal; 137 | padding: 7px 0; 138 | width: 38px; 139 | cursor: pointer; 140 | text-align: center; 141 | display: inline-block; 142 | vertical-align: middle 143 | } 144 | 145 | .v .vwrap .vedit .vpreview { 146 | padding: 7px; 147 | -webkit-box-shadow: 0 0 1px #f5f6f7; 148 | box-shadow: 0 0 1px #f5f6f7 149 | } 150 | 151 | .v .vwrap .vedit .vpreview frame, .v .vwrap .vedit .vpreview iframe, .v .vwrap .vedit .vpreview img { 152 | max-width: 100%; 153 | border: none 154 | } 155 | 156 | .v .vwrap .vheader .vinput { 157 | width: 33.33%; 158 | border-bottom: 1px dashed #dedede 159 | } 160 | 161 | .v .vwrap .vheader.item2 .vinput { 162 | width: 50% 163 | } 164 | 165 | .v .vwrap .vheader.item1 .vinput { 166 | width: 100% 167 | } 168 | 169 | .v .vwrap .vheader .vinput:focus { 170 | border-bottom-color: #ff9999 171 | } 172 | 173 | @media screen and (max-width:520px) { 174 | .v .vwrap .vheader.item2 .vinput, .v .vwrap .vheader .vinput { 175 | width: 100% 176 | } 177 | } 178 | 179 | .v .vwrap .vcontrol { 180 | font-size: 0; 181 | padding-top: 15px 182 | } 183 | 184 | .v .vwrap .vcontrol .col { 185 | display: inline-block; 186 | font-size: .725rem; 187 | vertical-align: middle; 188 | color: #ccc 189 | } 190 | 191 | .v .vwrap .vcontrol .col.text-right { 192 | text-align: right 193 | } 194 | 195 | .v .vwrap .vcontrol .col svg { 196 | margin-right: 2px; 197 | overflow: hidden; 198 | fill: currentColor; 199 | vertical-align: middle 200 | } 201 | 202 | .v .vwrap .vcontrol .col.col-20 { 203 | width: 20% 204 | } 205 | 206 | .v .vwrap .vcontrol .col.col-40 { 207 | width: 40% 208 | } 209 | 210 | .v .vwrap .vcontrol .col.col-60 { 211 | width: 60% 212 | } 213 | 214 | .v .vwrap .vcontrol .col.col-80 { 215 | width: 80% 216 | } 217 | 218 | .v .vwrap .vcontrol .col.split { 219 | width: 50% 220 | } 221 | 222 | .v .vwrap .vmark { 223 | position: absolute; 224 | background: rgba(0, 0, 0, .65); 225 | width: 100%; 226 | height: 100%; 227 | left: 0; 228 | top: 0 229 | } 230 | 231 | .v .vwrap .vmark .valert { 232 | padding-top: 3rem 233 | } 234 | 235 | .v .vwrap .vmark .valert .vtext { 236 | color: #fff; 237 | padding: 1rem 0 238 | } 239 | 240 | .v .vwrap .vmark .valert .vcode { 241 | width: 4.6875rem; 242 | border-radius: .3125rem; 243 | padding: .5rem; 244 | background: #dedede 245 | } 246 | 247 | .v .vwrap .vmark .valert .vcode:focus { 248 | border-color: #3090e4; 249 | background-color: #fff 250 | } 251 | 252 | @media screen and (max-width:720px) { 253 | .v .vwrap .vmark .valert { 254 | padding-top: 5.5rem 255 | } 256 | .v .vwrap .vmark .valert .vtext { 257 | color: #fff; 258 | padding: 1rem 0 259 | } 260 | } 261 | 262 | .v .power { 263 | color: #999; 264 | padding: .5rem 0 265 | } 266 | 267 | .v .power, .v .power a { 268 | font-size: .75rem 269 | } 270 | 271 | .v .vinfo { 272 | font-size: 0; 273 | padding: 5px 274 | } 275 | 276 | .v .vinfo .col { 277 | font-size: .875rem; 278 | display: inline-block; 279 | width: 50%; 280 | vertical-align: middle 281 | } 282 | 283 | .v .vinfo .vcount .vnum { 284 | font-weight: 600; 285 | font-size: 1.25rem 286 | } 287 | 288 | .v a { 289 | text-decoration: none; 290 | color: #555 291 | } 292 | 293 | .v a:hover { 294 | color: #222 295 | } 296 | 297 | .v ol, .v ul { 298 | padding: 0; 299 | margin-left: 1.25rem 300 | } 301 | 302 | .v .txt-center { 303 | text-align: center 304 | } 305 | 306 | .v .txt-right { 307 | text-align: right 308 | } 309 | 310 | .v .pd5 { 311 | padding: 5px 312 | } 313 | 314 | .v .pd10 { 315 | padding: 10px 316 | } 317 | 318 | .v .veditor { 319 | width: 100%; 320 | min-height: 8.75rem; 321 | font-size: .875rem; 322 | background: transparent; 323 | resize: vertical; 324 | -webkit-transition: all .25s ease; 325 | transition: all .25s ease; 326 | font-family: Menlo, "Meslo LG", "Helvetica Neue", Helvetica, Arial, sans-serif, "Microsoft yahei" 327 | } 328 | 329 | .v .vbtn { 330 | -webkit-transition-duration: .4s; 331 | transition-duration: .4s; 332 | text-align: center; 333 | color: #313131; 334 | border: 1px solid #ededed; 335 | border-radius: .3rem; 336 | display: inline-block; 337 | background: #ededed; 338 | margin-bottom: 0; 339 | font-weight: 400; 340 | vertical-align: middle; 341 | -ms-touch-action: manipulation; 342 | touch-action: manipulation; 343 | cursor: pointer; 344 | white-space: nowrap; 345 | padding: .5rem 1.25rem; 346 | font-size: .875rem; 347 | line-height: 1.42857143; 348 | -webkit-user-select: none; 349 | -moz-user-select: none; 350 | -ms-user-select: none; 351 | user-select: none; 352 | outline: none 353 | } 354 | 355 | .v .vbtn+.vbtn { 356 | margin-left: 1.25rem 357 | } 358 | 359 | .v .vbtn:active, .v .vbtn:hover { 360 | color: #ff9999; 361 | border-color: #ff9999; 362 | background-color: #fff 363 | } 364 | 365 | .v .vempty { 366 | padding: 1.25rem; 367 | text-align: center; 368 | color: #888888 369 | } 370 | 371 | .v .vlist { 372 | width: 100% 373 | } 374 | 375 | .v .vlist .vcard { 376 | padding-top: 1.5rem; 377 | position: relative; 378 | display: block 379 | } 380 | 381 | .v .vlist .vcard:after { 382 | content: ""; 383 | clear: both; 384 | display: block 385 | } 386 | 387 | .v .vlist .vcard .vimg { 388 | width: 3.125rem; 389 | height: 3.125rem; 390 | float: left; 391 | border-radius: 50%; 392 | margin-right: .7525rem; 393 | border: 1px solid #f5f5f5; 394 | padding: .125rem 395 | } 396 | 397 | @media screen and (max-width:720px) { 398 | .v .vlist .vcard .vimg { 399 | width: 2.5rem; 400 | height: 2.5rem 401 | } 402 | } 403 | 404 | .v .vlist .vcard .vhead { 405 | line-height: 1.5; 406 | margin-top: 0 407 | } 408 | 409 | .v .vlist .vcard .vhead .vnick { 410 | position: relative; 411 | font-size: .875rem; 412 | font-weight: 500; 413 | margin-right: .875rem; 414 | cursor: pointer; 415 | color: #ff9999; 416 | text-decoration: none; 417 | display: inline-block 418 | } 419 | 420 | .v .vlist .vcard .vhead .vnick:before { 421 | content: ""; 422 | position: absolute; 423 | width: 0; 424 | right: 0; 425 | bottom: 0; 426 | height: 1px; 427 | background: #1abc9c; 428 | -webkit-transition: width .3s ease; 429 | transition: width .3s ease 430 | } 431 | 432 | .v .vlist .vcard .vhead .vnick:hover { 433 | color: #ff9999 434 | } 435 | 436 | .v .vlist .vcard .vhead .vnick:hover:before { 437 | width: 100%; 438 | left: 0; 439 | right: auto 440 | } 441 | 442 | .v .vlist .vcard .vhead .vsys { 443 | display: inline-block; 444 | padding: .2rem .5rem; 445 | background: #ededed; 446 | color: #888888; 447 | font-size: .75rem; 448 | border-radius: .2rem; 449 | margin-right: .3rem 450 | } 451 | 452 | @media screen and (max-width:520px) { 453 | .v .vlist .vcard .vhead .vsys { 454 | display: none 455 | } 456 | } 457 | 458 | .v .vlist .vcard .vh { 459 | overflow: hidden; 460 | padding-bottom: .5rem; 461 | border-bottom: 1px dashed #f5f5f5 462 | } 463 | 464 | .v .vlist .vcard .vh .vtime { 465 | color: #b3b3b3; 466 | font-size: .75rem; 467 | margin-right: .875rem 468 | } 469 | 470 | .v .vlist .vcard .vh .vmeta { 471 | line-height: 1; 472 | position: relative 473 | } 474 | 475 | .v .vlist .vcard .vh .vmeta .vat { 476 | font-size: .8125rem; 477 | color: #ff9999; 478 | cursor: pointer; 479 | float: right 480 | } 481 | 482 | .v .vlist .vcard .vcontent { 483 | word-wrap: break-word; 484 | word-break: break-all; 485 | text-align: justify; 486 | color: #4a4a4a; 487 | font-size: .875rem; 488 | line-height: 2; 489 | position: relative; 490 | margin-bottom: .75rem; 491 | padding-top: .625rem 492 | } 493 | 494 | .v .vlist .vcard .vcontent frame, .v .vlist .vcard .vcontent iframe, .v .vlist .vcard .vcontent img { 495 | max-width: 100%; 496 | border: none 497 | } 498 | 499 | .v .vlist .vcard .vcontent.expand { 500 | cursor: pointer; 501 | max-height: 11.25rem; 502 | overflow: hidden 503 | } 504 | 505 | .v .vlist .vcard .vcontent.expand:before { 506 | display: block; 507 | content: ""; 508 | position: absolute; 509 | width: 100%; 510 | left: 0; 511 | top: 0; 512 | bottom: 3.15rem; 513 | pointer-events: none; 514 | background: -webkit-gradient(linear, left top, left bottom, from(hsla(0, 0%, 100%, 0)), to(hsla(0, 0%, 100%, .9))); 515 | background: linear-gradient(180deg, hsla(0, 0%, 100%, 0), hsla(0, 0%, 100%, .9)) 516 | } 517 | 518 | .v .vlist .vcard .vcontent.expand:after { 519 | display: block; 520 | content: "Click on expand"; 521 | text-align: center; 522 | color: #828586; 523 | position: absolute; 524 | width: 100%; 525 | height: 3.15rem; 526 | line-height: 3.15rem; 527 | left: 0; 528 | bottom: 0; 529 | pointer-events: none; 530 | background: hsla(0, 0%, 100%, .9) 531 | } 532 | 533 | .v .vlist .vcard .vquote { 534 | color: #666; 535 | margin-top: 1rem; 536 | padding-left: 1rem; 537 | border-left: 1px dashed hsla(0, 0%, 93%, .5) 538 | } 539 | 540 | .v .vlist .vcard .vquote .vimg { 541 | width: 2.225rem; 542 | height: 2.225rem 543 | } 544 | 545 | .v .vpage .vmore { 546 | margin: 1rem 0 547 | } 548 | 549 | .v .clear { 550 | content: ""; 551 | display: block; 552 | clear: both 553 | } 554 | 555 | @-webkit-keyframes spin { 556 | 0% { 557 | -webkit-transform: rotate(0deg); 558 | transform: rotate(0deg) 559 | } 560 | to { 561 | -webkit-transform: rotate(1turn); 562 | transform: rotate(1turn) 563 | } 564 | } 565 | 566 | @keyframes spin { 567 | 0% { 568 | -webkit-transform: rotate(0deg); 569 | transform: rotate(0deg) 570 | } 571 | to { 572 | -webkit-transform: rotate(1turn); 573 | transform: rotate(1turn) 574 | } 575 | } 576 | 577 | @-webkit-keyframes pulse { 578 | 50% { 579 | background: #dcdcdc 580 | } 581 | } 582 | 583 | @keyframes pulse { 584 | 50% { 585 | background: #dcdcdc 586 | } 587 | } 588 | 589 | .v .vloading { 590 | position: relative; 591 | padding: 20px; 592 | display: block; 593 | height: 80px 594 | } 595 | 596 | .v .vloading:before { 597 | -webkit-box-sizing: border-box; 598 | box-sizing: border-box; 599 | content: ""; 600 | position: absolute; 601 | display: inline-block; 602 | top: 20px; 603 | left: 50%; 604 | margin-left: -20px; 605 | width: 40px; 606 | height: 40px; 607 | border: 6px double #a0a0a0; 608 | border-top-color: transparent; 609 | border-bottom-color: transparent; 610 | border-radius: 50%; 611 | -webkit-animation: spin 1s infinite linear; 612 | animation: spin 1s infinite linear 613 | } -------------------------------------------------------------------------------- /css/lightbox.min.css: -------------------------------------------------------------------------------- 1 | .lb-loader,.lightbox{text-align:center;line-height:0}.lb-dataContainer:after,.lb-outerContainer:after{content:"";clear:both}html.lb-disable-scrolling{overflow:hidden;position:fixed;height:100vh;width:100vw}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;filter:alpha(Opacity=80);opacity:.8;display:none}.lightbox{position:absolute;left:0;width:100%;z-index:10000;font-weight:400}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-loader,.lb-nav{position:absolute;left:0}.lb-outerContainer:after{display:table}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../images/loading.gif) no-repeat}.lb-nav{top:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../images/prev.png) left 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{filter:alpha(Opacity=100);opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../images/next.png) right 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{filter:alpha(Opacity=100);opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{display:table}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../images/close.png) top right no-repeat;text-align:right;outline:0;filter:alpha(Opacity=70);opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;filter:alpha(Opacity=100);opacity:1} -------------------------------------------------------------------------------- /css/style.css: -------------------------------------------------------------------------------- 1 | @font-face{font-family:'Meslo LG';font-style:normal;src:local('Meslo LG S'),url(../lib/meslo-LG/fonts/MesloLGS-Regular.woff) format('woff')} 2 | ::-webkit-scrollbar{width:6px;height:6px} 3 | ::-webkit-scrollbar-thumb{background:rgba(0,0,0,.125)} 4 | a{-webkit-tap-highlight-color:transparent} 5 | .ml0,.mx0{margin-left:0} 6 | .mr0,.mx0{margin-right:0} 7 | .mt0,.my0{margin-top:0} 8 | .mb0,.my0{margin-bottom:0} 9 | .pl0,.px0{padding-left:0} 10 | .pr0,.px0{padding-right:0} 11 | .pt0,.py0{padding-top:0} 12 | .pb0,.py0{padding-bottom:0} 13 | *,.border-box,:after,:before{box-sizing:border-box} 14 | #header .h1,#header h1,.content .h1,.content h1,body{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} 15 | .highlight,body,pre{font-family:Menlo,"Meslo LG","Helvetica Neue",Helvetica,"Microsoft yahei",Arial,sans-serif,monospace} 16 | #footer p,#footer-post #toc-footer,.clearfix:after,.highlight figcaption:after{clear:both} 17 | .inline{display:inline} 18 | .block{display:block} 19 | .inline-block{display:inline-block} 20 | .table{display:table} 21 | .table-cell{display:table-cell} 22 | .overflow-hidden{overflow:hidden} 23 | .overflow-scroll{overflow:scroll} 24 | .overflow-auto{overflow:auto} 25 | .clearfix:after,.clearfix:before{content:" ";display:table} 26 | .left{float:left} 27 | .right{float:right} 28 | .fit{max-width:100%} 29 | .truncate{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis} 30 | .max-width-1{max-width:24rem} 31 | .max-width-2{max-width:32rem} 32 | .max-width-3{max-width:48rem} 33 | .max-width-4{max-width:64rem} 34 | .m0{margin:0} 35 | .ml1,.mx1{margin-left:.5rem} 36 | .mr1,.mx1{margin-right:.5rem} 37 | .mt1,.my1{margin-top:.5rem} 38 | .mb1,.my1{margin-bottom:.5rem} 39 | .m1{margin:.5rem} 40 | .ml2,.mx2{margin-left:1rem} 41 | .mr2,.mx2{margin-right:1rem} 42 | .mt2,.my2{margin-top:1rem} 43 | .mb2,.my2{margin-bottom:1rem} 44 | .m2{margin:1rem} 45 | .ml3,.mx3{margin-left:2rem} 46 | .mr3,.mx3{margin-right:2rem} 47 | .mt3,.my3{margin-top:2rem} 48 | .mb3,.my3{margin-bottom:2rem} 49 | .m3{margin:2rem} 50 | .ml4,.mx4{margin-left:4rem} 51 | .mr4,.mx4{margin-right:4rem} 52 | .mt4,.my4{margin-top:4rem} 53 | .mb4,.my4{margin-bottom:4rem} 54 | .my5{margin-top:8rem} 55 | .m4{margin:4rem} 56 | .mxn1{margin-left:-.5rem;margin-right:-.5rem} 57 | .mxn2{margin-left:-1rem;margin-right:-1rem} 58 | .mxn3{margin-left:-2rem;margin-right:-2rem} 59 | .mxn4{margin-left:-4rem;margin-right:-4rem} 60 | .ml-auto,.mx-auto{margin-left:auto} 61 | .mr-auto,.mx-auto{margin-right:auto} 62 | .p0{padding:0} 63 | .pl1,.px1{padding-left:.5rem} 64 | .pr1,.px1{padding-right:.5rem} 65 | .pt1,.py1{padding-top:.5rem} 66 | .pb1,.py1{padding-bottom:.5rem} 67 | .p1{padding:.5rem} 68 | .pt2,.py2{padding-top:1rem} 69 | .pb2,.py2{padding-bottom:1rem} 70 | .pl2,.px2{padding-left:1rem} 71 | .pr2,.px2{padding-right:1rem} 72 | .p2{padding:1rem} 73 | .pt3,.py3{padding-top:2rem} 74 | .pb3,.py3{padding-bottom:2rem} 75 | .pl3,.px3{padding-left:2rem} 76 | .pr3,.px3{padding-right:2rem} 77 | .p3{padding:2rem} 78 | .pt4,.py4{padding-top:4rem} 79 | .pb4,.py4{padding-bottom:4rem} 80 | .pl4,.px4{padding-left:4rem} 81 | .pr4,.px4{padding-right:4rem} 82 | .p4{padding:4rem} 83 | .content .h1,.content h1{letter-spacing:.01em;font-size:1.5em;font-style:normal;font-weight:700;color:#FF9999;margin-top:3rem;margin-bottom:1rem;display:block} 84 | .content .h2,.content h2,.content h3,.content h4{font-weight:700;color:#262626;position:relative;text-transform:none;letter-spacing:normal;margin-top:2rem;margin-bottom:.5rem;display:block} 85 | .content .h2,.content h2{font-size:1.3rem;} 86 | .content .h3,.content h3{font-size:1.1rem;} 87 | .content h4{font-size:1rem;} 88 | .content h5,.content h6{font-size:.9rem;font-weight:600;color:#262626;text-decoration:none} 89 | .content h5,.content h6{width:max-content} 90 | .content h5{border-bottom:1px solid #FF9999;border-top:1px solid #FF9999;font-style:italic} 91 | .content h6{margin-left: -2rem;padding:0 5px;color:#FF3333;background-color:#f5f6f7;box-shadow:1px 1px 2px rgba(0,0,0,.125);border-radius:3px;} 92 | .content dt,.content strong,.content th{font-weight:700} 93 | .content h3,.content h4,.content h5,.content h6{margin-top:.9rem;margin-bottom:.5rem} 94 | .content hr{border:1px solid #f5f6f7} 95 | #header #nav ul li,#header-post #nav ul li{border-right:1px dotted #FF9999} 96 | .content cite,.content em{font-style:italic} 97 | .content sub,.content sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline} 98 | .content dl,.content ol,.content ul,body{line-height:1.725} 99 | .content sup{top:-.5em} 100 | .content sub{bottom:-.2em} 101 | .content small{font-size:.85em} 102 | .content abbr,.content acronym{border-bottom:1px dotted} 103 | .content ol ol,.content ol ul,.content ul ol,.content ul ul{margin-top:0;margin-bottom:0} 104 | .content ol{list-style:decimal} 105 | #sociallinks,.project-list{list-style:none;padding:0} 106 | .content table{margin:2em 0;width:100%;font-size:12px;border-collapse:collapse;text-align:left;border-bottom:1px solid #888888} 107 | .content th{font-size:13px;color:#262626;border-bottom:1px solid #888888;border-top:1px solid #888888;padding:8px} 108 | .content td{border-bottom:none;padding:4px 8px} 109 | html{height:100%} 110 | body{color:#262626;background-color:#ffffff;font-size:14px;font-weight:400;text-rendering:geometricPrecision;min-height:100%;display:flex;flex-direction:column} 111 | .content{flex:1} 112 | .content p{-moz-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;margin-bottom:.5rem;word-break:break-all} 113 | .content p code{color:#FF9999;padding:0 5px;margin:0 0.5em} 114 | .content code,.content pre{-moz-hyphens:manual;-ms-hyphens:manual;-webkit-hyphens:manual;hyphens:manual;margin-bottom:.5rem;color:#FF9999;background-color:#f5f6f7} 115 | .content a{text-decoration:none;color:#262626;word-wrap:break-word;background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#FF9999 5px,#FF9999)} 116 | .content a:hover{color:#FF9999;background-image:linear-gradient(transparent,transparent 5px,#FF9999 5px,#FF9999)} 117 | .content a.icon{background:0 0} 118 | .content a.icon:hover{color:#FF9999} 119 | .content .h1 a,.content h1 a,.content h2 a,.content h3 a,.content h4 a,.content h5 a,.content h6 a{color:inherit;text-decoration:none;background:0 0} 120 | .content .h1 a:hover,.content h1 a:hover,.content h2 a:hover,.content h3 a:hover,.content h4 a:hover,.content h5 a:hover,.content h6 a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 6px,#FF9999 6px,#FF9999)} 121 | @media (min-width:540px){.image-wrap{flex-direction:row;margin-bottom:2rem} 122 | .image-wrap .image-block{margin-right:2rem;flex:1 0 35%} 123 | .image-wrap p{flex:1 0 65%} 124 | } 125 | #header #nav ul li:last-child,#header #nav ul li:last-child a,#header-post #nav ul li:last-child a,#header-post ul li:last-child{margin-right:0} 126 | .width{width:100%;max-width:39rem} 127 | @media (max-width:480px){pre .line{-webkit-text-size-adjust:none} 128 | .px3{padding-left:1.4rem;padding-right:1.4rem} 129 | .my4{margin-top:2rem;margin-bottom:2rem} 130 | } 131 | #header{max-width:710px;width:100%;margin:0 auto 3rem} 132 | #header .h1,#header h1{letter-spacing:.01em;font-size:1.5rem;line-height:2rem;font-style:normal;font-weight:700;color:#262626;margin-top:0;margin-bottom:0} 133 | #header #nav ul,#header-post #nav ul{line-height:15px} 134 | #header #nav,#header-post #nav{font-style:normal;font-weight:200;letter-spacing:.01em} 135 | #header a,#header-post a{color:inherit;text-decoration:none} 136 | #header #nav,#header-post #menu-icon-tablet:hover,#header-post #menu-icon:hover,#toc a:hover,#header-post #top-icon-tablet:hover,#header-post .active,#header-post a.icon:hover{color:#FF9999} 137 | #header a{background:0 0} 138 | #header #logo{display:inline-block;float:left;margin-right:20px;width:52px;height:52px;border-radius:5px} 139 | #header #logo div{width:50px;height:50px;background-repeat:no-repeat;background-size:50px 50px} 140 | #header #nav{font-size:.8rem} 141 | #header #nav ul{list-style-type:none;margin:0;padding:0} 142 | #header #nav ul a{margin-right:15px;color:color-accent} 143 | #header #nav ul a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#FF9999 5px,#FF9999)} 144 | #header-post a,#header-post a.icon{background:0 0} 145 | #header #nav ul li{display:inline-block;vertical-align:middle;margin-right:15px} 146 | #header #nav ul .icon{display:none} 147 | #header #nav ul li:last-child{border-right:0} 148 | #header:hover #logo{box-shadow:0px 0px 3px rgba(0,0,0,.25)} 149 | @media screen and (max-width:480px){#header #title{padding-top:9px;padding-bottom:9px} 150 | #header #nav ul a:hover{background:0 0} 151 | #header #nav ul li{display:none;border-right:0} 152 | #header #nav ul li.icon{display:inline-block;position:absolute;top:55px;right:1rem} 153 | #header #nav ul.responsive li{display:block} 154 | #header #nav li:not(:first-child){padding-top:1rem;padding-left:70px;font-size:1rem} 155 | } 156 | #header-post #actions .info,#header-post #actions ul{display:block} 157 | #header-post{position:fixed;top:2rem;right:2rem;display:inline-block;float:right} 158 | #header-post ol,#header-post ul{list-style-type:none} 159 | #header-post #actions ul,#header-post #nav ul{list-style-type:none;margin:0;padding:0;display:inline-block} 160 | #header-post #actions ul li,#header-post #nav ul li{margin-right:15px;display:inline-block;vertical-align:middle} 161 | #header-post #menu-icon,#header-post #menu-icon-tablet{float:right;margin-left:15px} 162 | #header-post #top-icon-tablet{margin-left:15px;bottom:2rem;right:2rem;position:fixed} 163 | #header-post #nav{font-size:.8rem;color:#FF9999;float:right} 164 | #header-post #actions .info,.highlight .code .emphasis,.hljs-comment,.hljs-emphasis,.hljs-quote{font-style:italic} 165 | #header-post #nav ul a{margin-right:15px;color:color-accent} 166 | #header-post #nav ul a:hover,#TableOfContents ul a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#FF9999 5px,#FF9999)} 167 | #header-post #nav ul li:last-child,#TableOfContents ul li:last-child{border-right:0;margin-right:0} 168 | #header-post #actions{float:right;margin-top:2rem;width:100%;text-align:right} 169 | #header-post #share{clear:both;text-align:right;padding-top:.5rem} 170 | #TableOfContents,#toc{clear:both;text-align:left;position:fixed;top:5em;left:3em;display:inline-block} 171 | #TableOfContents ul{list-style:none} 172 | #header-post #share li{margin:0;display:block} 173 | #TableOfContents li,#toc .toc-level-2{font-size:.8rem;color:#262626;padding-left:8px} 174 | #TableOfContents li a{padding-left:8px;color:#262626;text-decoration:none} 175 | .no-before::before{content:""!important} 176 | #TableOfContents li:before,#toc .toc-level-2:before{content:"#";color:#FF9999} 177 | #footer-post #actions-footer a,#footer-post #toc-footer a:hover,#footer-post a.icon:hover{color:#FF9999} 178 | @media screen and (max-width:400px){#header-post{display:none} 179 | } 180 | @media screen and (max-width:900px){ 181 | #header-post #menu{visibility:hidden;} 182 | #header-post #nav{box-shadow:0px 0px 5px rgba(0,0,0,.125);padding:0 10px;background-color:#f5f6f7;border-radius:5px;} 183 | #header-post #actions,#header-post #menu-icon{display:none} 184 | } 185 | @media screen and (max-width:1199px){#toc{display:none} 186 | } 187 | @media screen and (max-width:1440px){ 188 | #header-post #menu #nav li{display:block;margin:10px 0;border-right:none;} 189 | #TableOfContents, #toc{word-break:break-all;width:270px;} 190 | } 191 | @media screen and (min-width:900px){#header-post #menu-icon-tablet,#header-post #top-icon-tablet{display:none!important} 192 | } 193 | @media screen and (min-width:1199px){ 194 | #header-post #actions{width:auto} 195 | #header-post #actions ul{display:inline-block;float:right} 196 | #header-post #actions .info{float:left;margin-right:2rem;font-style:italic;display:inline} 197 | } 198 | #footer-post{bottom:0;left:0;right:0;position:fixed;transition:opacity .2s;width:100%;z-index:5000000;background:#212326;border-top:1px solid #666673} 199 | #footer-post a,#footer-post a.icon{background:0 0} 200 | #footer-post a{color:inherit;text-decoration:none} 201 | #footer-post #nav-footer,#footer-post #share-footer{margin-left:1rem;margin-right:1rem;text-align:center} 202 | #footer-post #nav-footer a{color:#FF9999;font-size:1rem} 203 | #footer-post #nav-footer a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#FF9999 5px,#FF9999)} 204 | #footer-post #actions-footer ul,#footer-post #nav-footer ul,#footer-post #share-footer ul{list-style-type:none;margin:0;padding:0;display:table;width:100%} 205 | #footer-post #nav-footer ul li,#footer-post #share-footer ul li{display:inline-table;width:20%;padding:10px;vertical-align:middle} 206 | #footer-post #actions-footer{text-align:center;margin-top:1rem;margin-bottom:1rem;width:100%} 207 | #footer-post #actions-footer ul li{display:table-cell;vertical-align:middle} 208 | #footer-post #toc-footer .toc-level-1,#footer-post #toc-footer .toc-level-4,#footer-post #toc-footer .toc-level-5,#footer-post #toc-footer .toc-level-6,#footer-post #toc-footer .toc-number{display:none} 209 | #footer-post #toc-footer{text-align:left;padding-top:1rem} 210 | #footer-post #toc-footer ol{list-style-type:none;padding-left:20px} 211 | #footer-post #toc-footer ol li{line-height:30px} 212 | #footer-post #toc-footer .toc-level-2{font-size:.8rem;color:#262626} 213 | #footer-post #toc-footer .toc-level-2:before{content:"#";color:#FF9999} 214 | #footer-post #toc-footer .toc-level-3{font-size:.7rem;color:#666;line-height:15px} 215 | #sociallinks,#sociallinks li{display:inline-block} 216 | @media screen and (min-width:500px){#footer-post-container{display:none} 217 | } 218 | #sociallinks{margin:0} 219 | #sociallinks li:after{content:", "} 220 | #sociallinks li:last-child:after{content:""} 221 | #sociallinks li:nth-last-child(2):after{content:" and "} 222 | .post-list{padding:0} 223 | .post-list .post-item{list-style-type:none;margin-left:0;margin-bottom:1rem} 224 | .post-list .post-item .meta{display:block;font-size:14px;color:#888888;min-width:100px;margin-right:16px} 225 | .description{min-height:105px} 226 | @media (min-width:480px){p{text-align:justify} 227 | .post-list .post-item{display:flex;margin-bottom:5px} 228 | .post-list .post-item .meta{text-align:left} 229 | } 230 | .project-list .project-item{margin-bottom:5px;color:#888888} 231 | article header .posttitle{margin-top:0;margin-bottom:0.25em;text-transform:none;font-size:1.75em;line-height:1.25} 232 | article header .meta{margin-top:0;margin-bottom:1rem} 233 | article header .meta *{color:#888888;font-size:.85rem} 234 | article header .author{text-transform:uppercase;letter-spacing:.01em;font-weight:700} 235 | article header .postdate{display:inline} 236 | article .content h2:before{content:"\00A7";color:#FF9999;position:absolute;left:-1rem;top:-4px;font-size:1.5rem;font-weight:700} 237 | article .content h3:before{content:"\00B6";color:#FF9999;position:absolute;left:-1rem;top:-4px;font-size:1.3rem;font-weight:700} 238 | article .content h4:before{content:"#";color:#FF9999;position:absolute;left:-1rem;top:-2px;font-size:1.1rem;font-weight:700} 239 | article .content img,article .content video{max-width:100%;height:auto;display:block;margin:auto} 240 | article .content .video-container{position:relative;padding-top:56.25%;height:0;overflow:hidden} 241 | .highlight,.hljs,pre{overflow-x:auto} 242 | article .content .video-container embed,article .content .video-container iframe,article .content .video-container object{position:absolute;top:0;left:0;width:100%;height:100%;margin-top:0} 243 | article .content blockquote{margin:2em 0;padding:10px 20px;position:relative;color:#888888;background-color:rgba(192,91,77,.05);border-left:3px solid rgba(192,91,77,.3);-webkit-box-shadow:1px 1px 2px rgba(0,0,0,.125);box-shadow:1px 1px 2px rgba(0,0,0,.125)} 244 | article .content blockquote p{margin:0} 245 | article .content blockquote a{color:#888888;background-image:none} 246 | article .content blockquote footer{color:#666;font-size:11px;margin:line-height 0} 247 | article .content blockquote footer a{color:#666;background-image:linear-gradient(transparent,transparent 5px,#666 5px,#666)} 248 | article .content blockquote footer a:hover{color:#999;background-image:linear-gradient(transparent,transparent 4px,#999 4px,#999)} 249 | article .content blockquote footer cite:before{content:"—";padding:0 .5em} 250 | article .content .pullquote{text-align:left;width:45%;margin:0} 251 | article .content .pullquote.left{margin-left:.5em;margin-right:1em} 252 | article .content .pullquote.right{margin-right:.5em;margin-left:1em} 253 | article .content .caption{color:color-grey;display:block;font-size:.9em;margin-top:.5em;position:relative;text-align:center} 254 | #ad-box,.blog-post-comments{margin-top:2rem} 255 | .posttitle{text-transform:none;font-size:1.5em;line-height:1.25} 256 | .article-tag-box .article-tag:first-child::before{content:""!important} 257 | .article-tag{display:inline} 258 | .article-tag:before{content:"|";padding:0 5px} 259 | .article-tag .tag-link:before{content:"#"} 260 | #archive .post-list{padding:0} 261 | #archive .post-list .post-item{list-style-type:none;margin-left:0;margin-bottom:1rem} 262 | #archive .post-list .post-item .meta{display:block;font-size:14px;color:#666;min-width:100px;margin-right:16px} 263 | #footer li,#footer li a{margin-right:15px} 264 | @media (min-width:480px){.article-tag::before{content:"|";padding:0 5px} 265 | #archive .post-list .post-item{display:flex;margin-left:1rem;margin-bottom:5px} 266 | #archive .post-list .post-item .meta{text-align:left} 267 | } 268 | #footer,.pagination{text-align:center;width:100%} 269 | .tagcloud-wrap{overflow:hidden} 270 | .tagcloud-wrap a,.tagcloud-wrap a:hover{background-image:none;-webkit-text-size-adjust:none;white-space:nowrap;line-height:23px;margin-right:10px;margin-bottom:4px;float:left} 271 | .blog-post-comments.v .power{display:none} 272 | .blog-post-comments.v a:hover{color:#FF9999} 273 | .blog-post-comments.v *{color:#262626} 274 | .blog-post-comments.v .vwrap{background:#ffffff;border:none;box-shadow:0 0 5px rgba(0,0,0,.125);margin-top:5px} 275 | .blog-post-comments.v .vwrap .vheader .vinput{border-bottom:1px #dedede double} 276 | .blog-post-comments.v .vempty pre{color:#555} 277 | .blog-post-comments.v .vlist .vcard .vh .vmeta .vat,.blog-post-comments.v .vlist .vcard .vhead .vnick:hover{color:#FF9999} 278 | .blog-post-comments.v .vlist .vcard .vquote{border-left:1px dashed #2a2c2f} 279 | .blog-post-comments.v .vlist .vcard .vh{border-bottom:1px solid #f5f6f7} 280 | .blog-post-comments.v .vlist .vcard .vhead .vsys{background:0 0} 281 | .pagination a,.pagination a:hover{background-image:none} 282 | #footer,#footer a{color:#888888} 283 | #footer{padding-top:10px;padding-bottom:10px;font-size:11px;max-width:700px;margin:0 auto 1rem;vertical-align:top} 284 | #footer ul{margin:0;padding:0;list-style:none} 285 | #footer li{display:inline-block;vertical-align:middle;border-right:1px solid #4a4a4a} 286 | #footer li:last-child{border-right:0;margin-right:0} 287 | #footer li:last-child a{margin-right:0} 288 | #footer a:hover{color:#999} 289 | #footer .footer-left{height:20px;line-height:25px;vertical-align:middle} 290 | @media (min-width:39rem){#footer{padding-top:20px;padding-bottom:20px} 291 | #footer .footer-left{float:left} 292 | #footer .footer-right{float:right} 293 | } 294 | .pagination{display:inline-block;margin-top:2rem} 295 | .pagination .page-number{color:#FF9999;} 296 | .pagination a{color:#262626;padding:4px 6px;text-decoration:none;border-radius:5px} 297 | .pagination a:hover:not(.active){color:#eee} 298 | .highlight{color:#d1d9e1} 299 | .highlight .code .comment,.highlight .code .quote{color:#969896;font-style:italic} 300 | .highlight .code .addition,.highlight .code .keyword,.highlight .code .literal,.highlight .code .selector-tag,.highlight .code .type{color:#c9c} 301 | .highlight .code .number,.highlight .code .selector-attr,.highlight .code .selector-pseudo{color:#f99157} 302 | .highlight .code .doctag,.highlight .code .regexp,.highlight .code .string{color:#8abeb7} 303 | .highlight .code .built_in,.highlight .code .name,.highlight .code .section,.highlight .code .title{color:#b5bd68} 304 | .highlight .code .class .title,.highlight .code .selector-id,.highlight .code .template-variable,.highlight .code .variable{color:#fc6} 305 | .highlight .code .name,.highlight .code .section,.highlight .code .strong{font-weight:700} 306 | .highlight .code .bullet,.highlight .code .link,.highlight .code .meta,.highlight .code .subst,.highlight .code .symbol{color:#f99157} 307 | .highlight .code .deletion{color:#dc322f} 308 | .highlight .code .formula{background:#eee8d5} 309 | .highlight .code .attr,.highlight .code .attribute{color:#81a2be} 310 | pre{font-size:13px;padding:10px 15px 0;line-height:22px;-webkit-border-radius:4px;border-radius:4px;background-color:#f5f6f7;box-shadow:0px 0px 5px rgba(0,0,0,.25)} 311 | code{-webkit-border-radius:2px;border-radius:2px;padding:0 5px;font-family:Menlo,"Meslo LG","Helvetica Neue",Helvetica,"Microsoft yahei",Arial,sans-serif,monospace} 312 | pre code{border:none;display:block;padding:0} 313 | .hljs{display:block;overflow-x:auto;padding:.5em;color:#262626} 314 | .hljs-comment,.hljs-quote{color:#969896;font-style:italic} 315 | .hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:#c9c} 316 | .hljs-number,.hljs-selector-attr,.hljs-selector-pseudo{color:#f99157} 317 | .hljs-doctag,.hljs-regexp,.hljs-string{color:#8abeb7} 318 | .hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#b5bd68} 319 | .hljs-class .hljs-title,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#fc6} 320 | .hljs-name,.hljs-section,.hljs-strong{font-weight:700} 321 | .hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#f99157} 322 | .hljs-deletion{color:#dc322f} 323 | .hljs-formula{background:#eee8d5} 324 | .hljs-attr,.hljs-attribute{color:#81a2be} 325 | .hljs-emphasis{font-style:italic} 326 | .coding{position:relative} 327 | .coding .prompt{display:inline;white-space:pre-wrap;line-height:30px;margin-bottom:.75em} 328 | .coding .typed-cursor{display:inline} 329 | .coding .typed-cursor:after{display:inline;vertical-align:-.15em;width:.5em;height:12px;margin-left:5px;background:#FF9999;box-shadow:0 0 0 rgba(31,240,66,.65);-webkit-animation:cursor-blink 1.25s steps(1) infinite;-o-animation:cursor-blink 1.25s steps(1) infinite;animation:cursor-blink 1.25s steps(1) infinite;content:''} 330 | .ad-text{font-size:12px;display:none} 331 | @media (max-width:680px){.ad-text{display:block;color:#FF9999} 332 | } 333 | @-moz-keyframes cursor-blink{0%,100%{opacity:0} 334 | 50%{opacity:1} 335 | } 336 | @-webkit-keyframes cursor-blink{0%,100%{opacity:0} 337 | 50%{opacity:1} 338 | } 339 | @-o-keyframes cursor-blink{0%,100%{opacity:0} 340 | 50%{opacity:1} 341 | } 342 | @keyframes cursor-blink{0%,100%{opacity:0} 343 | 50%{opacity:1} 344 | } 345 | #more-post-list{margin-bottom:0;padding:0} 346 | #more-post-list li:hover a,.dates{color:#FF9999} 347 | #more-post-list li:hover .dates{color:#FF9999} 348 | #archive-list li,#more-post-list li{border-top:1px solid #262626;padding-top:20px;padding-bottom:20px;list-style-type:none;margin-bottom:0} 349 | #more-post-list li:last-child{border-bottom:1px solid #262626} 350 | #more-post-list a{color:#333;display:block;font:700 19px/1.7 "Helvetica Neue",helvetica,Arial,sans-serif;background-image:none;color:#262626;font-size:18px} 351 | #more-post-list .dates{float:right;position:relative;top:1px;font:300 17px/1.8 "Helvetica Neue",helvetica,Arial,sans-serif;color:#262626} 352 | @media (max-width:540px){#more-post-list .dates{display:none} 353 | } 354 | .v .vlist .vcard .vh .vmeta .vat a{background-image:none;color:#FF9999} 355 | .v .vlist .vcard .vhead .vnick a{color:#FF9999;background-image:none} 356 | #footer .footer-left a{color:#888888;text-decoration:none} 357 | #footer .footer-left a:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#888888;-webkit-transition:width .3s ease;transition:width .3s ease} 358 | .protected .submit{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#313131;border:1px solid #ededed;border-radius:.2rem;display:inline-block;background:#ededed;margin-bottom:0;font-weight:400;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;white-space:nowrap;padding:.2rem .5rem;font-size:.875rem;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:0} 359 | .protected .submit:active,.submit:hover{color:#3090e4;border-color:#3090e4;background-color:#fff} 360 | .protected .text{border:none;resize:none;outline:0;padding:7px 6px;max-width:100%;font-size:.775rem} 361 | .protected input{background:#ededed;border-radius:4px} -------------------------------------------------------------------------------- /css/tocbot.css: -------------------------------------------------------------------------------- 1 | .toc { 2 | overflow-y: auto 3 | } 4 | 5 | .toc>.toc-list { 6 | overflow: hidden; 7 | position: relative 8 | } 9 | 10 | .toc>.toc-list li { 11 | list-style: none 12 | } 13 | 14 | .toc-list { 15 | margin: 0; 16 | padding-left: 10px 17 | } 18 | 19 | a.toc-link { 20 | color: currentColor; 21 | height: 100% 22 | } 23 | 24 | .is-collapsible { 25 | max-height: 1000px; 26 | overflow: hidden; 27 | transition: all 300ms ease-in-out 28 | } 29 | 30 | .is-collapsed { 31 | max-height: 0 32 | } 33 | 34 | .is-position-fixed { 35 | position: fixed !important; 36 | top: 0 37 | } 38 | 39 | .is-active-link { 40 | font-weight: 700 41 | } 42 | 43 | .toc-link::before { 44 | background-color: #f5f6f5; 45 | content: ' '; 46 | display: inline-block; 47 | height: inherit; 48 | left: 0; 49 | margin-top: -1px; 50 | position: absolute; 51 | width: 2px 52 | } 53 | 54 | .is-active-link::before { 55 | background-color: #52b571 56 | } -------------------------------------------------------------------------------- /files.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 9 | ?> 10 | 11 |
12 | 37 |
38 | widget('Widget_Metas_Tag_Cloud', 'ignoreZeroCount=1&limit=30')->to($tags); ?> 39 | next()): ?> 40 | name(); ?> 41 | 42 |
43 |
44 | widget('Widget_Contents_Post_Recent', 'pageSize=10000')->to($archives); 46 | $year=0; $mon=0; $i=0; $j=0; 47 | while($archives->next()): 48 | $year_tmp = date('Y',$archives->created); 49 | $mon_tmp = date('m',$archives->created); 50 | $y=$year; $m=$mon; 51 | if ($mon != $mon_tmp && $mon > 0) $output .= ''; 52 | if ($year != $year_tmp && $year > 0) $output .= ''; 53 | if ($year != $year_tmp) { 54 | $year = $year_tmp; 55 | @$output .= '
'. $year .'
    '; //输出年份 56 | } 57 | $output .= '
  • '. $archives->title .'
  • '; //输出文章日期和标题 58 | endwhile; 59 | $output .= '
'; 60 | echo $output; 61 | ?> 62 | 63 |
64 |
65 | need('footer.php'); ?> -------------------------------------------------------------------------------- /footer.php: -------------------------------------------------------------------------------- 1 | 2 |
3 | 11 |
12 | 13 | 14 | is('index')) : ?> 15 | 16 | 17 | 42 | 43 | is('post')) : ?> 44 | 45 | 46 | 47 | 48 | 53 | 56 | 57 | 68 | 69 | footer(); ?> 70 | 71 | 72 | -------------------------------------------------------------------------------- /functions.php: -------------------------------------------------------------------------------- 1 | addInput($logoimg->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 6 | $favicon = new Typecho_Widget_Helper_Form_Element_Text('favicon', NULL, NULL, _t('favicon地址'), _t('一般为http://www.yourblog.com/image.ico,支持 https:// 或 //,留空则不设置favicon')); 7 | $form->addInput($favicon->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 8 | 9 | $appleicon = new Typecho_Widget_Helper_Form_Element_Text('appleicon', NULL, NULL, _t('apple touch icon地址'), _t('一般为http://www.yourblog.com/image.png,支持 https:// 或 //,留空则不设置Apple Touch Icon')); 10 | $form->addInput($appleicon->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 11 | 12 | $github = new Typecho_Widget_Helper_Form_Element_Text('github', NULL, NULL, _t('Github地址'), _t('一般为https://github.com/frostmiku ,留空则不设置Github地址')); 13 | $form->addInput($github->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 14 | $twitter = new Typecho_Widget_Helper_Form_Element_Text('twitter', NULL, NULL, _t('twitter地址'), _t('一般为https://twitter.com/icemiku ,留空则不设置twitter地址')); 15 | $form->addInput($twitter->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 16 | $weibo = new Typecho_Widget_Helper_Form_Element_Text('weibo', NULL, NULL, _t('Weibo地址'), _t('一般为http://www.weibo.com/frostmiku ,留空则不设置Weibo地址')); 17 | $form->addInput($weibo->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 18 | $urldiy = new Typecho_Widget_Helper_Form_Element_Text('urldiy', NULL, NULL, _t('主页自定义地址'), _t('注意该设置会直接输出设置内容,建议格式为\ 支持 FontAwesome 图标 ,留空则不显示')); 19 | $form->addInput($urldiy->addRule('xssCheck', _t('请不要在链接中使用特殊字符'))); 20 | 21 | 22 | $Projects = new Typecho_Widget_Helper_Form_Element_Textarea('Projects', NULL, NULL, _t('首页 Projects 设置(注意:切换主题会被清空,注意备份!)'), _t('按照格式输入链接信息,格式:
链接名称(必须)|链接地址(必须)|链接描述
不同信息之间用英文竖线“|”分隔,例如:
StarWhisper|https://blog.frostmiku.com|星语
若中间有暂时不想填的信息,请留空,例如暂时不想填写链接描述:
StarWhisper|https://blog.frostmiku.com||
多个链接换行即可,一行一个')); 23 | $form->addInput($Projects); 24 | 25 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 26 | array('able' => _t('启用'), 27 | 'disable' => _t('禁止'), 28 | ), 29 | 'disable', _t('文章目录设置'), _t('默认显示随机文章,启用则显示文章目录')); 30 | $form->addInput($catalog); 31 | } 32 | 33 | function themeInit($archive) { 34 | if ($archive->is('index')) { 35 | $archive->parameter->pageSize = 9; // 自定义条数 36 | } 37 | if ($archive->is('single')) { 38 | //$archive->content = createCatalog($archive->content);//文章锚点实现 39 | } 40 | @$comment = spam_protection_pre($comment,$post, $result);//数字验证码 41 | } 42 | 43 | function parseContent($obj){ 44 | $options = Typecho_Widget::widget('Widget_Options'); 45 | if(!empty($options->src_add) && !empty($options->cdn_add)){ 46 | $obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content); 47 | } 48 | echo trim($obj->content); 49 | } 50 | 51 | /**项目展示 52 | 53 | */ 54 | function Projects($sorts = NULL) { 55 | $options = Typecho_Widget::widget('Widget_Options'); 56 | $Project = NULL; 57 | if ($options->Projects) { 58 | $list = explode("\r\n", $options->Projects); 59 | foreach ($list as $val) { 60 | list($name, $url, $description, $sort) = explode("|", $val); 61 | if ($sorts) { 62 | $arr = explode("|", $sorts); 63 | if ($sort && in_array($sort, $arr)) { 64 | $Project .= $url ? '
  • '.$name.': '.$description.'
  • ' : '
  • '.$name.': '.$description.'
  • '; 65 | } 66 | } else { 67 | $Project .= $url ? '
  • '.$name.': '.$description.'
  • ' : '
  • '.$name.': '.$description.'
  • '; 68 | } 69 | } 70 | } 71 | echo $Project ? $Project : '醉后不知天在水,满船清梦压星河。'; 72 | } 73 | 74 | /**阅读浏览次数 75 | 76 | */ 77 | function Postviews($archive) { 78 | $db = Typecho_Db::get(); 79 | $cid = $archive->cid; 80 | if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { 81 | $db->query('ALTER TABLE `'.$db->getPrefix().'contents` ADD `views` INT(10) DEFAULT 0;'); 82 | } 83 | $exist = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid))['views']; 84 | if ($archive->is('single')) { 85 | $cookie = Typecho_Cookie::get('contents_views'); 86 | $cookie = $cookie ? explode(',', $cookie) : array(); 87 | if (!in_array($cid, $cookie)) { 88 | $db->query($db->update('table.contents') 89 | ->rows(array('views' => (int)$exist+1)) 90 | ->where('cid = ?', $cid)); 91 | $exist = (int)$exist+1; 92 | array_push($cookie, $cid); 93 | $cookie = implode(',', $cookie); 94 | Typecho_Cookie::set('contents_views', $cookie); 95 | } 96 | } 97 | echo $exist == 0 ? : $exist; 98 | } 99 | 100 | function theme_random_posts(){ 101 | $defaults = array( 102 | 'number' => 6, 103 | 'xformat' => '
  • {title}
  • ' 104 | ); 105 | $db = Typecho_Db::get(); 106 | $adapterName = $db->getAdapterName();//兼容非MySQL数据库 107 | if($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite'){ 108 | $order_by = 'RANDOM()'; 109 | }else{ 110 | $order_by = 'RAND()'; 111 | } 112 | $sql = $db->select()->from('table.contents') 113 | ->where('status = ?','publish') 114 | ->where('type = ?', 'post') 115 | ->where('created <= '. Helper::options()->gmtTime, 'post') //添加这一句避免未达到时间的文章提前曝光 116 | ->limit($defaults['number']) 117 | ->order($order_by); 118 | $result = $db->fetchAll($sql); 119 | foreach($result as $val){ 120 | $val = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($val); 121 | echo str_replace(array('{permalink}', '{title}'),array($val['permalink'], $val['title']), $defaults['xformat']); 122 | } 123 | } 124 | 125 | 126 | /** 获取浏览器信息 agent); ?> */ 127 | function getBrowser($agent) 128 | { $outputer = false; 129 | if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) { 130 | $outputer = 'IE Browser'; 131 | } else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) { 132 | $str1 = explode('Firefox/', $regs[0]); 133 | $FireFox_vern = explode('.', $str1[1]); 134 | $outputer = 'Firefox Browser '. $FireFox_vern[0]; 135 | } else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) { 136 | $str1 = explode('Maxthon/', $agent); 137 | $Maxthon_vern = explode('.', $str1[1]); 138 | $outputer = 'Maxthon Browser '.$Maxthon_vern[0]; 139 | } else if (preg_match('#SE 2([a-zA-Z0-9.]+)#i', $agent, $regs)) { 140 | $outputer = 'Sogo Browser'; 141 | } else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) { 142 | $outputer = '360 Browser'; 143 | } else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) { 144 | $str1 = explode('Edge/', $regs[0]); 145 | $Edge_vern = explode('.', $str1[1]); 146 | $outputer = 'Edge '.$Edge_vern[0]; 147 | } else if (preg_match('/EdgiOS([\d]*)\/([^\s]+)/i', $agent, $regs)) { 148 | $str1 = explode('EdgiOS/', $regs[0]); 149 | $outputer = 'Edge'; 150 | } else if (preg_match('/UC/i', $agent)) { 151 | $str1 = explode('rowser/', $agent); 152 | $UCBrowser_vern = explode('.', $str1[1]); 153 | $outputer = 'UC Browser '.$UCBrowser_vern[0]; 154 | }else if (preg_match('/OPR/i', $agent)) { 155 | $str1 = explode('OPR/', $agent); 156 | $opr_vern = explode('.', $str1[1]); 157 | $outputer = 'Open Browser '.$opr_vern[0]; 158 | } else if (preg_match('/MicroMesseng/i', $agent, $regs)) { 159 | $outputer = 'Weixin Browser'; 160 | } else if (preg_match('/WeiBo/i', $agent, $regs)) { 161 | $outputer = 'WeiBo Browser'; 162 | } else if (preg_match('/QQ/i', $agent, $regs)||preg_match('/QQ Browser\/([^\s]+)/i', $agent, $regs)) { 163 | $str1 = explode('rowser/', $agent); 164 | $QQ_vern = explode('.', $str1[1]); 165 | $outputer = 'QQ Browser '.$QQ_vern[0]; 166 | } else if (preg_match('/MQBHD/i', $agent, $regs)) { 167 | $str1 = explode('MQBHD/', $agent); 168 | $QQ_vern = explode('.', $str1[1]); 169 | $outputer = 'QQ Browser '.$QQ_vern[0]; 170 | } else if (preg_match('/BIDU/i', $agent, $regs)) { 171 | $outputer = 'Baidu Browser'; 172 | } else if (preg_match('/LBBROWSER/i', $agent, $regs)) { 173 | $outputer = 'KS Browser'; 174 | } else if (preg_match('/TheWorld/i', $agent, $regs)) { 175 | $outputer = 'TheWorld Browser'; 176 | } else if (preg_match('/XiaoMi/i', $agent, $regs)) { 177 | $outputer = 'XiaoMi Browser'; 178 | } else if (preg_match('/UBrowser/i', $agent, $regs)) { 179 | $str1 = explode('rowser/', $agent); 180 | $UCBrowser_vern = explode('.', $str1[1]); 181 | $outputer = 'UCBrowser '.$UCBrowser_vern[0]; 182 | } else if (preg_match('/mailapp/i', $agent, $regs)) { 183 | $outputer = 'Email Browser'; 184 | } else if (preg_match('/2345Explorer/i', $agent, $regs)) { 185 | $outputer = '2345 Browser'; 186 | } else if (preg_match('/Sleipnir/i', $agent, $regs)) { 187 | $outputer = 'Sleipnir Browser'; 188 | } else if (preg_match('/YaBrowser/i', $agent, $regs)) { 189 | $outputer = 'Yandex Browser'; 190 | } else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) { 191 | $outputer = 'Opera Browser'; 192 | } else if (preg_match('/MZBrowser/i', $agent, $regs)) { 193 | $outputer = 'MZ Browser'; 194 | } else if (preg_match('/VivoBrowser/i', $agent, $regs)) { 195 | $outputer = 'Vivo Browser'; 196 | } else if (preg_match('/Quark/i', $agent, $regs)) { 197 | $outputer = 'Quark Browser'; 198 | } else if (preg_match('/mixia/i', $agent, $regs)) { 199 | $outputer = 'Mixia Browser'; 200 | }else if (preg_match('/fusion/i', $agent, $regs)) { 201 | $outputer = 'Fusion'; 202 | } else if (preg_match('/CoolMarket/i', $agent, $regs)) { 203 | $outputer = 'CoolMarket Browser'; 204 | } else if (preg_match('/Thunder/i', $agent, $regs)) { 205 | $outputer = 'Thunder Browser'; 206 | } else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) { 207 | $str1 = explode('Chrome/', $agent); 208 | $chrome_vern = explode('.', $str1[1]); 209 | $outputer = 'Chrome '.$chrome_vern[0]; 210 | } else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) { 211 | $str1 = explode('Version/', $agent); 212 | $safari_vern = explode('.', $str1[1]); 213 | $outputer = 'Safari '.$safari_vern[0]; 214 | } else{ 215 | return false; 216 | } 217 | return $outputer; 218 | } 219 | 220 | /** 获取操作系统信息 agent); ?>*/ 221 | function getOs($agent) 222 | { 223 | $os = false; 224 | 225 | if (preg_match('/win/i', $agent)) { 226 | if (preg_match('/nt 6.0/i', $agent)) { 227 | $os = 'Windows Vista'; 228 | } else if (preg_match('/nt 6.1/i', $agent)) { 229 | $os = 'Windows 7'; 230 | } else if (preg_match('/nt 6.2/i', $agent)) { 231 | $os = 'Windows 8'; 232 | } else if(preg_match('/nt 6.3/i', $agent)) { 233 | $os = 'Windows 8.1'; 234 | } else if(preg_match('/nt 5.1/i', $agent)) { 235 | $os = 'Windows XP'; 236 | } else if (preg_match('/nt 10.0/i', $agent)) { 237 | $os = 'Windows 10'; 238 | } else{ 239 | $os = 'Windows'; 240 | } 241 | } else if (preg_match('/android/i', $agent)) { 242 | if (preg_match('/android 9/i', $agent)) { 243 | $os = 'Android P'; 244 | } 245 | else if (preg_match('/android 8/i', $agent)) { 246 | $os = 'Android O'; 247 | } 248 | else if (preg_match('/android 7/i', $agent)) { 249 | $os = 'Android N'; 250 | } 251 | else if (preg_match('/android 6/i', $agent)) { 252 | $os = 'Android M'; 253 | } 254 | else if (preg_match('/android 5/i', $agent)) { 255 | $os = 'Android L'; 256 | } 257 | else{ 258 | $os = 'Android'; 259 | } 260 | } 261 | else if (preg_match('/ubuntu/i', $agent)) { 262 | $os = 'Linux'; 263 | } else if (preg_match('/linux/i', $agent)) { 264 | $os = 'Linux'; 265 | } else if (preg_match('/iPhone/i', $agent)) { 266 | $os = 'iPhone'; 267 | } else if (preg_match('/iPad/i', $agent)) { 268 | $os = 'iPad'; 269 | } else if (preg_match('/mac/i', $agent)) { 270 | $os = 'OSX'; 271 | }else if (preg_match('/cros/i', $agent)) { 272 | $os = 'Chrome os'; 273 | }else { 274 | return false; 275 | } 276 | return $os; 277 | } 278 | //html压缩 279 | /*****/ 280 | function compressHtml($html_source) { 281 | $chunks = preg_split('/(.*?|.*?<\/nocompress>|||)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE); 282 | $compress = ''; 283 | foreach ($chunks as $c) { 284 | if (strtolower(substr($c, 0, 19)) == '') { 285 | $c = substr($c, 19, strlen($c) - 19 - 20); 286 | $compress .= $c; 287 | continue; 288 | } else if (strtolower(substr($c, 0, 12)) == '') { 289 | $c = substr($c, 12, strlen($c) - 12 - 13); 290 | $compress .= $c; 291 | continue; 292 | } else if (strtolower(substr($c, 0, 4)) == ' $char) { 306 | if ($char == '"' && $chars[$key - 1] != '\\' && !$is_apos) { 307 | $is_quot = !$is_quot; 308 | } else if ($char == '\'' && $chars[$key - 1] != '\\' && !$is_quot) { 309 | $is_apos = !$is_apos; 310 | } else if ($char == '/' && $chars[$key + 1] == '/' && !$is_quot && !$is_apos) { 311 | $tmp = substr($tmp, 0, $key); 312 | break; 313 | } 314 | } 315 | } 316 | $c .= $tmp; 317 | } 318 | } 319 | $c = preg_replace('/[\\n\\r\\t]+/', ' ', $c); 320 | $c = preg_replace('/\\s{2,}/', ' ', $c); 321 | $c = preg_replace('/>\\s <', $c); 322 | $c = preg_replace('/\\/\\*.*?\\*\\//i', '', $c); 323 | $c = preg_replace('//', '', $c); 324 | $compress .= $c; 325 | } 326 | return $compress; 327 | } 328 | 329 | /** 330 | * 根据$coid获取链接 331 | */ 332 | function getPermalinkFromCoid($coid) 333 | { 334 | $db = Typecho_Db::get(); 335 | $options = Helper::options(); 336 | $contents = Typecho_Widget::widget('Widget_Abstract_Contents'); 337 | $row = $db->fetchRow($db->select('cid, type, author, text')->from('table.comments')->where('coid = ? AND status = ?', $coid, 'approved')); 338 | if (empty($row)) { 339 | return 'Comment not found!'; 340 | } 341 | 342 | $cid = $row['cid']; 343 | $select = $db->select('coid, parent')->from('table.comments')->where('cid = ? AND status = ?', $cid, 'approved')->order('coid'); 344 | if ($options->commentsShowCommentOnly) { 345 | $select->where('type = ?', 'comment'); 346 | } 347 | 348 | $comments = $db->fetchAll($select); 349 | if ($options->commentsOrder == 'DESC') { 350 | $comments = array_reverse($comments); 351 | } 352 | 353 | foreach ($comments as $key => $val) { 354 | $array[$val['coid']] = $val['parent']; 355 | } 356 | 357 | $i = $coid; 358 | while ($i != 0) { 359 | $break = $i; 360 | $i = $array[$i]; 361 | } 362 | $count = 0; 363 | foreach ($array as $key => $val) { 364 | if ($val == 0) { 365 | $count++; 366 | } 367 | 368 | if ($key == $break) { 369 | break; 370 | } 371 | 372 | } 373 | $parentContent = $contents->push($db->fetchRow($contents->select()->where('table.contents.cid = ?', $cid))); 374 | $permalink = rtrim($parentContent['permalink'], '/'); 375 | $page = ($options->commentsPageBreak) ? '/comment-page-' . ceil($count / $options->commentsPageSize) : (substr($permalink, -5, 5) == '.html' ? '' : '/'); 376 | return array("author" => $row['author'], "text" => $row['text'], "href" => "{$permalink}{$page}#{$row['type']}-{$coid}"); 377 | } 378 | 379 | /** 380 | * 输出评论回复内容,配合 commentAtContent($coid)一起使用 381 | * coid); ?> 382 | */ 383 | function showCommentContent($coid) 384 | { 385 | $db = Typecho_Db::get(); 386 | $result = $db->fetchRow($db->select('text')->from('table.comments')->where('coid = ? AND status = ?', $coid, 'approved')); 387 | $text = $result['text']; 388 | $atStr = commentAtContent($coid); 389 | $_content = Markdown::convert($text); 390 | //

    391 | if ($atStr !== '') { 392 | $content = substr_replace($_content, $atStr, 0, 3); 393 | } else { 394 | $content = $_content; 395 | } 396 | 397 | echo $content; 398 | } 399 | 400 | /** 401 | * 评论回复加@ 402 | */ 403 | function commentAtContent($coid) 404 | { 405 | $db = Typecho_Db::get(); 406 | $prow = $db->fetchRow($db->select('parent')->from('table.comments')->where('coid = ? AND status = ?', $coid, 'approved')); 407 | $parent = $prow['parent']; 408 | if ($parent != "0") { 409 | $arow = $db->fetchRow($db->select('author')->from('table.comments') 410 | ->where('coid = ? AND status = ?', $parent, 'approved')); 411 | $author = $arow['author']; 412 | $href = '

    @' . $author . ' '; 413 | return $href; 414 | } else { 415 | return ''; 416 | } 417 | } 418 | 419 | 420 | //算术验证评论 421 | 422 | function spam_protection_math(){ 423 | $num1=1; 424 | $num2=rand(1,9); 425 | echo "$num1 + $num2 = "; 426 | echo "\n"; 427 | echo "\n"; 428 | echo ""; 429 | } 430 | function spam_protection_pre($comment, $post, $result){ 431 | if(isset($_POST['sum'])){$sum=$_POST['sum'];} 432 | switch($sum){ 433 | case $_POST['num1']+$_POST['num2']: 434 | break; 435 | case null: 436 | throw new Typecho_Widget_Exception(_t('抱歉:请输入验证码','评论失败')); 437 | break; 438 | default: 439 | throw new Typecho_Widget_Exception(_t('抱歉:验证码错误,请返回重试','评论失败')); 440 | 441 | }; 442 | return $comment; 443 | } 444 | 445 | /** 446 | * 获取扇贝单词每日一句 447 | */ 448 | function today(){ 449 | //删除之前的图片和故事 450 | for ($i=1; $i <=30 ; $i++) { 451 | @unlink(date('Ymd',time()-24*3600*$i).'.json'); 452 | } 453 | $coverstory = date('Ymd').'.json'; //每日故事 json格式 454 | if (!file_exists($coverstory)) { 455 | $json = file_get_contents("compress.zlib://".'https://rest.shanbay.com/api/v2/quote/quotes/today/'); 456 | @file_put_contents($coverstory,$json); //写入文本 457 | } 458 | $coverstory = json_decode(file_get_contents($coverstory),true); 459 | return $coverstory; 460 | } -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | is('index')): ?> 19 | 20 | 21 | 22 | 23 | 24 | is('post') || $this->is('page')): ?> 25 | 26 | 27 | 28 | 29 | 30 | 31 | header('keywords=&generator=&template=&pingback=&xmlrpc=&wlw=&commentReply=&rss1=&rss2=&atom='); ?> 32 | <?php $this->archiveTitle(array( 33 | 'category' => _t('分类 %s 下的文章'), 34 | 'search' => _t('包含关键字 %s 的文章'), 35 | 'tag' => _t('标签 %s 下的文章'), 36 | 'author' => _t('%s 发布的文章') 37 | ), '', ' - '); ?><?php $this->options->title(); ?> 38 | options->favicon): ?> 39 | options->appleicon): ?> 40 | 41 | 42 | 43 | 52 | 53 | 54 | 55 | 56 | 57 | 59 | 60 | -------------------------------------------------------------------------------- /images/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/apple-touch-icon.png -------------------------------------------------------------------------------- /images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/close.png -------------------------------------------------------------------------------- /images/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/favicon-192x192.png -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/favicon.ico -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/loading.gif -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/logo.png -------------------------------------------------------------------------------- /images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/next.png -------------------------------------------------------------------------------- /images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/images/prev.png -------------------------------------------------------------------------------- /images/squares.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 12 | ?> 13 | 14 |

    15 | 41 |
    42 |
    43 |
    44 | 45 |
    46 |

    47 | 48 | 49 | 50 | 0 51 | 52 | 53 | | Find me on 54 |

    55 | .

    59 |

    p.s. 网站已经支持PWA,可尝试添加到桌面

    60 |
    61 |
    62 | 63 | Writing 64 | 65 |
      66 | next()): ?> 67 |
    • 68 |
      69 | 70 |
      71 | 72 | title(38,'...') ?> 73 | 74 |
    • 75 | 76 |
    77 |
    78 |
    79 | 80 | options->github): ?>href="options->github();?>" target="_blank">Projects 81 | 82 |
      83 | 84 |
    85 |
    86 |
    87 |
    88 | need('footer.php'); ?> -------------------------------------------------------------------------------- /js/lazyload.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lazy Load - JavaScript plugin for lazy loading images 3 | * 4 | * Copyright (c) 2007-2017 Mika Tuupola 5 | * 6 | * Licensed under the MIT license: 7 | * http://www.opensource.org/licenses/mit-license.php 8 | * 9 | * Project home: 10 | * https://appelsiini.net/projects/lazyload 11 | * 12 | * Version: 2.0.0-beta.2 13 | * 14 | */ 15 | 16 | (function (root, factory) { 17 | if (typeof exports === "object") { 18 | module.exports = factory(root); 19 | } else if (typeof define === "function" && define.amd) { 20 | define([], factory(root)); 21 | } else { 22 | root.LazyLoad = factory(root); 23 | } 24 | }) (typeof global !== "undefined" ? global : this.window || this.global, function (root) { 25 | 26 | "use strict"; 27 | 28 | const defaults = { 29 | src: "data-src", 30 | srcset: "data-srcset", 31 | selector: ".lazyload" 32 | }; 33 | 34 | /** 35 | * Merge two or more objects. Returns a new object. 36 | * @private 37 | * @param {Boolean} deep If true, do a deep (or recursive) merge [optional] 38 | * @param {Object} objects The objects to merge together 39 | * @returns {Object} Merged values of defaults and options 40 | */ 41 | const extend = function () { 42 | 43 | let extended = {}; 44 | let deep = false; 45 | let i = 0; 46 | let length = arguments.length; 47 | 48 | /* Check if a deep merge */ 49 | if (Object.prototype.toString.call(arguments[0]) === "[object Boolean]") { 50 | deep = arguments[0]; 51 | i++; 52 | } 53 | 54 | /* Merge the object into the extended object */ 55 | let merge = function (obj) { 56 | for (let prop in obj) { 57 | if (Object.prototype.hasOwnProperty.call(obj, prop)) { 58 | /* If deep merge and property is an object, merge properties */ 59 | if (deep && Object.prototype.toString.call(obj[prop]) === "[object Object]") { 60 | extended[prop] = extend(true, extended[prop], obj[prop]); 61 | } else { 62 | extended[prop] = obj[prop]; 63 | } 64 | } 65 | } 66 | }; 67 | 68 | /* Loop through each object and conduct a merge */ 69 | for (; i < length; i++) { 70 | let obj = arguments[i]; 71 | merge(obj); 72 | } 73 | 74 | return extended; 75 | }; 76 | 77 | function LazyLoad(images, options) { 78 | this.settings = extend(defaults, options || {}); 79 | this.images = images || document.querySelectorAll(this.settings.selector); 80 | this.observer = null; 81 | this.init(); 82 | } 83 | 84 | LazyLoad.prototype = { 85 | init: function() { 86 | 87 | /* Without observers load everything and bail out early. */ 88 | if (!root.IntersectionObserver) { 89 | this.loadImages(); 90 | return; 91 | } 92 | 93 | let self = this; 94 | let observerConfig = { 95 | root: null, 96 | rootMargin: "0px", 97 | threshold: [0] 98 | }; 99 | 100 | this.observer = new IntersectionObserver(function(entries) { 101 | entries.forEach(function (entry) { 102 | if (entry.intersectionRatio > 0) { 103 | self.observer.unobserve(entry.target); 104 | let src = entry.target.getAttribute(self.settings.src); 105 | let srcset = entry.target.getAttribute(self.settings.srcset); 106 | if ("img" === entry.target.tagName.toLowerCase()) { 107 | if (src) { 108 | entry.target.src = src; 109 | } 110 | if (srcset) { 111 | entry.target.srcset = srcset; 112 | } 113 | } else { 114 | entry.target.style.backgroundImage = "url(" + src + ")"; 115 | } 116 | } 117 | }); 118 | }, observerConfig); 119 | 120 | this.images.forEach(function (image) { 121 | self.observer.observe(image); 122 | }); 123 | }, 124 | 125 | loadAndDestroy: function () { 126 | if (!this.settings) { return; } 127 | this.loadImages(); 128 | this.destroy(); 129 | }, 130 | 131 | loadImages: function () { 132 | if (!this.settings) { return; } 133 | 134 | let self = this; 135 | this.images.forEach(function (image) { 136 | let src = image.getAttribute(self.settings.src); 137 | let srcset = image.getAttribute(self.settings.srcset); 138 | if ("img" === image.tagName.toLowerCase()) { 139 | if (src) { 140 | image.src = src; 141 | } 142 | if (srcset) { 143 | image.srcset = srcset; 144 | } 145 | } else { 146 | image.style.backgroundImage = "url(" + src + ")"; 147 | } 148 | }); 149 | }, 150 | 151 | destroy: function () { 152 | if (!this.settings) { return; } 153 | this.observer.disconnect(); 154 | this.settings = null; 155 | } 156 | }; 157 | 158 | root.lazyload = function(images, options) { 159 | return new LazyLoad(images, options); 160 | }; 161 | 162 | if (root.jQuery) { 163 | const $ = root.jQuery; 164 | $.fn.lazyload = function (options) { 165 | options = options || {}; 166 | options.attribute = options.attribute || "data-src"; 167 | new LazyLoad($.makeArray(this), options); 168 | return this; 169 | }; 170 | } 171 | 172 | return LazyLoad; 173 | }); 174 | -------------------------------------------------------------------------------- /js/lightbox.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lightbox v2.10.0 3 | * by Lokesh Dhakar 4 | * 5 | * More info: 6 | * http://lokeshdhakar.com/projects/lightbox2/ 7 | * 8 | * Copyright 2007, 2018 Lokesh Dhakar 9 | * Released under the MIT license 10 | * https://github.com/lokesh/lightbox2/blob/master/LICENSE 11 | * 12 | * @preserve 13 | */ 14 | !function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.lightbox=b(a.jQuery)}(this,function(a){function b(b){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=a.extend({},this.constructor.defaults),this.option(b)}return b.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:600,fitImagesInViewport:!0,imageFadeDuration:600,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1,sanitizeTitle:!1},b.prototype.option=function(b){a.extend(this.options,b)},b.prototype.imageCountLabel=function(a,b){return this.options.albumLabel.replace(/%1/g,a).replace(/%2/g,b)},b.prototype.init=function(){var b=this;a(document).ready(function(){b.enable(),b.build()})},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){if(!(a("#lightbox").length>0)){var b=this;a('
    ').appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.$image=this.$lightbox.find(".lb-image"),this.$nav=this.$lightbox.find(".lb-nav"),this.containerPadding={top:parseInt(this.$container.css("padding-top"),10),right:parseInt(this.$container.css("padding-right"),10),bottom:parseInt(this.$container.css("padding-bottom"),10),left:parseInt(this.$container.css("padding-left"),10)},this.imageBorderWidth={top:parseInt(this.$image.css("border-top-width"),10),right:parseInt(this.$image.css("border-right-width"),10),bottom:parseInt(this.$image.css("border-bottom-width"),10),left:parseInt(this.$image.css("border-left-width"),10)},this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===b.currentImageIndex?b.changeImage(b.album.length-1):b.changeImage(b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.currentImageIndex===b.album.length-1?b.changeImage(0):b.changeImage(b.currentImageIndex+1),!1}),this.$nav.on("mousedown",function(a){3===a.which&&(b.$nav.css("pointer-events","none"),b.$lightbox.one("contextmenu",function(){setTimeout(function(){this.$nav.css("pointer-events","auto")}.bind(b),0)}))}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})}},b.prototype.start=function(b){function c(a){d.album.push({alt:a.attr("data-alt"),link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),a("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;ii||e.height>h)&&(e.width/i>e.height/h?(g=i,f=parseInt(e.height/(e.width/g),10),d.width(g),d.height(f)):(f=h,g=parseInt(e.width/(e.height/f),10),d.width(g),d.height(f)))),c.sizeContainer(d.width(),d.height())},e.src=this.album[b].link,this.currentImageIndex=b},b.prototype.sizeOverlay=function(){this.$overlay.width(a(document).width()).height(a(document).height())},b.prototype.sizeContainer=function(a,b){function c(){d.$lightbox.find(".lb-dataContainer").width(g),d.$lightbox.find(".lb-prevLink").height(h),d.$lightbox.find(".lb-nextLink").height(h),d.showImage()}var d=this,e=this.$outerContainer.outerWidth(),f=this.$outerContainer.outerHeight(),g=a+this.containerPadding.left+this.containerPadding.right+this.imageBorderWidth.left+this.imageBorderWidth.right,h=b+this.containerPadding.top+this.containerPadding.bottom+this.imageBorderWidth.top+this.imageBorderWidth.bottom;e!==g||f!==h?this.$outerContainer.animate({width:g,height:h},this.options.resizeDuration,"swing",function(){c()}):c()},b.prototype.showImage=function(){this.$lightbox.find(".lb-loader").stop(!0).hide(),this.$lightbox.find(".lb-image").fadeIn(this.options.imageFadeDuration),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},b.prototype.updateNav=function(){var a=!1;try{document.createEvent("TouchEvent"),a=!!this.options.alwaysShowNavOnTouchDevices}catch(a){}this.$lightbox.find(".lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(a&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".lb-prev").show(),a&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex1&&this.options.showImageNumberLabel){var d=this.imageCountLabel(this.currentImageIndex+1,this.album.length);this.$lightbox.find(".lb-number").text(d).fadeIn("fast")}else this.$lightbox.find(".lb-number").hide();this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return b.sizeOverlay()})},b.prototype.preloadNeighboringImages=function(){if(this.album.length>this.currentImageIndex+1){(new Image).src=this.album[this.currentImageIndex+1].link}if(this.currentImageIndex>0){(new Image).src=this.album[this.currentImageIndex-1].link}},b.prototype.enableKeyboardNav=function(){a(document).on("keyup.keyboard",a.proxy(this.keyboardAction,this))},b.prototype.disableKeyboardNav=function(){a(document).off(".keyboard")},b.prototype.keyboardAction=function(a){var b=a.keyCode,c=String.fromCharCode(b).toLowerCase();27===b||c.match(/x|o|c/)?this.end():"p"===c||37===b?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1):"n"!==c&&39!==b||(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0))},b.prototype.end=function(){this.disableKeyboardNav(),a(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),a("select, object, embed").css({visibility:"visible"}),this.options.disableScrolling&&a("html").removeClass("lb-disable-scrolling")},new b}); -------------------------------------------------------------------------------- /js/main.js: -------------------------------------------------------------------------------- 1 | if (!!$.prototype.justifiedGallery) { // if justifiedGallery method is defined 2 | var options = { 3 | rowHeight: 140, 4 | margins: 4, 5 | lastRow: 'justify' 6 | }; 7 | $('.article-gallery').justifiedGallery(options); 8 | } 9 | 10 | $(document).ready(function () { 11 | $("#menu > #nav").show(); 12 | $("#menu-icon, #menu-icon-tablet").click(function () { 13 | if ($('#menu').css('visibility') == 'hidden') { 14 | $('#menu').css('visibility', 'visible'); 15 | $('#menu-icon, #menu-icon-tablet').addClass('active'); 16 | 17 | var topDistance = $("#menu > #nav").offset().top; 18 | 19 | if ($('#menu').css('visibility') != 'hidden' && topDistance < 50) { 20 | $("#menu > #nav").show(); 21 | } else if ($('#menu').css('visibility') != 'hidden' && topDistance > 100) { 22 | $("#menu > #nav").hide(); 23 | } 24 | return false; 25 | } else { 26 | $('#menu').css('visibility', 'hidden'); 27 | $('#menu-icon, #menu-icon-tablet').removeClass('active'); 28 | return false; 29 | } 30 | }); 31 | 32 | /* Toggle between adding and removing the "responsive" class to topnav when the user clicks on the icon */ 33 | $("#header > #nav > ul > .icon").click(function () { 34 | $("#header > #nav > ul").toggleClass("responsive"); 35 | }); 36 | 37 | if ($("#menu").length) { 38 | $(window).on('scroll', function () { 39 | var topDistance = $("#menu > #nav").offset().top; 40 | 41 | if ($('#menu').css('visibility') != 'hidden' && topDistance < 50) { 42 | $("#menu > #nav").show(); 43 | } else if ($('#menu').css('visibility') != 'hidden' && topDistance > 100) { 44 | $("#menu > #nav").hide(); 45 | } 46 | 47 | if (!$("#menu-icon").is(":visible") && topDistance < 50) { 48 | $("#menu-icon-tablet").show(); 49 | $("#top-icon-tablet").hide(); 50 | } else if (!$("#menu-icon").is(":visible") && topDistance > 100) { 51 | $("#menu-icon-tablet").hide(); 52 | $("#top-icon-tablet").show(); 53 | } 54 | }); 55 | } 56 | 57 | if ($("#footer-post").length) { 58 | var lastScrollTop = 0; 59 | $(window).on('scroll', function () { 60 | var topDistance = $(window).scrollTop(); 61 | 62 | if (topDistance > lastScrollTop) { 63 | // downscroll code 64 | $("#footer-post").hide(); 65 | } else { 66 | // upscroll code 67 | $("#footer-post").show(); 68 | } 69 | lastScrollTop = topDistance; 70 | 71 | $("#nav-footer").hide(); 72 | $("#toc-footer").hide(); 73 | $("#share-footer").hide(); 74 | 75 | if (topDistance < 50) { 76 | $("#actions-footer > ul > #top").hide(); 77 | $("#actions-footer > ul > #menu").show(); 78 | } else if (topDistance > 100) { 79 | $("#actions-footer > ul > #menu").hide(); 80 | $("#actions-footer > ul > #top").show(); 81 | } 82 | }); 83 | } 84 | }); 85 | 86 | if ($('.toc').length > 0) { 87 | var headerEl = 'h2,h3,h4,h5', //headers 88 | content = '.content',//文章容器 89 | idArr = {}; //标题数组以确定是否增加索引id 90 | //add #id 91 | 92 | $(content).children(headerEl).each(function () { 93 | //去除空格以及多余标点 94 | var headerId = $(this).text().replace(/[\s|\~|`|\!|\@|\#|\$|\%|\^|\&|\*|\(|\)|\_|\+|\=|\||\|\[|\]|\{|\}|\;|\:|\"|\'|\,|\<|\.|\>|\/|\?|\:|\,|\。]/g, ''); 95 | 96 | headerId = headerId.toLowerCase(); 97 | if (idArr[headerId]) { 98 | //id已经存在 99 | $(this).attr('id', headerId + '-' + idArr[headerId]); 100 | idArr[headerId]++; 101 | } 102 | else { 103 | //id未存在 104 | idArr[headerId] = 1; 105 | $(this).attr('id', headerId); 106 | } 107 | }); 108 | 109 | tocbot.init({ 110 | // Where to render the table of contents. 111 | tocSelector: '.toc', 112 | // Where to grab the headings to build the table of contents. 113 | contentSelector: content, 114 | // Which headings to grab inside of the contentSelector element. 115 | headingSelector: headerEl, 116 | scrollSmooth: true, 117 | scrollSmoothOffset: 0, 118 | headingsOffset: 100 119 | }); 120 | } 121 | -------------------------------------------------------------------------------- /js/pangu.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * pangu.js 3 | * -------- 4 | * @version: 4.0.7 5 | * @homepage: https://github.com/vinta/pangu.js 6 | * @license: MIT 7 | * @author: Vinta Chen (https://github.com/vinta) 8 | */ 9 | !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():"function"==typeof define&&define.amd?define("pangu",[],t):"object"==typeof exports?exports.pangu=t():e.pangu=t()}(window,function(){return function(e){var t={};function n(a){if(t[a])return t[a].exports;var i=t[a]={i:a,l:!1,exports:{}};return e[a].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,a){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:a})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var a=Object.create(null);if(n.r(a),Object.defineProperty(a,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(a,i,function(t){return e[t]}.bind(null,i));return a},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=0)}([function(e,t,n){var a,i,o;i=[],void 0===(o="function"==typeof(a=function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function a(e,t){for(var n=0;n=0}},{key:"isInsideSpecificTag",value:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],a=e;if(n&&this.isSpecificTag(a,t))return!0;for(;a.parentNode;)if(a=a.parentNode,this.isSpecificTag(a,t))return!0;return!1}},{key:"canIgnoreNode",value:function(e){var t=e;if(t&&(this.isSpecificTag(t,this.ignoredTags)||this.isContentEditable(t)))return!0;for(;t.parentNode;)if((t=t.parentNode)&&(this.isSpecificTag(t,this.ignoredTags)||this.isContentEditable(t)))return!0;return!1}},{key:"isFirstTextChild",value:function(e,t){for(var n=e.childNodes,a=0;a-1;a--){var i=n[a];if(i.nodeType!==Node.COMMENT_NODE&&i.textContent)return i===t}return!1}},{key:"spacingNodeByXPath",value:function(e,t){if(t instanceof Node&&!(t instanceof DocumentFragment))for(var n,a,i=document.evaluate(e,t,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null),o=i.snapshotLength-1;o>-1;--o){if(n=i.snapshotItem(o),this.isSpecificTag(n.parentNode,this.presentationalTags)&&!this.isInsideSpecificTag(n.parentNode,this.ignoredTags)){var r=n.parentNode;if(r.previousSibling){var c=r.previousSibling;if(c.nodeType===Node.TEXT_NODE){var s=c.data.substr(-1)+n.data.toString().charAt(0),u=this.spacing(s);s!==u&&(c.data="".concat(c.data," "))}}if(r.nextSibling){var p=r.nextSibling;if(p.nodeType===Node.TEXT_NODE){var l=n.data.substr(-1)+p.data.toString().charAt(0),f=this.spacing(l);l!==f&&(p.data=" ".concat(p.data))}}}if(this.canIgnoreNode(n))a=n;else{var g=this.spacing(n.data);if(n.data!==g&&(n.data=g),a){if(n.nextSibling&&n.nextSibling.nodeName.search(this.spaceLikeTags)>=0){a=n;continue}var d=n.data.toString().substr(-1)+a.data.toString().substr(0,1),h=this.spacing(d);if(h!==d){for(var y=a;y.parentNode&&-1===y.nodeName.search(this.spaceSensitiveTags)&&this.isFirstTextChild(y.parentNode,y);)y=y.parentNode;for(var v=n;v.parentNode&&-1===v.nodeName.search(this.spaceSensitiveTags)&&this.isLastTextChild(v.parentNode,v);)v=v.parentNode;if(v.nextSibling&&v.nextSibling.nodeName.search(this.spaceLikeTags)>=0){a=n;continue}if(-1===v.nodeName.search(this.blockTags))if(-1===y.nodeName.search(this.spaceSensitiveTags))-1===y.nodeName.search(this.ignoredTags)&&-1===y.nodeName.search(this.blockTags)&&(a.previousSibling?-1===a.previousSibling.nodeName.search(this.spaceLikeTags)&&(a.data=" ".concat(a.data)):this.canIgnoreNode(a)||(a.data=" ".concat(a.data)));else if(-1===v.nodeName.search(this.spaceSensitiveTags))n.data="".concat(n.data," ");else{var b=document.createElement("pangu");b.innerHTML=" ",y.previousSibling?-1===y.previousSibling.nodeName.search(this.spaceLikeTags)&&y.parentNode.insertBefore(b,y):y.parentNode.insertBefore(b,y),b.previousElementSibling||b.parentNode&&b.parentNode.removeChild(b)}}}a=n}}}},{key:"spacingNode",value:function(e){var t=".//*/text()[normalize-space(.)]";e.children&&0===e.children.length&&(t=".//text()[normalize-space(.)]"),this.spacingNodeByXPath(t,e)}},{key:"spacingElementById",value:function(e){var t='id("'.concat(e,'")//text()');this.spacingNodeByXPath(t,document)}},{key:"spacingElementByClassName",value:function(e){var t='//*[contains(concat(" ", normalize-space(@class), " "), "'.concat(e,'")]//text()');this.spacingNodeByXPath(t,document)}},{key:"spacingElementByTagName",value:function(e){var t="//".concat(e,"//text()");this.spacingNodeByXPath(t,document)}},{key:"spacingPageTitle",value:function(){this.spacingNodeByXPath("/html/head/title/text()",document)}},{key:"spacingPageBody",value:function(){var e="/html/body//*/text()[normalize-space(.)]";["script","style","textarea"].forEach(function(t){e="".concat(e,'[translate(name(..),"ABCDEFGHIJKLMNOPQRSTUVWXYZ","abcdefghijklmnopqrstuvwxyz")!="').concat(t,'"]')}),this.spacingNodeByXPath(e,document)}},{key:"spacingPage",value:function(){this.spacingPageTitle(),this.spacingPageBody()}},{key:"autoSpacingPage",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e3,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:500,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:2e3;if(document.body instanceof Node&&!this.isAutoSpacingPageExecuted){this.isAutoSpacingPageExecuted=!0;var a=this,i=function(e){var t=this,n=arguments,a=!1;return function(){if(!a){var i=t;a=!0,e.apply(i,n)}}}(function(){a.spacingPage()}),o=document.getElementsByTagName("video");if(0===o.length)setTimeout(function(){i()},e);else for(var r=0;r=n?(e.apply(c,s),r=u):o=setTimeout(function(){e.apply(c,s)},t)}}(function(){for(;s.length;){var e=s.shift();e&&a.spacingNode(e)}},t,{maxWait:n}),p=new MutationObserver(function(e,t){e.forEach(function(e){switch(e.type){case"childList":e.addedNodes.forEach(function(e){e.nodeType===Node.ELEMENT_NODE?s.push(e):e.nodeType===Node.TEXT_NODE&&s.push(e.parentNode)});break;case"characterData":var t=e.target;t.nodeType===Node.TEXT_NODE&&s.push(t.parentNode)}}),u()});p.observe(document.body,{characterData:!0,childList:!0,subtree:!0})}}}])&&a(n.prototype,c),s&&a(n,s),t;var n,c,s}(n(1).Pangu),s=new c;e.exports=s,e.exports.default=s,e.exports.Pangu=c})?a.apply(t,i):a)||(e.exports=o)},function(e,t,n){var a,i,o;i=[],void 0===(o="function"==typeof(a=function(){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(e,t){for(var n=0;n])([A-Za-z0-9])"),"g"),m=new RegExp("([A-Za-z0-9])([\\+\\-\\*\\/=&\\|<>])([".concat(a,"])"),"g"),$=/([\/]) ([a-z\-_\.\/]+)/g,E=/([\/\.])([A-Za-z\-_\.\/]+) ([\/])/g,S=new RegExp("([".concat(a,"])([\\(\\[\\{<>“])"),"g"),T=new RegExp("([\\)\\]\\}<>”])([".concat(a,"])"),"g"),N=/([\(\[\{<\u201c]+)[ ]*(.+?)[ ]*([\)\]\}>\u201d]+)/,w=new RegExp("([A-Za-z0-9".concat(a,"])[ ]*([“])([A-Za-z0-9").concat(a,"\\-_ ]+)([”])"),"g"),k=new RegExp("([“])([A-Za-z0-9".concat(a,"\\-_ ]+)([”])[ ]*([A-Za-z0-9").concat(a,"])"),"g"),P=/([A-Za-z0-9])([\(\[\{])/g,O=/([\)\]\}])([A-Za-z0-9])/g,_=new RegExp("([".concat(a,"])([A-Za-zͰ-Ͽ0-9@\\$%\\^&\\*\\-\\+\\\\=\\|/¡-ÿ⅐-↏✀—➿])"),"g"),x=new RegExp("([A-Za-zͰ-Ͽ0-9~\\$%\\^&\\*\\-\\+\\\\=\\|/!;:,\\.\\?¡-ÿ⅐-↏✀—➿])([".concat(a,"])"),"g"),R=/(%)([A-Za-z])/g,A=/([ ]*)([\u00b7\u2022\u2027])([ ]*)/g,j=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),this.version="4.0.7"}return a=e,(j=[{key:"convertToFullwidth",value:function(e){return e.replace(/~/g,"~").replace(/!/g,"!").replace(/;/g,";").replace(/:/g,":").replace(/,/g,",").replace(/\./g,"。").replace(/\?/g,"?")}},{key:"spacing",value:function(e){if("string"!=typeof e)return console.warn("spacing(text) only accepts string but got ".concat(t(e))),e;if(e.length<=1||!i.test(e))return e;var n=this,a=e;return a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=(a=a.replace(o,function(e,t,a,i){var o=n.convertToFullwidth(a);return"".concat(t).concat(o).concat(i)})).replace(r,function(e,t,a){var i=n.convertToFullwidth(a);return"".concat(t).concat(i)})).replace(c,"$1 $2")).replace(s,"$1:$2")).replace(u,"$1 $2")).replace(p,"$1 $2")).replace(l,"$1$2$3")).replace(f,"$1 $2")).replace(g,"$1 $2")).replace(d,"$1's")).replace(h,"$1 $2$3$4 $5")).replace(y,"$1 $2")).replace(v,"$1 $3")).replace(b,"$1 $2 $3")).replace(m,"$1 $2 $3")).replace($,"$1$2")).replace(E,"$1$2$3")).replace(S,"$1 $2")).replace(T,"$1 $2")).replace(N,"$1$2$3")).replace(w,"$1 $2$3$4")).replace(k,"$1$2$3 $4")).replace(P,"$1 $2")).replace(O,"$1 $2")).replace(_,"$1 $2")).replace(x,"$1 $2")).replace(R,"$1 $2")).replace(A,"・")}},{key:"spacingText",value:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(){};try{t=this.spacing(e)}catch(e){return void n(e)}n(null,t)}},{key:"spacingTextSync",value:function(e){return this.spacing(e)}}])&&n(a.prototype,j),z&&n(a,z),e;var a,j,z}(),z=new j;e.exports=z,e.exports.default=z,e.exports.Pangu=j})?a.apply(t,i):a)||(e.exports=o)}])}); -------------------------------------------------------------------------------- /js/tocbot.min.js: -------------------------------------------------------------------------------- 1 | !function(e){function t(o){if(n[o])return n[o].exports;var l=n[o]={i:o,l:!1,exports:{}};return e[o].call(l.exports,l,l.exports,t),l.l=!0,l.exports}var n={};t.m=e,t.c=n,t.d=function(e,n,o){t.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:o})},t.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return t.d(n,"a",n),n},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p="",t(t.s=0)}([function(e,t,n){(function(o){var l,r,i;!function(n,o){r=[],l=o(n),void 0!==(i="function"==typeof l?l.apply(t,r):l)&&(e.exports=i)}(void 0!==o?o:this.window||this.global,function(e){"use strict";function t(){for(var e={},t=0;te.fixedSidebarOffset?-1===n.className.indexOf(e.positionFixedClass)&&(n.className+=h+e.positionFixedClass):n.className=n.className.split(h+e.positionFixedClass).join("")}function i(t){if(e.scrollContainer&&document.querySelector(e.scrollContainer))var n=document.querySelector(e.scrollContainer).scrollTop;else var n=document.documentElement.scrollTop||f.scrollTop;e.positionFixedSelector&&r();var o,l=t;if(m&&null!==document.querySelector(e.tocSelector)&&l.length>0){d.call(l,function(t,r){if(t.offsetTop>n+e.headingsOffset+10){return o=l[0===r?r:r-1],!0}if(r===l.length-1)return o=l[l.length-1],!0});var i=document.querySelector(e.tocSelector).querySelectorAll("."+e.linkClass);u.call(i,function(t){t.className=t.className.split(h+e.activeLinkClass).join("")});var c=document.querySelector(e.tocSelector).querySelectorAll("."+e.listItemClass);u.call(c,function(t){t.className=t.className.split(h+e.activeListItemClass).join("")});var a=document.querySelector(e.tocSelector).querySelector("."+e.linkClass+".node-name--"+o.nodeName+'[href="#'+o.id+'"]');-1===a.className.indexOf(e.activeLinkClass)&&(a.className+=h+e.activeLinkClass);var p=a.parentNode;p&&-1===p.className.indexOf(e.activeListItemClass)&&(p.className+=h+e.activeListItemClass);var C=document.querySelector(e.tocSelector).querySelectorAll("."+e.listClass+"."+e.collapsibleClass);u.call(C,function(t){-1===t.className.indexOf(e.isCollapsedClass)&&(t.className+=h+e.isCollapsedClass)}),a.nextSibling&&-1!==a.nextSibling.className.indexOf(e.isCollapsedClass)&&(a.nextSibling.className=a.nextSibling.className.split(h+e.isCollapsedClass).join("")),s(a.parentNode.parentNode)}}function s(t){return-1!==t.className.indexOf(e.collapsibleClass)&&-1!==t.className.indexOf(e.isCollapsedClass)?(t.className=t.className.split(h+e.isCollapsedClass).join(""),s(t.parentNode.parentNode)):t}function c(t){var n=t.target||t.srcElement;"string"==typeof n.className&&-1!==n.className.indexOf(e.linkClass)&&(m=!1)}function a(){m=!0}var u=[].forEach,d=[].some,f=document.body,m=!0,h=" ";return{enableTocAnimation:a,disableTocAnimation:c,render:n,updateToc:i}}},function(e,t){e.exports=function(e){function t(e){return e[e.length-1]}function n(e){return+e.nodeName.split("H").join("")}function o(t){var o={id:t.id,children:[],nodeName:t.nodeName,headingLevel:n(t),textContent:t.textContent.trim()};return e.includeHtml&&(o.childNodes=t.childNodes),o}function l(l,r){for(var i=o(l),s=n(l),c=r,a=t(c),u=a?a.headingLevel:0,d=s-u;d>0;)a=t(c),a&&void 0!==a.children&&(c=a.children),d--;return s>=e.collapseDepth&&(i.isCollapsed=!0),c.push(i),c}function r(t,n){var o=n;e.ignoreSelector&&(o=n.split(",").map(function(t){return t.trim()+":not("+e.ignoreSelector+")"}));try{return document.querySelector(t).querySelectorAll(o)}catch(e){return console.warn("Element not found: "+t),null}}function i(e){return s.call(e,function(e,t){return l(o(t),e.nest),e},{nest:[]})}var s=[].reduce;return{nestHeadingsArray:i,selectHeadings:r}}},function(e,t){function n(e){function t(e){return"a"===e.tagName.toLowerCase()&&(e.hash.length>0||"#"===e.href.charAt(e.href.length-1))&&(n(e.href)===s||n(e.href)+"#"===s)}function n(e){return e.slice(0,e.lastIndexOf("#"))}function l(e){var t=document.getElementById(e.substring(1));t&&(/^(?:a|select|input|button|textarea)$/i.test(t.tagName)||(t.tabIndex=-1),t.focus())}!function(){document.documentElement.style}();var r=e.duration,i=e.offset,s=location.hash?n(location.href):location.href;!function(){function n(n){!t(n.target)||n.target.className.indexOf("no-smooth-scroll")>-1||"#"===n.target.href.charAt(n.target.href.length-2)&&"!"===n.target.href.charAt(n.target.href.length-1)||-1===n.target.className.indexOf(e.linkClass)||o(n.target.hash,{duration:r,offset:i,callback:function(){l(n.target.hash)}})}document.body.addEventListener("click",n,!1)}()}function o(e,t){function n(e){i=e-r,window.scrollTo(0,c.easing(i,s,u,d)),ili{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-remove:before,.fa-close:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-gear:before,.fa-cog:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-rotate-right:before,.fa-repeat:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-warning:before,.fa-exclamation-triangle:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-gears:before,.fa-cogs:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-save:before,.fa-floppy-o:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-unsorted:before,.fa-sort:before{content:"\f0dc"}.fa-sort-down:before,.fa-sort-desc:before{content:"\f0dd"}.fa-sort-up:before,.fa-sort-asc:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-legal:before,.fa-gavel:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-flash:before,.fa-bolt:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-paste:before,.fa-clipboard:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-unlink:before,.fa-chain-broken:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:"\f150"}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:"\f151"}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:"\f152"}.fa-euro:before,.fa-eur:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-rupee:before,.fa-inr:before{content:"\f156"}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:"\f157"}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:"\f158"}.fa-won:before,.fa-krw:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-turkish-lira:before,.fa-try:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-institution:before,.fa-bank:before,.fa-university:before{content:"\f19c"}.fa-mortar-board:before,.fa-graduation-cap:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:"\f1c5"}.fa-file-zip-o:before,.fa-file-archive-o:before{content:"\f1c6"}.fa-file-sound-o:before,.fa-file-audio-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:"\f1d0"}.fa-ge:before,.fa-empire:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-send:before,.fa-paper-plane:before{content:"\f1d8"}.fa-send-o:before,.fa-paper-plane-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-hotel:before,.fa-bed:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-yc:before,.fa-y-combinator:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-tv:before,.fa-television:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-signing:before,.fa-sign-language:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto} 5 | -------------------------------------------------------------------------------- /lib/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /lib/meslo-LG/fonts/MesloLGS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/lib/meslo-LG/fonts/MesloLGS-Regular.woff -------------------------------------------------------------------------------- /lib/meslo-LG/styles.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Meslo LG'; 3 | font-style: normal; 4 | src: local('Meslo LG S'), url(fonts/MesloLGS-Regular.woff) format('woff'); 5 | } 6 | -------------------------------------------------------------------------------- /lib/typed.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * 3 | * typed.js - A JavaScript Typing Animation Library 4 | * Author: Matt Boldt 5 | * Version: v2.0.9 6 | * Url: https://github.com/mattboldt/typed.js 7 | * License(s): MIT 8 | * 9 | */ 10 | (function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Typed=e():t.Typed=e()})(this,function(){return function(t){function e(n){if(s[n])return s[n].exports;var i=s[n]={exports:{},id:n,loaded:!1};return t[n].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var s={};return e.m=t,e.c=s,e.p="",e(0)}([function(t,e,s){"use strict";function n(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var i=function(){function t(t,e){for(var s=0;st.length)););var u=t.substring(0,e),l=t.substring(u.length+1,e+i),c=t.substring(e+i+1);t=u+l+c,i--}s.timeout=setTimeout(function(){s.toggleBlinking(!1),e===t.length?s.doneTyping(t,e):s.keepTyping(t,e,i),s.temporaryPause&&(s.temporaryPause=!1,s.options.onTypingResumed(s.arrayPos,s))},n)},n))}},{key:"keepTyping",value:function(t,e,s){0===e&&(this.toggleBlinking(!1),this.options.preStringTyped(this.arrayPos,this)),e+=s;var n=t.substr(0,e);this.replaceText(n),this.typewrite(t,e)}},{key:"doneTyping",value:function(t,e){var s=this;this.options.onStringTyped(this.arrayPos,this),this.toggleBlinking(!0),this.arrayPos===this.strings.length-1&&(this.complete(),this.loop===!1||this.curLoop===this.loopCount)||(this.timeout=setTimeout(function(){s.backspace(t,e)},this.backDelay))}},{key:"backspace",value:function(t,e){var s=this;if(this.pause.status===!0)return void this.setPauseStatus(t,e,!0);if(this.fadeOut)return this.initFadeOut();this.toggleBlinking(!1);var n=this.humanizer(this.backSpeed);this.timeout=setTimeout(function(){e=o.htmlParser.backSpaceHtmlChars(t,e,s);var n=t.substr(0,e);if(s.replaceText(n),s.smartBackspace){var i=s.strings[s.arrayPos+1];i&&n===i.substr(0,e)?s.stopNum=e:s.stopNum=0}e>s.stopNum?(e--,s.backspace(t,e)):e<=s.stopNum&&(s.arrayPos++,s.arrayPos===s.strings.length?(s.arrayPos=0,s.options.onLastStringBackspaced(),s.shuffleStringsIfNeeded(),s.begin()):s.typewrite(s.strings[s.sequence[s.arrayPos]],e))},n)}},{key:"complete",value:function(){this.options.onComplete(this),this.loop?this.curLoop++:this.typingComplete=!0}},{key:"setPauseStatus",value:function(t,e,s){this.pause.typewrite=s,this.pause.curString=t,this.pause.curStrPos=e}},{key:"toggleBlinking",value:function(t){this.cursor&&(this.pause.status||this.cursorBlinking!==t&&(this.cursorBlinking=t,t?this.cursor.classList.add("typed-cursor--blink"):this.cursor.classList.remove("typed-cursor--blink")))}},{key:"humanizer",value:function(t){return Math.round(Math.random()*t/2)+t}},{key:"shuffleStringsIfNeeded",value:function(){this.shuffle&&(this.sequence=this.sequence.sort(function(){return Math.random()-.5}))}},{key:"initFadeOut",value:function(){var t=this;return this.el.className+=" "+this.fadeOutClass,this.cursor&&(this.cursor.className+=" "+this.fadeOutClass),setTimeout(function(){t.arrayPos++,t.replaceText(""),t.strings.length>t.arrayPos?t.typewrite(t.strings[t.sequence[t.arrayPos]],0):(t.typewrite(t.strings[0],0),t.arrayPos=0)},this.fadeOutDelay)}},{key:"replaceText",value:function(t){this.attr?this.el.setAttribute(this.attr,t):this.isInput?this.el.value=t:"html"===this.contentType?this.el.innerHTML=t:this.el.textContent=t}},{key:"bindFocusEvents",value:function(){var t=this;this.isInput&&(this.el.addEventListener("focus",function(e){t.stop()}),this.el.addEventListener("blur",function(e){t.el.value&&0!==t.el.value.length||t.start()}))}},{key:"insertCursor",value:function(){this.showCursor&&(this.cursor||(this.cursor=document.createElement("span"),this.cursor.className="typed-cursor",this.cursor.innerHTML=this.cursorChar,this.el.parentNode&&this.el.parentNode.insertBefore(this.cursor,this.el.nextSibling)))}}]),t}();e["default"]=a,t.exports=e["default"]},function(t,e,s){"use strict";function n(t){return t&&t.__esModule?t:{"default":t}}function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(e,"__esModule",{value:!0});var r=Object.assign||function(t){for(var e=1;e":";";t.substr(e+1).charAt(0)!==i&&(e++,!(e+1>t.length)););e++}return e}},{key:"backSpaceHtmlChars",value:function(t,e,s){if("html"!==s.contentType)return e;var n=t.substr(e).charAt(0);if(">"===n||";"===n){var i="";for(i=">"===n?"<":"&";t.substr(e-1).charAt(0)!==i&&(e--,!(e<0)););e--}return e}}]),t}();e["default"]=i;var r=new i;e.htmlParser=r}])}); 11 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "StarWhisper", 3 | "short_name": "StarWhisper", 4 | "theme_color": "#ffffff", 5 | "background_color": "#ffffff", 6 | "display": "standalone", 7 | "Scope": "/", 8 | "start_url": "/", 9 | "icons": [{ 10 | "src": "images/logo.png", 11 | "sizes": "144x144", 12 | "type": "image/png" 13 | }, { 14 | "src": "images/logo.png", 15 | "sizes": "128x128", 16 | "type": "image/png" 17 | }, { 18 | "src": "images/logo.png", 19 | "sizes": "96x96", 20 | "type": "image/png" 21 | }] 22 | } -------------------------------------------------------------------------------- /page.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
    7 | 32 |
    33 |
    34 |
    35 |
    36 | content(); ?> 37 |
    38 |
    39 | need('comments.php'); ?> 40 |
    41 |
    42 |
    43 | need('footer.php'); ?> -------------------------------------------------------------------------------- /post.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 | 7 | 8 |
    9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 |
      21 |
    • 22 | Home 23 |
    • 24 | widget('Widget_Contents_Page_List')->parse('
    • {title}
    • '); ?> 25 | options->github): ?>
    • 26 | Github 27 |
    • 28 |
    29 |
    30 |
    31 | 32 |
      33 |
    • 34 | theNext('%s', '', array('title' => '', 'tagClass' => 'icon')); ?> 35 |
    • 36 |
    • 37 | thePrev('%s', '', array('title' => '', 'tagClass' => 'icon')); ?> 38 |
    • 39 |
    • 40 | 41 | 42 | 43 |
    • 44 |
    • 45 | 46 | 47 | 48 |
    • 49 |
    50 | 51 | 52 | 53 | 54 |
    55 |
    56 | 110 |
    111 |
    112 |
    113 |
    "; ?> 116 | 117 | 118 |
    119 |
    120 |
    121 |
    122 |
    123 |

    title() ?>

    124 |
    125 | 128 | 134 | 138 | 139 |
    140 |
    141 |
    142 | content(); ?> 143 |
    本文链接: 144 | permalink() ?> 145 |
    146 |
    147 |
    148 | need('comments.php'); ?> 149 |
    150 |
    151 | need('footer.php'); ?> 152 | -------------------------------------------------------------------------------- /preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/preview.png -------------------------------------------------------------------------------- /preview2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/preview2.png -------------------------------------------------------------------------------- /preview3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/preview3.png -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/FrostMiKu/Whisper/02063b86cae4c331a451f4d797952d77f2ce667c/screenshot.png -------------------------------------------------------------------------------- /sw.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Welcome to your Workbox-powered service worker! 3 | * 4 | * You'll need to register this file in your web app and you should 5 | * disable HTTP caching for this file too. 6 | * See https://goo.gl/nhQhGp 7 | * 8 | * The rest of the code is auto-generated. Please don't update this file 9 | * directly; instead, make changes to your Workbox build configuration 10 | * and re-run your build process. 11 | * See https://goo.gl/2aRDsh 12 | */ 13 | 14 | importScripts("https://storage.googleapis.com/workbox-cdn/releases/3.6.3/workbox-sw.js"); 15 | 16 | workbox.skipWaiting(); 17 | workbox.clientsClaim(); 18 | 19 | /** 20 | * The workboxSW.precacheAndRoute() method efficiently caches and responds to 21 | * requests for URLs in the manifest. 22 | * See https://goo.gl/S9QRab 23 | */ 24 | self.__precacheManifest = [ 25 | { 26 | "url": "css/style.css", 27 | "revision": "2535d0113496cc06bdc4ecb6ba4a01ec" 28 | }, 29 | { 30 | "url": "css/lightbox.min.css", 31 | "revision": "767938d77eef356b1ba76c3897384948" 32 | }, 33 | { 34 | "url": "js/jquery.min.js", 35 | "revision": "b354cc9d56a1da6b0c77604d1b153850" 36 | }, 37 | { 38 | "url": "js/lazyload.js", 39 | "revision": "5a0a087606ad5b73ad985db19a150220" 40 | }, 41 | { 42 | "url": "js/main.js", 43 | "revision": "70b27067d04d0c6008ef57238ec6c9db" 44 | }, 45 | { 46 | "url": "js/lightbox.min.js", 47 | "revision": "86ae6c62f555df51346b0be4bc2d0267" 48 | }, 49 | { 50 | "url": "lib/font-awesome/css/font-awesome.css", 51 | "revision": "38021bc5f4c004f5afbee38855ba260f" 52 | }, 53 | { 54 | "url": "lib/font-awesome/css/font-awesome.min.css", 55 | "revision": "48ab1883875b3c7f06592dd04eb2c297" 56 | }, 57 | { 58 | "url": "lib/font-awesome/fonts/fontawesome-webfont.woff", 59 | "revision": "c8ddf1e5e5bf3682bc7bebf30f394148" 60 | }, 61 | { 62 | "url": "lib/font-awesome/fonts/fontawesome-webfont.woff2", 63 | "revision": "e6cf7c6ec7c2d6f670ae9d762604cb0b" 64 | }, 65 | { 66 | "url": "lib/highlight.min.js", 67 | "revision": "4e0da54bb1cb0511de5f7bbf12298aa9" 68 | }, 69 | 70 | { 71 | "url": "lib/meslo-LG/fonts/MesloLGS-Regular.woff", 72 | "revision": "c26c11f108b98536a374afb1337e156c" 73 | }, 74 | { 75 | "url": "lib/meslo-LG/styles.css", 76 | "revision": "711087aaff7624e62edd074044ec1dd9" 77 | }, 78 | { 79 | "url": "lib/typed.js", 80 | "revision": "5d53ae31eda336c919b79ad3590e8589" 81 | } 82 | ].concat(self.__precacheManifest || []); 83 | workbox.precaching.suppressWarnings(); 84 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); 85 | 86 | workbox.routing.registerRoute(/.*\.js/, workbox.strategies.networkFirst(), 'GET'); 87 | workbox.routing.registerRoute(/.*\.css/, workbox.strategies.staleWhileRevalidate({ plugins: [{ cacheableResponse: { statuses: [ 0, 200 ] } }] }), 'GET'); 88 | workbox.routing.registerRoute(/.*\.(?:png|jpg|jpeg|svg|gif)/, workbox.strategies.cacheFirst({ plugins: [{ expiration: { maxEntries: 50 } }] }), 'GET'); 89 | workbox.routing.registerRoute(/.*\.html/, workbox.strategies.networkFirst(), 'GET'); 90 | -------------------------------------------------------------------------------- /tag.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
    7 | 32 |
    33 | widget('Widget_Metas_Tag_Cloud', 'ignoreZeroCount=1&limit=30')->to($tags); ?> 34 | next()): ?> 35 | name(); ?> 36 | 37 |
    38 |
    39 |
    40 | 41 |
      42 | next()): ?> 43 |
    • 44 |
      45 | 46 |
      47 | 48 | title(35,'...') ?> 49 | 50 |
    • 51 | 52 | 60 |
    61 |
    62 |
    63 |
    64 | need('footer.php'); ?> --------------------------------------------------------------------------------