├── LICENSE ├── README.md ├── _config.yml ├── languages ├── de.yml ├── default.yml ├── es.yml ├── fr.yml ├── ja.yml ├── ko.yml ├── nl.yml ├── no.yml ├── pt.yml ├── ru.yml ├── zh-CN.yml └── zh-TW.yml ├── layout ├── _partial │ ├── after-footer.ejs │ ├── archive-post.ejs │ ├── archive.ejs │ ├── article.ejs │ ├── footer.ejs │ ├── head.ejs │ ├── ocean.ejs │ ├── post │ │ ├── albums.ejs │ │ ├── busuanzi.ejs │ │ ├── category.ejs │ │ ├── date.ejs │ │ ├── gallery.ejs │ │ ├── gitalk.ejs │ │ ├── justifiedGallery.ejs │ │ ├── nav.ejs │ │ ├── search.ejs │ │ ├── tag.ejs │ │ ├── title.ejs │ │ ├── tocbot.ejs │ │ ├── topping.ejs │ │ └── valine.ejs │ ├── sidebar.ejs │ └── totop.ejs ├── archive.ejs ├── categories.ejs ├── index.ejs ├── layout.ejs ├── page.ejs ├── post.ejs └── tags.ejs ├── package.json ├── screenshots └── hexo-theme-ocean.jpg └── source ├── 404.html ├── css ├── 404.styl ├── _extend.styl ├── _feathericon.styl ├── _fonts.styl ├── _mixins.styl ├── _normalize.styl ├── _partial │ ├── albums.styl │ ├── apple.styl │ ├── archive.styl │ ├── article.styl │ ├── articles.styl │ ├── blockquote.styl │ ├── categories.styl │ ├── english.styl │ ├── float.styl │ ├── footer.styl │ ├── gallery.styl │ ├── gitalk.styl │ ├── highlight.styl │ ├── justifiedGallery.styl │ ├── layou.styl │ ├── lists.styl │ ├── mobile.styl │ ├── navbar.styl │ ├── ocean.styl │ ├── pace.styl │ ├── pages.styl │ ├── safari.styl │ ├── search.styl │ ├── sidebar.styl │ ├── tag.styl │ ├── tocbot.styl │ ├── tooltips.styl │ ├── totop.styl │ └── valine.styl ├── _variables.styl ├── feathericon │ ├── feathericon.eot │ ├── feathericon.svg │ ├── feathericon.ttf │ ├── feathericon.woff │ └── feathericon.woff2 └── style.styl ├── fancybox ├── jquery.fancybox.min.css └── jquery.fancybox.min.js ├── favicon.ico ├── fonts └── raleway_medium │ ├── Raleway-Medium.eot │ ├── Raleway-Medium.svg │ ├── Raleway-Medium.ttf │ └── Raleway-Medium.woff ├── images ├── forrestgump.png ├── hexo-inverted.svg ├── hexo.svg └── ocean │ ├── ocean.mp4 │ ├── ocean.ogv │ ├── ocean.png │ ├── ocean.webm │ └── overlay-hero.png └── js ├── busuanzi-2.3.pure.min.js ├── jquery-2.0.3.min.js ├── jquery.justifiedGallery.min.js ├── lazyload.min.js ├── ocean.js ├── pace.min.js ├── search.js └── tocbot.min.js /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Ocean 2 | 3 | Ocean is a mobile-enabled Hexo theme based on the features in Hexo's default theme landscape. Since I am a Designer and not a Coder, so please advise! I am very grateful to [youchen1992](https://github.com/youchen1992) for providing technical support during the Ocean production process. 4 | 5 | 6 | [Preview](https://zhwangart.github.io) 7 | 8 | [中文说明](https://zhwangart.github.io/2018/11/30/Ocean/) 9 | 10 | ![Screenshot](screenshots/hexo-theme-ocean.jpg) 11 | 12 | ## Install 13 | 14 | ``` bash 15 | $ git clone https://github.com/zhwangart/hexo-theme-ocean.git themes/ocean 16 | ``` 17 | 18 | ## Enable 19 | 20 | Modify `theme` setting in `_config.yml` to `ocean` 21 | 22 | ``` yml 23 | theme: ocean 24 | ``` 25 | 26 | ## Update 27 | 28 | ``` bash 29 | cd themes/ocean 30 | git pull 31 | ``` 32 | 33 | ## Configuration 34 | 35 | let me know if you can’t find something. 36 | 37 | ``` yml 38 | # Menu 39 | menu: 40 | Home: / 41 | Archives: /archives 42 | Gallery: /gallery 43 | About: /about 44 | Links: /links 45 | rss: /atom.xml 46 | 47 | # Miscellaneous 48 | favicon: /favicon.ico 49 | brand: /images/hexo.svg 50 | 51 | # Ocean Video 52 | # Because I put videos in multiple formats on the same path, I just labeled the path here. 53 | ocean: 54 | overlay: true 55 | path: images/ocean/ # Video storage path, formats: mp4/ogg/webm 56 | brand: /images/hexo-inverted.svg # Optional, a small logo 57 | 58 | # Content 59 | excerpt_link: Read More... 60 | 61 | # fancybox 62 | fancybox: true 63 | 64 | # Local search 65 | search_text: Search 66 | 67 | # Gitalk 68 | gitalk: 69 | enable: true 70 | clientID: # GitHub Application Client ID 71 | clientSecret: # Client Secret 72 | repo: # Repository name 73 | owner: # GitHub ID 74 | admin: # GitHub ID 75 | 76 | # Valine 77 | valine: 78 | enable: false # Default: false. 79 | el: 'vcomments' # The DOM element to be mounted on initialization. 80 | appId: # Application appId from Leancloud. 81 | appKey: # Application appKey from Leancloud. 82 | notify: false # Mail notifier, Default: false. 83 | verify: true # Validation code, Default: true. 84 | avatar: 'mp' # Gravatar type. 85 | pageSize: '10' # Number of pages per page. 86 | placeholder: '请输入...' # Comment box placeholders. 87 | ``` 88 | 89 | The [feathericon](https://feathericon.com) in the menu is programmed ordely in "CSS `source/css/_partial/navbar.styl` " and can be changed or added if needed. 90 | 91 | ``` css 92 | .nav-item 93 | &:nth-child(1) // home 94 | .nav-item-link 95 | &::before 96 | content '\f12f' 97 | &:nth-child(2) // archives 98 | .nav-item-link 99 | &::before 100 | content '\f12a' 101 | //&:nth-child(3) // gallery 102 | // .nav-item-link 103 | // &::before 104 | // content '\f1a9' 105 | //&:nth-child(4) // about 106 | // .nav-item-link 107 | // &::before 108 | // content '\f174' 109 | ``` 110 | 111 | ## Plugins 112 | 113 | + [hexo-generator-search](https://github.com/hexojs/hexo-theme-landscape) Local search 114 | 115 | ```yml 116 | $ npm install hexo-generator-searchdb --save 117 | ``` 118 | Then add the plugin configuration for hexo's configuration file `_config.yml` (note: not the theme's configuration file): 119 | 120 | ```yml 121 | # Hexo-generator-search 122 | search: 123 | path: search.xml 124 | field: post 125 | format: html 126 | ``` 127 | 128 | + [hexo-generate-feed](https://github.com/hexojs/hexo-generator-feed) RSS 129 | 130 | ```yml 131 | $ npm install hexo-generator-feed --save 132 | ``` 133 | 134 | Then add the plugin configuration for hexo's configuration file `_config.yml` (note: not the theme's configuration file): 135 | 136 | ```yml 137 | feed: 138 | type: atom 139 | path: atom.xml 140 | limit: 20 141 | hub: 142 | content: 143 | content_limit: 140 144 | content_limit_delim: ' ' 145 | order_by: -date 146 | ``` 147 | 148 | + [hexo-generator-index-pin-top](https://github.com/netcan/hexo-generator-index-pin-top) 149 | 150 | ``` bash 151 | $ npm uninstall hexo-generator-index --save 152 | $ npm install hexo-generator-index-pin-top --save 153 | ``` 154 | 155 | ## Post poster 156 | 157 | ``` md 158 | --- 159 | title: Post name 160 | 161 | photos: [ 162 | ["img_url"], 163 | ["img_url"] 164 | ] 165 | --- 166 | ``` 167 | 168 | ## Gallery 169 | Need to write in the head of the markdown, this is not a good way to write, I hope to get a better way to write on github. 170 | 171 | ``` md 172 | --- 173 | title: Gallery 174 | 175 | albums: [ 176 | ["img_url","img_caption"], 177 | ["img_url","img_caption"] 178 | ] 179 | --- 180 | ``` 181 | 182 | ## Toc 183 | 184 | Use Tocbot to parse the title tags (h1~h6) in the content and insert the directory. 185 | 186 | + ocean/_config.yml 187 | 188 | ``` bash 189 | # Toc 190 | toc: true 191 | ``` 192 | + If Toc is turned on in ocean/_config.yml, then Tocbot will generate a Toc article directory in the title tag of each blog parsing content, but not all blogs require Toc, so in the Front-matter section of markdown Can be closed: 193 | 194 | ``` md 195 | --- 196 | toc: false 197 | --- 198 | ``` 199 | 200 | --- 201 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # Menu 2 | menu: 3 | Home: / 4 | Archives: /archives 5 | Gallery: /gallery 6 | About: /about 7 | rss: /atom.xml 8 | 9 | 10 | # Miscellaneous 11 | favicon: /favicon.ico 12 | brand: /images/hexo.svg 13 | 14 | # Ocean Video 15 | # Because I put videos in multiple formats on the same path, I just labeled the path here. 16 | ocean: 17 | overlay: true 18 | path: /images/ocean/ 19 | brand: /images/hexo-inverted.svg 20 | 21 | # Content 22 | excerpt_link: Read More... 23 | 24 | # MIIT ICP/IP/DOMAIN 25 | beian: 26 | enable: false 27 | number: 28 | url: https://beian.miit.gov.cn/ 29 | 30 | # Tags 31 | show_count: false 32 | 33 | # Toc 34 | toc: true 35 | 36 | # fancybox 37 | fancybox: true 38 | 39 | # 是否显示复制按钮 40 | show_copy_btn: true 41 | 42 | # Gitalk 43 | gitalk: 44 | enable: false # true 45 | clientID: # GitHub Application Client ID 46 | clientSecret: # Client Secret 47 | repo: # Repository name 48 | owner: # GitHub ID 49 | admin: # GitHub ID 50 | 51 | # Valine 52 | valine: 53 | enable: false # true 54 | el: 'vcomments' 55 | appId: 56 | appKey: 57 | notify: false 58 | verify: true 59 | avatar: 'mp' 60 | pageSize: '10' 61 | placeholder: '请输入...' -------------------------------------------------------------------------------- /languages/de.yml: -------------------------------------------------------------------------------- 1 | categories: Kategorien 2 | search: Suche 3 | tags: Tags 4 | tagcloud: Tag Cloud 5 | tweets: Tweets 6 | prev: zurück 7 | next: weiter 8 | comment: Kommentare 9 | archive_a: Archiv 10 | archive_b: "Archive: %s" 11 | page: Seite %d 12 | recent_posts: letzter Beitrag 13 | newer: Neuer 14 | older: Älter 15 | share: Teilen 16 | powered_by: Powered by 17 | rss_feed: RSS Feed 18 | category: Kategorie 19 | tag: Tag 20 | -------------------------------------------------------------------------------- /languages/default.yml: -------------------------------------------------------------------------------- 1 | categories: Categories 2 | search: Search 3 | tags: Tags 4 | tagcloud: Tag Cloud 5 | tweets: Tweets 6 | prev: Prev 7 | next: Next 8 | comment: Comments 9 | archive_a: Archives 10 | archive_b: "Archives: %s" 11 | page: Page %d 12 | recent_posts: Recent Posts 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | powered_by: Powered by 17 | rss_feed: RSS Feed 18 | category: Category 19 | tag: Tag -------------------------------------------------------------------------------- /languages/es.yml: -------------------------------------------------------------------------------- 1 | categories: Categorías 2 | search: Buscar 3 | tags: Tags 4 | tagcloud: Nube de Tags 5 | tweets: Tweets 6 | prev: Previo 7 | next: Siguiente 8 | comment: Comentarios 9 | archive_a: Archivos 10 | archive_b: "Archivos: %s" 11 | page: Página %d 12 | recent_posts: Posts recientes 13 | newer: Nuevo 14 | older: Viejo 15 | share: Compartir 16 | powered_by: Construido por 17 | rss_feed: RSS 18 | category: Categoría 19 | tag: Tag -------------------------------------------------------------------------------- /languages/fr.yml: -------------------------------------------------------------------------------- 1 | categories: Catégories 2 | search: Rechercher 3 | tags: Mot-clés 4 | tagcloud: Nuage de mot-clés 5 | tweets: Tweets 6 | prev: Précédent 7 | next: Suivant 8 | comment: Commentaires 9 | archive_a: Archives 10 | archive_b: "Archives: %s" 11 | page: Page %d 12 | recent_posts: Articles récents 13 | newer: Récent 14 | older: Ancien 15 | share: Partager 16 | powered_by: Propulsé par 17 | rss_feed: Flux RSS 18 | category: Catégorie 19 | tag: Mot-clé 20 | -------------------------------------------------------------------------------- /languages/ja.yml: -------------------------------------------------------------------------------- 1 | categories: カテゴリ 2 | search: 検索 3 | tags: タグ 4 | tagcloud: タグクラウド 5 | tweets: ツイート 6 | prev: 戻る 7 | next: 次へ 8 | comment: コメント 9 | archive_a: アーカイブ 10 | archive_b: "アーカイブ: %s" 11 | page: ページ %d 12 | recent_posts: 最近の投稿 13 | newer: 次の記事 14 | older: 前の記事 15 | share: 共有 16 | powered_by: Powered by 17 | rss_feed: RSSフィード 18 | category: カテゴリ 19 | tag: タグ 20 | -------------------------------------------------------------------------------- /languages/ko.yml: -------------------------------------------------------------------------------- 1 | categories: 카테고리 2 | search: 검색 3 | tags: 태그 4 | tagcloud: 태그 클라우드 5 | tweets: 트윗 6 | prev: 이전 7 | next: 다음 8 | comment: 댓글 9 | archive_a: 아카이브 10 | archive_b: "아카이브: %s" 11 | page: 페이지 %d 12 | recent_posts: 최근 포스트 13 | newer: 최신 14 | older: 이전 15 | share: 공유 16 | powered_by: Powered by 17 | rss_feed: RSS Feed 18 | category: 카테고리 19 | tag: 태그 20 | -------------------------------------------------------------------------------- /languages/nl.yml: -------------------------------------------------------------------------------- 1 | 2 | categories: Categorieën 3 | search: Zoeken 4 | tags: Labels 5 | tagcloud: Tag Cloud 6 | tweets: Tweets 7 | prev: Vorige 8 | next: Volgende 9 | comment: Commentaren 10 | archive_a: Archieven 11 | archive_b: "Archieven: %s" 12 | page: Pagina %d 13 | recent_posts: Recente berichten 14 | newer: Nieuwer 15 | older: Ouder 16 | share: Delen 17 | powered_by: Powered by 18 | rss_feed: RSS Feed 19 | category: Categorie 20 | tag: Label 21 | -------------------------------------------------------------------------------- /languages/no.yml: -------------------------------------------------------------------------------- 1 | categories: Kategorier 2 | search: Søk 3 | tags: Tags 4 | tagcloud: Tag Cloud 5 | tweets: Tweets 6 | prev: Forrige 7 | next: Neste 8 | comment: Kommentarer 9 | archive_a: Arkiv 10 | archive_b: "Arkiv: %s" 11 | page: Side %d 12 | recent_posts: Siste innlegg 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | powered_by: Powered by 17 | rss_feed: RSS Feed 18 | category: Category 19 | tag: Tag -------------------------------------------------------------------------------- /languages/pt.yml: -------------------------------------------------------------------------------- 1 | categories: Categorias 2 | search: Buscar 3 | tags: Tags 4 | tagcloud: Nuvem de Tags 5 | tweets: Tweets 6 | prev: Anterior 7 | next: Próximo 8 | comment: Comentários 9 | archive_a: Arquivos 10 | archive_b: "Arquivos: %s" 11 | page: Página %d 12 | recent_posts: Postagens Recentes 13 | newer: Mais Recente 14 | older: Mais Antigo 15 | share: Compartilhar 16 | powered_by: Desenvolvido por 17 | rss_feed: Feed RSS 18 | category: Categoria 19 | tag: Tag 20 | -------------------------------------------------------------------------------- /languages/ru.yml: -------------------------------------------------------------------------------- 1 | categories: Категории 2 | search: Поиск 3 | tags: Метки 4 | tagcloud: Облако меток 5 | tweets: Твиты 6 | prev: Назад 7 | next: Вперед 8 | comment: Комментарии 9 | archive_a: Архив 10 | archive_b: "Архив: %s" 11 | page: Страница %d 12 | recent_posts: Недавние записи 13 | newer: Следующий 14 | older: Предыдущий 15 | share: Поделиться 16 | powered_by: Создано с помощью 17 | rss_feed: RSS-каналы 18 | category: Категория 19 | tag: Метка -------------------------------------------------------------------------------- /languages/zh-CN.yml: -------------------------------------------------------------------------------- 1 | categories: 类别 2 | search: 搜索 3 | tags: 标签 4 | tagcloud: 标签云 5 | category: 分类 6 | tweets: 推文 7 | prev: 上一页 8 | next: 下一页 9 | comment: 留言 10 | archive_a: 归档 11 | archive_b: 归档:%s 12 | page: 第 %d 页 13 | recent_posts: 最新文章 14 | newer: 前一篇 15 | older: 后一篇 16 | share: 分享 17 | powered_by: Powered by 18 | rss_feed: RSS Feed 19 | tag: Tag 20 | theme: Theme -------------------------------------------------------------------------------- /languages/zh-TW.yml: -------------------------------------------------------------------------------- 1 | categories: 分類 2 | search: 搜尋 3 | tags: 標籤 4 | tagcloud: 標籤雲 5 | tweets: 推文 6 | prev: 上一頁 7 | next: 下一頁 8 | comment: 留言 9 | archive_a: 彙整 10 | archive_b: 彙整:%s 11 | page: 第 %d 頁 12 | recent_posts: 最新文章 13 | newer: Newer 14 | older: Older 15 | share: Share 16 | powered_by: Powered by 17 | rss_feed: RSS Feed 18 | category: Category 19 | tag: Tag -------------------------------------------------------------------------------- /layout/_partial/after-footer.ejs: -------------------------------------------------------------------------------- 1 | <%- js('/js/jquery-2.0.3.min') %> 2 | <%- js('/js/jquery.justifiedGallery.min') %> 3 | <%- js('/js/lazyload.min') %> 4 | <%- js('/js/busuanzi-2.3.pure.min') %> 5 | <% if (theme.fancybox){ %> 6 | <%- js('fancybox/jquery.fancybox.min') %> 7 | <% } %> 8 | 9 | <% if (theme.toc && is_post()){ %> 10 | <%- js('/js/tocbot.min') %> 11 | 12 | 25 | <% } %> 26 | 27 | <%- js('js/ocean') %> -------------------------------------------------------------------------------- /layout/_partial/archive-post.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 | <% if(post.photos.length){ %> 4 |
5 | <% post.photos.forEach(function(photo, i){ %> 6 | 7 | 8 | 9 | <% }) %> 10 |
11 | <% } %> 12 |
13 |
14 | <%- partial('post/title', {class_name: 'archive-article-title'}) %> 15 | <%- partial('post/date', {class_name: 'archive-article-date', date_format: 'MM/DD'}) %> 16 |
17 | <% if(post.photos.length === 0){ %> 18 | <%- post.excerpt %> 19 | <% } %> 20 | <% if(page.category){ %> 21 | <%- partial('post/category') %> 22 | <% } %> 23 | <% if(page.tag){ %> 24 | <%- partial('post/tag') %> 25 | <% } %> 26 |
27 | 28 |
-------------------------------------------------------------------------------- /layout/_partial/archive.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% 4 | var title = ''; 5 | if (page.category) title = page.category; 6 | if (page.tag) title = "#" + " " + page.tag; 7 | if (page.archive) { 8 | if (page.year) title = page.year + (page.month ? '/' + page.month : ''); 9 | else title = __('archive_a'); 10 | } 11 | %> 12 |

<%- title %>

13 | <% if (pagination == 2){ %> 14 | <% page.posts.each(function(post){ %> 15 | <%- partial('article', {post: post, index: true}) %> 16 | <% }) %> 17 |
18 | <% } else { %> 19 | <% var last; %> 20 | <% page.posts.each(function(post, i){ %> 21 | <% var year = post.date.year(); %> 22 | <% if (last != year){ %> 23 | <% if (last != null){ %> 24 | 25 | 26 | <% } %> 27 | <% last = year; %> 28 |
29 |
30 | <%= year %> 31 |
32 |
33 | <% } %> 34 | <%- partial('archive-post', {post: post, even: i % 2 == 0}) %> 35 | <% }) %> 36 | <% if (page.posts.length){ %> 37 |
38 |
39 | <% } %> 40 | <% } %> 41 | 42 | <% if (page.total > 1){ %> 43 | 49 | <% } %> 50 |
-------------------------------------------------------------------------------- /layout/_partial/article.ejs: -------------------------------------------------------------------------------- 1 |
3 | 4 |
5 | <% if (post.link || post.title){ %> 6 |
7 | <%- partial('post/title', {class_name: 'article-title'}) %> 8 |
9 | <% } %> 10 | 11 | <% if (index || is_post()) { %> 12 | 16 | <% } %> 17 | 18 | <% if (theme.toc && is_post()){ %> 19 | <%- partial('post/tocbot') %> 20 | <% } %> 21 | 22 |
23 | <%- partial('post/justifiedGallery') %> 24 | <% if (index){ %> 25 | <%- partial('post/gallery') %> 26 | <% } %> 27 | <% if (post.excerpt && index){ %> 28 | <%- post.excerpt %> 29 | <% if (theme.excerpt_link){ %> 30 |

31 | 32 | <%= theme.excerpt_link %> 33 | 34 |

35 | <% } %> 36 | <% } else { %> 37 | <%- post.content %> 38 | <% } %> 39 |
40 | 46 | 47 |
48 | 49 | <% if (!index){ %> 50 | <%- partial('post/nav') %> 51 | <% } %> 52 | 53 | <% if (is_post()) { %> 54 | <%- partial('post/valine') %> 55 | <%- partial('post/gitalk') %> 56 | <%} %> 57 | 58 |
-------------------------------------------------------------------------------- /layout/_partial/footer.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/_partial/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | <% 8 | var title = page.title; 9 | if (is_archive()) { 10 | title = __('archive_a'); 11 | if (is_month()) { 12 | title += ': ' + page.year + '/' + page.month; 13 | } else if (is_year()) { 14 | title += ': ' + page.year; 15 | } 16 | } else if (is_category()) { 17 | title = __('categories') + ': ' + page.category; 18 | } else if (is_tag()) { 19 | title = __('tag') + ': ' + page.tag; 20 | } 21 | %> 22 | <% if (page.keywords){ %> 23 | 24 | <% } else if (config.keywords){ %> 25 | 26 | <% } %> 27 | <% if (page.description){ %> 28 | 29 | <% } else if (config.description){ %> 30 | 31 | <% } %> 32 | 33 | <% if (title){ %><%= title %> | 34 | <% } %> 35 | <%= config.title %> 36 | 37 | 38 | <% if (theme.favicon){ %> 39 | 40 | <% } %> 41 | <%- css('css/style') %> 42 | <% if (theme.fancybox){ %> 43 | <%- css('fancybox/jquery.fancybox.min') %> 44 | <% } %> 45 | <%- js('/js/pace.min.js') %> 46 | -------------------------------------------------------------------------------- /layout/_partial/ocean.ejs: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% if (theme.ocean.overlay) { %> 4 |
5 | Decorative image frame 6 |
7 | <% } %> 8 |
9 | 16 |
17 |
18 |
19 |

<%= config.title %>

20 |

<%= config.subtitle %>

21 |
<%= config.title %>
22 |
23 |
24 | 25 |
26 |
27 |
-------------------------------------------------------------------------------- /layout/_partial/post/albums.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.albums && post.albums.length){ %> 2 |
3 | 18 |
19 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/busuanzi.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/_partial/post/category.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.categories && post.categories.length){ %> 2 |
3 | <%- list_categories(post.categories, { 4 | show_count: false, 5 | class: 'article-category', 6 | style: 'none', 7 | separator: ' / ' 8 | }) %> 9 |
10 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/date.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /layout/_partial/post/gallery.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.photos && post.photos.length){ %> 2 |
3 |
4 | <% post.photos.forEach(function(photo, i){ %> 5 | <% if (index){ %> 6 | 7 | 8 | 9 | <% } else { %> 10 | 11 | <% } %> 12 | <% }) %> 13 |
14 |
15 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/gitalk.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.gitalk.enable) { %> 2 |
3 | <%- css('https://unpkg.com/gitalk/dist/gitalk.css') %> 4 | <%- js('https://unpkg.com/gitalk/dist/gitalk.min.js') %> 5 | <%- js('https://cdn.bootcss.com/blueimp-md5/2.10.0/js/md5.min.js') %> 6 | 21 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/justifiedGallery.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.albums && post.albums.length){ %> 2 | 12 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/nav.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.prev || post.next){ %> 2 | 22 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/search.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /layout/_partial/post/tag.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.tags && post.tags.length){ %> 2 | <%- list_tags(post.tags, { 3 | show_count: false, 4 | class: 'article-tag' 5 | }) %> 6 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/title.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.link){ %> 2 |

3 | 4 |

5 | <% } else if (post.title){ %> 6 | <% if (index){ %> 7 |

8 | <%= post.title %> 9 |

10 | <% } else { %> 11 |

12 | <%= post.title %> 13 |

14 | <% } %> 15 | <%- partial('topping') %> 16 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/tocbot.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.toc != false && toc(page.content).length!==0){ %> 2 |
3 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/topping.ejs: -------------------------------------------------------------------------------- 1 | <% if (is_home() && post.top) { %> 2 |
3 | 4 |
5 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/post/valine.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.valine.enable) { %> 2 |
3 | <%- js('https://unpkg.com/valine/dist/Valine.min.js') %> 4 | 16 | <% } %> -------------------------------------------------------------------------------- /layout/_partial/sidebar.ejs: -------------------------------------------------------------------------------- 1 | 2 | 22 | 36 |
37 | <%- partial('post/search') %> 38 |
-------------------------------------------------------------------------------- /layout/_partial/totop.ejs: -------------------------------------------------------------------------------- 1 |
2 | 3 |
-------------------------------------------------------------------------------- /layout/archive.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.archive, index: true}) %> -------------------------------------------------------------------------------- /layout/categories.ejs: -------------------------------------------------------------------------------- 1 |
2 | <% if (site.categories.length){ %> 3 |

<%= __('categories') %>

4 | <%- list_categories({show_count: theme.show_count}) %> 5 | <% } %> 6 |
-------------------------------------------------------------------------------- /layout/index.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/ocean', null, {cache: !config.relative_link}) %> 2 |
3 | <%- partial('_partial/archive', {pagination: 2, index: true}) %> 4 |
-------------------------------------------------------------------------------- /layout/layout.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/head') %> 2 | 3 | 4 |
5 | <%- body %> 6 | <%- partial('_partial/footer') %> 7 |
8 | 11 | <%- partial('_partial/after-footer') %> 12 | 13 | 14 | -------------------------------------------------------------------------------- /layout/page.ejs: -------------------------------------------------------------------------------- 1 |
2 | <%- partial('_partial/article', {post: page, index: false}) %> 3 |
-------------------------------------------------------------------------------- /layout/post.ejs: -------------------------------------------------------------------------------- 1 |
2 | <%- partial('_partial/article', {post: page, index: false}) %> 3 |
-------------------------------------------------------------------------------- /layout/tags.ejs: -------------------------------------------------------------------------------- 1 |
2 | <% if (site.tags.length){ %> 3 |

<%= __('tags') %>

4 | <%- list_tags({show_count: theme.show_count}) %> 5 | <% } %> 6 |
-------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "ocean", 3 | "version": "1.0.0", 4 | "description": "Ocean 是基于 Landscape 中的功能设计的一个 Hexo 主题", 5 | "main": "index.js", 6 | "dependencies": {}, 7 | "devDependencies": {}, 8 | "scripts": { 9 | "test": "echo \"Error: no test specified\" && exit 1" 10 | }, 11 | "repository": { 12 | "type": "git", 13 | "url": "git+https://github.com/zhwangart/hexo-theme-ocean.git" 14 | }, 15 | "keywords": [ 16 | "ocean", 17 | "light" 18 | ], 19 | "author": "zhwangart", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/zhwangart/hexo-theme-ocean/issues" 23 | }, 24 | "homepage": "https://github.com/zhwangart/hexo-theme-ocean#readme" 25 | } 26 | -------------------------------------------------------------------------------- /screenshots/hexo-theme-ocean.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/screenshots/hexo-theme-ocean.jpg -------------------------------------------------------------------------------- /source/404.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 404 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 |
16 |
17 |

