├── .gitignore ├── .gitlab-ci.yml ├── .npmignore ├── LICENSE ├── README.md ├── deploy.sh ├── docs ├── 2019 │ └── 10 │ │ ├── 11 │ │ └── README │ │ │ └── index.html │ │ ├── 16 │ │ └── README │ │ │ └── index.html │ │ └── 09 │ │ └── hello-world │ │ └── index.html ├── .gitignore ├── .nojekyll ├── _config.yml ├── archives │ ├── 2019 │ │ ├── 10 │ │ │ └── index.html │ │ └── index.html │ └── index.html ├── css │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── images │ │ └── banner.jpg │ └── style.css ├── fancybox │ ├── blank.gif │ ├── fancybox_loading.gif │ ├── fancybox_loading@2x.gif │ ├── fancybox_overlay.png │ ├── fancybox_sprite.png │ ├── fancybox_sprite@2x.png │ ├── helpers │ │ ├── fancybox_buttons.png │ │ ├── jquery.fancybox-buttons.css │ │ ├── jquery.fancybox-buttons.js │ │ ├── jquery.fancybox-media.js │ │ ├── jquery.fancybox-thumbs.css │ │ └── jquery.fancybox-thumbs.js │ ├── jquery.fancybox.css │ ├── jquery.fancybox.js │ └── jquery.fancybox.pack.js ├── index.html ├── js │ └── script.js ├── package.json ├── scaffolds │ ├── draft.md │ ├── page.md │ └── post.md ├── source │ └── _posts │ │ └── README.md └── themes │ └── landscape │ ├── .gitignore │ ├── Gruntfile.js │ ├── 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 │ │ ├── gauges-analytics.ejs │ │ ├── google-analytics.ejs │ │ ├── head.ejs │ │ ├── header.ejs │ │ ├── mobile-nav.ejs │ │ ├── post │ │ │ ├── category.ejs │ │ │ ├── date.ejs │ │ │ ├── gallery.ejs │ │ │ ├── nav.ejs │ │ │ ├── tag.ejs │ │ │ └── title.ejs │ │ └── sidebar.ejs │ ├── _widget │ │ ├── archive.ejs │ │ ├── category.ejs │ │ ├── recent_posts.ejs │ │ ├── tag.ejs │ │ └── tagcloud.ejs │ ├── archive.ejs │ ├── category.ejs │ ├── index.ejs │ ├── layout.ejs │ ├── page.ejs │ ├── post.ejs │ └── tag.ejs │ ├── package.json │ ├── scripts │ └── fancybox.js │ └── source │ ├── css │ ├── _extend.styl │ ├── _partial │ │ ├── archive.styl │ │ ├── article.styl │ │ ├── comment.styl │ │ ├── footer.styl │ │ ├── header.styl │ │ ├── highlight.styl │ │ ├── mobile.styl │ │ ├── sidebar-aside.styl │ │ ├── sidebar-bottom.styl │ │ └── sidebar.styl │ ├── _util │ │ ├── grid.styl │ │ └── mixin.styl │ ├── _variables.styl │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── images │ │ └── banner.jpg │ └── style.styl │ ├── fancybox │ ├── blank.gif │ ├── fancybox_loading.gif │ ├── fancybox_loading@2x.gif │ ├── fancybox_overlay.png │ ├── fancybox_sprite.png │ ├── fancybox_sprite@2x.png │ ├── helpers │ │ ├── fancybox_buttons.png │ │ ├── jquery.fancybox-buttons.css │ │ ├── jquery.fancybox-buttons.js │ │ ├── jquery.fancybox-media.js │ │ ├── jquery.fancybox-thumbs.css │ │ └── jquery.fancybox-thumbs.js │ ├── jquery.fancybox.css │ ├── jquery.fancybox.js │ └── jquery.fancybox.pack.js │ └── js │ └── script.js ├── example ├── .gitignore ├── _config.yml ├── package.json ├── scaffolds │ ├── draft.md │ ├── page.md │ └── post.md ├── source │ └── _posts │ │ └── hello-world.md └── themes │ └── landscape │ ├── .gitignore │ ├── Gruntfile.js │ ├── 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 │ │ ├── gauges-analytics.ejs │ │ ├── google-analytics.ejs │ │ ├── head.ejs │ │ ├── header.ejs │ │ ├── mobile-nav.ejs │ │ ├── post │ │ │ ├── category.ejs │ │ │ ├── date.ejs │ │ │ ├── gallery.ejs │ │ │ ├── nav.ejs │ │ │ ├── tag.ejs │ │ │ └── title.ejs │ │ └── sidebar.ejs │ ├── _widget │ │ ├── archive.ejs │ │ ├── category.ejs │ │ ├── recent_posts.ejs │ │ ├── tag.ejs │ │ └── tagcloud.ejs │ ├── archive.ejs │ ├── category.ejs │ ├── index.ejs │ ├── layout.ejs │ ├── page.ejs │ ├── post.ejs │ └── tag.ejs │ ├── package.json │ ├── scripts │ └── fancybox.js │ └── source │ ├── css │ ├── _extend.styl │ ├── _partial │ │ ├── archive.styl │ │ ├── article.styl │ │ ├── comment.styl │ │ ├── footer.styl │ │ ├── header.styl │ │ ├── highlight.styl │ │ ├── mobile.styl │ │ ├── sidebar-aside.styl │ │ ├── sidebar-bottom.styl │ │ └── sidebar.styl │ ├── _util │ │ ├── grid.styl │ │ └── mixin.styl │ ├── _variables.styl │ ├── fonts │ │ ├── FontAwesome.otf │ │ ├── fontawesome-webfont.eot │ │ ├── fontawesome-webfont.svg │ │ ├── fontawesome-webfont.ttf │ │ └── fontawesome-webfont.woff │ ├── images │ │ └── banner.jpg │ └── style.styl │ ├── fancybox │ ├── blank.gif │ ├── fancybox_loading.gif │ ├── fancybox_loading@2x.gif │ ├── fancybox_overlay.png │ ├── fancybox_sprite.png │ ├── fancybox_sprite@2x.png │ ├── helpers │ │ ├── fancybox_buttons.png │ │ ├── jquery.fancybox-buttons.css │ │ ├── jquery.fancybox-buttons.js │ │ ├── jquery.fancybox-media.js │ │ ├── jquery.fancybox-thumbs.css │ │ └── jquery.fancybox-thumbs.js │ ├── jquery.fancybox.css │ ├── jquery.fancybox.js │ └── jquery.fancybox.pack.js │ └── js │ └── script.js ├── gitalk-use-preview.png ├── index.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/node,macos,windows,gitbook,sublimetext 2 | # Edit at https://www.gitignore.io/?templates=node,macos,windows,gitbook,sublimetext 3 | 4 | # Node rules: 5 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 6 | .grunt 7 | 8 | # package-lock.json 9 | package-lock.json 10 | 11 | ## Dependency directory 12 | docs/node_modules 13 | docs/public 14 | 15 | ## Dependency directory 16 | example/node_modules 17 | example/public 18 | 19 | ### macOS ### 20 | # General 21 | .DS_Store 22 | .AppleDouble 23 | .LSOverride 24 | 25 | # Icon must end with two \r 26 | Icon 27 | 28 | # Thumbnails 29 | ._* 30 | 31 | # Files that might appear in the root of a volume 32 | .DocumentRevisions-V100 33 | .fseventsd 34 | .Spotlight-V100 35 | .TemporaryItems 36 | .Trashes 37 | .VolumeIcon.icns 38 | .com.apple.timemachine.donotpresent 39 | 40 | # Directories potentially created on remote AFP share 41 | .AppleDB 42 | .AppleDesktop 43 | Network Trash Folder 44 | Temporary Items 45 | .apdisk 46 | 47 | ### Node ### 48 | # Logs 49 | logs 50 | *.log 51 | npm-debug.log* 52 | yarn-debug.log* 53 | yarn-error.log* 54 | lerna-debug.log* 55 | 56 | # Diagnostic reports (https://nodejs.org/api/report.html) 57 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 58 | 59 | # Runtime data 60 | pids 61 | *.pid 62 | *.seed 63 | *.pid.lock 64 | 65 | # Directory for instrumented libs generated by jscoverage/JSCover 66 | lib-cov 67 | 68 | # Coverage directory used by tools like istanbul 69 | coverage 70 | *.lcov 71 | 72 | # nyc test coverage 73 | .nyc_output 74 | 75 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 76 | 77 | # Bower dependency directory (https://bower.io/) 78 | bower_components 79 | 80 | # node-waf configuration 81 | .lock-wscript 82 | 83 | # Compiled binary addons (https://nodejs.org/api/addons.html) 84 | build/Release 85 | 86 | # Dependency directories 87 | node_modules/ 88 | jspm_packages/ 89 | 90 | # TypeScript v1 declaration files 91 | typings/ 92 | 93 | # TypeScript cache 94 | *.tsbuildinfo 95 | 96 | # Optional npm cache directory 97 | .npm 98 | 99 | # Optional eslint cache 100 | .eslintcache 101 | 102 | # Optional REPL history 103 | .node_repl_history 104 | 105 | # Output of 'npm pack' 106 | *.tgz 107 | 108 | # Yarn Integrity file 109 | .yarn-integrity 110 | 111 | # dotenv environment variables file 112 | .env 113 | .env.test 114 | 115 | # parcel-bundler cache (https://parceljs.org/) 116 | .cache 117 | 118 | # next.js build output 119 | .next 120 | 121 | # nuxt.js build output 122 | .nuxt 123 | 124 | # react / gatsby 125 | public/ 126 | 127 | # vuepress build output 128 | .vuepress/dist 129 | 130 | # Serverless directories 131 | .serverless/ 132 | 133 | # FuseBox cache 134 | .fusebox/ 135 | 136 | # DynamoDB Local files 137 | .dynamodb/ 138 | 139 | ### SublimeText ### 140 | # Cache files for Sublime Text 141 | *.tmlanguage.cache 142 | *.tmPreferences.cache 143 | *.stTheme.cache 144 | 145 | # Workspace files are user-specific 146 | *.sublime-workspace 147 | 148 | # Project files should be checked into the repository, unless a significant 149 | # proportion of contributors will probably not be using Sublime Text 150 | # *.sublime-project 151 | 152 | # SFTP configuration file 153 | sftp-config.json 154 | 155 | # Package control specific files 156 | Package Control.last-run 157 | Package Control.ca-list 158 | Package Control.ca-bundle 159 | Package Control.system-ca-bundle 160 | Package Control.cache/ 161 | Package Control.ca-certs/ 162 | Package Control.merged-ca-bundle 163 | Package Control.user-ca-bundle 164 | oscrypto-ca-bundle.crt 165 | bh_unicode_properties.cache 166 | 167 | # Sublime-github package stores a github token in this file 168 | # https://packagecontrol.io/packages/sublime-github 169 | GitHub.sublime-settings 170 | 171 | ### Windows ### 172 | # Windows thumbnail cache files 173 | Thumbs.db 174 | Thumbs.db:encryptable 175 | ehthumbs.db 176 | ehthumbs_vista.db 177 | 178 | # Dump file 179 | *.stackdump 180 | 181 | # Folder config file 182 | [Dd]esktop.ini 183 | 184 | # Recycle Bin used on file shares 185 | $RECYCLE.BIN/ 186 | 187 | # Windows Installer files 188 | *.cab 189 | *.msi 190 | *.msix 191 | *.msm 192 | *.msp 193 | 194 | # Windows shortcuts 195 | *.lnk 196 | 197 | # End of https://www.gitignore.io/api/node,macos,windows,gitbook,sublimetext -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | pages: 2 | stage: deploy 3 | script: 4 | - cd docs 5 | - tar -zcvf ./public.tar.gz ./* 6 | - cd .. 7 | - mkdir ./public 8 | - tar -zxvf ./docs/public.tar.gz -C ./public 9 | - rm -rf ./docs/public.tar.gz 10 | artifacts: 11 | paths: 12 | - public 13 | only: 14 | - master -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Created by https://www.gitignore.io/api/node,macos,windows,gitbook,sublimetext 2 | # Edit at https://www.gitignore.io/?templates=node,macos,windows,gitbook,sublimetext 3 | 4 | # Node rules: 5 | ## Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 6 | .grunt 7 | 8 | ## Dependency directory 9 | ## Commenting this out is preferred by some people, see 10 | ## https://docs.npmjs.com/misc/faq#should-i-check-my-node_modules-folder-into-git 11 | node_modules 12 | 13 | # package-lock.json 14 | package-lock.json 15 | 16 | ## Dependency directory 17 | docs/ 18 | 19 | ## Dependency directory 20 | example/ 21 | 22 | ### macOS ### 23 | # General 24 | .DS_Store 25 | .AppleDouble 26 | .LSOverride 27 | 28 | # Icon must end with two \r 29 | Icon 30 | 31 | # Thumbnails 32 | ._* 33 | 34 | # Files that might appear in the root of a volume 35 | .DocumentRevisions-V100 36 | .fseventsd 37 | .Spotlight-V100 38 | .TemporaryItems 39 | .Trashes 40 | .VolumeIcon.icns 41 | .com.apple.timemachine.donotpresent 42 | 43 | # Directories potentially created on remote AFP share 44 | .AppleDB 45 | .AppleDesktop 46 | Network Trash Folder 47 | Temporary Items 48 | .apdisk 49 | 50 | ### Node ### 51 | # Logs 52 | logs 53 | *.log 54 | npm-debug.log* 55 | yarn-debug.log* 56 | yarn-error.log* 57 | lerna-debug.log* 58 | 59 | # Diagnostic reports (https://nodejs.org/api/report.html) 60 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 61 | 62 | # Runtime data 63 | pids 64 | *.pid 65 | *.seed 66 | *.pid.lock 67 | 68 | # Directory for instrumented libs generated by jscoverage/JSCover 69 | lib-cov 70 | 71 | # Coverage directory used by tools like istanbul 72 | coverage 73 | *.lcov 74 | 75 | # nyc test coverage 76 | .nyc_output 77 | 78 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 79 | 80 | # Bower dependency directory (https://bower.io/) 81 | bower_components 82 | 83 | # node-waf configuration 84 | .lock-wscript 85 | 86 | # Compiled binary addons (https://nodejs.org/api/addons.html) 87 | build/Release 88 | 89 | # Dependency directories 90 | node_modules/ 91 | jspm_packages/ 92 | 93 | # TypeScript v1 declaration files 94 | typings/ 95 | 96 | # TypeScript cache 97 | *.tsbuildinfo 98 | 99 | # Optional npm cache directory 100 | .npm 101 | 102 | # Optional eslint cache 103 | .eslintcache 104 | 105 | # Optional REPL history 106 | .node_repl_history 107 | 108 | # Output of 'npm pack' 109 | *.tgz 110 | 111 | # Yarn Integrity file 112 | .yarn-integrity 113 | 114 | # dotenv environment variables file 115 | .env 116 | .env.test 117 | 118 | # parcel-bundler cache (https://parceljs.org/) 119 | .cache 120 | 121 | # next.js build output 122 | .next 123 | 124 | # nuxt.js build output 125 | .nuxt 126 | 127 | # react / gatsby 128 | public/ 129 | 130 | # vuepress build output 131 | .vuepress/dist 132 | 133 | # Serverless directories 134 | .serverless/ 135 | 136 | # FuseBox cache 137 | .fusebox/ 138 | 139 | # DynamoDB Local files 140 | .dynamodb/ 141 | 142 | ### SublimeText ### 143 | # Cache files for Sublime Text 144 | *.tmlanguage.cache 145 | *.tmPreferences.cache 146 | *.stTheme.cache 147 | 148 | # Workspace files are user-specific 149 | *.sublime-workspace 150 | 151 | # Project files should be checked into the repository, unless a significant 152 | # proportion of contributors will probably not be using Sublime Text 153 | # *.sublime-project 154 | 155 | # SFTP configuration file 156 | sftp-config.json 157 | 158 | # Package control specific files 159 | Package Control.last-run 160 | Package Control.ca-list 161 | Package Control.ca-bundle 162 | Package Control.system-ca-bundle 163 | Package Control.cache/ 164 | Package Control.ca-certs/ 165 | Package Control.merged-ca-bundle 166 | Package Control.user-ca-bundle 167 | oscrypto-ca-bundle.crt 168 | bh_unicode_properties.cache 169 | 170 | # Sublime-github package stores a github token in this file 171 | # https://packagecontrol.io/packages/sublime-github 172 | GitHub.sublime-settings 173 | 174 | ### Windows ### 175 | # Windows thumbnail cache files 176 | Thumbs.db 177 | Thumbs.db:encryptable 178 | ehthumbs.db 179 | ehthumbs_vista.db 180 | 181 | # Dump file 182 | *.stackdump 183 | 184 | # Folder config file 185 | [Dd]esktop.ini 186 | 187 | # Recycle Bin used on file shares 188 | $RECYCLE.BIN/ 189 | 190 | # Windows Installer files 191 | *.cab 192 | *.msi 193 | *.msix 194 | *.msm 195 | *.msp 196 | 197 | # Windows shortcuts 198 | *.lnk 199 | 200 | # End of https://www.gitignore.io/api/node,macos,windows,gitbook,sublimetext -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 snowdreams1006 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 欢迎访问 hexo-plugin-gitalk 官网 👋 2 | 3 | [![npm:version](https://img.shields.io/npm/v/hexo-plugin-gitalk.svg)](https://www.npmjs.com/package/hexo-plugin-gitalk) 4 | [![npm:download](https://img.shields.io/npm/dt/hexo-plugin-gitalk.svg)](https://www.npmjs.com/package/hexo-plugin-gitalk) 5 | [![github:documentation](https://img.shields.io/badge/documentation-yes-brightgreen.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk#readme) 6 | [![github:maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk/graphs/commit-activity) 7 | [![npm:license](https://img.shields.io/npm/l/hexo-plugin-gitalk.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk/blob/master/LICENSE) 8 | [![github:snodreams1006](https://img.shields.io/badge/github-snowdreams1006-brightgreen.svg)](https://github.com/snowdreams1006) 9 | [![微信公众号:雪之梦技术驿站-brightgreen.svg](https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7-%E9%9B%AA%E4%B9%8B%E6%A2%A6%E6%8A%80%E6%9C%AF%E9%A9%BF%E7%AB%99-brightgreen.svg)](https://snowdreams1006.github.io/snowdreams1006-wechat-public.jpeg) 10 | 11 | > Hexo 整合 gitalk 组件实现博客评论功能 12 | 13 | ### 🏠 [主页](https://github.com/snowdreams1006/hexo-plugin-gitalk#readme) 14 | 15 | - Github : [https://snowdreams1006.github.io/hexo-plugin-gitalk/](https://snowdreams1006.github.io/hexo-plugin-gitalk/) 16 | - Gitee : [https://snowdreams1006.gitee.io/hexo-plugin-gitalk/](https://snowdreams1006.gitee.io/hexo-plugin-gitalk/) 17 | - Gitlab : [https://snowdreams1006.gitlab.io/hexo-plugin-gitalk/](https://snowdreams1006.gitlab.io/hexo-plugin-gitalk/) 18 | 19 | ## 效果 20 | 21 | ![gitalk-use-preview.png](gitalk-use-preview.png) 22 | 23 | ## 用法 24 | 25 | ### Step #1 - 更新 `_config.yml` 配置文件 26 | 27 | 在 `_config.yml` 配置文件中,配置 `gitalk` 插件相关信息,详情见 [gitalk](https://github.com/gitalk/gitalk). 28 | 29 | ```yml 30 | plugins: 31 | gitalk: 32 | clientID: GitHub Application Client ID 33 | clientSecret: GitHub Application Client Secret 34 | repo: GitHub repo 35 | owner: GitHub repo owner 36 | admin: 37 | - GitHub repo owner and collaborators, only these guys can initialize github issues 38 | distractionFreeMode: false 39 | ``` 40 | 41 | > 注意: 前往 [gitalk](https://github.com/gitalk/gitalk) 申请开通 `gitalk` 功能后,**一定要替换成自己的相关配置**! 42 | 43 | 其中,主要配置参数含义如下: 44 | 45 | - **clientID** `String` 46 | 47 | **必须**. GitHub Application Client ID. 48 | 49 | - **clientSecret** `String` 50 | 51 | **必须**. GitHub Application Client Secret. 52 | 53 | - **repo** `String` 54 | 55 | **必须**. GitHub repository. 56 | 57 | - **owner** `String` 58 | 59 | **必须**. GitHub repository 所有者,可以是个人或者组织。 60 | 61 | - **admin** `Array` 62 | 63 | **必须**. GitHub repository 的所有者和合作者 (对这个 repository 有写权限的用户)。 64 | 65 | - **distractionFreeMode** `Boolean` 66 | 67 | Default: false。 68 | 69 | 类似Facebook评论框的全屏遮罩效果. 70 | 71 | ### Step #2 - 运行 hexo 相关命令 72 | 73 | - 运行 `npm install` 命令安装到本地项目 74 | 75 | ```bash 76 | $ npm install hexo-plugin-gitalk --save 77 | ``` 78 | 79 | - 运行 `hexo generate` 命令构建本地项目或者 `hexo server` 启动本地服务. 80 | 81 | ```bash 82 | $ hexo generate 83 | ``` 84 | 85 | 或者 86 | 87 | ```bash 88 | $ hexo server 89 | ``` 90 | 91 | > 注意: 本地测试时无法正常运行,必须是线上环境才会生效,且必须由管理员登录github进行初始化. 92 | 93 | ## 示例 94 | 95 | 不仅 [hexo-plugin-gitalk](https://github.com/snowdreams1006/hexo-plugin-gitalk) **官方文档**已整合 `gitalk` 版权保护插件,此外还提供了示例项目,详情参考 `example` 目录. 96 | 97 | - [官方文档](https://github.com/snowdreams1006/hexo-plugin-gitalk/tree/master/docs) 98 | - [官方示例](https://github.com/snowdreams1006/hexo-plugin-gitalk/tree/master/example) 99 | 100 | ## 作者 101 | 102 | 👤 **snowdreams1006** 103 | 104 | - Github: [@snowdreams1006](https://github.com/snowdreams1006) 105 | - Email: [snowdreams1006@163.com](mailto:snowdreams1006@163.com) 106 | 107 | ## 🤝 贡献 108 | 109 | 如果你想贡献自己的一份力量,欢迎提交 [`Issues`](https://github.com/snowdreams1006/hexo-plugin-gitalk/issues) 或者 `Pull Request` 请求! 110 | 111 | ## 支持 112 | 113 | 如果本项目对你有所帮助,欢迎 ⭐️ [hexo-plugin-gitalk](https://github.com/snowdreams1006/hexo-plugin-gitalk) 项目,感谢你的支持与认可! 114 | 115 | ## 📝 版权 116 | 117 | Copyright © 2019 [snowdreams1006](https://github.com/snowdreams1006). 118 | 119 | This project is [MIT](https://github.com/snowdreams1006/hexo-plugin-gitalk/blob/master/LICENSE) licensed. -------------------------------------------------------------------------------- /deploy.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | # prepare for generate docs 4 | cd docs 5 | 6 | # re-generate docs 7 | hexo clean && hexo generate 8 | 9 | # copy to docs 10 | cp -rf public/ . 11 | 12 | # prepare for push 13 | cd .. 14 | 15 | # add commits 16 | git add . 17 | 18 | # commit 19 | git commit -m "auto deploy website" 20 | 21 | # push to github and others 22 | git push origin master -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | db.json 4 | *.log 5 | node_modules/ 6 | public/ 7 | .deploy*/ -------------------------------------------------------------------------------- /docs/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/.nojekyll -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | # Hexo Configuration 2 | ## Docs: https://hexo.io/docs/configuration.html 3 | ## Source: https://github.com/hexojs/hexo/ 4 | 5 | # Site 6 | title: gitalk 插件官方文档 7 | subtitle: hexo-plugin-gitalk 8 | description: hexo-plugin-gitalk 插件官方文档 9 | keywords: hexo-plugin-gitalk,gitbook-plugin-mygitalk,gitalk,gitment,discuss,comment,issues,github,hexo,gitbook 10 | author: snowdreams1006 11 | language: zh-CN 12 | timezone: Asia/Shanghai 13 | 14 | # URL 15 | ## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' 16 | url: https://snowdreams1006.github.io/hexo-plugin-gitalk 17 | root: /hexo-plugin-gitalk/ 18 | permalink: :year/:month/:day/:title/ 19 | permalink_defaults: 20 | 21 | # Directory 22 | source_dir: source 23 | public_dir: public 24 | tag_dir: tags 25 | archive_dir: archives 26 | category_dir: categories 27 | code_dir: downloads/code 28 | i18n_dir: :lang 29 | skip_render: 30 | 31 | # Writing 32 | new_post_name: :title.md # File name of new posts 33 | default_layout: post 34 | titlecase: false # Transform title into titlecase 35 | external_link: true # Open external links in new tab 36 | filename_case: 0 37 | render_drafts: false 38 | post_asset_folder: false 39 | relative_link: false 40 | future: true 41 | highlight: 42 | enable: true 43 | line_number: true 44 | auto_detect: false 45 | tab_replace: 46 | 47 | # Home page setting 48 | # path: Root path for your blogs index page. (default = '') 49 | # per_page: Posts displayed per page. (0 = disable pagination) 50 | # order_by: Posts order. (Order by date descending by default) 51 | index_generator: 52 | path: '' 53 | per_page: 10 54 | order_by: -date 55 | 56 | # Category & Tag 57 | default_category: uncategorized 58 | category_map: 59 | tag_map: 60 | 61 | # Date / Time format 62 | ## Hexo uses Moment.js to parse and display date 63 | ## You can customize the date format as defined in 64 | ## http://momentjs.com/docs/#/displaying/format/ 65 | date_format: YYYY-MM-DD 66 | time_format: HH:mm:ss 67 | 68 | # Pagination 69 | ## Set per_page to 0 to disable pagination 70 | per_page: 10 71 | pagination_dir: page 72 | 73 | # Extensions 74 | ## Plugins: https://hexo.io/plugins/ 75 | plugins: 76 | gitalk: 77 | clientID: 3f62415a283d19cbd696 78 | clientSecret: aed0e1db0620bf5d0e3a3f0225f801997ad74e58 79 | repo: hexo-plugin-gitalk 80 | owner: snowdreams1006 81 | admin: 82 | - snowdreams1006 83 | distractionFreeMode: false 84 | readmore: 85 | blogId: 15702-1569305559839-744 86 | name: 雪之梦技术驿站 87 | qrcode: https://snowdreams1006.github.io/snowdreams1006-wechat-public.jpeg 88 | keyword: vip 89 | 90 | ## Themes: https://hexo.io/themes/ 91 | theme: landscape 92 | 93 | # Deployment 94 | ## Docs: https://hexo.io/docs/deployment.html 95 | deploy: 96 | type: 97 | 98 | 99 | -------------------------------------------------------------------------------- /docs/archives/2019/10/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 归档: 2019/10 | gitalk 插件官方文档 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 70 |
71 |
72 | 73 | 74 | 75 | 76 | 77 | 78 |
79 |
80 | 2019 81 |
82 |
83 | 84 | 100 | 101 | 102 |
103 | 104 | 105 | 106 |
107 | 108 | 144 | 145 |
146 |
147 | 148 |
149 | 153 |
154 |
155 |
156 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 |
177 | 178 | -------------------------------------------------------------------------------- /docs/archives/2019/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 归档: 2019 | gitalk 插件官方文档 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 70 |
71 |
72 | 73 | 74 | 75 | 76 | 77 | 78 |
79 |
80 | 2019 81 |
82 |
83 | 84 | 100 | 101 | 102 |
103 | 104 | 105 | 106 |
107 | 108 | 144 | 145 |
146 |
147 | 148 |
149 | 153 |
154 |
155 |
156 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 |
177 | 178 | -------------------------------------------------------------------------------- /docs/archives/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 归档 | gitalk 插件官方文档 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 |
35 |
36 | 70 |
71 |
72 | 73 | 74 | 75 | 76 | 77 | 78 |
79 |
80 | 2019 81 |
82 |
83 | 84 | 100 | 101 | 102 |
103 | 104 | 105 | 106 |
107 | 108 | 144 | 145 |
146 |
147 | 148 |
149 | 153 |
154 |
155 |
156 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 |
177 | 178 | -------------------------------------------------------------------------------- /docs/css/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/css/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /docs/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/css/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/css/images/banner.jpg -------------------------------------------------------------------------------- /docs/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/blank.gif -------------------------------------------------------------------------------- /docs/fancybox/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/fancybox_loading.gif -------------------------------------------------------------------------------- /docs/fancybox/fancybox_loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/fancybox_loading@2x.gif -------------------------------------------------------------------------------- /docs/fancybox/fancybox_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/fancybox_overlay.png -------------------------------------------------------------------------------- /docs/fancybox/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/fancybox_sprite.png -------------------------------------------------------------------------------- /docs/fancybox/fancybox_sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/fancybox_sprite@2x.png -------------------------------------------------------------------------------- /docs/fancybox/helpers/fancybox_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/fancybox/helpers/fancybox_buttons.png -------------------------------------------------------------------------------- /docs/fancybox/helpers/jquery.fancybox-buttons.css: -------------------------------------------------------------------------------- 1 | #fancybox-buttons { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | z-index: 8050; 6 | } 7 | 8 | #fancybox-buttons.top { 9 | top: 10px; 10 | } 11 | 12 | #fancybox-buttons.bottom { 13 | bottom: 10px; 14 | } 15 | 16 | #fancybox-buttons ul { 17 | display: block; 18 | width: 166px; 19 | height: 30px; 20 | margin: 0 auto; 21 | padding: 0; 22 | list-style: none; 23 | border: 1px solid #111; 24 | border-radius: 3px; 25 | -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 26 | -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 27 | box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 28 | background: rgb(50,50,50); 29 | background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); 30 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); 31 | background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 32 | background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 33 | background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 34 | background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 35 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); 36 | } 37 | 38 | #fancybox-buttons ul li { 39 | float: left; 40 | margin: 0; 41 | padding: 0; 42 | } 43 | 44 | #fancybox-buttons a { 45 | display: block; 46 | width: 30px; 47 | height: 30px; 48 | text-indent: -9999px; 49 | background-color: transparent; 50 | background-image: url('fancybox_buttons.png'); 51 | background-repeat: no-repeat; 52 | outline: none; 53 | opacity: 0.8; 54 | } 55 | 56 | #fancybox-buttons a:hover { 57 | opacity: 1; 58 | } 59 | 60 | #fancybox-buttons a.btnPrev { 61 | background-position: 5px 0; 62 | } 63 | 64 | #fancybox-buttons a.btnNext { 65 | background-position: -33px 0; 66 | border-right: 1px solid #3e3e3e; 67 | } 68 | 69 | #fancybox-buttons a.btnPlay { 70 | background-position: 0 -30px; 71 | } 72 | 73 | #fancybox-buttons a.btnPlayOn { 74 | background-position: -30px -30px; 75 | } 76 | 77 | #fancybox-buttons a.btnToggle { 78 | background-position: 3px -60px; 79 | border-left: 1px solid #111; 80 | border-right: 1px solid #3e3e3e; 81 | width: 35px 82 | } 83 | 84 | #fancybox-buttons a.btnToggleOn { 85 | background-position: -27px -60px; 86 | } 87 | 88 | #fancybox-buttons a.btnClose { 89 | border-left: 1px solid #111; 90 | width: 35px; 91 | background-position: -56px 0px; 92 | } 93 | 94 | #fancybox-buttons a.btnDisabled { 95 | opacity : 0.4; 96 | cursor: default; 97 | } -------------------------------------------------------------------------------- /docs/fancybox/helpers/jquery.fancybox-buttons.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Buttons helper for fancyBox 3 | * version: 1.0.5 (Mon, 15 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * buttons: { 10 | * position : 'top' 11 | * } 12 | * } 13 | * }); 14 | * 15 | */ 16 | ;(function ($) { 17 | //Shortcut for fancyBox object 18 | var F = $.fancybox; 19 | 20 | //Add helper object 21 | F.helpers.buttons = { 22 | defaults : { 23 | skipSingle : false, // disables if gallery contains single image 24 | position : 'top', // 'top' or 'bottom' 25 | tpl : '
' 26 | }, 27 | 28 | list : null, 29 | buttons: null, 30 | 31 | beforeLoad: function (opts, obj) { 32 | //Remove self if gallery do not have at least two items 33 | 34 | if (opts.skipSingle && obj.group.length < 2) { 35 | obj.helpers.buttons = false; 36 | obj.closeBtn = true; 37 | 38 | return; 39 | } 40 | 41 | //Increase top margin to give space for buttons 42 | obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; 43 | }, 44 | 45 | onPlayStart: function () { 46 | if (this.buttons) { 47 | this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); 48 | } 49 | }, 50 | 51 | onPlayEnd: function () { 52 | if (this.buttons) { 53 | this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); 54 | } 55 | }, 56 | 57 | afterShow: function (opts, obj) { 58 | var buttons = this.buttons; 59 | 60 | if (!buttons) { 61 | this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); 62 | 63 | buttons = { 64 | prev : this.list.find('.btnPrev').click( F.prev ), 65 | next : this.list.find('.btnNext').click( F.next ), 66 | play : this.list.find('.btnPlay').click( F.play ), 67 | toggle : this.list.find('.btnToggle').click( F.toggle ), 68 | close : this.list.find('.btnClose').click( F.close ) 69 | } 70 | } 71 | 72 | //Prev 73 | if (obj.index > 0 || obj.loop) { 74 | buttons.prev.removeClass('btnDisabled'); 75 | } else { 76 | buttons.prev.addClass('btnDisabled'); 77 | } 78 | 79 | //Next / Play 80 | if (obj.loop || obj.index < obj.group.length - 1) { 81 | buttons.next.removeClass('btnDisabled'); 82 | buttons.play.removeClass('btnDisabled'); 83 | 84 | } else { 85 | buttons.next.addClass('btnDisabled'); 86 | buttons.play.addClass('btnDisabled'); 87 | } 88 | 89 | this.buttons = buttons; 90 | 91 | this.onUpdate(opts, obj); 92 | }, 93 | 94 | onUpdate: function (opts, obj) { 95 | var toggle; 96 | 97 | if (!this.buttons) { 98 | return; 99 | } 100 | 101 | toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); 102 | 103 | //Size toggle button 104 | if (obj.canShrink) { 105 | toggle.addClass('btnToggleOn'); 106 | 107 | } else if (!obj.canExpand) { 108 | toggle.addClass('btnDisabled'); 109 | } 110 | }, 111 | 112 | beforeClose: function () { 113 | if (this.list) { 114 | this.list.remove(); 115 | } 116 | 117 | this.list = null; 118 | this.buttons = null; 119 | } 120 | }; 121 | 122 | }(jQuery)); 123 | -------------------------------------------------------------------------------- /docs/fancybox/helpers/jquery.fancybox-thumbs.css: -------------------------------------------------------------------------------- 1 | #fancybox-thumbs { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | overflow: hidden; 6 | z-index: 8050; 7 | } 8 | 9 | #fancybox-thumbs.bottom { 10 | bottom: 2px; 11 | } 12 | 13 | #fancybox-thumbs.top { 14 | top: 2px; 15 | } 16 | 17 | #fancybox-thumbs ul { 18 | position: relative; 19 | list-style: none; 20 | margin: 0; 21 | padding: 0; 22 | } 23 | 24 | #fancybox-thumbs ul li { 25 | float: left; 26 | padding: 1px; 27 | opacity: 0.5; 28 | } 29 | 30 | #fancybox-thumbs ul li.active { 31 | opacity: 0.75; 32 | padding: 0; 33 | border: 1px solid #fff; 34 | } 35 | 36 | #fancybox-thumbs ul li:hover { 37 | opacity: 1; 38 | } 39 | 40 | #fancybox-thumbs ul li a { 41 | display: block; 42 | position: relative; 43 | overflow: hidden; 44 | border: 1px solid #222; 45 | background: #111; 46 | outline: none; 47 | } 48 | 49 | #fancybox-thumbs ul li img { 50 | display: block; 51 | position: relative; 52 | border: 0; 53 | padding: 0; 54 | max-width: none; 55 | } -------------------------------------------------------------------------------- /docs/fancybox/helpers/jquery.fancybox-thumbs.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Thumbnail helper for fancyBox 3 | * version: 1.0.7 (Mon, 01 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * thumbs: { 10 | * width : 50, 11 | * height : 50 12 | * } 13 | * } 14 | * }); 15 | * 16 | */ 17 | ;(function ($) { 18 | //Shortcut for fancyBox object 19 | var F = $.fancybox; 20 | 21 | //Add helper object 22 | F.helpers.thumbs = { 23 | defaults : { 24 | width : 50, // thumbnail width 25 | height : 50, // thumbnail height 26 | position : 'bottom', // 'top' or 'bottom' 27 | source : function ( item ) { // function to obtain the URL of the thumbnail image 28 | var href; 29 | 30 | if (item.element) { 31 | href = $(item.element).find('img').attr('src'); 32 | } 33 | 34 | if (!href && item.type === 'image' && item.href) { 35 | href = item.href; 36 | } 37 | 38 | return href; 39 | } 40 | }, 41 | 42 | wrap : null, 43 | list : null, 44 | width : 0, 45 | 46 | init: function (opts, obj) { 47 | var that = this, 48 | list, 49 | thumbWidth = opts.width, 50 | thumbHeight = opts.height, 51 | thumbSource = opts.source; 52 | 53 | //Build list structure 54 | list = ''; 55 | 56 | for (var n = 0; n < obj.group.length; n++) { 57 | list += '
  • '; 58 | } 59 | 60 | this.wrap = $('
    ').addClass(opts.position).appendTo('body'); 61 | this.list = $('').appendTo(this.wrap); 62 | 63 | //Load each thumbnail 64 | $.each(obj.group, function (i) { 65 | var el = obj.group[ i ], 66 | href = thumbSource( el ); 67 | 68 | if (!href) { 69 | return; 70 | } 71 | 72 | $("").load(function () { 73 | var width = this.width, 74 | height = this.height, 75 | widthRatio, heightRatio, parent; 76 | 77 | if (!that.list || !width || !height) { 78 | return; 79 | } 80 | 81 | //Calculate thumbnail width/height and center it 82 | widthRatio = width / thumbWidth; 83 | heightRatio = height / thumbHeight; 84 | 85 | parent = that.list.children().eq(i).find('a'); 86 | 87 | if (widthRatio >= 1 && heightRatio >= 1) { 88 | if (widthRatio > heightRatio) { 89 | width = Math.floor(width / heightRatio); 90 | height = thumbHeight; 91 | 92 | } else { 93 | width = thumbWidth; 94 | height = Math.floor(height / widthRatio); 95 | } 96 | } 97 | 98 | $(this).css({ 99 | width : width, 100 | height : height, 101 | top : Math.floor(thumbHeight / 2 - height / 2), 102 | left : Math.floor(thumbWidth / 2 - width / 2) 103 | }); 104 | 105 | parent.width(thumbWidth).height(thumbHeight); 106 | 107 | $(this).hide().appendTo(parent).fadeIn(300); 108 | 109 | }) 110 | .attr('src', href) 111 | .attr('title', el.title); 112 | }); 113 | 114 | //Set initial width 115 | this.width = this.list.children().eq(0).outerWidth(true); 116 | 117 | this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); 118 | }, 119 | 120 | beforeLoad: function (opts, obj) { 121 | //Remove self if gallery do not have at least two items 122 | if (obj.group.length < 2) { 123 | obj.helpers.thumbs = false; 124 | 125 | return; 126 | } 127 | 128 | //Increase bottom margin to give space for thumbs 129 | obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); 130 | }, 131 | 132 | afterShow: function (opts, obj) { 133 | //Check if exists and create or update list 134 | if (this.list) { 135 | this.onUpdate(opts, obj); 136 | 137 | } else { 138 | this.init(opts, obj); 139 | } 140 | 141 | //Set active element 142 | this.list.children().removeClass('active').eq(obj.index).addClass('active'); 143 | }, 144 | 145 | //Center list 146 | onUpdate: function (opts, obj) { 147 | if (this.list) { 148 | this.list.stop(true).animate({ 149 | 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) 150 | }, 150); 151 | } 152 | }, 153 | 154 | beforeClose: function () { 155 | if (this.wrap) { 156 | this.wrap.remove(); 157 | } 158 | 159 | this.wrap = null; 160 | this.list = null; 161 | this.width = 0; 162 | } 163 | } 164 | 165 | }(jQuery)); -------------------------------------------------------------------------------- /docs/js/script.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | // Search 3 | var $searchWrap = $('#search-form-wrap'), 4 | isSearchAnim = false, 5 | searchAnimDuration = 200; 6 | 7 | var startSearchAnim = function(){ 8 | isSearchAnim = true; 9 | }; 10 | 11 | var stopSearchAnim = function(callback){ 12 | setTimeout(function(){ 13 | isSearchAnim = false; 14 | callback && callback(); 15 | }, searchAnimDuration); 16 | }; 17 | 18 | $('#nav-search-btn').on('click', function(){ 19 | if (isSearchAnim) return; 20 | 21 | startSearchAnim(); 22 | $searchWrap.addClass('on'); 23 | stopSearchAnim(function(){ 24 | $('.search-form-input').focus(); 25 | }); 26 | }); 27 | 28 | $('.search-form-input').on('blur', function(){ 29 | startSearchAnim(); 30 | $searchWrap.removeClass('on'); 31 | stopSearchAnim(); 32 | }); 33 | 34 | // Share 35 | $('body').on('click', function(){ 36 | $('.article-share-box.on').removeClass('on'); 37 | }).on('click', '.article-share-link', function(e){ 38 | e.stopPropagation(); 39 | 40 | var $this = $(this), 41 | url = $this.attr('data-url'), 42 | encodedUrl = encodeURIComponent(url), 43 | id = 'article-share-box-' + $this.attr('data-id'), 44 | offset = $this.offset(); 45 | 46 | if ($('#' + id).length){ 47 | var box = $('#' + id); 48 | 49 | if (box.hasClass('on')){ 50 | box.removeClass('on'); 51 | return; 52 | } 53 | } else { 54 | var html = [ 55 | '
    ', 56 | '', 57 | '
    ', 58 | '', 59 | '', 60 | '', 61 | '', 62 | '
    ', 63 | '
    ' 64 | ].join(''); 65 | 66 | var box = $(html); 67 | 68 | $('body').append(box); 69 | } 70 | 71 | $('.article-share-box.on').hide(); 72 | 73 | box.css({ 74 | top: offset.top + 25, 75 | left: offset.left 76 | }).addClass('on'); 77 | }).on('click', '.article-share-box', function(e){ 78 | e.stopPropagation(); 79 | }).on('click', '.article-share-box-input', function(){ 80 | $(this).select(); 81 | }).on('click', '.article-share-box-link', function(e){ 82 | e.preventDefault(); 83 | e.stopPropagation(); 84 | 85 | window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); 86 | }); 87 | 88 | // Caption 89 | $('.article-entry').each(function(i){ 90 | $(this).find('img').each(function(){ 91 | if ($(this).parent().hasClass('fancybox')) return; 92 | 93 | var alt = this.alt; 94 | 95 | if (alt) $(this).after('' + alt + ''); 96 | 97 | $(this).wrap(''); 98 | }); 99 | 100 | $(this).find('.fancybox').each(function(){ 101 | $(this).attr('rel', 'article' + i); 102 | }); 103 | }); 104 | 105 | if ($.fancybox){ 106 | $('.fancybox').fancybox(); 107 | } 108 | 109 | // Mobile nav 110 | var $container = $('#container'), 111 | isMobileNavAnim = false, 112 | mobileNavAnimDuration = 200; 113 | 114 | var startMobileNavAnim = function(){ 115 | isMobileNavAnim = true; 116 | }; 117 | 118 | var stopMobileNavAnim = function(){ 119 | setTimeout(function(){ 120 | isMobileNavAnim = false; 121 | }, mobileNavAnimDuration); 122 | } 123 | 124 | $('#main-nav-toggle').on('click', function(){ 125 | if (isMobileNavAnim) return; 126 | 127 | startMobileNavAnim(); 128 | $container.toggleClass('mobile-nav-on'); 129 | stopMobileNavAnim(); 130 | }); 131 | 132 | $('#wrap').on('click', function(){ 133 | if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return; 134 | 135 | $container.removeClass('mobile-nav-on'); 136 | }); 137 | })(jQuery); -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gitalk-docs", 3 | "version": "0.0.2", 4 | "hexo": { 5 | "version": "3.9.0" 6 | }, 7 | "dependencies": { 8 | "hexo": "^3.9.0", 9 | "hexo-generator-archive": "^0.1.5", 10 | "hexo-generator-category": "^0.1.3", 11 | "hexo-generator-index": "^0.2.1", 12 | "hexo-generator-tag": "^0.2.0", 13 | "hexo-plugin-gitalk": "0.2.0", 14 | "hexo-plugin-readmore": "^0.1.1", 15 | "hexo-renderer-ejs": "^0.3.1", 16 | "hexo-renderer-marked": "^2.0.0", 17 | "hexo-renderer-stylus": "^0.3.3", 18 | "hexo-server": "^1.0.0" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /docs/scaffolds/draft.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | tags: 4 | --- 5 | -------------------------------------------------------------------------------- /docs/scaffolds/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | --- 5 | -------------------------------------------------------------------------------- /docs/scaffolds/post.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | tags: 5 | --- 6 | -------------------------------------------------------------------------------- /docs/source/_posts/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 首页 3 | date: 2019-10-16 01:47:52 4 | tags: 5 | --- 6 | 7 | # 欢迎访问 hexo-plugin-gitalk 官网 👋 8 | 9 | [![npm:version](https://img.shields.io/npm/v/hexo-plugin-gitalk.svg)](https://www.npmjs.com/package/hexo-plugin-gitalk) 10 | [![npm:download](https://img.shields.io/npm/dt/hexo-plugin-gitalk.svg)](https://www.npmjs.com/package/hexo-plugin-gitalk) 11 | [![github:documentation](https://img.shields.io/badge/documentation-yes-brightgreen.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk#readme) 12 | [![github:maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk/graphs/commit-activity) 13 | [![npm:license](https://img.shields.io/npm/l/hexo-plugin-gitalk.svg)](https://github.com/snowdreams1006/hexo-plugin-gitalk/blob/master/LICENSE) 14 | [![github:snodreams1006](https://img.shields.io/badge/github-snowdreams1006-brightgreen.svg)](https://github.com/snowdreams1006) 15 | [![微信公众号:雪之梦技术驿站-brightgreen.svg](https://img.shields.io/badge/%E5%BE%AE%E4%BF%A1%E5%85%AC%E4%BC%97%E5%8F%B7-%E9%9B%AA%E4%B9%8B%E6%A2%A6%E6%8A%80%E6%9C%AF%E9%A9%BF%E7%AB%99-brightgreen.svg)](https://snowdreams1006.github.io/snowdreams1006-wechat-public.jpeg) 16 | 17 | > Hexo 整合 gitalk 组件实现博客评论功能 18 | 19 | ### 🏠 [主页](https://github.com/snowdreams1006/hexo-plugin-gitalk#readme) 20 | 21 | - Github : [https://snowdreams1006.github.io/hexo-plugin-gitalk/](https://snowdreams1006.github.io/hexo-plugin-gitalk/) 22 | - Gitee : [https://snowdreams1006.gitee.io/hexo-plugin-gitalk/](https://snowdreams1006.gitee.io/hexo-plugin-gitalk/) 23 | - Gitlab : [https://snowdreams1006.gitlab.io/hexo-plugin-gitalk/](https://snowdreams1006.gitlab.io/hexo-plugin-gitalk/) 24 | 25 | ## 效果 26 | 27 | ![gitalk-use-preview.png](https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/master/gitalk-use-preview.png) 28 | 29 | ## 用法 30 | 31 | ### Step #1 - 更新 `_config.yml` 配置文件 32 | 33 | 在 `_config.yml` 配置文件中,配置 `gitalk` 插件相关信息,详情见 [gitalk](https://github.com/gitalk/gitalk). 34 | 35 | ```yml 36 | plugins: 37 | gitalk: 38 | clientID: GitHub Application Client ID 39 | clientSecret: GitHub Application Client Secret 40 | repo: GitHub repo 41 | owner: GitHub repo owner 42 | admin: 43 | - GitHub repo owner and collaborators, only these guys can initialize github issues 44 | distractionFreeMode: false 45 | ``` 46 | 47 | > 注意: 前往 [gitalk](https://github.com/gitalk/gitalk) 申请开通 `gitalk` 功能后,**一定要替换成自己的相关配置**! 48 | 49 | 其中,主要配置参数含义如下: 50 | 51 | - **clientID** `String` 52 | 53 | **必须**. GitHub Application Client ID. 54 | 55 | - **clientSecret** `String` 56 | 57 | **必须**. GitHub Application Client Secret. 58 | 59 | - **repo** `String` 60 | 61 | **必须**. GitHub repository. 62 | 63 | - **owner** `String` 64 | 65 | **必须**. GitHub repository 所有者,可以是个人或者组织。 66 | 67 | - **admin** `Array` 68 | 69 | **必须**. GitHub repository 的所有者和合作者 (对这个 repository 有写权限的用户)。 70 | 71 | - **distractionFreeMode** `Boolean` 72 | 73 | Default: false。 74 | 75 | 类似Facebook评论框的全屏遮罩效果. 76 | 77 | ### Step #2 - 运行 hexo 相关命令 78 | 79 | - 运行 `npm install` 命令安装到本地项目 80 | 81 | ```bash 82 | $ npm install hexo-plugin-gitalk --save 83 | ``` 84 | 85 | - 运行 `hexo generate` 命令构建本地项目或者 `hexo server` 启动本地服务. 86 | 87 | ```bash 88 | $ hexo generate 89 | ``` 90 | 91 | 或者 92 | 93 | ```bash 94 | $ hexo server 95 | ``` 96 | 97 | > 注意: 本地测试时无法正常运行,必须是线上环境才会生效,且必须由管理员登录github进行初始化. 98 | 99 | ## 示例 100 | 101 | 不仅 [hexo-plugin-gitalk](https://github.com/snowdreams1006/hexo-plugin-gitalk) **官方文档**已整合 `gitalk` 版权保护插件,此外还提供了示例项目,详情参考 `example` 目录. 102 | 103 | - [官方文档](https://github.com/snowdreams1006/hexo-plugin-gitalk/tree/master/docs) 104 | - [官方示例](https://github.com/snowdreams1006/hexo-plugin-gitalk/tree/master/example) 105 | 106 | ## 作者 107 | 108 | 👤 **snowdreams1006** 109 | 110 | - Github: [@snowdreams1006](https://github.com/snowdreams1006) 111 | - Email: [snowdreams1006@163.com](mailto:snowdreams1006@163.com) 112 | 113 | ## 🤝 贡献 114 | 115 | 如果你想贡献自己的一份力量,欢迎提交 [`Issues`](https://github.com/snowdreams1006/hexo-plugin-gitalk/issues) 或者 `Pull Request` 请求! 116 | 117 | ## 支持 118 | 119 | 如果本项目对你有所帮助,欢迎 ⭐️ [hexo-plugin-gitalk](https://github.com/snowdreams1006/hexo-plugin-gitalk) 项目,感谢你的支持与认可! 120 | 121 | ## 📝 版权 122 | 123 | Copyright © 2019 [snowdreams1006](https://github.com/snowdreams1006). 124 | 125 | This project is [MIT](https://github.com/snowdreams1006/hexo-plugin-gitalk/blob/master/LICENSE) licensed. -------------------------------------------------------------------------------- /docs/themes/landscape/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | tmp -------------------------------------------------------------------------------- /docs/themes/landscape/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt){ 2 | grunt.initConfig({ 3 | gitclone: { 4 | fontawesome: { 5 | options: { 6 | repository: 'https://github.com/FortAwesome/Font-Awesome.git', 7 | directory: 'tmp/fontawesome' 8 | }, 9 | }, 10 | fancybox: { 11 | options: { 12 | repository: 'https://github.com/fancyapps/fancyBox.git', 13 | directory: 'tmp/fancybox' 14 | } 15 | } 16 | }, 17 | copy: { 18 | fontawesome: { 19 | expand: true, 20 | cwd: 'tmp/fontawesome/fonts/', 21 | src: ['**'], 22 | dest: 'source/css/fonts/' 23 | }, 24 | fancybox: { 25 | expand: true, 26 | cwd: 'tmp/fancybox/source/', 27 | src: ['**'], 28 | dest: 'source/fancybox/' 29 | } 30 | }, 31 | _clean: { 32 | tmp: ['tmp'], 33 | fontawesome: ['source/css/fonts'], 34 | fancybox: ['source/fancybox'] 35 | } 36 | }); 37 | 38 | require('load-grunt-tasks')(grunt); 39 | 40 | grunt.renameTask('clean', '_clean'); 41 | 42 | grunt.registerTask('fontawesome', ['gitclone:fontawesome', 'copy:fontawesome', '_clean:tmp']); 43 | grunt.registerTask('fancybox', ['gitclone:fancybox', 'copy:fancybox', '_clean:tmp']); 44 | grunt.registerTask('default', ['gitclone', 'copy', '_clean:tmp']); 45 | grunt.registerTask('clean', ['_clean']); 46 | }; -------------------------------------------------------------------------------- /docs/themes/landscape/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Tommy Chen 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /docs/themes/landscape/README.md: -------------------------------------------------------------------------------- 1 | # Landscape 2 | 3 | A brand new default theme for [Hexo]. 4 | 5 | - [Preview](http://hexo.io/hexo-theme-landscape/) 6 | 7 | ## Installation 8 | 9 | ### Install 10 | 11 | ``` bash 12 | $ git clone https://github.com/hexojs/hexo-theme-landscape.git themes/landscape 13 | ``` 14 | 15 | **Landscape requires Hexo 2.4 and above.** If you would like to enable the RSS, the [hexo-generate-feed] plugin is also required. 16 | 17 | ### Enable 18 | 19 | Modify `theme` setting in `_config.yml` to `landscape`. 20 | 21 | ### Update 22 | 23 | ``` bash 24 | cd themes/landscape 25 | git pull 26 | ``` 27 | 28 | ## Configuration 29 | 30 | ``` yml 31 | # Header 32 | menu: 33 | Home: / 34 | Archives: /archives 35 | rss: /atom.xml 36 | 37 | # Content 38 | excerpt_link: Read More 39 | fancybox: true 40 | 41 | # Sidebar 42 | sidebar: right 43 | widgets: 44 | - category 45 | - tag 46 | - tagcloud 47 | - archives 48 | - recent_posts 49 | 50 | # Miscellaneous 51 | google_analytics: 52 | favicon: /favicon.png 53 | twitter: 54 | google_plus: 55 | ``` 56 | 57 | - **menu** - Navigation menu 58 | - **rss** - RSS link 59 | - **excerpt_link** - "Read More" link at the bottom of excerpted articles. `false` to hide the link. 60 | - **fancybox** - Enable [Fancybox] 61 | - **sidebar** - Sidebar style. You can choose `left`, `right`, `bottom` or `false`. 62 | - **widgets** - Widgets displaying in sidebar 63 | - **google_analytics** - Google Analytics ID 64 | - **favicon** - Favicon path 65 | - **twitter** - Twiiter ID 66 | - **google_plus** - Google+ ID 67 | 68 | ## Features 69 | 70 | ### Fancybox 71 | 72 | Landscape uses [Fancybox] to showcase your photos. You can use Markdown syntax or fancybox tag plugin to add your photos. 73 | 74 | ``` 75 | ![img caption](img url) 76 | 77 | {% fancybox img_url [img_thumbnail] [img_caption] %} 78 | ``` 79 | 80 | ### Sidebar 81 | 82 | You can put your sidebar in left side, right side or bottom of your site by editing `sidebar` setting. 83 | 84 | Landscape provides 5 built-in widgets: 85 | 86 | - category 87 | - tag 88 | - tagcloud 89 | - archives 90 | - recent_posts 91 | 92 | All of them are enabled by default. You can edit them in `widget` setting. 93 | 94 | ## Development 95 | 96 | ### Requirements 97 | 98 | - [Grunt] 0.4+ 99 | - Hexo 2.4+ 100 | 101 | ### Grunt tasks 102 | 103 | - **default** - Download [Fancybox] and [Font Awesome]. 104 | - **fontawesome** - Only download [Font Awesome]. 105 | - **fancybox** - Only download [Fancybox]. 106 | - **clean** - Clean temporarily files and downloaded files. 107 | 108 | [Hexo]: https://hexo.io/ 109 | [Fancybox]: http://fancyapps.com/fancybox/ 110 | [Font Awesome]: http://fontawesome.io/ 111 | [Grunt]: http://gruntjs.com/ 112 | [hexo-generate-feed]: https://github.com/hexojs/hexo-generator-feed 113 | -------------------------------------------------------------------------------- /docs/themes/landscape/_config.yml: -------------------------------------------------------------------------------- 1 | # Header 2 | menu: 3 | Home: / 4 | Archives: /archives 5 | rss: /atom.xml 6 | 7 | # Content 8 | excerpt_link: Read More 9 | fancybox: true 10 | 11 | # Sidebar 12 | sidebar: right 13 | widgets: 14 | - category 15 | - tag 16 | - tagcloud 17 | - archive 18 | - recent_posts 19 | 20 | # display widgets at the bottom of index pages (pagination == 2) 21 | index_widgets: 22 | # - category 23 | # - tagcloud 24 | # - archive 25 | 26 | # widget behavior 27 | archive_type: 'monthly' 28 | show_count: false 29 | 30 | # Miscellaneous 31 | google_analytics: 32 | gauges_analytics: 33 | favicon: /favicon.png 34 | twitter: 35 | google_plus: 36 | fb_admins: 37 | fb_app_id: 38 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 -------------------------------------------------------------------------------- /docs/themes/landscape/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 -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 -------------------------------------------------------------------------------- /docs/themes/landscape/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 | -------------------------------------------------------------------------------- /docs/themes/landscape/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: Метка -------------------------------------------------------------------------------- /docs/themes/landscape/languages/zh-CN.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 -------------------------------------------------------------------------------- /docs/themes/landscape/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 -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/after-footer.ejs: -------------------------------------------------------------------------------- 1 | <% if (config.disqus_shortname){ %> 2 | 15 | <% } %> 16 | 17 | 18 | 19 | <% if (theme.fancybox){ %> 20 | <%- css('fancybox/jquery.fancybox') %> 21 | <%- js('fancybox/jquery.fancybox.pack') %> 22 | <% } %> 23 | 24 | <%- js('js/script') %> 25 | <%- partial('gauges-analytics') %> 26 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/archive-post.ejs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | <%- partial('post/date', {class_name: 'archive-article-date', date_format: 'MMM D'}) %> 5 | <%- partial('post/title', {class_name: 'archive-article-title'}) %> 6 |
    7 |
    8 |
    -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/archive.ejs: -------------------------------------------------------------------------------- 1 | <% if (pagination == 2){ %> 2 | <% page.posts.each(function(post){ %> 3 | <%- partial('article', {post: post, index: true}) %> 4 | <% }) %> 5 | <% } else { %> 6 | <% var last; %> 7 | <% page.posts.each(function(post, i){ %> 8 | <% var year = post.date.year(); %> 9 | <% if (last != year){ %> 10 | <% if (last != null){ %> 11 | 12 | <% } %> 13 | <% last = year; %> 14 |
    15 |
    16 | <%= year %> 17 |
    18 |
    19 | <% } %> 20 | <%- partial('archive-post', {post: post, even: i % 2 == 0}) %> 21 | <% }) %> 22 | <% if (page.posts.length){ %> 23 |
    24 | <% } %> 25 | <% } %> 26 | <% if (page.total > 1){ %> 27 | 34 | <% } %> 35 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/article.ejs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | <%- partial('post/date', {class_name: 'article-date', date_format: null}) %> 4 | <%- partial('post/category') %> 5 |
    6 |
    7 | <%- partial('post/gallery') %> 8 | <% if (post.link || post.title){ %> 9 |
    10 | <%- partial('post/title', {class_name: 'article-title'}) %> 11 |
    12 | <% } %> 13 |
    14 | <% if (post.excerpt && index){ %> 15 | <%- post.excerpt %> 16 | <% if (theme.excerpt_link){ %> 17 |

    18 | <%= theme.excerpt_link %> 19 |

    20 | <% } %> 21 | <% } else { %> 22 | <%- post.content %> 23 | <% } %> 24 |
    25 | 32 |
    33 | <% if (!index){ %> 34 | <%- partial('post/nav') %> 35 | <% } %> 36 |
    37 | 38 | <% if (!index && post.comments && config.disqus_shortname){ %> 39 |
    40 |
    41 | 42 |
    43 |
    44 | <% } %> 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/footer.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/gauges-analytics.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.gauges_analytics){ %> 2 | 3 | 17 | 18 | <% } %> 19 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/google-analytics.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.google_analytics){ %> 2 | 3 | 13 | 14 | <% } %> 15 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%- partial('google-analytics') %> 6 | <% 7 | var title = page.title; 8 | 9 | if (is_archive()){ 10 | title = __('archive_a'); 11 | 12 | if (is_month()){ 13 | title += ': ' + page.year + '/' + page.month; 14 | } else if (is_year()){ 15 | title += ': ' + page.year; 16 | } 17 | } else if (is_category()){ 18 | title = __('category') + ': ' + page.category; 19 | } else if (is_tag()){ 20 | title = __('tag') + ': ' + page.tag; 21 | } 22 | %> 23 | <% if (title){ %><%= title %> | <% } %><%= config.title %> 24 | 25 | <%- open_graph({twitter_id: theme.twitter, google_plus: theme.google_plus, fb_admins: theme.fb_admins, fb_app_id: theme.fb_app_id}) %> 26 | <% if (theme.rss){ %> 27 | 28 | <% } %> 29 | <% if (theme.favicon){ %> 30 | 31 | <% } %> 32 | <% if (config.highlight.enable){ %> 33 | 34 | <% } %> 35 | <%- css('css/style') %> 36 | 37 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/header.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/mobile-nav.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/post/date.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/post/gallery.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.photos && post.photos.length){ %> 2 |
    3 |
    4 | <% post.photos.forEach(function(photo, i){ %> 5 | 6 | 7 | 8 | <% }) %> 9 |
    10 |
    11 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/post/nav.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.prev || post.next){ %> 2 | 22 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_partial/sidebar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_widget/archive.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.posts.length){ %> 2 |
    3 |

    <%= __('archive_a') %>

    4 |
    5 | <%- list_archives({show_count: theme.show_count, type: theme.archive_type}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_widget/category.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.categories.length){ %> 2 |
    3 |

    <%= __('categories') %>

    4 |
    5 | <%- list_categories({show_count: theme.show_count}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_widget/recent_posts.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.posts.length){ %> 2 |
    3 |

    <%= __('recent_posts') %>

    4 |
    5 | 12 |
    13 |
    14 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_widget/tag.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.tags.length){ %> 2 |
    3 |

    <%= __('tags') %>

    4 |
    5 | <%- list_tags({show_count: theme.show_count}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/_widget/tagcloud.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.tags.length){ %> 2 |
    3 |

    <%= __('tagcloud') %>

    4 |
    5 | <%- tagcloud() %> 6 |
    7 |
    8 | <% } %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/archive.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.archive, index: true}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/category.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.category, index: true}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/index.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: 2, index: true}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/layout.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/head') %> 2 | 3 |
    4 |
    5 | <%- partial('_partial/header', null, {cache: !config.relative_link}) %> 6 |
    7 |
    <%- body %>
    8 | <% if (theme.sidebar && theme.sidebar !== 'bottom'){ %> 9 | <%- partial('_partial/sidebar', null, {cache: !config.relative_link}) %> 10 | <% } %> 11 |
    12 | <%- partial('_partial/footer', null, {cache: !config.relative_link}) %> 13 |
    14 | <%- partial('_partial/mobile-nav', null, {cache: !config.relative_link}) %> 15 | <%- partial('_partial/after-footer') %> 16 |
    17 | 18 | -------------------------------------------------------------------------------- /docs/themes/landscape/layout/page.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article', {post: page, index: false}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/post.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article', {post: page, index: false}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/layout/tag.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.tag, index: true}) %> -------------------------------------------------------------------------------- /docs/themes/landscape/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-theme-landscape", 3 | "version": "0.0.2", 4 | "private": true, 5 | "devDependencies": { 6 | "grunt": "~0.4.2", 7 | "load-grunt-tasks": "~0.2.0", 8 | "grunt-git": "~0.2.2", 9 | "grunt-contrib-clean": "~0.5.0", 10 | "grunt-contrib-copy": "~0.4.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /docs/themes/landscape/scripts/fancybox.js: -------------------------------------------------------------------------------- 1 | var rUrl = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/; 2 | 3 | /** 4 | * Fancybox tag 5 | * 6 | * Syntax: 7 | * {% fancybox /path/to/image [/path/to/thumbnail] [title] %} 8 | */ 9 | 10 | hexo.extend.tag.register('fancybox', function(args){ 11 | var original = args.shift(), 12 | thumbnail = ''; 13 | 14 | if (args.length && rUrl.test(args[0])){ 15 | thumbnail = args.shift(); 16 | } 17 | 18 | var title = args.join(' '); 19 | 20 | return '' + 21 | '' + title + '' 22 | '' + 23 | (title ? '' + title + '' : ''); 24 | }); -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_extend.styl: -------------------------------------------------------------------------------- 1 | $block-caption 2 | text-decoration: none 3 | text-transform: uppercase 4 | letter-spacing: 2px 5 | color: color-grey 6 | margin-bottom: 1em 7 | margin-left: 5px 8 | line-height: 1em 9 | text-shadow: 0 1px #fff 10 | font-weight: bold 11 | 12 | $block 13 | background: #fff 14 | box-shadow: 1px 2px 3px #ddd 15 | border: 1px solid color-border 16 | border-radius: 3px 17 | 18 | $base-style 19 | h1 20 | font-size: 2em 21 | h2 22 | font-size: 1.5em 23 | h3 24 | font-size: 1.3em 25 | h4 26 | font-size: 1.2em 27 | h5 28 | font-size: 1em 29 | h6 30 | font-size: 1em 31 | color: color-grey 32 | hr 33 | border: 1px dashed color-border 34 | strong 35 | font-weight: bold 36 | em, cite 37 | font-style: italic 38 | sup, sub 39 | font-size: 0.75em 40 | line-height: 0 41 | position: relative 42 | vertical-align: baseline 43 | sup 44 | top: -0.5em 45 | sub 46 | bottom: -0.2em 47 | small 48 | font-size: 0.85em 49 | acronym, abbr 50 | border-bottom: 1px dotted 51 | ul, ol, dl 52 | margin: 0 20px 53 | line-height: line-height 54 | ul, ol 55 | ul, ol 56 | margin-top: 0 57 | margin-bottom: 0 58 | ul 59 | list-style: disc 60 | ol 61 | list-style: decimal 62 | dt 63 | font-weight: bold -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/archive.styl: -------------------------------------------------------------------------------- 1 | .archives-wrap 2 | margin: block-margin 0 3 | 4 | .archives 5 | clearfix() 6 | 7 | .archive-year-wrap 8 | margin-bottom: 1em 9 | 10 | .archive-year 11 | @extend $block-caption 12 | 13 | .archives 14 | column-gap: 10px 15 | @media mq-tablet 16 | column-count: 2 17 | @media mq-normal 18 | column-count: 3 19 | 20 | .archive-article 21 | avoid-column-break() 22 | 23 | .archive-article-inner 24 | @extend $block 25 | padding: 10px 26 | margin-bottom: 15px 27 | 28 | .archive-article-title 29 | text-decoration: none 30 | font-weight: bold 31 | color: color-default 32 | transition: color 0.2s 33 | line-height: line-height 34 | &:hover 35 | color: color-link 36 | 37 | .archive-article-footer 38 | margin-top: 1em 39 | 40 | .archive-article-date 41 | color: color-grey 42 | text-decoration: none 43 | font-size: 0.85em 44 | line-height: 1em 45 | margin-bottom: 0.5em 46 | display: block 47 | 48 | #page-nav 49 | clearfix() 50 | margin: block-margin auto 51 | background: #fff 52 | box-shadow: 1px 2px 3px #ddd 53 | border: 1px solid color-border 54 | border-radius: 3px 55 | text-align: center 56 | color: color-grey 57 | overflow: hidden 58 | a, span 59 | padding: 10px 20px 60 | line-height: 1 61 | height: 2ex 62 | a 63 | color: color-grey 64 | text-decoration: none 65 | &:hover 66 | background: color-grey 67 | color: #fff 68 | .prev 69 | float: left 70 | .next 71 | float: right 72 | .page-number 73 | display: inline-block 74 | @media mq-mobile 75 | display: none 76 | .current 77 | color: color-default 78 | font-weight: bold 79 | .space 80 | color: color-border -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/comment.styl: -------------------------------------------------------------------------------- 1 | #comments 2 | background: #fff 3 | box-shadow: 1px 2px 3px #ddd 4 | padding: article-padding 5 | border: 1px solid color-border 6 | border-radius: 3px 7 | margin: block-margin 0 8 | a 9 | color: color-link -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/footer.styl: -------------------------------------------------------------------------------- 1 | #footer 2 | background: color-footer-background 3 | padding: 50px 0 4 | border-top: 1px solid color-border 5 | color: color-grey 6 | a 7 | color: color-link 8 | text-decoration: none 9 | &:hover 10 | text-decoration: underline 11 | 12 | #footer-info 13 | line-height: line-height 14 | font-size: 0.85em -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/header.styl: -------------------------------------------------------------------------------- 1 | #header 2 | height: banner-height 3 | position: relative 4 | border-bottom: 1px solid color-border 5 | &:before, &:after 6 | content: "" 7 | position: absolute 8 | left: 0 9 | right: 0 10 | height: 40px 11 | &:before 12 | top: 0 13 | background: linear-gradient(rgba(0, 0, 0, 0.2), transparent) 14 | &:after 15 | bottom: 0 16 | background: linear-gradient(transparent, rgba(0, 0, 0, 0.2)) 17 | 18 | #header-outer 19 | height: 100% 20 | position: relative 21 | 22 | #header-inner 23 | position: relative 24 | overflow: hidden 25 | 26 | #banner 27 | position: absolute 28 | top: 0 29 | left: 0 30 | width: 100% 31 | height: 100% 32 | background: url(banner-url) center #000 33 | background-size: cover 34 | z-index: -1 35 | 36 | #header-title 37 | text-align: center 38 | height: logo-size 39 | position: absolute 40 | top: 50% 41 | left: 0 42 | margin-top: logo-size * -0.5 43 | 44 | $logo-text 45 | text-decoration: none 46 | color: #fff 47 | font-weight: 300 48 | text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) 49 | 50 | #logo 51 | @extend $logo-text 52 | font-size: logo-size 53 | line-height: logo-size 54 | letter-spacing: 2px 55 | 56 | #subtitle 57 | @extend $logo-text 58 | font-size: subtitle-size 59 | line-height: subtitle-size 60 | letter-spacing: 1px 61 | 62 | #subtitle-wrap 63 | margin-top: subtitle-size 64 | 65 | #main-nav 66 | float: left 67 | margin-left: -15px 68 | 69 | $nav-link 70 | float: left 71 | color: #fff 72 | opacity: 0.6 73 | text-decoration: none 74 | text-shadow: 0 1px rgba(0, 0, 0, 0.2) 75 | transition: opacity 0.2s 76 | display: block 77 | padding: 20px 15px 78 | &:hover 79 | opacity: 1 80 | 81 | .nav-icon 82 | @extend $nav-link 83 | font-family: font-icon 84 | text-align: center 85 | font-size: font-size 86 | width: font-size 87 | height: font-size 88 | padding: 20px 15px 89 | position: relative 90 | cursor: pointer 91 | 92 | .main-nav-link 93 | @extend $nav-link 94 | font-weight: 300 95 | letter-spacing: 1px 96 | @media mq-mobile 97 | display: none 98 | 99 | #main-nav-toggle 100 | display: none 101 | &:before 102 | content: "\f0c9" 103 | @media mq-mobile 104 | display: block 105 | 106 | #sub-nav 107 | float: right 108 | margin-right: -15px 109 | 110 | #nav-rss-link 111 | &:before 112 | content: "\f09e" 113 | 114 | #nav-search-btn 115 | &:before 116 | content: "\f002" 117 | 118 | #search-form-wrap 119 | position: absolute 120 | top: 15px 121 | width: 150px 122 | height: 30px 123 | right: -150px 124 | opacity: 0 125 | transition: 0.2s ease-out 126 | &.on 127 | opacity: 1 128 | right: 0 129 | @media mq-mobile 130 | width: 100% 131 | right: -100% 132 | 133 | .search-form 134 | position: absolute 135 | top: 0 136 | left: 0 137 | right: 0 138 | background: #fff 139 | padding: 5px 15px 140 | border-radius: 15px 141 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) 142 | 143 | .search-form-input 144 | border: none 145 | background: none 146 | color: color-default 147 | width: 100% 148 | font: 13px font-sans 149 | outline: none 150 | &::-webkit-search-results-decoration 151 | &::-webkit-search-cancel-button 152 | -webkit-appearance: none 153 | 154 | .search-form-submit 155 | position: absolute 156 | top: 50% 157 | right: 10px 158 | margin-top: -7px 159 | font: 13px font-icon 160 | border: none 161 | background: none 162 | color: #bbb 163 | cursor: pointer 164 | &:hover, &:focus 165 | color: #777 -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/highlight.styl: -------------------------------------------------------------------------------- 1 | // https://github.com/chriskempson/tomorrow-theme 2 | highlight-background = #2d2d2d 3 | highlight-current-line = #393939 4 | highlight-selection = #515151 5 | highlight-foreground = #cccccc 6 | highlight-comment = #999999 7 | highlight-red = #f2777a 8 | highlight-orange = #f99157 9 | highlight-yellow = #ffcc66 10 | highlight-green = #99cc99 11 | highlight-aqua = #66cccc 12 | highlight-blue = #6699cc 13 | highlight-purple = #cc99cc 14 | 15 | $code-block 16 | background: highlight-background 17 | margin: 0 article-padding * -1 18 | padding: 15px article-padding 19 | border-style: solid 20 | border-color: color-border 21 | border-width: 1px 0 22 | overflow: auto 23 | color: highlight-foreground 24 | line-height: font-size * line-height 25 | 26 | $line-numbers 27 | color: #666 28 | font-size: 0.85em 29 | 30 | .article-entry 31 | pre, code 32 | font-family: font-mono 33 | code 34 | background: color-background 35 | text-shadow: 0 1px #fff 36 | padding: 0 0.3em 37 | pre 38 | @extend $code-block 39 | code 40 | background: none 41 | text-shadow: none 42 | padding: 0 43 | .highlight 44 | @extend $code-block 45 | pre 46 | border: none 47 | margin: 0 48 | padding: 0 49 | table 50 | margin: 0 51 | width: auto 52 | td 53 | border: none 54 | padding: 0 55 | figcaption 56 | clearfix() 57 | font-size: 0.85em 58 | color: highlight-comment 59 | line-height: 1em 60 | margin-bottom: 1em 61 | a 62 | float: right 63 | .gutter pre 64 | @extend $line-numbers 65 | text-align: right 66 | padding-right: 20px 67 | .line 68 | height: font-size * line-height 69 | .line.marked 70 | background: highlight-selection 71 | .gist 72 | margin: 0 article-padding * -1 73 | border-style: solid 74 | border-color: color-border 75 | border-width: 1px 0 76 | background: highlight-background 77 | padding: 15px article-padding 15px 0 78 | .gist-file 79 | border: none 80 | font-family: font-mono 81 | margin: 0 82 | .gist-data 83 | background: none 84 | border: none 85 | .line-numbers 86 | @extend $line-numbers 87 | background: none 88 | border: none 89 | padding: 0 20px 0 0 90 | .line-data 91 | padding: 0 !important 92 | .highlight 93 | margin: 0 94 | padding: 0 95 | border: none 96 | .gist-meta 97 | background: highlight-background 98 | color: highlight-comment 99 | font: 0.85em font-sans 100 | text-shadow: 0 0 101 | padding: 0 102 | margin-top: 1em 103 | margin-left: article-padding 104 | a 105 | color: color-link 106 | font-weight: normal 107 | &:hover 108 | text-decoration: underline 109 | 110 | pre 111 | .comment 112 | .title 113 | color: highlight-comment 114 | .variable 115 | .attribute 116 | .tag 117 | .regexp 118 | .ruby .constant 119 | .xml .tag .title 120 | .xml .pi 121 | .xml .doctype 122 | .html .doctype 123 | .css .id 124 | .css .class 125 | .css .pseudo 126 | color: highlight-red 127 | .number 128 | .preprocessor 129 | .built_in 130 | .literal 131 | .params 132 | .constant 133 | color: highlight-orange 134 | .class 135 | .ruby .class .title 136 | .css .rules .attribute 137 | color: highlight-green 138 | .string 139 | .value 140 | .inheritance 141 | .header 142 | .ruby .symbol 143 | .xml .cdata 144 | color: highlight-green 145 | .css .hexcolor 146 | color: highlight-aqua 147 | .function 148 | .python .decorator 149 | .python .title 150 | .ruby .function .title 151 | .ruby .title .keyword 152 | .perl .sub 153 | .javascript .title 154 | .coffeescript .title 155 | color: highlight-blue 156 | .keyword 157 | .javascript .function 158 | color: highlight-purple 159 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/mobile.styl: -------------------------------------------------------------------------------- 1 | @media mq-mobile 2 | #mobile-nav 3 | position: absolute 4 | top: 0 5 | left: 0 6 | width: mobile-nav-width 7 | height: 100% 8 | background: color-mobile-nav-background 9 | border-right: 1px solid #fff 10 | 11 | @media mq-mobile 12 | .mobile-nav-link 13 | display: block 14 | color: color-grey 15 | text-decoration: none 16 | padding: 15px 20px 17 | font-weight: bold 18 | &:hover 19 | color: #fff 20 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/sidebar-aside.styl: -------------------------------------------------------------------------------- 1 | #sidebar 2 | @media mq-normal 3 | column(sidebar-column) 4 | 5 | .widget-wrap 6 | margin: block-margin 0 7 | 8 | .widget-title 9 | @extend $block-caption 10 | 11 | .widget 12 | color: color-sidebar-text 13 | text-shadow: 0 1px #fff 14 | background: color-widget-background 15 | box-shadow: 0 -1px 4px color-widget-border inset 16 | border: 1px solid color-widget-border 17 | padding: 15px 18 | border-radius: 3px 19 | a 20 | color: color-link 21 | text-decoration: none 22 | &:hover 23 | text-decoration: underline 24 | ul, ol, dl 25 | ul, ol, dl 26 | margin-left: 15px 27 | list-style: disc -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/sidebar-bottom.styl: -------------------------------------------------------------------------------- 1 | .widget-wrap 2 | margin-bottom: block-margin !important 3 | @media mq-normal 4 | column(main-column) 5 | 6 | .widget-title 7 | color: #ccc 8 | text-transform: uppercase 9 | letter-spacing: 2px 10 | margin-bottom: .5em 11 | line-height: 1em 12 | font-weight: bold 13 | 14 | .widget 15 | color: color-grey 16 | ul, ol 17 | li 18 | display: inline-block 19 | zoom:1 20 | *display:inline 21 | padding-right: .75em 22 | /* Having problems getting balanced white space between items 23 | li:before 24 | content: " | " 25 | li:first-child:before 26 | content: none 27 | */ 28 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_partial/sidebar.styl: -------------------------------------------------------------------------------- 1 | if sidebar is bottom 2 | @import "sidebar-bottom" 3 | else 4 | @import "sidebar-aside" 5 | 6 | .widget 7 | @extend $base-style 8 | line-height: line-height 9 | word-wrap: break-word 10 | font-size: 0.9em 11 | ul, ol 12 | list-style: none 13 | margin: 0 14 | ul, ol 15 | margin: 0 20px 16 | ul 17 | list-style: disc 18 | ol 19 | list-style: decimal 20 | 21 | .category-list-count 22 | .tag-list-count 23 | .archive-list-count 24 | padding-left: 5px 25 | color: color-grey 26 | font-size: 0.85em 27 | &:before 28 | content: "(" 29 | &:after 30 | content: ")" 31 | 32 | .tagcloud 33 | a 34 | margin-right: 5px 35 | display: inline-block 36 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_util/grid.styl: -------------------------------------------------------------------------------- 1 | ///////////////// 2 | // Semantic.gs // for Stylus: http://learnboost.github.com/stylus/ 3 | ///////////////// 4 | 5 | // Utility function — you should never need to modify this 6 | // _gridsystem-width = (column-width + gutter-width) * columns 7 | gridsystem-width(_columns = columns) 8 | (column-width + gutter-width) * _columns 9 | 10 | // Set @total-width to 100% for a fluid layout 11 | // total-width = gridsystem-width(columns) 12 | total-width = 100% 13 | 14 | ////////// 15 | // GRID // 16 | ////////// 17 | 18 | body 19 | clearfix() 20 | width: 100% 21 | 22 | row(_columns = columns) 23 | clearfix() 24 | display: block 25 | width: total-width * ((gutter-width + gridsystem-width(_columns)) / gridsystem-width(_columns)) 26 | margin: 0 total-width * (((gutter-width * .5) / gridsystem-width(_columns)) * -1) 27 | 28 | column(x, _columns = columns) 29 | display: inline 30 | float: left 31 | width: total-width * ((((gutter-width + column-width) * x) - gutter-width) / gridsystem-width(_columns)) 32 | margin: 0 total-width * ((gutter-width * .5) / gridsystem-width(_columns)) 33 | 34 | push(offset = 1) 35 | margin-left: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns)) 36 | 37 | pull(offset = 1) 38 | margin-right: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns)) -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_util/mixin.styl: -------------------------------------------------------------------------------- 1 | // http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/ 2 | hide-text() 3 | text-indent: 100% 4 | white-space: nowrap 5 | overflow: hidden 6 | 7 | // http://codepen.io/shshaw/full/gEiDt 8 | absolute-center(width, height = width) 9 | // margin: auto 10 | // position: absolute 11 | // top: 50% 12 | // top: 0 13 | // left: 0 14 | // bottom: 0 15 | // right: 0 16 | // width: width 17 | // height: height 18 | // overflow: auto 19 | width: width 20 | height: height 21 | position: absolute 22 | top: 50% 23 | left: 50% 24 | margin-top: width * -0.5 25 | margin-left: height * -0.5 26 | 27 | avoid-column-break() 28 | vendor("column-break-inside", avoid, only: webkit) 29 | page-break-inside: avoid // for firefox 30 | overflow: hidden // fix for firefox 31 | break-inside: avoid-column 32 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/_variables.styl: -------------------------------------------------------------------------------- 1 | // Config 2 | support-for-ie = false 3 | vendor-prefixes = webkit moz ms official 4 | 5 | // Colors 6 | color-default = #555 7 | color-grey = #999 8 | color-border = #ddd 9 | color-link = #258fb8 10 | color-background = #eee 11 | color-sidebar-text = #777 12 | color-widget-background = #ddd 13 | color-widget-border = #ccc 14 | color-footer-background = #262a30 15 | color-mobile-nav-background = #191919 16 | color-twitter = #00aced 17 | color-facebook = #3b5998 18 | color-pinterest = #cb2027 19 | color-google = #dd4b39 20 | 21 | // Fonts 22 | font-sans = -apple-system, BlinkMacSystemFont, 23 | "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", 24 | "Fira Sans", "Droid Sans", "Helvetica Neue", 25 | sans-serif 26 | font-serif = Georgia, "Times New Roman", serif 27 | font-mono = "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace 28 | font-icon = FontAwesome 29 | font-icon-path = "fonts/fontawesome-webfont" 30 | font-icon-version = "4.0.3" 31 | font-size = 14px 32 | line-height = 1.6em 33 | line-height-title = 1.1em 34 | 35 | // Header 36 | logo-size = 40px 37 | subtitle-size = 16px 38 | banner-height = 300px 39 | banner-url = "images/banner.jpg" 40 | 41 | sidebar = hexo-config("sidebar") 42 | 43 | // Layout 44 | block-margin = 50px 45 | article-padding = 20px 46 | mobile-nav-width = 280px 47 | main-column = 9 48 | sidebar-column = 3 49 | 50 | if sidebar and sidebar isnt bottom 51 | _sidebar-column = sidebar-column 52 | else 53 | _sidebar-column = 0 54 | 55 | // Grids 56 | column-width = 80px 57 | gutter-width = 20px 58 | columns = main-column + _sidebar-column 59 | 60 | // Media queries 61 | mq-mobile = "screen and (max-width: 479px)" 62 | mq-tablet = "screen and (min-width: 480px) and (max-width: 767px)" 63 | mq-normal = "screen and (min-width: 768px)" -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/css/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/css/images/banner.jpg -------------------------------------------------------------------------------- /docs/themes/landscape/source/css/style.styl: -------------------------------------------------------------------------------- 1 | @import "nib" 2 | @import "_variables" 3 | @import "_util/mixin" 4 | @import "_util/grid" 5 | 6 | global-reset() 7 | 8 | input, button 9 | margin: 0 10 | padding: 0 11 | &::-moz-focus-inner 12 | border: 0 13 | padding: 0 14 | 15 | @font-face 16 | font-family: FontAwesome 17 | font-style: normal 18 | font-weight: normal 19 | src: url(font-icon-path + ".eot?v=#" + font-icon-version) 20 | src: url(font-icon-path + ".eot?#iefix&v=#" + font-icon-version) format("embedded-opentype"), 21 | url(font-icon-path + ".woff?v=#" + font-icon-version) format("woff"), 22 | url(font-icon-path + ".ttf?v=#" + font-icon-version) format("truetype"), 23 | url(font-icon-path + ".svg#fontawesomeregular?v=#" + font-icon-version) format("svg") 24 | 25 | html, body, #container 26 | height: 100% 27 | 28 | body 29 | background: color-background 30 | font: font-size font-sans 31 | -webkit-text-size-adjust: 100% 32 | 33 | .outer 34 | clearfix() 35 | max-width: (column-width + gutter-width) * columns + gutter-width 36 | margin: 0 auto 37 | padding: 0 gutter-width 38 | 39 | .inner 40 | column(columns) 41 | 42 | .left, .alignleft 43 | float: left 44 | 45 | .right, .alignright 46 | float: right 47 | 48 | .clear 49 | clear: both 50 | 51 | #container 52 | position: relative 53 | 54 | .mobile-nav-on 55 | overflow: hidden 56 | 57 | #wrap 58 | height: 100% 59 | width: 100% 60 | position: absolute 61 | top: 0 62 | left: 0 63 | transition: 0.2s ease-out 64 | z-index: 1 65 | background: color-background 66 | .mobile-nav-on & 67 | left: mobile-nav-width 68 | 69 | if sidebar and sidebar isnt bottom 70 | #main 71 | @media mq-normal 72 | column(main-column) 73 | 74 | if sidebar is left 75 | @media mq-normal 76 | #main 77 | float: right 78 | 79 | @import "_extend" 80 | @import "_partial/header" 81 | @import "_partial/article" 82 | @import "_partial/comment" 83 | @import "_partial/archive" 84 | @import "_partial/footer" 85 | @import "_partial/highlight" 86 | @import "_partial/mobile" 87 | 88 | if sidebar 89 | @import "_partial/sidebar" -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/blank.gif -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/fancybox_loading.gif -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/fancybox_loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/fancybox_loading@2x.gif -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/fancybox_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/fancybox_overlay.png -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/fancybox_sprite.png -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/fancybox_sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/fancybox_sprite@2x.png -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/helpers/fancybox_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/docs/themes/landscape/source/fancybox/helpers/fancybox_buttons.png -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css: -------------------------------------------------------------------------------- 1 | #fancybox-buttons { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | z-index: 8050; 6 | } 7 | 8 | #fancybox-buttons.top { 9 | top: 10px; 10 | } 11 | 12 | #fancybox-buttons.bottom { 13 | bottom: 10px; 14 | } 15 | 16 | #fancybox-buttons ul { 17 | display: block; 18 | width: 166px; 19 | height: 30px; 20 | margin: 0 auto; 21 | padding: 0; 22 | list-style: none; 23 | border: 1px solid #111; 24 | border-radius: 3px; 25 | -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 26 | -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 27 | box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 28 | background: rgb(50,50,50); 29 | background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); 30 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); 31 | background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 32 | background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 33 | background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 34 | background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 35 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); 36 | } 37 | 38 | #fancybox-buttons ul li { 39 | float: left; 40 | margin: 0; 41 | padding: 0; 42 | } 43 | 44 | #fancybox-buttons a { 45 | display: block; 46 | width: 30px; 47 | height: 30px; 48 | text-indent: -9999px; 49 | background-color: transparent; 50 | background-image: url('fancybox_buttons.png'); 51 | background-repeat: no-repeat; 52 | outline: none; 53 | opacity: 0.8; 54 | } 55 | 56 | #fancybox-buttons a:hover { 57 | opacity: 1; 58 | } 59 | 60 | #fancybox-buttons a.btnPrev { 61 | background-position: 5px 0; 62 | } 63 | 64 | #fancybox-buttons a.btnNext { 65 | background-position: -33px 0; 66 | border-right: 1px solid #3e3e3e; 67 | } 68 | 69 | #fancybox-buttons a.btnPlay { 70 | background-position: 0 -30px; 71 | } 72 | 73 | #fancybox-buttons a.btnPlayOn { 74 | background-position: -30px -30px; 75 | } 76 | 77 | #fancybox-buttons a.btnToggle { 78 | background-position: 3px -60px; 79 | border-left: 1px solid #111; 80 | border-right: 1px solid #3e3e3e; 81 | width: 35px 82 | } 83 | 84 | #fancybox-buttons a.btnToggleOn { 85 | background-position: -27px -60px; 86 | } 87 | 88 | #fancybox-buttons a.btnClose { 89 | border-left: 1px solid #111; 90 | width: 35px; 91 | background-position: -56px 0px; 92 | } 93 | 94 | #fancybox-buttons a.btnDisabled { 95 | opacity : 0.4; 96 | cursor: default; 97 | } -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Buttons helper for fancyBox 3 | * version: 1.0.5 (Mon, 15 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * buttons: { 10 | * position : 'top' 11 | * } 12 | * } 13 | * }); 14 | * 15 | */ 16 | ;(function ($) { 17 | //Shortcut for fancyBox object 18 | var F = $.fancybox; 19 | 20 | //Add helper object 21 | F.helpers.buttons = { 22 | defaults : { 23 | skipSingle : false, // disables if gallery contains single image 24 | position : 'top', // 'top' or 'bottom' 25 | tpl : '
    ' 26 | }, 27 | 28 | list : null, 29 | buttons: null, 30 | 31 | beforeLoad: function (opts, obj) { 32 | //Remove self if gallery do not have at least two items 33 | 34 | if (opts.skipSingle && obj.group.length < 2) { 35 | obj.helpers.buttons = false; 36 | obj.closeBtn = true; 37 | 38 | return; 39 | } 40 | 41 | //Increase top margin to give space for buttons 42 | obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; 43 | }, 44 | 45 | onPlayStart: function () { 46 | if (this.buttons) { 47 | this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); 48 | } 49 | }, 50 | 51 | onPlayEnd: function () { 52 | if (this.buttons) { 53 | this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); 54 | } 55 | }, 56 | 57 | afterShow: function (opts, obj) { 58 | var buttons = this.buttons; 59 | 60 | if (!buttons) { 61 | this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); 62 | 63 | buttons = { 64 | prev : this.list.find('.btnPrev').click( F.prev ), 65 | next : this.list.find('.btnNext').click( F.next ), 66 | play : this.list.find('.btnPlay').click( F.play ), 67 | toggle : this.list.find('.btnToggle').click( F.toggle ), 68 | close : this.list.find('.btnClose').click( F.close ) 69 | } 70 | } 71 | 72 | //Prev 73 | if (obj.index > 0 || obj.loop) { 74 | buttons.prev.removeClass('btnDisabled'); 75 | } else { 76 | buttons.prev.addClass('btnDisabled'); 77 | } 78 | 79 | //Next / Play 80 | if (obj.loop || obj.index < obj.group.length - 1) { 81 | buttons.next.removeClass('btnDisabled'); 82 | buttons.play.removeClass('btnDisabled'); 83 | 84 | } else { 85 | buttons.next.addClass('btnDisabled'); 86 | buttons.play.addClass('btnDisabled'); 87 | } 88 | 89 | this.buttons = buttons; 90 | 91 | this.onUpdate(opts, obj); 92 | }, 93 | 94 | onUpdate: function (opts, obj) { 95 | var toggle; 96 | 97 | if (!this.buttons) { 98 | return; 99 | } 100 | 101 | toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); 102 | 103 | //Size toggle button 104 | if (obj.canShrink) { 105 | toggle.addClass('btnToggleOn'); 106 | 107 | } else if (!obj.canExpand) { 108 | toggle.addClass('btnDisabled'); 109 | } 110 | }, 111 | 112 | beforeClose: function () { 113 | if (this.list) { 114 | this.list.remove(); 115 | } 116 | 117 | this.list = null; 118 | this.buttons = null; 119 | } 120 | }; 121 | 122 | }(jQuery)); 123 | -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css: -------------------------------------------------------------------------------- 1 | #fancybox-thumbs { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | overflow: hidden; 6 | z-index: 8050; 7 | } 8 | 9 | #fancybox-thumbs.bottom { 10 | bottom: 2px; 11 | } 12 | 13 | #fancybox-thumbs.top { 14 | top: 2px; 15 | } 16 | 17 | #fancybox-thumbs ul { 18 | position: relative; 19 | list-style: none; 20 | margin: 0; 21 | padding: 0; 22 | } 23 | 24 | #fancybox-thumbs ul li { 25 | float: left; 26 | padding: 1px; 27 | opacity: 0.5; 28 | } 29 | 30 | #fancybox-thumbs ul li.active { 31 | opacity: 0.75; 32 | padding: 0; 33 | border: 1px solid #fff; 34 | } 35 | 36 | #fancybox-thumbs ul li:hover { 37 | opacity: 1; 38 | } 39 | 40 | #fancybox-thumbs ul li a { 41 | display: block; 42 | position: relative; 43 | overflow: hidden; 44 | border: 1px solid #222; 45 | background: #111; 46 | outline: none; 47 | } 48 | 49 | #fancybox-thumbs ul li img { 50 | display: block; 51 | position: relative; 52 | border: 0; 53 | padding: 0; 54 | max-width: none; 55 | } -------------------------------------------------------------------------------- /docs/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Thumbnail helper for fancyBox 3 | * version: 1.0.7 (Mon, 01 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * thumbs: { 10 | * width : 50, 11 | * height : 50 12 | * } 13 | * } 14 | * }); 15 | * 16 | */ 17 | ;(function ($) { 18 | //Shortcut for fancyBox object 19 | var F = $.fancybox; 20 | 21 | //Add helper object 22 | F.helpers.thumbs = { 23 | defaults : { 24 | width : 50, // thumbnail width 25 | height : 50, // thumbnail height 26 | position : 'bottom', // 'top' or 'bottom' 27 | source : function ( item ) { // function to obtain the URL of the thumbnail image 28 | var href; 29 | 30 | if (item.element) { 31 | href = $(item.element).find('img').attr('src'); 32 | } 33 | 34 | if (!href && item.type === 'image' && item.href) { 35 | href = item.href; 36 | } 37 | 38 | return href; 39 | } 40 | }, 41 | 42 | wrap : null, 43 | list : null, 44 | width : 0, 45 | 46 | init: function (opts, obj) { 47 | var that = this, 48 | list, 49 | thumbWidth = opts.width, 50 | thumbHeight = opts.height, 51 | thumbSource = opts.source; 52 | 53 | //Build list structure 54 | list = ''; 55 | 56 | for (var n = 0; n < obj.group.length; n++) { 57 | list += '
  • '; 58 | } 59 | 60 | this.wrap = $('
    ').addClass(opts.position).appendTo('body'); 61 | this.list = $('').appendTo(this.wrap); 62 | 63 | //Load each thumbnail 64 | $.each(obj.group, function (i) { 65 | var el = obj.group[ i ], 66 | href = thumbSource( el ); 67 | 68 | if (!href) { 69 | return; 70 | } 71 | 72 | $("").load(function () { 73 | var width = this.width, 74 | height = this.height, 75 | widthRatio, heightRatio, parent; 76 | 77 | if (!that.list || !width || !height) { 78 | return; 79 | } 80 | 81 | //Calculate thumbnail width/height and center it 82 | widthRatio = width / thumbWidth; 83 | heightRatio = height / thumbHeight; 84 | 85 | parent = that.list.children().eq(i).find('a'); 86 | 87 | if (widthRatio >= 1 && heightRatio >= 1) { 88 | if (widthRatio > heightRatio) { 89 | width = Math.floor(width / heightRatio); 90 | height = thumbHeight; 91 | 92 | } else { 93 | width = thumbWidth; 94 | height = Math.floor(height / widthRatio); 95 | } 96 | } 97 | 98 | $(this).css({ 99 | width : width, 100 | height : height, 101 | top : Math.floor(thumbHeight / 2 - height / 2), 102 | left : Math.floor(thumbWidth / 2 - width / 2) 103 | }); 104 | 105 | parent.width(thumbWidth).height(thumbHeight); 106 | 107 | $(this).hide().appendTo(parent).fadeIn(300); 108 | 109 | }) 110 | .attr('src', href) 111 | .attr('title', el.title); 112 | }); 113 | 114 | //Set initial width 115 | this.width = this.list.children().eq(0).outerWidth(true); 116 | 117 | this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); 118 | }, 119 | 120 | beforeLoad: function (opts, obj) { 121 | //Remove self if gallery do not have at least two items 122 | if (obj.group.length < 2) { 123 | obj.helpers.thumbs = false; 124 | 125 | return; 126 | } 127 | 128 | //Increase bottom margin to give space for thumbs 129 | obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); 130 | }, 131 | 132 | afterShow: function (opts, obj) { 133 | //Check if exists and create or update list 134 | if (this.list) { 135 | this.onUpdate(opts, obj); 136 | 137 | } else { 138 | this.init(opts, obj); 139 | } 140 | 141 | //Set active element 142 | this.list.children().removeClass('active').eq(obj.index).addClass('active'); 143 | }, 144 | 145 | //Center list 146 | onUpdate: function (opts, obj) { 147 | if (this.list) { 148 | this.list.stop(true).animate({ 149 | 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) 150 | }, 150); 151 | } 152 | }, 153 | 154 | beforeClose: function () { 155 | if (this.wrap) { 156 | this.wrap.remove(); 157 | } 158 | 159 | this.wrap = null; 160 | this.list = null; 161 | this.width = 0; 162 | } 163 | } 164 | 165 | }(jQuery)); -------------------------------------------------------------------------------- /docs/themes/landscape/source/js/script.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | // Search 3 | var $searchWrap = $('#search-form-wrap'), 4 | isSearchAnim = false, 5 | searchAnimDuration = 200; 6 | 7 | var startSearchAnim = function(){ 8 | isSearchAnim = true; 9 | }; 10 | 11 | var stopSearchAnim = function(callback){ 12 | setTimeout(function(){ 13 | isSearchAnim = false; 14 | callback && callback(); 15 | }, searchAnimDuration); 16 | }; 17 | 18 | $('#nav-search-btn').on('click', function(){ 19 | if (isSearchAnim) return; 20 | 21 | startSearchAnim(); 22 | $searchWrap.addClass('on'); 23 | stopSearchAnim(function(){ 24 | $('.search-form-input').focus(); 25 | }); 26 | }); 27 | 28 | $('.search-form-input').on('blur', function(){ 29 | startSearchAnim(); 30 | $searchWrap.removeClass('on'); 31 | stopSearchAnim(); 32 | }); 33 | 34 | // Share 35 | $('body').on('click', function(){ 36 | $('.article-share-box.on').removeClass('on'); 37 | }).on('click', '.article-share-link', function(e){ 38 | e.stopPropagation(); 39 | 40 | var $this = $(this), 41 | url = $this.attr('data-url'), 42 | encodedUrl = encodeURIComponent(url), 43 | id = 'article-share-box-' + $this.attr('data-id'), 44 | offset = $this.offset(); 45 | 46 | if ($('#' + id).length){ 47 | var box = $('#' + id); 48 | 49 | if (box.hasClass('on')){ 50 | box.removeClass('on'); 51 | return; 52 | } 53 | } else { 54 | var html = [ 55 | '
    ', 56 | '', 57 | '
    ', 58 | '', 59 | '', 60 | '', 61 | '', 62 | '
    ', 63 | '
    ' 64 | ].join(''); 65 | 66 | var box = $(html); 67 | 68 | $('body').append(box); 69 | } 70 | 71 | $('.article-share-box.on').hide(); 72 | 73 | box.css({ 74 | top: offset.top + 25, 75 | left: offset.left 76 | }).addClass('on'); 77 | }).on('click', '.article-share-box', function(e){ 78 | e.stopPropagation(); 79 | }).on('click', '.article-share-box-input', function(){ 80 | $(this).select(); 81 | }).on('click', '.article-share-box-link', function(e){ 82 | e.preventDefault(); 83 | e.stopPropagation(); 84 | 85 | window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); 86 | }); 87 | 88 | // Caption 89 | $('.article-entry').each(function(i){ 90 | $(this).find('img').each(function(){ 91 | if ($(this).parent().hasClass('fancybox')) return; 92 | 93 | var alt = this.alt; 94 | 95 | if (alt) $(this).after('' + alt + ''); 96 | 97 | $(this).wrap(''); 98 | }); 99 | 100 | $(this).find('.fancybox').each(function(){ 101 | $(this).attr('rel', 'article' + i); 102 | }); 103 | }); 104 | 105 | if ($.fancybox){ 106 | $('.fancybox').fancybox(); 107 | } 108 | 109 | // Mobile nav 110 | var $container = $('#container'), 111 | isMobileNavAnim = false, 112 | mobileNavAnimDuration = 200; 113 | 114 | var startMobileNavAnim = function(){ 115 | isMobileNavAnim = true; 116 | }; 117 | 118 | var stopMobileNavAnim = function(){ 119 | setTimeout(function(){ 120 | isMobileNavAnim = false; 121 | }, mobileNavAnimDuration); 122 | } 123 | 124 | $('#main-nav-toggle').on('click', function(){ 125 | if (isMobileNavAnim) return; 126 | 127 | startMobileNavAnim(); 128 | $container.toggleClass('mobile-nav-on'); 129 | stopMobileNavAnim(); 130 | }); 131 | 132 | $('#wrap').on('click', function(){ 133 | if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return; 134 | 135 | $container.removeClass('mobile-nav-on'); 136 | }); 137 | })(jQuery); -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | Thumbs.db 3 | db.json 4 | *.log 5 | node_modules/ 6 | public/ 7 | .deploy*/ -------------------------------------------------------------------------------- /example/_config.yml: -------------------------------------------------------------------------------- 1 | # Hexo Configuration 2 | ## Docs: https://hexo.io/docs/configuration.html 3 | ## Source: https://github.com/hexojs/hexo/ 4 | 5 | # Site 6 | title: gitalk 基本示例 7 | subtitle: hexo-plugin-gitalk 8 | description: 9 | keywords: 10 | author: 雪之梦技术驿站 11 | language: zh-Hans 12 | timezone: 13 | 14 | # URL 15 | ## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' 16 | url: http://yoursite.com 17 | root: / 18 | permalink: :year/:month/:day/:title/ 19 | permalink_defaults: 20 | pretty_urls: 21 | trailing_index: true # Set to false to remove trailing index.html from permalinks 22 | 23 | # Directory 24 | source_dir: source 25 | public_dir: public 26 | tag_dir: tags 27 | archive_dir: archives 28 | category_dir: categories 29 | code_dir: downloads/code 30 | i18n_dir: :lang 31 | skip_render: 32 | 33 | # Writing 34 | new_post_name: :title.md # File name of new posts 35 | default_layout: post 36 | titlecase: false # Transform title into titlecase 37 | external_link: 38 | enable: true # Open external links in new tab 39 | field: site # Apply to the whole site 40 | exclude: 41 | filename_case: 0 42 | render_drafts: false 43 | post_asset_folder: false 44 | relative_link: false 45 | future: true 46 | highlight: 47 | enable: true 48 | line_number: true 49 | auto_detect: false 50 | tab_replace: 51 | 52 | # Home page setting 53 | # path: Root path for your blogs index page. (default = '') 54 | # per_page: Posts displayed per page. (0 = disable pagination) 55 | # order_by: Posts order. (Order by date descending by default) 56 | index_generator: 57 | path: '' 58 | per_page: 10 59 | order_by: -date 60 | 61 | # Category & Tag 62 | default_category: uncategorized 63 | category_map: 64 | tag_map: 65 | 66 | # Metadata elements 67 | ## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta 68 | meta_generator: true 69 | 70 | # Date / Time format 71 | ## Hexo uses Moment.js to parse and display date 72 | ## You can customize the date format as defined in 73 | ## http://momentjs.com/docs/#/displaying/format/ 74 | date_format: YYYY-MM-DD 75 | time_format: HH:mm:ss 76 | ## Use post's date for updated date unless set in front-matter 77 | use_date_for_updated: false 78 | 79 | # Pagination 80 | ## Set per_page to 0 to disable pagination 81 | per_page: 10 82 | pagination_dir: page 83 | 84 | # Extensions 85 | ## Plugins: https://hexo.io/plugins/ 86 | plugins: 87 | # 评论插件 88 | gitalk: 89 | clientID: 3f62415a283d19cbd696 90 | clientSecret: aed0e1db0620bf5d0e3a3f0225f801997ad74e58 91 | repo: hexo-plugin-gitalk 92 | owner: snowdreams1006 93 | admin: 94 | - snowdreams1006 95 | distractionFreeMode: false 96 | # 阅读更多插件 97 | readmore: 98 | blogId: 15702-1569305559839-744 99 | name: 雪之梦技术驿站 100 | qrcode: https://snowdreams1006.github.io/snowdreams1006-wechat-public.jpeg 101 | keyword: vip 102 | 103 | ## Themes: https://hexo.io/themes/ 104 | theme: next 105 | 106 | # Deployment 107 | ## Docs: https://hexo.io/docs/deployment.html 108 | deploy: 109 | type: 110 | -------------------------------------------------------------------------------- /example/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-site", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "hexo generate", 7 | "clean": "hexo clean", 8 | "deploy": "hexo deploy", 9 | "server": "hexo server" 10 | }, 11 | "hexo": { 12 | "version": "4.0.0" 13 | }, 14 | "dependencies": { 15 | "hexo": "^4.0.0", 16 | "hexo-generator-archive": "^1.0.0", 17 | "hexo-generator-category": "^1.0.0", 18 | "hexo-generator-index": "^1.0.0", 19 | "hexo-generator-tag": "^1.0.0", 20 | "hexo-plugin-gitalk": "^0.2.0", 21 | "hexo-plugin-readmore": "^0.1.1", 22 | "hexo-renderer-ejs": "^1.0.0", 23 | "hexo-renderer-marked": "^2.0.0", 24 | "hexo-renderer-stylus": "^1.1.0", 25 | "hexo-server": "^1.0.0" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /example/scaffolds/draft.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | tags: 4 | --- 5 | -------------------------------------------------------------------------------- /example/scaffolds/page.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | --- 5 | -------------------------------------------------------------------------------- /example/scaffolds/post.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: {{ title }} 3 | date: {{ date }} 4 | tags: 5 | --- 6 | -------------------------------------------------------------------------------- /example/source/_posts/hello-world.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hello World 3 | --- 4 | Welcome to [Hexo](https://hexo.io/)! This is your very first post. Check [documentation](https://hexo.io/docs/) for more info. If you get any problems when using Hexo, you can find the answer in [troubleshooting](https://hexo.io/docs/troubleshooting.html) or you can ask me on [GitHub](https://github.com/hexojs/hexo/issues). 5 | 6 | ## Quick Start 7 | 8 | ### Create a new post 9 | 10 | ``` bash 11 | $ hexo new "My New Post" 12 | ``` 13 | 14 | More info: [Writing](https://hexo.io/docs/writing.html) 15 | 16 | ### Run server 17 | 18 | ``` bash 19 | $ hexo server 20 | ``` 21 | 22 | More info: [Server](https://hexo.io/docs/server.html) 23 | 24 | ### Generate static files 25 | 26 | ``` bash 27 | $ hexo generate 28 | ``` 29 | 30 | More info: [Generating](https://hexo.io/docs/generating.html) 31 | 32 | ### Deploy to remote sites 33 | 34 | ``` bash 35 | $ hexo deploy 36 | ``` 37 | 38 | More info: [Deployment](https://hexo.io/docs/deployment.html) 39 | -------------------------------------------------------------------------------- /example/themes/landscape/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules 3 | tmp -------------------------------------------------------------------------------- /example/themes/landscape/Gruntfile.js: -------------------------------------------------------------------------------- 1 | module.exports = function(grunt){ 2 | grunt.initConfig({ 3 | gitclone: { 4 | fontawesome: { 5 | options: { 6 | repository: 'https://github.com/FortAwesome/Font-Awesome.git', 7 | directory: 'tmp/fontawesome' 8 | }, 9 | }, 10 | fancybox: { 11 | options: { 12 | repository: 'https://github.com/fancyapps/fancyBox.git', 13 | directory: 'tmp/fancybox' 14 | } 15 | } 16 | }, 17 | copy: { 18 | fontawesome: { 19 | expand: true, 20 | cwd: 'tmp/fontawesome/fonts/', 21 | src: ['**'], 22 | dest: 'source/css/fonts/' 23 | }, 24 | fancybox: { 25 | expand: true, 26 | cwd: 'tmp/fancybox/source/', 27 | src: ['**'], 28 | dest: 'source/fancybox/' 29 | } 30 | }, 31 | _clean: { 32 | tmp: ['tmp'], 33 | fontawesome: ['source/css/fonts'], 34 | fancybox: ['source/fancybox'] 35 | } 36 | }); 37 | 38 | require('load-grunt-tasks')(grunt); 39 | 40 | grunt.renameTask('clean', '_clean'); 41 | 42 | grunt.registerTask('fontawesome', ['gitclone:fontawesome', 'copy:fontawesome', '_clean:tmp']); 43 | grunt.registerTask('fancybox', ['gitclone:fancybox', 'copy:fancybox', '_clean:tmp']); 44 | grunt.registerTask('default', ['gitclone', 'copy', '_clean:tmp']); 45 | grunt.registerTask('clean', ['_clean']); 46 | }; -------------------------------------------------------------------------------- /example/themes/landscape/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2013 Tommy Chen 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /example/themes/landscape/README.md: -------------------------------------------------------------------------------- 1 | # Landscape 2 | 3 | A brand new default theme for [Hexo]. 4 | 5 | - [Preview](http://hexo.io/hexo-theme-landscape/) 6 | 7 | ## Installation 8 | 9 | ### Install 10 | 11 | ``` bash 12 | $ git clone https://github.com/hexojs/hexo-theme-landscape.git themes/landscape 13 | ``` 14 | 15 | **Landscape requires Hexo 2.4 and above.** If you would like to enable the RSS, the [hexo-generate-feed] plugin is also required. 16 | 17 | ### Enable 18 | 19 | Modify `theme` setting in `_config.yml` to `landscape`. 20 | 21 | ### Update 22 | 23 | ``` bash 24 | cd themes/landscape 25 | git pull 26 | ``` 27 | 28 | ## Configuration 29 | 30 | ``` yml 31 | # Header 32 | menu: 33 | Home: / 34 | Archives: /archives 35 | rss: /atom.xml 36 | 37 | # Content 38 | excerpt_link: Read More 39 | fancybox: true 40 | 41 | # Sidebar 42 | sidebar: right 43 | widgets: 44 | - category 45 | - tag 46 | - tagcloud 47 | - archives 48 | - recent_posts 49 | 50 | # Miscellaneous 51 | google_analytics: 52 | favicon: /favicon.png 53 | twitter: 54 | google_plus: 55 | ``` 56 | 57 | - **menu** - Navigation menu 58 | - **rss** - RSS link 59 | - **excerpt_link** - "Read More" link at the bottom of excerpted articles. `false` to hide the link. 60 | - **fancybox** - Enable [Fancybox] 61 | - **sidebar** - Sidebar style. You can choose `left`, `right`, `bottom` or `false`. 62 | - **widgets** - Widgets displaying in sidebar 63 | - **google_analytics** - Google Analytics ID 64 | - **favicon** - Favicon path 65 | - **twitter** - Twiiter ID 66 | - **google_plus** - Google+ ID 67 | 68 | ## Features 69 | 70 | ### Fancybox 71 | 72 | Landscape uses [Fancybox] to showcase your photos. You can use Markdown syntax or fancybox tag plugin to add your photos. 73 | 74 | ``` 75 | ![img caption](img url) 76 | 77 | {% fancybox img_url [img_thumbnail] [img_caption] %} 78 | ``` 79 | 80 | ### Sidebar 81 | 82 | You can put your sidebar in left side, right side or bottom of your site by editing `sidebar` setting. 83 | 84 | Landscape provides 5 built-in widgets: 85 | 86 | - category 87 | - tag 88 | - tagcloud 89 | - archives 90 | - recent_posts 91 | 92 | All of them are enabled by default. You can edit them in `widget` setting. 93 | 94 | ## Development 95 | 96 | ### Requirements 97 | 98 | - [Grunt] 0.4+ 99 | - Hexo 2.4+ 100 | 101 | ### Grunt tasks 102 | 103 | - **default** - Download [Fancybox] and [Font Awesome]. 104 | - **fontawesome** - Only download [Font Awesome]. 105 | - **fancybox** - Only download [Fancybox]. 106 | - **clean** - Clean temporarily files and downloaded files. 107 | 108 | [Hexo]: https://hexo.io/ 109 | [Fancybox]: http://fancyapps.com/fancybox/ 110 | [Font Awesome]: http://fontawesome.io/ 111 | [Grunt]: http://gruntjs.com/ 112 | [hexo-generate-feed]: https://github.com/hexojs/hexo-generator-feed 113 | -------------------------------------------------------------------------------- /example/themes/landscape/_config.yml: -------------------------------------------------------------------------------- 1 | # Header 2 | menu: 3 | Home: / 4 | Archives: /archives 5 | rss: /atom.xml 6 | 7 | # Content 8 | excerpt_link: Read More 9 | fancybox: true 10 | 11 | # Sidebar 12 | sidebar: right 13 | widgets: 14 | - category 15 | - tag 16 | - tagcloud 17 | - archive 18 | - recent_posts 19 | 20 | # display widgets at the bottom of index pages (pagination == 2) 21 | index_widgets: 22 | # - category 23 | # - tagcloud 24 | # - archive 25 | 26 | # widget behavior 27 | archive_type: 'monthly' 28 | show_count: false 29 | 30 | # Miscellaneous 31 | google_analytics: 32 | gauges_analytics: 33 | favicon: /favicon.png 34 | twitter: 35 | google_plus: 36 | fb_admins: 37 | fb_app_id: 38 | -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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 -------------------------------------------------------------------------------- /example/themes/landscape/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 -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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 -------------------------------------------------------------------------------- /example/themes/landscape/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 | -------------------------------------------------------------------------------- /example/themes/landscape/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: Метка -------------------------------------------------------------------------------- /example/themes/landscape/languages/zh-CN.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 -------------------------------------------------------------------------------- /example/themes/landscape/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 -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/after-footer.ejs: -------------------------------------------------------------------------------- 1 | <% if (config.disqus_shortname){ %> 2 | 15 | <% } %> 16 | 17 | 18 | 19 | <% if (theme.fancybox){ %> 20 | <%- css('fancybox/jquery.fancybox') %> 21 | <%- js('fancybox/jquery.fancybox.pack') %> 22 | <% } %> 23 | 24 | <%- js('js/script') %> 25 | <%- partial('gauges-analytics') %> 26 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/archive-post.ejs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 |
    4 | <%- partial('post/date', {class_name: 'archive-article-date', date_format: 'MMM D'}) %> 5 | <%- partial('post/title', {class_name: 'archive-article-title'}) %> 6 |
    7 |
    8 |
    -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/archive.ejs: -------------------------------------------------------------------------------- 1 | <% if (pagination == 2){ %> 2 | <% page.posts.each(function(post){ %> 3 | <%- partial('article', {post: post, index: true}) %> 4 | <% }) %> 5 | <% } else { %> 6 | <% var last; %> 7 | <% page.posts.each(function(post, i){ %> 8 | <% var year = post.date.year(); %> 9 | <% if (last != year){ %> 10 | <% if (last != null){ %> 11 | 12 | <% } %> 13 | <% last = year; %> 14 |
    15 |
    16 | <%= year %> 17 |
    18 |
    19 | <% } %> 20 | <%- partial('archive-post', {post: post, even: i % 2 == 0}) %> 21 | <% }) %> 22 | <% if (page.posts.length){ %> 23 |
    24 | <% } %> 25 | <% } %> 26 | <% if (page.total > 1){ %> 27 | 34 | <% } %> 35 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/article.ejs: -------------------------------------------------------------------------------- 1 |
    2 |
    3 | <%- partial('post/date', {class_name: 'article-date', date_format: null}) %> 4 | <%- partial('post/category') %> 5 |
    6 |
    7 | <%- partial('post/gallery') %> 8 | <% if (post.link || post.title){ %> 9 |
    10 | <%- partial('post/title', {class_name: 'article-title'}) %> 11 |
    12 | <% } %> 13 |
    14 | <% if (post.excerpt && index){ %> 15 | <%- post.excerpt %> 16 | <% if (theme.excerpt_link){ %> 17 |

    18 | <%= theme.excerpt_link %> 19 |

    20 | <% } %> 21 | <% } else { %> 22 | <%- post.content %> 23 | <% } %> 24 |
    25 | 32 |
    33 | <% if (!index){ %> 34 | <%- partial('post/nav') %> 35 | <% } %> 36 |
    37 | 38 | <% if (!index && post.comments && config.disqus_shortname){ %> 39 |
    40 |
    41 | 42 |
    43 |
    44 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/footer.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/gauges-analytics.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.gauges_analytics){ %> 2 | 3 | 17 | 18 | <% } %> 19 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/google-analytics.ejs: -------------------------------------------------------------------------------- 1 | <% if (theme.google_analytics){ %> 2 | 3 | 13 | 14 | <% } %> 15 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/head.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | <%- partial('google-analytics') %> 6 | <% 7 | var title = page.title; 8 | 9 | if (is_archive()){ 10 | title = __('archive_a'); 11 | 12 | if (is_month()){ 13 | title += ': ' + page.year + '/' + page.month; 14 | } else if (is_year()){ 15 | title += ': ' + page.year; 16 | } 17 | } else if (is_category()){ 18 | title = __('category') + ': ' + page.category; 19 | } else if (is_tag()){ 20 | title = __('tag') + ': ' + page.tag; 21 | } 22 | %> 23 | <% if (title){ %><%= title %> | <% } %><%= config.title %> 24 | 25 | <%- open_graph({twitter_id: theme.twitter, google_plus: theme.google_plus, fb_admins: theme.fb_admins, fb_app_id: theme.fb_app_id}) %> 26 | <% if (theme.rss){ %> 27 | 28 | <% } %> 29 | <% if (theme.favicon){ %> 30 | 31 | <% } %> 32 | <% if (config.highlight.enable){ %> 33 | 34 | <% } %> 35 | <%- css('css/style') %> 36 | 37 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/header.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/mobile-nav.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/post/date.ejs: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/post/gallery.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.photos && post.photos.length){ %> 2 |
    3 |
    4 | <% post.photos.forEach(function(photo, i){ %> 5 | 6 | 7 | 8 | <% }) %> 9 |
    10 |
    11 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/post/nav.ejs: -------------------------------------------------------------------------------- 1 | <% if (post.prev || post.next){ %> 2 | 22 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/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 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/_partial/sidebar.ejs: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_widget/archive.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.posts.length){ %> 2 |
    3 |

    <%= __('archive_a') %>

    4 |
    5 | <%- list_archives({show_count: theme.show_count, type: theme.archive_type}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_widget/category.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.categories.length){ %> 2 |
    3 |

    <%= __('categories') %>

    4 |
    5 | <%- list_categories({show_count: theme.show_count}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_widget/recent_posts.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.posts.length){ %> 2 |
    3 |

    <%= __('recent_posts') %>

    4 |
    5 | 12 |
    13 |
    14 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/_widget/tag.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.tags.length){ %> 2 |
    3 |

    <%= __('tags') %>

    4 |
    5 | <%- list_tags({show_count: theme.show_count}) %> 6 |
    7 |
    8 | <% } %> 9 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/_widget/tagcloud.ejs: -------------------------------------------------------------------------------- 1 | <% if (site.tags.length){ %> 2 |
    3 |

    <%= __('tagcloud') %>

    4 |
    5 | <%- tagcloud() %> 6 |
    7 |
    8 | <% } %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/archive.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.archive, index: true}) %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/category.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.category, index: true}) %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/index.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: 2, index: true}) %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/layout.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/head') %> 2 | 3 |
    4 |
    5 | <%- partial('_partial/header', null, {cache: !config.relative_link}) %> 6 |
    7 |
    <%- body %>
    8 | <% if (theme.sidebar && theme.sidebar !== 'bottom'){ %> 9 | <%- partial('_partial/sidebar', null, {cache: !config.relative_link}) %> 10 | <% } %> 11 |
    12 | <%- partial('_partial/footer', null, {cache: !config.relative_link}) %> 13 |
    14 | <%- partial('_partial/mobile-nav', null, {cache: !config.relative_link}) %> 15 | <%- partial('_partial/after-footer') %> 16 |
    17 | 18 | -------------------------------------------------------------------------------- /example/themes/landscape/layout/page.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article', {post: page, index: false}) %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/post.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/article', {post: page, index: false}) %> -------------------------------------------------------------------------------- /example/themes/landscape/layout/tag.ejs: -------------------------------------------------------------------------------- 1 | <%- partial('_partial/archive', {pagination: config.tag, index: true}) %> -------------------------------------------------------------------------------- /example/themes/landscape/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-theme-landscape", 3 | "version": "0.0.2", 4 | "private": true, 5 | "devDependencies": { 6 | "grunt": "~0.4.2", 7 | "load-grunt-tasks": "~0.2.0", 8 | "grunt-git": "~0.2.2", 9 | "grunt-contrib-clean": "~0.5.0", 10 | "grunt-contrib-copy": "~0.4.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /example/themes/landscape/scripts/fancybox.js: -------------------------------------------------------------------------------- 1 | var rUrl = /((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[.\!\/\\w]*))?)/; 2 | 3 | /** 4 | * Fancybox tag 5 | * 6 | * Syntax: 7 | * {% fancybox /path/to/image [/path/to/thumbnail] [title] %} 8 | */ 9 | 10 | hexo.extend.tag.register('fancybox', function(args){ 11 | var original = args.shift(), 12 | thumbnail = ''; 13 | 14 | if (args.length && rUrl.test(args[0])){ 15 | thumbnail = args.shift(); 16 | } 17 | 18 | var title = args.join(' '); 19 | 20 | return '' + 21 | '' + title + '' 22 | '' + 23 | (title ? '' + title + '' : ''); 24 | }); -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_extend.styl: -------------------------------------------------------------------------------- 1 | $block-caption 2 | text-decoration: none 3 | text-transform: uppercase 4 | letter-spacing: 2px 5 | color: color-grey 6 | margin-bottom: 1em 7 | margin-left: 5px 8 | line-height: 1em 9 | text-shadow: 0 1px #fff 10 | font-weight: bold 11 | 12 | $block 13 | background: #fff 14 | box-shadow: 1px 2px 3px #ddd 15 | border: 1px solid color-border 16 | border-radius: 3px 17 | 18 | $base-style 19 | h1 20 | font-size: 2em 21 | h2 22 | font-size: 1.5em 23 | h3 24 | font-size: 1.3em 25 | h4 26 | font-size: 1.2em 27 | h5 28 | font-size: 1em 29 | h6 30 | font-size: 1em 31 | color: color-grey 32 | hr 33 | border: 1px dashed color-border 34 | strong 35 | font-weight: bold 36 | em, cite 37 | font-style: italic 38 | sup, sub 39 | font-size: 0.75em 40 | line-height: 0 41 | position: relative 42 | vertical-align: baseline 43 | sup 44 | top: -0.5em 45 | sub 46 | bottom: -0.2em 47 | small 48 | font-size: 0.85em 49 | acronym, abbr 50 | border-bottom: 1px dotted 51 | ul, ol, dl 52 | margin: 0 20px 53 | line-height: line-height 54 | ul, ol 55 | ul, ol 56 | margin-top: 0 57 | margin-bottom: 0 58 | ul 59 | list-style: disc 60 | ol 61 | list-style: decimal 62 | dt 63 | font-weight: bold -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/archive.styl: -------------------------------------------------------------------------------- 1 | .archives-wrap 2 | margin: block-margin 0 3 | 4 | .archives 5 | clearfix() 6 | 7 | .archive-year-wrap 8 | margin-bottom: 1em 9 | 10 | .archive-year 11 | @extend $block-caption 12 | 13 | .archives 14 | column-gap: 10px 15 | @media mq-tablet 16 | column-count: 2 17 | @media mq-normal 18 | column-count: 3 19 | 20 | .archive-article 21 | avoid-column-break() 22 | 23 | .archive-article-inner 24 | @extend $block 25 | padding: 10px 26 | margin-bottom: 15px 27 | 28 | .archive-article-title 29 | text-decoration: none 30 | font-weight: bold 31 | color: color-default 32 | transition: color 0.2s 33 | line-height: line-height 34 | &:hover 35 | color: color-link 36 | 37 | .archive-article-footer 38 | margin-top: 1em 39 | 40 | .archive-article-date 41 | color: color-grey 42 | text-decoration: none 43 | font-size: 0.85em 44 | line-height: 1em 45 | margin-bottom: 0.5em 46 | display: block 47 | 48 | #page-nav 49 | clearfix() 50 | margin: block-margin auto 51 | background: #fff 52 | box-shadow: 1px 2px 3px #ddd 53 | border: 1px solid color-border 54 | border-radius: 3px 55 | text-align: center 56 | color: color-grey 57 | overflow: hidden 58 | a, span 59 | padding: 10px 20px 60 | line-height: 1 61 | height: 2ex 62 | a 63 | color: color-grey 64 | text-decoration: none 65 | &:hover 66 | background: color-grey 67 | color: #fff 68 | .prev 69 | float: left 70 | .next 71 | float: right 72 | .page-number 73 | display: inline-block 74 | @media mq-mobile 75 | display: none 76 | .current 77 | color: color-default 78 | font-weight: bold 79 | .space 80 | color: color-border -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/comment.styl: -------------------------------------------------------------------------------- 1 | #comments 2 | background: #fff 3 | box-shadow: 1px 2px 3px #ddd 4 | padding: article-padding 5 | border: 1px solid color-border 6 | border-radius: 3px 7 | margin: block-margin 0 8 | a 9 | color: color-link -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/footer.styl: -------------------------------------------------------------------------------- 1 | #footer 2 | background: color-footer-background 3 | padding: 50px 0 4 | border-top: 1px solid color-border 5 | color: color-grey 6 | a 7 | color: color-link 8 | text-decoration: none 9 | &:hover 10 | text-decoration: underline 11 | 12 | #footer-info 13 | line-height: line-height 14 | font-size: 0.85em -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/header.styl: -------------------------------------------------------------------------------- 1 | #header 2 | height: banner-height 3 | position: relative 4 | border-bottom: 1px solid color-border 5 | &:before, &:after 6 | content: "" 7 | position: absolute 8 | left: 0 9 | right: 0 10 | height: 40px 11 | &:before 12 | top: 0 13 | background: linear-gradient(rgba(0, 0, 0, 0.2), transparent) 14 | &:after 15 | bottom: 0 16 | background: linear-gradient(transparent, rgba(0, 0, 0, 0.2)) 17 | 18 | #header-outer 19 | height: 100% 20 | position: relative 21 | 22 | #header-inner 23 | position: relative 24 | overflow: hidden 25 | 26 | #banner 27 | position: absolute 28 | top: 0 29 | left: 0 30 | width: 100% 31 | height: 100% 32 | background: url(banner-url) center #000 33 | background-size: cover 34 | z-index: -1 35 | 36 | #header-title 37 | text-align: center 38 | height: logo-size 39 | position: absolute 40 | top: 50% 41 | left: 0 42 | margin-top: logo-size * -0.5 43 | 44 | $logo-text 45 | text-decoration: none 46 | color: #fff 47 | font-weight: 300 48 | text-shadow: 0 1px 4px rgba(0, 0, 0, 0.3) 49 | 50 | #logo 51 | @extend $logo-text 52 | font-size: logo-size 53 | line-height: logo-size 54 | letter-spacing: 2px 55 | 56 | #subtitle 57 | @extend $logo-text 58 | font-size: subtitle-size 59 | line-height: subtitle-size 60 | letter-spacing: 1px 61 | 62 | #subtitle-wrap 63 | margin-top: subtitle-size 64 | 65 | #main-nav 66 | float: left 67 | margin-left: -15px 68 | 69 | $nav-link 70 | float: left 71 | color: #fff 72 | opacity: 0.6 73 | text-decoration: none 74 | text-shadow: 0 1px rgba(0, 0, 0, 0.2) 75 | transition: opacity 0.2s 76 | display: block 77 | padding: 20px 15px 78 | &:hover 79 | opacity: 1 80 | 81 | .nav-icon 82 | @extend $nav-link 83 | font-family: font-icon 84 | text-align: center 85 | font-size: font-size 86 | width: font-size 87 | height: font-size 88 | padding: 20px 15px 89 | position: relative 90 | cursor: pointer 91 | 92 | .main-nav-link 93 | @extend $nav-link 94 | font-weight: 300 95 | letter-spacing: 1px 96 | @media mq-mobile 97 | display: none 98 | 99 | #main-nav-toggle 100 | display: none 101 | &:before 102 | content: "\f0c9" 103 | @media mq-mobile 104 | display: block 105 | 106 | #sub-nav 107 | float: right 108 | margin-right: -15px 109 | 110 | #nav-rss-link 111 | &:before 112 | content: "\f09e" 113 | 114 | #nav-search-btn 115 | &:before 116 | content: "\f002" 117 | 118 | #search-form-wrap 119 | position: absolute 120 | top: 15px 121 | width: 150px 122 | height: 30px 123 | right: -150px 124 | opacity: 0 125 | transition: 0.2s ease-out 126 | &.on 127 | opacity: 1 128 | right: 0 129 | @media mq-mobile 130 | width: 100% 131 | right: -100% 132 | 133 | .search-form 134 | position: absolute 135 | top: 0 136 | left: 0 137 | right: 0 138 | background: #fff 139 | padding: 5px 15px 140 | border-radius: 15px 141 | box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) 142 | 143 | .search-form-input 144 | border: none 145 | background: none 146 | color: color-default 147 | width: 100% 148 | font: 13px font-sans 149 | outline: none 150 | &::-webkit-search-results-decoration 151 | &::-webkit-search-cancel-button 152 | -webkit-appearance: none 153 | 154 | .search-form-submit 155 | position: absolute 156 | top: 50% 157 | right: 10px 158 | margin-top: -7px 159 | font: 13px font-icon 160 | border: none 161 | background: none 162 | color: #bbb 163 | cursor: pointer 164 | &:hover, &:focus 165 | color: #777 -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/highlight.styl: -------------------------------------------------------------------------------- 1 | // https://github.com/chriskempson/tomorrow-theme 2 | highlight-background = #2d2d2d 3 | highlight-current-line = #393939 4 | highlight-selection = #515151 5 | highlight-foreground = #cccccc 6 | highlight-comment = #999999 7 | highlight-red = #f2777a 8 | highlight-orange = #f99157 9 | highlight-yellow = #ffcc66 10 | highlight-green = #99cc99 11 | highlight-aqua = #66cccc 12 | highlight-blue = #6699cc 13 | highlight-purple = #cc99cc 14 | 15 | $code-block 16 | background: highlight-background 17 | margin: 0 article-padding * -1 18 | padding: 15px article-padding 19 | border-style: solid 20 | border-color: color-border 21 | border-width: 1px 0 22 | overflow: auto 23 | color: highlight-foreground 24 | line-height: font-size * line-height 25 | 26 | $line-numbers 27 | color: #666 28 | font-size: 0.85em 29 | 30 | .article-entry 31 | pre, code 32 | font-family: font-mono 33 | code 34 | background: color-background 35 | text-shadow: 0 1px #fff 36 | padding: 0 0.3em 37 | pre 38 | @extend $code-block 39 | code 40 | background: none 41 | text-shadow: none 42 | padding: 0 43 | .highlight 44 | @extend $code-block 45 | pre 46 | border: none 47 | margin: 0 48 | padding: 0 49 | table 50 | margin: 0 51 | width: auto 52 | td 53 | border: none 54 | padding: 0 55 | figcaption 56 | clearfix() 57 | font-size: 0.85em 58 | color: highlight-comment 59 | line-height: 1em 60 | margin-bottom: 1em 61 | a 62 | float: right 63 | .gutter pre 64 | @extend $line-numbers 65 | text-align: right 66 | padding-right: 20px 67 | .line 68 | height: font-size * line-height 69 | .line.marked 70 | background: highlight-selection 71 | .gist 72 | margin: 0 article-padding * -1 73 | border-style: solid 74 | border-color: color-border 75 | border-width: 1px 0 76 | background: highlight-background 77 | padding: 15px article-padding 15px 0 78 | .gist-file 79 | border: none 80 | font-family: font-mono 81 | margin: 0 82 | .gist-data 83 | background: none 84 | border: none 85 | .line-numbers 86 | @extend $line-numbers 87 | background: none 88 | border: none 89 | padding: 0 20px 0 0 90 | .line-data 91 | padding: 0 !important 92 | .highlight 93 | margin: 0 94 | padding: 0 95 | border: none 96 | .gist-meta 97 | background: highlight-background 98 | color: highlight-comment 99 | font: 0.85em font-sans 100 | text-shadow: 0 0 101 | padding: 0 102 | margin-top: 1em 103 | margin-left: article-padding 104 | a 105 | color: color-link 106 | font-weight: normal 107 | &:hover 108 | text-decoration: underline 109 | 110 | pre 111 | .comment 112 | .title 113 | color: highlight-comment 114 | .variable 115 | .attribute 116 | .tag 117 | .regexp 118 | .ruby .constant 119 | .xml .tag .title 120 | .xml .pi 121 | .xml .doctype 122 | .html .doctype 123 | .css .id 124 | .css .class 125 | .css .pseudo 126 | color: highlight-red 127 | .number 128 | .preprocessor 129 | .built_in 130 | .literal 131 | .params 132 | .constant 133 | color: highlight-orange 134 | .class 135 | .ruby .class .title 136 | .css .rules .attribute 137 | color: highlight-green 138 | .string 139 | .value 140 | .inheritance 141 | .header 142 | .ruby .symbol 143 | .xml .cdata 144 | color: highlight-green 145 | .css .hexcolor 146 | color: highlight-aqua 147 | .function 148 | .python .decorator 149 | .python .title 150 | .ruby .function .title 151 | .ruby .title .keyword 152 | .perl .sub 153 | .javascript .title 154 | .coffeescript .title 155 | color: highlight-blue 156 | .keyword 157 | .javascript .function 158 | color: highlight-purple 159 | -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/mobile.styl: -------------------------------------------------------------------------------- 1 | @media mq-mobile 2 | #mobile-nav 3 | position: absolute 4 | top: 0 5 | left: 0 6 | width: mobile-nav-width 7 | height: 100% 8 | background: color-mobile-nav-background 9 | border-right: 1px solid #fff 10 | 11 | @media mq-mobile 12 | .mobile-nav-link 13 | display: block 14 | color: color-grey 15 | text-decoration: none 16 | padding: 15px 20px 17 | font-weight: bold 18 | &:hover 19 | color: #fff 20 | -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/sidebar-aside.styl: -------------------------------------------------------------------------------- 1 | #sidebar 2 | @media mq-normal 3 | column(sidebar-column) 4 | 5 | .widget-wrap 6 | margin: block-margin 0 7 | 8 | .widget-title 9 | @extend $block-caption 10 | 11 | .widget 12 | color: color-sidebar-text 13 | text-shadow: 0 1px #fff 14 | background: color-widget-background 15 | box-shadow: 0 -1px 4px color-widget-border inset 16 | border: 1px solid color-widget-border 17 | padding: 15px 18 | border-radius: 3px 19 | a 20 | color: color-link 21 | text-decoration: none 22 | &:hover 23 | text-decoration: underline 24 | ul, ol, dl 25 | ul, ol, dl 26 | margin-left: 15px 27 | list-style: disc -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/sidebar-bottom.styl: -------------------------------------------------------------------------------- 1 | .widget-wrap 2 | margin-bottom: block-margin !important 3 | @media mq-normal 4 | column(main-column) 5 | 6 | .widget-title 7 | color: #ccc 8 | text-transform: uppercase 9 | letter-spacing: 2px 10 | margin-bottom: .5em 11 | line-height: 1em 12 | font-weight: bold 13 | 14 | .widget 15 | color: color-grey 16 | ul, ol 17 | li 18 | display: inline-block 19 | zoom:1 20 | *display:inline 21 | padding-right: .75em 22 | /* Having problems getting balanced white space between items 23 | li:before 24 | content: " | " 25 | li:first-child:before 26 | content: none 27 | */ 28 | -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_partial/sidebar.styl: -------------------------------------------------------------------------------- 1 | if sidebar is bottom 2 | @import "sidebar-bottom" 3 | else 4 | @import "sidebar-aside" 5 | 6 | .widget 7 | @extend $base-style 8 | line-height: line-height 9 | word-wrap: break-word 10 | font-size: 0.9em 11 | ul, ol 12 | list-style: none 13 | margin: 0 14 | ul, ol 15 | margin: 0 20px 16 | ul 17 | list-style: disc 18 | ol 19 | list-style: decimal 20 | 21 | .category-list-count 22 | .tag-list-count 23 | .archive-list-count 24 | padding-left: 5px 25 | color: color-grey 26 | font-size: 0.85em 27 | &:before 28 | content: "(" 29 | &:after 30 | content: ")" 31 | 32 | .tagcloud 33 | a 34 | margin-right: 5px 35 | display: inline-block 36 | -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_util/grid.styl: -------------------------------------------------------------------------------- 1 | ///////////////// 2 | // Semantic.gs // for Stylus: http://learnboost.github.com/stylus/ 3 | ///////////////// 4 | 5 | // Utility function — you should never need to modify this 6 | // _gridsystem-width = (column-width + gutter-width) * columns 7 | gridsystem-width(_columns = columns) 8 | (column-width + gutter-width) * _columns 9 | 10 | // Set @total-width to 100% for a fluid layout 11 | // total-width = gridsystem-width(columns) 12 | total-width = 100% 13 | 14 | ////////// 15 | // GRID // 16 | ////////// 17 | 18 | body 19 | clearfix() 20 | width: 100% 21 | 22 | row(_columns = columns) 23 | clearfix() 24 | display: block 25 | width: total-width * ((gutter-width + gridsystem-width(_columns)) / gridsystem-width(_columns)) 26 | margin: 0 total-width * (((gutter-width * .5) / gridsystem-width(_columns)) * -1) 27 | 28 | column(x, _columns = columns) 29 | display: inline 30 | float: left 31 | width: total-width * ((((gutter-width + column-width) * x) - gutter-width) / gridsystem-width(_columns)) 32 | margin: 0 total-width * ((gutter-width * .5) / gridsystem-width(_columns)) 33 | 34 | push(offset = 1) 35 | margin-left: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns)) 36 | 37 | pull(offset = 1) 38 | margin-right: total-width * (((gutter-width + column-width) * offset) / gridsystem-width(columns)) -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_util/mixin.styl: -------------------------------------------------------------------------------- 1 | // http://www.zeldman.com/2012/03/01/replacing-the-9999px-hack-new-image-replacement/ 2 | hide-text() 3 | text-indent: 100% 4 | white-space: nowrap 5 | overflow: hidden 6 | 7 | // http://codepen.io/shshaw/full/gEiDt 8 | absolute-center(width, height = width) 9 | // margin: auto 10 | // position: absolute 11 | // top: 50% 12 | // top: 0 13 | // left: 0 14 | // bottom: 0 15 | // right: 0 16 | // width: width 17 | // height: height 18 | // overflow: auto 19 | width: width 20 | height: height 21 | position: absolute 22 | top: 50% 23 | left: 50% 24 | margin-top: width * -0.5 25 | margin-left: height * -0.5 26 | 27 | avoid-column-break() 28 | vendor("column-break-inside", avoid, only: webkit) 29 | page-break-inside: avoid // for firefox 30 | overflow: hidden // fix for firefox 31 | break-inside: avoid-column 32 | -------------------------------------------------------------------------------- /example/themes/landscape/source/css/_variables.styl: -------------------------------------------------------------------------------- 1 | // Config 2 | support-for-ie = false 3 | vendor-prefixes = webkit moz ms official 4 | 5 | // Colors 6 | color-default = #555 7 | color-grey = #999 8 | color-border = #ddd 9 | color-link = #258fb8 10 | color-background = #eee 11 | color-sidebar-text = #777 12 | color-widget-background = #ddd 13 | color-widget-border = #ccc 14 | color-footer-background = #262a30 15 | color-mobile-nav-background = #191919 16 | color-twitter = #00aced 17 | color-facebook = #3b5998 18 | color-pinterest = #cb2027 19 | color-google = #dd4b39 20 | 21 | // Fonts 22 | font-sans = -apple-system, BlinkMacSystemFont, 23 | "Segoe UI", "Roboto", "Oxygen", "Ubuntu", "Cantarell", 24 | "Fira Sans", "Droid Sans", "Helvetica Neue", 25 | sans-serif 26 | font-serif = Georgia, "Times New Roman", serif 27 | font-mono = "Source Code Pro", Consolas, Monaco, Menlo, Consolas, monospace 28 | font-icon = FontAwesome 29 | font-icon-path = "fonts/fontawesome-webfont" 30 | font-icon-version = "4.0.3" 31 | font-size = 14px 32 | line-height = 1.6em 33 | line-height-title = 1.1em 34 | 35 | // Header 36 | logo-size = 40px 37 | subtitle-size = 16px 38 | banner-height = 300px 39 | banner-url = "images/banner.jpg" 40 | 41 | sidebar = hexo-config("sidebar") 42 | 43 | // Layout 44 | block-margin = 50px 45 | article-padding = 20px 46 | mobile-nav-width = 280px 47 | main-column = 9 48 | sidebar-column = 3 49 | 50 | if sidebar and sidebar isnt bottom 51 | _sidebar-column = sidebar-column 52 | else 53 | _sidebar-column = 0 54 | 55 | // Grids 56 | column-width = 80px 57 | gutter-width = 20px 58 | columns = main-column + _sidebar-column 59 | 60 | // Media queries 61 | mq-mobile = "screen and (max-width: 479px)" 62 | mq-tablet = "screen and (min-width: 480px) and (max-width: 767px)" 63 | mq-normal = "screen and (min-width: 768px)" -------------------------------------------------------------------------------- /example/themes/landscape/source/css/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/css/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /example/themes/landscape/source/css/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/css/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /example/themes/landscape/source/css/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/css/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /example/themes/landscape/source/css/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/css/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /example/themes/landscape/source/css/images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/css/images/banner.jpg -------------------------------------------------------------------------------- /example/themes/landscape/source/css/style.styl: -------------------------------------------------------------------------------- 1 | @import "nib" 2 | @import "_variables" 3 | @import "_util/mixin" 4 | @import "_util/grid" 5 | 6 | global-reset() 7 | 8 | input, button 9 | margin: 0 10 | padding: 0 11 | &::-moz-focus-inner 12 | border: 0 13 | padding: 0 14 | 15 | @font-face 16 | font-family: FontAwesome 17 | font-style: normal 18 | font-weight: normal 19 | src: url(font-icon-path + ".eot?v=#" + font-icon-version) 20 | src: url(font-icon-path + ".eot?#iefix&v=#" + font-icon-version) format("embedded-opentype"), 21 | url(font-icon-path + ".woff?v=#" + font-icon-version) format("woff"), 22 | url(font-icon-path + ".ttf?v=#" + font-icon-version) format("truetype"), 23 | url(font-icon-path + ".svg#fontawesomeregular?v=#" + font-icon-version) format("svg") 24 | 25 | html, body, #container 26 | height: 100% 27 | 28 | body 29 | background: color-background 30 | font: font-size font-sans 31 | -webkit-text-size-adjust: 100% 32 | 33 | .outer 34 | clearfix() 35 | max-width: (column-width + gutter-width) * columns + gutter-width 36 | margin: 0 auto 37 | padding: 0 gutter-width 38 | 39 | .inner 40 | column(columns) 41 | 42 | .left, .alignleft 43 | float: left 44 | 45 | .right, .alignright 46 | float: right 47 | 48 | .clear 49 | clear: both 50 | 51 | #container 52 | position: relative 53 | 54 | .mobile-nav-on 55 | overflow: hidden 56 | 57 | #wrap 58 | height: 100% 59 | width: 100% 60 | position: absolute 61 | top: 0 62 | left: 0 63 | transition: 0.2s ease-out 64 | z-index: 1 65 | background: color-background 66 | .mobile-nav-on & 67 | left: mobile-nav-width 68 | 69 | if sidebar and sidebar isnt bottom 70 | #main 71 | @media mq-normal 72 | column(main-column) 73 | 74 | if sidebar is left 75 | @media mq-normal 76 | #main 77 | float: right 78 | 79 | @import "_extend" 80 | @import "_partial/header" 81 | @import "_partial/article" 82 | @import "_partial/comment" 83 | @import "_partial/archive" 84 | @import "_partial/footer" 85 | @import "_partial/highlight" 86 | @import "_partial/mobile" 87 | 88 | if sidebar 89 | @import "_partial/sidebar" -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/blank.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/blank.gif -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/fancybox_loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/fancybox_loading.gif -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/fancybox_loading@2x.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/fancybox_loading@2x.gif -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/fancybox_overlay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/fancybox_overlay.png -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/fancybox_sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/fancybox_sprite.png -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/fancybox_sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/fancybox_sprite@2x.png -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/helpers/fancybox_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/example/themes/landscape/source/fancybox/helpers/fancybox_buttons.png -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.css: -------------------------------------------------------------------------------- 1 | #fancybox-buttons { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | z-index: 8050; 6 | } 7 | 8 | #fancybox-buttons.top { 9 | top: 10px; 10 | } 11 | 12 | #fancybox-buttons.bottom { 13 | bottom: 10px; 14 | } 15 | 16 | #fancybox-buttons ul { 17 | display: block; 18 | width: 166px; 19 | height: 30px; 20 | margin: 0 auto; 21 | padding: 0; 22 | list-style: none; 23 | border: 1px solid #111; 24 | border-radius: 3px; 25 | -webkit-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 26 | -moz-box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 27 | box-shadow: inset 0 0 0 1px rgba(255,255,255,.05); 28 | background: rgb(50,50,50); 29 | background: -moz-linear-gradient(top, rgb(68,68,68) 0%, rgb(52,52,52) 50%, rgb(41,41,41) 50%, rgb(51,51,51) 100%); 30 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(68,68,68)), color-stop(50%,rgb(52,52,52)), color-stop(50%,rgb(41,41,41)), color-stop(100%,rgb(51,51,51))); 31 | background: -webkit-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 32 | background: -o-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 33 | background: -ms-linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 34 | background: linear-gradient(top, rgb(68,68,68) 0%,rgb(52,52,52) 50%,rgb(41,41,41) 50%,rgb(51,51,51) 100%); 35 | filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#444444', endColorstr='#222222',GradientType=0 ); 36 | } 37 | 38 | #fancybox-buttons ul li { 39 | float: left; 40 | margin: 0; 41 | padding: 0; 42 | } 43 | 44 | #fancybox-buttons a { 45 | display: block; 46 | width: 30px; 47 | height: 30px; 48 | text-indent: -9999px; 49 | background-color: transparent; 50 | background-image: url('fancybox_buttons.png'); 51 | background-repeat: no-repeat; 52 | outline: none; 53 | opacity: 0.8; 54 | } 55 | 56 | #fancybox-buttons a:hover { 57 | opacity: 1; 58 | } 59 | 60 | #fancybox-buttons a.btnPrev { 61 | background-position: 5px 0; 62 | } 63 | 64 | #fancybox-buttons a.btnNext { 65 | background-position: -33px 0; 66 | border-right: 1px solid #3e3e3e; 67 | } 68 | 69 | #fancybox-buttons a.btnPlay { 70 | background-position: 0 -30px; 71 | } 72 | 73 | #fancybox-buttons a.btnPlayOn { 74 | background-position: -30px -30px; 75 | } 76 | 77 | #fancybox-buttons a.btnToggle { 78 | background-position: 3px -60px; 79 | border-left: 1px solid #111; 80 | border-right: 1px solid #3e3e3e; 81 | width: 35px 82 | } 83 | 84 | #fancybox-buttons a.btnToggleOn { 85 | background-position: -27px -60px; 86 | } 87 | 88 | #fancybox-buttons a.btnClose { 89 | border-left: 1px solid #111; 90 | width: 35px; 91 | background-position: -56px 0px; 92 | } 93 | 94 | #fancybox-buttons a.btnDisabled { 95 | opacity : 0.4; 96 | cursor: default; 97 | } -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/helpers/jquery.fancybox-buttons.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Buttons helper for fancyBox 3 | * version: 1.0.5 (Mon, 15 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * buttons: { 10 | * position : 'top' 11 | * } 12 | * } 13 | * }); 14 | * 15 | */ 16 | ;(function ($) { 17 | //Shortcut for fancyBox object 18 | var F = $.fancybox; 19 | 20 | //Add helper object 21 | F.helpers.buttons = { 22 | defaults : { 23 | skipSingle : false, // disables if gallery contains single image 24 | position : 'top', // 'top' or 'bottom' 25 | tpl : '
    ' 26 | }, 27 | 28 | list : null, 29 | buttons: null, 30 | 31 | beforeLoad: function (opts, obj) { 32 | //Remove self if gallery do not have at least two items 33 | 34 | if (opts.skipSingle && obj.group.length < 2) { 35 | obj.helpers.buttons = false; 36 | obj.closeBtn = true; 37 | 38 | return; 39 | } 40 | 41 | //Increase top margin to give space for buttons 42 | obj.margin[ opts.position === 'bottom' ? 2 : 0 ] += 30; 43 | }, 44 | 45 | onPlayStart: function () { 46 | if (this.buttons) { 47 | this.buttons.play.attr('title', 'Pause slideshow').addClass('btnPlayOn'); 48 | } 49 | }, 50 | 51 | onPlayEnd: function () { 52 | if (this.buttons) { 53 | this.buttons.play.attr('title', 'Start slideshow').removeClass('btnPlayOn'); 54 | } 55 | }, 56 | 57 | afterShow: function (opts, obj) { 58 | var buttons = this.buttons; 59 | 60 | if (!buttons) { 61 | this.list = $(opts.tpl).addClass(opts.position).appendTo('body'); 62 | 63 | buttons = { 64 | prev : this.list.find('.btnPrev').click( F.prev ), 65 | next : this.list.find('.btnNext').click( F.next ), 66 | play : this.list.find('.btnPlay').click( F.play ), 67 | toggle : this.list.find('.btnToggle').click( F.toggle ), 68 | close : this.list.find('.btnClose').click( F.close ) 69 | } 70 | } 71 | 72 | //Prev 73 | if (obj.index > 0 || obj.loop) { 74 | buttons.prev.removeClass('btnDisabled'); 75 | } else { 76 | buttons.prev.addClass('btnDisabled'); 77 | } 78 | 79 | //Next / Play 80 | if (obj.loop || obj.index < obj.group.length - 1) { 81 | buttons.next.removeClass('btnDisabled'); 82 | buttons.play.removeClass('btnDisabled'); 83 | 84 | } else { 85 | buttons.next.addClass('btnDisabled'); 86 | buttons.play.addClass('btnDisabled'); 87 | } 88 | 89 | this.buttons = buttons; 90 | 91 | this.onUpdate(opts, obj); 92 | }, 93 | 94 | onUpdate: function (opts, obj) { 95 | var toggle; 96 | 97 | if (!this.buttons) { 98 | return; 99 | } 100 | 101 | toggle = this.buttons.toggle.removeClass('btnDisabled btnToggleOn'); 102 | 103 | //Size toggle button 104 | if (obj.canShrink) { 105 | toggle.addClass('btnToggleOn'); 106 | 107 | } else if (!obj.canExpand) { 108 | toggle.addClass('btnDisabled'); 109 | } 110 | }, 111 | 112 | beforeClose: function () { 113 | if (this.list) { 114 | this.list.remove(); 115 | } 116 | 117 | this.list = null; 118 | this.buttons = null; 119 | } 120 | }; 121 | 122 | }(jQuery)); 123 | -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.css: -------------------------------------------------------------------------------- 1 | #fancybox-thumbs { 2 | position: fixed; 3 | left: 0; 4 | width: 100%; 5 | overflow: hidden; 6 | z-index: 8050; 7 | } 8 | 9 | #fancybox-thumbs.bottom { 10 | bottom: 2px; 11 | } 12 | 13 | #fancybox-thumbs.top { 14 | top: 2px; 15 | } 16 | 17 | #fancybox-thumbs ul { 18 | position: relative; 19 | list-style: none; 20 | margin: 0; 21 | padding: 0; 22 | } 23 | 24 | #fancybox-thumbs ul li { 25 | float: left; 26 | padding: 1px; 27 | opacity: 0.5; 28 | } 29 | 30 | #fancybox-thumbs ul li.active { 31 | opacity: 0.75; 32 | padding: 0; 33 | border: 1px solid #fff; 34 | } 35 | 36 | #fancybox-thumbs ul li:hover { 37 | opacity: 1; 38 | } 39 | 40 | #fancybox-thumbs ul li a { 41 | display: block; 42 | position: relative; 43 | overflow: hidden; 44 | border: 1px solid #222; 45 | background: #111; 46 | outline: none; 47 | } 48 | 49 | #fancybox-thumbs ul li img { 50 | display: block; 51 | position: relative; 52 | border: 0; 53 | padding: 0; 54 | max-width: none; 55 | } -------------------------------------------------------------------------------- /example/themes/landscape/source/fancybox/helpers/jquery.fancybox-thumbs.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Thumbnail helper for fancyBox 3 | * version: 1.0.7 (Mon, 01 Oct 2012) 4 | * @requires fancyBox v2.0 or later 5 | * 6 | * Usage: 7 | * $(".fancybox").fancybox({ 8 | * helpers : { 9 | * thumbs: { 10 | * width : 50, 11 | * height : 50 12 | * } 13 | * } 14 | * }); 15 | * 16 | */ 17 | ;(function ($) { 18 | //Shortcut for fancyBox object 19 | var F = $.fancybox; 20 | 21 | //Add helper object 22 | F.helpers.thumbs = { 23 | defaults : { 24 | width : 50, // thumbnail width 25 | height : 50, // thumbnail height 26 | position : 'bottom', // 'top' or 'bottom' 27 | source : function ( item ) { // function to obtain the URL of the thumbnail image 28 | var href; 29 | 30 | if (item.element) { 31 | href = $(item.element).find('img').attr('src'); 32 | } 33 | 34 | if (!href && item.type === 'image' && item.href) { 35 | href = item.href; 36 | } 37 | 38 | return href; 39 | } 40 | }, 41 | 42 | wrap : null, 43 | list : null, 44 | width : 0, 45 | 46 | init: function (opts, obj) { 47 | var that = this, 48 | list, 49 | thumbWidth = opts.width, 50 | thumbHeight = opts.height, 51 | thumbSource = opts.source; 52 | 53 | //Build list structure 54 | list = ''; 55 | 56 | for (var n = 0; n < obj.group.length; n++) { 57 | list += '
  • '; 58 | } 59 | 60 | this.wrap = $('
    ').addClass(opts.position).appendTo('body'); 61 | this.list = $('').appendTo(this.wrap); 62 | 63 | //Load each thumbnail 64 | $.each(obj.group, function (i) { 65 | var el = obj.group[ i ], 66 | href = thumbSource( el ); 67 | 68 | if (!href) { 69 | return; 70 | } 71 | 72 | $("").load(function () { 73 | var width = this.width, 74 | height = this.height, 75 | widthRatio, heightRatio, parent; 76 | 77 | if (!that.list || !width || !height) { 78 | return; 79 | } 80 | 81 | //Calculate thumbnail width/height and center it 82 | widthRatio = width / thumbWidth; 83 | heightRatio = height / thumbHeight; 84 | 85 | parent = that.list.children().eq(i).find('a'); 86 | 87 | if (widthRatio >= 1 && heightRatio >= 1) { 88 | if (widthRatio > heightRatio) { 89 | width = Math.floor(width / heightRatio); 90 | height = thumbHeight; 91 | 92 | } else { 93 | width = thumbWidth; 94 | height = Math.floor(height / widthRatio); 95 | } 96 | } 97 | 98 | $(this).css({ 99 | width : width, 100 | height : height, 101 | top : Math.floor(thumbHeight / 2 - height / 2), 102 | left : Math.floor(thumbWidth / 2 - width / 2) 103 | }); 104 | 105 | parent.width(thumbWidth).height(thumbHeight); 106 | 107 | $(this).hide().appendTo(parent).fadeIn(300); 108 | 109 | }) 110 | .attr('src', href) 111 | .attr('title', el.title); 112 | }); 113 | 114 | //Set initial width 115 | this.width = this.list.children().eq(0).outerWidth(true); 116 | 117 | this.list.width(this.width * (obj.group.length + 1)).css('left', Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5))); 118 | }, 119 | 120 | beforeLoad: function (opts, obj) { 121 | //Remove self if gallery do not have at least two items 122 | if (obj.group.length < 2) { 123 | obj.helpers.thumbs = false; 124 | 125 | return; 126 | } 127 | 128 | //Increase bottom margin to give space for thumbs 129 | obj.margin[ opts.position === 'top' ? 0 : 2 ] += ((opts.height) + 15); 130 | }, 131 | 132 | afterShow: function (opts, obj) { 133 | //Check if exists and create or update list 134 | if (this.list) { 135 | this.onUpdate(opts, obj); 136 | 137 | } else { 138 | this.init(opts, obj); 139 | } 140 | 141 | //Set active element 142 | this.list.children().removeClass('active').eq(obj.index).addClass('active'); 143 | }, 144 | 145 | //Center list 146 | onUpdate: function (opts, obj) { 147 | if (this.list) { 148 | this.list.stop(true).animate({ 149 | 'left': Math.floor($(window).width() * 0.5 - (obj.index * this.width + this.width * 0.5)) 150 | }, 150); 151 | } 152 | }, 153 | 154 | beforeClose: function () { 155 | if (this.wrap) { 156 | this.wrap.remove(); 157 | } 158 | 159 | this.wrap = null; 160 | this.list = null; 161 | this.width = 0; 162 | } 163 | } 164 | 165 | }(jQuery)); -------------------------------------------------------------------------------- /example/themes/landscape/source/js/script.js: -------------------------------------------------------------------------------- 1 | (function($){ 2 | // Search 3 | var $searchWrap = $('#search-form-wrap'), 4 | isSearchAnim = false, 5 | searchAnimDuration = 200; 6 | 7 | var startSearchAnim = function(){ 8 | isSearchAnim = true; 9 | }; 10 | 11 | var stopSearchAnim = function(callback){ 12 | setTimeout(function(){ 13 | isSearchAnim = false; 14 | callback && callback(); 15 | }, searchAnimDuration); 16 | }; 17 | 18 | $('#nav-search-btn').on('click', function(){ 19 | if (isSearchAnim) return; 20 | 21 | startSearchAnim(); 22 | $searchWrap.addClass('on'); 23 | stopSearchAnim(function(){ 24 | $('.search-form-input').focus(); 25 | }); 26 | }); 27 | 28 | $('.search-form-input').on('blur', function(){ 29 | startSearchAnim(); 30 | $searchWrap.removeClass('on'); 31 | stopSearchAnim(); 32 | }); 33 | 34 | // Share 35 | $('body').on('click', function(){ 36 | $('.article-share-box.on').removeClass('on'); 37 | }).on('click', '.article-share-link', function(e){ 38 | e.stopPropagation(); 39 | 40 | var $this = $(this), 41 | url = $this.attr('data-url'), 42 | encodedUrl = encodeURIComponent(url), 43 | id = 'article-share-box-' + $this.attr('data-id'), 44 | offset = $this.offset(); 45 | 46 | if ($('#' + id).length){ 47 | var box = $('#' + id); 48 | 49 | if (box.hasClass('on')){ 50 | box.removeClass('on'); 51 | return; 52 | } 53 | } else { 54 | var html = [ 55 | '
    ', 56 | '', 57 | '
    ', 58 | '', 59 | '', 60 | '', 61 | '', 62 | '
    ', 63 | '
    ' 64 | ].join(''); 65 | 66 | var box = $(html); 67 | 68 | $('body').append(box); 69 | } 70 | 71 | $('.article-share-box.on').hide(); 72 | 73 | box.css({ 74 | top: offset.top + 25, 75 | left: offset.left 76 | }).addClass('on'); 77 | }).on('click', '.article-share-box', function(e){ 78 | e.stopPropagation(); 79 | }).on('click', '.article-share-box-input', function(){ 80 | $(this).select(); 81 | }).on('click', '.article-share-box-link', function(e){ 82 | e.preventDefault(); 83 | e.stopPropagation(); 84 | 85 | window.open(this.href, 'article-share-box-window-' + Date.now(), 'width=500,height=450'); 86 | }); 87 | 88 | // Caption 89 | $('.article-entry').each(function(i){ 90 | $(this).find('img').each(function(){ 91 | if ($(this).parent().hasClass('fancybox')) return; 92 | 93 | var alt = this.alt; 94 | 95 | if (alt) $(this).after('' + alt + ''); 96 | 97 | $(this).wrap(''); 98 | }); 99 | 100 | $(this).find('.fancybox').each(function(){ 101 | $(this).attr('rel', 'article' + i); 102 | }); 103 | }); 104 | 105 | if ($.fancybox){ 106 | $('.fancybox').fancybox(); 107 | } 108 | 109 | // Mobile nav 110 | var $container = $('#container'), 111 | isMobileNavAnim = false, 112 | mobileNavAnimDuration = 200; 113 | 114 | var startMobileNavAnim = function(){ 115 | isMobileNavAnim = true; 116 | }; 117 | 118 | var stopMobileNavAnim = function(){ 119 | setTimeout(function(){ 120 | isMobileNavAnim = false; 121 | }, mobileNavAnimDuration); 122 | } 123 | 124 | $('#main-nav-toggle').on('click', function(){ 125 | if (isMobileNavAnim) return; 126 | 127 | startMobileNavAnim(); 128 | $container.toggleClass('mobile-nav-on'); 129 | stopMobileNavAnim(); 130 | }); 131 | 132 | $('#wrap').on('click', function(){ 133 | if (isMobileNavAnim || !$container.hasClass('mobile-nav-on')) return; 134 | 135 | $container.removeClass('mobile-nav-on'); 136 | }); 137 | })(jQuery); -------------------------------------------------------------------------------- /gitalk-use-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/snowdreams1006/hexo-plugin-gitalk/3ec0e0bb1d23787ebd63f92414965f96957b4be1/gitalk-use-preview.png -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | hexo.extend.filter.register('after_post_render', function(data) { 2 | var gitalkConfig = hexo.config.plugins.gitalk; 3 | if (gitalkConfig) { 4 | data.content = data.content + '\n
    \n'; 5 | var str = ` 6 | `; 12 | 13 | data.content = data.content + '\n' + str; 14 | } 15 | 16 | return data; 17 | }); -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hexo-plugin-gitalk", 3 | "version": "0.2.0", 4 | "description": "Hexo 整合 gitalk 组件实现博客评论功能", 5 | "main": "index.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/snowdreams1006/hexo-plugin-gitalk.git" 9 | }, 10 | "keywords": [ 11 | "hexo-plugin-gitalk", 12 | "gitbook-plugin-mygitalk", 13 | "mygitalk", 14 | "gitalk", 15 | "gitment", 16 | "discuss", 17 | "comment", 18 | "issues", 19 | "github", 20 | "gitbook", 21 | "hexo" 22 | ], 23 | "author": { 24 | "name": "snowdreams1006", 25 | "email": "snowdreams1006@163.com" 26 | }, 27 | "license": "MIT", 28 | "bugs": { 29 | "url": "https://github.com/snowdreams1006/hexo-plugin-gitalk/issues" 30 | }, 31 | "homepage": "https://snowdreams1006.github.io/hexo-plugin-gitalk/" 32 | } 33 | --------------------------------------------------------------------------------