├── 404.php ├── LICENSE ├── README.md ├── archive.php ├── category.php ├── comments.php ├── css ├── comments.css ├── lightbox.min.css ├── search.css └── style.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 ├── lib ├── OwO │ ├── OwO.json │ ├── OwO.min.css │ ├── OwO.min.js │ └── OwOmini.json ├── 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 ├── screenshot.png ├── search.php ├── 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 | # 仙人掌 Cactus 2 | 🌵一个响应式干净和简洁优雅的 Typecho主题 3 | 4 | >世间无限丹青手,一片伤心画不成。 5 | 6 | ~~演示地址:https://www.xde.io/~~ 7 | 8 | 主题移植至Hexo 同名主题 [hexo-theme-cactus][1]参考(抄)了部分 [Alili][2]的样式和功能。 9 | 10 | 主题详情:https://www.krsay.com/typecho/cactus.html 11 | 12 | 版本:1.3.4 13 | 14 | 头像cdn更换 15 | 16 | 评论审核修复 17 | 18 | 增强php8兼容性 19 | 20 | 版本:1.3.3 21 | 22 | 修复扇贝API ,顺便改用te自带函数获取每日数据 23 | 24 | 兼容 typecho 1.2.0 25 | 26 | 其他资源、链接更新,文章页微调 27 | 28 | 版本:1.3.0 29 | 30 | 咕咕咕了很久这次把能更新的全安排上了 31 | 32 | 添加 搜索功能、表情功能、文章置顶、备案号设置 一些其他修复优化 33 | 34 | 35 | 演示图片: 36 | 首页:![image](https://user-images.githubusercontent.com/7334510/53931080-ae1baa00-40ce-11e9-8639-3d78f7692cd7.png) 37 | 38 | 文章页: 39 | 40 | ![1057402836](https://user-images.githubusercontent.com/7334510/53931207-3bf79500-40cf-11e9-85f8-5a1b7707eaa3.png) 41 | 42 | 43 | 归档页: 44 | 45 | ![image](https://user-images.githubusercontent.com/7334510/53931223-56317300-40cf-11e9-9c90-f381783bc21e.png) 46 | 47 | 48 | ---- 49 | 欢迎Star 50 | 51 | 如果觉得我移植的主题还不错可以支持一下呀~ 52 | 53 | ![13341032392](https://user-images.githubusercontent.com/7334510/53933535-bb8a6180-40d9-11e9-9231-bd02aaca688f.png) 54 | 55 | [1]: https://github.com/probberechts/hexo-theme-cactus 56 | [2]: https://alili.tech/ 57 | -------------------------------------------------------------------------------- /archive.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
7 | 34 |
35 | 36 |
37 | 38 | archiveTitle(array( 39 | 'category' => _t('分类 %s 下的文章'), 40 | 'search' => _t('包含关键字 %s 的文章'), 41 | 'tag' => _t('标签 %s 下的文章'), 42 | 'author' => _t('%s 发布的文章') 43 | ), '', ''); ?> 44 | 45 |
    46 | have()): ?> 47 | next()): ?> 48 |
  • 49 |
    50 | 51 |
    52 | 53 | title(38,'...') ?> 54 | 55 |
  • 56 | 57 | 58 |

    没有找到相关内容

    59 | 60 | 61 |