404
Not Found!

18 |

Life was like a box of chocolates, you never know what you're going to get.

19 |
20 | 21 |
22 |
23 | 24 | -------------------------------------------------------------------------------- /source/css/404.styl: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | // 3 | // 404 4 | html, body, div, figure, img 5 | margin 0 6 | padding 0 7 | 8 | body 9 | font-family "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif; 10 | 11 | .notfound 12 | position absolute 13 | top 50% 14 | left 50% 15 | transform translate(-50%, -50%) 16 | 17 | figure.forrestgump 18 | position relative 19 | width 100% 20 | img 21 | width 100% 22 | figcaption 23 | float right 24 | clear right 25 | width 100% 26 | padding 0 27 | text-align right 28 | 29 | @media (min-width: 768.02px) 30 | figure.forrestgump 31 | width 30rem 32 | figcaption 33 | width 60% 34 | padding 0 2rem 35 | 36 | .notfound-link 37 | position absolute 38 | z-index 9 39 | margin-top 2rem 40 | -------------------------------------------------------------------------------- /source/css/_extend.styl: -------------------------------------------------------------------------------- 1 | $block-caption 2 | text-decoration none 3 | color sea-lighter 4 | &:hover 5 | color sea-lighter 6 | 7 | $block 8 | border-radius 4px 9 | 10 | $base-style 11 | h1, h2, h3, h4, h5, h6 12 | margin 1.5rem 0 13 | hr 14 | height border-width 15 | background-color border-color 16 | border none 17 | padding 0 18 | margin 1.5rem 0 19 | strong 20 | font-weight bold 21 | em, cite 22 | font-style italic 23 | sup, sub 24 | font-size 75% 25 | line-height 0 26 | position relative 27 | vertical-align baseline 28 | sup 29 | top -.5rem 30 | sub 31 | bottom -.25rem 32 | small 33 | font-size 85% 34 | mark 35 | background-color rgba(yellow, .25) 36 | acronym, abbr 37 | border-bottom border-width border-color dotted 38 | ul, ol, dl 39 | margin 1.5rem 0 40 | line-height line-height 41 | 42 | ul, ol 43 | padding-left 2em 44 | 45 | ul 46 | list-style-type circle 47 | 48 | p, table, blockquote 49 | margin 1.5rem 0 50 | 51 | img, video 52 | max-width 100% 53 | height auto 54 | display block 55 | margin auto 56 | iframe 57 | border none 58 | table 59 | width 100% 60 | border-collapse collapse 61 | vertical-align middle 62 | empty-cells show 63 | text-align left 64 | th, td, & 65 | border border-width border-color solid 66 | th, td 67 | padding 1rem 1.5rem 68 | tbody 69 | tr:nth-child(2n) 70 | background-color rgba(froth, .25) 71 | 72 | blockquote 73 | position relative 74 | display block 75 | padding 0 1.5rem 0 3.5rem 76 | width 100% 77 | overflow auto 78 | color sea-lighter 79 | background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMCAySDQuMWMtLjQgMC0uNy4zLS43LjdMMiAyMS4yYzAgLjQuMy44LjguOGgxLjZjLjMgMCAuNi0uMi43LS41TDEwLjcgM2MuMS0uNS0uMi0xLS43LTF6TTIxLjIgMmgtNS44Yy0uNCAwLS43LjMtLjguN2wtMS40IDE4LjVjMCAuNC4zLjguOC44aDEuNmMuMyAwIC42LS4yLjctLjVMMjIgM2MuMS0uNS0uMi0xLS44LTF6IiBmaWxsPSIjQURCNUJEIi8+PC9zdmc+") 80 | background-size: 3rem 81 | background-repeat: no-repeat 82 | background-position: 0 0 83 | // &:before 84 | // content url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQgMjQiIHhtbDpzcGFjZT0icHJlc2VydmUiPjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMCAySDQuMWMtLjQgMC0uNy4zLS43LjdMMiAyMS4yYzAgLjQuMy44LjguOGgxLjZjLjMgMCAuNi0uMi43LS41TDEwLjcgM2MuMS0uNS0uMi0xLS43LTF6TTIxLjIgMmgtNS44Yy0uNCAwLS43LjMtLjguN2wtMS40IDE4LjVjMCAuNC4zLjguOC44aDEuNmMuMyAwIC42LS4yLjctLjVMMjIgM2MuMS0uNS0uMi0xLS44LTF6IiBmaWxsPSIjQURCNUJEIi8+PC9zdmc+") 85 | // display block 86 | // width 3rem 87 | // position absolute 88 | // left 0 89 | // top 0 90 | > :first-child 91 | margin-top 0; 92 | > :last-child 93 | margin-bottom 0; 94 | footer 95 | cite 96 | &:before 97 | content "—" 98 | padding 0 .5rem 99 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /source/css/_feathericon.styl: -------------------------------------------------------------------------------- 1 | @charset "utf-8" 2 | 3 | //--------------------------------------------------------------------------- 4 | // feathericon 5 | //--------------------------------------------------------------------------- 6 | 7 | // 8 | // variables 9 | feathericon-font-path = 'feathericon/' !default; 10 | 11 | // 12 | // font path 13 | @font-face 14 | font-family feathericon 15 | font-weight normal 16 | font-style normal 17 | src url(feathericon-font-path + 'feathericon.eot') 18 | src url(feathericon-font-path + 'feathericon.eot?#iefix') format('embedded-opentype'), 19 | url(feathericon-font-path + 'feathericon.woff') format('woff'), 20 | url(feathericon-font-path + 'feathericon.ttf') format('truetype'), 21 | url(feathericon-font-path + 'feathericon.svg') format('svg'); 22 | 23 | 24 | // 25 | // feathericon 26 | // 27 | .fe 28 | display inline-block 29 | font normal normal normal 16px feathericon 30 | font-size inherit 31 | text-rendering auto 32 | -webkit-font-smoothing antialiased 33 | -moz-osx-font-smoothing grayscale 34 | 35 | // 36 | // all icons 37 | // 38 | .fe-activity:before { content: "\f1e2"; } 39 | .fe-add-cart:before { content: "\f1e6"; } 40 | .fe-align-bottom:before { content: "\f1bf"; } 41 | .fe-align-center:before { content: "\f195"; } 42 | .fe-align-left:before { content: "\f196"; } 43 | .fe-align-right:before { content: "\f197"; } 44 | .fe-align-top:before { content: "\f1c0"; } 45 | .fe-align-vertically:before { content: "\f1c1"; } 46 | .fe-angry:before { content: "\f1b6"; } 47 | .fe-app-menu:before { content: "\f198"; } 48 | .fe-arrow-down:before { content: "\f100"; } 49 | .fe-arrow-left:before { content: "\f101"; } 50 | .fe-arrow-right:before { content: "\f102"; } 51 | .fe-arrow-up:before { content: "\f103"; } 52 | .fe-artboard:before { content: "\f104"; } 53 | .fe-audio-player:before { content: "\f199"; } 54 | .fe-backward:before { content: "\f180"; } 55 | .fe-bar:before { content: "\f105"; } 56 | .fe-bar-chart:before { content: "\f106"; } 57 | .fe-beer:before { content: "\f107"; } 58 | .fe-bell:before { content: "\f108"; } 59 | .fe-birthday-cake:before { content: "\f163"; } 60 | .fe-bold:before { content: "\f179"; } 61 | .fe-bolt:before { content: "\f1e3"; } 62 | .fe-book:before { content: "\f109"; } 63 | .fe-bookmark:before { content: "\f170"; } 64 | .fe-browser:before { content: "\f10b"; } 65 | .fe-brush:before { content: "\f10c"; } 66 | .fe-bug:before { content: "\f10d"; } 67 | .fe-building:before { content: "\f10e"; } 68 | .fe-cage:before { content: "\f1e7"; } 69 | .fe-calendar:before { content: "\f10f"; } 70 | .fe-camera:before { content: "\f110"; } 71 | .fe-cart:before { content: "\f1e8"; } 72 | .fe-check:before { content: "\f111"; } 73 | .fe-check-circle:before { content: "\f19a"; } 74 | .fe-check-circle-o:before { content: "\f19b"; } 75 | .fe-check-verified:before { content: "\f19c"; } 76 | .fe-clock:before { content: "\f113"; } 77 | .fe-close:before { content: "\f114"; } 78 | .fe-cloud:before { content: "\f115"; } 79 | .fe-cocktail:before { content: "\f116"; } 80 | .fe-code:before { content: "\f117"; } 81 | .fe-codepen:before { content: "\f1d3"; } 82 | .fe-coffee:before { content: "\f166"; } 83 | .fe-columns:before { content: "\f118"; } 84 | .fe-comment:before { content: "\f119"; } 85 | .fe-comment-o:before { content: "\f1d2"; } 86 | .fe-commenting:before { content: "\f11a"; } 87 | .fe-comments:before { content: "\f11b"; } 88 | .fe-compress:before { content: "\f181"; } 89 | .fe-credit-card:before { content: "\f1e9"; } 90 | .fe-crop:before { content: "\f1c2"; } 91 | .fe-cry:before { content: "\f1b7"; } 92 | .fe-cutlery:before { content: "\f19d"; } 93 | .fe-delete-link:before { content: "\f19e"; } 94 | .fe-desktop:before { content: "\f11d"; } 95 | .fe-diamond:before { content: "\f11e"; } 96 | .fe-difference:before { content: "\f1c3"; } 97 | .fe-disabled:before { content: "\f11f"; } 98 | .fe-disappointed:before { content: "\f1b8"; } 99 | .fe-distribute-horizontally:before { content: "\f1cf"; } 100 | .fe-distribute-vertically:before { content: "\f1c5"; } 101 | .fe-document:before { content: "\f19f"; } 102 | .fe-download:before { content: "\f120"; } 103 | .fe-drop-down:before { content: "\f121"; } 104 | .fe-drop-left:before { content: "\f122"; } 105 | .fe-drop-right:before { content: "\f123"; } 106 | .fe-drop-up:before { content: "\f124"; } 107 | .fe-edit:before { content: "\f17f"; } 108 | .fe-eject:before { content: "\f182"; } 109 | .fe-elipsis-h:before { content: "\f125"; } 110 | .fe-elipsis-v:before { content: "\f126"; } 111 | .fe-equalizer:before { content: "\f1a0"; } 112 | .fe-eraser:before { content: "\f1c6"; } 113 | .fe-expand:before { content: "\f183"; } 114 | .fe-export:before { content: "\f16e"; } 115 | .fe-eye:before { content: "\f127"; } 116 | .fe-facebook:before { content: "\f1d4"; } 117 | .fe-fast-backward:before { content: "\f184"; } 118 | .fe-fast-forward:before { content: "\f185"; } 119 | .fe-feather:before { content: "\f174"; } 120 | .fe-feed:before { content: "\f128"; } 121 | .fe-file:before { content: "\f1b1"; } 122 | .fe-file-audio:before { content: "\f1b2"; } 123 | .fe-file-excel:before { content: "\f1a2"; } 124 | .fe-file-image:before { content: "\f1b3"; } 125 | .fe-file-movie:before { content: "\f1b4"; } 126 | .fe-file-powerpoint:before { content: "\f1a3"; } 127 | .fe-file-word:before { content: "\f1a4"; } 128 | .fe-file-zip:before { content: "\f1b5"; } 129 | .fe-filter:before { content: "\f173"; } 130 | .fe-flag:before { content: "\f129"; } 131 | .fe-folder:before { content: "\f12a"; } 132 | .fe-folder-open:before { content: "\f176"; } 133 | .fe-fork:before { content: "\f12b"; } 134 | .fe-forward:before { content: "\f186"; } 135 | .fe-frowing:before { content: "\f1b9"; } 136 | .fe-gamepad:before { content: "\f191"; } 137 | .fe-gear:before { content: "\f1a5"; } 138 | .fe-gift:before { content: "\f1ea"; } 139 | .fe-git:before { content: "\f1d5"; } 140 | .fe-github:before { content: "\f1d6"; } 141 | .fe-github-alt:before { content: "\f1d7"; } 142 | .fe-globe:before { content: "\f12c"; } 143 | .fe-google:before { content: "\f1d8"; } 144 | .fe-google-plus:before { content: "\f1d9"; } 145 | .fe-hash:before { content: "\f12d"; } 146 | .fe-headphone:before { content: "\f18e"; } 147 | .fe-heart:before { content: "\f12e"; } 148 | .fe-heart-o:before { content: "\f167"; } 149 | .fe-home:before { content: "\f12f"; } 150 | .fe-import:before { content: "\f16f"; } 151 | .fe-info:before { content: "\f130"; } 152 | .fe-insert-link:before { content: "\f1a6"; } 153 | .fe-instagram:before { content: "\f1da"; } 154 | .fe-intersect:before { content: "\f1c7"; } 155 | .fe-italic:before { content: "\f17a"; } 156 | .fe-key:before { content: "\f131"; } 157 | .fe-keyboard:before { content: "\f132"; } 158 | .fe-kitchen-cooker:before { content: "\f1a7"; } 159 | .fe-laptop:before { content: "\f133"; } 160 | .fe-layer:before { content: "\f18c"; } 161 | .fe-layout:before { content: "\f134"; } 162 | .fe-line-chart:before { content: "\f135"; } 163 | .fe-link:before { content: "\f136"; } 164 | .fe-link-external:before { content: "\f137"; } 165 | .fe-list-bullet:before { content: "\f17c"; } 166 | .fe-list-order:before { content: "\f17d"; } 167 | .fe-list-task:before { content: "\f17e"; } 168 | .fe-location:before { content: "\f138"; } 169 | .fe-lock:before { content: "\f139"; } 170 | .fe-login:before { content: "\f13a"; } 171 | .fe-logout:before { content: "\f13b"; } 172 | .fe-loop:before { content: "\f192"; } 173 | .fe-magic:before { content: "\f177"; } 174 | .fe-mail:before { content: "\f13c"; } 175 | .fe-map:before { content: "\f16d"; } 176 | .fe-mask:before { content: "\f1c8"; } 177 | .fe-medal:before { content: "\f13d"; } 178 | .fe-megaphone:before { content: "\f13e"; } 179 | .fe-mention:before { content: "\f164"; } 180 | .fe-messanger:before { content: "\f1e1"; } 181 | .fe-minus:before { content: "\f140"; } 182 | .fe-mobile:before { content: "\f141"; } 183 | .fe-money:before { content: "\f1a8"; } 184 | .fe-moon:before { content: "\f1ef"; } 185 | .fe-mouse:before { content: "\f142"; } 186 | .fe-music:before { content: "\f175"; } 187 | .fe-open-mouth:before { content: "\f1ba"; } 188 | .fe-palette:before { content: "\f165"; } 189 | .fe-paper-plane:before { content: "\f178"; } 190 | .fe-pause:before { content: "\f187"; } 191 | .fe-pencil:before { content: "\f144"; } 192 | .fe-phone:before { content: "\f145"; } 193 | .fe-picture:before { content: "\f1a9"; } 194 | .fe-picture-square:before { content: "\f1e4"; } 195 | .fe-pie-chart:before { content: "\f146"; } 196 | .fe-pinterest:before { content: "\f1db"; } 197 | .fe-pizza:before { content: "\f147"; } 198 | .fe-play:before { content: "\f188"; } 199 | .fe-plug:before { content: "\f18f"; } 200 | .fe-plus:before { content: "\f148"; } 201 | .fe-pocket:before { content: "\f1dc"; } 202 | .fe-pot:before { content: "\f1aa"; } 203 | .fe-print:before { content: "\f171"; } 204 | .fe-prototype:before { content: "\f149"; } 205 | .fe-question:before { content: "\f14a"; } 206 | .fe-quote-left:before { content: "\f14b"; } 207 | .fe-quote-right:before { content: "\f14c"; } 208 | .fe-rage:before { content: "\f1bb"; } 209 | .fe-random:before { content: "\f189"; } 210 | .fe-reload:before { content: "\f193"; } 211 | .fe-remove-cart:before { content: "\f1eb"; } 212 | .fe-rocket:before { content: "\f14d"; } 213 | .fe-scale:before { content: "\f1c9"; } 214 | .fe-search:before { content: "\f14e"; } 215 | .fe-search-minus:before { content: "\f16a"; } 216 | .fe-search-plus:before { content: "\f16b"; } 217 | .fe-share:before { content: "\f14f"; } 218 | .fe-shield:before { content: "\f172"; } 219 | .fe-shopping-bag:before { content: "\f1ec"; } 220 | .fe-sitemap:before { content: "\f150"; } 221 | .fe-smile:before { content: "\f1bc"; } 222 | .fe-smile-alt:before { content: "\f1bd"; } 223 | .fe-speaker:before { content: "\f1ab"; } 224 | .fe-star:before { content: "\f151"; } 225 | .fe-star-o:before { content: "\f168"; } 226 | .fe-step-backward:before { content: "\f1d0"; } 227 | .fe-step-forward:before { content: "\f1d1"; } 228 | .fe-stop:before { content: "\f18b"; } 229 | .fe-subtract:before { content: "\f1ca"; } 230 | .fe-sunny-o:before { content: "\f1f0"; } 231 | .fe-sunrise:before { content: "\f1f1"; } 232 | .fe-sync:before { content: "\f194"; } 233 | .fe-table:before { content: "\f1ac"; } 234 | .fe-tablet:before { content: "\f152"; } 235 | .fe-tag:before { content: "\f153"; } 236 | .fe-target:before { content: "\f1f3"; } 237 | .fe-terminal:before { content: "\f154"; } 238 | .fe-text-align-center:before { content: "\f1cb"; } 239 | .fe-text-align-justify:before { content: "\f1e5"; } 240 | .fe-text-align-left:before { content: "\f1cc"; } 241 | .fe-text-align-right:before { content: "\f1cd"; } 242 | .fe-text-size:before { content: "\f17b"; } 243 | .fe-ticket:before { content: "\f155"; } 244 | .fe-tiled:before { content: "\f156"; } 245 | .fe-timeline:before { content: "\f1ad"; } 246 | .fe-tired:before { content: "\f1be"; } 247 | .fe-trash:before { content: "\f157"; } 248 | .fe-trophy:before { content: "\f158"; } 249 | .fe-truck:before { content: "\f1ed"; } 250 | .fe-twitter:before { content: "\f1dd"; } 251 | .fe-umbrella:before { content: "\f1f2"; } 252 | .fe-underline:before { content: "\f1ae"; } 253 | .fe-union:before { content: "\f1ce"; } 254 | .fe-unlock:before { content: "\f169"; } 255 | .fe-upload:before { content: "\f159"; } 256 | .fe-usb:before { content: "\f190"; } 257 | .fe-user:before { content: "\f15a"; } 258 | .fe-user-minus:before { content: "\f16c"; } 259 | .fe-user-plus:before { content: "\f15b"; } 260 | .fe-users:before { content: "\f15c"; } 261 | .fe-vector:before { content: "\f15d"; } 262 | .fe-video:before { content: "\f15e"; } 263 | .fe-wallet:before { content: "\f1ee"; } 264 | .fe-warning:before { content: "\f15f"; } 265 | .fe-watch:before { content: "\f1af"; } 266 | .fe-watch-alt:before { content: "\f1b0"; } 267 | .fe-wine-glass:before { content: "\f161"; } 268 | .fe-wordpress:before { content: "\f1de"; } 269 | .fe-wordpress-alt:before { content: "\f1df"; } 270 | .fe-wrench:before { content: "\f162"; } 271 | .fe-youtube:before { content: "\f1e0"; } 272 | -------------------------------------------------------------------------------- /source/css/_fonts.styl: -------------------------------------------------------------------------------- 1 | 2 | @font-face 3 | font-family Raleway_Medium 4 | src url('../fonts/raleway_medium/Raleway-Medium.eot') 5 | src url('../fonts/raleway_medium/Raleway-Medium.eot?#iefix') format('embedded-opentype'), 6 | url('../fonts/raleway_medium/Raleway-Medium.woff') format('woff'), 7 | url('../fonts/raleway_medium/Raleway-Medium.ttf') format('truetype'), 8 | url('../fonts/raleway_medium/Raleway-Medium.svg#iconfont') format('svg') 9 | font-style normal 10 | 11 | .font-raleway-medium 12 | font-family Raleway-Medium -------------------------------------------------------------------------------- /source/css/_mixins.styl: -------------------------------------------------------------------------------- 1 | clearfix() 2 | &::before, &::after 3 | content "" 4 | display table 5 | clear both 6 | 7 | hide-text() 8 | text-indent: 100% 9 | white-space: nowrap 10 | overflow: hidden 11 | 12 | list-unstyled() 13 | list-style none 14 | padding-left 0 15 | margin-left 0 16 | 17 | // Center 18 | center() 19 | top 50% 20 | left 50% 21 | transform translate(-50%, -50%) 22 | 23 | // Horizontal Center 24 | center-x() 25 | left 50% 26 | transform translateX(-50%) 27 | 28 | // Vertical Center 29 | center-y() 30 | top 50% 31 | transform translateY(-50%) 32 | 33 | 34 | border-radius(n) 35 | -webkit-border-radius n 36 | -moz-border-radius n 37 | border-radius n 38 | 39 | border-top-radius(n) 40 | border-top-left-radius n 41 | border-top-right-radius n 42 | 43 | border-right-radius(n) 44 | border-top-right-radius n 45 | border-bottom-right-radius n 46 | 47 | border-bottom-radius(n) 48 | border-bottom-left-radius n 49 | border-bottom-right-radius n 50 | 51 | transition(transition) 52 | transition transition 53 | 54 | sizing(size) 55 | width size 56 | height size 57 | 58 | rounded-circle(size) 59 | sizing(size) 60 | border-radius size / 2 61 | 62 | // Media queries 63 | -------------------------------------------------------------------------------- /source/css/_normalize.styl: -------------------------------------------------------------------------------- 1 | /*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /* Document 4 | ========================================================================== */ 5 | 6 | /** 7 | * 1. Correct the line height in all browsers. 8 | * 2. Prevent adjustments of font size after orientation changes in iOS. 9 | */ 10 | 11 | html 12 | line-height 1.15 /* 1 */ 13 | -webkit-text-size-adjust 100% /* 2 */ 14 | 15 | /* Sections 16 | ========================================================================== */ 17 | 18 | /** 19 | * Remove the margin in all browsers. 20 | */ 21 | 22 | body 23 | margin 0 24 | 25 | /** 26 | * Correct the font size and margin on `h1` elements within `section` and 27 | * `article` contexts in Chrome, Firefox, and Safari. 28 | */ 29 | 30 | h1 31 | font-size 2em 32 | margin 0.67em 0 33 | 34 | /* Grouping content 35 | ========================================================================== */ 36 | 37 | /** 38 | * 1. Add the correct box sizing in Firefox. 39 | * 2. Show the overflow in Edge and IE. 40 | */ 41 | 42 | hr 43 | box-sizing content-box /* 1 */ 44 | height 0 /* 1 */ 45 | overflow visible /* 2 */ 46 | 47 | /** 48 | * 1. Correct the inheritance and scaling of font size in all browsers. 49 | * 2. Correct the odd `em` font sizing in all browsers. 50 | */ 51 | 52 | pre 53 | font-family monospace, monospace /* 1 */ 54 | font-size 1em /* 2 */ 55 | 56 | /* Text-level semantics 57 | ========================================================================== */ 58 | 59 | /** 60 | * Remove the gray background on active links in IE 10. 61 | */ 62 | 63 | a 64 | background-color transparent 65 | 66 | /** 67 | * 1. Remove the bottom border in Chrome 57- 68 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 69 | */ 70 | 71 | abbr[title] 72 | border-bottom none /* 1 */ 73 | text-decoration underline /* 2 */ 74 | text-decoration underline dotted /* 2 */ 75 | 76 | /** 77 | * Add the correct font weight in Chrome, Edge, and Safari. 78 | */ 79 | 80 | b, 81 | strong 82 | font-weight bolder 83 | 84 | /** 85 | * 1. Correct the inheritance and scaling of font size in all browsers. 86 | * 2. Correct the odd `em` font sizing in all browsers. 87 | */ 88 | 89 | code, 90 | kbd, 91 | samp 92 | font-family monospace, monospace /* 1 */ 93 | font-size 1em /* 2 */ 94 | 95 | /** 96 | * Add the correct font size in all browsers. 97 | */ 98 | 99 | small 100 | font-size 80% 101 | 102 | /** 103 | * Prevent `sub` and `sup` elements from affecting the line height in 104 | * all browsers. 105 | */ 106 | 107 | sub, 108 | sup 109 | font-size 75% 110 | line-height 0 111 | position relative 112 | vertical-align baseline 113 | 114 | sub 115 | bottom -0.25em 116 | 117 | sup 118 | top -0.5em 119 | 120 | /* Embedded content 121 | ========================================================================== */ 122 | 123 | /** 124 | * Remove the border on images inside links in IE 10. 125 | */ 126 | 127 | img 128 | border-style none 129 | 130 | /* Forms 131 | ========================================================================== */ 132 | 133 | /** 134 | * 1. Change the font styles in all browsers. 135 | * 2. Remove the margin in Firefox and Safari. 136 | */ 137 | 138 | button, 139 | input, 140 | optgroup, 141 | select, 142 | textarea 143 | font-family inherit /* 1 */ 144 | font-size 100% /* 1 */ 145 | line-height 1.15 /* 1 */ 146 | margin 0 /* 2 */ 147 | 148 | /** 149 | * Show the overflow in IE. 150 | * 1. Show the overflow in Edge. 151 | */ 152 | 153 | button, 154 | input /* 1 */ 155 | overflow visible 156 | 157 | /** 158 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 159 | * 1. Remove the inheritance of text transform in Firefox. 160 | */ 161 | 162 | button, 163 | select /* 1 */ 164 | text-transform none 165 | 166 | /** 167 | * Correct the inability to style clickable types in iOS and Safari. 168 | */ 169 | 170 | button, 171 | [type="button"], 172 | [type="reset"], 173 | [type="submit"] 174 | -webkit-appearance button 175 | 176 | /** 177 | * Remove the inner border and padding in Firefox. 178 | */ 179 | 180 | button::-moz-focus-inner, 181 | [type="button"]::-moz-focus-inner, 182 | [type="reset"]::-moz-focus-inner, 183 | [type="submit"]::-moz-focus-inner 184 | border-style none 185 | padding 0 186 | 187 | /** 188 | * Restore the focus styles unset by the previous rule. 189 | */ 190 | 191 | button:-moz-focusring, 192 | [type="button"]-moz-focusring, 193 | [type="reset"]-moz-focusring, 194 | [type="submit"]-moz-focusring 195 | outline 1px dotted ButtonText 196 | 197 | /** 198 | * Correct the padding in Firefox. 199 | */ 200 | 201 | fieldset 202 | padding 0.35em 0.75em 0.625em 203 | 204 | /** 205 | * 1. Correct the text wrapping in Edge and IE. 206 | * 2. Correct the color inheritance from `fieldset` elements in IE. 207 | * 3. Remove the padding so developers are not caught out when they zero out 208 | * `fieldset` elements in all browsers. 209 | */ 210 | 211 | legend 212 | box-sizing border-box /* 1 */ 213 | color inherit /* 2 */ 214 | display table /* 1 */ 215 | max-width 100% /* 1 */ 216 | padding 0 /* 3 */ 217 | white-space normal /* 1 */ 218 | 219 | /** 220 | * Add the correct vertical alignment in Chrome, Firefox, and Opera. 221 | */ 222 | 223 | progress 224 | vertical-align baseline 225 | 226 | /** 227 | * Remove the default vertical scrollbar in IE 10+. 228 | */ 229 | 230 | textarea 231 | overflow auto 232 | 233 | /** 234 | * 1. Add the correct box sizing in IE 10. 235 | * 2. Remove the padding in IE 10. 236 | */ 237 | 238 | [type="checkbox"], 239 | [type="radio"] 240 | box-sizing border-box /* 1 */ 241 | padding 0 /* 2 */ 242 | 243 | /** 244 | * Correct the cursor style of increment and decrement buttons in Chrome. 245 | */ 246 | 247 | [type="number"]::-webkit-inner-spin-button, 248 | [type="number"]::-webkit-outer-spin-button 249 | height auto 250 | 251 | /** 252 | * 1. Correct the odd appearance in Chrome and Safari. 253 | * 2. Correct the outline style in Safari. 254 | */ 255 | 256 | [type="search"] 257 | -webkit-appearance textfield /* 1 */ 258 | outline-offset -2px /* 2 */ 259 | 260 | /** 261 | * Remove the inner padding in Chrome and Safari on macOS. 262 | */ 263 | 264 | [type="search"]::-webkit-search-decoration 265 | -webkit-appearance none 266 | 267 | /** 268 | * 1. Correct the inability to style clickable types in iOS and Safari. 269 | * 2. Change font properties to `inherit` in Safari. 270 | */ 271 | 272 | ::-webkit-file-upload-button 273 | -webkit-appearance button /* 1 */ 274 | font inherit /* 2 */ 275 | 276 | /* Interactive 277 | ========================================================================== */ 278 | 279 | /* 280 | * Add the correct display in Edge, IE 10+, and Firefox. 281 | */ 282 | 283 | details 284 | display block 285 | 286 | /* 287 | * Add the correct display in all browsers. 288 | */ 289 | 290 | summary 291 | display list-item 292 | 293 | /* Misc 294 | ========================================================================== */ 295 | 296 | /** 297 | * Add the correct display in IE 10+. 298 | */ 299 | 300 | template 301 | display none 302 | 303 | /** 304 | * Add the correct display in IE 10. 305 | */ 306 | 307 | [hidden] 308 | display none -------------------------------------------------------------------------------- /source/css/_partial/albums.styl: -------------------------------------------------------------------------------- 1 | 2 | .article-albums 3 | position relative 4 | 5 | .article-albums-photos 6 | position relative 7 | display flex 8 | flex-wrap wrap 9 | list-unstyled() 10 | clearfix() 11 | &::after 12 | content: '' 13 | flex-grow 999999999 14 | .article-albums-item 15 | position relative 16 | flex-grow 1 17 | margin .5rem 18 | overflow hidden 19 | img 20 | object-fit cover 21 | max-width 100% 22 | min-width 100% 23 | vertical-align: center 24 | .article-albums-caption 25 | display block 26 | width 100% 27 | padding 1rem 0 28 | text-align center 29 | 30 | // Media Query 31 | @media (min-width: 576px) 32 | .article-albums-item 33 | img 34 | height 32rem 35 | .article-albums-caption 36 | position absolute 37 | bottom 0 38 | left 0 39 | width 100% 40 | background-color rgba(black, .5) 41 | background linear-gradient(to top, rgba(black, .5), transparent) 42 | color white 43 | padding 1rem 44 | opacity 0 45 | transform translateY(100%) 46 | transition(transition-base) 47 | &:hover 48 | .article-albums-caption 49 | opacity 1 50 | transform translateY(0) 51 | 52 | @media (min-width: 768px) 53 | .article-albums-item 54 | img 55 | height 20rem 56 | -------------------------------------------------------------------------------- /source/css/_partial/apple.styl: -------------------------------------------------------------------------------- 1 | 2 | // apple product 3 | // 4 | // macbook air 5 | color-macbook = white 6 | color-macbook-darken = darken(color-macbook, 5%) 7 | 8 | // 9 | // browser 10 | color-browser-light = white 11 | color-browser-btns = 12 | close #eb6b60 13 | minimize #f4be4f 14 | maximize #66c655 15 | 16 | scrolling-wrap-height = 30rem 17 | 18 | // 19 | // macbook air 20 | .macbook 21 | position relative 22 | .macbook-screen 23 | position relative 24 | background-color transparent 25 | border-style solid 26 | border-color color-macbook 27 | border-radius 1rem 28 | border-width 1.25rem 29 | box-shadow 0 1rem 3rem rgba(black, .15), 0 0 .5rem rgba(black, .15) inset 30 | 31 | .macbook-keyboard 32 | display none 33 | position relative 34 | box-sizing content-box 35 | background-color color-macbook 36 | border-bottom solid .75rem color-macbook-darken 37 | border-bottom-radius(50%) 38 | margin -.5rem -5rem 0 39 | height .5rem 40 | box-shadow 0 .5rem 3rem rgba(0,0,0,.15) 41 | &::before 42 | content '' 43 | position absolute 44 | center-x() 45 | background linear-gradient(90deg, color-macbook-darken, color-macbook, color-macbook-darken) 46 | box-shadow 0 0 .1rem rgba(0, 0, 0, .05) inset 47 | width 20% 48 | height .3rem 49 | border-radius .125rem 50 | 51 | 52 | // 53 | @media (min-width: 768px) 54 | .macbook 55 | .macbook-screen 56 | border-width 2rem 1.25rem 1.25rem 57 | .macbook-keyboard 58 | display block 59 | 60 | // 61 | // markdown article 62 | .macbook-wrap 63 | padding 1rem 9rem 64 | 65 | // 66 | // markdown article shwo scrolling page 67 | @keyframes scrolling-animation 68 | 0% 69 | top 0 70 | 10% 71 | top 0 72 | transform translateY(0) 73 | 30% 74 | transform translateY(-35%) 75 | 60% 76 | transform translateY(-75%) 77 | 90% 78 | transform translateY(-100%) 79 | 100% 80 | transform translateY(-100%) 81 | 82 | .scrolling-wrap 83 | min-height scrolling-wrap-height 84 | overflow hidden 85 | .scrolling 86 | position absolute 87 | top scrolling-wrap-height 88 | width 100% 89 | animation scrolling-animation 10s ease-in-out 1s infinite 90 | 91 | @import "safari" -------------------------------------------------------------------------------- /source/css/_partial/archive.styl: -------------------------------------------------------------------------------- 1 | .archives-wrap 2 | position relative 3 | 4 | .archive-year-wrap 5 | position relative 6 | padding-top 1rem 7 | &::after 8 | content: '' 9 | position: absolute 10 | bottom 1rem 11 | right 0 12 | left 6rem 13 | height border-width 14 | background-color: disabled-color 15 | .archive-year 16 | display inline-block 17 | text-decoration none 18 | color sea-dark 19 | font-size 1.5em 20 | 21 | .archives 22 | @extend $base-style 23 | 24 | .archive-article 25 | padding 2rem 0 26 | display flex 27 | &:not(:last-child) 28 | border-bottom border-width border-color dashed 29 | 30 | .archive-article-gallery 31 | flex-shrink 0 32 | width 38.2% 33 | margin-right 1.5rem 34 | 35 | .archive-article-header 36 | a 37 | text-decoration none 38 | .archive-article-title 39 | margin 0 40 | font-size 1.1em 41 | .archive-article-date 42 | color sea-lighter 43 | 44 | .archive-article-footer 45 | margin-top: 1.5rem 46 | 47 | .archive-article-inner 48 | .article-tag-list 49 | padding 0 50 | margin 0 -------------------------------------------------------------------------------- /source/css/_partial/article.styl: -------------------------------------------------------------------------------- 1 | 2 | .article 3 | padding 3rem 0 4 | 5 | //.article-inner 6 | // overflow hidden 7 | 8 | .article-topping 9 | position absolute 10 | top 0 11 | left -3rem 12 | color: #ea434a 13 | .fe 14 | font-size 2rem 15 | line-height 1.7 16 | 17 | 18 | .article-meta 19 | clearfix() 20 | 21 | .article-date 22 | @extend $block-caption 23 | &::before 24 | content '\f10f' 25 | margin-right .5rem 26 | font-family feathericon 27 | opacity .5 28 | 29 | .article-category 30 | display inline-block 31 | margin-left 1.5rem 32 | &:before 33 | content "\f18c" 34 | font-family feathericon 35 | margin-right .5rem 36 | .article-category-link 37 | @extend $block-caption 38 | 39 | .archive-article-header 40 | + .article-category 41 | margin-left 0 42 | 43 | .article-entry 44 | margin-top 3rem 45 | clearfix() 46 | @extend $base-style 47 | color body-color 48 | .pullquote 49 | text-align left 50 | width 45% 51 | margin 0 52 | &.left 53 | margin-left 0.5em 54 | margin-right 1em 55 | &.right 56 | margin-right 0.5em 57 | margin-left 1em 58 | .caption 59 | color color-grey 60 | display block 61 | font-size 0.9em 62 | margin-top 0.5em 63 | position relative 64 | text-align center 65 | // http://webdesignerwall.com/tutorials/css-elastic-videos 66 | .video-container 67 | position relative 68 | padding-top (9 / 16 * 100) % // 16:9 ratio 69 | height 0 70 | overflow hidden 71 | iframe, object, embed 72 | position absolute 73 | top 0 74 | left 0 75 | width 100% 76 | height 100% 77 | margin-top 0 78 | 79 | .article-header 80 | position relative 81 | h1, h2 82 | margin 0 83 | .article-title a 84 | text-decoration none 85 | color sea 86 | 87 | .article-footer 88 | clearfix() 89 | margin-top 3rem 90 | 91 | // Tags 92 | .article-tag-list 93 | list-unstyled() 94 | margin 0 95 | &:before 96 | content "\f153" 97 | font-family feathericon 98 | margin-right .5rem 99 | .article-tag-list-item 100 | display inline-block 101 | padding-right 1rem 102 | .article-tag-list-link 103 | text-decoration none 104 | 105 | .article-comment-link 106 | float right 107 | &:before 108 | content "\f1d2" 109 | font-family feathericon 110 | padding-right 8px 111 | 112 | .article-share-link 113 | cursor pointer 114 | float right 115 | margin-left 20px 116 | &:before 117 | content "\f14f" 118 | font-family feathericon 119 | padding-right 6px 120 | 121 | // Nav Older & Newer 122 | .article-nav 123 | clearfix() 124 | position relative 125 | padding-top 3rem 126 | margin-top 5rem 127 | border-top border-width border-color solid 128 | 129 | .article-nav-link 130 | display block 131 | text-decoration none 132 | &:first-child 133 | float left 134 | &:last-child 135 | float right 136 | text-align right 137 | 138 | .article-nav-caption 139 | color sea-lighter 140 | 141 | .article-nav-title 142 | font-size inherit 143 | 144 | // Share 145 | .article-share-box 146 | position absolute 147 | display none 148 | background white 149 | border-radius(.4rem) 150 | box-shadow 1px 2px 10px rgba(0, 0, 0, 0.2) 151 | border-radius 3px 152 | margin-left -145px 153 | overflow hidden 154 | z-index 1 155 | &.on 156 | display block 157 | 158 | .article-share-input 159 | width 100% 160 | background none 161 | box-sizing border-box 162 | padding 0 1.5rem 163 | outline none 164 | border none 165 | border-bottom border-width border-color solid 166 | height 3.6rem 167 | line-height 3.6rem 168 | 169 | .article-share-links 170 | clearfix() 171 | 172 | $article-share-link 173 | position relative 174 | display block 175 | float left 176 | width 5rem 177 | height 3.6rem 178 | color sea-dark 179 | text-align center 180 | text-decoration none 181 | &:before 182 | font-size 20px 183 | font-family feathericon 184 | absolute-center(font-size-base) 185 | &:hover 186 | color white 187 | 188 | .article-share-twitter 189 | @extend $article-share-link 190 | &:before 191 | content "\f1dd" 192 | &:hover 193 | background twitter-color 194 | text-shadow 0 1px darken(twitter-color, 20%) 195 | 196 | .article-share-facebook 197 | @extend $article-share-link 198 | &:before 199 | content "\f1d4" 200 | &:hover 201 | background facebook-color 202 | text-shadow 0 1px darken(facebook-color, 20%) 203 | 204 | .article-share-pinterest 205 | @extend $article-share-link 206 | &:before 207 | content "\f1db" 208 | &:hover 209 | background pinterest-color 210 | text-shadow 0 1px darken(pinterest-color, 20%) 211 | 212 | .article-share-google 213 | @extend $article-share-link 214 | &:before 215 | content "\f1d8" 216 | &:hover 217 | background google-color 218 | text-shadow 0 1px darken(google-color, 20%) 219 | 220 | 221 | @import "tocbot" 222 | @import "gallery" 223 | @import "albums" 224 | @import "justifiedGallery" 225 | 226 | @import "apple" 227 | @import "blockquote" 228 | @import "english" -------------------------------------------------------------------------------- /source/css/_partial/articles.styl: -------------------------------------------------------------------------------- 1 | .articles 2 | .article 3 | padding 4.5rem 0 4 | &:not(:last-child) 5 | border-bottom border-width border-color solid 6 | .article-entry, .article-footer 7 | margin-top 0 8 | .article-entry 9 | .article-gallery 10 | margin-top 1.5rem -------------------------------------------------------------------------------- /source/css/_partial/blockquote.styl: -------------------------------------------------------------------------------- 1 | .card-quote 2 | display grid 3 | grid-gap gutter-width 4 | margin-bottom gutter-width 5 | blockquote 6 | position relative 7 | margin 0 8 | padding 1.5rem 9 | padding-left 6rem 10 | overflow auto 11 | border-left none 12 | border border-width border-color solid 13 | background none 14 | border-radius 0.4rem 15 | transition(transition-base) 16 | line-height 1.4 17 | &:before 18 | content none 19 | p:first-child 20 | position absolute 21 | top 50% 22 | left 1.5rem 23 | transform translateY(-50%) 24 | img 25 | height 3.2rem 26 | width 3.2rem 27 | // rounded-circle(4.8rem) 28 | // border border-width*3 border-color solid 29 | h3,h4,h5 30 | margin 0 31 | // text-transform uppercase 32 | + p 33 | margin-top 0 34 | color gray 35 | font-size small 36 | a 37 | opacity 0 38 | display flex 39 | justify-content center 40 | align-items center 41 | position absolute 42 | z-index 1 43 | top 0 44 | right 0 45 | bottom 0 46 | left 0 47 | text-align center 48 | background rgba(white, .75) 49 | color sea-dark 50 | text-decoration: none 51 | font-size small 52 | transition(transition-base) 53 | &:hover 54 | transform translateY(-.25rem) 55 | box-shadow 0 1rem 3rem .01rem rgba(sea-dark, .1) 56 | border-color froth-light 57 | a 58 | opacity 1 59 | -------------------------------------------------------------------------------- /source/css/_partial/categories.styl: -------------------------------------------------------------------------------- 1 | // Categories 2 | 3 | .category-list 4 | list-unstyled() 5 | margin-right -.5rem 6 | margin-left -.5rem 7 | > .category-list-item 8 | display inline-block 9 | padding .5rem 1rem 10 | &:before 11 | content "\f18c" 12 | font-family feathericon 13 | margin-right .5rem -------------------------------------------------------------------------------- /source/css/_partial/english.styl: -------------------------------------------------------------------------------- 1 | .tenses img 2 | margin 1rem 0 3 | 4 | .example 5 | color darkblue 6 | 7 | .columns 8 | display grid 9 | grid-gap gutter-width 10 | margin-bottom gutter-width 11 | 12 | @media (min-width: 768px) 13 | .columns 14 | grid-template-columns repeat(2, 1fr) -------------------------------------------------------------------------------- /source/css/_partial/float.styl: -------------------------------------------------------------------------------- 1 | 2 | .float-left 3 | float: left !important; 4 | 5 | .float-right 6 | float: right !important; 7 | 8 | .float-none 9 | float: none !important; -------------------------------------------------------------------------------- /source/css/_partial/footer.styl: -------------------------------------------------------------------------------- 1 | 2 | .footer 3 | border-top border-width border-color solid 4 | padding 3rem 0 -------------------------------------------------------------------------------- /source/css/_partial/gallery.styl: -------------------------------------------------------------------------------- 1 | 2 | .article-gallery 3 | position: relative 4 | 5 | .article-gallery-photos 6 | position: relative 7 | overflow: hidden 8 | 9 | .article-gallery-img 10 | display: none 11 | max-width: 100% 12 | &:first-child 13 | display: block 14 | &.loaded 15 | position: absolute 16 | display: block 17 | img 18 | display: block 19 | max-width: 100% 20 | margin: 0 auto -------------------------------------------------------------------------------- /source/css/_partial/gitalk.styl: -------------------------------------------------------------------------------- 1 | .gitalk,.markdown-body 2 | font-size font-size-base!important 3 | 4 | .gt-container 5 | .gt-avatar.gt-comment-avatar 6 | img 7 | border-radius 50%!important -------------------------------------------------------------------------------- /source/css/_partial/highlight.styl: -------------------------------------------------------------------------------- 1 | highlight-background = #f6f8fa 2 | highlight-current-line = #efefef 3 | highlight-selection = #d6d6d6 4 | highlight-foreground = #4d4d4c 5 | highlight-comment = #8e908c 6 | highlight-red = #f2777a 7 | highlight-orange = #f99157 8 | highlight-yellow = #ffcc66 9 | highlight-green = #99cc99 10 | highlight-aqua = #66cccc 11 | highlight-blue = #6699cc 12 | highlight-purple = #cc99cc 13 | 14 | $code-block 15 | background highlight-background 16 | padding 1.5rem 17 | margin 1.5rem 0 18 | border-radius .4rem 19 | overflow auto 20 | color highlight-foreground 21 | 22 | $line-numbers 23 | color highlight-comment 24 | 25 | .article-entry 26 | pre, code 27 | font-family inherit 28 | text-shadow none 29 | code 30 | background highlight-background 31 | padding .25rem 32 | border-radius(.4rem) 33 | pre 34 | @extend $code-block 35 | code 36 | background none 37 | padding 0 38 | .highlight 39 | @extend $code-block 40 | pre 41 | border none 42 | margin 0 43 | padding 0 44 | table 45 | margin 0 46 | width auto 47 | border none 48 | td 49 | border none 50 | padding 0 51 | figcaption 52 | clearfix() 53 | font-size 85% 54 | color highlight-comment 55 | line-height 1rem 56 | margin-bottom 1rem 57 | a 58 | float right 59 | .gutter 60 | -webkit-user-select none 61 | -moz-user-select none 62 | -ms-user-select none 63 | user-select none 64 | .gutter pre 65 | @extend $line-numbers 66 | text-align right 67 | padding-right 1.5rem 68 | .line 69 | height inherit 70 | .line.marked 71 | background highlight-selection 72 | .gist 73 | background highlight-background 74 | .gist-file 75 | border none 76 | margin 0 77 | .gist-data 78 | background none 79 | border none 80 | .line-numbers 81 | @extend $line-numbers 82 | background none 83 | border none 84 | .line-data 85 | padding 0 !important 86 | .highlight 87 | margin 0 88 | padding 0 89 | border none 90 | .gist-meta 91 | background highlight-background 92 | color highlight-comment 93 | padding 0 94 | margin-top 1rem 95 | a 96 | font-weight normal 97 | &:hover 98 | text-decoration underline 99 | 100 | pre 101 | .comment 102 | .title 103 | color highlight-comment 104 | .variable 105 | .attribute 106 | .tag 107 | .regexp 108 | .ruby .constant 109 | .xml .tag .title 110 | .xml .pi 111 | .xml .doctype 112 | .html .doctype 113 | .css .id 114 | .css .class 115 | .css .pseudo 116 | color highlight-red 117 | .number 118 | .preprocessor 119 | .built_in 120 | .literal 121 | .params 122 | .constant 123 | color highlight-orange 124 | .class 125 | .ruby .class .title 126 | .css .rules .attribute 127 | color highlight-green 128 | .string 129 | .value 130 | .inheritance 131 | .header 132 | .ruby .symbol 133 | .xml .cdata 134 | color highlight-green 135 | .css .hexcolor 136 | color highlight-aqua 137 | .function 138 | .python .decorator 139 | .python .title 140 | .ruby .function .title 141 | .ruby .title .keyword 142 | .perl .sub 143 | .javascript .title 144 | .coffeescript .title 145 | color highlight-blue 146 | .keyword 147 | .javascript .function 148 | color highlight-purple 149 | -------------------------------------------------------------------------------- /source/css/_partial/justifiedGallery.styl: -------------------------------------------------------------------------------- 1 | /* 2 | * Justified Gallery - v4.0.0-alpha 3 | * http://miromannino.com/projects/justified-gallery/ 4 | * Copyright (c) 2019 Miro Mannino 5 | * Licensed under the MIT license. 6 | */ 7 | 8 | .justified-gallery 9 | width 100% 10 | position relative 11 | overflow hidden 12 | > a, > div, > figure 13 | position absolute 14 | display inline-block 15 | overflow hidden 16 | background gray /* To have gray placeholders while the gallery is loading with waitThumbnailsLoad = false */ 17 | filter "alpha(opacity=10)" 18 | opacity 0.1 19 | margin 0 20 | padding 0 21 | > img, > a > img, > svg, > a > svg 22 | position absolute 23 | top 50% 24 | left 50% 25 | margin 0 26 | padding 0 27 | border none 28 | filter "alpha(opacity=0)" 29 | opacity 0 30 | > .caption 31 | display none 32 | position absolute 33 | right 0 34 | bottom 0 35 | left 0 36 | padding 1rem 37 | background-color rgba(black, .5) 38 | background linear-gradient(to top, rgba(black, .5), transparent) 39 | color white 40 | &.caption-visible 41 | display initial 42 | > .jg-entry-visible 43 | filter "alpha(opacity=100)" 44 | opacity 1 45 | background none 46 | > img, > a > img, > svg, > a > svg 47 | filter "alpha(opacity=100)" 48 | opacity 1 49 | -webkit-transition opacity 500ms ease-in 50 | -moz-transition opacity 500ms ease-in 51 | -o-transition opacity 500ms ease-in 52 | transition opacity 500ms ease-in 53 | > .jg-filtered 54 | display none 55 | > .spinner 56 | position absolute 57 | bottom 0 58 | margin-left -24px 59 | padding 10px 0 10px 0 60 | left 50% 61 | filter "alpha(opacity=100)" 62 | opacity 1 63 | overflow initial 64 | > span 65 | display inline-block 66 | filter "alpha(opacity=0)" 67 | opacity 0 68 | width 8px 69 | height 8px 70 | margin 0 4px 0 4px 71 | background-color #000 72 | border-radius 6px 73 | -------------------------------------------------------------------------------- /source/css/_partial/layou.styl: -------------------------------------------------------------------------------- 1 | // Layout 2 | 3 | .jumbotron 4 | padding 0 5 | margin-bottom 3rem 6 | text-align center 7 | 8 | .content, .sidebar 9 | transition(transition-base) 10 | 11 | .content 12 | position relative 13 | z-index 1 14 | margin-right 0 15 | &.on 16 | transform translateX(- aside-width) 17 | 18 | .sidebar 19 | position fixed 20 | z-index 9 21 | top 0 22 | right - aside-width 23 | bottom 0 24 | width aside-width 25 | background-color froth-light 26 | &.on 27 | right 0 28 | 29 | .navbar-toggle 30 | position absolute 31 | top gutter-width 32 | right: gutter-width + aside-width 33 | padding .5rem 1rem 34 | border none 35 | border-radius(.4rem) 36 | background-color rgba(sea, .25) 37 | color white 38 | &::before 39 | content '\f105' 40 | font-family feathericon 41 | font-size larger 42 | 43 | .wrap, .outer 44 | width 100% 45 | padding-right gutter-width 46 | padding-left gutter-width 47 | margin auto 48 | clearfix() 49 | 50 | .local-search 51 | width 100% 52 | 53 | .tocbot 54 | display none 55 | 56 | // Media Query 57 | @media (min-width: 768px) 58 | .jumbotron 59 | margin-bottom 6rem 60 | 61 | .wrap, .outer 62 | width wrap-width 63 | 64 | .content 65 | margin-right aside-width 66 | 67 | .sidebar 68 | right 0 69 | background-color white 70 | 71 | .navbar-toggle 72 | display none 73 | 74 | .local-search 75 | width wrap-width 76 | 77 | .card-quote 78 | grid-template-columns repeat(3, 1fr) 79 | 80 | .archive-article-title 81 | margin 0 82 | font-size 1.25em!important 83 | 84 | @media (min-width: 992px) 85 | .wrap, .outer 86 | padding-right 0 87 | padding-left 0 88 | 89 | @media (min-width: 1200px) 90 | .tocbot 91 | display block -------------------------------------------------------------------------------- /source/css/_partial/lists.styl: -------------------------------------------------------------------------------- 1 | .list-unstyled, .list-inline 2 | list-unstyled() 3 | 4 | .list-inline 5 | position relative 6 | margin 0 -.75rem 7 | > li 8 | display inline-block 9 | padding 0 .75rem -------------------------------------------------------------------------------- /source/css/_partial/mobile.styl: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /source/css/_partial/navbar.styl: -------------------------------------------------------------------------------- 1 | .navbar 2 | position relative 3 | padding-top 3rem 4 | text-align center 5 | .nav 6 | list-unstyled() 7 | .nav-item-link 8 | display block 9 | padding 1rem; 10 | color sea-dark 11 | text-decoration none 12 | cursor pointer 13 | &:hover 14 | color link-hover-color 15 | &.nav-main 16 | .nav-item-link 17 | &::before, i.fe 18 | display block 19 | line-height 1 20 | &::before 21 | font-family 'feathericon' 22 | .nav-item 23 | &:nth-child(1) // home 24 | .nav-item-link 25 | &::before 26 | content '\f12f' 27 | &:nth-child(2) // archives 28 | .nav-item-link 29 | &::before 30 | content '\f12a' 31 | &:nth-child(3) // gallery 32 | .nav-item-link 33 | &::before 34 | content '\f1a9' 35 | // &:nth-child(4) // favorites 36 | // .nav-item-link 37 | // &::before 38 | // content '\f11e' 39 | //&:nth-child(5) // categories 40 | // .nav-item-link 41 | // &::before 42 | // content '\f18c' 43 | //&:nth-child(6) // tags 44 | // .nav-item-link 45 | // &::before 46 | // content '\f153' 47 | 48 | &:nth-child(4) // about 49 | .nav-item-link 50 | &::before 51 | content '\f174' 52 | 53 | // &:nth-child(5) // links 54 | // .nav-item-link 55 | // &::before 56 | // content '\f136' 57 | 58 | .navbar-bottom 59 | position absolute 60 | bottom 0 61 | width 100% 62 | 63 | .logo 64 | text-align center 65 | img 66 | width brand-size 67 | 68 | -------------------------------------------------------------------------------- /source/css/_partial/ocean.styl: -------------------------------------------------------------------------------- 1 | // 2 | .video 3 | position relative 4 | height auto 5 | .brand 6 | width brand-size 7 | 8 | .video-frame 9 | position absolute 10 | z-index 1 11 | right 0 12 | bottom 0 13 | left 0 14 | min-width 100% 15 | img 16 | display block 17 | width 100% 18 | 19 | .video-media 20 | position relative 21 | z-index 0 22 | height 90vh 23 | overflow hidden 24 | video, img 25 | position absolute 26 | top 50% 27 | left 50% 28 | transform translate(-50%, -50%) 29 | min-width 100% 30 | min-height 100% 31 | 32 | .video-overlay 33 | position absolute 34 | top 0 35 | bottom 0 36 | left 0 37 | right 0 38 | background-color rgba(178, 191, 204, .6) 39 | 40 | .video-inner 41 | position absolute 42 | top 50% 43 | left 50% 44 | transform translate(-50%, -65%) 45 | a, & 46 | color white 47 | text-decoration none 48 | 49 | .video-learn-more 50 | position absolute 51 | z-index 1 52 | bottom -3rem 53 | right 0 54 | left 0 55 | a > .fe 56 | font-size 3rem 57 | color gray 58 | &:hover 59 | color sea 60 | -------------------------------------------------------------------------------- /source/css/_partial/pace.styl: -------------------------------------------------------------------------------- 1 | 2 | .pace 3 | -webkit-pointer-events none 4 | pointer-events none 5 | -webkit-user-select none 6 | -moz-user-select none 7 | user-select none 8 | .pace-progress 9 | position fixed 10 | z-index 2000 11 | top 0 12 | right 100% 13 | width 100% 14 | height .2rem 15 | background-color sea-blue 16 | 17 | .pace-inactive 18 | display none 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /source/css/_partial/pages.styl: -------------------------------------------------------------------------------- 1 | .page-type-title 2 | margin 0 3 | padding 3rem 0 4 | 5 | .page-nav 6 | clearfix() 7 | margin: 3rem auto 8 | text-align: center 9 | overflow: hidden 10 | a, span 11 | padding: 1rem 1.5rem 12 | line-height: 1 13 | a 14 | text-decoration: none 15 | .prev 16 | float: left 17 | .next 18 | float: right 19 | .page-number 20 | display: inline-block 21 | @media mq-mobile 22 | display: none 23 | .current 24 | font-weight: bold 25 | .space 26 | color: border-color -------------------------------------------------------------------------------- /source/css/_partial/safari.styl: -------------------------------------------------------------------------------- 1 | // 2 | // safari browser 3 | // 4 | .safari 5 | &, 6 | .safari-header, 7 | .safari-body 8 | position: relative 9 | overflow: hidden 10 | background-color: froth 11 | border-radius: border-radius 12 | 13 | .safari-example 14 | height 36rem 15 | padding: 0 16 | margin: 0 17 | background-repeat: no-repeat 18 | background-size: cover 19 | background-position: top left 20 | bg-image("/images/example") 21 | 22 | .safari-btns 23 | position: relative 24 | &, 25 | &:before, 26 | &:after 27 | display: inline-block 28 | rounded-circle(1rem) 29 | background-color: #eb6b60 30 | &:before, 31 | &:after 32 | content: '' 33 | position: absolute 34 | &:before 35 | left: 1.5rem 36 | background-color: #f4be4f 37 | &:after 38 | left: 3rem 39 | background-color: #66c655 40 | -------------------------------------------------------------------------------- /source/css/_partial/search.styl: -------------------------------------------------------------------------------- 1 | 2 | .search-form-wrap 3 | position fixed 4 | top -100% 5 | right aside-width 6 | left 0 7 | opacity 0 8 | transition(.3s) 9 | &.on 10 | top 0 11 | opacity 1 12 | 13 | //------------- 14 | .local-search 15 | position relative 16 | margin 0 auto 17 | padding 3rem; 18 | background-color white 19 | box-shadow 0 1rem 3rem rgba(sea, .05) 20 | max-height 100vh 21 | overflow-y auto 22 | 23 | .local-search-input 24 | border border-width border-color solid 25 | border-radius(.4rem) 26 | background-color white 27 | width 100% 28 | padding 1rem 1.5rem 29 | outline: none 30 | &::-webkit-search-results-decoration 31 | &::-webkit-search-cancel-button 32 | -webkit-appearance: none 33 | 34 | .local-search-close 35 | position absolute 36 | top 3.85rem 37 | right 4.25rem 38 | display block 39 | height 2rem 40 | width 2rem 41 | padding 0 42 | border none 43 | border-radius(50%) 44 | background-color sand-light 45 | color white 46 | text-align center 47 | cursor pointer 48 | &::before 49 | content '\f114' 50 | font-family feathericon 51 | 52 | // 搜索结果 53 | .local-search-result 54 | text-align left 55 | 56 | .search-result-list 57 | list-unstyled() 58 | li 59 | padding 1.5rem 0 60 | &:not(:last-child) 61 | border-bottom border-width border-color solid 62 | 63 | .search-result-title 64 | font-size 1.6rem 65 | font-weight bold 66 | .search-result 67 | padding-top .5rem 68 | margin 0 69 | max-height 12rem 70 | overflow hidden 71 | em.search-keyword 72 | color sand 73 | 74 | .search-result-empty 75 | padding 3rem 0 0 76 | -------------------------------------------------------------------------------- /source/css/_partial/sidebar.styl: -------------------------------------------------------------------------------- 1 | @import "navbar" 2 | @import "totop" -------------------------------------------------------------------------------- /source/css/_partial/tag.styl: -------------------------------------------------------------------------------- 1 | .tag-list 2 | list-unstyled() 3 | margin-right -.5rem 4 | margin-left -.5rem 5 | > .tag-list-item 6 | display inline-block 7 | padding .5rem 1rem 8 | &:before 9 | content "\f153" 10 | font-family feathericon 11 | margin-right .5rem -------------------------------------------------------------------------------- /source/css/_partial/tocbot.styl: -------------------------------------------------------------------------------- 1 | 2 | .tocbot 3 | position absolute 4 | top 14rem 5 | left calc((100vw - 70rem) / 2 + 70rem) 6 | font-size 80% 7 | opacity .8 8 | > .toc-list 9 | position relative 10 | overflow hidden 11 | 12 | .toc-list 13 | list-unstyled() 14 | padding-left 1rem 15 | 16 | a.toc-link 17 | height 100% 18 | color sea-dark 19 | text-decoration none 20 | 21 | .is-collapsible 22 | max-height 1000px 23 | overflow hidden 24 | transition all 300ms ease-in-out 25 | 26 | .is-collapsed 27 | max-height 0 28 | 29 | .is-position-fixed 30 | position fixed !important 31 | top 0 32 | right aside-width 33 | 34 | .is-active-link 35 | font-weight 700 36 | 37 | // Left line before pseudo element. 38 | .toc-link::before 39 | background-color froth 40 | content ' ' 41 | display inline-block 42 | height inherit 43 | left 0 44 | margin-top -1px 45 | position absolute 46 | width 2px 47 | 48 | .is-active-link::before 49 | background-color sea-blue 50 | -------------------------------------------------------------------------------- /source/css/_partial/tooltips.styl: -------------------------------------------------------------------------------- 1 | // 2 | // Tooltips 3 | // 4 | 5 | .tooltip 6 | position: relative 7 | &::after 8 | content: attr(data-tooltip) 9 | position: absolute 10 | z-index: 9 11 | bottom: 100% 12 | left: 50% 13 | background-color: sea-dark 14 | border-radius: 0.4rem 15 | padding: 1rem 16 | opacity: 0 17 | pointer-events: none 18 | transform: translate(-50%, 0) 19 | transition: transition-base 20 | color: froth 21 | &:hover 22 | &::after 23 | opacity: 1 24 | transform: translate(-50%, 0) 25 | -------------------------------------------------------------------------------- /source/css/_partial/totop.styl: -------------------------------------------------------------------------------- 1 | 2 | @keyframes rocket { 3 | 0% { 4 | transform translateY(0) 5 | opacity 1; 6 | } 7 | 45% { 8 | transform translateY(-3.2rem) 9 | opacity 0; 10 | } 11 | 55% { 12 | transform translateY(3.2rem) 13 | opacity 0; 14 | } 15 | 100% { 16 | transform translateY(0) 17 | opacity 1; 18 | } 19 | } 20 | 21 | .totop 22 | position relative 23 | display inline-block 24 | overflow hidden 25 | cursor pointer 26 | rounded-circle(3.2rem) 27 | background-color froth-light 28 | line-height 3rem 29 | &:hover > i 30 | animation rocket .3s ease-in-out 31 | -------------------------------------------------------------------------------- /source/css/_partial/valine.styl: -------------------------------------------------------------------------------- 1 | .vcomments 2 | margin-top: 3rem -------------------------------------------------------------------------------- /source/css/_variables.styl: -------------------------------------------------------------------------------- 1 | // Config 2 | support-for-ie = false 3 | vendor-prefixes = webkit moz ms official 4 | 5 | // Fonts 6 | font-size-browser = 62.5% 7 | font-size-base = 1.5rem 8 | font-family-base = "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "微软雅黑", Arial, sans-serif 9 | font-line-height = 1.7 10 | 11 | // Colors 12 | black = #000000 13 | sea-blue = #127ea9 14 | sea-dark = #172d3e 15 | sea = #1e3e3f 16 | sea-light = #334f56 17 | sea-lighter = #5c6b72 18 | gray = #adb5bd 19 | froth-light = #f4f4f4 20 | froth = #e6e6e6 21 | white = #ffffff 22 | sand-light = #9c8079 23 | sand = #9e6a4d 24 | red = #ea434a 25 | 26 | // Share Colors 27 | twitter-color = #00aced 28 | facebook-color = #3b5998 29 | pinterest-color = #cb2027 30 | google-color = #dd4b39 31 | 32 | // Link Colors 33 | link-color = sea-blue 34 | link-hover-color = lighten(link-color, 10%) 35 | link-active-color = darken(link-color, 5%) 36 | disabled-color = gray 37 | 38 | // Body Colors 39 | body-background = white 40 | body-color = sea 41 | 42 | // Border 43 | border-radius = 0.4rem 44 | border-width = 0.1rem 45 | border-color = froth 46 | 47 | // Lyout 48 | aside-width = 10rem 49 | wrap-width = 70rem 50 | years-width = 6rem 51 | brand-size = 4.2rem 52 | 53 | gutter-width = 1.5rem 54 | 55 | // Breakpoints 56 | breakpoints = ( 57 | xs = 0, 58 | sm = 576px, 59 | md = 768px, 60 | lg = 992px, 61 | xl = 1200px 62 | ) 63 | 64 | // Transition 65 | transition-slow = all .7s ease-in-out 0s 66 | transition-fast = all .1s ease-in-out 0s 67 | transition-base = all .3s ease-in-out 68 | transition-fade = opacity .15s linear 69 | transition-collapse = height .35s ease 70 | -------------------------------------------------------------------------------- /source/css/feathericon/feathericon.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/css/feathericon/feathericon.eot -------------------------------------------------------------------------------- /source/css/feathericon/feathericon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/css/feathericon/feathericon.ttf -------------------------------------------------------------------------------- /source/css/feathericon/feathericon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/css/feathericon/feathericon.woff -------------------------------------------------------------------------------- /source/css/feathericon/feathericon.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/css/feathericon/feathericon.woff2 -------------------------------------------------------------------------------- /source/css/style.styl: -------------------------------------------------------------------------------- 1 | @import "_variables" 2 | @import "_mixins" 3 | @import "_fonts" 4 | @import "_feathericon" 5 | @import "_normalize" 6 | 7 | *, 8 | *::before 9 | *::after 10 | box-sizing border-box 11 | 12 | html, body 13 | height: 100% 14 | 15 | html 16 | font-size font-size-browser 17 | -webkit-text-size-adjust 100% 18 | -ms-text-size-adjust 100% 19 | -ms-overflow-style scrollbar 20 | -webkit-tap-highlight-color transparent 21 | 22 | body 23 | position relative 24 | background-color body-background 25 | font-family font-family-base 26 | font-size font-size-base 27 | line-height font-line-height 28 | color body-color 29 | padding 0 30 | margin 0 31 | overflow-x hidden 32 | text-size-adjust: 100% 33 | ::selection 34 | background sea-lighter 35 | color froth 36 | a 37 | color link-color 38 | &:hover 39 | color link-hover-color 40 | &:active 41 | color link-active-color 42 | &.disabled 43 | color disabled-color 44 | 45 | img 46 | max-width 100% 47 | 48 | @import "_extend" 49 | @import "_partial/layou" 50 | @import "_partial/lists" 51 | @import "_partial/categories" 52 | @import "_partial/tag" 53 | @import "_partial/tooltips" 54 | @import "_partial/ocean" 55 | @import "_partial/search" 56 | @import "_partial/pages" 57 | @import "_partial/article" 58 | @import "_partial/articles" 59 | @import "_partial/archive" 60 | @import "_partial/footer" 61 | @import "_partial/float" 62 | @import "_partial/highlight" 63 | @import "_partial/mobile" 64 | @import "_partial/pace" 65 | @import "_partial/gitalk" 66 | @import "_partial/valine" 67 | 68 | if sidebar 69 | @import "_partial/sidebar" -------------------------------------------------------------------------------- /source/fancybox/jquery.fancybox.min.css: -------------------------------------------------------------------------------- 1 | body.compensate-for-scrollbar{overflow:hidden}.fancybox-active{height:auto}.fancybox-is-hidden{left:-9999px;margin:0;position:absolute!important;top:-9999px;visibility:hidden}.fancybox-container{-webkit-backface-visibility:hidden;height:100%;left:0;outline:none;position:fixed;-webkit-tap-highlight-color:transparent;top:0;-ms-touch-action:manipulation;touch-action:manipulation;-webkit-transform:translateZ(0);transform:translateZ(0);width:100%;z-index:99992}.fancybox-container *{box-sizing:border-box}.fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-stage{bottom:0;left:0;position:absolute;right:0;top:0}.fancybox-outer{-webkit-overflow-scrolling:touch;overflow-y:auto}.fancybox-bg{background:#1e1e1e;opacity:0;transition-duration:inherit;transition-property:opacity;transition-timing-function:cubic-bezier(.47,0,.74,.71)}.fancybox-is-open .fancybox-bg{opacity:.9;transition-timing-function:cubic-bezier(.22,.61,.36,1)}.fancybox-caption,.fancybox-infobar,.fancybox-navigation .fancybox-button,.fancybox-toolbar{direction:ltr;opacity:0;position:absolute;transition:opacity .25s ease,visibility 0s ease .25s;visibility:hidden;z-index:99997}.fancybox-show-caption .fancybox-caption,.fancybox-show-infobar .fancybox-infobar,.fancybox-show-nav .fancybox-navigation .fancybox-button,.fancybox-show-toolbar .fancybox-toolbar{opacity:1;transition:opacity .25s ease 0s,visibility 0s ease 0s;visibility:visible}.fancybox-infobar{color:#ccc;font-size:13px;-webkit-font-smoothing:subpixel-antialiased;height:44px;left:0;line-height:44px;min-width:44px;mix-blend-mode:difference;padding:0 10px;pointer-events:none;top:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.fancybox-toolbar{right:0;top:0}.fancybox-stage{direction:ltr;overflow:visible;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99994}.fancybox-is-open .fancybox-stage{overflow:hidden}.fancybox-slide{-webkit-backface-visibility:hidden;display:none;height:100%;left:0;outline:none;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:absolute;text-align:center;top:0;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;white-space:normal;width:100%;z-index:99994}.fancybox-slide:before{content:"";display:inline-block;font-size:0;height:100%;vertical-align:middle;width:0}.fancybox-is-sliding .fancybox-slide,.fancybox-slide--current,.fancybox-slide--next,.fancybox-slide--previous{display:block}.fancybox-slide--image{overflow:hidden;padding:44px 0}.fancybox-slide--image:before{display:none}.fancybox-slide--html{padding:6px}.fancybox-content{background:#fff;display:inline-block;margin:0;max-width:100%;overflow:auto;-webkit-overflow-scrolling:touch;padding:44px;position:relative;text-align:left;vertical-align:middle}.fancybox-slide--image .fancybox-content{-webkit-animation-timing-function:cubic-bezier(.5,0,.14,1);animation-timing-function:cubic-bezier(.5,0,.14,1);-webkit-backface-visibility:hidden;background:transparent;background-repeat:no-repeat;background-size:100% 100%;left:0;max-width:none;overflow:visible;padding:0;position:absolute;top:0;-webkit-transform-origin:top left;transform-origin:top left;transition-property:opacity,-webkit-transform;transition-property:transform,opacity;transition-property:transform,opacity,-webkit-transform;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:99995}.fancybox-can-zoomOut .fancybox-content{cursor:zoom-out}.fancybox-can-zoomIn .fancybox-content{cursor:zoom-in}.fancybox-can-pan .fancybox-content,.fancybox-can-swipe .fancybox-content{cursor:-webkit-grab;cursor:grab}.fancybox-is-grabbing .fancybox-content{cursor:-webkit-grabbing;cursor:grabbing}.fancybox-container [data-selectable=true]{cursor:text}.fancybox-image,.fancybox-spaceball{background:transparent;border:0;height:100%;left:0;margin:0;max-height:none;max-width:none;padding:0;position:absolute;top:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.fancybox-spaceball{z-index:1}.fancybox-slide--iframe .fancybox-content,.fancybox-slide--map .fancybox-content,.fancybox-slide--pdf .fancybox-content,.fancybox-slide--video .fancybox-content{height:100%;overflow:visible;padding:0;width:100%}.fancybox-slide--video .fancybox-content{background:#000}.fancybox-slide--map .fancybox-content{background:#e5e3df}.fancybox-slide--iframe .fancybox-content{background:#fff}.fancybox-iframe,.fancybox-video{background:transparent;border:0;display:block;height:100%;margin:0;overflow:hidden;padding:0;width:100%}.fancybox-iframe{left:0;position:absolute;top:0}.fancybox-error{background:#fff;cursor:default;max-width:400px;padding:40px;width:100%}.fancybox-error p{color:#444;font-size:16px;line-height:20px;margin:0;padding:0}.fancybox-button{background:rgba(30,30,30,.6);border:0;border-radius:0;box-shadow:none;cursor:pointer;display:inline-block;height:44px;margin:0;padding:10px;position:relative;transition:color .2s;vertical-align:top;visibility:inherit;width:44px}.fancybox-button,.fancybox-button:link,.fancybox-button:visited{color:#ccc}.fancybox-button:hover{color:#fff}.fancybox-button:focus{outline:none}.fancybox-button.fancybox-focus{outline:1px dotted}.fancybox-button[disabled],.fancybox-button[disabled]:hover{color:#888;cursor:default;outline:none}.fancybox-button div{height:100%}.fancybox-button svg{display:block;height:100%;overflow:visible;position:relative;width:100%}.fancybox-button svg path{fill:currentColor;stroke-width:0}.fancybox-button--fsenter svg:nth-child(2),.fancybox-button--fsexit svg:nth-child(1),.fancybox-button--pause svg:nth-child(1),.fancybox-button--play svg:nth-child(2){display:none}.fancybox-progress{background:#ff5268;height:2px;left:0;position:absolute;right:0;top:0;-webkit-transform:scaleX(0);transform:scaleX(0);-webkit-transform-origin:0;transform-origin:0;transition-property:-webkit-transform;transition-property:transform;transition-property:transform,-webkit-transform;transition-timing-function:linear;z-index:99998}.fancybox-close-small{background:transparent;border:0;border-radius:0;color:#ccc;cursor:pointer;opacity:.8;padding:8px;position:absolute;right:-12px;top:-44px;z-index:401}.fancybox-close-small:hover{color:#fff;opacity:1}.fancybox-slide--html .fancybox-close-small{color:currentColor;padding:10px;right:0;top:0}.fancybox-slide--image.fancybox-is-scaling .fancybox-content{overflow:hidden}.fancybox-is-scaling .fancybox-close-small,.fancybox-is-zoomable.fancybox-can-pan .fancybox-close-small{display:none}.fancybox-navigation .fancybox-button{background-clip:content-box;height:100px;opacity:0;position:absolute;top:calc(50% - 50px);width:70px}.fancybox-navigation .fancybox-button div{padding:7px}.fancybox-navigation .fancybox-button--arrow_left{left:0;padding:31px 26px 31px 6px}.fancybox-navigation .fancybox-button--arrow_right{padding:31px 6px 31px 26px;right:0}.fancybox-caption{bottom:0;color:#eee;font-size:14px;font-weight:400;left:0;line-height:1.5;padding:25px 44px;right:0;text-align:center;z-index:99996}.fancybox-caption:before{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAD6CAQAAADKSeXYAAAAYklEQVQoz42RwQ3AMAgDjfcfup8WoRykfBAK5mQHKSz5rbXJPis1hjiV3CIqgG0hLZPkVkA4p4x5oR1bVeDrdCLrW2Q0D5bcwY3TGMHbdw3mPRuOtaspYP1w//G1OIcW148H0DMCqI/3mMMAAAAASUVORK5CYII=);background-repeat:repeat-x;background-size:contain;bottom:0;content:"";display:block;left:0;pointer-events:none;position:absolute;right:0;top:-44px;z-index:-1}.fancybox-caption a,.fancybox-caption a:link,.fancybox-caption a:visited{color:#ccc;text-decoration:none}.fancybox-caption a:hover{color:#fff;text-decoration:underline}.fancybox-loading{-webkit-animation:a 1s linear infinite;animation:a 1s linear infinite;background:transparent;border:4px solid #888;border-bottom-color:#fff;border-radius:50%;height:50px;left:50%;margin:-25px 0 0 -25px;opacity:.7;padding:0;position:absolute;top:50%;width:50px;z-index:99999}@-webkit-keyframes a{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes a{to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fancybox-animated{transition-timing-function:cubic-bezier(0,0,.25,1)}.fancybox-fx-slide.fancybox-slide--previous{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}.fancybox-fx-slide.fancybox-slide--next{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}.fancybox-fx-slide.fancybox-slide--current{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}.fancybox-fx-fade.fancybox-slide--next,.fancybox-fx-fade.fancybox-slide--previous{opacity:0;transition-timing-function:cubic-bezier(.19,1,.22,1)}.fancybox-fx-fade.fancybox-slide--current{opacity:1}.fancybox-fx-zoom-in-out.fancybox-slide--previous{opacity:0;-webkit-transform:scale3d(1.5,1.5,1.5);transform:scale3d(1.5,1.5,1.5)}.fancybox-fx-zoom-in-out.fancybox-slide--next{opacity:0;-webkit-transform:scale3d(.5,.5,.5);transform:scale3d(.5,.5,.5)}.fancybox-fx-zoom-in-out.fancybox-slide--current{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}.fancybox-fx-rotate.fancybox-slide--previous{opacity:0;-webkit-transform:rotate(-1turn);transform:rotate(-1turn)}.fancybox-fx-rotate.fancybox-slide--next{opacity:0;-webkit-transform:rotate(1turn);transform:rotate(1turn)}.fancybox-fx-rotate.fancybox-slide--current{opacity:1;-webkit-transform:rotate(0deg);transform:rotate(0deg)}.fancybox-fx-circular.fancybox-slide--previous{opacity:0;-webkit-transform:scale3d(0,0,0) translate3d(-100%,0,0);transform:scale3d(0,0,0) translate3d(-100%,0,0)}.fancybox-fx-circular.fancybox-slide--next{opacity:0;-webkit-transform:scale3d(0,0,0) translate3d(100%,0,0);transform:scale3d(0,0,0) translate3d(100%,0,0)}.fancybox-fx-circular.fancybox-slide--current{opacity:1;-webkit-transform:scaleX(1) translateZ(0);transform:scaleX(1) translateZ(0)}.fancybox-fx-tube.fancybox-slide--previous{-webkit-transform:translate3d(-100%,0,0) scale(.1) skew(-10deg);transform:translate3d(-100%,0,0) scale(.1) skew(-10deg)}.fancybox-fx-tube.fancybox-slide--next{-webkit-transform:translate3d(100%,0,0) scale(.1) skew(10deg);transform:translate3d(100%,0,0) scale(.1) skew(10deg)}.fancybox-fx-tube.fancybox-slide--current{-webkit-transform:translateZ(0) scale(1);transform:translateZ(0) scale(1)}@media (max-height:576px){.fancybox-caption{padding:12px}.fancybox-slide{padding-left:6px;padding-right:6px}.fancybox-slide--image{padding:6px 0}.fancybox-close-small{right:-6px}.fancybox-slide--image .fancybox-close-small{background:#4e4e4e;color:#f2f4f6;height:36px;opacity:1;padding:6px;right:0;top:0;width:36px}}.fancybox-share{background:#f4f4f4;border-radius:3px;max-width:90%;padding:30px;text-align:center}.fancybox-share h1{color:#222;font-size:35px;font-weight:700;margin:0 0 20px}.fancybox-share p{margin:0;padding:0}.fancybox-share__button{border:0;border-radius:3px;display:inline-block;font-size:14px;font-weight:700;line-height:40px;margin:0 5px 10px;min-width:130px;padding:0 15px;text-decoration:none;transition:all .2s;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;white-space:nowrap}.fancybox-share__button:link,.fancybox-share__button:visited{color:#fff}.fancybox-share__button:hover{text-decoration:none}.fancybox-share__button--fb{background:#3b5998}.fancybox-share__button--fb:hover{background:#344e86}.fancybox-share__button--pt{background:#bd081d}.fancybox-share__button--pt:hover{background:#aa0719}.fancybox-share__button--tw{background:#1da1f2}.fancybox-share__button--tw:hover{background:#0d95e8}.fancybox-share__button svg{height:25px;margin-right:7px;position:relative;top:-1px;vertical-align:middle;width:25px}.fancybox-share__button svg path{fill:#fff}.fancybox-share__input{background:transparent;border:0;border-bottom:1px solid #d7d7d7;border-radius:0;color:#5d5b5b;font-size:14px;margin:10px 0 0;outline:none;padding:10px 15px;width:100%}.fancybox-thumbs{background:#ddd;bottom:0;display:none;margin:0;-webkit-overflow-scrolling:touch;-ms-overflow-style:-ms-autohiding-scrollbar;padding:2px 2px 4px;position:absolute;right:0;-webkit-tap-highlight-color:transparent;top:0;width:212px;z-index:99995}.fancybox-thumbs-x{overflow-x:auto;overflow-y:hidden}.fancybox-show-thumbs .fancybox-thumbs{display:block}.fancybox-show-thumbs .fancybox-inner{right:212px}.fancybox-thumbs__list{font-size:0;height:100%;list-style:none;margin:0;overflow-x:hidden;overflow-y:auto;padding:0;position:absolute;position:relative;white-space:nowrap;width:100%}.fancybox-thumbs-x .fancybox-thumbs__list{overflow:hidden}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar{width:7px}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-track{background:#fff;border-radius:10px;box-shadow:inset 0 0 6px rgba(0,0,0,.3)}.fancybox-thumbs-y .fancybox-thumbs__list::-webkit-scrollbar-thumb{background:#2a2a2a;border-radius:10px}.fancybox-thumbs__list a{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:rgba(0,0,0,.1);background-position:50%;background-repeat:no-repeat;background-size:cover;cursor:pointer;float:left;height:75px;margin:2px;max-height:calc(100% - 8px);max-width:calc(50% - 4px);outline:none;overflow:hidden;padding:0;position:relative;-webkit-tap-highlight-color:transparent;width:100px}.fancybox-thumbs__list a:before{border:6px solid #ff5268;bottom:0;content:"";left:0;opacity:0;position:absolute;right:0;top:0;transition:all .2s cubic-bezier(.25,.46,.45,.94);z-index:99991}.fancybox-thumbs__list a:focus:before{opacity:.5}.fancybox-thumbs__list a.fancybox-thumbs-active:before{opacity:1}@media (max-width:576px){.fancybox-thumbs{width:110px}.fancybox-show-thumbs .fancybox-inner{right:110px}.fancybox-thumbs__list a{max-width:calc(100% - 10px)}} -------------------------------------------------------------------------------- /source/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/favicon.ico -------------------------------------------------------------------------------- /source/fonts/raleway_medium/Raleway-Medium.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/fonts/raleway_medium/Raleway-Medium.eot -------------------------------------------------------------------------------- /source/fonts/raleway_medium/Raleway-Medium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /source/fonts/raleway_medium/Raleway-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/fonts/raleway_medium/Raleway-Medium.ttf -------------------------------------------------------------------------------- /source/fonts/raleway_medium/Raleway-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/fonts/raleway_medium/Raleway-Medium.woff -------------------------------------------------------------------------------- /source/images/forrestgump.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/forrestgump.png -------------------------------------------------------------------------------- /source/images/hexo-inverted.svg: -------------------------------------------------------------------------------- 1 | 3 | 5 | 6 | 7 | 8 | 10 | -------------------------------------------------------------------------------- /source/images/hexo.svg: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /source/images/ocean/ocean.mp4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/ocean/ocean.mp4 -------------------------------------------------------------------------------- /source/images/ocean/ocean.ogv: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/ocean/ocean.ogv -------------------------------------------------------------------------------- /source/images/ocean/ocean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/ocean/ocean.png -------------------------------------------------------------------------------- /source/images/ocean/ocean.webm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/ocean/ocean.webm -------------------------------------------------------------------------------- /source/images/ocean/overlay-hero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zhwangart/hexo-theme-ocean/97c7bffed84a699fb633dff22485bfc013e2f361/source/images/ocean/overlay-hero.png -------------------------------------------------------------------------------- /source/js/busuanzi-2.3.pure.min.js: -------------------------------------------------------------------------------- 1 | var bszCaller,bszTag;!function(){var c,d,e,a=!1,b=[];ready=function(c){return a||"interactive"===document.readyState||"complete"===document.readyState?c.call(document):b.push(function(){return c.call(this)}),this},d=function(){for(var a=0,c=b.length;c>a;a++)b[a].apply(document);b=[]},e=function(){a||(a=!0,d.call(window),document.removeEventListener?document.removeEventListener("DOMContentLoaded",e,!1):document.attachEvent&&(document.detachEvent("onreadystatechange",e),window==window.top&&(clearInterval(c),c=null)))},document.addEventListener?document.addEventListener("DOMContentLoaded",e,!1):document.attachEvent&&(document.attachEvent("onreadystatechange",function(){/loaded|complete/.test(document.readyState)&&e()}),window==window.top&&(c=setInterval(function(){try{a||document.documentElement.doScroll("left")}catch(b){return}e()},5)))}(),bszCaller={fetch:function(a,b){var c="BusuanziCallback_"+Math.floor(1099511627776*Math.random());window[c]=this.evalCall(b),a=a.replace("=BusuanziCallback","="+c),scriptTag=document.createElement("SCRIPT"),scriptTag.type="text/javascript",scriptTag.defer=!0,scriptTag.src=a,document.getElementsByTagName("HEAD")[0].appendChild(scriptTag)},evalCall:function(a){return function(b){ready(function(){try{a(b),scriptTag.parentElement.removeChild(scriptTag)}catch(c){bszTag.hides()}})}}},bszCaller.fetch("//busuanzi.ibruce.info/busuanzi?jsonpCallback=BusuanziCallback",function(a){bszTag.texts(a),bszTag.shows()}),bszTag={bszs:["site_pv","page_pv","site_uv"],texts:function(a){this.bszs.map(function(b){var c=document.getElementById("busuanzi_value_"+b);c&&(c.innerHTML=a[b])})},hides:function(){this.bszs.map(function(a){var b=document.getElementById("busuanzi_container_"+a);b&&(b.style.display="none")})},shows:function(){this.bszs.map(function(a){var b=document.getElementById("busuanzi_container_"+a);b&&(b.style.display="inline")})}}; -------------------------------------------------------------------------------- /source/js/jquery.justifiedGallery.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * justifiedGallery - v4.0.0-alpha 3 | * http://miromannino.github.io/Justified-Gallery/ 4 | * Copyright (c) 2019 Miro Mannino 5 | * Licensed under the MIT license. 6 | */ 7 | 8 | !function(e){"function"==typeof define&&define.amd?define(["jquery"],e):"object"==typeof module&&module.exports?module.exports=function(t,i){return void 0===i&&(i="undefined"!=typeof window?require("jquery"):require("jquery")(t)),e(i),i}:e(jQuery)}(function(l){var r=function(t,i){this.settings=i,this.checkSettings(),this.imgAnalyzerTimeout=null,this.entries=null,this.buildingRow={entriesBuff:[],width:0,height:0,aspectRatio:0},this.lastFetchedEntry=null,this.lastAnalyzedIndex=-1,this.yield={every:2,flushed:0},this.border=0<=i.border?i.border:i.margins,this.maxRowHeight=this.retrieveMaxRowHeight(),this.suffixRanges=this.retrieveSuffixRanges(),this.offY=this.border,this.rows=0,this.spinner={phase:0,timeSlot:150,$el:l('
'),intervalId:null},this.scrollBarOn=!1,this.checkWidthIntervalId=null,this.galleryWidth=t.width(),this.$gallery=t};r.prototype.getSuffix=function(t,i){var e,s;for(e=i .caption");return 0===i.length?null:i},r.prototype.displayEntry=function(t,i,e,s,n,r){t.width(s),t.height(r),t.css("top",e),t.css("left",i);var o=this.imgFromEntry(t);if(null!==o){o.css("width",s),o.css("height",n),o.css("margin-left",-s/2),o.css("margin-top",-n/2);var a=o.data("jg.src");if(a){a=this.newSrc(a,s,n,o[0]),o.one("error",function(){this.resetImgSrc(o)});var h=function(){o.attr("src",a)};"skipped"===t.data("jg.loaded")?this.onImageEvent(a,function(){this.showImg(t,h),t.data("jg.loaded",!0)}.bind(this)):this.showImg(t,h)}}else this.showImg(t);this.displayEntryCaption(t)},r.prototype.displayEntryCaption=function(t){var i=this.imgFromEntry(t);if(null!==i&&this.settings.captions){var e=this.captionFromEntry(t);if(null===e){var s=i.attr("alt");this.isValidCaption(s)||(s=t.attr("title")),this.isValidCaption(s)&&(e=l('
'+s+"
"),t.append(e),t.data("jg.createdCaption",!0))}null!==e&&(this.settings.cssAnimation||e.stop().fadeTo(0,this.settings.captionSettings.nonVisibleOpacity),this.addCaptionEventsHandlers(t))}else this.removeCaptionEventsHandlers(t)},r.prototype.isValidCaption=function(t){return void 0!==t&&0this.settings.justifyThreshold;if(t&&"hide"===this.settings.lastRow&&!d){for(i=0;i img, > a > img").fadeTo(0,0));return-1}for(t&&!d&&"justify"!==this.settings.lastRow&&"hide"!==this.settings.lastRow&&(o=!1,0this.settings.justifyThreshold)),i=0;ithis.settings.refreshSensitivity&&(this.galleryWidth=t,this.rewind(),this.rememberGalleryHeight(),this.startImgAnalyzer(!0))}},this),this.settings.refreshTime)},r.prototype.isSpinnerActive=function(){return null!==this.spinner.intervalId},r.prototype.getSpinnerHeight=function(){return this.spinner.$el.innerHeight()},r.prototype.stopLoadingSpinnerAnimation=function(){clearInterval(this.spinner.intervalId),this.spinner.intervalId=null,this.setGalleryTempHeight(this.$gallery.height()-this.getSpinnerHeight()),this.spinner.$el.detach()},r.prototype.startLoadingSpinnerAnimation=function(){var t=this.spinner,i=t.$el.find("span");clearInterval(t.intervalId),this.$gallery.append(t.$el),this.setGalleryTempHeight(this.offY+this.buildingRow.height+this.getSpinnerHeight()),t.intervalId=setInterval(function(){t.phase=this.yield.every))return void this.startImgAnalyzer(t)}else if("error"!==e.data("jg.loaded"))return}0 img, > a > img, > svg, > a > svg",triggerEvent:function(t){this.$gallery.trigger(t)}},l.fn.justifiedGallery=function(n){return this.each(function(t,i){var e=l(i);e.addClass("justified-gallery");var s=e.data("jg.controller");if(void 0===s){if(null!=n&&"object"!==l.type(n)){if("destroy"===n)return;throw"The argument must be an object"}s=new r(e,l.extend({},r.prototype.defaults,n)),e.data("jg.controller",s)}else if("norewind"===n);else{if("destroy"===n)return void s.destroy();s.updateSettings(n),s.rewind()}s.updateEntries("norewind"===n)&&s.init()})}}); -------------------------------------------------------------------------------- /source/js/lazyload.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * An jQuery | zepto plugin for lazy loading images. 3 | * author -> jieyou 4 | * see https://github.com/jieyou/lazyload 5 | * use some tuupola's code https://github.com/tuupola/jquery_lazyload (BSD) 6 | * use component's throttle https://github.com/component/throttle (MIT) 7 | */ 8 | !function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(window.jQuery||window.Zepto)}(function(t,e){var a,r,n=window,o=t(n),l={threshold:0,failure_limit:0,event:"scroll",effect:"show",effect_params:null,container:n,data_attribute:"original",data_srcset_attribute:"original-srcset",skip_invisible:!0,appear:i,load:i,vertical_only:!1,check_appear_throttle_time:300,url_rewriter_fn:i,no_fake_img_loader:!1,placeholder_data_img:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC",placeholder_real_img:"http://ditu.baidu.cn/yyfm/lazyload/0.0.1/img/placeholder.png"};function i(){}function c(t,e){return(e._$container==o?("innerHeight"in n?n.innerHeight:o.height())+o.scrollTop():e._$container.offset().top+e._$container.height())<=t.offset().top-e.threshold}function f(t,e){return(e._$container==o?o.scrollTop():e._$container.offset().top)>=t.offset().top+e.threshold+t.height()}function _(e,a){var r=0;e.each(function(l,i){var _=e.eq(l);if(!(_.width()<=0&&_.height()<=0||"none"===_.css("display")))if(a.vertical_only)if(f(_,a));else if(c(_,a)){if(++r>a.failure_limit)return!1}else d();else if(f(_,a)||function(e,a){return(a._$container==o?t.fn.scrollLeft?o.scrollLeft():n.pageXOffset:a._$container.offset().left)>=e.offset().left+a.threshold+e.width()}(_,a));else if(c(_,a)||function(e,a){return(a._$container==o?o.width()+(t.fn.scrollLeft?o.scrollLeft():n.pageXOffset):a._$container.offset().left+a._$container.width())<=e.offset().left-a.threshold}(_,a)){if(++r>a.failure_limit)return!1}else d();function d(){_.trigger("_lazyload_appear"),r=0}})}function d(t){return t.filter(function(e){return!t.eq(e).data("_lazyload_loadStarted")})}r=Object.prototype.toString,a=function(t){return r.call(t).replace("[object ","").replace("]","")},t.fn.hasOwnProperty("lazyload")||(t.fn.lazyload=function(e){var r,c,f,s=this;return t.isPlainObject(e)||(e={}),t.each(l,function(r,i){var c=a(e[r]);-1!=t.inArray(r,["threshold","failure_limit","check_appear_throttle_time"])?"String"==c?e[r]=parseInt(e[r],10):"Number"!=c&&(e[r]=i):"container"==r?(e.hasOwnProperty(r)?e[r]==n||e[r]==document?e._$container=o:e._$container=t(e[r]):e._$container=o,delete e.container):!l.hasOwnProperty(r)||e.hasOwnProperty(r)&&c==a(l[r])||(e[r]=i)}),r="scroll"==e.event,f=0==e.check_appear_throttle_time?_:function(t,e){var a,r,n,o,l=0;return function(){a=this,r=arguments;var t=new Date-l;return o||(t>=e?i():o=setTimeout(i,e-t)),n};function i(){o=0,l=+new Date,n=t.apply(a,r),a=null,r=null}}(_,e.check_appear_throttle_time),c=r||"scrollstart"==e.event||"scrollstop"==e.event,s.each(function(a,r){var n=this,o=s.eq(a),l=o.attr("src"),f=o.attr("data-"+e.data_attribute),_=e.url_rewriter_fn==i?f:e.url_rewriter_fn.call(n,o,f),u=o.attr("data-"+e.data_srcset_attribute),h=o.is("img");if(o.data("_lazyload_loadStarted")||l==_)return o.data("_lazyload_loadStarted",!0),void(s=d(s));o.data("_lazyload_loadStarted",!1),h&&!l&&o.one("error",function(){o.attr("src",e.placeholder_real_img)}).attr("src",e.placeholder_data_img),o.one("_lazyload_appear",function(){var a,r=t.isArray(e.effect_params);function l(){a&&o.hide(),h?(u&&o.attr("srcset",u),_&&o.attr("src",_)):o.css("background-image",'url("'+_+'")'),a&&o[e.effect].apply(o,r?e.effect_params:[]),s=d(s)}o.data("_lazyload_loadStarted")||(a="show"!=e.effect&&t.fn[e.effect]&&(!e.effect_params||r&&0==e.effect_params.length),e.appear!=i&&e.appear.call(n,o,s.length,e),o.data("_lazyload_loadStarted",!0),e.no_fake_img_loader||u?(e.load!=i&&o.one("load",function(){e.load.call(n,o,s.length,e)}),l()):t("").one("load",function(){l(),e.load!=i&&e.load.call(n,o,s.length,e)}).attr("src",_))}),c||o.on(e.event,function(){o.data("_lazyload_loadStarted")||o.trigger("_lazyload_appear")})}),c&&e._$container.on(e.event,function(){f(s,e)}),o.on("resize load",function(){f(s,e)}),t(function(){f(s,e)}),this})}); -------------------------------------------------------------------------------- /source/js/ocean.js: -------------------------------------------------------------------------------- 1 | (function ($) { 2 | // 3 | // Search ------------ 4 | var $searchWrap = $('.search-form-wrap'), 5 | isSearchAnim = false, 6 | searchAnimDuration = 200; 7 | 8 | var startSearchAnim = function () { 9 | isSearchAnim = true; 10 | }; 11 | 12 | var stopSearchAnim = function (callback) { 13 | setTimeout(function () { 14 | isSearchAnim = false; 15 | callback && callback(); 16 | }, searchAnimDuration); 17 | }; 18 | 19 | $('.nav-item-search').on('click', function () { 20 | if (isSearchAnim) return; 21 | startSearchAnim(); 22 | $searchWrap.addClass('on'); 23 | stopSearchAnim(function () { 24 | $('.local-search-input').focus(); 25 | }); 26 | }); 27 | 28 | $(document).mouseup(function (e) { 29 | var _con = $('.local-search'); 30 | if (!_con.is(e.target) && _con.has(e.target).length === 0) { 31 | $searchWrap.removeClass('on'); 32 | } 33 | }); 34 | 35 | // 36 | // 移动设备侦测 37 | var isMobile = { 38 | Android: function () { 39 | return navigator.userAgent.match(/Android/i); 40 | }, 41 | BlackBerry: function () { 42 | return navigator.userAgent.match(/BlackBerry/i); 43 | }, 44 | iOS: function () { 45 | return navigator.userAgent.match(/iPhone|iPad|iPod/i); 46 | }, 47 | Opera: function () { 48 | return navigator.userAgent.match(/Opera Mini/i); 49 | }, 50 | Windows: function () { 51 | return navigator.userAgent.match(/IEMobile/i); 52 | }, 53 | any: function () { 54 | return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows()); 55 | } 56 | }; 57 | 58 | // 59 | // 建议在移动端不初始化,其实 /search.xml 文件还挺大的, 60 | if ($('.local-search').size() && !isMobile.any()) { 61 | $.getScript('/js/search.js', function () { 62 | searchFunc("/search.xml", 'local-search-input', 'local-search-result'); 63 | }); 64 | } 65 | 66 | // 67 | // Share 68 | $('body').on('click', function () { 69 | $('.article-share-box.on').removeClass('on'); 70 | }).on('click', '.article-share-link', function (e) { 71 | e.stopPropagation(); 72 | 73 | var $this = $(this), 74 | url = $this.attr('data-url'), 75 | encodedUrl = encodeURIComponent(url), 76 | id = 'article-share-box-' + $this.attr('data-id'), 77 | offset = $this.offset(); 78 | 79 | if ($('#' + id).length) { 80 | var box = $('#' + id); 81 | 82 | if (box.hasClass('on')) { 83 | box.removeClass('on'); 84 | return; 85 | } 86 | } else { 87 | var html = [ 88 | '
', 89 | '', 90 | '
', 91 | '', 92 | '', 93 | '', 94 | '', 95 | '
', 96 | '
' 97 | ].join(''); 98 | 99 | var box = $(html); 100 | $('body').append(box); 101 | } 102 | $('.article-share-box.on').hide(); 103 | 104 | box.css({ 105 | top: offset.top + 25, 106 | left: offset.left 107 | }).addClass('on'); 108 | }).on('click', '.article-share-box', function (e) { 109 | e.stopPropagation(); 110 | }).on('click', '.article-share-box-input', function () { 111 | $(this).select(); 112 | }).on('click', '.article-share-box-link', function (e) { 113 | e.preventDefault(); 114 | e.stopPropagation(); 115 | 116 | window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); 117 | }); 118 | 119 | // 120 | // fancybox 121 | if ($.fancybox) { 122 | $('[data-fancybox]').fancybox({ 123 | protect: true 124 | }); 125 | } 126 | 127 | // 128 | // lazyload 129 | $("img.lazy").lazyload({ 130 | effect: "fadeIn" 131 | }); 132 | 133 | // 134 | // justifiedGallery 135 | $('#gallery').justifiedGallery({ 136 | rowHeight: 200, 137 | margins: 5 138 | }); 139 | 140 | // 141 | $(document).ready(function ($) { 142 | $('.anchor').click(function (event) { 143 | event.preventDefault(); 144 | $('html,body').animate({ scrollTop: $(this.hash).offset().top }, 'smooth'); 145 | }); 146 | }); 147 | 148 | // To top 149 | (function ($) { 150 | // When to show the scroll link 151 | // higher number = scroll link appears further down the page 152 | var upperLimit = 1000; 153 | 154 | // Our scroll link element 155 | var scrollElem = $('#totop'); 156 | 157 | // Scroll to top speed 158 | var scrollSpeed = 1600; 159 | 160 | // Show and hide the scroll to top link based on scroll position 161 | scrollElem.hide(); 162 | $(window).scroll(function () { 163 | var scrollTop = $(document).scrollTop(); 164 | if (scrollTop > upperLimit) { 165 | $(scrollElem).stop().fadeTo(300, 1); // fade back in 166 | } else { 167 | $(scrollElem).stop().fadeTo(300, 0); // fade out 168 | } 169 | }); 170 | 171 | // Scroll to top animation on click 172 | $(scrollElem).click(function () { 173 | $('html, body').animate({ scrollTop: 0 }, scrollSpeed); return false; 174 | }); 175 | })(jQuery); 176 | 177 | // Mobile nav 178 | var $content = $('.content'), 179 | $sidebar = $('.sidebar'), 180 | isMobileNavAnim = false, 181 | mobileNavAnimDuration = 200; 182 | 183 | var startMobileNavAnim = function () { 184 | isMobileNavAnim = true; 185 | }; 186 | 187 | var stopMobileNavAnim = function () { 188 | setTimeout(function () { 189 | isMobileNavAnim = false; 190 | }, mobileNavAnimDuration); 191 | }; 192 | 193 | $('.navbar-toggle').on('click', function () { 194 | if (isMobileNavAnim) return; 195 | startMobileNavAnim(); 196 | $content.toggleClass('on'); 197 | $sidebar.toggleClass('on'); 198 | stopMobileNavAnim(); 199 | }); 200 | 201 | $($content).on('click', function () { 202 | if (isMobileNavAnim || !$content.hasClass('on')) return; 203 | $content.removeClass('on'); 204 | $sidebar.removeClass('on'); 205 | }); 206 | 207 | })(jQuery); 208 | 209 | 210 | -------------------------------------------------------------------------------- /source/js/pace.min.js: -------------------------------------------------------------------------------- 1 | /*! pace 1.0.2 */ 2 | (function(){var a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X=[].slice,Y={}.hasOwnProperty,Z=function(a,b){function c(){this.constructor=a}for(var d in b)Y.call(b,d)&&(a[d]=b[d]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},$=[].indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(b in this&&this[b]===a)return b;return-1};for(u={catchupTime:100,initialRate:.03,minTime:250,ghostTime:100,maxProgressPerFrame:20,easeFactor:1.25,startOnPageLoad:!0,restartOnPushState:!0,restartOnRequestAfter:500,target:"body",elements:{checkInterval:100,selectors:["body"]},eventLag:{minSamples:10,sampleCount:3,lagThreshold:3},ajax:{trackMethods:["GET"],trackWebSockets:!0,ignoreURLs:[]}},C=function(){var a;return null!=(a="undefined"!=typeof performance&&null!==performance&&"function"==typeof performance.now?performance.now():void 0)?a:+new Date},E=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame,t=window.cancelAnimationFrame||window.mozCancelAnimationFrame,null==E&&(E=function(a){return setTimeout(a,50)},t=function(a){return clearTimeout(a)}),G=function(a){var b,c;return b=C(),(c=function(){var d;return d=C()-b,d>=33?(b=C(),a(d,function(){return E(c)})):setTimeout(c,33-d)})()},F=function(){var a,b,c;return c=arguments[0],b=arguments[1],a=3<=arguments.length?X.call(arguments,2):[],"function"==typeof c[b]?c[b].apply(c,a):c[b]},v=function(){var a,b,c,d,e,f,g;for(b=arguments[0],d=2<=arguments.length?X.call(arguments,1):[],f=0,g=d.length;g>f;f++)if(c=d[f])for(a in c)Y.call(c,a)&&(e=c[a],null!=b[a]&&"object"==typeof b[a]&&null!=e&&"object"==typeof e?v(b[a],e):b[a]=e);return b},q=function(a){var b,c,d,e,f;for(c=b=0,e=0,f=a.length;f>e;e++)d=a[e],c+=Math.abs(d),b++;return c/b},x=function(a,b){var c,d,e;if(null==a&&(a="options"),null==b&&(b=!0),e=document.querySelector("[data-pace-"+a+"]")){if(c=e.getAttribute("data-pace-"+a),!b)return c;try{return JSON.parse(c)}catch(f){return d=f,"undefined"!=typeof console&&null!==console?console.error("Error parsing inline pace options",d):void 0}}},g=function(){function a(){}return a.prototype.on=function(a,b,c,d){var e;return null==d&&(d=!1),null==this.bindings&&(this.bindings={}),null==(e=this.bindings)[a]&&(e[a]=[]),this.bindings[a].push({handler:b,ctx:c,once:d})},a.prototype.once=function(a,b,c){return this.on(a,b,c,!0)},a.prototype.off=function(a,b){var c,d,e;if(null!=(null!=(d=this.bindings)?d[a]:void 0)){if(null==b)return delete this.bindings[a];for(c=0,e=[];cQ;Q++)K=U[Q],D[K]===!0&&(D[K]=u[K]);i=function(a){function b(){return V=b.__super__.constructor.apply(this,arguments)}return Z(b,a),b}(Error),b=function(){function a(){this.progress=0}return a.prototype.getElement=function(){var a;if(null==this.el){if(a=document.querySelector(D.target),!a)throw new i;this.el=document.createElement("div"),this.el.className="pace pace-active",document.body.className=document.body.className.replace(/pace-done/g,""),document.body.className+=" pace-running",this.el.innerHTML='
\n
\n
\n
',null!=a.firstChild?a.insertBefore(this.el,a.firstChild):a.appendChild(this.el)}return this.el},a.prototype.finish=function(){var a;return a=this.getElement(),a.className=a.className.replace("pace-active",""),a.className+=" pace-inactive",document.body.className=document.body.className.replace("pace-running",""),document.body.className+=" pace-done"},a.prototype.update=function(a){return this.progress=a,this.render()},a.prototype.destroy=function(){try{this.getElement().parentNode.removeChild(this.getElement())}catch(a){i=a}return this.el=void 0},a.prototype.render=function(){var a,b,c,d,e,f,g;if(null==document.querySelector(D.target))return!1;for(a=this.getElement(),d="translate3d("+this.progress+"%, 0, 0)",g=["webkitTransform","msTransform","transform"],e=0,f=g.length;f>e;e++)b=g[e],a.children[0].style[b]=d;return(!this.lastRenderedProgress||this.lastRenderedProgress|0!==this.progress|0)&&(a.children[0].setAttribute("data-progress-text",""+(0|this.progress)+"%"),this.progress>=100?c="99":(c=this.progress<10?"0":"",c+=0|this.progress),a.children[0].setAttribute("data-progress",""+c)),this.lastRenderedProgress=this.progress},a.prototype.done=function(){return this.progress>=100},a}(),h=function(){function a(){this.bindings={}}return a.prototype.trigger=function(a,b){var c,d,e,f,g;if(null!=this.bindings[a]){for(f=this.bindings[a],g=[],d=0,e=f.length;e>d;d++)c=f[d],g.push(c.call(this,b));return g}},a.prototype.on=function(a,b){var c;return null==(c=this.bindings)[a]&&(c[a]=[]),this.bindings[a].push(b)},a}(),P=window.XMLHttpRequest,O=window.XDomainRequest,N=window.WebSocket,w=function(a,b){var c,d,e;e=[];for(d in b.prototype)try{null==a[d]&&"function"!=typeof b[d]?"function"==typeof Object.defineProperty?e.push(Object.defineProperty(a,d,{get:function(){return b.prototype[d]},configurable:!0,enumerable:!0})):e.push(a[d]=b.prototype[d]):e.push(void 0)}catch(f){c=f}return e},A=[],j.ignore=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("ignore"),c=b.apply(null,a),A.shift(),c},j.track=function(){var a,b,c;return b=arguments[0],a=2<=arguments.length?X.call(arguments,1):[],A.unshift("track"),c=b.apply(null,a),A.shift(),c},J=function(a){var b;if(null==a&&(a="GET"),"track"===A[0])return"force";if(!A.length&&D.ajax){if("socket"===a&&D.ajax.trackWebSockets)return!0;if(b=a.toUpperCase(),$.call(D.ajax.trackMethods,b)>=0)return!0}return!1},k=function(a){function b(){var a,c=this;b.__super__.constructor.apply(this,arguments),a=function(a){var b;return b=a.open,a.open=function(d,e,f){return J(d)&&c.trigger("request",{type:d,url:e,request:a}),b.apply(a,arguments)}},window.XMLHttpRequest=function(b){var c;return c=new P(b),a(c),c};try{w(window.XMLHttpRequest,P)}catch(d){}if(null!=O){window.XDomainRequest=function(){var b;return b=new O,a(b),b};try{w(window.XDomainRequest,O)}catch(d){}}if(null!=N&&D.ajax.trackWebSockets){window.WebSocket=function(a,b){var d;return d=null!=b?new N(a,b):new N(a),J("socket")&&c.trigger("request",{type:"socket",url:a,protocols:b,request:d}),d};try{w(window.WebSocket,N)}catch(d){}}}return Z(b,a),b}(h),R=null,y=function(){return null==R&&(R=new k),R},I=function(a){var b,c,d,e;for(e=D.ajax.ignoreURLs,c=0,d=e.length;d>c;c++)if(b=e[c],"string"==typeof b){if(-1!==a.indexOf(b))return!0}else if(b.test(a))return!0;return!1},y().on("request",function(b){var c,d,e,f,g;return f=b.type,e=b.request,g=b.url,I(g)?void 0:j.running||D.restartOnRequestAfter===!1&&"force"!==J(f)?void 0:(d=arguments,c=D.restartOnRequestAfter||0,"boolean"==typeof c&&(c=0),setTimeout(function(){var b,c,g,h,i,k;if(b="socket"===f?e.readyState<2:0<(h=e.readyState)&&4>h){for(j.restart(),i=j.sources,k=[],c=0,g=i.length;g>c;c++){if(K=i[c],K instanceof a){K.watch.apply(K,d);break}k.push(void 0)}return k}},c))}),a=function(){function a(){var a=this;this.elements=[],y().on("request",function(){return a.watch.apply(a,arguments)})}return a.prototype.watch=function(a){var b,c,d,e;return d=a.type,b=a.request,e=a.url,I(e)?void 0:(c="socket"===d?new n(b):new o(b),this.elements.push(c))},a}(),o=function(){function a(a){var b,c,d,e,f,g,h=this;if(this.progress=0,null!=window.ProgressEvent)for(c=null,a.addEventListener("progress",function(a){return a.lengthComputable?h.progress=100*a.loaded/a.total:h.progress=h.progress+(100-h.progress)/2},!1),g=["load","abort","timeout","error"],d=0,e=g.length;e>d;d++)b=g[d],a.addEventListener(b,function(){return h.progress=100},!1);else f=a.onreadystatechange,a.onreadystatechange=function(){var b;return 0===(b=a.readyState)||4===b?h.progress=100:3===a.readyState&&(h.progress=50),"function"==typeof f?f.apply(null,arguments):void 0}}return a}(),n=function(){function a(a){var b,c,d,e,f=this;for(this.progress=0,e=["error","open"],c=0,d=e.length;d>c;c++)b=e[c],a.addEventListener(b,function(){return f.progress=100},!1)}return a}(),d=function(){function a(a){var b,c,d,f;for(null==a&&(a={}),this.elements=[],null==a.selectors&&(a.selectors=[]),f=a.selectors,c=0,d=f.length;d>c;c++)b=f[c],this.elements.push(new e(b))}return a}(),e=function(){function a(a){this.selector=a,this.progress=0,this.check()}return a.prototype.check=function(){var a=this;return document.querySelector(this.selector)?this.done():setTimeout(function(){return a.check()},D.elements.checkInterval)},a.prototype.done=function(){return this.progress=100},a}(),c=function(){function a(){var a,b,c=this;this.progress=null!=(b=this.states[document.readyState])?b:100,a=document.onreadystatechange,document.onreadystatechange=function(){return null!=c.states[document.readyState]&&(c.progress=c.states[document.readyState]),"function"==typeof a?a.apply(null,arguments):void 0}}return a.prototype.states={loading:0,interactive:50,complete:100},a}(),f=function(){function a(){var a,b,c,d,e,f=this;this.progress=0,a=0,e=[],d=0,c=C(),b=setInterval(function(){var g;return g=C()-c-50,c=C(),e.push(g),e.length>D.eventLag.sampleCount&&e.shift(),a=q(e),++d>=D.eventLag.minSamples&&a=100&&(this.done=!0),b===this.last?this.sinceLastUpdate+=a:(this.sinceLastUpdate&&(this.rate=(b-this.last)/this.sinceLastUpdate),this.catchup=(b-this.progress)/D.catchupTime,this.sinceLastUpdate=0,this.last=b),b>this.progress&&(this.progress+=this.catchup*a),c=1-Math.pow(this.progress/100,D.easeFactor),this.progress+=c*this.rate*a,this.progress=Math.min(this.lastProgress+D.maxProgressPerFrame,this.progress),this.progress=Math.max(0,this.progress),this.progress=Math.min(100,this.progress),this.lastProgress=this.progress,this.progress},a}(),L=null,H=null,r=null,M=null,p=null,s=null,j.running=!1,z=function(){return D.restartOnPushState?j.restart():void 0},null!=window.history.pushState&&(T=window.history.pushState,window.history.pushState=function(){return z(),T.apply(window.history,arguments)}),null!=window.history.replaceState&&(W=window.history.replaceState,window.history.replaceState=function(){return z(),W.apply(window.history,arguments)}),l={ajax:a,elements:d,document:c,eventLag:f},(B=function(){var a,c,d,e,f,g,h,i;for(j.sources=L=[],g=["ajax","elements","document","eventLag"],c=0,e=g.length;e>c;c++)a=g[c],D[a]!==!1&&L.push(new l[a](D[a]));for(i=null!=(h=D.extraSources)?h:[],d=0,f=i.length;f>d;d++)K=i[d],L.push(new K(D));return j.bar=r=new b,H=[],M=new m})(),j.stop=function(){return j.trigger("stop"),j.running=!1,r.destroy(),s=!0,null!=p&&("function"==typeof t&&t(p),p=null),B()},j.restart=function(){return j.trigger("restart"),j.stop(),j.start()},j.go=function(){var a;return j.running=!0,r.render(),a=C(),s=!1,p=G(function(b,c){var d,e,f,g,h,i,k,l,n,o,p,q,t,u,v,w;for(l=100-r.progress,e=p=0,f=!0,i=q=0,u=L.length;u>q;i=++q)for(K=L[i],o=null!=H[i]?H[i]:H[i]=[],h=null!=(w=K.elements)?w:[K],k=t=0,v=h.length;v>t;k=++t)g=h[k],n=null!=o[k]?o[k]:o[k]=new m(g),f&=n.done,n.done||(e++,p+=n.tick(b));return d=p/e,r.update(M.tick(b,d)),r.done()||f||s?(r.update(100),j.trigger("done"),setTimeout(function(){return r.finish(),j.running=!1,j.trigger("hide")},Math.max(D.ghostTime,Math.max(D.minTime-(C()-a),0)))):c()})},j.start=function(a){v(D,a),j.running=!0;try{r.render()}catch(b){i=b}return document.querySelector(".pace")?(j.trigger("start"),j.go()):setTimeout(j.start,50)},"function"==typeof define&&define.amd?define(["pace"],function(){return j}):"object"==typeof exports?module.exports=j:D.startOnPageLoad&&j.start()}).call(this); -------------------------------------------------------------------------------- /source/js/search.js: -------------------------------------------------------------------------------- 1 | // A local search script with the help of [hexo-generator-search](https://github.com/PaicHyperionDev/hexo-generator-search) 2 | // Copyright (C) 2015 3 | // Joseph Pan 4 | // Shuhao Mao 5 | // This library is free software; you can redistribute it and/or modify 6 | // it under the terms of the GNU Lesser General Public License as 7 | // published by the Free Software Foundation; either version 2.1 of the 8 | // License, or (at your option) any later version. 9 | // 10 | // This library is distributed in the hope that it will be useful, but 11 | // WITHOUT ANY WARRANTY; without even the implied warranty of 12 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 | // Lesser General Public License for more details. 14 | // 15 | // You should have received a copy of the GNU Lesser General Public 16 | // License along with this library; if not, write to the Free Software 17 | // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 18 | // 02110-1301 USA 19 | // 20 | 21 | var searchFunc = function (path, search_id, content_id) { 22 | 'use strict'; 23 | var BTN = ""; 24 | $.ajax({ 25 | url: path, 26 | dataType: "xml", 27 | success: function (xmlResponse) { 28 | // get the contents from search data 29 | // var datas = $("entry", xmlResponse).map(function () { 30 | // return { 31 | // title: $("title", this).text(), 32 | // content: $("content", this).text(), 33 | // url: $("url", this).text() 34 | // }; 35 | // }).get(); 36 | 37 | // get the contents from search data 38 | // 基于 GitHub 用户 DrebinPeng 的修改 39 | var _div = document.createElement('div') // 此处修改 40 | var datas = $("entry", xmlResponse).map(function () { 41 | // 解决search.xml中的中文被转码为HTML实体的问题,即出现

因此上

这样的问题 42 | _div.innerHTML = $("content", this).text() // 此处修改 43 | return { 44 | title: $("title", this).text(), 45 | content: _div.innerHTML, // 此处修改 46 | url: $("url", this).text() 47 | }; 48 | }).get(); 49 | 50 | var $input = document.getElementById(search_id); 51 | var $resultContent = document.getElementById(content_id); 52 | 53 | $input.addEventListener('input', function () { 54 | var str = '
    '; 55 | var keywords = this.value.trim().toLowerCase().split(/[\s]+/); 56 | $resultContent.innerHTML = ""; 57 | if (this.value.trim().length <= 0) { 58 | return; 59 | } 60 | // perform local searching 61 | datas.forEach(function (data) { 62 | var isMatch = true; 63 | // var content_index = []; 64 | if (!data.title || data.title.trim() === '') { 65 | data.title = "Untitled"; 66 | } 67 | var data_title = data.title.trim().toLowerCase(); 68 | var data_content = data.content.trim().replace(/<[^>]+>/g, "").toLowerCase(); 69 | var data_url = data.url; 70 | var index_title = -1; 71 | var index_content = -1; 72 | var first_occur = -1; 73 | // only match artiles with not empty contents 74 | if (data_content !== '') { 75 | keywords.forEach(function (keyword, i) { 76 | index_title = data_title.indexOf(keyword); 77 | index_content = data_content.indexOf(keyword); 78 | 79 | if (index_title < 0 && index_content < 0) { 80 | isMatch = false; 81 | } else { 82 | if (index_content < 0) { 83 | index_content = 0; 84 | } 85 | if (i == 0) { 86 | first_occur = index_content; 87 | } 88 | // content_index.push({index_content:index_content, keyword_len:keyword_len}); 89 | } 90 | }); 91 | } else { 92 | isMatch = false; 93 | } 94 | // show search results 95 | if (isMatch) { 96 | str += "
  • " + data_title + ""; 97 | var content = data.content.trim().replace(/<[^>]+>/g, ""); 98 | if (first_occur >= 0) { 99 | // cut out 100 characters 100 | var start = first_occur - 20; 101 | var end = first_occur + 80; 102 | 103 | if (start < 0) { 104 | start = 0; 105 | } 106 | 107 | if (start == 0) { 108 | end = 100; 109 | } 110 | 111 | if (end > content.length) { 112 | end = content.length; 113 | } 114 | 115 | var match_content = content.substr(start, end); 116 | 117 | // highlight all keywords 118 | keywords.forEach(function (keyword) { 119 | var regS = new RegExp(keyword, "gi"); 120 | match_content = match_content.replace(regS, "" + keyword + ""); 121 | }); 122 | 123 | str += "

    " + match_content + "...

    " 124 | } 125 | str += "
  • "; 126 | } 127 | }); 128 | str += "
"; 129 | if (str.indexOf('
  • ') === -1) { 130 | return $resultContent.innerHTML = BTN + "

    没有找到内容,更换下搜索词试试吧~

    "; 131 | } 132 | $resultContent.innerHTML = BTN + str; 133 | }); 134 | } 135 | }); 136 | $(document).on('click', '#local-search-close', function () { 137 | $('#local-search-input').val(''); 138 | $('#local-search-result').html(''); 139 | }); 140 | }; -------------------------------------------------------------------------------- /source/js/tocbot.min.js: -------------------------------------------------------------------------------- 1 | (()=>{var e={163:e=>{e.exports=function(e){var t=[].forEach,n=[].some,o=document.body,l=!0,r=" ";function i(n,o){var l,c,a,d=o.appendChild((l=n,c=document.createElement("li"),a=document.createElement("a"),e.listItemClass&&c.setAttribute("class",e.listItemClass),e.onClick&&(a.onclick=e.onClick),e.includeTitleTags&&a.setAttribute("title",l.textContent),e.includeHtml&&l.childNodes.length?t.call(l.childNodes,(function(e){a.appendChild(e.cloneNode(!0))})):a.textContent=l.textContent,a.setAttribute("href",e.basePath+"#"+l.id),a.setAttribute("class",e.linkClass+r+"node-name--"+l.nodeName+r+e.extraLinkClasses),c.appendChild(a),c));if(n.children.length){var u=s(n.isCollapsed);n.children.forEach((function(e){i(e,u)})),d.appendChild(u)}}function s(t){var n=e.orderedList?"ol":"ul",o=document.createElement(n),l=e.listClass+r+e.extraListClasses;return t&&(l+=r+e.collapsibleClass,l+=r+e.isCollapsedClass),o.setAttribute("class",l),o}function c(t){var n=0;return t!==document.querySelector(e.contentSelector&&null!=t)&&(n=t.offsetTop,e.hasInnerContainers&&(n+=c(t.offsetParent))),n}function a(t){return-1!==t.className.indexOf(e.collapsibleClass)&&-1!==t.className.indexOf(e.isCollapsedClass)?(t.className=t.className.split(r+e.isCollapsedClass).join(""),a(t.parentNode.parentNode)):t}return{enableTocAnimation:function(){l=!0},disableTocAnimation:function(t){var n=t.target||t.srcElement;"string"==typeof n.className&&-1!==n.className.indexOf(e.linkClass)&&(l=!1)},render:function(e,t){var n=s(!1);t.forEach((function(e){i(e,n)}));var o=document.querySelector(e);if(null!==o)return o.firstChild&&o.removeChild(o.firstChild),0===t.length?o:o.appendChild(n)},updateToc:function(i){var s;s=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop,e.positionFixedSelector&&function(){var t;t=e.scrollContainer&&document.querySelector(e.scrollContainer)?document.querySelector(e.scrollContainer).scrollTop:document.documentElement.scrollTop||o.scrollTop;var n=document.querySelector(e.positionFixedSelector);"auto"===e.fixedSidebarOffset&&(e.fixedSidebarOffset=document.querySelector(e.tocSelector).offsetTop),t>e.fixedSidebarOffset?-1===n.className.indexOf(e.positionFixedClass)&&(n.className+=r+e.positionFixedClass):n.className=n.className.split(r+e.positionFixedClass).join("")}();var d,u=i;if(l&&null!==document.querySelector(e.tocSelector)&&u.length>0){n.call(u,(function(t,n){return c(t)>s+e.headingsOffset+10?(d=u[0===n?n:n-1],!0):n===u.length-1?(d=u[u.length-1],!0):void 0}));var f=document.querySelector(e.tocSelector).querySelectorAll("."+e.linkClass);t.call(f,(function(t){t.className=t.className.split(r+e.activeLinkClass).join("")}));var m=document.querySelector(e.tocSelector).querySelectorAll("."+e.listItemClass);t.call(m,(function(t){t.className=t.className.split(r+e.activeListItemClass).join("")}));var h=document.querySelector(e.tocSelector).querySelector("."+e.linkClass+".node-name--"+d.nodeName+'[href="'+e.basePath+"#"+d.id.replace(/([ #;&,.+*~':"!^$[\]()=>|/@])/g,"\\$1")+'"]');h&&-1===h.className.indexOf(e.activeLinkClass)&&(h.className+=r+e.activeLinkClass);var p=h.parentNode;p&&-1===p.className.indexOf(e.activeListItemClass)&&(p.className+=r+e.activeListItemClass);var C=document.querySelector(e.tocSelector).querySelectorAll("."+e.listClass+"."+e.collapsibleClass);t.call(C,(function(t){-1===t.className.indexOf(e.isCollapsedClass)&&(t.className+=r+e.isCollapsedClass)})),h.nextSibling&&-1!==h.nextSibling.className.indexOf(e.isCollapsedClass)&&(h.nextSibling.className=h.nextSibling.className.split(r+e.isCollapsedClass).join("")),a(h.parentNode.parentNode)}}}}},547:e=>{e.exports={tocSelector:".js-toc",contentSelector:".js-toc-content",headingSelector:"h1, h2, h3",ignoreSelector:".js-toc-ignore",hasInnerContainers:!1,linkClass:"toc-link",extraLinkClasses:"",activeLinkClass:"is-active-link",listClass:"toc-list",extraListClasses:"",isCollapsedClass:"is-collapsed",collapsibleClass:"is-collapsible",listItemClass:"toc-list-item",activeListItemClass:"is-active-li",collapseDepth:0,scrollSmooth:!0,scrollSmoothDuration:420,scrollSmoothOffset:0,scrollEndCallback:function(e){},headingsOffset:1,throttleTimeout:50,positionFixedSelector:null,positionFixedClass:"is-position-fixed",fixedSidebarOffset:"auto",includeHtml:!1,includeTitleTags:!1,onClick:function(e){},orderedList:!0,scrollContainer:null,skipRendering:!1,headingLabelCallback:!1,ignoreHiddenElements:!1,headingObjectCallback:null,basePath:"",disableTocScrollSync:!1}},971:function(e,t,n){var o,l,r;l=[],void 0===(r="function"==typeof(o=function(e){"use strict";var t,o,l,r=n(547),i={},s={},c=n(163),a=n(279),d=n(938),u=!!(e&&e.document&&e.document.querySelector&&e.addEventListener);if("undefined"!=typeof window||u){var f=Object.prototype.hasOwnProperty;return s.destroy=function(){if(!i.skipRendering)try{document.querySelector(i.tocSelector).innerHTML=""}catch(e){console.warn("Element not found: "+i.tocSelector)}i.scrollContainer&&document.querySelector(i.scrollContainer)?(document.querySelector(i.scrollContainer).removeEventListener("scroll",this._scrollListener,!1),document.querySelector(i.scrollContainer).removeEventListener("resize",this._scrollListener,!1),t&&document.querySelector(i.scrollContainer).removeEventListener("click",this._clickListener,!1)):(document.removeEventListener("scroll",this._scrollListener,!1),document.removeEventListener("resize",this._scrollListener,!1),t&&document.removeEventListener("click",this._clickListener,!1))},s.init=function(e){if(u&&(i=function(){for(var e={},t=0;t{e.exports=function(e){var t=[].reduce;function n(e){return e[e.length-1]}function o(e){return+e.nodeName.toUpperCase().replace("H","")}function l(t){if(!(t instanceof window.HTMLElement))return t;if(e.ignoreHiddenElements&&(!t.offsetHeight||!t.offsetParent))return null;var n={id:t.id,children:[],nodeName:t.nodeName,headingLevel:o(t),textContent:e.headingLabelCallback?String(e.headingLabelCallback(t.textContent)):t.textContent.trim()};return e.includeHtml&&(n.childNodes=t.childNodes),e.headingObjectCallback?e.headingObjectCallback(n,t):n}return{nestHeadingsArray:function(o){return t.call(o,(function(t,o){var r=l(o);return r&&function(t,o){for(var r=l(t),i=r.headingLevel,s=o,c=n(s),a=i-(c?c.headingLevel:0);a>0;)(c=n(s))&&void 0!==c.children&&(s=c.children),a--;i>=e.collapseDepth&&(r.isCollapsed=!0),s.push(r)}(r,t.nest),t}),{nest:[]})},selectHeadings:function(t,n){var o=n;e.ignoreSelector&&(o=n.split(",").map((function(t){return t.trim()+":not("+e.ignoreSelector+")"})));try{return document.querySelector(t).querySelectorAll(o)}catch(e){return console.warn("Element not found: "+t),null}}}}},374:(e,t)=>{t.initSmoothScrolling=function(e){document.documentElement.style;var t=e.duration,n=e.offset,o=location.hash?l(location.href):location.href;function l(e){return e.slice(0,e.lastIndexOf("#"))}document.body.addEventListener("click",(function(r){var i;"a"!==(i=r.target).tagName.toLowerCase()||!(i.hash.length>0||"#"===i.href.charAt(i.href.length-1))||l(i.href)!==o&&l(i.href)+"#"!==o||r.target.className.indexOf("no-smooth-scroll")>-1||"#"===r.target.href.charAt(r.target.href.length-2)&&"!"===r.target.href.charAt(r.target.href.length-1)||-1===r.target.className.indexOf(e.linkClass)||function(e,t){var n,o,l=window.pageYOffset,r={duration:t.duration,offset:t.offset||0,callback:t.callback,easing:t.easing||function(e,t,n,o){return(e/=o/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}},i=document.querySelector('[id="'+decodeURI(e).split("#").join("")+'"]')||document.querySelector('[id="'+e.split("#").join("")+'"]'),s="string"==typeof e?r.offset+(e?i&&i.getBoundingClientRect().top||0:-(document.documentElement.scrollTop||document.body.scrollTop)):e,c="function"==typeof r.duration?r.duration(s):r.duration;function a(e){o=e-n,window.scrollTo(0,r.easing(o,l,s,c)),o{e.exports=function(e){var t=document.querySelector(e.tocSelector);if(t&&t.scrollHeight>t.clientHeight){var n=t.querySelector("."+e.activeListItemClass);n&&(t.scrollTop=n.offsetTop)}}}},t={};function n(o){var l=t[o];if(void 0!==l)return l.exports;var r=t[o]={exports:{}};return e[o].call(r.exports,r,r.exports,n),r.exports}n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n(971)})(); --------------------------------------------------------------------------------