62 |
63 | 64 |
65 |
66 | need('footer.php'); ?> -------------------------------------------------------------------------------- /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 | 4 | authorId) { 8 | if ($comments->authorId == $comments->ownerId) { 9 | $commentClass .= ' comment-by-author'; 10 | } else { 11 | $commentClass .= ' comment-by-user'; 12 | } 13 | } 14 | 15 | $commentLevelClass = $comments->levels > 0 ? ' comment-child' : ' comment-parent'; 16 | ?> 17 | commentsAvatarRating; 21 | $hash = md5(strtolower($comments->mail)); 22 | $email = strtolower($comments->mail); 23 | $qq=str_replace('@qq.com','',$email); 24 | if(strstr($email,"qq.com") && is_numeric($qq) && strlen($qq) < 11 && strlen($qq) > 4) 25 | { 26 | $avatar = '//q3.qlogo.cn/g?b=qq&nk='.$qq.'&s=100'; 27 | }else{ 28 | $avatar = $host . $url . $hash . '?s=50' . '&r=' . $rating . '&d=mm'; 29 | } 30 | ?> 31 | 32 |
33 | 34 |
35 |
36 | author(); ?>agent); ?>agent); ?> 37 |
38 |
39 | dateWord(); ?> 40 | reply('回复'); ?> 41 |
42 |
43 | status): ?>
您的评论需管理员审核后才能显示!
44 | coid); ?> 45 |
46 | 47 | 48 |
49 |
50 | children) { ?> 51 | threadedComments($options); ?> 52 | 53 | 54 | 55 | comments()->to($comments); ?> 56 | allow('comment')): ?> 57 |
58 |
59 |
60 | user->hasLogin()): ?> 61 |
user->screenName(); ?>. »
62 | 63 |
64 | 65 |
66 |
67 | options->commentsRequireMail): ?> required>options->commentsRequireURL): ?> required> 68 |
69 | 70 |
71 | 72 |
73 |
74 |
75 |
76 | 77 |
78 |
79 | 80 | 81 | widget('Widget_Security'); ?> 82 | 83 |
84 |
85 | 86 | 88 |
89 | 90 | 91 |
92 | commentsNum!=0): ?> 93 |
94 |
95 | commentsNum('%d'); ?> 评论 96 |
97 |
98 | 99 |
快来做第一个评论的人吧~
100 | 101 |
102 | have()): ?> 103 | listComments(); ?> 104 | 105 |
106 | pageNav('', '',10,'',array('wrapTag' => 'div', 'wrapClass' => 'pagination','itemTag' => '','currentClass' => 'page-number',)); ?> 107 | 108 |
109 | 113 | 114 | 125 | -------------------------------------------------------------------------------- /css/comments.css: -------------------------------------------------------------------------------- 1 | .v *{-webkit-box-sizing:border-box;box-sizing:border-box;line-height:2;color:#555;-webkit-transition:all .3s ease;transition:all .3s ease}.v hr{margin:.825rem 0;border-color:#f6f6f6;border-style:dashed}.v.hide-avatar .vimg{display:none}.v a{position:relative;cursor:pointer;color:#1abc9c;display:inline-block}.v a:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#1abc9c;-webkit-transition:width .3s ease;transition:width .3s ease}.v a:hover{color:#d7191a}.v a:hover:before{width:100%;left:0;right:auto}.v code,.v pre{background-color:#f6f6f6;color:#555;padding:.2em .4em;border-radius:3px;font-size:85%;margin:0;font-family:Source Code Pro,courier new,Input Mono,PT Mono,SFMono-Regular,Consolas,Monaco,Menlo,PingFang SC,Liberation Mono,Microsoft YaHei,Courier,monospace}.v pre{padding:10px;overflow:auto;line-height:1.45}.v pre code{padding:0;background:transparent;white-space:pre-wrap;word-break:keep-all}.v blockquote{color:#666;margin:.5rem 0;padding:0 0 0 1rem;border-left:8px solid hsla(0,0%,93%,.5)}.v .vinput{border:none;resize:none;outline:none;padding:10px 5px;max-width:100%;font-size:.775rem}.v input[type=checkbox],.v input[type=radio]{display:inline-block;vertical-align:middle;margin-top:-2px}.v .vwrap{border:1px solid #f0f0f0;border-radius:4px;margin-bottom:10px;overflow:hidden;position:relative;padding:10px}.v .vwrap input{background:transparent}.v .vwrap .vedit{position:relative;padding-top:10px}.v .vwrap .vedit .vctrl{text-align:right;font-size:12px}.v .vwrap .vedit .vctrl span{padding:10px;display:inline-block;vertical-align:middle;cursor:pointer}.v .vwrap .vedit .vemojis{display:none;font-size:18px;text-align:justify;max-height:145px;overflow:auto;margin-bottom:10px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v .vwrap .vedit .vemojis i{font-style:normal;padding:7px 0;width:38px;cursor:pointer;text-align:center;display:inline-block;vertical-align:middle}.v .vwrap .vedit .vpreview{padding:7px;-webkit-box-shadow:0 0 1px #f0f0f0;box-shadow:0 0 1px #f0f0f0}.v .vwrap .vedit .vpreview frame,.v .vwrap .vedit .vpreview iframe,.v .vwrap .vedit .vpreview img{max-width:100%;border:none}.v .vwrap .vheader .vinput{width:33.33%;border-bottom:1px dashed #dedede}.v .vwrap .vheader.item2 .vinput{width:50%}.v .vwrap .vheader.item1 .vinput{width:100%}.v .vwrap .vheader .vinput:focus{border-bottom-color:#eb5055}@media screen and (max-width:520px){.v .vwrap .vheader.item2 .vinput,.v .vwrap .vheader .vinput{width:100%}}.v .vwrap .vcontrol{font-size:0;padding-top:15px}.v .vwrap .vcontrol .col{display:inline-block;font-size:.725rem;vertical-align:middle;color:#ccc}.v .vwrap .vcontrol .col.text-right{text-align:right}.v .vwrap .vcontrol .col svg{margin-right:2px;overflow:hidden;fill:currentColor;vertical-align:middle}.v .vwrap .vcontrol .col.col-20{width:20%}.v .vwrap .vcontrol .col.col-40{width:40%}.v .vwrap .vcontrol .col.col-50{width:50%}.v .vwrap .vcontrol .col.col-60{width:60%}.v .vwrap .vcontrol .col.col-80{width:80%}.v .vwrap .vcontrol .col.split{width:50%}.v .vwrap .vmark{position:absolute;background:rgba(0,0,0,.65);width:100%;height:100%;left:0;top:0}.v .vwrap .vmark .valert{padding-top:3rem}.v .vwrap .vmark .valert .vtext{color:#fff;padding:1rem 0}.v .vwrap .vmark .valert .vcode{width:4.6875rem;border-radius:.3125rem;padding:.5rem;background:#dedede}.v .vwrap .vmark .valert .vcode:focus{border-color:#3090e4;background-color:#fff}@media screen and (max-width:720px){.v .vwrap .vmark .valert{padding-top:5.5rem}.v .vwrap .vmark .valert .vtext{color:#fff;padding:1rem 0}}.v .power{color:#999;padding:.5rem 0}.v .power,.v .power a{font-size:.75rem}.v .vinfo{font-size:0;padding:5px}.v .vinfo .col{font-size:.875rem;display:inline-block;width:50%;vertical-align:middle}.v .vinfo .vcount .vnum{font-weight:600;font-size:1.25rem}.v a{text-decoration:none;color:#555}.v a:hover{color:#222}.v ol,.v ul{padding:0;margin-left:1.25rem}.v .txt-center{text-align:center}.v .txt-right{text-align:right}.v .pd5{padding:5px}.v .pd10{padding:10px}.v .veditor{width:100%;min-height:8.75rem;font-size:.875rem;background:transparent;resize:vertical;-webkit-transition:all .25s ease;transition:all .25s ease;font-family: Menlo,"Meslo LG","Helvetica Neue",Helvetica,Arial,sans-serif,"Microsoft yahei"}.v .vbtn{-webkit-transition-duration:.4s;transition-duration:.4s;text-align:center;color:#313131;border:1px solid #ededed;border-radius:.3rem;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:.5rem 1.25rem;font-size:.875rem;line-height:1.42857143;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;outline:none}.v .vbtn+.vbtn{margin-left:1.25rem}.v .vbtn:active,.v .vbtn:hover{color:#3090e4;border-color:#3090e4;background-color:#fff}.v .vempty{padding:1.25rem;text-align:center;color:#999}.v .vlist{width:100%}.v .vlist .vcard{padding-top:1.5rem;position:relative;display:block}.v .vlist .vcard:after{content:"";clear:both;display:block}.v .vlist .vcard .vimg{width:3.125rem;height:3.125rem;float:left;border-radius:50%;margin-right:.7525rem;border:1px solid #f5f5f5;padding:.125rem}@media screen and (max-width:720px){.v .vlist .vcard .vimg{width:2.5rem;height:2.5rem}}.v .vlist .vcard .vhead{line-height:1.5;margin-top:0}.v .vlist .vcard .vhead .vnick{position:relative;font-size:.875rem;font-weight:500;margin-right:.875rem;cursor:pointer;color:#1abc9c;text-decoration:none;display:inline-block}.v .vlist .vcard .vhead .vnick:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#1abc9c;-webkit-transition:width .3s ease;transition:width .3s ease}.v .vlist .vcard .vhead .vnick:hover{color:#d7191a}.v .vlist .vcard .vhead .vnick:hover:before{width:100%;left:0;right:auto}.v .vlist .vcard .vhead .vsys{display:inline-block;padding:.2rem .5rem;background:#ededed;color:#b3b1b1;font-size:.75rem;border-radius:.2rem;margin-right:.3rem}@media screen and (max-width:520px){.v .vlist .vcard .vhead .vsys{display:none}}.v .vlist .vcard .vh{overflow:hidden;padding-bottom:.5rem;border-bottom:1px dashed #f5f5f5}.v .vlist .vcard .vh .vtime{color:#b3b3b3;font-size:.75rem;margin-right:.875rem}.v .vlist .vcard .vh .vmeta{line-height:1;position:relative}.v .vlist .vcard .vh .vmeta .vat{font-size:.8125rem;color:#ef2f11;cursor:pointer;float:right}.v .vlist .vcard .vcontent{word-wrap:break-word;word-break:break-all;text-align:justify;color:#4a4a4a;font-size:.875rem;line-height:2;position:relative;margin-bottom:.75rem;padding-top:.625rem}.v .vlist .vcard .vcontent frame,.v .vlist .vcard .vcontent iframe,.v .vlist .vcard .vcontent img{max-width:100%;border:none}.v .vlist .vcard .vcontent.expand{cursor:pointer;max-height:11.25rem;overflow:hidden}.v .vlist .vcard .vcontent.expand:before{display:block;content:"";position:absolute;width:100%;left:0;top:0;bottom:3.15rem;pointer-events:none;background:-webkit-gradient(linear,left top,left bottom,from(hsla(0,0%,100%,0)),to(hsla(0,0%,100%,.9)));background:linear-gradient(180deg,hsla(0,0%,100%,0),hsla(0,0%,100%,.9))}.v .vlist .vcard .vcontent.expand:after{display:block;content:"Click on expand";text-align:center;color:#828586;position:absolute;width:100%;height:3.15rem;line-height:3.15rem;left:0;bottom:0;pointer-events:none;background:hsla(0,0%,100%,.9)}.v .vlist .vcard .vquote{color:#666;margin-top:1rem;padding-left:1rem;border-left:1px dashed hsla(0,0%,93%,.5)}.v .vlist .vcard .vquote .vimg{width:2.225rem;height:2.225rem}.v .vpage .vmore{margin:1rem 0}.v .clear{content:"";display:block;clear:both}@-webkit-keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@-webkit-keyframes pulse{50%{background:#dcdcdc}}@keyframes pulse{50%{background:#dcdcdc}}.v .vloading{position:relative;padding:20px;display:block;height:80px}.v .vloading:before{-webkit-box-sizing:border-box;box-sizing:border-box;content:"";position:absolute;display:inline-block;top:20px;left:50%;margin-left:-20px;width:40px;height:40px;border:6px double #a0a0a0;border-top-color:transparent;border-bottom-color:transparent;border-radius:50%;-webkit-animation:spin 1s infinite linear;animation:spin 1s infinite linear}#cancel-comment-reply-link{display:inline!important;font-size:14px;float:right}.comment-waiting{background-color: #3f51b5;text-align: center;} -------------------------------------------------------------------------------- /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/search.css: -------------------------------------------------------------------------------- 1 | .searchbox{display:none;perspective:50em;top:0;left:0;width:100%;height:100%;z-index:100;background:rgba(0,0,0,.7);transform-origin:0;perspective-origin:top center} 2 | .searchbox.show{display:block} 3 | .searchbox,.searchbox .searchbox-container{position:fixed} 4 | .searchbox .searchbox-container{overflow:hidden} 5 | .searchbox .searchbox-selectable{cursor:pointer} 6 | .searchbox .searchbox-input-wrapper{position:relative} 7 | .searchbox .searchbox-input-wrapper .searchbox-input{width:100%;border:none;outline:0;font-size:16px;box-shadow:none;font-weight:200;border-radius:0;background:#fff;line-height:20px;box-sizing:border-box;padding:12px 28px 12px 20px;border-radius:4px;border-bottom:1px solid #e2e2e2} 8 | .searchbox .searchbox-input-wrapper .searchbox-close{top:50%;right:6px;width:20px;height:20px;font-size:16px;margin-top:-14px;position:absolute;text-align:center;display:inline-block} 9 | .searchbox .searchbox-input-wrapper .searchbox-close:hover{color:#3273dc} 10 | .searchbox .searchbox-result-wrapper{left:0;right:0;top:45px;bottom:0;overflow-y:auto;position:absolute} 11 | .searchbox .searchbox-container{left:50%;top:255px;width:540px;z-index:101;bottom:100px;margin-left:-270px;box-sizing:border-box} 12 | @media screen and (max-width:559px),screen and (max-height:479px){.searchbox .searchbox-container{/* top:0; */left:0;margin:0;width:100%;height:100%;background: #0d382959;} 13 | } -------------------------------------------------------------------------------- /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:#4a4a4a} 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:7rem} 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:#2bbc8a;margin-top:3rem;margin-bottom:1rem;display:block} 84 | .content .h2,.content h2,.content h3{font-size:1rem;font-weight:700;color:#eee} 85 | .content .h2,.content h2{position:relative;text-transform:none;letter-spacing:normal;margin-top:2rem;margin-bottom:.5rem;display:block} 86 | .content h4,.content h5,.content h6{font-size:.9rem;font-weight:400;color:#ccc;border-bottom:1px dashed #ccc;display:inline;text-decoration:none} 87 | .content dt,.content strong,.content th{font-weight:700} 88 | .content h3,.content h4,.content h5,.content h6{margin-top:.9rem;margin-bottom:.5rem} 89 | .content hr{border:1px dashed #ccc} 90 | #header #nav ul li,#header-post #nav ul li{border-right:1px dotted #2bbc8a} 91 | .content cite,.content em{font-style:italic} 92 | .content sub,.content sup{font-size:.75em;line-height:0;position:relative;vertical-align:baseline} 93 | .content dl,.content ol,.content ul,body{line-height:1.725} 94 | .content sup{top:-.5em} 95 | .content sub{bottom:-.2em} 96 | .content small{font-size:.85em} 97 | .content abbr,.content acronym{border-bottom:1px dotted} 98 | .content ol ol,.content ol ul,.content ul ol,.content ul ul{margin-top:0;margin-bottom:0} 99 | .content ol{list-style:decimal} 100 | #sociallinks,.project-list{list-style:none;padding:0} 101 | .content table{width:100%;font-size:12px;border-collapse:collapse;text-align:left} 102 | .content th{font-size:13px;color:#eee;border-bottom:1px dashed #ccc;padding:8px} 103 | .content td{border-bottom:none;padding:9px 8px 0} 104 | html{height:100%} 105 | body{color:#c9cacc;background-color:#1d1f21;font-size:14px;font-weight:400;text-rendering:geometricPrecision;/* min-height:100%; *//* display:flex; */flex-direction:column;} 106 | .content{flex:1} 107 | .content p{-moz-hyphens:auto;-ms-hyphens:auto;-webkit-hyphens:auto;hyphens:auto;margin-bottom:.5rem;word-break:break-all} 108 | .content p code{color:#2bbc8a;padding:0} 109 | .content code,.content pre{-moz-hyphens:manual;-ms-hyphens:manual;-webkit-hyphens:manual;hyphens:manual;margin-bottom:.5rem} 110 | .content a{text-decoration:none;color:#c9cacc;word-wrap:break-word;background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#c9cacc 5px,#c9cacc)} 111 | .content a:hover{color:#2bbc8a;background-image:linear-gradient(transparent,transparent 5px,#2bbc8a 5px,#2bbc8a)} 112 | .content a.icon{background:0 0} 113 | .content a.icon:hover{color:#2bbc8a} 114 | .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} 115 | .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,#2bbc8a 6px,#2bbc8a)} 116 | @media (min-width:540px){.image-wrap{flex-direction:row;margin-bottom:2rem} 117 | .image-wrap .image-block{margin-right:2rem;flex:1 0 35%} 118 | .image-wrap p{flex:1 0 65%} 119 | } 120 | #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} 121 | .width{width:100%;max-width:39rem} 122 | @media (max-width:480px){pre .line{-webkit-text-size-adjust:none} 123 | .px3{padding-left:1.1rem;padding-right:1.1rem} 124 | .my4{margin-top:2rem;margin-bottom:2rem} 125 | } 126 | #header{max-width:710px;width:100%;margin:0 auto 3rem} 127 | #header .h1,#header h1{letter-spacing:.01em;font-size:1.5rem;line-height:2rem;font-style:normal;font-weight:700;color:#c9cacc;margin-top:0;margin-bottom:0} 128 | #header #nav ul,#header-post #nav ul{line-height:15px} 129 | #header #nav,#header-post #nav{font-style:normal;font-weight:200;letter-spacing:.01em} 130 | #header a,#header-post a{color:inherit;text-decoration:none} 131 | #header #nav,#header-post #menu-icon-tablet:hover,#header-post #menu-icon:hover,#header-post #toc a:hover,#header-post #top-icon-tablet:hover,#header-post .active,#header-post a.icon:hover{color:#2bbc8a} 132 | #header a{background:0 0} 133 | #header #logo{display:inline-block;float:left;margin-right:20px;width:50px;height:50px;background-repeat:no-repeat;background-size:50px 50px;border-radius:5px;-webkit-filter:grayscale(100%);filter:grayscale(100%)} 134 | #header #nav{font-size:.8rem} 135 | #header #nav ul{list-style-type:none;margin:0;padding:0} 136 | #header #nav ul a{margin-right:15px;color:color-accent} 137 | #header #nav ul a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#2bbc8a 5px,#2bbc8a)} 138 | #header-post a,#header-post a.icon{background:0 0} 139 | #header #nav ul li{display:inline-block;vertical-align:middle;margin-right:15px} 140 | #header #nav ul .icon{display:none} 141 | #header #nav ul li:last-child{border-right:0} 142 | #header:hover #logo{-webkit-filter:none;filter:none} 143 | @media screen and (max-width:480px){#header #title{padding-top:9px;padding-bottom:9px} 144 | #header #nav ul a:hover{background:0 0} 145 | #header #nav ul li{display:none;border-right:0} 146 | #header #nav ul li.icon{display:inline-block;position:absolute;top:55px;right:1rem} 147 | #header #nav ul.responsive li{display:block} 148 | #header #nav li:not(:first-child){padding-top:1rem;padding-left:70px;font-size:1rem} 149 | } 150 | #header-post #actions .info,#header-post #actions ul{display:block} 151 | #header-post{position:fixed;top:2rem;right:2rem;display:inline-block;float:right} 152 | #header-post ol,#header-post ul{list-style-type:none} 153 | #header-post #actions ul,#header-post #nav ul{list-style-type:none;margin:0;padding:0;display:inline-block} 154 | #header-post #actions ul li,#header-post #nav ul li{margin-right:15px;display:inline-block;vertical-align:middle} 155 | #header-post #menu-icon,#header-post #menu-icon-tablet{float:right;margin-left:15px} 156 | #header-post #top-icon-tablet{margin-left:15px;bottom:2rem;right:2rem;position:fixed} 157 | #header-post #nav{font-size:.8rem;color:#2bbc8a;float:right} 158 | #header-post #actions .info,.highlight .code .emphasis,.hljs-comment,.hljs-emphasis,.hljs-quote{font-style:italic} 159 | #header-post #nav ul a{margin-right:15px;color:color-accent} 160 | #header-post #nav ul a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#2bbc8a 5px,#2bbc8a)} 161 | #header-post #nav ul li:last-child{border-right:0;margin-right:0} 162 | #header-post #actions{float:right;margin-top:2rem;width:100%;text-align:right} 163 | #TableOfContents,#header-post #share,#header-post #toc{clear:both;text-align:right;padding-top:.5rem} 164 | #header-post #share li{margin:0;display:block} 165 | #header-post #toc .toc-level-1,#header-post #toc .toc-level-5,#header-post #toc .toc-level-6,#header-post #toc .toc-number{display:none} 166 | #TableOfContents li,#header-post #toc .toc-level-2{font-size:.8rem;color:#c9cacc;padding-left:8px} 167 | #TableOfContents li a{padding-left:8px} 168 | .no-before::before{content:""!important} 169 | #TableOfContents li:before,#header-post #toc .toc-level-2:before{content:"#";color:#2bbc8a} 170 | #header-post #toc .toc-level-3{font-size:.7rem;color:#b3b3b3} 171 | #header-post #toc .toc-level-4{font-size:.4rem;color:#666} 172 | #footer-post #actions-footer a,#footer-post #toc-footer a:hover,#footer-post a.icon:hover{color:#2bbc8a} 173 | @media screen and (max-width:500px){#header-post{display:none} 174 | } 175 | @media screen and (max-width:900px){#header-post #actions,#header-post #menu-icon{display:none} 176 | } 177 | @media screen and (max-width:1199px){#header-post #toc{display:none} 178 | } 179 | @media screen and (min-width:900px){#header-post #menu-icon-tablet,#header-post #top-icon-tablet{display:none!important} 180 | } 181 | @media screen and (min-width:1199px){#header-post #actions{width:auto} 182 | #header-post #actions ul{display:inline-block;float:right} 183 | #header-post #actions .info{float:left;margin-right:2rem;font-style:italic;display:inline} 184 | } 185 | #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} 186 | #footer-post a,#footer-post a.icon{background:0 0} 187 | #footer-post a{color:inherit;text-decoration:none} 188 | #footer-post #nav-footer,#footer-post #share-footer{margin-left:1rem;margin-right:1rem;text-align:center} 189 | #footer-post #nav-footer a{color:#2bbc8a;font-size:1rem} 190 | #footer-post #nav-footer a:hover{background-repeat:repeat-x;background-position:bottom;background-size:100% 6px;background-image:linear-gradient(transparent,transparent 5px,#2bbc8a 5px,#2bbc8a)} 191 | #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%} 192 | #footer-post #nav-footer ul li,#footer-post #share-footer ul li{display:inline-table;width:20%;padding:10px;vertical-align:middle} 193 | #footer-post #actions-footer{text-align:center;margin-top:1rem;margin-bottom:1rem;width:100%} 194 | #footer-post #actions-footer ul li{display:table-cell;vertical-align:middle} 195 | #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} 196 | #footer-post #toc-footer{text-align:left;padding-top:1rem} 197 | #footer-post #toc-footer ol{list-style-type:none;padding-left:20px} 198 | #footer-post #toc-footer ol li{line-height:30px} 199 | #footer-post #toc-footer .toc-level-2{font-size:.8rem;color:#c9cacc} 200 | #footer-post #toc-footer .toc-level-2:before{content:"#";color:#2bbc8a} 201 | #footer-post #toc-footer .toc-level-3{font-size:.7rem;color:#666;line-height:15px} 202 | #sociallinks,#sociallinks li{display:inline-block} 203 | @media screen and (min-width:500px){#footer-post-container{display:none} 204 | } 205 | #sociallinks{margin:0} 206 | #sociallinks li:after{content:", "} 207 | #sociallinks li:last-child:after{content:""} 208 | #sociallinks li:nth-last-child(2):after{content:" and "} 209 | .post-list{padding:0} 210 | .post-list .post-item{list-style-type:none;margin-left:0;margin-bottom:1rem} 211 | .post-list .post-item .meta{display:block;font-size:14px;color:#666;min-width:100px;margin-right:16px} 212 | .description{min-height:105px} 213 | @media (min-width:480px){p{text-align:justify} 214 | .post-list .post-item{display:flex;margin-bottom:5px} 215 | .post-list .post-item .meta{text-align:left} 216 | } 217 | .project-list .project-item{margin-bottom:5px} 218 | article header .posttitle{margin-top:0;margin-bottom:0;text-transform:none;font-size:1.5em;line-height:1.25} 219 | article header .meta{margin-top:0;margin-bottom:1rem} 220 | article header .meta *{color:#ccc;font-size:.85rem} 221 | article header .author{text-transform:uppercase;letter-spacing:.01em;font-weight:700} 222 | article header .postdate{display:inline} 223 | article .content h2:before{content:"#";color:#2bbc8a;position:absolute;left:-1rem;top:-4px;font-size:1.2rem;font-weight:700} 224 | article .content img,article .content video{max-width:100%;height:auto;display:block;margin:auto;border-radius: 4px;} 225 | article .content .video-container{position:relative;padding-top:56.25%;height:0;overflow:hidden} 226 | .highlight,.hljs,pre{overflow-x:auto} 227 | 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} 228 | article .content blockquote{background:inherit;color:#ccffb6;border-left:0 solid #ccc;margin:1rem 10px 1rem 0;padding:.5em 0;quotes:"\201C" "\201D" "\2018" "\2019"} 229 | article .content blockquote p{margin:0} 230 | article .content blockquote:before{color:#ccffb6;content:"\201C";font-size:2em;line-height:.1em;margin-right:.25em;vertical-align:-.4em} 231 | article .content blockquote footer{color:#666;font-size:11px;margin:line-height 0} 232 | article .content blockquote footer a{color:#666;background-image:linear-gradient(transparent,transparent 5px,#666 5px,#666)} 233 | article .content blockquote footer a:hover{color:#999;background-image:linear-gradient(transparent,transparent 4px,#999 4px,#999)} 234 | article .content blockquote footer cite:before{content:"—";padding:0 .5em} 235 | article .content .pullquote{text-align:left;width:45%;margin:0} 236 | article .content .pullquote.left{margin-left:.5em;margin-right:1em} 237 | article .content .pullquote.right{margin-right:.5em;margin-left:1em} 238 | article .content .caption{color:color-grey;display:block;font-size:.9em;margin-top:.5em;position:relative;text-align:center} 239 | #ad-box,.blog-post-comments{margin-top:2rem} 240 | .posttitle{text-transform:none;font-size:1.5em;line-height:1.25} 241 | .article-tag-box .article-tag:first-child::before{content:""!important} 242 | .article-tag{display:inline} 243 | .article-tag:before{content:"|";padding:0 5px} 244 | .article-tag .tag-link:before{content:"#"} 245 | #archive .post-list{padding:0} 246 | #archive .post-list .post-item{list-style-type:none;margin-left:0;margin-bottom:1rem} 247 | #archive .post-list .post-item .meta{display:block;font-size:14px;color:#666;min-width:100px;margin-right:16px} 248 | #footer li,#footer li a{margin-right:15px} 249 | @media (min-width:480px){.article-tag::before{content:"|";padding:0 5px} 250 | #archive .post-list .post-item{display:flex;margin-left:1rem;margin-bottom:5px} 251 | #archive .post-list .post-item .meta{text-align:left} 252 | } 253 | #footer,.pagination{text-align:center;width:100%} 254 | .tagcloud-wrap{overflow:hidden} 255 | .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} 256 | .blog-post-comments.v .power{display:none} 257 | .blog-post-comments.v a:hover{color:#1abc9c} 258 | .blog-post-comments.v *{color:#c9cacc} 259 | .blog-post-comments.v .vwrap{background:#2a2c2f;border:none} 260 | .blog-post-comments.v .vwrap .vheader .vinput{border-bottom:1px #dedede double} 261 | .blog-post-comments.v .vempty pre{color:#555} 262 | .blog-post-comments.v .vlist .vcard .vh .vmeta .vat,.blog-post-comments.v .vlist .vcard .vhead .vnick:hover{color:#1abc9c} 263 | .blog-post-comments.v .vlist .vcard .vquote{border-left:1px dashed #2a2c2f} 264 | .blog-post-comments.v .vlist .vcard .vh{border-bottom:1px dashed #2a2c2f} 265 | .blog-post-comments.v .vlist .vcard .vhead .vsys{background:0 0} 266 | .pagination a,.pagination a:hover{background-image:none} 267 | #footer,#footer a{color:#666} 268 | #footer{padding-top:10px;padding-bottom:10px;font-size:11px;max-width:700px;margin:0 auto 1rem;vertical-align:top} 269 | #footer ul{margin:0;padding:0;list-style:none} 270 | #footer li{display:inline-block;vertical-align:middle;border-right:1px solid #4a4a4a} 271 | #footer li:last-child{border-right:0;margin-right:0} 272 | #footer li:last-child a{margin-right:0} 273 | #footer a:hover{color:#999} 274 | #footer .footer-left{height:20px;line-height:25px;vertical-align:middle} 275 | @media (min-width:39rem){#footer{padding-top:20px;padding-bottom:20px} 276 | #footer .footer-left{float:left} 277 | #footer .footer-right{float:right} 278 | } 279 | .pagination{display:inline-block;margin-top:2rem} 280 | .pagination .page-number{color:#1abc9c;} 281 | .pagination a{color:#c9cacc;padding:4px 6px;text-decoration:none;border-radius:5px} 282 | .pagination a:hover:not(.active){color:#eee} 283 | .highlight{color:#d1d9e1} 284 | .highlight .code .comment,.highlight .code .quote{color:#969896;font-style:italic} 285 | .highlight .code .addition,.highlight .code .keyword,.highlight .code .literal,.highlight .code .selector-tag,.highlight .code .type{color:#c9c} 286 | .highlight .code .number,.highlight .code .selector-attr,.highlight .code .selector-pseudo{color:#f99157} 287 | .highlight .code .doctag,.highlight .code .regexp,.highlight .code .string{color:#8abeb7} 288 | .highlight .code .built_in,.highlight .code .name,.highlight .code .section,.highlight .code .title{color:#b5bd68} 289 | .highlight .code .class .title,.highlight .code .selector-id,.highlight .code .template-variable,.highlight .code .variable{color:#fc6} 290 | .highlight .code .name,.highlight .code .section,.highlight .code .strong{font-weight:700} 291 | .highlight .code .bullet,.highlight .code .link,.highlight .code .meta,.highlight .code .subst,.highlight .code .symbol{color:#f99157} 292 | .highlight .code .deletion{color:#dc322f} 293 | .highlight .code .formula{background:#eee8d5} 294 | .highlight .code .attr,.highlight .code .attribute{color:#81a2be} 295 | pre{font-size:13px;padding:10px 15px 0;line-height:22px;-webkit-border-radius:4px;border-radius:4px;background-color:#232527} 296 | 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} 297 | pre code{border:none;display:block;padding:0} 298 | .hljs{display:block;overflow-x:auto;padding:.5em;color:#d1d9e1} 299 | .hljs-comment,.hljs-quote{color:#969896;font-style:italic} 300 | .hljs-addition,.hljs-keyword,.hljs-literal,.hljs-selector-tag,.hljs-type{color:#c9c} 301 | .hljs-number,.hljs-selector-attr,.hljs-selector-pseudo{color:#f99157} 302 | .hljs-doctag,.hljs-regexp,.hljs-string{color:#8abeb7} 303 | .hljs-built_in,.hljs-name,.hljs-section,.hljs-title{color:#b5bd68} 304 | .hljs-class .hljs-title,.hljs-selector-id,.hljs-template-variable,.hljs-variable{color:#fc6} 305 | .hljs-name,.hljs-section,.hljs-strong{font-weight:700} 306 | .hljs-bullet,.hljs-link,.hljs-meta,.hljs-subst,.hljs-symbol{color:#f99157} 307 | .hljs-deletion{color:#dc322f} 308 | .hljs-formula{background:#eee8d5} 309 | .hljs-attr,.hljs-attribute{color:#81a2be} 310 | .hljs-emphasis{font-style:italic} 311 | .coding{position:relative} 312 | .coding .prompt{display:inline;white-space:pre-wrap;line-height:30px;margin-bottom:.75em} 313 | .coding .typed-cursor{display:inline} 314 | .coding .typed-cursor:after{display:inline;vertical-align:-.15em;width:.5em;height:12px;margin-left:5px;background:#2bbc8a;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:''} 315 | .ad-text{font-size:12px;display:none} 316 | @media (max-width:680px){.ad-text{display:block;color:#2bbc8a} 317 | } 318 | @-moz-keyframes cursor-blink{0%,100%{opacity:0} 319 | 50%{opacity:1} 320 | } 321 | @-webkit-keyframes cursor-blink{0%,100%{opacity:0} 322 | 50%{opacity:1} 323 | } 324 | @-o-keyframes cursor-blink{0%,100%{opacity:0} 325 | 50%{opacity:1} 326 | } 327 | @keyframes cursor-blink{0%,100%{opacity:0} 328 | 50%{opacity:1} 329 | } 330 | #more-post-list{margin-bottom:0;padding:0} 331 | #more-post-list li:hover a,.dates{color:#2bbc8a} 332 | #more-post-list li:hover .dates{color:#2bbc8a} 333 | #archive-list li,#more-post-list li{border-top:1px solid #c9cacc;padding-top:20px;padding-bottom:20px;list-style-type:none;margin-bottom:0} 334 | #more-post-list li:last-child{border-bottom:1px solid #c9cacc} 335 | #more-post-list a{color:#333;display:block;font:700 19px/1.7 "Helvetica Neue",helvetica,Arial,sans-serif;background-image:none;color:#c9cacc;font-size:18px} 336 | #more-post-list .dates{float:right;position:relative;top:1px;font:300 17px/1.8 "Helvetica Neue",helvetica,Arial,sans-serif;color:#c9cacc} 337 | @media (max-width:540px){#more-post-list .dates{display:none} 338 | } 339 | .v .vlist .vcard .vh .vmeta .vat a{background-image:none;color:#1abc9c} 340 | .v .vlist .vcard .vhead .vnick a{color:#1abc9c;background-image:none} 341 | #footer .footer-left a{color:#666;text-decoration:none} 342 | #footer .footer-left a:before{content:"";position:absolute;width:0;right:0;bottom:0;height:1px;background:#1abc9c;-webkit-transition:width .3s ease;transition:width .3s ease} 343 | .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} 344 | .protected .submit:active,.submit:hover{color:#3090e4;border-color:#3090e4;background-color:#fff} 345 | .protected .text{border:none;resize:none;outline:0;padding:7px 6px;max-width:100%;font-size:.775rem} 346 | .protected input{background:#ededed;border-radius:4px} 347 | .sticky {color:#2bbc8a;} -------------------------------------------------------------------------------- /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 |
4 | 7 | 20 |
21 |
22 | 23 | 24 | is('index')) : ?> 25 | 26 | 27 | 47 | 48 | is('post') || $this->is('page')) : ?> 49 | 50 | 51 | 52 | 57 | 58 | 59 | 60 | 70 | 73 | 85 | 86 | footer(); ?> 87 | 88 | 89 | -------------------------------------------------------------------------------- /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 | $email = new Typecho_Widget_Helper_Form_Element_Text('email', NULL, NULL, _t('Email地址'), _t('邮箱地址 ,留空则不设置Email地址')); 12 | $form->addInput($email->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 13 | $github = new Typecho_Widget_Helper_Form_Element_Text('github', NULL, NULL, _t('Github地址'), _t('一般为https://github.com/Seevil ,留空则不设置Github地址')); 14 | $form->addInput($github->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 15 | $twitter = new Typecho_Widget_Helper_Form_Element_Text('twitter', NULL, NULL, _t('twitter地址'), _t('一般为https://twitter.com/skyurl ,留空则不设置twitter地址')); 16 | $form->addInput($twitter->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 17 | $weibo = new Typecho_Widget_Helper_Form_Element_Text('weibo', NULL, NULL, _t('Weibo地址'), _t('一般为http://www.weibo.com/xxx ,留空则不设置Weibo地址')); 18 | $form->addInput($weibo->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 19 | $writing = new Typecho_Widget_Helper_Form_Element_Text('writing', NULL, NULL, _t('首页writing地址'), _t('一般设置为你的归档地址 ,留空则默认为/archives.html')); 20 | $form->addInput($writing->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 21 | 22 | $Projectsurl = new Typecho_Widget_Helper_Form_Element_Text('Projectsurl', NULL, NULL, _t('首页Projects地址'), _t('一般为http://www.url.com/ ,留空则默认为#地址')); 23 | $form->addInput($Projectsurl->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 24 | 25 | $urldiy = new Typecho_Widget_Helper_Form_Element_Text('urldiy', NULL, NULL, _t('主页自定义地址'), _t('注意该设置会直接输出设置内容,建议格式为《a class="icon" href="https://twitter.com/skyurl" target="_blank" title="twitter"》《i class="fa fa-twitter"》《/i》《/a》 支持 FontAwesome 图标 ,留空则不显示')); 26 | $form->addInput($urldiy->addRule('xssCheck', _t('请不要在链接中使用特殊字符'))); 27 | $beian = new Typecho_Widget_Helper_Form_Element_Text('beian', NULL, NULL, _t('备案号设置'), _t('直接填写备案号即可如:京ICP备888888号')); 28 | $form->addInput($beian->addRule('xssCheck', _t('请不要在图片链接中使用特殊字符'))); 29 | $sticky = new Typecho_Widget_Helper_Form_Element_Text('sticky', NULL,NULL, _t('文章置顶'), _t('置顶的文章cid,按照排序输入, 请以半角逗号或空格分隔')); 30 | $form->addInput($sticky); 31 | $Projects = new Typecho_Widget_Helper_Form_Element_Textarea('Projects', NULL, NULL, _t('首页 Projects 作品链接 设置(注意:切换主题会被清空,注意备份!)'), _t('按照格式输入链接信息,格式:
链接名称(必须)|链接地址(必须)|链接描述
不同信息之间用英文竖线“|”分隔,例如:
XDE|https://www.krsay.com/|可说欢喜
若中间有暂时不想填的信息,请留空,例如暂时不想填写链接描述:
XDE|https://www.krsay.com||
多个链接换行即可,一行一个')); 32 | $form->addInput($Projects); 33 | 34 | $catalog = new Typecho_Widget_Helper_Form_Element_Radio('catalog', 35 | array('able' => _t('启用'), 36 | 'disable' => _t('禁止'), 37 | ), 38 | 'disable', _t('文章目录设置'), _t('默认显示随机文章,启用则显示文章目录')); 39 | $form->addInput($catalog); 40 | $Emoji = new Typecho_Widget_Helper_Form_Element_Radio('Emoji', 41 | array('able' => _t('启用'), 42 | 'disable' => _t('禁止'), 43 | ), 44 | 'disable', _t('Emoji表情设置'), _t('默认显示Emoji表情,如果你的数据库charset配置不是utf8mb4请禁用')); 45 | $form->addInput($Emoji); 46 | } 47 | 48 | function themeInit($archive) { 49 | if ($archive->is('index')) { 50 | $archive->parameter->pageSize = 9; // 自定义条数 51 | } 52 | if ($archive->is('single')) { 53 | $archive->content = createCatalog($archive->content);//文章锚点实现 54 | } 55 | @$comment = spam_protection_pre($comment,$post, $result);//数字验证码 56 | } 57 | 58 | function parseContent($obj){ 59 | $options = Typecho_Widget::widget('Widget_Options'); 60 | if(!empty($options->src_add) && !empty($options->cdn_add)){ 61 | $obj->content = str_ireplace($options->src_add,$options->cdn_add,$obj->content); 62 | } 63 | $obj->content = preg_replace("//i", "", $obj->content); //新标签页打开连接 64 | echo trim($obj->content); 65 | } 66 | 67 | /**项目展示 68 | 69 | */ 70 | function Projects($sorts = NULL) { 71 | $options = Typecho_Widget::widget('Widget_Options'); 72 | $Project = NULL; 73 | if ($options->Projects) { 74 | $list = explode("\r\n", $options->Projects); 75 | foreach ($list as $val) { 76 | list($name, $url, $description, $sort) = explode("|", $val); 77 | if ($sorts) { 78 | $arr = explode("|", $sorts); 79 | if ($sort && in_array($sort, $arr)) { 80 | $Project .= $url ? '
  • '.$name.': '.$description.'
  • ' : '
  • '.$name.': '.$description.'
  • '; 81 | } 82 | } else { 83 | $Project .= $url ? '
  • '.$name.': '.$description.'
  • ' : '
  • '.$name.': '.$description.'
  • '; 84 | } 85 | } 86 | } 87 | echo $Project ? $Project : '世间无限丹青手,一片伤心画不成。'; 88 | } 89 | 90 | /**阅读浏览次数 91 | 92 | */ 93 | function Postviews($archive) { 94 | $db = Typecho_Db::get(); 95 | $cid = $archive->cid; 96 | if (!array_key_exists('views', $db->fetchRow($db->select()->from('table.contents')))) { 97 | $db->query('ALTER TABLE `'.$db->getPrefix().'contents` ADD `views` INT(10) DEFAULT 0;'); 98 | } 99 | $exist = $db->fetchRow($db->select('views')->from('table.contents')->where('cid = ?', $cid))['views']; 100 | if ($archive->is('single')) { 101 | $cookie = Typecho_Cookie::get('contents_views'); 102 | $cookie = $cookie ? explode(',', $cookie) : array(); 103 | if (!in_array($cid, $cookie)) { 104 | $db->query($db->update('table.contents') 105 | ->rows(array('views' => (int)$exist+1)) 106 | ->where('cid = ?', $cid)); 107 | $exist = (int)$exist+1; 108 | array_push($cookie, $cid); 109 | $cookie = implode(',', $cookie); 110 | Typecho_Cookie::set('contents_views', $cookie); 111 | } 112 | } 113 | echo $exist == 0 ? : $exist; 114 | } 115 | 116 | function theme_random_posts(){ 117 | $defaults = array( 118 | 'number' => 6, 119 | 'xformat' => '
  • {title}
  • ' 120 | ); 121 | $db = Typecho_Db::get(); 122 | $adapterName = $db->getAdapterName();//兼容非MySQL数据库 123 | if($adapterName == 'pgsql' || $adapterName == 'Pdo_Pgsql' || $adapterName == 'Pdo_SQLite' || $adapterName == 'SQLite'){ 124 | $order_by = 'RANDOM()'; 125 | }else{ 126 | $order_by = 'RAND()'; 127 | } 128 | $sql = $db->select()->from('table.contents') 129 | ->where('status = ?','publish') 130 | ->where('type = ?', 'post') 131 | ->where('created <= unix_timestamp(now())', 'post') //添加这一句避免未达到时间的文章提前曝光 132 | ->limit($defaults['number']) 133 | ->order($order_by); 134 | $result = $db->fetchAll($sql); 135 | foreach($result as $val){ 136 | $val = Typecho_Widget::widget('Widget_Abstract_Contents')->filter($val); 137 | echo str_replace(array('{permalink}', '{title}'),array($val['permalink'], $val['title']), $defaults['xformat']); 138 | } 139 | } 140 | 141 | 142 | /** 获取浏览器信息 agent); ?> */ 143 | function getBrowser($agent) 144 | { $outputer = false; 145 | if (preg_match('/MSIE\s([^\s|;]+)/i', $agent, $regs)) { 146 | $outputer = 'IE Browser'; 147 | } else if (preg_match('/FireFox\/([^\s]+)/i', $agent, $regs)) { 148 | $str1 = explode('Firefox/', $regs[0]); 149 | $FireFox_vern = explode('.', $str1[1]); 150 | $outputer = 'Firefox Browser '. $FireFox_vern[0]; 151 | } else if (preg_match('/Maxthon([\d]*)\/([^\s]+)/i', $agent, $regs)) { 152 | $str1 = explode('Maxthon/', $agent); 153 | $Maxthon_vern = explode('.', $str1[1]); 154 | $outputer = 'Maxthon Browser '.$Maxthon_vern[0]; 155 | } else if (preg_match('#SE 2([a-zA-Z0-9.]+)#i', $agent, $regs)) { 156 | $outputer = 'Sogo Browser'; 157 | } else if (preg_match('#360([a-zA-Z0-9.]+)#i', $agent, $regs)) { 158 | $outputer = '360 Browser'; 159 | } else if (preg_match('/Edge([\d]*)\/([^\s]+)/i', $agent, $regs)) { 160 | $str1 = explode('Edge/', $regs[0]); 161 | $Edge_vern = explode('.', $str1[1]); 162 | $outputer = 'Edge '.$Edge_vern[0]; 163 | } else if (preg_match('/EdgiOS([\d]*)\/([^\s]+)/i', $agent, $regs)) { 164 | $str1 = explode('EdgiOS/', $regs[0]); 165 | $outputer = 'Edge'; 166 | } else if (preg_match('/UC/i', $agent)) { 167 | $str1 = explode('rowser/', $agent); 168 | $UCBrowser_vern = explode('.', $str1[1]); 169 | $outputer = 'UC Browser '.$UCBrowser_vern[0]; 170 | }else if (preg_match('/OPR/i', $agent)) { 171 | $str1 = explode('OPR/', $agent); 172 | $opr_vern = explode('.', $str1[1]); 173 | $outputer = 'Open Browser '.$opr_vern[0]; 174 | } else if (preg_match('/MicroMesseng/i', $agent, $regs)) { 175 | $outputer = 'Weixin Browser'; 176 | } else if (preg_match('/WeiBo/i', $agent, $regs)) { 177 | $outputer = 'WeiBo Browser'; 178 | } else if (preg_match('/QQ/i', $agent, $regs)||preg_match('/QQ Browser\/([^\s]+)/i', $agent, $regs)) { 179 | $str1 = explode('rowser/', $agent); 180 | $QQ_vern = explode('.', $str1[1]); 181 | $outputer = 'QQ Browser '.$QQ_vern[0]; 182 | } else if (preg_match('/MQBHD/i', $agent, $regs)) { 183 | $str1 = explode('MQBHD/', $agent); 184 | $QQ_vern = explode('.', $str1[1]); 185 | $outputer = 'QQ Browser '.$QQ_vern[0]; 186 | } else if (preg_match('/BIDU/i', $agent, $regs)) { 187 | $outputer = 'Baidu Browser'; 188 | } else if (preg_match('/LBBROWSER/i', $agent, $regs)) { 189 | $outputer = 'KS Browser'; 190 | } else if (preg_match('/TheWorld/i', $agent, $regs)) { 191 | $outputer = 'TheWorld Browser'; 192 | } else if (preg_match('/XiaoMi/i', $agent, $regs)) { 193 | $outputer = 'XiaoMi Browser'; 194 | } else if (preg_match('/UBrowser/i', $agent, $regs)) { 195 | $str1 = explode('rowser/', $agent); 196 | $UCBrowser_vern = explode('.', $str1[1]); 197 | $outputer = 'UCBrowser '.$UCBrowser_vern[0]; 198 | } else if (preg_match('/mailapp/i', $agent, $regs)) { 199 | $outputer = 'Email Browser'; 200 | } else if (preg_match('/2345Explorer/i', $agent, $regs)) { 201 | $outputer = '2345 Browser'; 202 | } else if (preg_match('/Sleipnir/i', $agent, $regs)) { 203 | $outputer = 'Sleipnir Browser'; 204 | } else if (preg_match('/YaBrowser/i', $agent, $regs)) { 205 | $outputer = 'Yandex Browser'; 206 | } else if (preg_match('/Opera[\s|\/]([^\s]+)/i', $agent, $regs)) { 207 | $outputer = 'Opera Browser'; 208 | } else if (preg_match('/MZBrowser/i', $agent, $regs)) { 209 | $outputer = 'MZ Browser'; 210 | } else if (preg_match('/VivoBrowser/i', $agent, $regs)) { 211 | $outputer = 'Vivo Browser'; 212 | } else if (preg_match('/Quark/i', $agent, $regs)) { 213 | $outputer = 'Quark Browser'; 214 | } else if (preg_match('/mixia/i', $agent, $regs)) { 215 | $outputer = 'Mixia Browser'; 216 | }else if (preg_match('/fusion/i', $agent, $regs)) { 217 | $outputer = 'Fusion'; 218 | } else if (preg_match('/CoolMarket/i', $agent, $regs)) { 219 | $outputer = 'CoolMarket Browser'; 220 | } else if (preg_match('/Thunder/i', $agent, $regs)) { 221 | $outputer = 'Thunder Browser'; 222 | } else if (preg_match('/Chrome([\d]*)\/([^\s]+)/i', $agent, $regs)) { 223 | $str1 = explode('Chrome/', $agent); 224 | $chrome_vern = explode('.', $str1[1]); 225 | $outputer = 'Chrome '.$chrome_vern[0]; 226 | } else if (preg_match('/safari\/([^\s]+)/i', $agent, $regs)) { 227 | $str1 = explode('Version/', $agent); 228 | $safari_vern = explode('.', $str1[1]); 229 | $outputer = 'Safari '.$safari_vern[0]; 230 | } else{ 231 | return false; 232 | } 233 | return $outputer; 234 | } 235 | 236 | /** 获取操作系统信息 agent); ?>*/ 237 | function getOs($agent) 238 | { 239 | $os = false; 240 | 241 | if (preg_match('/win/i', $agent)) { 242 | if (preg_match('/nt 10.0/i', $agent)) { 243 | $os = 'Windows 10'; 244 | } else if (preg_match('/nt 6.1/i', $agent)) { 245 | $os = 'Windows 7'; 246 | } else if (preg_match('/nt 6.2/i', $agent)) { 247 | $os = 'Windows 8'; 248 | } else if(preg_match('/nt 6.3/i', $agent)) { 249 | $os = 'Windows 8.1'; 250 | } else if(preg_match('/nt 5.1/i', $agent)) { 251 | $os = 'Windows XP'; 252 | } else if (preg_match('/nt 6.0/i', $agent)) { 253 | $os = 'Windows Vista'; 254 | } else{ 255 | $os = 'Windows 11'; 256 | } 257 | } else if (preg_match('/android/i', $agent)) { 258 | if (preg_match('/android 11/i', $agent)) { 259 | $os = 'Android R'; 260 | } 261 | else if (preg_match('/android 12/i', $agent)) { 262 | $os = 'Android 12'; 263 | } 264 | else if (preg_match('/android 10/i', $agent)) { 265 | $os = 'Android Q'; 266 | } 267 | else if (preg_match('/android 9/i', $agent)) { 268 | $os = 'Android P'; 269 | } 270 | else if (preg_match('/android 8/i', $agent)) { 271 | $os = 'Android O'; 272 | } 273 | else{ 274 | $os = 'Android'; 275 | } 276 | } 277 | else if (preg_match('/ubuntu/i', $agent)) { 278 | $os = 'ubuntu'; 279 | } else if (preg_match('/linux/i', $agent)) { 280 | $os = 'Linux'; 281 | } else if (preg_match('/iPhone/i', $agent)) { 282 | $os = 'iPhone'; 283 | } else if (preg_match('/iPad/i', $agent)) { 284 | $os = 'iPad'; 285 | } else if (preg_match('/mac/i', $agent)) { 286 | $os = 'OSX'; 287 | }else if (preg_match('/cros/i', $agent)) { 288 | $os = 'Chrome os'; 289 | }else { 290 | return false; 291 | } 292 | return $os; 293 | } 294 | //html压缩 295 | /*****/ 296 | function compressHtml($html_source) { 297 | $chunks = preg_split('/(.*?|.*?<\/nocompress>|||)/msi', $html_source, -1, PREG_SPLIT_DELIM_CAPTURE); 298 | $compress = ''; 299 | foreach ($chunks as $c) { 300 | if (strtolower(substr($c, 0, 19)) == '') { 301 | $c = substr($c, 19, strlen($c) - 19 - 20); 302 | $compress .= $c; 303 | continue; 304 | } else if (strtolower(substr($c, 0, 12)) == '') { 305 | $c = substr($c, 12, strlen($c) - 12 - 13); 306 | $compress .= $c; 307 | continue; 308 | } else if (strtolower(substr($c, 0, 4)) == ' $char) { 322 | if ($char == '"' && $chars[$key - 1] != '\\' && !$is_apos) { 323 | $is_quot = !$is_quot; 324 | } else if ($char == '\'' && $chars[$key - 1] != '\\' && !$is_quot) { 325 | $is_apos = !$is_apos; 326 | } else if ($char == '/' && $chars[$key + 1] == '/' && !$is_quot && !$is_apos) { 327 | $tmp = substr($tmp, 0, $key); 328 | break; 329 | } 330 | } 331 | } 332 | $c .= $tmp; 333 | } 334 | } 335 | $c = preg_replace('/[\\n\\r\\t]+/', ' ', $c); 336 | $c = preg_replace('/\\s{2,}/', ' ', $c); 337 | $c = preg_replace('/>\\s <', $c); 338 | $c = preg_replace('/\\/\\*.*?\\*\\//i', '', $c); 339 | $c = preg_replace('//', '', $c); 340 | $compress .= $c; 341 | } 342 | return $compress; 343 | } 344 | 345 | //为文章标题添加锚点 346 | function createCatalog($obj) { 347 | global $catalog; 348 | global $catalog_count; 349 | $catalog = array(); 350 | $catalog_count = 0; 351 | $obj = preg_replace_callback('/(.*?)<\/h\1>/i', function($obj) { 352 | global $catalog; 353 | global $catalog_count; 354 | $catalog_count ++; 355 | $catalog[] = array('text' => trim(strip_tags($obj[3])), 'depth' => $obj[1], 'count' => $catalog_count); 356 | return ''.$obj[3].''; 357 | }, $obj); 358 | return $obj; 359 | } 360 | 361 | //输出文章目录容器 362 | function getCatalog() { 363 | global $catalog; 364 | $index = ''; 365 | if ($catalog) { 366 | 367 | $prev_depth = ''; 368 | $to_depth = 0; 369 | foreach($catalog as $catalog_item) { 370 | $catalog_depth = $catalog_item['depth']; 371 | if ($prev_depth) { 372 | if ($catalog_depth == $prev_depth) { 373 | $index .= ''; 374 | } elseif ($catalog_depth > $prev_depth) { 375 | $to_depth++; 376 | 377 | } else { 378 | $to_depth2 = ($to_depth > ($prev_depth - $catalog_depth)) ? ($prev_depth - $catalog_depth) : $to_depth; 379 | if ($to_depth2) { 380 | for ($i=0; $i<$to_depth2; $i++) { 381 | $index .= ''; 382 | $to_depth--; 383 | } 384 | } 385 | $index .= ''; 386 | } 387 | } 388 | $index .= '
  • '.$catalog_item['text'].''; 389 | $prev_depth = $catalog_item['depth']; 390 | } 391 | for ($i=0; $i<=$to_depth; $i++) { 392 | $index .= '
  • '; 393 | } 394 | } 395 | echo $index; 396 | } 397 | 398 | /** 399 | * 根据$coid获取链接 400 | */ 401 | function getPermalinkFromCoid($coid) 402 | { 403 | $db = Typecho_Db::get(); 404 | $options = Helper::options(); 405 | $contents = Typecho_Widget::widget('Widget_Abstract_Contents'); 406 | $row = $db->fetchRow($db->select('cid, type, author, text')->from('table.comments')->where('coid = ? AND status = ?', $coid, 'approved')); 407 | if (empty($row)) { 408 | return 'Comment not found!'; 409 | } 410 | 411 | $cid = $row['cid']; 412 | $select = $db->select('coid, parent')->from('table.comments')->where('cid = ? AND status = ?', $cid, 'approved')->order('coid'); 413 | if ($options->commentsShowCommentOnly) { 414 | $select->where('type = ?', 'comment'); 415 | } 416 | 417 | $comments = $db->fetchAll($select); 418 | if ($options->commentsOrder == 'DESC') { 419 | $comments = array_reverse($comments); 420 | } 421 | 422 | foreach ($comments as $key => $val) { 423 | $array[$val['coid']] = $val['parent']; 424 | } 425 | 426 | $i = $coid; 427 | while ($i != 0) { 428 | $break = $i; 429 | $i = $array[$i]; 430 | } 431 | $count = 0; 432 | foreach ($array as $key => $val) { 433 | if ($val == 0) { 434 | $count++; 435 | } 436 | 437 | if ($key == $break) { 438 | break; 439 | } 440 | 441 | } 442 | $parentContent = $contents->push($db->fetchRow($contents->select()->where('table.contents.cid = ?', $cid))); 443 | $permalink = rtrim($parentContent['permalink'], '/'); 444 | $page = ($options->commentsPageBreak) ? '/comment-page-' . ceil($count / $options->commentsPageSize) : (substr($permalink, -5, 5) == '.html' ? '' : '/'); 445 | return array("author" => $row['author'], "text" => $row['text'], "href" => "{$permalink}{$page}#{$row['type']}-{$coid}"); 446 | } 447 | 448 | /** 449 | * 输出评论回复内容,配合 commentAtContent($coid)一起使用 450 | * coid); ?> 451 | */ 452 | function showCommentContent($coid) 453 | { 454 | $db = Typecho_Db::get(); 455 | $result = $db->fetchRow($db->select('text')->from('table.comments')->where('coid = ? AND (status = ? OR status = ?)', $coid, 'approved','waiting')); 456 | $text = $result['text']; 457 | $atStr = commentAtContent($coid); 458 | $_content = Markdown::convert($text); 459 | //

    460 | if ($atStr !== '') { 461 | $content = substr_replace($_content, $atStr, 0, 3); 462 | } else { 463 | $content = $_content; 464 | } 465 | 466 | echo $content; 467 | } 468 | 469 | /** 470 | * 评论回复加@ 471 | */ 472 | function commentAtContent($coid) 473 | { 474 | $db = Typecho_Db::get(); 475 | $prow = $db->fetchRow($db->select('parent')->from('table.comments')->where('coid = ? AND (status = ? OR status = ?)', $coid, 'approved','waiting')); 476 | $parent = $prow['parent']; 477 | if ($parent != "0") { 478 | $arow = $db->fetchRow($db->select('author')->from('table.comments') 479 | ->where('coid = ? AND (status = ? OR status = ?)', $parent, 'approved','waiting')); 480 | $author = $arow['author']; 481 | $href = '

    @' . $author . ' '; 482 | return $href; 483 | } else { 484 | return ''; 485 | } 486 | } 487 | 488 | //算术验证评论 489 | 490 | function spam_protection_math(){ 491 | $num1=1; 492 | $num2=rand(1,9); 493 | echo "$num1 + $num2 = "; 494 | echo "\n"; 495 | echo "\n"; 496 | echo ""; 497 | } 498 | function spam_protection_pre($comment, $post, $result){ 499 | if(isset($_POST['sum'])){$sum=$_POST['sum'];} 500 | switch($sum){ 501 | case $_POST['num1']+$_POST['num2']: 502 | break; 503 | case null: 504 | throw new Typecho_Widget_Exception(_t('抱歉:请输入验证码','评论失败')); 505 | break; 506 | default: 507 | throw new Typecho_Widget_Exception(_t('抱歉:验证码错误,请返回重试','评论失败')); 508 | 509 | }; 510 | return $comment; 511 | } 512 | 513 | /** 514 | * 获取扇贝单词每日一句 515 | */ 516 | function today(){ 517 | //删除之前的图片和故事 518 | for ($i=1; $i <=30 ; $i++) { 519 | @unlink(date('Ymd',time()-24*3600*$i).'.json'); 520 | } 521 | $coverstory = date('Ymd').'.json'; //每日故事 json格式 522 | if (!file_exists($coverstory)) { 523 | $http = Typecho_Http_Client::get(); 524 | $http->Send('https://apiv3.shanbay.com/weapps/dailyquote/quote/'); 525 | $shanbaytoday = $http->getResponseBody(); 526 | file_put_contents($coverstory,$shanbaytoday); //写入文本 527 | } 528 | $coverstory = json_decode(file_get_contents($coverstory),true); 529 | return $coverstory; 530 | } -------------------------------------------------------------------------------- /header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | is('index')): ?> 18 | 19 | 20 | 21 | 22 | 23 | 24 | is('post') || $this->is('page')): ?> 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | header('generator=&template=&pingback=&xmlrpc=&wlw=&commentReply='); ?> 33 | <?php $this->archiveTitle(array( 34 | 'category' => _t('分类 %s 下的文章'), 35 | 'search' => _t('包含关键字 %s 的文章'), 36 | 'tag' => _t('标签 %s 下的文章'), 37 | 'author' => _t('%s 发布的文章') 38 | ), '', ' - '); ?><?php $this->options->title(); ?> 39 | options->favicon): ?> 40 | options->appleicon): ?> 41 | 42 | 43 | 44 | 52 | -------------------------------------------------------------------------------- /images/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/apple-touch-icon.png -------------------------------------------------------------------------------- /images/close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/close.png -------------------------------------------------------------------------------- /images/favicon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/favicon-192x192.png -------------------------------------------------------------------------------- /images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/favicon.ico -------------------------------------------------------------------------------- /images/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/loading.gif -------------------------------------------------------------------------------- /images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/logo.png -------------------------------------------------------------------------------- /images/next.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/next.png -------------------------------------------------------------------------------- /images/prev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/images/prev.png -------------------------------------------------------------------------------- /images/squares.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /index.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 11 | $sticky = $this->options->sticky; 12 | if($sticky && $this->is('index') || $this->is('front')){ 13 | $sticky_cids = explode(',', strtr($sticky, ' ', ',')); 14 | $sticky_html = "[置顶] "; 15 | $db = Typecho_Db::get(); 16 | $pageSize = $this->options->pageSize; 17 | $select1 = $this->select()->where('type = ?', 'post'); 18 | $select2 = $this->select()->where('type = ? && status = ? && created < ?', 'post','publish',time()); 19 | //清空原有文章的列队 20 | $this->row = []; 21 | $this->stack = []; 22 | $this->length = 0; 23 | $order = ''; 24 | foreach($sticky_cids as $i => $cid) { 25 | if($i == 0) $select1->where('cid = ?', $cid); 26 | else $select1->orWhere('cid = ?', $cid); 27 | $order .= " when $cid then $i"; 28 | $select2->where('table.contents.cid != ?', $cid); //避免重复 29 | } 30 | if ($order) $select1->order('', "(case cid$order end)"); //置顶文章的顺序 按 $sticky 中 文章ID顺序 31 | if (($this->_currentPage || $this->currentPage) == 1) foreach($db->fetchAll($select1) as $sticky_post){ //首页第一页才显示 32 | $sticky_post['sticky'] = $sticky_html; 33 | $this->push($sticky_post); //压入列队 34 | } 35 | if($this->user->hasLogin()){ 36 | $uid = $this->user->uid; //登录时,显示用户各自的私密文章 37 | if($uid) $select2->orWhere('authorId = ? && status = ?', $uid, 'private'); 38 | } 39 | $sticky_posts = $db->fetchAll($select2->order('table.contents.created', Typecho_Db::SORT_DESC)->page($this->_currentPage, $this->parameter->pageSize)); 40 | foreach($sticky_posts as $sticky_post) $this->push($sticky_post); //压入列队 41 | $this->setTotal($this->getTotal()-count($sticky_cids)); //置顶文章不计算在所有文章内 42 | } 43 | ?> 44 | 45 |

    46 | 73 |
    74 |
    75 |
    76 | 77 |
    78 |

    79 | 80 | 81 | 82 | 0 83 | 84 | 85 | | Find me on 86 |

    87 | .

    91 |

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

    92 |
    93 |
    94 | 95 | Writing 96 | 97 | 109 |
    110 |
    111 | 112 | Projects 113 | 114 |
      115 | 116 |
    117 |
    118 |
    119 |
    120 | need('footer.php'); ?> -------------------------------------------------------------------------------- /js/lazyload.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Lazy Load - JavaScript plugin for lazy loading images 3 | * 4 | * Copyright (c) 2007-2019 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-rc.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); 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 | if (typeof define === "function" && define.amd){ 29 | root = window; 30 | } 31 | 32 | const defaults = { 33 | src: "data-src", 34 | srcset: "data-srcset", 35 | selector: ".lazyload", 36 | root: null, 37 | rootMargin: "0px", 38 | threshold: 0 39 | }; 40 | 41 | /** 42 | * Merge two or more objects. Returns a new object. 43 | * @private 44 | * @param {Boolean} deep If true, do a deep (or recursive) merge [optional] 45 | * @param {Object} objects The objects to merge together 46 | * @returns {Object} Merged values of defaults and options 47 | */ 48 | const extend = function () { 49 | 50 | let extended = {}; 51 | let deep = false; 52 | let i = 0; 53 | let length = arguments.length; 54 | 55 | /* Check if a deep merge */ 56 | if (Object.prototype.toString.call(arguments[0]) === "[object Boolean]") { 57 | deep = arguments[0]; 58 | i++; 59 | } 60 | 61 | /* Merge the object into the extended object */ 62 | let merge = function (obj) { 63 | for (let prop in obj) { 64 | if (Object.prototype.hasOwnProperty.call(obj, prop)) { 65 | /* If deep merge and property is an object, merge properties */ 66 | if (deep && Object.prototype.toString.call(obj[prop]) === "[object Object]") { 67 | extended[prop] = extend(true, extended[prop], obj[prop]); 68 | } else { 69 | extended[prop] = obj[prop]; 70 | } 71 | } 72 | } 73 | }; 74 | 75 | /* Loop through each object and conduct a merge */ 76 | for (; i < length; i++) { 77 | let obj = arguments[i]; 78 | merge(obj); 79 | } 80 | 81 | return extended; 82 | }; 83 | 84 | function LazyLoad(images, options) { 85 | this.settings = extend(defaults, options || {}); 86 | this.images = images || document.querySelectorAll(this.settings.selector); 87 | this.observer = null; 88 | this.init(); 89 | } 90 | 91 | LazyLoad.prototype = { 92 | init: function() { 93 | 94 | /* Without observers load everything and bail out early. */ 95 | if (!root.IntersectionObserver) { 96 | this.loadImages(); 97 | return; 98 | } 99 | 100 | let self = this; 101 | let observerConfig = { 102 | root: this.settings.root, 103 | rootMargin: this.settings.rootMargin, 104 | threshold: [this.settings.threshold] 105 | }; 106 | 107 | this.observer = new IntersectionObserver(function(entries) { 108 | Array.prototype.forEach.call(entries, function (entry) { 109 | if (entry.isIntersecting) { 110 | self.observer.unobserve(entry.target); 111 | let src = entry.target.getAttribute(self.settings.src); 112 | let srcset = entry.target.getAttribute(self.settings.srcset); 113 | if ("img" === entry.target.tagName.toLowerCase()) { 114 | if (src) { 115 | entry.target.src = src; 116 | } 117 | if (srcset) { 118 | entry.target.srcset = srcset; 119 | } 120 | } else { 121 | entry.target.style.backgroundImage = "url(" + src + ")"; 122 | } 123 | } 124 | }); 125 | }, observerConfig); 126 | 127 | Array.prototype.forEach.call(this.images, function (image) { 128 | self.observer.observe(image); 129 | }); 130 | }, 131 | 132 | loadAndDestroy: function () { 133 | if (!this.settings) { return; } 134 | this.loadImages(); 135 | this.destroy(); 136 | }, 137 | 138 | loadImages: function () { 139 | if (!this.settings) { return; } 140 | 141 | let self = this; 142 | Array.prototype.forEach.call(this.images, function (image) { 143 | let src = image.getAttribute(self.settings.src); 144 | let srcset = image.getAttribute(self.settings.srcset); 145 | if ("img" === image.tagName.toLowerCase()) { 146 | if (src) { 147 | image.src = src; 148 | } 149 | if (srcset) { 150 | image.srcset = srcset; 151 | } 152 | } else { 153 | image.style.backgroundImage = "url('" + src + "')"; 154 | } 155 | }); 156 | }, 157 | 158 | destroy: function () { 159 | if (!this.settings) { return; } 160 | this.observer.disconnect(); 161 | this.settings = null; 162 | } 163 | }; 164 | 165 | root.lazyload = function(images, options) { 166 | return new LazyLoad(images, options); 167 | }; 168 | 169 | if (root.jQuery) { 170 | const $ = root.jQuery; 171 | $.fn.lazyload = function (options) { 172 | options = options || {}; 173 | options.attribute = options.attribute || "data-src"; 174 | new LazyLoad($.makeArray(this), options); 175 | return this; 176 | }; 177 | } 178 | 179 | return LazyLoad; 180 | }); -------------------------------------------------------------------------------- /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 | // toc 里面是a标签问题 87 | $(function(){ 88 | if($("#toc li a")){ 89 | $("#toc a").each(function(index){ 90 | var ele = $(this); 91 | if(ele.attr('href').indexOf('http') != -1){ 92 | ele.attr('href',ele.prev().attr('href')) 93 | } 94 | }) 95 | 96 | $("#TableOfContents ul").children().each(function(index){ 97 | if($(this).children('a').length===0){ 98 | $(this).addClass('no-before') 99 | } 100 | }) 101 | 102 | } 103 | }) 104 | -------------------------------------------------------------------------------- /lib/OwO/OwO.json: -------------------------------------------------------------------------------- 1 | { 2 | "颜文字": { 3 | "type": "emoticon", 4 | "container": [ 5 | { 6 | "icon": "OωO", 7 | "text": "目瞪口呆" 8 | }, 9 | { 10 | "icon": "|´・ω・)ノ", 11 | "text": "Hi" 12 | }, 13 | { 14 | "icon": "ヾ(≧∇≦*)ゝ", 15 | "text": "开心" 16 | }, 17 | { 18 | "icon": "(☆ω☆)", 19 | "text": "星星眼" 20 | }, 21 | { 22 | "icon": "(╯‵□′)╯︵┴─┴", 23 | "text": "掀桌" 24 | }, 25 | { 26 | "icon": " ̄﹃ ̄", 27 | "text": "流口水" 28 | }, 29 | { 30 | "icon": "(/ω\)", 31 | "text": "捂脸" 32 | }, 33 | { 34 | "icon": "∠( ᐛ 」∠)_", 35 | "text": "给跪" 36 | }, 37 | { 38 | "icon": "(๑•̀ㅁ•́ฅ)", 39 | "text": "Hi" 40 | }, 41 | { 42 | "icon": "→_→", 43 | "text": "斜眼" 44 | }, 45 | { 46 | "icon": "୧(๑•̀⌄•́๑)૭", 47 | "text": "加油" 48 | }, 49 | { 50 | "icon": "٩(ˊᗜˋ*)و", 51 | "text": "有木有WiFi" 52 | }, 53 | { 54 | "icon": "(ノ°ο°)ノ", 55 | "text": "前方高能预警" 56 | }, 57 | { 58 | "icon": "(´இ皿இ`)", 59 | "text": "我从未见过如此厚颜无耻之人" 60 | }, 61 | { 62 | "icon": "⌇●﹏●⌇", 63 | "text": "吓死宝宝惹" 64 | }, 65 | { 66 | "icon": "(ฅ´ω`ฅ)", 67 | "text": "已阅留爪" 68 | }, 69 | { 70 | "icon": "(╯°A°)╯︵○○○", 71 | "text": "去吧大师球" 72 | }, 73 | { 74 | "icon": "φ( ̄∇ ̄o)", 75 | "text": "太萌惹" 76 | }, 77 | { 78 | "icon": "ヾ(´・ ・`。)ノ\"", 79 | "text": "咦咦咦" 80 | }, 81 | { 82 | "icon": "( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃", 83 | "text": "气呼呼" 84 | }, 85 | { 86 | "icon": "(ó﹏ò。)", 87 | "text": "我受到了惊吓" 88 | }, 89 | { 90 | "icon": "Σ(っ °Д °;)っ", 91 | "text": "什么鬼" 92 | }, 93 | { 94 | "icon": "( ,,´・ω・)ノ\"(´っω・`。)", 95 | "text": "摸摸头" 96 | }, 97 | { 98 | "icon": "╮(╯▽╰)╭ ", 99 | "text": "无奈" 100 | }, 101 | { 102 | "icon": "o(*////▽////*)q ", 103 | "text": "脸红" 104 | }, 105 | { 106 | "icon": ">﹏<", 107 | "text": "" 108 | }, 109 | { 110 | "icon": "( ๑´•ω•) \"(ㆆᴗㆆ)", 111 | "text": "" 112 | }, 113 | { 114 | "icon": "(。•ˇ‸ˇ•。)", 115 | "text": "" 116 | } 117 | ] 118 | }, 119 | "Emoji": { 120 | "type": "emoji", 121 | "container": [ 122 | { 123 | "icon": "😂", 124 | "text": "" 125 | }, 126 | { 127 | "icon": "😀", 128 | "text": "" 129 | }, 130 | { 131 | "icon": "😅", 132 | "text": "" 133 | }, 134 | { 135 | "icon": "😊", 136 | "text": "" 137 | }, 138 | { 139 | "icon": "🙂", 140 | "text": "" 141 | }, 142 | { 143 | "icon": "🙃", 144 | "text": "" 145 | }, 146 | { 147 | "icon": "😌", 148 | "text": "" 149 | }, 150 | { 151 | "icon": "😍", 152 | "text": "" 153 | }, 154 | { 155 | "icon": "😘 ", 156 | "text": "" 157 | }, 158 | { 159 | "icon": "😜", 160 | "text": "" 161 | }, 162 | { 163 | "icon": "😝", 164 | "text": "" 165 | }, 166 | { 167 | "icon": "😏", 168 | "text": "" 169 | }, 170 | { 171 | "icon": "😒", 172 | "text": "" 173 | }, 174 | { 175 | "icon": "🙄", 176 | "text": "" 177 | }, 178 | { 179 | "icon": "😳 ", 180 | "text": "" 181 | }, 182 | { 183 | "icon": "😡", 184 | "text": "" 185 | }, 186 | { 187 | "icon": "😔", 188 | "text": "" 189 | }, 190 | { 191 | "icon": "😫", 192 | "text": "" 193 | }, 194 | { 195 | "icon": "😱", 196 | "text": "" 197 | }, 198 | { 199 | "icon": "😭", 200 | "text": "" 201 | }, 202 | { 203 | "icon": "💩", 204 | "text": "" 205 | }, 206 | { 207 | "icon": "👻", 208 | "text": "" 209 | }, 210 | { 211 | "icon": "🙌", 212 | "text": "" 213 | }, 214 | { 215 | "icon": "🖕", 216 | "text": "" 217 | }, 218 | { 219 | "icon": "👍", 220 | "text": "" 221 | }, 222 | { 223 | "icon": "👫", 224 | "text": "" 225 | }, 226 | { 227 | "icon": "👬", 228 | "text": "" 229 | }, 230 | { 231 | "icon": "👭", 232 | "text": "" 233 | }, 234 | { 235 | "icon": "🌚", 236 | "text": "" 237 | }, 238 | { 239 | "icon": "🌝", 240 | "text": "" 241 | }, 242 | { 243 | "icon": "🙈", 244 | "text": "" 245 | }, 246 | { 247 | "icon": "💊", 248 | "text": "" 249 | }, 250 | { 251 | "icon": "😶", 252 | "text": "" 253 | }, 254 | { 255 | "icon": "🙏", 256 | "text": "" 257 | }, 258 | { 259 | "icon": "🍦", 260 | "text": "" 261 | }, 262 | { 263 | "icon": "🍉", 264 | "text": "" 265 | }, 266 | { 267 | "icon": "😣", 268 | "text": "" 269 | } 270 | ] 271 | } 272 | } -------------------------------------------------------------------------------- /lib/OwO/OwO.min.css: -------------------------------------------------------------------------------- 1 | .OwO{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.OwO:hover .OwO-logo{color:#444}.OwO.OwO-open .OwO-logo{border-radius:4px 4px 0 0;border-bottom:none;color:#444}.OwO.OwO-open .OwO-body{display:block}.OwO.OwO-up .OwO-body{ top:inherit; bottom:21px; border-radius:4px 4px 4px 0; -webkit-border-radius:4px 4px 4px 0; -moz-border-radius:4px 4px 4px 0; -ms-border-radius:4px 4px 4px 0; -o-border-radius:4px 4px 4px 0; }.OwO.OwO-up .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0}.OwO.OwO-up.OwO-open .OwO-logo{border:1px solid #ddd;border-radius:0 0 4px 4px;border-top:none}.OwO .OwO-logo{position:relative;display:inline-block;color:#888;/* background:#fff; *//* border:1px solid #ddd; */border-radius:4px;font-size:13px;padding:2px 5px;cursor:pointer;height:22px;box-sizing:border-box;z-index:2;line-height:13px;}.OwO .OwO-logo:hover span{display:inline-block}.OwO .OwO-body{display:none;position:relative;width:400px;/* background:#fff; */border: 1px solid #dedede;z-index:1;top:0;border-radius:4px 4px 4px 4px;}.OwO .OwO-body .OwO-items{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;display:none;padding:10px;margin:0;overflow:scroll;font-size:0}.OwO .OwO-body .OwO-items .OwO-item{list-style-type:none;background: #4a4a4a;padding:5px 10px;border-radius:5px;display:inline-block;font-size:12px;line-height:14px;margin:0 10px 12px 0;cursor:pointer;-webkit-transition:.3s;transition:.3s;-moz-transition:.3s;-ms-transition:.3s;-o-transition:.3s;}.OwO .OwO-body .OwO-items .OwO-item:hover{background: #673AB7;box-shadow:0 2px 2px 0 rgba(0,0,0,.14),0 3px 1px -2px rgba(0,0,0,.2),0 1px 5px 0 rgba(0,0,0,.12);}.OwO .OwO-body .OwO-items-emoji .OwO-item{font-size:20px;line-height:19px}.OwO .OwO-body .OwO-items-image .OwO-item{max-width:calc(25% - 10px);box-sizing:border-box}.OwO .OwO-body .OwO-items-image .OwO-item img{max-width:100%}.OwO .OwO-body .OwO-items-show{display:block}.OwO .OwO-body .OwO-bar{width:100%;/* height:30px; */border-top:1px solid #ddd;/* background:#fff; */border-radius:0 0 4px 4px;color:#444;}.OwO .OwO-body .OwO-bar .OwO-packages{margin:0;padding:0;font-size:0}.OwO .OwO-body .OwO-bar .OwO-packages li{list-style-type:none;display:inline-block;line-height:30px;font-size:14px;padding:0 10px;cursor:pointer;margin-right:3px}.OwO .OwO-body .OwO-bar .OwO-packages li:nth-child(1){border-radius:0 0 0 3px}.OwO .OwO-body .OwO-bar .OwO-packages li:hover{background: #4a4a4a;}.OwO .OwO-body .OwO-bar .OwO-packages .OwO-package-active{background: #4a4a4a;-webkit-transition:.3s;transition:.3s;} -------------------------------------------------------------------------------- /lib/OwO/OwO.min.js: -------------------------------------------------------------------------------- 1 | "use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var a=0;a=200&&i.status<300||304===i.status?(a.odata=JSON.parse(i.responseText),a.init(t)):console.log("OwO data request was unsuccessful: "+i.status))},i.open("get",t.api,!0),i.send(null)}return _createClass(e,[{key:"init",value:function(e){var t=this;this.area=e.target,this.packages=Object.keys(this.odata);for(var a='\n \n
    ',s=0;s';for(var n=this.odata[this.packages[s]].container,i=0;i'+n[i].icon+"";a+="\n "}a+='\n
    \n
      ';for(var o=0;o"+this.packages[o]+"";a+="\n
    \n
    \n
    \n ",this.container.innerHTML=a,this.logo=this.container.getElementsByClassName("OwO-logo")[0],this.logo.addEventListener("click",function(){t.toggle()}),this.container.getElementsByClassName("OwO-body")[0].addEventListener("click",function(e){var a=null;if(e.target.classList.contains("OwO-item")?a=e.target:e.target.parentNode.classList.contains("OwO-item")&&(a=e.target.parentNode),a){var s=t.area.selectionEnd,n=t.area.value;t.area.value=n.slice(0,s)+a.innerHTML+n.slice(s),t.area.focus(),t.toggle()}}),this.packagesEle=this.container.getElementsByClassName("OwO-packages")[0];for(var c=function(e){!function(a){t.packagesEle.children[e].addEventListener("click",function(){t.tab(a)})}(e)},l=0;lli{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/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/lib/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/lib/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/lib/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/lib/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /lib/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/lib/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /lib/meslo-LG/fonts/MesloLGS-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/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.12 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,!1);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.setAttribute("aria-hidden",!0),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}])}); -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "仙岛驿站", 3 | "short_name": "仙岛驿站", 4 | "theme_color": "#1d1f21", 5 | "background_color": "#1d1f21", 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 |
    37 | 38 |
    39 |
    40 | need('comments.php'); ?> 41 |
    42 |
    43 |
    44 | need('footer.php'); ?> -------------------------------------------------------------------------------- /post.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
    7 | 8 | 9 | 10 | 11 | 12 | 13 | 16 | 17 | 18 |
      19 |
    • 20 | Home 21 |
    • 22 | widget('Widget_Contents_Page_List')->parse('
    • {title}
    • '); ?> 23 | options->github): ?>
    • 24 | Github 25 |
    • 26 |
    27 |
    28 |
    29 | 30 |
      31 |
    • 32 | 33 | 34 |
    • 35 |
    • 36 | theNext('%s', '', array('title' => '', 'tagClass' => 'icon')); ?> 37 |
    • 38 |
    • 39 | thePrev('%s', '', array('title' => '', 'tagClass' => 'icon')); ?> 40 |
    • 41 |
    • 42 | 43 | 44 | 45 |
    • 46 |
    • 47 | 48 | 49 | 50 |
    • 51 |
    52 | 53 | 54 | 55 | 56 | 57 |
    58 |
    59 | 113 |
    114 | 119 |
    120 |
    121 |
    122 |
    123 |
    124 |
    125 |
    126 |

    title() ?>

    127 |
    128 | 131 | 137 | 141 | 142 |
    143 |
    144 |
    145 | 146 |

    本文链接:

    147 | permalink() ?> 148 |
    149 |
    150 | need('comments.php'); ?> 151 |
    152 |
    153 | need('footer.php'); ?> 154 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Seevil/cactus/7bab2cc6ca8be76b4dec3e7a80d9da76576cbd8c/screenshot.png -------------------------------------------------------------------------------- /search.php: -------------------------------------------------------------------------------- 1 | need('header.php'); 4 | ?> 5 | 6 |
    7 | 34 |
    35 | 36 |
    37 | 38 | archiveTitle(array('search' => _t('包含关键字“ %s ”的文章'),), '', ''); ?> 39 | 40 |
      41 | have()): ?> 42 | next()): ?> 43 |
    • 44 |
      45 | 46 |
      47 | 48 | title(38,'...') ?> 49 | 50 |
    • 51 | 52 | 53 |

      没有找到相关内容

      54 | 55 | 56 |
    57 |
    58 | 59 |
    60 |
    61 | need('footer.php'); ?> -------------------------------------------------------------------------------- /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/6.1.5/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": "07168654d3e0648f93f59a9bc537457a" 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": "css/search.css", 39 | "revision": "c1f2a50d1f6903ebeac7432fa1d70f5a" 40 | }, 41 | { 42 | "url": "css/comments.css", 43 | "revision": "1999d64221003e829e10e1a21e36b399" 44 | }, 45 | { 46 | "url": "js/lazyload.js", 47 | "revision": "377c7f9061416449faef372ff1fba9ed" 48 | }, 49 | { 50 | "url": "js/main.js", 51 | "revision": "70b27067d04d0c6008ef57238ec6c9db" 52 | }, 53 | { 54 | "url": "js/lightbox.min.js", 55 | "revision": "86ae6c62f555df51346b0be4bc2d0267" 56 | }, 57 | { 58 | "url": "lib/font-awesome/css/font-awesome.css", 59 | "revision": "38021bc5f4c004f5afbee38855ba260f" 60 | }, 61 | { 62 | "url": "lib/font-awesome/css/font-awesome.min.css", 63 | "revision": "48ab1883875b3c7f06592dd04eb2c297" 64 | }, 65 | { 66 | "url": "lib/font-awesome/fonts/fontawesome-webfont.woff", 67 | "revision": "c8ddf1e5e5bf3682bc7bebf30f394148" 68 | }, 69 | { 70 | "url": "lib/font-awesome/fonts/fontawesome-webfont.woff2", 71 | "revision": "e6cf7c6ec7c2d6f670ae9d762604cb0b" 72 | }, 73 | { 74 | "url": "lib/highlight.min.js", 75 | "revision": "bdbf53ccebb5d5daac05c2b6db7a69dc" 76 | }, 77 | { 78 | "url": "lib/OwO/OwO.min.js", 79 | "revision": "b14ecca1a89c41307ebbc5a2ff70cb50" 80 | }, 81 | { 82 | "url": "lib/OwO/OwO.min.css", 83 | "revision": "fa21a60e7f352aadb07cdf75d04e2c4e" 84 | }, 85 | 86 | { 87 | "url": "lib/meslo-LG/fonts/MesloLGS-Regular.woff", 88 | "revision": "c26c11f108b98536a374afb1337e156c" 89 | }, 90 | { 91 | "url": "lib/meslo-LG/styles.css", 92 | "revision": "711087aaff7624e62edd074044ec1dd9" 93 | }, 94 | { 95 | "url": "lib/typed.js", 96 | "revision": "c4d749bea1bf41b435328c6171c37c6d" 97 | } 98 | ].concat(self.__precacheManifest || []); 99 | workbox.precaching.suppressWarnings(); 100 | workbox.precaching.precacheAndRoute(self.__precacheManifest, {}); 101 | 102 | workbox.routing.registerRoute(/.*\.js/, workbox.strategies.networkFirst(), 'GET'); 103 | workbox.routing.registerRoute(/.*\.css/, workbox.strategies.staleWhileRevalidate({ plugins: [{ cacheableResponse: { statuses: [ 0, 200 ] } }] }), 'GET'); 104 | workbox.routing.registerRoute(/.*\.(?:png|jpg|jpeg|svg|gif|webp)/, workbox.strategies.cacheFirst({ plugins: [{ expiration: { maxEntries: 50 } }] }), 'GET'); 105 | workbox.routing.registerRoute(/.*\.html/, workbox.strategies.networkFirst(), 'GET'); 106 | onmessage = (event) => { 107 | importScripts('lib/highlight.min.js'); 108 | const result = self.hljs.highlightAuto(event.data); 109 | postMessage(result.value); 110 | }; -------------------------------------------------------------------------------- /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'); ?> --------------------------------------------------------------------------------