diff --git a/.gitignore b/.gitignore index 26b5eab0b..063b0e4ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,7 @@ .DS_Store -.idea/ +Thumbs.db +db.json *.log -*.iml -yarn.lock -package-lock.json node_modules/ - -# Ignore optional external libraries -source/lib/* - -# Track internal libraries & Ignore unused verdors files -source/lib/font-awesome/less/ -source/lib/font-awesome/scss/ -!source/lib/font-awesome/* - -!source/lib/jquery/ - -source/lib/ua-parser-js/* -!source/lib/ua-parser-js/dist/ - -!source/lib/velocity/ +public/ +.deploy*/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 9591f0b23..74b71d1d3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,18 +1,30 @@ -language: node_js -#node_js: node -node_js: lts/* - +language: node_js # 设置语言 +node_js: stable # 设置相应的版本 cache: - directories: - - node_modules - -install: npm install - + directories: + - node_modules # 据说可以减少travis构建时间 +before_install: + - npm install -g hexo + - npm install -g hexo-cli +install: + - npm install # 安装hexo及插件 before_script: - - npm install -g gulp - -addons: - browserstack: - username: "ivannginx1" - access_key: - secure: "NutOhdgtUdBUXMPZhy8X1F1Jq+tan1LeNOV0FArBt15SNlxtNArqhiyTi4XnG9MPruX4306aGF2RBrKso+OiGNRdGtRGngH613Q0GWNtlC/boMqnI7fHqLIyCs6S12y2uA8PK4Ifxg9bZ0VtCTYYbMy+p1KvBM//L12vmtfdnby8z5Qvex3tB3dLoPOR50CKkINHJVDLm+iVRFrdz4/83oDsulZSRRGIaxu5taDWPIcp3fYZtre2Nc+RXcsyFDyjN7U0Hvr5tKBbloJxXEQEBv2xLkMOtp85nmCPD06s1Il8Wus1ux3raVsfUyaW5FpNX37Jeb5e00RQUM1wgU5m75H6qiGwDvQswbugJG0i/a2nNfsgVmbrSZdMnkHcx2Uxmrw4ejyEP5NSrJSBi05Ck1fQ4UsZ4Qkdf1fd04SI0LpLWt43eoNO/7rHKsQoP4LCX9gxKUuC075NEBLODyJ529RYfA6dKKwwH6o0ZbOgASmCoAWaM65g4+FHRnJcKL/Kj9ZWklQtRa7/ynlHaA65jefFS2lB8Ut6d3rXDDBih9mIrwV1uUaEH96xgAN42bgU/vY6FGzNkDOYZqj4YfsepDM0wbOsslFie7JZq7iFjsYvrXqLvYUMk37AZwQ2Sb6uH4tIT4Qw/4oZfDzA1En3/8HdZJ28nKW/lzjwMSqheIY=" + - npm install -g mocha + - git clone --branch master https://github.com/BladeCode/BladeCode.github.io.git public +script: + - hexo cl # 清除 + - hexo g # 生成 +after_script: + - cd ./public + - git init + - git config user.name "BladeCode" # 修改成自己的github用户名 + - git config user.email "Jerry.x@outlook.com" # 修改成自己的GitHub邮箱 + - git add . + - git commit -m "update by Travis-CI" + - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master # GH_token就是在travis中设置的token +branches: + only: + - dev # 只监测这个分支,一有动静就开始构建 +env: + global: + - GH_REF: github.com/BladeCode/BladeCode.github.io.git \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..80f46a893 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Jerry xu + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index ac8019351..545862920 100644 --- a/README.md +++ b/README.md @@ -1,138 +1,10 @@ -
Language: :us: -:cn: -:ru:
+

+ BladeCode +

-#
e x T
+![BladeCode](https://travis-ci.com/BladeCode/BladeCode.github.io.svg?branch=dev) -

«NexT» is a high quality elegant Hexo theme. It is crafted from scratch, with love.

- -[![gitter-image]][gitter-url] -[![riot-image]][riot-url] -[![t-chat-image]][t-chat-url] -[![t-news-image]][t-news-url] -[![lang-image]][lang-url] -[![travis-image]][travis-url] -[![rel-image]][releases-url] -[![hexo-image]][hexo-url] -[![lic-image]][lic-url] - -## Live Preview - -* :heart_decoration: Muse scheme: [LEAFERx](https://leaferx.online) | [XiaMo](https://notes.wanghao.work) | [OAwan](https://oawan.me) -* :six_pointed_star: Mist scheme: [Jeff](https://blog.zzbd.org) | [uchuhimo](http://uchuhimo.me) | [xirong](http://www.ixirong.com) -* :pisces: Pisces scheme: [Vi](http://notes.iissnan.com) | [Acris](https://acris.me) | [Rainy](https://rainylog.com) -* :gemini: Gemini scheme: [Ivan.Nginx](https://almostover.ru) | [Raincal](https://raincal.com) | [Dandy](https://dandyxu.me) - -More «NexT» examples [here](https://github.com/iissnan/hexo-theme-next/issues/119). - -## Installation - -Simplest way to install is by cloning whole repository: - - ```sh - $ cd hexo - $ git clone https://github.com/theme-next/hexo-theme-next themes/next - ``` - -Or you can see [detailed installation instructions][docs-installation-url] if you want any other variant. - -## Plugins - -In NexT config now you can find dependencies on each module which was moved to external repositories which can be found by [main organization link](https://github.com/theme-next). - -For example, you want to use `fancybox` in your site. Go to NexT config and see: - -```yml -# Fancybox -# Dependencies: https://github.com/theme-next/theme-next-fancybox -fancybox: false -``` - -Then turn on `fancybox` and go to «Dependencies» link with installation instructions of this module. - -### Exceptions - -If you use cdn for any plugins, you need to replace your cdn link. - -For example, you want to use `fancybox` and you configured a cdn link. Go to NexT config and see: - -```yml -vendors: - # ... - # Some contents... - # ... - fancybox: # Set or update fancybox cdn url. - fancybox_css: # Set or update fancybox cdn url. -``` - -Instead of defining [main organization link](https://github.com/theme-next) for updates. - -## Update - -You can update to latest master branch by the following command: - -```sh -$ cd themes/next -$ git pull -``` - -And if you see any error message during update (something like **«Commit your changes or stash them before you can merge»**), recommended to learn [Hexo data files][docs-data-files-url] feature.\ -Howbeit, you can bypass update errors by `Commit`, `Stash` or `Discard` local changes. See [here](https://stackoverflow.com/a/15745424/5861495) how to do it. - -**If you want to update from v5.1.x to v6.0.x, read [here][docs-update-5-1-x-url].** - -## Known Bugs - -For those who also encounter **«[Error: Cannot find module 'hexo-util'](https://github.com/iissnan/hexo-theme-next/issues/1490)»**, please check your NPM version. - -* `> 3`: Still not work? Please remove `node_modules` directory and reinstall using `npm install`. -* `< 3`: Please add `hexo-util` explicitly via `npm install --save-dev hexo-util` to you site package deps. - -## Contributing - -Contribution is welcome, feel free to open an issue and fork. Waiting for your pull request. - -## Third party applications - -* :triangular_flag_on_post: HexoEditor - -[browser-image]: https://img.shields.io/badge/browser-%20chrome%20%7C%20firefox%20%7C%20opera%20%7C%20safari%20%7C%20ie%20%3E%3D%209-lightgrey.svg -[browser-url]: https://www.browserstack.com - -[lang-image]: https://d322cqt584bo4o.cloudfront.net/theme-next/localized.svg "Add or improve translation in few seconds!" -[lang-url]: https://crwd.in/theme-next - -[gitter-image]: https://img.shields.io/badge/gitter-chat-orange.svg "Join to our Gitter room" -[gitter-url]: https://gitter.im/theme-next - -[riot-image]: https://img.shields.io/badge/riot-chat-DCAB08.svg "Join to our Riot room" -[riot-url]: https://riot.im/app/#/room/#NexT:matrix.org - -[t-chat-image]: https://img.shields.io/badge/telegram-chat-BAB210.svg "Join to our Telegram group" -[t-chat-url]: https://t.me/theme_next - -[t-news-image]: https://img.shields.io/badge/telegram-news-98B919.svg "Join to our Telegram news channel" -[t-news-url]: https://t.me/theme_next_news - -[travis-image]: https://travis-ci.org/theme-next/hexo-theme-next.svg?branch=master -[travis-url]: https://travis-ci.org/theme-next/hexo-theme-next?branch=master "Travis CI [Linux]" - -[hexo-image]: https://img.shields.io/badge/hexo-%3E%3D%203.5.0-blue.svg -[hexo-url]: http://hexo.io - -[lic-image]: https://img.shields.io/badge/license-%20AGPL-blue.svg -[lic-url]: https://github.com/theme-next/hexo-theme-next/blob/master/LICENSE.md - - -[rel-image]: https://badge.fury.io/gh/theme-next%2Fhexo-theme-next.svg - - -[download-latest-url]: https://github.com/theme-next/hexo-theme-next/archive/master.zip -[releases-latest-url]: https://github.com/theme-next/hexo-theme-next/releases/latest -[releases-url]: https://github.com/theme-next/hexo-theme-next/releases -[tags-url]: https://github.com/theme-next/hexo-theme-next/tags -[commits-url]: https://github.com/theme-next/hexo-theme-next/commits/master - -[docs-installation-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/INSTALLATION.md -[docs-data-files-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/DATA-FILES.md -[docs-update-5-1-x-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/UPDATE-FROM-5.1.X.md +### Thanks +1. [Node](https://nodejs.org) +2. [Hexo](https://hexo.io) +3. [Next](https://github.com/theme-next/hexo-theme-next) \ No newline at end of file diff --git a/_config.yml b/_config.yml index 7b3107c58..f9624c86c 100644 --- a/_config.yml +++ b/_config.yml @@ -1,973 +1,127 @@ -# --------------------------------------------------------------- -# Theme Core Configuration Settings -# --------------------------------------------------------------- - -# If false, merge configs from `_data/next.yml` into default configuration (rewrite). -# If true, will fully override default configuration by options from `_data/next.yml` (override). Only for NexT settings. -# And if true, all config from default NexT `_config.yml` must be copied into `next.yml`. Use if you know what you are doing. -# Useful if you want to comment some options from NexT `_config.yml` by `next.yml` without editing default config. -override: false - -# Allow to cache content generation. Introduced in NexT v6.0.0. -cache: +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: BladeCode +subtitle: Life's a struggle! +description: +keywords: +author: Jerry xu +language: zh-CN +timezone: + +# URL +## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/' +url: https://www.incoder.org +root: / +permalink: :year/:month/:day/:title/ +permalink_defaults: + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: README.md + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: true # Open external links in new tab +filename_case: 0 +render_drafts: false +post_asset_folder: false +relative_link: false +future: true +highlight: enable: true - -# Redefine custom file paths. Introduced in NexT v6.0.2. -# If commented, will be used default custom file paths. - -# For example, you want to put your custom styles file -# outside theme directory in root `source/_data`, set -# `styles: source/_data/styles.styl` -#custom_file_path: - # Default paths: layout/_custom/* - #head: source/_data/head.swig - #header: source/_data/header.swig - #sidebar: source/_data/sidebar.swig - - # Default path: source/css/_variables/custom.styl - #variables: source/_data/variables.styl - # Default path: source/css/_mixins/custom.styl - #mixins: source/_data/mixins.styl - # Default path: source/css/_custom/custom.styl - #styles: source/_data/styles.styl - - -# --------------------------------------------------------------- -# Site Information Settings -# --------------------------------------------------------------- - -# To get or check favicons visit: https://realfavicongenerator.net -# Put your favicons into `hexo-site/source/` (recommend) or `hexo-site/themes/next/source/images/` directory. - -# Default NexT favicons placed in `hexo-site/themes/next/source/images/` directory. -# And if you want to place your icons in `hexo-site/source/` root directory, you must remove `/images` prefix from pathes. - -# For example, you put your favicons into `hexo-site/source/images` directory. -# Then need to rename & redefine they on any other names, otherwise icons from Next will rewrite your custom icons in Hexo. -favicon: - small: /images/favicon-16x16-next.png - medium: /images/favicon-32x32-next.png - apple_touch_icon: /images/apple-touch-icon-next.png - safari_pinned_tab: /images/logo.svg - #android_manifest: /images/manifest.json - #ms_browserconfig: /images/browserconfig.xml - -# Set rss to false to disable feed link. -# Leave rss as empty to use site's feed link, and install hexo-generator-feed: `npm install hexo-generator-feed --save`. -# Set rss to specific value if you have burned your feed already. -rss: - -footer: - # Specify the date when the site was setup. - # If not defined, current year will be used. - #since: 2015 - - # Icon between year and copyright info. - icon: - # Icon name in fontawesome, see: https://fontawesome.com/v4.7.0/icons - # `heart` is recommended with animation in red (#ff0000). - name: user - # If you want to animate the icon, set it to true. - animated: false - # Change the color of icon, using Hex Code. - color: "#808080" - - # If not defined, will be used `author` from Hexo main config. - copyright: - # ------------------------------------------------------------- - powered: - # Hexo link (Powered by Hexo). - enable: true - # Version info of Hexo after Hexo link (vX.X.X). - version: true - - theme: - # Theme & scheme info link (Theme - NexT.scheme). - enable: true - # Version info of NexT after scheme info (vX.X.X). - version: true - # ------------------------------------------------------------- - # Any custom text can be defined here. - #custom_text: Hosted by Coding Pages - -# --------------------------------------------------------------- -# SEO Settings -# --------------------------------------------------------------- - -# Canonical, set a canonical link tag in your hexo, you could use it for your SEO of blog. -# See: https://support.google.com/webmasters/answer/139066 -# Tips: Before you open this tag, remember set up your URL in hexo _config.yml ( ex. url: http://yourdomain.com ) -canonical: true - -# Change headers hierarchy on site-subtitle (will be main site description) and on all post/pages titles for better SEO-optimization. -seo: false - -# If true, will add site-subtitle to index page, added in main hexo config. -# subtitle: Subtitle -index_with_subtitle: false - - -# --------------------------------------------------------------- -# Menu Settings -# --------------------------------------------------------------- - -# When running the site in a subdirectory (e.g. domain.tld/blog), remove the leading slash from link value (/archives -> archives). -# Usage: `Key: /link/ || icon` -# Key is the name of menu item. If translate for this menu will find in languages - this translate will be loaded; if not - Key name will be used. Key is case-senstive. -# Value before `||` delimeter is the target link. -# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, question icon will be loaded. -menu: - home: / || home - #about: /about/ || user - #tags: /tags/ || tags - #categories: /categories/ || th - archives: /archives/ || archive - #schedule: /schedule/ || calendar - #sitemap: /sitemap.xml || sitemap - #commonweal: /404/ || heartbeat - -# Enable/Disable menu icons / item badges. -menu_settings: - icons: true - badges: false - -# --------------------------------------------------------------- -# Scheme Settings -# --------------------------------------------------------------- - -# Schemes -scheme: Muse -#scheme: Mist -#scheme: Pisces -#scheme: Gemini - - -# --------------------------------------------------------------- -# Sidebar Settings -# --------------------------------------------------------------- - -# Posts / Categories / Tags in sidebar. -site_state: true - -# Social Links. -# Usage: `Key: permalink || icon` -# Key is the link label showing to end users. -# Value before `||` delimeter is the target permalink. -# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, globe icon will be loaded. -#social: - #GitHub: https://github.com/yourname || github - #E-Mail: mailto:yourname@gmail.com || envelope - #Google: https://plus.google.com/yourname || google - #Twitter: https://twitter.com/yourname || twitter - #FB Page: https://www.facebook.com/yourname || facebook - #VK Group: https://vk.com/yourname || vk - #StackOverflow: https://stackoverflow.com/yourname || stack-overflow - #YouTube: https://youtube.com/yourname || youtube - #Instagram: https://instagram.com/yourname || instagram - #Skype: skype:yourname?call|chat || skype - -social_icons: - enable: true - icons_only: false - transition: false - # Dependencies: exturl: true in Tags Settings section below. - # To encrypt links above use https://www.base64encode.org - # Example encoded link: `GitHub: aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQ= || github` - exturl: false - -# Follow me on GitHub banner in right-top corner. -# Usage: `permalink || title` -# Value before `||` delimeter is the target permalink. -# Value after `||` delimeter is the title and aria-label name. -#github_banner: https://github.com/yourname || Follow me on GitHub - -# Blog rolls -links_icon: link -links_title: Links -links_layout: block -#links_layout: inline -#links: - #Title: http://example.com/ - -# Sidebar Avatar -avatar: - # in theme directory(source/images): /images/avatar.gif - # in site directory(source/uploads): /uploads/avatar.gif - # You can also use other linking images. - url: #/images/avatar.gif - # If true, the avatar would be dispalyed in circle. - rounded: false - # The value of opacity should be choose from 0 to 1 to set the opacity of the avatar. - opacity: 1 - # If true, the avatar would be rotated with the cursor. - rotated: false - -# Table Of Contents in the Sidebar -toc: + line_number: true + auto_detect: false + tab_replace: + +# Home page setting +# path: Root path for your blogs index page. (default = '') +# per_page: Posts displayed per page. (0 = disable pagination) +# order_by: Posts order. (Order by date descending by default) +index_generator: + path: '' + per_page: 10 + order_by: -date + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Extensions +## Plugins: https://hexo.io/plugins/ + +# RSS订阅支持 +plugin: +- hexo-generator-feed +# Feed Atom +feed: + type: atom + path: atom.xml + limit: 20 + +## Themes: https://hexo.io/themes/ +theme: next + +# Deployment +## Docs: https://hexo.io/docs/deployment.html +deploy: +- type: git +- type: leancloud_counter_security_sync + repo: https://github.com/BladeCode/BladeCode.github.io.git + branch: master + +githubEmojis: enable: true + className: github-emoji + unicode: false + styles: + localEmojis: - # Automatically add list number to toc. - number: true - - # If true, all words will placed on next lines if header width longer then sidebar width. - wrap: false - -# Creative Commons 4.0 International License. -# http://creativecommons.org/ -# Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero -#creative_commons: by-nc-sa -#creative_commons: - -sidebar: - # Sidebar Position, available value: left | right (only for Pisces | Gemini). - position: left - #position: right - - # Sidebar Display, available value (only for Muse | Mist): - # - post expand on posts automatically. Default. - # - always expand for all pages automatically - # - hide expand only when click on the sidebar toggle icon. - # - remove Totally remove sidebar including sidebar toggle. - display: post - #display: always - #display: hide - #display: remove - - # Sidebar offset from top menubar in pixels (only for Pisces | Gemini). - offset: 12 - - # Back to top in sidebar (only for Pisces | Gemini). - b2t: false - - # Scroll percent label in b2t button. - scrollpercent: false - - # Enable sidebar on narrow view (only for Muse | Mist). - onmobile: false - - -# --------------------------------------------------------------- -# Post Settings -# --------------------------------------------------------------- - -# Automatically scroll page to section which is under mark. -scroll_to_more: true - -# Automatically saving scroll position on each post/page in cookies. -save_scroll: false - -# Automatically excerpt description in homepage as preamble text. -excerpt_description: true - -# Automatically Excerpt. Not recommend. -# Please use in the post to control excerpt accurately. -auto_excerpt: - enable: false - length: 150 - -# Post meta display settings -post_meta: - item_text: true - created_at: true - updated_at: - enabled: true - # If true, show updated date label only if `updated date` different from 'created date' (post edited in another day than was created). - # And if post will edited in same day as created, edited time will show in popup title under created time label. - # If false show anyway, but if post edited in same day, show only edited time. - another_day: true - categories: true - -# Post wordcount display settings -# Dependencies: https://github.com/theme-next/hexo-symbols-count-time +# hexo-symbols-count-time symbols_count_time: - separated_meta: true - item_text_post: true - item_text_total: false - awl: 4 - wpm: 275 - -codeblock: - # Manual define the border radius in codeblock - # Leave it empty for the default 1 - border_radius: - # Add copy button on codeblock - copy_button: - enable: false - # Show text copy result - show_result: false - -# Wechat Subscriber -#wechat_subscriber: - #enabled: true - #qcode: /path/to/your/wechatqcode ex. /uploads/wechat-qcode.jpg - #description: ex. subscribe to my blog by scanning my public wechat account - -# Reward -#reward_comment: Donate comment here -#wechatpay: /images/wechatpay.jpg -#alipay: /images/alipay.jpg -#bitcoin: /images/bitcoin.png - -# Related popular posts -# Dependencies: https://github.com/tea3/hexo-related-popular-posts -related_posts: - enable: false - title: # custom header, leave empty to use the default one - display_in_home: false - params: - maxCount: 5 - #PPMixingRate: 0.0 - #isDate: false - #isImage: false - #isExcerpt: false - -# Declare license on posts -post_copyright: - enable: false - license: CC BY-NC-SA 4.0 - -# Post edit -# Dependencies: https://github.com/hexojs/hexo-deployer-git -post_edit: - enable: false - url: https://github.com/theme-next/theme-next.org/_posts/tree/master/ # Link for view source. -# url: https://github.com/theme-next/theme-next.org/_posts/edit/master/ # Link for fork & edit. - - -# --------------------------------------------------------------- -# Misc Theme Settings -# --------------------------------------------------------------- - -# Reduce padding / margin indents on devices with narrow width. -mobile_layout_economy: false - -# Android Chrome header panel color ($brand-bg / $headband-bg => $black-deep). -android_chrome_color: "#222" - -# Custom Logo. -# !!Only available for Default Scheme currently. -# Options: -# enabled: [true/false] - Replace with specific image -# image: url-of-image - Images's url -custom_logo: - enabled: false - image: - -# Code Highlight theme -# Available values: normal | night | night eighties | night blue | night bright -# https://github.com/chriskempson/tomorrow-theme -highlight_theme: normal - -# Enable "cheers" for archive page. -cheers_enabled: true - -# Manual define the max content width -# !!Only available for Gemini Scheme currently -# Leave it empty for the default 75% (suggest not less than 1000px) -#max_content_width: 1000px - -# Manual define the sidebar width -# !!Only available for Gemini Scheme currently -# Leave it empty for the default 240 -sidebar_width: - -# --------------------------------------------------------------- -# Font Settings -# - Find fonts on Google Fonts (https://www.google.com/fonts) -# - All fonts set here will have the following styles: -# light, light italic, normal, normal italic, bold, bold italic -# - Be aware that setting too much fonts will cause site running slowly -# - Introduce in 5.0.1 -# --------------------------------------------------------------- -# CAUTION! Safari Version 10.1.2 bug: https://github.com/iissnan/hexo-theme-next/issues/1844 -# To avoid space between header and sidebar in Pisces / Gemini themes recommended to use Web Safe fonts for `global` (and `logo`): -# Arial | Tahoma | Helvetica | Times New Roman | Courier New | Verdana | Georgia | Palatino | Garamond | Comic Sans MS | Trebuchet MS -# --------------------------------------------------------------- -font: - enable: false - - # Uri of fonts host. E.g. //fonts.googleapis.com (Default). - host: - - # Font options: - # `external: true` will load this font family from `host` above. - # `family: Times New Roman`. Without any quotes. - # `size: xx`. Use `px` as unit. - - # Global font settings used for all elements in . - global: - external: true - family: Lato - size: - - # Font settings for Headlines (H1, H2, H3, H4, H5, H6). - # Fallback to `global` font settings. - headings: - external: true - family: - size: - - # Font settings for posts. - # Fallback to `global` font settings. - posts: - external: true - family: - - # Font settings for Logo. - # Fallback to `global` font settings. - logo: - external: true - family: - size: - - # Font settings for and code blocks. - codes: - external: true - family: - size: - - -# --------------------------------------------------------------- -# Third Party Services Settings -# --------------------------------------------------------------- - -# Math Equations Render Support -math: - enable: false - - # Default(true) will load mathjax/katex script on demand - # That is it only render those page who has 'mathjax: true' in Front Matter. - # If you set it to false, it will load mathjax/katex srcipt EVERY PAGE. - per_page: true - - engine: mathjax - #engine: katex - - # hexo-rendering-pandoc (or hexo-renderer-kramed) needed to full MathJax support. - mathjax: - # Use 2.7.1 as default, jsdelivr as default CDN, works everywhere even in China - cdn: //cdn.jsdelivr.net/npm/mathjax@2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML - # For newMathJax CDN (cdnjs.cloudflare.com) with fallback to oldMathJax (cdn.mathjax.org). - #cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML - # For direct link to MathJax.js with CloudFlare CDN (cdnjs.cloudflare.com). - #cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML - # For automatic detect latest version link to MathJax.js and get from Bootcss. - #cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML - - # hexo-renderer-markdown-it-plus (or hexo-renderer-markdown-it with markdown-it-katex plugin) - # needed to full Katex support. - katex: - # Use 0.7.1 as default, jsdelivr as default CDN, works everywhere even in China - cdn: //cdn.jsdelivr.net/npm/katex@0.7.1/dist/katex.min.css - # CDNJS, provided by cloudflare, maybe the best CDN, but not works in China - #cdn: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css - # Bootcss, works great in China, but not so well in other region - #cdn: //cdn.bootcss.com/KaTeX/0.7.1/katex.min.css - -# Han Support -# Dependencies: https://github.com/theme-next/theme-next-han -han: false - -# Pangu Support -# Dependencies: https://github.com/theme-next/theme-next-pangu -# For more information: https://github.com/vinta/pangu.js -pangu: false - -# Swiftype Search API Key -#swiftype_key: - -# Baidu Analytics ID -#baidu_analytics: - -# Disqus -disqus: - enable: false - shortname: - count: true - lazyload: false - -# Hypercomments -#hypercomments_id: - -# changyan -changyan: - enable: false - appid: - appkey: - - -# Valine. -# You can get your appid and appkey from https://leancloud.cn -# more info please open https://valine.js.org -valine: - enable: false - appid: # your leancloud application appid - appkey: # your leancloud application appkey - notify: false # mail notifier , https://github.com/xCss/Valine/wiki - verify: false # Verification code - placeholder: Just go go # comment box placeholder - avatar: mm # gravatar style - guest_info: nick,mail,link # custom comment header - pageSize: 10 # pagination size - - -# Support for youyan comments system. -# You can get your uid from http://www.uyan.cc -#youyan_uid: your uid - -# Support for LiveRe comments system. -# You can get your uid from https://livere.com/insight/myCode (General web site) -#livere_uid: your uid - -# Gitment -# Introduction: https://imsun.net/posts/gitment-introduction/ -gitment: - enable: false - mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway - count: true # Show comments count in post meta area - lazy: false # Comments lazy loading with a button - cleanly: false # Hide 'Powered by ...' on footer, and more - language: # Force language, or auto switch by theme - github_user: # MUST HAVE, Your Github Username - github_repo: # MUST HAVE, The name of the repo you use to store Gitment comments - client_id: # MUST HAVE, Github client id for the Gitment - client_secret: # EITHER this or proxy_gateway, Github access secret token for the Gitment - proxy_gateway: # Address of api proxy, See: https://github.com/aimingoo/intersect - redirect_protocol: # Protocol of redirect_uri with force_redirect_protocol when mint enabled - -# Baidu Share -# Available value: -# button | slide -# Warning: Baidu Share does not support https. -#baidushare: -## type: button - -# Share -# This plugin is more useful in China, make sure you known how to use it. -# And you can find the use guide at official webiste: http://www.jiathis.com/. -# Warning: JiaThis does not support https. -#jiathis: - ##uid: Get this uid from http://www.jiathis.com/ - -#add_this_id: - -# NeedMoreShare2 -# Dependencies: https://github.com/theme-next/theme-next-needmoreshare2 -# See: https://github.com/revir/need-more-share2 -# Also see: https://github.com/DzmVasileusky/needShareButton -# iconStyle: default | box -# boxForm: horizontal | vertical -# position: top / middle / bottom + Left / Center / Right -# networks: Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Reddit, -# Delicious,StumbleUpon,Pinterest,Facebook,GooglePlus,Slashdot, -# Technorati,Posterous,Tumblr,GoogleBookmarks,Newsvine, -# Evernote,Friendfeed,Vkontakte,Odnoklassniki,Mailru -needmoreshare2: - enable: false - postbottom: - enable: false - options: - iconStyle: box - boxForm: horizontal - position: bottomCenter - networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook - float: - enable: false - options: - iconStyle: box - boxForm: horizontal - position: middleRight - networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook - -# Google Webmaster tools verification setting -# See: https://www.google.com/webmasters/ -#google_site_verification: - -# Google Analytics -#google_analytics: - -# Bing Webmaster tools verification setting -# See: https://www.bing.com/webmaster/ -#bing_site_verification: - -# Yandex Webmaster tools verification setting -# See: https://webmaster.yandex.ru/ -#yandex_site_verification: - -# CNZZ count -#cnzz_siteid: - -# Application Insights -# See https://azure.microsoft.com/en-us/services/application-insights/ -# application_insights: - -# Post widgets & FB/VK comments settings. -# --------------------------------------------------------------- -# Facebook SDK Support. -# https://github.com/iissnan/hexo-theme-next/pull/410 -facebook_sdk: - enable: false - app_id: # - fb_admin: # - like_button: #true - webmaster: #true - -# Facebook comments plugin -# This plugin depends on Facebook SDK. -# If facebook_sdk.enable is false, Facebook comments plugin is unavailable. -facebook_comments_plugin: - enable: false - num_of_posts: 10 # min posts num is 1 - width: 100% # default width is 550px - scheme: light # default scheme is light (light or dark) - -# VKontakte API Support. -# To get your AppID visit https://vk.com/editapp?act=create -vkontakte_api: - enable: false - app_id: # - like: true - comments: true - num_of_posts: 10 - -# Star rating support to each article. -# To get your ID visit https://widgetpack.com -rating: - enable: false - id: # - color: fc6423 -# --------------------------------------------------------------- - -# Show number of visitors to each article. -# You can visit https://leancloud.cn get AppID and AppKey. -leancloud_visitors: - enable: false - app_id: # - app_key: # - # Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security - # If you don't care about security in lc counter and just want to use it directly - # (without hexo-leancloud-counter-security plugin), set the `security` to `false`. - security: true - betterPerformance: false - -# Another tool to show number of visitors to each article. -# visit https://console.firebase.google.com/u/0/ to get apiKey and projectId -# visit https://firebase.google.com/docs/firestore/ to get more information about firestore -firestore: - enable: false - collection: articles #required, a string collection name to access firestore database - apiKey: #required - projectId: #required - bluebird: false #enable this if you want to include bluebird 3.5.1(core version) Promise polyfill - -# Show Views/Visitors of the website/page with busuanzi. -# Get more information on http://ibruce.info/2015/04/04/busuanzi/ -busuanzi_count: - enable: false - total_visitors: true - total_visitors_icon: user - total_views: true - total_views_icon: eye - post_views: true - post_views_icon: eye - - -# Tencent analytics ID -# tencent_analytics: - -# Tencent MTA ID -# tencent_mta: - - -# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO -baidu_push: false - -# Google Calendar -# Share your recent schedule to others via calendar page -# -# API Documentation: -# https://developers.google.com/google-apps/calendar/v3/reference/events/list -calendar: - enable: false - calendar_id: - api_key: - orderBy: startTime - offsetMax: 24 - offsetMin: 4 - timeZone: - showDeleted: false - singleEvents: true - maxResults: 250 - -# Algolia Search -# See: https://github.com/theme-next/hexo-theme-next/blob/master/docs/ALGOLIA-SEARCH.md -# Dependencies: https://github.com/theme-next/theme-next-algolia-instant-search -algolia_search: - enable: false - hits: - per_page: 10 - labels: - input_placeholder: Search for Posts - hits_empty: "We didn't find any results for the search: ${query}" - hits_stats: "${hits} results found in ${time} ms" - -# Local search -# Dependencies: https://github.com/theme-next/hexo-generator-searchdb -local_search: - enable: false - # if auto, trigger search by changing input - # if manual, trigger search by pressing enter key or search button - trigger: auto - # show top n results per article, show all results by setting to -1 - top_n_per_article: 1 - # unescape html strings to the readable one - unescape: false - -# Bookmark Support -# Dependencies: https://github.com/theme-next/theme-next-bookmark -bookmark: - enable: false - # if auto - # - save the reading position when closing the page - # - or clicking the bookmark-icon - # if manual, only save it by clicking the bookmark-icon - save: auto - - -# --------------------------------------------------------------- -# Tags Settings -# --------------------------------------------------------------- - -# External URL with BASE64 encrypt & decrypt. -# Usage: {% exturl text url "title" %} -# Alias: {% extlink text url "title" %} -exturl: false - -# Note tag (bs-callout). -note: - # Note tag style values: - # - simple bs-callout old alert style. Default. - # - modern bs-callout new (v2-v3) alert style. - # - flat flat callout style with background, like on Mozilla or StackOverflow. - # - disabled disable all CSS styles import of note tag. - style: simple - icons: false - border_radius: 3 - # Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6). - # Offset also applied to label tag variables. This option can work with disabled note tag. - light_bg_offset: 0 - -# Label tag. -label: true - -# Tabs tag. -tabs: - enable: true - transition: - tabs: false - labels: true - border_radius: 0 - -# Reading progress bar -# Dependencies: https://github.com/theme-next/theme-next-reading-progress -reading_progress: - enable: false - color: "#37c6c0" - height: 2px - - -#! --------------------------------------------------------------- -#! DO NOT EDIT THE FOLLOWING SETTINGS -#! UNLESS YOU KNOW WHAT YOU ARE DOING -#! --------------------------------------------------------------- - -# Use velocity to animate everything. -motion: - enable: true - async: false - transition: - # Transition variants: - # fadeIn | fadeOut | flipXIn | flipXOut | flipYIn | flipYOut | flipBounceXIn | flipBounceXOut | flipBounceYIn | flipBounceYOut - # swoopIn | swoopOut | whirlIn | whirlOut | shrinkIn | shrinkOut | expandIn | expandOut - # bounceIn | bounceOut | bounceUpIn | bounceUpOut | bounceDownIn | bounceDownOut | bounceLeftIn | bounceLeftOut | bounceRightIn | bounceRightOut - # slideUpIn | slideUpOut | slideDownIn | slideDownOut | slideLeftIn | slideLeftOut | slideRightIn | slideRightOut - # slideUpBigIn | slideUpBigOut | slideDownBigIn | slideDownBigOut | slideLeftBigIn | slideLeftBigOut | slideRightBigIn | slideRightBigOut - # perspectiveUpIn | perspectiveUpOut | perspectiveDownIn | perspectiveDownOut | perspectiveLeftIn | perspectiveLeftOut | perspectiveRightIn | perspectiveRightOut - post_block: fadeIn - post_header: slideDownIn - post_body: slideDownIn - coll_header: slideLeftIn - # Only for Pisces | Gemini. - sidebar: slideUpIn - -# Fancybox. There is support for old version 2 and new version 3. -# Please, choose only any one variant, do not need to install both. -# For install 2.x: https://github.com/theme-next/theme-next-fancybox -# For install 3.x: https://github.com/theme-next/theme-next-fancybox3 -fancybox: false - -# Added switch option for separated repo in 6.0.0. -# Dependencies: https://github.com/theme-next/theme-next-fastclick -fastclick: false - -# Added switch option for separated repo in 6.0.0. -# Dependencies: https://github.com/theme-next/theme-next-jquery-lazyload -lazyload: false - -# Progress bar in the top during page loading. -# Dependencies: https://github.com/theme-next/theme-next-pace -pace: false -# Themes list: -#pace-theme-big-counter -#pace-theme-bounce -#pace-theme-barber-shop -#pace-theme-center-atom -#pace-theme-center-circle -#pace-theme-center-radar -#pace-theme-center-simple -#pace-theme-corner-indicator -#pace-theme-fill-left -#pace-theme-flash -#pace-theme-loading-bar -#pace-theme-mac-osx -#pace-theme-minimal -# For example -# pace_theme: pace-theme-center-simple -pace_theme: pace-theme-minimal - -# Canvas-nest -# Dependencies: https://github.com/theme-next/theme-next-canvas-nest -canvas_nest: false - -# JavaScript 3D library. -# Dependencies: https://github.com/theme-next/theme-next-three -# three_waves -three_waves: false -# canvas_lines -canvas_lines: false -# canvas_sphere -canvas_sphere: false - -# Only fit scheme Pisces -# Dependencies: https://github.com/theme-next/theme-next-canvas-ribbon -# Canvas-ribbon -# size: The width of the ribbon. -# alpha: The transparency of the ribbon. -# zIndex: The display level of the ribbon. -canvas_ribbon: - enable: false - size: 300 - alpha: 0.6 - zIndex: -1 - -# Script Vendors. -# Set a CDN address for the vendor you want to customize. -# For example -# jquery: https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js -# Be aware that you should use the same version as internal ones to avoid potential problems. -# Please use the https protocol of CDN files when you enable https on your site. -vendors: - # Internal path prefix. Please do not edit it. - _internal: lib - - # Internal version: 2.1.3 - jquery: - - # Internal version: 2.1.5 - # See: http://fancyapps.com/fancybox/ - fancybox: - fancybox_css: - - # Internal version: 1.0.6 - # See: https://github.com/ftlabs/fastclick - fastclick: - - # Internal version: 1.9.7 - # See: https://github.com/tuupola/jquery_lazyload - lazyload: - - # Internal version: 1.2.1 - # See: http://VelocityJS.org - velocity: - - # Internal version: 1.2.1 - # See: http://VelocityJS.org - velocity_ui: - - # Internal version: 0.7.9 - # See: https://faisalman.github.io/ua-parser-js/ - ua_parser: - - # Internal version: 4.6.2 - # See: http://fontawesome.io/ - fontawesome: - - # Internal version: 1 - # https://www.algolia.com - algolia_instant_js: - algolia_instant_css: - - # Internal version: 1.0.2 - # See: https://github.com/HubSpot/pace - # Or use direct links below: - # pace: //cdn.bootcss.com/pace/1.0.2/pace.min.js - # pace_css: //cdn.bootcss.com/pace/1.0.2/themes/blue/pace-theme-flash.min.css - pace: - pace_css: - - # Internal version: 1.0.0 - # https://github.com/hustcc/canvas-nest.js - canvas_nest: - - # three - three: - - # three_waves - # https://github.com/jjandxa/three_waves - three_waves: - - # three_waves - # https://github.com/jjandxa/canvas_lines - canvas_lines: - - # three_waves - # https://github.com/jjandxa/canvas_sphere - canvas_sphere: - - # Internal version: 1.0.0 - # https://github.com/zproo/canvas-ribbon - canvas_ribbon: - - # Internal version: 3.3.0 - # https://github.com/ethantw/Han - Han: - - # Internal version: 3.3.0 - # https://github.com/vinta/pangu.js - pangu: - - # needMoreShare2 - # https://github.com/revir/need-more-share2 - needmoreshare2_js: - needmoreshare2_css: - - # bookmark - # Internal version: 1.0.0 - # https://github.com/theme-next/theme-next-bookmark - bookmark: - - # reading_progress - # Internal version: 1.0 - # https://github.com/theme-next/theme-next-reading-progress - # Example: https://cdn.jsdelivr.net/gh/theme-next/theme-next-reading-progress@1.1/reading_progress.min.js - reading_progress: - - # valine comment - # Example: https://cdn.jsdelivr.net/npm/valine@1.1.8/dist/Valine.min.js - valine: - - -# Assets -css: css -js: js -images: images + symbols: true + time: true + total_symbols: true + total_time: true + +search: + path: search.xml + field: post + format: html + limit: 10000 + +douban: + user: incoder + book: + title: '书中自有黄金屋' + quote: '只有学习才能让我快乐~' + movie: + title: '有人的地方,就有江湖' + quote: '时光追忆!' + game: + title: '那时候太年轻' + quote: '游戏可以重来,人生呢?' + timeout: 10000 # optional \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..9c98cd655 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,3114 @@ +{ + "name": "hexo-site", + "version": "0.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "JSONStream": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.2.tgz", + "integrity": "sha1-wQI3G27Dp887hHygDCC7D85Mbeo=", + "requires": { + "jsonparse": "1.3.1", + "through": "2.3.8" + } + }, + "a-sync-waterfall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.0.tgz", + "integrity": "sha1-OOgxnXk3niRiiEW1O5ZyKyng5Hw=" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "requires": { + "mime-types": "2.1.18", + "negotiator": "0.6.1" + } + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==" + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "requires": { + "kind-of": "3.2.2", + "longest": "1.0.1", + "repeat-string": "1.6.1" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "1.9.1" + } + }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=" + }, + "anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "requires": { + "micromatch": "2.3.11", + "normalize-path": "2.1.1" + } + }, + "archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=" + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "requires": { + "arr-flatten": "1.1.0" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=" + }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=" + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=" + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "requires": { + "chalk": "1.1.3", + "esutils": "2.0.2", + "js-tokens": "3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "babel-eslint": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz", + "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-traverse": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "requires": { + "babel-runtime": "6.26.0" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "2.5.5", + "regenerator-runtime": "0.11.1" + }, + "dependencies": { + "core-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.5.tgz", + "integrity": "sha1-sU3ek2xkDAV5prUMq8wTLdYSfjs=" + } + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "requires": { + "babel-code-frame": "6.26.0", + "babel-messages": "6.23.0", + "babel-runtime": "6.26.0", + "babel-types": "6.26.0", + "babylon": "6.18.0", + "debug": "2.6.9", + "globals": "9.18.0", + "invariant": "2.2.4", + "lodash": "4.17.10" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "requires": { + "babel-runtime": "6.26.0", + "esutils": "2.0.2", + "lodash": "4.17.10", + "to-fast-properties": "1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "balloon-css": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/balloon-css/-/balloon-css-0.5.0.tgz", + "integrity": "sha1-ajwGXvq56l9QmpXUMV3wCq4RT6M=" + }, + "basic-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", + "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", + "requires": { + "safe-buffer": "5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } + } + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=" + }, + "bluebird": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", + "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "browser-fingerprint": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/browser-fingerprint/-/browser-fingerprint-0.0.1.tgz", + "integrity": "sha1-jfPNyiW/fVs1QtYVRdcwBT/OYEo=" + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "2.3.2", + "upper-case": "1.1.3" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "requires": { + "align-text": "0.1.4", + "lazy-cache": "1.0.4" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "3.2.1", + "escape-string-regexp": "1.0.5", + "supports-color": "5.4.0" + } + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "requires": { + "css-select": "1.2.0", + "dom-serializer": "0.1.0", + "entities": "1.1.1", + "htmlparser2": "3.9.2", + "lodash.assignin": "4.2.0", + "lodash.bind": "4.2.1", + "lodash.defaults": "4.2.0", + "lodash.filter": "4.6.0", + "lodash.flatten": "4.4.0", + "lodash.foreach": "4.5.0", + "lodash.map": "4.6.0", + "lodash.merge": "4.6.1", + "lodash.pick": "4.4.0", + "lodash.reduce": "4.6.0", + "lodash.reject": "4.6.0", + "lodash.some": "4.6.0" + } + }, + "chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", + "requires": { + "anymatch": "1.3.2", + "async-each": "1.0.1", + "fsevents": "1.2.2", + "glob-parent": "2.0.0", + "inherits": "2.0.3", + "is-binary-path": "1.0.1", + "is-glob": "2.0.1", + "path-is-absolute": "1.0.1", + "readdirp": "2.1.0" + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wrap-ansi": "2.1.0" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "color-convert": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz", + "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "command-exists": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.6.tgz", + "integrity": "sha512-Qst/zUUNmS/z3WziPxyqjrcz09pm+2Knbs5mAZL4VAE0sSrNY1/w8+/YxeHcoBTsO6iojA6BW7eFf27Eg2MRuw==" + }, + "compressible": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz", + "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=", + "requires": { + "mime-db": "1.33.0" + } + }, + "compression": { + "version": "1.7.2", + "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", + "requires": { + "accepts": "1.3.5", + "bytes": "3.0.0", + "compressible": "2.0.13", + "debug": "2.6.9", + "on-headers": "1.0.1", + "safe-buffer": "5.1.1", + "vary": "1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "connect": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.6.6.tgz", + "integrity": "sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ=", + "requires": { + "debug": "2.6.9", + "finalhandler": "1.1.0", + "parseurl": "1.3.2", + "utils-merge": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "copy-to": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/copy-to/-/copy-to-2.0.1.tgz", + "integrity": "sha1-JoD7uAaKSNCGVrYJgJK9r8kG9KU=" + }, + "core-js": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz", + "integrity": "sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY=" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "requires": { + "lru-cache": "4.1.2", + "which": "1.3.0" + } + }, + "css-parse": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.7.0.tgz", + "integrity": "sha1-Mh9s9zeCpv91ERE5D8BeLGV9jJs=" + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "requires": { + "boolbase": "1.0.0", + "css-what": "2.1.0", + "domutils": "1.5.1", + "nth-check": "1.0.1" + } + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=" + }, + "cuid": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/cuid/-/cuid-1.3.8.tgz", + "integrity": "sha1-S4deCWm612T37AcGz0T1+wgx9rc=", + "requires": { + "browser-fingerprint": "0.0.1", + "core-js": "1.2.7", + "node-fingerprint": "0.0.2" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "default-user-agent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/default-user-agent/-/default-user-agent-1.0.0.tgz", + "integrity": "sha1-FsRu/cq6PtxF8k8r1IaLAbfCrcY=", + "requires": { + "os-name": "1.0.3" + } + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "digest-header": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/digest-header/-/digest-header-0.0.1.tgz", + "integrity": "sha1-Ecz23uxXZqw3l0TZAcEsuklRS+Y=", + "requires": { + "utility": "0.1.11" + }, + "dependencies": { + "utility": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/utility/-/utility-0.1.11.tgz", + "integrity": "sha1-/eYM+bTkdRlHoM9dEEzik2ciZxU=", + "requires": { + "address": "1.0.3" + } + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "requires": { + "domelementtype": "1.1.3", + "entities": "1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=" + } + } + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=" + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "requires": { + "domelementtype": "1.3.0" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "requires": { + "dom-serializer": "0.1.0", + "domelementtype": "1.3.0" + } + }, + "dplayer": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/dplayer/-/dplayer-1.22.2.tgz", + "integrity": "sha512-M+rNMwM1walQoiEbWOwlVEj8PGtWRZyS1/kWtxDDbGPTcXBanv27UYiPTC/ukn2lTQ9+oXkd+OhMTWrestc04Q==", + "requires": { + "balloon-css": "0.5.0", + "promise-polyfill": "7.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "ejs": { + "version": "2.5.9", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.9.tgz", + "integrity": "sha512-GJCAeDBKfREgkBtgrYSf9hQy9kTb3helv0zGdzqhM7iAkW8FA/ZF97VQDbwFiwIT8MQLLOe5VlPZOEvZAqtUAQ==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "esprima": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==" + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "requires": { + "fill-range": "2.2.3" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=" + }, + "fill-range": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", + "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", + "requires": { + "is-number": "2.1.0", + "isobject": "2.1.0", + "randomatic": "1.1.7", + "repeat-element": "1.1.2", + "repeat-string": "1.6.1" + } + }, + "finalhandler": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.0.tgz", + "integrity": "sha1-zgtoVbRYU+eRsvzGgARtiCU91/U=", + "requires": { + "debug": "2.6.9", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "on-finished": "2.3.0", + "parseurl": "1.3.2", + "statuses": "1.3.1", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "requires": { + "for-in": "1.0.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.2.tgz", + "integrity": "sha512-iownA+hC4uHFp+7gwP/y5SzaiUo7m2vpa0dhpzw8YuKtiZsz7cIXsFbXpLEeBM6WuCQyw1MH4RRe6XI8GFUctQ==", + "optional": true, + "requires": { + "nan": "2.10.0", + "node-pre-gyp": "0.9.1" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "optional": true, + "requires": { + "delegates": "1.0.0", + "readable-stream": "2.3.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.4.2", + "bundled": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "optional": true, + "requires": { + "aproba": "1.2.0", + "console-control-strings": "1.1.0", + "has-unicode": "2.0.1", + "object-assign": "4.1.1", + "signal-exit": "3.0.2", + "string-width": "1.0.2", + "strip-ansi": "3.0.1", + "wide-align": "1.1.2" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "optional": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "optional": true, + "requires": { + "safer-buffer": "2.1.2" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "optional": true, + "requires": { + "minimatch": "3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "optional": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "requires": { + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "optional": true, + "requires": { + "minipass": "2.2.4" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "optional": true, + "requires": { + "debug": "2.6.9", + "iconv-lite": "0.4.21", + "sax": "1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.9.1", + "bundled": true, + "optional": true, + "requires": { + "detect-libc": "1.0.3", + "mkdirp": "0.5.1", + "needle": "2.2.0", + "nopt": "4.0.1", + "npm-packlist": "1.1.10", + "npmlog": "4.1.2", + "rc": "1.2.6", + "rimraf": "2.6.2", + "semver": "5.5.0", + "tar": "4.4.1" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "optional": true, + "requires": { + "abbrev": "1.1.1", + "osenv": "0.1.5" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "optional": true, + "requires": { + "ignore-walk": "3.0.1", + "npm-bundled": "1.0.3" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "optional": true, + "requires": { + "are-we-there-yet": "1.1.4", + "console-control-strings": "1.1.0", + "gauge": "2.7.4", + "set-blocking": "2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "optional": true, + "requires": { + "os-homedir": "1.0.2", + "os-tmpdir": "1.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "rc": { + "version": "1.2.6", + "bundled": true, + "optional": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "optional": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "optional": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "optional": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "optional": true, + "requires": { + "chownr": "1.0.1", + "fs-minipass": "1.2.5", + "minipass": "2.2.4", + "minizlib": "1.1.0", + "mkdirp": "0.5.1", + "safe-buffer": "5.1.1", + "yallist": "3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "optional": true, + "requires": { + "string-width": "1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "gitment": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/gitment/-/gitment-0.0.3.tgz", + "integrity": "sha1-28y610gLE0W2VpE71w7/eSp7OLg=", + "requires": { + "mobx": "3.6.2" + } + }, + "glob": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", + "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", + "optional": true, + "requires": { + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "requires": { + "glob-parent": "2.0.0", + "is-glob": "2.0.1" + } + }, + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "requires": { + "is-glob": "2.0.1" + } + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==" + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "hexo": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/hexo/-/hexo-3.7.1.tgz", + "integrity": "sha512-+RRN4C8oWYzEnW0NtqNrIfIITRTvXpMoE6OrK5aK4nrO+4lzp0JfZkoxnsINVXUPmzHRimLWUzO95x9lt33jEg==", + "requires": { + "abbrev": "1.1.1", + "archy": "1.0.0", + "bluebird": "3.5.1", + "chalk": "2.4.1", + "cheerio": "0.22.0", + "hexo-cli": "1.1.0", + "hexo-front-matter": "0.2.3", + "hexo-fs": "0.2.3", + "hexo-i18n": "0.2.1", + "hexo-log": "0.2.0", + "hexo-util": "0.6.3", + "js-yaml": "3.11.0", + "lodash": "4.17.10", + "minimatch": "3.0.4", + "moment": "2.22.1", + "moment-timezone": "0.5.17", + "nunjucks": "3.1.2", + "pretty-hrtime": "1.0.3", + "resolve": "1.7.1", + "strip-ansi": "4.0.0", + "strip-indent": "2.0.0", + "swig-extras": "0.0.1", + "swig-templates": "2.0.2", + "text-table": "0.2.0", + "tildify": "1.2.0", + "titlecase": "1.1.2", + "warehouse": "2.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "hexo-cli": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hexo-cli/-/hexo-cli-1.1.0.tgz", + "integrity": "sha512-IWQPppwgmj1iBUcP5mpcMg3Tre6a8Qlr8ejXw6naZiJNSepSgh4mS3KiNPKDa2qQIgPDqJYJzNVFLw+RLA9CkA==", + "requires": { + "abbrev": "1.1.1", + "bluebird": "3.5.1", + "chalk": "1.1.3", + "command-exists": "1.2.6", + "hexo-fs": "0.2.3", + "hexo-log": "0.2.0", + "hexo-util": "0.6.3", + "minimist": "1.2.0", + "object-assign": "4.1.1", + "resolve": "1.7.1", + "tildify": "1.2.0" + }, + "dependencies": { + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "hexo-bunyan": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexo-bunyan/-/hexo-bunyan-1.0.0.tgz", + "integrity": "sha512-RymT8Ck+K77mLt9BEYNb4uyfC7RIQnU5N3laXowMrS28jj2h89VHJCOnhV00mmta4fHRqNa07kP1Hrn17nvMkQ==", + "requires": { + "moment": "2.22.1", + "mv": "2.1.1", + "safe-json-stringify": "1.1.0" + } + }, + "hexo-deployer-git": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/hexo-deployer-git/-/hexo-deployer-git-0.3.1.tgz", + "integrity": "sha512-JSwSmTSknGpaiooGXwmP7sAhoSNW3c+xmBiCc5yyrvRSfQ3zIYWjmcqNXSj8m2DmheqQNgt5D4M7quYjw+L6tA==", + "requires": { + "babel-eslint": "7.2.3", + "bluebird": "3.5.1", + "chalk": "1.1.3", + "hexo-fs": "0.2.3", + "hexo-util": "0.6.3", + "moment": "2.22.1", + "swig": "1.4.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "source-map": { + "version": "0.1.34", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.34.tgz", + "integrity": "sha1-p8/omux7FoLDsZjQrPtH19CQVms=", + "requires": { + "amdefine": "1.0.1" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + }, + "swig": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/swig/-/swig-1.4.2.tgz", + "integrity": "sha1-QIXKBFM2kQS11IPihBs5t64aq6U=", + "requires": { + "optimist": "0.6.1", + "uglify-js": "2.4.24" + } + }, + "uglify-js": { + "version": "2.4.24", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.4.24.tgz", + "integrity": "sha1-+tV1XB4Vd2WLsG/5q25UjJW+vW4=", + "requires": { + "async": "0.2.10", + "source-map": "0.1.34", + "uglify-to-browserify": "1.0.2", + "yargs": "3.5.4" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.5.4.tgz", + "integrity": "sha1-2K/49mXpTDS9JZvevRv68N3TU2E=", + "requires": { + "camelcase": "1.2.1", + "decamelize": "1.2.0", + "window-size": "0.1.0", + "wordwrap": "0.0.2" + } + } + } + }, + "hexo-douban": { + "version": "0.2.16", + "resolved": "https://registry.npmjs.org/hexo-douban/-/hexo-douban-0.2.16.tgz", + "integrity": "sha512-xRunvmGgEi4ER+fvwx85xeScyO5ci/gcypa6VwNlydq0alR8dq5tT0QKKnr89QWcJwJYSnlsP/xOjuJPRlj8gw==", + "requires": { + "ejs": "2.5.6", + "hexo-fs": "0.2.3", + "hexo-i18n": "0.2.1", + "hexo-log": "0.2.0", + "path": "0.12.7", + "urllib-sync": "1.1.4", + "xmldom": "0.1.27", + "xpath": "0.0.24" + }, + "dependencies": { + "ejs": { + "version": "2.5.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.6.tgz", + "integrity": "sha1-R5Y2v6P+Ox3r1SCH8KyyBLTxnIg=" + } + } + }, + "hexo-front-matter": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hexo-front-matter/-/hexo-front-matter-0.2.3.tgz", + "integrity": "sha1-x8qO9CDqNr2F6ECKLoyb9J76YF4=", + "requires": { + "js-yaml": "3.11.0" + } + }, + "hexo-fs": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/hexo-fs/-/hexo-fs-0.2.3.tgz", + "integrity": "sha512-rLB1rMVUW3csAljvJgHfyjemL0BrmcUZfBf9hJe6S0pA53igFa3ON0PFwomvoLs1Wdmjs9Awnw9Tru4PjWFSlQ==", + "requires": { + "bluebird": "3.5.1", + "chokidar": "1.7.0", + "escape-string-regexp": "1.0.5", + "graceful-fs": "4.1.11" + } + }, + "hexo-generator-archive": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/hexo-generator-archive/-/hexo-generator-archive-0.1.5.tgz", + "integrity": "sha512-jPbMtibqkJnAX3hCwhYhK3r6cqy9OKQsVEScjk7LDok+iPmFmkKCNdU/OccxGe1CWAZpT+ta4+LknwNeHG2G4w==", + "requires": { + "hexo-pagination": "0.0.2", + "object-assign": "2.1.1" + }, + "dependencies": { + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + } + } + }, + "hexo-generator-category": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/hexo-generator-category/-/hexo-generator-category-0.1.3.tgz", + "integrity": "sha1-uealhiUwqDvdfaTIGcG58+TMtLI=", + "requires": { + "hexo-pagination": "0.0.2", + "object-assign": "2.1.1" + }, + "dependencies": { + "object-assign": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-2.1.1.tgz", + "integrity": "sha1-Q8NuXVaf+OSBbE76i+AtJpZ8GKo=" + } + } + }, + "hexo-generator-feed": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/hexo-generator-feed/-/hexo-generator-feed-1.2.2.tgz", + "integrity": "sha512-4jcvVhFgpEFRJ7A+KhBSfWoQaewRBjcVWEO4OmBgnvaZOm6XwK+b5ZXx/8BpujCLHbjXWzglXhiT7qFFS/nvzw==", + "requires": { + "nunjucks": "3.1.2", + "object-assign": "4.1.1" + } + }, + "hexo-generator-index": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hexo-generator-index/-/hexo-generator-index-0.2.1.tgz", + "integrity": "sha1-kEIin8rHmq9wBXXaGTMr8/fuXF0=", + "requires": { + "hexo-pagination": "0.0.2", + "object-assign": "4.1.1" + } + }, + "hexo-generator-searchdb": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/hexo-generator-searchdb/-/hexo-generator-searchdb-1.0.8.tgz", + "integrity": "sha1-BCRSVuFBOmYxOTLb8cCn5WhVkwE=", + "requires": { + "ejs": "1.0.0", + "striptags": "3.1.1", + "utils-merge": "1.0.1" + }, + "dependencies": { + "ejs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-1.0.0.tgz", + "integrity": "sha1-ycYKSKRu5FL7MqccMXuV5aofyz0=" + }, + "striptags": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-3.1.1.tgz", + "integrity": "sha1-yMPn/db7S7OjKjt1LltePjgJPr0=" + } + } + }, + "hexo-generator-sitemap": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/hexo-generator-sitemap/-/hexo-generator-sitemap-1.2.0.tgz", + "integrity": "sha1-MBj419Hi5Cs/caZacxb/z1g7w/M=", + "requires": { + "minimatch": "3.0.4", + "nunjucks": "2.5.2", + "object-assign": "4.1.1" + }, + "dependencies": { + "nunjucks": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-2.5.2.tgz", + "integrity": "sha1-6n00bnhbikh0Zmw8yp4YxXf7oiw=", + "requires": { + "asap": "2.0.6", + "chokidar": "1.7.0", + "yargs": "3.32.0" + } + } + } + }, + "hexo-generator-tag": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/hexo-generator-tag/-/hexo-generator-tag-0.2.0.tgz", + "integrity": "sha1-xXFYRrtB5X2cIMHWbX2yGhq/emI=", + "requires": { + "hexo-pagination": "0.0.2", + "object-assign": "4.1.1" + } + }, + "hexo-i18n": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/hexo-i18n/-/hexo-i18n-0.2.1.tgz", + "integrity": "sha1-hPFBQyvwnYtVjth4xygWS20c1t4=", + "requires": { + "sprintf-js": "1.0.3" + } + }, + "hexo-log": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/hexo-log/-/hexo-log-0.2.0.tgz", + "integrity": "sha512-fzoc+GQexxPPILTjoOQILnA3ZG2MFgqMBVel4xvJ11pXptw9+f97ynTgDAExXafyp9Nz2ChXRuqlCYgPtZSlxQ==", + "requires": { + "chalk": "1.1.3", + "hexo-bunyan": "1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "hexo-pagination": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/hexo-pagination/-/hexo-pagination-0.0.2.tgz", + "integrity": "sha1-jPRwx9sN5bGKOSanbesZQBXffys=", + "requires": { + "utils-merge": "1.0.1" + } + }, + "hexo-renderer-ejs": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/hexo-renderer-ejs/-/hexo-renderer-ejs-0.3.1.tgz", + "integrity": "sha512-XN8pYJU+Wr3dT8ipqEPRlOBySJpd1C5NUBBzgZpVSVBC/6L36O0YZI/Qd5NxQqwfGfSuKQ8N5iMyjmRXSR1MdA==", + "requires": { + "ejs": "2.5.9", + "object-assign": "4.1.1" + } + }, + "hexo-renderer-marked": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/hexo-renderer-marked/-/hexo-renderer-marked-0.3.2.tgz", + "integrity": "sha512-joSLeHB0YRkuViIPQlRz4A+zfJKPNHT+rABFgPHiT1zL9eeTUPxoLL4h7kcgOwRLAontVScaxP2Sie15mNitFg==", + "requires": { + "hexo-util": "0.6.3", + "marked": "0.3.19", + "object-assign": "4.1.1", + "strip-indent": "2.0.0" + } + }, + "hexo-renderer-stylus": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/hexo-renderer-stylus/-/hexo-renderer-stylus-0.3.3.tgz", + "integrity": "sha1-xU6ifh/Y48ipp6hM+6itNUEiyn8=", + "requires": { + "nib": "1.1.2", + "stylus": "0.54.5" + } + }, + "hexo-server": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/hexo-server/-/hexo-server-0.2.2.tgz", + "integrity": "sha512-/KkOYMIGylNoMtnlgas84Kw18A60WU3BVfo8ZnTHy8omCsAz2Z+aK6ddR4PpSmTdLeKDsiZj4ZSg86ZQ+FZzrA==", + "requires": { + "bluebird": "3.5.1", + "chalk": "1.1.3", + "compression": "1.7.2", + "connect": "3.6.6", + "mime": "1.6.0", + "morgan": "1.9.0", + "object-assign": "4.1.1", + "opn": "4.0.2", + "serve-static": "1.13.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "2.2.1", + "escape-string-regexp": "1.0.5", + "has-ansi": "2.0.0", + "strip-ansi": "3.0.1", + "supports-color": "2.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "hexo-symbols-count-time": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/hexo-symbols-count-time/-/hexo-symbols-count-time-0.4.2.tgz", + "integrity": "sha1-kbyvaVfhtPfHQVVMKweuXS+o8/s=" + }, + "hexo-tag-dplayer": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/hexo-tag-dplayer/-/hexo-tag-dplayer-0.3.3.tgz", + "integrity": "sha512-Y2sweNkcYNr9cLt2J35V0R40P7rriPiW/99shfEdWy5xYxXNzCBKKuDC/YAr2XzzZk29WM5YPID9f2w3veaqdA==", + "requires": { + "dplayer": "1.22.2", + "hexo-fs": "0.2.3", + "hexo-log": "0.2.0", + "hexo-util": "0.6.3" + } + }, + "hexo-util": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/hexo-util/-/hexo-util-0.6.3.tgz", + "integrity": "sha512-zPxaqCWZz3/25SAB4FlrRtWktJ+Pr+vBiv/nyHpXKgXPt1m70liViKlRwWLqDmRjJ72x6/k4qCEeXHajvcGHUw==", + "requires": { + "bluebird": "3.5.1", + "camel-case": "3.0.0", + "cross-spawn": "4.0.2", + "highlight.js": "9.12.0", + "html-entities": "1.2.1", + "striptags": "2.2.1" + } + }, + "highlight.js": { + "version": "9.12.0", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.12.0.tgz", + "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=" + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + }, + "htmlparser2": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.9.2.tgz", + "integrity": "sha1-G9+HrMoPP55T+k/M6w9LTLsAszg=", + "requires": { + "domelementtype": "1.3.0", + "domhandler": "2.4.2", + "domutils": "1.5.1", + "entities": "1.1.1", + "inherits": "2.0.3", + "readable-stream": "2.3.6" + } + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "requires": { + "depd": "1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": "1.5.0" + }, + "dependencies": { + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "requires": { + "ms": "2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "requires": { + "safer-buffer": "2.1.2" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "requires": { + "loose-envify": "1.3.1" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "requires": { + "binary-extensions": "1.11.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=" + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "requires": { + "is-primitive": "2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "requires": { + "kind-of": "3.2.2" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "3.0.1" + }, + "dependencies": { + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + } + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=" + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=" + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "requires": { + "isarray": "1.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" + }, + "js-yaml": { + "version": "3.11.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.11.0.tgz", + "integrity": "sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw==", + "requires": { + "argparse": "1.0.10", + "esprima": "4.0.0" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "1.0.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=" + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=" + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=" + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=" + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=" + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=" + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=" + }, + "lodash.merge": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.1.tgz", + "integrity": "sha512-AOYza4+Hf5z1/0Hztxpm2/xiPZgi/cjMqdnKTUWTBSKchJlxXXuUSxCCl8rJlf4g6yww/j6mA8nC8Hw/EZWxKQ==" + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=" + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=" + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=" + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" + }, + "loose-envify": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz", + "integrity": "sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg=", + "requires": { + "js-tokens": "3.0.2" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "lru-cache": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + }, + "markdown": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/markdown/-/markdown-0.5.0.tgz", + "integrity": "sha1-KCBbVlqK51kt4gdGPWY33BgnIrI=", + "requires": { + "nopt": "2.1.2" + } + }, + "marked": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", + "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==" + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" + }, + "mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "requires": { + "mime-db": "1.33.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + } + } + }, + "mobx": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-3.6.2.tgz", + "integrity": "sha512-Dq3boJFLpZEvuh5a/MbHLUIyN9XobKWIb0dBfkNOJffNkE3vtuY0C9kSDVpfH8BB0BPkVw8g22qCv7d05LEhKg==" + }, + "moment": { + "version": "2.22.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.1.tgz", + "integrity": "sha512-shJkRTSebXvsVqk56I+lkb2latjBs8I+pc2TzWc545y2iFnSjm7Wg0QMh+ZWcdSLQyGEau5jI8ocnmkyTgr9YQ==" + }, + "moment-timezone": { + "version": "0.5.17", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.17.tgz", + "integrity": "sha512-Y/JpVEWIOA9Gho4vO15MTnW1FCmHi3ypprrkUaxsZ1TKg3uqC8q/qMBjTddkHoiwwZN3qvZSr4zJP7x9V3LpXA==", + "requires": { + "moment": "2.22.1" + } + }, + "morgan": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", + "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", + "requires": { + "basic-auth": "2.0.0", + "debug": "2.6.9", + "depd": "1.1.2", + "on-finished": "2.3.0", + "on-headers": "1.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "mv": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", + "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", + "optional": true, + "requires": { + "mkdirp": "0.5.1", + "ncp": "2.0.0", + "rimraf": "2.4.5" + } + }, + "nan": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.10.0.tgz", + "integrity": "sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA==", + "optional": true + }, + "ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", + "optional": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" + }, + "nib": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/nib/-/nib-1.1.2.tgz", + "integrity": "sha1-amnt5AgblcDe+L4CSkyK4MLLtsc=", + "requires": { + "stylus": "0.54.5" + } + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "1.1.4" + } + }, + "node-fingerprint": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/node-fingerprint/-/node-fingerprint-0.0.2.tgz", + "integrity": "sha1-Mcur63GmeufdWn3AQuUcPHWGhQE=" + }, + "nopt": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-2.1.2.tgz", + "integrity": "sha1-bMzZd7gBMqB3MdbozljCyDA8+a8=", + "requires": { + "abbrev": "1.1.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "requires": { + "remove-trailing-separator": "1.1.0" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "requires": { + "boolbase": "1.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "nunjucks": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.1.2.tgz", + "integrity": "sha512-pJXncV07mmiuIDL9OqdNkcpvifuDMzMq9qBQT9SHasAS7AEwzNp/r/jHNl+9O0+zsldcdWG9ZtXo/nwu2cTqXA==", + "requires": { + "a-sync-waterfall": "1.0.0", + "asap": "2.0.6", + "chokidar": "1.7.0", + "postinstall-build": "5.0.1", + "yargs": "3.32.0" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "requires": { + "for-own": "0.1.5", + "is-extendable": "0.1.1" + } + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1.0.2" + } + }, + "opn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/opn/-/opn-4.0.2.tgz", + "integrity": "sha1-erwi5kTf9jsKltWrfyeQwPAavJU=", + "requires": { + "object-assign": "4.1.1", + "pinkie-promise": "2.0.1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "0.0.10", + "wordwrap": "0.0.3" + }, + "dependencies": { + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + } + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "1.0.0" + } + }, + "os-name": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-1.0.3.tgz", + "integrity": "sha1-GzefZINa98Wn9JizV8uVIVwVnt8=", + "requires": { + "osx-release": "1.1.0", + "win-release": "1.1.1" + } + }, + "osx-release": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/osx-release/-/osx-release-1.1.0.tgz", + "integrity": "sha1-8heRGigTaUmvG/kwiyQeJzfTzWw=", + "requires": { + "minimist": "1.2.0" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "requires": { + "glob-base": "0.3.0", + "is-dotfile": "1.0.3", + "is-extglob": "1.0.0", + "is-glob": "2.0.1" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha1-1NwqUGxM4hl+tIHr/NWzbAFAsQ8=", + "requires": { + "process": "0.11.10", + "util": "0.10.3" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "2.0.4" + } + }, + "postinstall-build": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/postinstall-build/-/postinstall-build-5.0.1.tgz", + "integrity": "sha1-uRepB5smF42aJK9aXNjLSpkdEbk=" + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=" + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "promise-polyfill": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/promise-polyfill/-/promise-polyfill-7.1.0.tgz", + "integrity": "sha512-P6NJ2wU/8fac44ENORsuqT8TiolKGB2u0fEClPtXezn7w5cmLIjM/7mhPlTebke2EPr6tmqZbXvnX0TxwykGrg==" + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "randomatic": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", + "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", + "requires": { + "is-number": "3.0.0", + "kind-of": "4.0.0" + }, + "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "3.2.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "requires": { + "is-buffer": "1.1.6" + } + } + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.2", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "requires": { + "graceful-fs": "4.1.11", + "minimatch": "3.0.4", + "readable-stream": "2.3.6", + "set-immediate-shim": "1.0.1" + } + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "requires": { + "is-equal-shallow": "0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + }, + "resolve": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.7.1.tgz", + "integrity": "sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==", + "requires": { + "path-parse": "1.0.5" + } + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "requires": { + "align-text": "0.1.4" + } + }, + "rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", + "optional": true, + "requires": { + "glob": "6.0.4" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safe-json-stringify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-json-stringify/-/safe-json-stringify-1.1.0.tgz", + "integrity": "sha512-EzBtUaFH9bHYPc69wqjp0efJI/DPNHdFbGE3uIMn4sVbO0zx8vZ8cG4WKxQfOpUOKsQyGBiT2mTqnCw+6nLswA==", + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sax": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/sax/-/sax-0.5.8.tgz", + "integrity": "sha1-1HLbIo6zMcJQaw6MFVJK25OdEsE=" + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "requires": { + "debug": "2.6.9", + "depd": "1.1.2", + "destroy": "1.0.4", + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "etag": "1.8.1", + "fresh": "0.5.2", + "http-errors": "1.6.3", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "2.3.0", + "range-parser": "1.2.0", + "statuses": "1.4.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + } + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "requires": { + "encodeurl": "1.0.2", + "escape-html": "1.0.3", + "parseurl": "1.3.2", + "send": "0.16.2" + } + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=" + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "statuses": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", + "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + } + } + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + }, + "striptags": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/striptags/-/striptags-2.2.1.tgz", + "integrity": "sha1-TEULcI1BuL85zyTEn/I0/Gqr/TI=" + }, + "stylus": { + "version": "0.54.5", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.54.5.tgz", + "integrity": "sha1-QrlWCTHKcJDOhRWnmLqeaqPW3Hk=", + "requires": { + "css-parse": "1.7.0", + "debug": "3.1.0", + "glob": "7.0.6", + "mkdirp": "0.5.1", + "sax": "0.5.8", + "source-map": "0.1.43" + }, + "dependencies": { + "glob": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", + "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "requires": { + "amdefine": "1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "requires": { + "has-flag": "3.0.0" + } + }, + "swig-extras": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/swig-extras/-/swig-extras-0.0.1.tgz", + "integrity": "sha1-tQP+3jcqucJMasaMr2VrzvGHIyg=", + "requires": { + "markdown": "0.5.0" + } + }, + "swig-templates": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/swig-templates/-/swig-templates-2.0.2.tgz", + "integrity": "sha1-0lAqcwMBk1b06nbqkGXU9Yr2q3U=", + "requires": { + "optimist": "0.6.1", + "uglify-js": "2.6.0" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tildify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tildify/-/tildify-1.2.0.tgz", + "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", + "requires": { + "os-homedir": "1.0.2" + } + }, + "titlecase": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/titlecase/-/titlecase-1.1.2.tgz", + "integrity": "sha1-eBE9EQgIa4MmMxoyR96o9aSeqFM=" + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" + }, + "uglify-js": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.6.0.tgz", + "integrity": "sha1-JeqhzDVQ45QQzu+v0c+7a20V8AE=", + "requires": { + "async": "0.2.10", + "source-map": "0.5.7", + "uglify-to-browserify": "1.0.2", + "yargs": "3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "requires": { + "center-align": "0.1.3", + "right-align": "0.1.3", + "wordwrap": "0.0.2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "requires": { + "camelcase": "1.2.1", + "cliui": "2.1.0", + "decamelize": "1.2.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=" + }, + "urllib": { + "version": "2.11.1", + "resolved": "https://registry.npmjs.org/urllib/-/urllib-2.11.1.tgz", + "integrity": "sha1-5F1Xnxu+Qsn64hzf9yVo88jIyUU=", + "requires": { + "any-promise": "1.3.0", + "debug": "2.6.9", + "default-user-agent": "1.0.0", + "digest-header": "0.0.1", + "humanize-ms": "1.2.1", + "iconv-lite": "0.4.23", + "media-typer": "0.3.0", + "statuses": "1.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "urllib-sync": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/urllib-sync/-/urllib-sync-1.1.4.tgz", + "integrity": "sha1-yRMI9JkaZe5iDWc85g/dJLvRjMo=", + "requires": { + "urllib": "2.11.1", + "utility": "1.7.1" + } + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=" + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "utility": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/utility/-/utility-1.7.1.tgz", + "integrity": "sha1-+3TN3IFqQRJ2ym6MqZMkfyPusKc=", + "requires": { + "copy-to": "2.0.1", + "escape-html": "1.0.3" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "warehouse": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/warehouse/-/warehouse-2.2.0.tgz", + "integrity": "sha1-XQnWSUKZK+Zn2PfIagnCuK6gQGI=", + "requires": { + "JSONStream": "1.3.2", + "bluebird": "3.5.1", + "cuid": "1.3.8", + "graceful-fs": "4.1.11", + "is-plain-object": "2.0.4", + "lodash": "4.17.10" + } + }, + "which": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", + "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", + "requires": { + "isexe": "2.0.0" + } + }, + "win-release": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/win-release/-/win-release-1.1.1.tgz", + "integrity": "sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk=", + "requires": { + "semver": "5.5.0" + } + }, + "window-size": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz", + "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY=" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "1.0.2", + "strip-ansi": "3.0.1" + }, + "dependencies": { + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "2.1.1" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "xmldom": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz", + "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=" + }, + "xpath": { + "version": "0.0.24", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.24.tgz", + "integrity": "sha1-Gt4WLhzFI8jTn8fQavwW6iFvKfs=" + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz", + "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=", + "requires": { + "camelcase": "2.1.1", + "cliui": "3.2.0", + "decamelize": "1.2.0", + "os-locale": "1.4.0", + "string-width": "1.0.2", + "window-size": "0.1.4", + "y18n": "3.2.1" + } + } + } +} diff --git a/package.json b/package.json index dcd68887a..0aa35ad9a 100644 --- a/package.json +++ b/package.json @@ -1,36 +1,27 @@ { - "name": "hexo-theme-next", - "version": "6.3.0", - "description": "Elegant and powerful theme for Hexo", - "main": "index.js", - "directories": { - "test": "test" + "name": "hexo-site", + "version": "0.0.0", + "private": true, + "hexo": { + "version": "3.7.1" }, - "scripts": { - "test": "gulp" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/theme-next/hexo-theme-next.git" - }, - "keywords": [ - "hexo", - "theme", - "next" - ], - "author": "NexT (https://theme-next.org)", - "license": "AGPL", - "bugs": { - "url": "https://github.com/theme-next/hexo-theme-next/issues" - }, - "homepage": "https://theme-next.org", - "devDependencies": { - "coffee-script": "^1.10.0", - "gulp": "^3.9.0", - "gulp-jshint": "^1.12.0", - "gulp-shell": "^0.6.1", - "js-yaml": "^3.8.1", - "jshint-stylish": "^2.1.0", - "stylint": "^1.5.9" + "dependencies": { + "gitment": "0.0.3", + "hexo": "^3.7.1", + "hexo-deployer-git": "^0.3.1", + "hexo-douban": "^0.2.16", + "hexo-generator-archive": "^0.1.4", + "hexo-generator-category": "^0.1.3", + "hexo-generator-feed": "^1.2.2", + "hexo-generator-index": "^0.2.0", + "hexo-generator-searchdb": "^1.0.8", + "hexo-generator-sitemap": "^1.2.0", + "hexo-generator-tag": "^0.2.0", + "hexo-renderer-ejs": "^0.3.0", + "hexo-renderer-marked": "^0.3.0", + "hexo-renderer-stylus": "^0.3.1", + "hexo-server": "^0.2.0", + "hexo-symbols-count-time": "^0.4.2", + "hexo-tag-dplayer": "^0.3.3" } } diff --git a/scaffolds/draft.md b/scaffolds/draft.md new file mode 100644 index 000000000..498e95baf --- /dev/null +++ b/scaffolds/draft.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +tags: +--- diff --git a/scaffolds/page.md b/scaffolds/page.md new file mode 100644 index 000000000..f01ba3cd8 --- /dev/null +++ b/scaffolds/page.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +date: {{ date }} +--- diff --git a/scaffolds/post.md b/scaffolds/post.md new file mode 100644 index 000000000..1f9b9a465 --- /dev/null +++ b/scaffolds/post.md @@ -0,0 +1,5 @@ +--- +title: {{ title }} +date: {{ date }} +tags: +--- diff --git a/source/CNAME b/source/CNAME new file mode 100644 index 000000000..c5eb9eade --- /dev/null +++ b/source/CNAME @@ -0,0 +1 @@ +incoder.org \ No newline at end of file diff --git a/source/README.md b/source/README.md new file mode 100644 index 000000000..545862920 --- /dev/null +++ b/source/README.md @@ -0,0 +1,10 @@ +

+ BladeCode +

+ +![BladeCode](https://travis-ci.com/BladeCode/BladeCode.github.io.svg?branch=dev) + +### Thanks +1. [Node](https://nodejs.org) +2. [Hexo](https://hexo.io) +3. [Next](https://github.com/theme-next/hexo-theme-next) \ No newline at end of file diff --git a/source/_data/next.yml b/source/_data/next.yml new file mode 100644 index 000000000..cb9173c00 --- /dev/null +++ b/source/_data/next.yml @@ -0,0 +1,978 @@ +# --------------------------------------------------------------- +# Theme Core Configuration Settings +# --------------------------------------------------------------- + +# If false, merge configs from `_data/next.yml` into default configuration (rewrite). +# If true, will fully override default configuration by options from `_data/next.yml` (override). Only for NexT settings. +# And if true, all config from default NexT `_config.yml` must be copied into `next.yml`. Use if you know what you are doing. +# Useful if you want to comment some options from NexT `_config.yml` by `next.yml` without editing default config. +override: true + +# Allow to cache content generation. Introduced in NexT v6.0.0. +cache: + enable: true + +# Redefine custom file paths. Introduced in NexT v6.0.2. +# If commented, will be used default custom file paths. + +# For example, you want to put your custom styles file +# outside theme directory in root `source/_data`, set +# `styles: source/_data/styles.styl` +#custom_file_path: + # Default paths: layout/_custom/* + #head: source/_data/head.swig + #header: source/_data/header.swig + #sidebar: source/_data/sidebar.swig + + # Default path: source/css/_variables/custom.styl + #variables: source/_data/variables.styl + # Default path: source/css/_mixins/custom.styl + #mixins: source/_data/mixins.styl + # Default path: source/css/_custom/custom.styl + #styles: source/_data/styles.styl + + +# --------------------------------------------------------------- +# Site Information Settings +# --------------------------------------------------------------- + +# To get or check favicons visit: https://realfavicongenerator.net +# Put your favicons into `hexo-site/source/` (recommend) or `hexo-site/themes/next/source/images/` directory. + +# Default NexT favicons placed in `hexo-site/themes/next/source/images/` directory. +# And if you want to place your icons in `hexo-site/source/` root directory, you must remove `/images` prefix from pathes. + +# For example, you put your favicons into `hexo-site/source/images` directory. +# Then need to rename & redefine they on any other names, otherwise icons from Next will rewrite your custom icons in Hexo. +favicon: + small: https://res.cloudinary.com/incoder/image/upload/v1525515979/favicon-16x16.png + medium: https://res.cloudinary.com/incoder/image/upload/v1525515979/favicon-32x32.png + apple_touch_icon: https://res.cloudinary.com/incoder/image/upload/v1525515979/apple-touch-icon.png + safari_pinned_tab: /images/logo.svg + #android_manifest: /images/manifest.json + #ms_browserconfig: /images/browserconfig.xml + +# Set rss to false to disable feed link. +# Leave rss as empty to use site's feed link, and install hexo-generator-feed: `npm install hexo-generator-feed --save`. +# Set rss to specific value if you have burned your feed already. +rss: + +footer: + # Specify the date when the site was setup. + # If not defined, current year will be used. + #since: 2015 + + # Icon between year and copyright info. + icon: + # Icon name in fontawesome, see: https://fontawesome.com/v4.7.0/icons + # `heart` is recommended with animation in red (#ff0000). + name: user + # If you want to animate the icon, set it to true. + animated: false + # Change the color of icon, using Hex Code. + color: "#808080" + + # If not defined, will be used `author` from Hexo main config. + copyright: + # ------------------------------------------------------------- + powered: + # Hexo link (Powered by Hexo). + enable: true + # Version info of Hexo after Hexo link (vX.X.X). + version: true + + theme: + # Theme & scheme info link (Theme - NexT.scheme). + enable: true + # Version info of NexT after scheme info (vX.X.X). + version: true + # ------------------------------------------------------------- + # Any custom text can be defined here. + #custom_text: Hosted by Coding Pages + +# --------------------------------------------------------------- +# SEO Settings +# --------------------------------------------------------------- + +# Canonical, set a canonical link tag in your hexo, you could use it for your SEO of blog. +# See: https://support.google.com/webmasters/answer/139066 +# Tips: Before you open this tag, remember set up your URL in hexo _config.yml ( ex. url: http://yourdomain.com ) +canonical: true + +# Change headers hierarchy on site-subtitle (will be main site description) and on all post/pages titles for better SEO-optimization. +seo: false + +# If true, will add site-subtitle to index page, added in main hexo config. +# subtitle: Subtitle +index_with_subtitle: false + + +# --------------------------------------------------------------- +# Menu Settings +# --------------------------------------------------------------- + +# When running the site in a subdirectory (e.g. domain.tld/blog), remove the leading slash from link value (/archives -> archives). +# Usage: `Key: /link/ || icon` +# Key is the name of menu item. If translate for this menu will find in languages - this translate will be loaded; if not - Key name will be used. Key is case-senstive. +# Value before `||` delimeter is the target link. +# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, question icon will be loaded. +menu: + home: / || home + tags: /tags/ || tags + categories: /categories/ || th + archives: /archives/ || archive + books: /books/ || book + movies: /movies || film + about: /about/ || user + #schedule: /schedule/ || calendar + #sitemap: /sitemap.xml || sitemap + #commonweal: /404/ || heartbeat + +# Enable/Disable menu icons / item badges. +menu_settings: + icons: true + badges: true + +# --------------------------------------------------------------- +# Scheme Settings +# --------------------------------------------------------------- + +# Schemes +scheme: Muse +#scheme: Mist +#scheme: Pisces +#scheme: Gemini + + +# --------------------------------------------------------------- +# Sidebar Settings +# --------------------------------------------------------------- + +# Posts / Categories / Tags in sidebar. +site_state: true + +# Social Links. +# Usage: `Key: permalink || icon` +# Key is the link label showing to end users. +# Value before `||` delimeter is the target permalink. +# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, globe icon will be loaded. +social: + GitHub: https://github.com/BladeCode || github + E-Mail: mailto:incoder.xu@gmail.com || envelope + # Google: https://plus.google.com/101381611051487754759 || google + Twitter: https://twitter.com/_incoder || twitter + Weibo: http://weibo.com/onblade || weibo + Medium: https://medium.com/@incoder || medium + #FB Page: https://www.facebook.com/yourname || facebook + #VK Group: https://vk.com/yourname || vk + # StackOverflow: https://stackoverflow.com/users/5776993/blade || stack-overflow + #YouTube: https://youtube.com/yourname || youtube + #Instagram: https://instagram.com/yourname || instagram + #Skype: skype:yourname?call|chat || skype + +social_icons: + enable: true + icons_only: false + transition: false + # Dependencies: exturl: true in Tags Settings section below. + # To encrypt links above use https://www.base64encode.org + # Example encoded link: `GitHub: aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQ= || github` + exturl: false + +# Follow me on GitHub banner in right-top corner. +# Usage: `permalink || title` +# Value before `||` delimeter is the target permalink. +# Value after `||` delimeter is the title and aria-label name. +#github_banner: https://github.com/yourname || Follow me on GitHub + +# Blog rolls +links_icon: link +links_title: Links +links_layout: block +#links_layout: inline +links: + TwoDragonLake: http://www.twodragonlake.com + RootCluster: https://rootcluster.github.io + 南贺神社: https://1156721874.github.io + +# Sidebar Avatar +avatar: + # in theme directory(source/images): /images/avatar.gif + # in site directory(source/uploads): /uploads/avatar.gif + # You can also use other linking images. + # url: #/images/avatar.gif + url: https://res.cloudinary.com/incoder/image/upload/v1525515979/avatar.png + + # If true, the avatar would be dispalyed in circle. + rounded: false + # The value of opacity should be choose from 0 to 1 to set the opacity of the avatar. + opacity: 1 + # If true, the avatar would be rotated with the cursor. + rotated: false + +# Table Of Contents in the Sidebar +toc: + enable: true + + # Automatically add list number to toc. + number: true + + # If true, all words will placed on next lines if header width longer then sidebar width. + wrap: false + +# Creative Commons 4.0 International License. +# http://creativecommons.org/ +# Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero +#creative_commons: by-nc-sa +#creative_commons: + +sidebar: + # Sidebar Position, available value: left | right (only for Pisces | Gemini). + position: left + #position: right + + # Sidebar Display, available value (only for Muse | Mist): + # - post expand on posts automatically. Default. + # - always expand for all pages automatically + # - hide expand only when click on the sidebar toggle icon. + # - remove Totally remove sidebar including sidebar toggle. + display: post + #display: always + #display: hide + #display: remove + + # Sidebar offset from top menubar in pixels (only for Pisces | Gemini). + offset: 12 + + # Back to top in sidebar (only for Pisces | Gemini). + b2t: false + + # Scroll percent label in b2t button. + scrollpercent: false + + # Enable sidebar on narrow view (only for Muse | Mist). + onmobile: false + + +# --------------------------------------------------------------- +# Post Settings +# --------------------------------------------------------------- + +# Automatically scroll page to section which is under mark. +scroll_to_more: false + +# Automatically saving scroll position on each post/page in cookies. +save_scroll: false + +# Automatically excerpt description in homepage as preamble text. +excerpt_description: true + +# Automatically Excerpt. Not recommend. +# Please use in the post to control excerpt accurately. +auto_excerpt: + enable: true + length: 150 + +# Post meta display settings +post_meta: + item_text: true + created_at: true + updated_at: + enabled: false + # If true, show updated date label only if `updated date` different from 'created date' (post edited in another day than was created). + # And if post will edited in same day as created, edited time will show in popup title under created time label. + # If false show anyway, but if post edited in same day, show only edited time. + another_day: true + categories: true + +# Post wordcount display settings +# Dependencies: https://github.com/theme-next/hexo-symbols-count-time +symbols_count_time: + separated_meta: true + item_text_post: true + item_text_total: false + awl: 2 + wpm: 275 + +codeblock: + # Manual define the border radius in codeblock + # Leave it empty for the default 1 + border_radius: + # Add copy button on codeblock + copy_button: false + +# Wechat Subscriber +#wechat_subscriber: + #enabled: true + #qcode: /path/to/your/wechatqcode ex. /uploads/wechat-qcode.jpg + #description: ex. subscribe to my blog by scanning my public wechat account + +# Reward +#reward_comment: Donate comment here +wechatpay: https://res.cloudinary.com/incoder/image/upload/v1525515979/wechatpay.png +alipay: https://res.cloudinary.com/incoder/image/upload/v1525515979/alipay.png +#bitcoin: /images/bitcoin.png + +# Related popular posts +# Dependencies: https://github.com/tea3/hexo-related-popular-posts +related_posts: + enable: false + title: # custom header, leave empty to use the default one + display_in_home: false + params: + maxCount: 5 + #PPMixingRate: 0.0 + #isDate: false + #isImage: false + #isExcerpt: false + +# Declare license on posts +post_copyright: + enable: true + license: CC BY-NC-SA 4.0 + +# Post edit +# Dependencies: https://github.com/hexojs/hexo-deployer-git +post_edit: + enable: false + url: https://github.com/theme-next/theme-next.org/_posts/tree/master/ # Link for view source. +# url: https://github.com/theme-next/theme-next.org/_posts/edit/master/ # Link for fork & edit. + + +# --------------------------------------------------------------- +# Misc Theme Settings +# --------------------------------------------------------------- + +# Reduce padding / margin indents on devices with narrow width. +mobile_layout_economy: false + +# Android Chrome header panel color ($brand-bg / $headband-bg => $black-deep). +android_chrome_color: "#222" + +# Custom Logo. +# !!Only available for Default Scheme currently. +# Options: +# enabled: [true/false] - Replace with specific image +# image: url-of-image - Images's url +custom_logo: + enabled: true + image: https://res.cloudinary.com/incoder/image/upload/v1525515979/favicon-32x32.png + +# Code Highlight theme +# Available values: normal | night | night eighties | night blue | night bright +# https://github.com/chriskempson/tomorrow-theme +highlight_theme: night + +# Enable "cheers" for archive page. +cheers_enabled: true + +# Manual define the max content width +# !!Only available for Gemini Scheme currently +# Leave it empty for the default 75% (suggest not less than 1000px) +#max_content_width: 1000px + +# Manual define the sidebar width +# !!Only available for Gemini Scheme currently +# Leave it empty for the default 240 +sidebar_width: + +# --------------------------------------------------------------- +# Font Settings +# - Find fonts on Google Fonts (https://www.google.com/fonts) +# - All fonts set here will have the following styles: +# light, light italic, normal, normal italic, bold, bold italic +# - Be aware that setting too much fonts will cause site running slowly +# - Introduce in 5.0.1 +# --------------------------------------------------------------- +# CAUTION! Safari Version 10.1.2 bug: https://github.com/iissnan/hexo-theme-next/issues/1844 +# To avoid space between header and sidebar in Pisces / Gemini themes recommended to use Web Safe fonts for `global` (and `logo`): +# Arial | Tahoma | Helvetica | Times New Roman | Courier New | Verdana | Georgia | Palatino | Garamond | Comic Sans MS | Trebuchet MS +# --------------------------------------------------------------- +font: + enable: false + + # Uri of fonts host. E.g. //fonts.googleapis.com (Default). + host: + + # Font options: + # `external: true` will load this font family from `host` above. + # `family: Times New Roman`. Without any quotes. + # `size: xx`. Use `px` as unit. + + # Global font settings used for all elements in . + global: + external: true + family: Lato + size: + + # Font settings for Headlines (H1, H2, H3, H4, H5, H6). + # Fallback to `global` font settings. + headings: + external: true + family: + size: + + # Font settings for posts. + # Fallback to `global` font settings. + posts: + external: true + family: + + # Font settings for Logo. + # Fallback to `global` font settings. + logo: + external: true + family: + size: + + # Font settings for and code blocks. + codes: + external: true + family: + size: + + +# --------------------------------------------------------------- +# Third Party Services Settings +# --------------------------------------------------------------- + +# Math Equations Render Support +math: + enable: false + + # Default(true) will load mathjax/katex script on demand + # That is it only render those page who has 'mathjax: true' in Front Matter. + # If you set it to false, it will load mathjax/katex srcipt EVERY PAGE. + per_page: true + + engine: mathjax + #engine: katex + + # hexo-rendering-pandoc (or hexo-renderer-kramed) needed to full MathJax support. + mathjax: + # Use 2.7.1 as default, jsdelivr as default CDN, works everywhere even in China + cdn: //cdn.jsdelivr.net/npm/mathjax@2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML + # For newMathJax CDN (cdnjs.cloudflare.com) with fallback to oldMathJax (cdn.mathjax.org). + #cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML + # For direct link to MathJax.js with CloudFlare CDN (cdnjs.cloudflare.com). + #cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML + # For automatic detect latest version link to MathJax.js and get from Bootcss. + #cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML + + # hexo-renderer-markdown-it-plus (or hexo-renderer-markdown-it with markdown-it-katex plugin) + # needed to full Katex support. + katex: + # Use 0.7.1 as default, jsdelivr as default CDN, works everywhere even in China + cdn: //cdn.jsdelivr.net/npm/katex@0.7.1/dist/katex.min.css + # CDNJS, provided by cloudflare, maybe the best CDN, but not works in China + #cdn: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css + # Bootcss, works great in China, but not so well in other region + #cdn: //cdn.bootcss.com/KaTeX/0.7.1/katex.min.css + +# Han Support +# Dependencies: https://github.com/theme-next/theme-next-han +han: false + +# Pangu Support +# Dependencies: https://github.com/theme-next/theme-next-pangu +# For more information: https://github.com/vinta/pangu.js +pangu: false + +# Swiftype Search API Key +#swiftype_key: + +# Baidu Analytics ID +#baidu_analytics: + +# Disqus +disqus: + enable: false + shortname: + count: true + lazyload: false + +# Hypercomments +#hypercomments_id: + +# changyan +changyan: + enable: false + appid: + appkey: + + +# Valine. +# You can get your appid and appkey from https://leancloud.cn +# more info please open https://valine.js.org +valine: + enable: false + appid: # your leancloud application appid + appkey: # your leancloud application appkey + notify: false # mail notifier , https://github.com/xCss/Valine/wiki + verify: false # Verification code + placeholder: Just go go # comment box placeholder + avatar: mm # gravatar style + guest_info: nick,mail,link # custom comment header + pageSize: 10 # pagination size + + +# Support for youyan comments system. +# You can get your uid from http://www.uyan.cc +#youyan_uid: your uid + +# Support for LiveRe comments system. +# You can get your uid from https://livere.com/insight/myCode (General web site) +#livere_uid: your uid + +# Gitment +# Introduction: https://imsun.net/posts/gitment-introduction/ +gitment: + enable: true + mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway + count: true # Show comments count in post meta area + lazy: false # Comments lazy loading with a button + cleanly: false # Hide 'Powered by ...' on footer, and more + language: # Force language, or auto switch by theme + github_user: BladeCode # MUST HAVE, Your Github Username + github_repo: BladeCode.github.io # MUST HAVE, The name of the repo you use to store Gitment comments + client_id: 2e3028f6ae11f92b2c38 # MUST HAVE, Github client id for the Gitment + client_secret: 97aa93b198112873842f608c0feb14c3740ac491 # EITHER this or proxy_gateway, Github access secret token for the Gitment + proxy_gateway: # Address of api proxy, See: https://github.com/aimingoo/intersect + redirect_protocol: # Protocol of redirect_uri with force_redirect_protocol when mint enabled + +# Baidu Share +# Available value: +# button | slide +# Warning: Baidu Share does not support https. +#baidushare: +## type: button + +# Share +# This plugin is more useful in China, make sure you known how to use it. +# And you can find the use guide at official webiste: http://www.jiathis.com/. +# Warning: JiaThis does not support https. +#jiathis: + ##uid: Get this uid from http://www.jiathis.com/ + +#add_this_id: + +# NeedMoreShare2 +# Dependencies: https://github.com/theme-next/theme-next-needmoreshare2 +# See: https://github.com/revir/need-more-share2 +# Also see: https://github.com/DzmVasileusky/needShareButton +# iconStyle: default | box +# boxForm: horizontal | vertical +# position: top / middle / bottom + Left / Center / Right +# networks: Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Reddit, +# Delicious,StumbleUpon,Pinterest,Facebook,GooglePlus,Slashdot, +# Technorati,Posterous,Tumblr,GoogleBookmarks,Newsvine, +# Evernote,Friendfeed,Vkontakte,Odnoklassniki,Mailru +needmoreshare2: + enable: false + postbottom: + enable: false + options: + iconStyle: box + boxForm: horizontal + position: bottomCenter + networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook + float: + enable: false + options: + iconStyle: box + boxForm: horizontal + position: middleRight + networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook + +# Google Webmaster tools verification setting +# See: https://www.google.com/webmasters/ +#google_site_verification: + +# Google Analytics +# google_analytics: UA-100235665-1 + +# Bing Webmaster tools verification setting +# See: https://www.bing.com/webmaster/ +#bing_site_verification: + +# Yandex Webmaster tools verification setting +# See: https://webmaster.yandex.ru/ +#yandex_site_verification: + +# CNZZ count +#cnzz_siteid: + +# Application Insights +# See https://azure.microsoft.com/en-us/services/application-insights/ +# application_insights: + +# Post widgets & FB/VK comments settings. +# --------------------------------------------------------------- +# Facebook SDK Support. +# https://github.com/iissnan/hexo-theme-next/pull/410 +facebook_sdk: + enable: false + app_id: # + fb_admin: # + like_button: #true + webmaster: #true + +# Facebook comments plugin +# This plugin depends on Facebook SDK. +# If facebook_sdk.enable is false, Facebook comments plugin is unavailable. +facebook_comments_plugin: + enable: false + num_of_posts: 10 # min posts num is 1 + width: 100% # default width is 550px + scheme: light # default scheme is light (light or dark) + +# VKontakte API Support. +# To get your AppID visit https://vk.com/editapp?act=create +vkontakte_api: + enable: false + app_id: # + like: true + comments: true + num_of_posts: 10 + +# Star rating support to each article. +# To get your ID visit https://widgetpack.com +rating: + enable: false + id: # + color: fc6423 +# --------------------------------------------------------------- + +# Show number of visitors to each article. +# You can visit https://leancloud.cn get AppID and AppKey. +leancloud_visitors: + enable: true + app_id: 3ShrIGfQL4TLamd48UtbdDEK-gzGzoHsz + app_key: cW8VJrB2yJiIBLtYA0KdE8vW + # Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security + # If you don't care about security in lc counter and just want to use it directly + # (without hexo-leancloud-counter-security plugin), set the `security` to `false`. + security: false + betterPerformance: false + +# Another tool to show number of visitors to each article. +# visit https://console.firebase.google.com/u/0/ to get apiKey and projectId +# visit https://firebase.google.com/docs/firestore/ to get more information about firestore +firestore: + enable: false + collection: articles #required, a string collection name to access firestore database + apiKey: #required + projectId: #required + bluebird: false #enable this if you want to include bluebird 3.5.1(core version) Promise polyfill + +# Show Views/Visitors of the website/page with busuanzi. +# Get more information on http://ibruce.info/2015/04/04/busuanzi/ +busuanzi_count: + enable: false + total_visitors: true + total_visitors_icon: user + total_views: true + total_views_icon: eye + post_views: true + post_views_icon: eye + + +# Tencent analytics ID +# tencent_analytics: + +# Tencent MTA ID +# tencent_mta: + + +# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO +baidu_push: false + +# Google Calendar +# Share your recent schedule to others via calendar page +# +# API Documentation: +# https://developers.google.com/google-apps/calendar/v3/reference/events/list +calendar: + enable: false + calendar_id: + api_key: + orderBy: startTime + offsetMax: 24 + offsetMin: 4 + timeZone: + showDeleted: false + singleEvents: true + maxResults: 250 + +# Algolia Search +# See: https://github.com/theme-next/hexo-theme-next/blob/master/docs/ALGOLIA-SEARCH.md +# Dependencies: https://github.com/theme-next/theme-next-algolia-instant-search +algolia_search: + enable: false + hits: + per_page: 10 + labels: + input_placeholder: Search for Posts + hits_empty: "We didn't find any results for the search: ${query}" + hits_stats: "${hits} results found in ${time} ms" + +# Local search +# Dependencies: https://github.com/theme-next/hexo-generator-searchdb +local_search: + enable: true + # if auto, trigger search by changing input + # if manual, trigger search by pressing enter key or search button + trigger: auto + # show top n results per article, show all results by setting to -1 + top_n_per_article: 1 + # unescape html strings to the readable one + unescape: false + +# Bookmark Support +# Dependencies: https://github.com/theme-next/theme-next-bookmark +bookmark: + enable: false + # if auto + # - save the reading position when closing the page + # - or clicking the bookmark-icon + # if manual, only save it by clicking the bookmark-icon + save: auto + + +# --------------------------------------------------------------- +# Tags Settings +# --------------------------------------------------------------- + +# External URL with BASE64 encrypt & decrypt. +# Usage: {% exturl text url "title" %} +# Alias: {% extlink text url "title" %} +exturl: true + +# Note tag (bs-callout). +note: + # Note tag style values: + # - simple bs-callout old alert style. Default. + # - modern bs-callout new (v2-v3) alert style. + # - flat flat callout style with background, like on Mozilla or StackOverflow. + # - disabled disable all CSS styles import of note tag. + style: simple + icons: false + border_radius: 3 + # Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6). + # Offset also applied to label tag variables. This option can work with disabled note tag. + light_bg_offset: 0 + +# Label tag. +label: true + +# Tabs tag. +tabs: + enable: true + transition: + tabs: false + labels: true + border_radius: 0 + +# Reading progress bar +# Dependencies: https://github.com/theme-next/theme-next-reading-progress +reading_progress: + enable: true + color: "#37c6c0" + height: 2px + + +#! --------------------------------------------------------------- +#! DO NOT EDIT THE FOLLOWING SETTINGS +#! UNLESS YOU KNOW WHAT YOU ARE DOING +#! --------------------------------------------------------------- + +# Use velocity to animate everything. +motion: + enable: true + async: true + transition: + # Transition variants: + # fadeIn | fadeOut | flipXIn | flipXOut | flipYIn | flipYOut | flipBounceXIn | flipBounceXOut | flipBounceYIn | flipBounceYOut + # swoopIn | swoopOut | whirlIn | whirlOut | shrinkIn | shrinkOut | expandIn | expandOut + # bounceIn | bounceOut | bounceUpIn | bounceUpOut | bounceDownIn | bounceDownOut | bounceLeftIn | bounceLeftOut | bounceRightIn | bounceRightOut + # slideUpIn | slideUpOut | slideDownIn | slideDownOut | slideLeftIn | slideLeftOut | slideRightIn | slideRightOut + # slideUpBigIn | slideUpBigOut | slideDownBigIn | slideDownBigOut | slideLeftBigIn | slideLeftBigOut | slideRightBigIn | slideRightBigOut + # perspectiveUpIn | perspectiveUpOut | perspectiveDownIn | perspectiveDownOut | perspectiveLeftIn | perspectiveLeftOut | perspectiveRightIn | perspectiveRightOut + post_block: fadeIn + post_header: slideDownIn + post_body: slideDownIn + coll_header: slideLeftIn + # Only for Pisces | Gemini. + sidebar: slideUpIn + +# Fancybox. There is support for old version 2 and new version 3. +# Please, choose only any one variant, do not need to install both. +# For install 2.x: https://github.com/theme-next/theme-next-fancybox +# For install 3.x: https://github.com/theme-next/theme-next-fancybox3 +fancybox: true + +# Added switch option for separated repo in 6.0.0. +# Dependencies: https://github.com/theme-next/theme-next-fastclick +fastclick: false + +# Added switch option for separated repo in 6.0.0. +# Dependencies: https://github.com/theme-next/theme-next-jquery-lazyload +lazyload: false + +# Progress bar in the top during page loading. +# Dependencies: https://github.com/theme-next/theme-next-pace +pace: false +# Themes list: +#pace-theme-big-counter +#pace-theme-bounce +#pace-theme-barber-shop +#pace-theme-center-atom +#pace-theme-center-circle +#pace-theme-center-radar +#pace-theme-center-simple +#pace-theme-corner-indicator +#pace-theme-fill-left +#pace-theme-flash +#pace-theme-loading-bar +#pace-theme-mac-osx +#pace-theme-minimal +# For example +# pace_theme: pace-theme-center-simple +pace_theme: pace-theme-minimal + +# Canvas-nest +# Dependencies: https://github.com/theme-next/theme-next-canvas-nest +canvas_nest: false + +# JavaScript 3D library. +# Dependencies: https://github.com/theme-next/theme-next-three +# three_waves +three_waves: false +# canvas_lines +canvas_lines: false +# canvas_sphere +canvas_sphere: false + +# Only fit scheme Pisces +# Dependencies: https://github.com/theme-next/theme-next-canvas-ribbon +# Canvas-ribbon +# size: The width of the ribbon. +# alpha: The transparency of the ribbon. +# zIndex: The display level of the ribbon. +canvas_ribbon: + enable: false + size: 300 + alpha: 0.6 + zIndex: -1 + +# Script Vendors. +# Set a CDN address for the vendor you want to customize. +# For example +# jquery: https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js +# Be aware that you should use the same version as internal ones to avoid potential problems. +# Please use the https protocol of CDN files when you enable https on your site. +vendors: + # Internal path prefix. Please do not edit it. + _internal: lib + + # Internal version: 2.1.3 + jquery: + + # Internal version: 2.1.5 + # See: http://fancyapps.com/fancybox/ + fancybox: + fancybox_css: + + # Internal version: 1.0.6 + # See: https://github.com/ftlabs/fastclick + fastclick: + + # Internal version: 1.9.7 + # See: https://github.com/tuupola/jquery_lazyload + lazyload: + + # Internal version: 1.2.1 + # See: http://VelocityJS.org + velocity: + + # Internal version: 1.2.1 + # See: http://VelocityJS.org + velocity_ui: + + # Internal version: 0.7.9 + # See: https://faisalman.github.io/ua-parser-js/ + ua_parser: + + # Internal version: 4.6.2 + # See: http://fontawesome.io/ + fontawesome: + + # Internal version: 1 + # https://www.algolia.com + algolia_instant_js: + algolia_instant_css: + + # Internal version: 1.0.2 + # See: https://github.com/HubSpot/pace + # Or use direct links below: + # pace: //cdn.bootcss.com/pace/1.0.2/pace.min.js + # pace_css: //cdn.bootcss.com/pace/1.0.2/themes/blue/pace-theme-flash.min.css + pace: + pace_css: + + # Internal version: 1.0.0 + # https://github.com/hustcc/canvas-nest.js + canvas_nest: + + # three + three: + + # three_waves + # https://github.com/jjandxa/three_waves + three_waves: + + # three_waves + # https://github.com/jjandxa/canvas_lines + canvas_lines: + + # three_waves + # https://github.com/jjandxa/canvas_sphere + canvas_sphere: + + # Internal version: 1.0.0 + # https://github.com/zproo/canvas-ribbon + canvas_ribbon: + + # Internal version: 3.3.0 + # https://github.com/ethantw/Han + han: + + # Internal version: 3.3.0 + # https://github.com/vinta/pangu.js + pangu: + + # needMoreShare2 + # https://github.com/revir/need-more-share2 + needmoreshare2_js: + needmoreshare2_css: + + # bookmark + # Internal version: 1.0.0 + # https://github.com/theme-next/theme-next-bookmark + bookmark: + + # reading_progress + # Internal version: 1.0 + # https://github.com/theme-next/theme-next-reading-progress + # Example: https://cdn.jsdelivr.net/gh/theme-next/theme-next-reading-progress@1.1/reading_progress.min.js + reading_progress: + + # valine comment + # Example: https://cdn.jsdelivr.net/npm/valine@1.1.8/dist/Valine.min.js + valine: + + +# Assets +css: css +js: js +images: images \ No newline at end of file diff --git a/source/_posts/git-account.md b/source/_posts/git-account.md new file mode 100644 index 000000000..5da330130 --- /dev/null +++ b/source/_posts/git-account.md @@ -0,0 +1,70 @@ +--- +title: Git 多账号 +date: 2018-10-06 10:54:50 +categories: Git +tag: [git account] +--- + +以前,git的账号只用来在Github上操作,随着积累Git管理的项目不仅仅只来自Github,还有一些其它Git项目托管的平台,例如:[Bitbucket](https://bitbucket.org),[Coding](https://coding.net),[Gitee](https://gitee.com),[Gitlib](https://gitlab.com),以及公司内Git仓库 + +不同的托管平台有着不同的Git账号,无法用一个账号来管理其它的仓库,而且由于不同的托管平台账号不同,因此需要添加不同账号的公钥,这样我们再能在对应平台用对应的账号进行操作 + +## 环境 +* Windows 10 x64 +* Git version 2.16.0 + +>这里Git的安装不在赘述 + +## 生成对应账号的密钥 +```sh +# 进入到`your_pc_name/.ssh`, +cd .ssh +# Jerry.x@outlook.com 是我的Github的邮箱,这里需要替换成自己的邮箱 +ssh-keygen -t rsa -C "Jerry.x@outlook.com" +# 命名文件名称或指定文件存放路径等 +# 其它可以回车键进行确认,进行下一步 +``` +![git-account](https://res.cloudinary.com/incoder/image/upload/v1538887180/blog/git-account.png) + +>完成后,将会生成`id_rsa_company.pub`(存放公钥)与`id_rsa_company`(存放私钥)两个文件 + +## 添加公钥到托管平台 +* 在`.ssh`路径下,用文本编辑器打开`id_rsa_company.pub`文件,复制内容 +* 在托管平台上添加ssh public key +以下以GitHub添加为例,其它平台类似 +![git-add-key](https://res.cloudinary.com/incoder/image/upload/v1538887180/blog/git-add-key.png) + +## 添加配置文件 +在`.ssh`路径下,创建`config`文件,无文件后缀名,如下示例 + +```sh +# 配置github.com +Host github.com + HostName github.com + IdentityFile C:\\Users\\Jerry\\.ssh\\id_rsa + PreferredAuthentications publickey + User BladeCode + +# 配置 company.domain.com +Host company.domain.com + HostName company.domain.com + IdentityFile C:\\Users\\Jerry\\.ssh\\id_rsa_company + PreferredAuthentications publickey + User Jerry xu +``` + +* `Host`:的名字可以取为自己喜欢的名字 +* `HostName`:这个是真实的域名地址 +例如:https://github.com/BladeCode/BladeCode.github.io.git,红色标注字段 +* `IdentityFile`:这里是id_rsa的地址 +* `PreferredAuthentications`:配置登录时用什么权限认证 +可设为publickey,password publickey,keyboard-interactive等 +* `User`:配置使用用户名 + +## 测试 +```sh +ssh -T git@github.com +``` +![git-test](https://res.cloudinary.com/incoder/image/upload/v1538887180/blog/git-test.png) + +>git@github.com,github.com就是上一步中`config`文件中配置的`HostName`字段内容 \ No newline at end of file diff --git a/source/_posts/git-bash.md b/source/_posts/git-bash.md new file mode 100644 index 000000000..c9534216a --- /dev/null +++ b/source/_posts/git-bash.md @@ -0,0 +1,107 @@ +--- +title: Git 常用命令 +date: 2018-10-07 12:43:50 +categories: Git +tag: [git bash] +--- + +记录 Git 日常操作常用命令 + +## git config +Git级别:system() < global(当前用户) < local(当前仓库) +* 新增或修改 +```sh +git config --global user.name xxxxx +git config --global user.email xxx@xxxx.com +``` +* 删除用品配置信息 +```sh +# 如果当前只有一个用户,就不用加入xxxx +git config --global --unset user.name xxxx +``` + +## git clone +* clone +```sh +git clone url +``` +* clone 指定分支 +```sh +git clone -b branch_name url +``` +* clone 指定tag +```sh +# clone +git clone url +# checkout tag +git checkout tag_name +``` +* clone 指定commit +```sh +# 查看git commit 历史的 +git log +# 指定 commit SHA +git clone commit_sha_value +``` + +## git commit +```sh +git commit -m "注释" +``` + +## git branch +* 创建分支 +```sh +# 创建分支 +git branch branch_name +# 创建并切换到新分支 +git checkout -b branch_name +``` +* 切换分支 +```sh +git checkout branch_name +``` +* 删除分支 +```sh +# 删除本地分支 +git branch -d branch_name +# 删除远程指定分支 +git push origin --delete branch_name +``` +* 重命名分支 +```sh +git branch -m old_branch_name new_branch_name +``` +* 查看分支 +```sh +# 查看本地所有分支 +git branch +# 查看远程所有分支 +git branch -r +# 查看本地和远程所有分支 +git branch -a +``` + +## git tag +* 新增tag +```sh +git tag -a tag_name -m "注释" +``` +* 查看tag +```sh +git tag -l +``` +* 删除tag +```sh +# 删除本地tag +git tag -d tag_name +# 删除远程指定tag +git push origin --delete tag tag_name +``` +## git help +更多命令 +```sh +git --help +``` +## 附录 +* [Git Docs](https://git-scm.com/docs) diff --git a/source/_posts/git-sub.md b/source/_posts/git-sub.md new file mode 100644 index 000000000..e5e6d08eb --- /dev/null +++ b/source/_posts/git-sub.md @@ -0,0 +1,211 @@ +--- +title: Git 子仓库管理 +date: 2018-05-17 10:30:50 +categories: Git +tag: [git subtree, git submodule] +--- + +在使用NexT作为Hexo博客的主题时,不能 **友好** 的支持其主题的更新,以及 **多设备** 之间的主题同步。 +按照官方提供的导入主题操作指引 +```bash +$ cd hexo +$ git clone https://github.com/theme-next/hexo-theme-next themes/next +``` +发现commit并push到GitHub的远程服务器上,发现`themes/next`路径下并不能打开和查看该路径下的文件,原因是NexT是当前项目的一个子仓库(项目),在Github上对于之仓库项目的引用,推荐使用`git subtree`命令来进行对子仓库的管理,不推荐直接拷贝需要子仓库的代码到自己的项目中 + +原因是我是使用Travis CI来部署自己的项目,具体的[构建脚本和介绍](https://incoder.org/2018/05/02/hexo-iterative)请看,下面分别使用 `git submodule`、`git subtree`的方式进行NexT主题的管理 + +## git submodule 与 git subtree +* `git submodule`、`git subtree`都可以实现一个仓库作为其他仓库的子仓库的管理 +* `git submodule`:是Git官方以前的推荐方案 +* `git subtree`:Git [1.5.2](https://lwn.net/Articles/235109) 开始,Git 新增并推荐使用这个功能来管理子项目 +* `git subtree`与`git submodule`不同,它不增加任何像`.gitmodule`这样的新的元数据文件 +* `git subtree`对于项目中的其他成员透明,意味着可以不知道`git subtree`的存在 + +## git submodule 常用操作 +[Git Submodule](https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E5%AD%90%E6%A8%A1%E5%9D%97)功能官方操作指引 + +### add 一个submodule +1. Fork Repository +[hexo-theme-next](https://github.com/theme-next/hexo-theme-next)项目右上角`Fork`按钮即可 +2. Clone Repository +```bash +git clone git@github.com:RootCluster/hexo-theme-test.git +``` +3. Add Submodule +```bash +# 进入项目 +cd hexo-theme-test +# 注册next项目是一个submodule,并把数据拷贝到`themes/next`路径 +git submodule add git@github.com:RootCluster/hexo-theme-next.git themes/next +``` +4. status +```bash +# 当前submodule已被注册并指向了某个commit +git submodule status + 1f5643061ec5257269673bd6159403c24015c53d themes/next (v6.3.0) +``` + + ```bash + # 查看在父仓库中有哪些变化被注册 + git status + On branch submodule + Changes to be committed: + (use "git reset HEAD ..." to unstage) + + new file: .gitmodules + new file: themes/next + ``` + 有2个文件被修改过:`.gitmodules`,`themes/next`,当在父仓库时,Git不会跟踪submodule中的文件,Git只把它当成一个单一的文件 + * `.gitmodules`:存有submodule的信息 + * `themes/next`:submodule它自己 + +5. commint +```bash +# 推送到远程submodule分支 +git commit -am "add next submodule" +[submodule a5a612b] add next submodule + 2 files changed, 4 insertions(+) + create mode 100644 .gitmodules + create mode 160000 themes/next +``` +6. push +```bash +git push origin submodule +Counting objects: 4, done. +Delta compression using up to 4 threads. +Compressing objects: 100% (4/4), done. +Writing objects: 100% (4/4), 451 bytes | 451.00 KiB/s, done. +Total 4 (delta 1), reused 0 (delta 0) +remote: Resolving deltas: 100% (1/1), completed with 1 local object. +To github.com:RootCluster/hexo-themes-test.git + 71879a8..a5a612b submodule -> submodule +``` +查看Github上的仓库,发现父仓库里有一个指向submodule的链接,表示你已经成功添加了一个submodule + +### clone 带 submodule的项目 +新路径下,clone项目,submodule分支 +```bash +# clone项目 +git clone -b submodule git@github.com:RootCluster/hexo-themes-test.git +# 进入项目路径 +cd hexo-themes-test/ +# 项目注册submodule +git submodule init +# clone submodule代码 +git submodule update + +``` + +### update 带 submodule的项目 +只要在submodule路径下,所有的常规Git操作,如`push`,`pull`,`reset`,`status`等,都可以正常工作,如果要保证submodule和远程仓库保存同步,在submodule路径下运行`git pull` + +* 如果你得到一个错误信息, 说你不在任何分支之上, 只要运行`git checkout master`就可修复 +* 如果你在`pull`后 `submodule` 有一些更新, 父仓库会告诉你有一些变动需要 `commit` 了. `submodule`自身指向一个指定的 `commit`, 并且如果这个 `commit` 改变了, 父仓库会得知这个改变. 如果你的 `submodule` 需要在一个指定 `commit` 上工作, 可用`git reset`来设置 + +例如:我需要把NexT的版本改变到上一个Tag 6.2.0 (目前是6.3.0) +> git reset --hard (commit hash) + +```bash +# 进入项目路径 +cd hexo-themes-test/ +# 重新指向submodule关联的commit记录 +git reset --hard 206d463 +# 回到父目录 +cd .. +# commit本次的修改 +git commit -am "set next version to 6.2.0" +``` + +{% note info %} 推送到远程仓库后,`submodule` 会和指定的`commit` 关联起来。如果你和别人一起工作在同一个项目,别人也可以在`submodule`下`pull`并且`commit`,因此改变了`submodule`的`commit`指向,这个问题,可以通过`git reset` 来解决{% endnote %} + +### remove 项目中的 submodule +* 项目的根目录下(不是 submodule 的目录),编辑 .gitmodules 文件,删除submodule配置 +```bash +[submodule "themes/next"] + path = themes/next + url = https://github.com/RootCluster/hexo-theme-next.git +``` +* 项目根目录下,编辑`.git`文件夹下`config`文件,删除submodule配置 +```bash +[submodule "themes/next"] + url = https://github.com/RootCluster/hexo-theme-next.git +``` +* 清除submodule缓存 +```bash +git rm --cached themes/next +``` + +## git subtree 常用操作(重点) + +### add一个subtree +* 在父仓库中新增子仓库 +```bash +# 添加子仓库 +git subtree add --prefix=themes/next https://github.com/RootCluster/hexo-theme-next.git master --squash +git fetch https://github.com/RootCluster/hexo-theme-next.git master +warning: no common commits +remote: Counting objects: 3407, done. +remote: Total 3407 (delta 0), reused 0 (delta 0), pack-reused 3406 +Receiving objects: 100% (3407/3407), 1.21 MiB | 36.00 KiB/s, done. +Resolving deltas: 100% (2192/2192), done. +From https://github.com/RootCluster/hexo-theme-next + * branch master -> FETCH_HEAD +Added dir 'themes/next' +``` +>`--squash`参数表示不拉取历史信息,而只生成一条commit信息 + +* 查看项目状态 +```bash +# 查看项目状态 +git status +On branch subtree +Your branch is ahead of 'origin/subtree' by 2 commits. + (use "git push" to publish your local commits) + +nothing to commit, working tree clean +``` + +* 推送更改到远程仓库 +```bash +git push origin subtree +Counting objects: 381, done. +Delta compression using up to 4 threads. +Compressing objects: 100% (334/334), done. +Writing objects: 100% (381/381), 650.26 KiB | 34.22 MiB/s, done. +Total 381 (delta 23), reused 225 (delta 19) +remote: Resolving deltas: 100% (23/23), completed with 1 local object. +To https://github.com/RootCluster/hexo-themes-test.git + 8ed2e2e..405af42 subtree -> subtree +``` + +### pull 子仓库更新 +```bash +# 更新子仓库 +git subtree pull --prefix=themes/next https://github.com/RootCluster/hexo-theme-next.git master --squash +From https://github.com/RootCluster/hexo-theme-next + * branch master -> FETCH_HEAD +Subtree is already at commit 1f5643061ec5257269673bd6159403c24015c53d. +``` + +### push 子仓库修改 +在引用子仓库的项目中修改了子仓库的相关代码,推送修改到源仓库 +* commit 修改记录 +* push 到源仓库 +```bash +# 推送子仓库修改到源仓库master分支 +git subtree push --prefix=themes/next https://github.com/RootCluster/hexo-theme-next.git master +``` + +### subtree 常用命令 +```bash +git subtree add --prefix= +git subtree add --prefix= +git subtree pull --prefix= +git subtree push --prefix= +git subtree merge --prefix= +git subtree split --prefix= [OPTIONS] [] +``` +> 学习参考附录: +* [如何使用 Git Submodule](http://linlexus.com/git-submodule-usage) +* [git subtree教程](https://www.jianshu.com/p/d42d330bfead) \ No newline at end of file diff --git a/source/_posts/gitignore.md b/source/_posts/gitignore.md new file mode 100644 index 000000000..ebd190039 --- /dev/null +++ b/source/_posts/gitignore.md @@ -0,0 +1,44 @@ +--- +title: .gitignore 基础知识 +date: 2018-04-13 00:30:50 +categories: Git +tag: ignore +--- + +.gitignore顾名思义是Git中用来管理所需要忽略或者说不用纳入版本控制文件 + +## 基本配置语法 +1. “#“:表示注释 +2. “/“:表示目录 +3. “*“:表示通配符,用来通配多个字符 +4. “?“:表示通配单个字符 +5. “[]“:表示包含单个字符的匹配列表 +6. “!“:表示不忽略匹配到的文件或者目录 + +>注意:Git对.gitignore配置文件是从上往下进行规则匹配,这也意味如果:前(limit)>后(limit),则后面的规则不会被执行 + +## 全局与局部 +.gitignore分为: **全局** ignore,**局部** ignore + +### 全局ignore设置 +* 在用户账户文件夹(C:\Users\<'YourName'>)路径下新建一个命名为`.gitignore_global`的文件 +* 使用Git Bash(需要切换路径到C:\Users\<'YourName'>)或者Git CMD命令行工具输入: +``` bash +git config --global core.excludesfile ~/.gitignore_global +``` +* 此时全局ignore已经设置完成,你只需要修改`.gitignore_global`文件内需要忽略的文件类型就可以全局控制忽略不需要纳入版本控制的文件或文件夹 +* 不难发现,其实是往 `.gitconfig`中加入如下内容来指名Git忽略不纳入版本控制的文件,当然如果你不想用命令行完成全局设置,你也可以直接在`.gitconfig`文件中加入`[core] excludesfile= ~/.gitignore_global`内容即可 + +### 局部ignore设置 +* 只需要在Git控制版本控制项目的根目录中加入.gitignore文件,在.gitignore文件中写明忽略不纳入版本控制的文件即可 + +## 参考示例 + +>你可以查看参考[Github](https://github.com/github/gitignore)官方所写好的示例 + +## 插件.ignore +支持Android Studio,JetBrains系列 +安装方法 + +* `Settings` > `Plugs` > `Browse repositories` > `.ignore` > `Install plugin` +* 里面有已经写好的模板,只需适当修改 \ No newline at end of file diff --git a/source/_posts/gitlab1.md b/source/_posts/gitlab1.md new file mode 100644 index 000000000..c57b9a057 --- /dev/null +++ b/source/_posts/gitlab1.md @@ -0,0 +1,142 @@ +--- +title: Gitlab 应用搭建 +date: 2018-04-24 21:11:10 +categories: Git +tag: Gitlab +--- + +我司团队之前一直使用SVN来进行代码托管,主要问题 +1. 每次来个新人都需要找对应的[SVN](https://tortoisesvn.net/index.zh.html)管理员进行授权分配指定的仓库操作权限,有时候需要多个项目切换,还得再次提出进行仓库的指定 +2. SVN都是以中文命名,这其实没啥,但是在[eclipse](https://eclipse.org) 以及[IDEA](https://www.jetbrains.com/idea/?fromMenu) ,[Xcode](https://developer.apple.com/xcode)等开发工具,链接地址都会把中文字进行编码,造成路径非常的长,强迫症的我这怎么忍得了 +3. 产品相关的,设计相关的啥也都放在SVN里面,搞得SVN里面鱼龙混杂 + +因此在我提出及建议下,部门经理同意了对代码的管理进行隔离方便有效的对代码的授权监管,并同时制定代码的相关规范和服务的自动化部署等,提高团队的开发效率和代码质量。 + +本节主要介绍Gitlab的环境搭建和基础的功能配置 + +目的: +1. 搭建Gitlab服务 +2. 和公司AD域账号关联,用域账号直接登录Gitlab +3. 挂载Gitlab 仓库到指定存储位置 + +## Gitlab安装 + +### 环境 +* OS:CentOS 7 +* Gitlab:[Gitlab CE 10.6.4](https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.6.4-ce.0.el7.x86_64.rpm) + +>Gitlab 版本 +* Gitlab Community Edition (CE):社区版,免费,用户自行托管,通过社区提供技术支持 +* Gitlab Enterprise Edition (EE):企业版,付费,用户自行托管,提供附加的功能以及技术支持 +* Gitlab.com:免费的SaaS服务,可以创建共有以及私有的版本库,可以购买额外的技术支持 +* GitHost.io:由Gitlab提供的用户私有的独享服务 + +### Gitlab部署 +1. 系统防火墙中打开HTTP和SSH访问 +```bash +sudo yum install -y curl policycoreutils-python openssh-server +sudo systemctl enable sshd +sudo systemctl start sshd + +sudo firewall-cmd --permanent --add-service=http +sudo systemctl reload firewalld + +``` +2. 安装Postfix发送通知邮件。如果您想使用其他解决方案发送电子邮件,请跳过此步骤并在安装GitLab后配置外部SMTP服务器 +```bash +sudo yum install postfix +sudo systemctl enable postfix +sudo systemctl start postfix + +``` +3. 添加GitLab软件包存储库 +```bash +curl -LJO https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm +``` +4. 安装软件包 +```bash +rpm -i gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm +``` + 完成安装如下日志显示: + + ``` + *. *. + *** *** + ***** ***** + .****** ******* + ******** ******** + ,,,,,,,,,***********,,,,,,,,, + ,,,,,,,,,,,*********,,,,,,,,,,, + .,,,,,,,,,,,*******,,,,,,,,,,,, + ,,,,,,,,,*****,,,,,,,,,. + ,,,,,,,****,,,,,, + .,,,***,,,, + ,*,. + + + + _______ __ __ __ + / ____(_) /_/ / ____ _/ /_ + / / __/ / __/ / / __ \`/ __ \ + / /_/ / / /_/ /___/ /_/ / /_/ / + \____/_/\__/_____/\__,_/_.___/ + + ``` +5. 编译配置文件 +```bash +cd /opt/gitlab/bin +./gitlab-ctr reconfigure +``` +6. 启动服务 +```bash +./gitlab-ctl start +``` + +>* 成功启动服务,默认路径访问:http://localhost:80 +* 默认安装位置 `/opt/gitlab/` +* 配置文件默认路径 `/etc/gitlab/gitlab.rb` +* 默认账号:root,密码:5iveL!fe + +## 常用配置项修改 +以下配置项的修改,完成后**均需要重新编译**文件(配置文件默认路径 `/etc/gitlab/gitlab.rb`),默认,**并重启Gitlab**服务 + +### 访问地址 +修改`external_url`为Gitlab对应机器IP所配置的域名 +![gitlab-url](https://res.cloudinary.com/incoder/image/upload/v1525517587/blog/gitpages-gitlab-url.png) + +### LDAP启用 +修改`host`,`port`,`bind_dn`,`password`,`base`参数即可 +![gitlab-ladp](https://res.cloudinary.com/incoder/image/upload/v1525517612/blog/gitpages-gitlab-ldap.png) + +各参数解释: +* `host` 和 `port` 是 LDAP 服务的主机地址及端口 +* `bind_d`n 和 `password` 是一个管理 LDAP 的 dn 及密码 +* `base` 表示 LDAP 将以该 dn 为 节点,向下查找用户 +* `user_filter` 表示以某种过滤条件筛选用户 +* `attributes` 表示 GitLab 中的字段与 LDAP 中哪些字段可以相互对应,比如可以用 LDAP 中的 uid 来作为 GitLab 用户名 + +编译重启后,查看登录是否已经显示LDAP登录入口 + +![gitlab-ldap-login](https://res.cloudinary.com/incoder/image/upload/v1525517639/blog/gitpages-gitlab-ldap-login.png) + +为了安全我们需要关闭 GitLab 自己的注册功能,这样新用户只能通过 LDAP 认证的方式进行登陆。 + +![gitlab-sign-up](https://res.cloudinary.com/incoder/image/upload/v1525517671/blog/gitpages-gitlab-sign-up.png) + +### 存储仓库修改 +默认仓库存储位置:`/var/opt/gitlab/git-data/repositories/` +![gitlab-dirs](https://res.cloudinary.com/incoder/image/upload/v1525517697/blog/gitpages-gitlab-dirs.png) + +### Gitlab日志 +默认日志位置: `/var/log/gitlab` + +```bash +cd /opt/gitlab/bin +gitlab-ctl tail -f nginx/gitlab_access.log +``` +或者在Gitlab服务的系统设置中查看 +![gitlab-logs](https://res.cloudinary.com/incoder/image/upload/v1525517725/blog/gitpages-gitlab-logs.png) + +## 附录 +* [官方安装教程](https://about.gitlab.com/installation) +* [官方配置文件](https://docs.gitlab.com.cn/omnibus/settings/README.html) \ No newline at end of file diff --git a/source/_posts/hexo-blog.md b/source/_posts/hexo-blog.md new file mode 100644 index 000000000..fe44545ec --- /dev/null +++ b/source/_posts/hexo-blog.md @@ -0,0 +1,135 @@ +--- +title: Hexo Blog 搭建 +date: 2018-03-25 01:18:26 +categories: Hexo +tag: Build +--- + +之前一直纠结用[Jekyll](https://jekyllrb.com)还是[Hexo](https://hexo.io)来搭建[GitHub Page](https://pages.github.com)博客,原本一直想搭建一个[Material Design](https://material.io/guidelines)主题风格,从[Hexo Themes](https://hexo.io/themes)中寻找到一款不错的主题,[indigo](https://github.com/yscoder/hexo-theme-indigo)是一款支持IE10+,评论,目录导航,分享等功能的轻量Blog主题。 + +简单的修改了该主题之后,本地预览都没有什么问题,但是部署到[Github]()上,样式什么的都无法加载,应该是我的操作姿势不对吧,调整了半天没有解决,烦躁中找到之前star的另一款很受欢迎的[Next](https://github.com/iissnan/hexo-theme-next)主题。 + +既然自己修改的无法正常部署预览,那就用别人写好的吧,刚好赶上[Next](https://github.com/theme-next/hexo-theme-next)新版本V6.0系列的推出,那就不废话,直接开干 + +## 材料准备 +* [Node LTS](https://nodejs.org/en/download) +* [Git](https://git-scm.com/downloads) +* [Hexo](https://hexo.io) +* [Next](https://github.com/theme-next/hexo-theme-next) + +## 安装 +`Node`,`Git`的安装过程略 + +### Hexo +1. Hexo 安装 +``` bash +$ npm install hexo-cli -g +``` +2. 初始化 +``` bash +$ hexo init +``` +3. 安装依赖包 +``` bash +$ cd +$ npm install +``` +4. 启动服务预览 +``` bash +$ hexo serve +``` + +### Next +1. 安装Next 主题 +``` bash +$ git clone https://github.com/theme-next/hexo-theme-next themes/next +``` + > 当前操作在 `blog`的根目录下执行 + +2. 修改Blog 配置 +`you blog name` 根目录 `_config.yml` + * theme: 由原来默认`landscape`更改位`next`(大约:76行) + * 其他配置项,根据自己的需求进行更改,我这里更改了`title`,`subtitle`,`author`,`language`,`url`配置,其中`language`如果没有修改,默认为英文语言,在V6.0系列由原来`zh-Hans`更新为`zh-CN` + * 添加部署到Github配置 +``` bash +deploy: + type: git + repo: https://github.com/BladeCode/BladeCode.github.io.git # 用户名仓库 + branch: master # 用户名仓库的分支应该指定master,master分支也可以不用写 +``` + +3. 修改Theme 配置 +路径:`you blog name`/Themes/next/_config.yml +这里不罗嗦了,其配置可参考[hexo-theme-next](https://github.com/iissnan/hexo-theme-next)项目`README`文件 + +### 部署 +上面已经配置好了部署的目标仓库,那么这里直接使用Hexo提供的部署命令即可 +``` bash +$ hexo d +``` +相关命令介绍等,请查看[官方文档说明](https://hexo.io/docs) + +部署完成后,可以直接访问 http://`you blog name`/github.io + +## 自定义域名 +虽然现在blog可以使用Githug提供的项目二级域名来访问,为了个性化以及方便等,配置自己的域名 +1. 登录域名所属的管理网站(这里以阿里云域名服务为例) + ![gitpages-domain-manger](https://res.cloudinary.com/incoder/image/upload/v1525516603/blog/gitpages-domain-manger.png) +2. 添加解析 +``` bash +$ # 解析一 +记录类型:CNAME +主机记录:www +记录值:bladecode.github.io +解析路线:default + +$ # 解析二 +记录类型:A +主机记录:@ +记录值:192.30.252.153 +解析路线:default + +$ # 解析三 +记录类型:A +主机记录:@ +记录值:192.30.252.154 +解析路线:default +``` + > 192.30.252.153是GitHub的地址,你也可以ping你的 http://xxxx.github.io 的ip地址,填入进去 + +3. 修改Github上项目的domain设置 + ![gitpages-domain-custom](https://res.cloudinary.com/incoder/image/upload/v1525516630/blog/gitpages-domain-custom.png) +4. 添加CNAME文件 +保存路径:`you blog name`/source +新增文件:CNAME 文件 (格式要求:`保存成所有文件而不是txt文件`) +CNAME 文件内容:`incoder.org` +> 如果带有www,那么以后访问的时候必须带有www完整的域名才可以访问,但如果不带有www,以后访问的时候带不带www都可以访问。所以建议,不要带有www + +## Https开启 +开启Https 需要借助[Cloudflare](https://www.cloudflare.com),关于Cloudflare的介绍等不在这里展开 +1. 注册账号 +2. Add website + ![site](https://res.cloudinary.com/incoder/image/upload/v1525516650/blog/gitpages-https-add-site.png) +3. Querying your DNS + ![query](https://res.cloudinary.com/incoder/image/upload/v1525516664/blog/gitpages-https-dns-query.png) +4. Select Plan + ![plan](https://res.cloudinary.com/incoder/image/upload/v1525516681/blog/gitpages-https-select-plan.png) +5. 域名解析记录获取 + ![continue](https://res.cloudinary.com/incoder/image/upload/v1525516694/blog/gitpages-https-continue.png) +6. DNS 对比,并修改[Cloudflare]()提供的DNS来解析 + ![change](https://res.cloudinary.com/incoder/image/upload/v1525516714/blog/gitpages-https-change-dns.png) +7. 域名管理后台,修改DNS + ![dns](https://res.cloudinary.com/incoder/image/upload/v1525516733/blog/gitpages-https-wanwang-dns.png) + > 阿里云服务相关域名DNS修改帮助[文档](https://help.aliyun.com/knowledge_detail/39844.html) +8. 成功激活 + ![active](https://res.cloudinary.com/incoder/image/upload/v1525516756/blog/gitpages-https-active.png) +9. SSL证书申请提醒 + ![cer](https://res.cloudinary.com/incoder/image/upload/v1525516994/blog/gitpages-https-ssl-cer.png) +10. 添加强制HTTPS规则 + ![rule](https://res.cloudinary.com/incoder/image/upload/v1525517025/blog/gitpages-https-page-rule.png) +11. 规则制定 + ![deploy](https://res.cloudinary.com/incoder/image/upload/v1525517045/blog/gitpages-https-deploy-https.png) + +好了剩下的就是等证书颁发,可能要等上一些时间,具体每个人不尽相同,这里就不多做解释了。 + +Let's all,本次的Hexo的相关初级教程就到这里 diff --git a/source/_posts/hexo-iterative.md b/source/_posts/hexo-iterative.md new file mode 100644 index 000000000..6b17bc2bf --- /dev/null +++ b/source/_posts/hexo-iterative.md @@ -0,0 +1,102 @@ +--- +title: Hexo Blog 迭代 +date: 2018-05-02 18:18:18 +categories: Hexo +tag: Build +--- + +最初博客通过[Cloudflare](https://www.cloudflare.com)反向代理进行HTTPS解析,放完五一假期,Github官方开始支持[自定义域名的HTTPS解析](https://blog.github.com/2018-05-01-github-pages-custom-domains-https),在使用Cloudflare期间,经常性的521等问题烦恼,这次也可以名正言顺的弃用CloudFlare + +**本次迭代内容** +* 弃用Cloudflare +* 自动化部署 +* 常用设置 +* 常用插件安装 + +## 弃用Cloudflare +1. 关闭Cloudflare中设置Page Rules +2. 删除Cloudflare的DNS记录 +3. 还原域名配置中的DNS解析 +4. 添加Github提供的IP解析 + +[官方自定义域名设置](https://help.github.com/articles/setting-up-an-apex-domain/#configuring-an-alias-or-aname-record-with-your-dns-provider) + +## 自动化部署 +>[Github Pages](https://pages.github.com)是Github 提供一个渲染静态的Web页面服务 +* `{username}.github.io`仓库默认`master`分支 +* 其他项目仓库,默认`gh-pages`分支 +* [官方说明文档](https://help.github.com/articles/user-organization-and-project-pages) + +因此`{username}.github.io`仓库,dev分支用来存储网站的源码,`master`分支存放生成的静态文件,这样一个仓库就可以管理整个项目。每次`push`新的功能,然而每次都需要先`push`到`dev`分支,然后生成静态文件,再`push`到`master`分支,这种重复性的操作,实在太不优雅,所以采用[Travis CI](https://travis-ci.org)进行自动化部署 + +接着Github支持自定义域名开启HTTPS的好消息,Travis CI (https://travis-ci.com) 也支持开源项目啦 + +> Travis CI 区别 +* Travis-CI(https://travis-ci.org) :GitHub公开项目 +* Travis-CI(https://travis-ci.com) :~~私有付费项目~~,[2018.05.02也开始支持开源项目](https://blog.travis-ci.com/2018-05-02-open-source-projects-on-travis-ci-com-with-github-apps?utm_source=Broadcast&utm_campaign=2may_release) + +[GitHub Services are being deprecated](https://developer.github.com/changes/2018-04-25-github-services-deprecation),因此本节的自动化部署就开启Travis CI (https://travis-ci.com) 集成方案 + +### 准备 +1. 使用GitHub账号登录Travis-CI,并确认接受访问 +2. 同步了GitHub存储库,转到您的配置文件页面并启用您想要构建的存储库 +3. 添加 `.travis.yml` 文件到构建部署项目的根目录下 + +### Hexo 自动部署 +部署流程 +![部署流程](https://res.cloudinary.com/incoder/image/upload/v1525517765/blog/gitpages-travis-ci-branch-deploy.png) + +Hexo 部署脚本示例 +```bash +language: node_js # 设置语言 +node_js: stable # 设置相应的版本 +cache: + directories: + - node_modules +before_install: + - npm install -g hexo + - npm install -g hexo-cli +install: + - npm install # 安装hexo及插件 +before_script: + - npm install -g mocha + - git clone --branch master https://github.com/BladeCode/BladeCode.github.io.git public +script: + - hexo cl # 清除 + - hexo g # 生成 +after_script: + - cd ./public + - git init + - git config user.name "BladeCode" # 修改成自己的github用户名 + - git config user.email "Jerry.x@outlook.com" # 修改成自己的GitHub邮箱 + - git add . + - git commit -m "update by Travis-CI" # 更新日志 + - git push --force --quiet "https://${GH_TOKEN}@${GH_REF}" master:master # GH_token就是在travis中设置的token +branches: + only: + - dev # 只监测dev分支,一有动静就开始构建 +env: + global: + - GH_REF: github.com/BladeCode/BladeCode.github.io.git +``` + +## 常用设置 +[NexT 配置使用手册](http://theme-next.iissnan.com) + +### NexT主题更新 + +[官方说明](https://github.com/theme-next/hexo-theme-next/blob/master/docs/zh-CN/DATA-FILES.md) + +## 常用插件安装 + +* 文章字符统计 [hexo-symbols-count-time](https://github.com/theme-next/hexo-symbols-count-time) +* 修复LeanCloud访客计数器中的严重安全漏洞 [hexo-leancloud-counter-security](https://github.com/theme-next/hexo-leancloud-counter-security) +* 图片灯箱 [theme-next-fancybox3](https://github.com/theme-next/theme-next-fancybox3) +* 本地检索 [hexo-generator-searchdb](https://github.com/theme-next/hexo-generator-searchdb) + +## 其他 + +### 图床选择 +* [个人网站中的静态文件云存储选择](https://jimmysong.io/posts/static-website-storage) +* [嗯,图片就交给它了](https://sspai.com/post/40499) +* [NexT主题无法备份解决方式](https://github.com/iissnan/hexo-theme-next/issues/932) diff --git a/source/_posts/hugo.md b/source/_posts/hugo.md new file mode 100644 index 000000000..96beffa72 --- /dev/null +++ b/source/_posts/hugo.md @@ -0,0 +1,55 @@ +--- +title: Hugo 初体验 +date: 2018-07-11 16:34:10 +categories: Hugo +tag: Build +--- + +个人博客使用[Hexo](https://hexo.io/zh-cn/index.html)搭建,使用效果很不错,在Github上创建组织[RootCluster](https://github.com/RootCluster),该组织主要存放自己新技术的学习和一些Demo实验。组织同样也可以使用Github pages服务,因此给RootCluster构建一个静态页面,可用直观清晰的看自己的项目,加之之前已用Hexo,所以这次的静态页面构建选择了新的一个静态页面生成工具,[Hugo](https://gohugo.io)是一款使用Go语言开发的静态页面生成框架。 + +[Hugo](https://gohugo.io)是世界上最快的静态网站引擎。它是用[Go](https://golang.org)(aka Golang)编写的,由[bep](https://github.com/bep),[spf13](https://github.com/spf13)和[朋友](https://github.com/gohugoio/hugo/graphs/contributors)开发 + +## 材料准备 +* SystemOS:Windows 10 +* [Chocolatey](https://chocolatey.org):Windows的包管理器 +* [Hugo](https://gohugo.io/getting-started/installing) + +## 安装 +### Chocolatey安装 +如果已安装,跳过该步骤 +* 使用 PowerShell.exe +```bash +Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1')) +``` +* 使用 cmd.exe +```bash +@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin" +``` +以上两种方式,选择其一即可 +![PowerShell.exe 演示](https://res.cloudinary.com/incoder/image/upload/v1531314279/blog/hugo_install.png) + +### hugo安装 + +```bash +choco install hugo -confirm +``` + +### 初始化Hugo +* 初始化hugo模板 +```bash +hugo new site project_name +``` + +* 进入项目并启动项目 +```bash +cd project_name +hugo serve +``` + +![hugo_init](https://res.cloudinary.com/incoder/image/upload/v1531314737/blog/hugo_init.png) + +* [主题安装](https://themes.gohugo.io) + +这里选择[Elate](https://themes.gohugo.io/hugo-elate-theme)主题作为组织的网站 + +![主题安装](https://res.cloudinary.com/incoder/image/upload/v1531316293/blog/hugo_theme.png) \ No newline at end of file diff --git a/source/_posts/linux-build.md b/source/_posts/linux-build.md new file mode 100644 index 000000000..4577fb620 --- /dev/null +++ b/source/_posts/linux-build.md @@ -0,0 +1,314 @@ +--- +title: Linux 常用应用安装 +date: 2018-05-15 00:32:10 +categories: Linux +tag: Build +--- + +作为Android开发者,目标主要是在客户端,平时也就是和服务端对接数据接口,很少直接干到服务端的Linux机器,随着这波推动团队技术平台基础开发工具模块的完善,拿到了一台Linux机器,重新构建移动端的测试服务器。 + +该机器主要功能: +1. 提供移动端服务Api接口 +2. 提供移动端通讯录管理授权服务 +3. 提供企业微信通讯录同步服务 +4. 管理移动端服务器Api接口文档 + +也是第一次正式的从头开始安装所需软件及应用部署,虽然这些工作可以完全找运维去处理,难得这样的机会从头开始去熟悉Linux。 + +**安卓,是一个基于Linux内核的开放源代码移动操作系统**,因此多了解Linux是一件双赢的事情,基于当前机器需要提供的服务,安装部署需要的软件应用 + +
废话不多说,上来就是干
+ +查看当前系统版本信息 +```bash +lsb_release -a +``` +以下软件版本,请下载对应支持系统的软件 + +## Java + +[官方下载地址](http://www.oracle.com/technetwork/java/javase/downloads/index.html),选择需要的版本下载安装包 +>官方提供了`.rpm`,`.gz`两种格式安装包 + +```bash +# 1.下载安装包 +# 拷贝安装包到需要安装的服务器 +# 2.解压并安装 +# `.rpm`格式安装(jdk-xxx.rpm更换成对应的文件名) +sudo rpm -ivh jdk-xxx.rpm +# `.gz`格式安装(解压到指定目录,常存放`/usr/java/`路径) +tar zxvf jdk-xxx.tar.gz -C /usr/java/ +# 3.设置环境变量 +vim /etc/profile +# JAVA_HOME=/usr/java/jdk1.8.0_172 (修改这里路径,指向jdk安装路径) +# PATH=$JAVA_HOME/bin:$PATH +# CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar +# export JAVA_HOME PATH CLASSPATH +# 4.编译配置文件,使修改生效 +source /etc/profile +# 5.验证jdk是否安装成功 +java –version +``` + +## Tomcat + +[官方下载地址](http://tomcat.apache.org),选择需要的版本下载安装包 +>官方提供了`.zip`,`.gz`两种格式安装包,Linux服务器下载`Core`类即可 + +```bash +# 1.下载安装文件 +wget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-9/v9.0.8/bin/apache-tomcat-9.0.8.tar.gz +# 2.解压安装文件(解压到指定目录,常存放`/usr/tomcat/`路径) +tar -zxvf apache-tomcat-9.0.8.tar.gz -C /usr/tomcat/ +# 3.启动tomcat +cd /usr/local/tomcat/bin +./startup.sh +# 4.关闭tomcat +./shutdown.sh +``` + +### 配置Web管理账号 +* 修改文件conf/tomcat-users.xml,在元素中添加帐号密码,需要指定角色 +```bash +vim /usr/local/tomcat/conf/tomcat-users.xml +# +# +# +``` + +### 配置端口 +* 可以修改conf目录下的文件server.xml,修改Connector元素(Tomcat的默认端口是8080),需要重新启动Tomcat服务生效 +```bash +vim /usr/local/tomcat/conf/server.xml +# +``` + +### 应用部署 +* 放置需部署包到容器中`webapps`路径 +```bash +cd /usr/local/tomcat/webapps +``` +* 启动服务 +```bash +cd /usr/local/tomcat/bin +./startup.sh +``` + +## Apache +一般系统中以及包含apache应用 +[官方下载地址](http://httpd.apache.org/download.cgi),选择需要的版本下载安装包 +>官方提供了`.bz2`,`.gz`两种格式安装包 + +### 安装 +查看系统中是否已包含httpd应用 +``` +rpm -qa | grep httpd 或 yum list | grep httpd +``` + +* 方式一 +```bash +# 1.下载需要的版本文件 +wget http://apache.claz.org//httpd/httpd-2.4.33.tar.gz +# 2.解压安装文件(解压到指定目录,常存放`/usr/local/httpd/`路径) +tar -zxvf httpd-2.4.33.tar.gz -C /usr/local/httpd/ +``` + +* 方式二(推荐) +```bash +# 1.下载安装httpd +yum install httpd +``` + +### 卸载 +```bash +yum erase httpd.x86_64 或 rpm -e httpd.x86_64 +``` + +### 常用命令 +```bash +# 查看服务运行状态 +systemctl status httpd.service +# 启动apache服务 +systemctl start httpd.service +# 停止apache服务 +systemctl stop httpd.service +``` + +RPM默认安装路径: + +| 路径 | 说明 | +| ---------- | --- | +| /etc | 一些设置文件放置的目录如/etc/crontab | +| /usr/bin | 一些可执行文件 | +| /usr/lib | 一些程序使用的动态函数库 | +| /usr/share/doc | 一些基本的软件使用手册与帮助文档 | +| /usr/share/man | 一些man page文件 | + +## Nginx +[官方下载地址](http://nginx.org/download),选择需要的版本下载安装包(最新安装版本1.14.0) +>官方提供了`.zip`,`.gz`两种格式安装包 + +### 安装 + +* 方式一 +```bash +# 1.下载安装文件 +wget http://nginx.org/download/nginx-1.14.0.tar.gz +# 2.解压安装文件(解压到指定目录,常存放`/usr/local/`路径) +tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/ +# 3. 编译安装依赖库 +cd /usr/local/nginx/ +./configure +``` + +* 方式二 +```bash +# 默认安装路径/etc/nginx/ +yum install nginx +``` + +### 常用命令 +* 加压文件安装常用命令 +```bash +# 停止ngix +/usr/local/nginx/sbin/nginx -s quit +# 重新载入nginx(当配置信息发生修改时) +/usr/local/nginx/sbin/nginx -s reload +# 查看版本 +/usr/local/nginx/sbin/nginx -v +# 查看nginx的配置文件的目录 +/usr/local/nginx/sbin/nginx -t +# 查看帮助信息 +/usr/local/nginx/sbin/nginx -h +``` +* yum安装常用命令 +```bash +# 启动 +systemctl start nginx +# 停止 +systemctl stop nginx +# 重启 +systemctl restart nginx +# 查看运行状态 +systemctl status nginx +# 开机启动 +systemctl enable nginx +``` + +## Node +一般系统中以及包含apache应用 +[官方下载地址](https://nodejs.org),选择需要的版本下载安装包 +>官方提供了`.gz`,`.7z`,`zip`等多种格式安装包 + +### 安装 +```bash +# 1.下载安装文件 +wget https://nodejs.org/download/chakracore-release/v8.6.0/node-v8.6.0-linux-x64.tar.gz +# 2.解压安装文件(解压到当前目录) +tar -zxf node-v8.6.0-linux-x64.tar.gz +# 3.建立软链接,实现全局访问 +ln -s /root/node-v8.6.0-linux-x64/bin/node /usr/local/bin/node +ln -s /root/node-v8.6.0-linux-x64/bin/npm /usr/local/bin/npm +``` + +## Redis +[官方下载地址](https://redis.io/download),选择需要的版本下载安装包 +>官方提供了`.gz`格式安装包 + +### 安装 +```bash +# 1.下载安装文件 +wget wget http://download.redis.io/releases/redis-4.0.10.tar.gz +# 2.解压安装文件(解压到当前目录) +tar xzf redis-4.0.10.tar.gz +# 3.编译安装 +cd redis-4.0.10 +make +# 4.启动服务 +src/redis-server +``` + +## 配置 +```bash +# 1.修改redis.conf文件中daemonize属性 为 yes +vim /you_install_path/redis.conf +``` +> 其他配置根据自身需要调整修改 + +## 其他命令 +1. 关闭服务 +```bash +redis-cli -h 127.0.0.1 -p 6379 shutdown +``` +2. 非安全模式启动 +```bash +# 后台以非安全模式启动 +nohup /usr/local/bin/redis-server --protected-mode no & +``` + +## 常用命令 + +### 文件查找 +#### find +find命令是根据文件的属性进行查找,如文件名,文件大小,所有者,所属组,是否为空,访问时间,修改时间等。 +* 基本格式: +find path expression +* 示例: + * 在根目录下查找文件httpd.conf,表示在整个硬盘查找 + find / -name httpd.conf + * 表示当前目录下查找文件名开头是字符串‘srm’的文件 + find . -name 'srm*' + * 查找在系统中最后10分钟访问的文件(access time) + find / -amin -10 + * 查找在系统中属于fred这个用户的文件 + find / -user fred + * 查找出小于1000KB的文件 + find / -size -1000k + +#### grep +grep是根据文件的内容进行查找,会对文件的每一行按照给定的模式(patter)进行匹配查找。 +* 基本格式: +find expression +* 主要参数: + -c:只输出匹配行的计数。 + -i:不区分大小写 + -h:查询多文件时不显示文件名。 + -l:查询多文件时只输出包含匹配字符的文件名。 + -n:显示匹配行及行号。 + -s:不显示不存在或无匹配文本的错误信息。 + -v:显示不包含匹配文本的所有行。 +* 示例: + * 显示所有包含每行字符串至少有5个连续小写字符的字符串的行 + grep ‘[a-z]\{5\}’ aa + * 显示所有以d开头的文件中包含 test的行 + grep 'test' d* + +### 进程相关 +* 查看指定服务进程 +```bash +# 查看httpd服务进程 +ps -ef | grep httpd +# UID PID PPID C STIME TTY TIME CMD +# root 7192 7103 0 19:59 pts/3 00:00:00 grep --color=auto httpd +``` + {% note info %} + * UID:用户ID + * PID:进程ID + * PPID:父进程ID + * C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高 + * STIME:进程启动的时间 + * TTY:完整的终端名称 + * TIME:CPU时间 + * CMD:完整的启动进程所用的命令和参数 + {% endnote %} + +* 杀死指定进程 +```bash +kill -9 pid(逐个都删除) +``` +* 查看指定端口 +```bash +# 检测6379端口是否在监听 +netstat -lntp | grep 6379 +``` +> \ No newline at end of file diff --git a/source/_posts/linux-mysql.md b/source/_posts/linux-mysql.md new file mode 100644 index 000000000..04748313c --- /dev/null +++ b/source/_posts/linux-mysql.md @@ -0,0 +1,101 @@ +--- +title: Linux 之 MySQL +date: 2018-07-23 22:30:10 +categories: Linux +tag: MySQL +--- + +之前粗略的接触了Linux的基础使用和安装,这次准备在自购的服务器上跑些应用,纯属娱乐,废话不说,上来就先仍数据库。 +数据库常用的`Oracle`,`MySQL`,`SQL Server`,`MongoDB`等,排名不分先后,自己平时接触最多的也就是`MySQL`,`MongoDB`,好`MySQL`先来一份。 + +## 介绍 +MySQL是一个开源数据库管理系统,通常作为流行的LEMP(Linux,Nginx,MySQL / MariaDB,PHP / Python / Perl)堆栈的一部分安装。它使用关系数据库和SQL(结构化查询语言)来管理其数据。 + +[CentOS 7](https://www.centos.org)更喜欢[MariaDB](https://mariadb.org),它是由原始`MySQL`开发人员管理的`MySQL`分支,旨在替代MySQL。如果你在CentOS 7上运行`yum install mysql`,那么安装的是MariaDB,而不是MySQL。 + +## 清单 +* OS: CentOS 7 +* DataBase:MySQL 8.0.11 + +## 安装 + +```bash +# 1. 获取官方yum源安装包 mysql80-community-release-el7-1.noarch.rpm 是根据官网提供的版本信息 +wget wget https://dev.mysql.com/get/`mysql80-community-release-el7-1.noarch.rpm` +# 2. 安装rpm包 +rpm -ivh mysql80-community-release-el7-1.noarch.rpm +# 3. 安装mysql-server +yum install -y mysql-server +# 4. 启动mysqld服务 +systemctl start mysqld +# 5. 查看是否成功启动 +ps aux|grep mysqld +# 6. 设置mysqld服务开机自启动 +systemctl enable mysqld +``` + +## 配置 + +由于MySQL从5.7开始不允许在首次安装后,使用空密码进行登录,系统会随机生成一个密码以供管理员首次登录使用,这个密码记录在`/var/log/mysqld.log`文件中 + +```bash +# 1. 查看系统提供密码 +cat /var/log/mysqld.log|grep 'A temporary password' +# 2. 使用获取到的密码登录MySQL +mysql -u root -p +# 3. 切换数据库 +use mysql; +# 4. 修改root密码 your_password 替换成你自己的密码就可以了,这个密码是强密码,要求密码包含大小写字母、数字及标点符号,长度大于6 +alter user 'root'@'localhost' identified by 'your_password'; +``` + +## 链接 +自己平时习惯使用 [Navicat](https://www.navicat.com.cn) 进行数据库操作,因此这里进行配置链接已在云端刚刚安装的MySQL服务 +![linux-mysql](https://res.cloudinary.com/incoder/image/upload/v1532362215/blog/linux-mysql.png) +### ERROR 1130 +按照上图图的配置信息链接MySQL,发现错误提示:`ERROR 1130: Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server` + +#### 原因 +不允许从远程登陆MySQL服务,只能在localhost + +#### 解决方法 +```bash +# 切换数据库 +use mysql; +# 修改user 指定的host 为 % +update user set host = '%' where user = 'root'; +# 成功修改 ++-----------+------------------+ +| host | user | ++-----------+------------------+ +| % | root | +| localhost | mysql.infoschema | +| localhost | mysql.session | +| localhost | mysql.sys | ++-----------+------------------+ +4 rows in set (0.00 sec) +``` + +### ERROR 2059 +继续重试链接,错误提示:`ERROR 2059: Authentication plugin 'caching_sha2_password' cannot be loaded:The specified module could not be found.` + +#### 原因 +MySQL 8不支持动态修改密码验证方式 + +#### 解决方法 +```bash +# 停止mysql +systemctl stop mysqld.service +# my.cnf文件中默认有下面的语句,删除前面的#号即可,没有的话就把它添加到my.cnf中 ,默认路径`/etc/my.cnf` +default-authentication-plugin=mysql_native_password +# 切换数据库 +use mysql +# 给指定用户设置密码,这里`%`是因为之前已经将远程没有特殊指定,用%代替了localhost +ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password'; +``` + +## 附录 +* [安装过程Pdf]() +* [How To Install MySQL on CentOS 7](https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-centos-7) +* [ERROR 1130](https://blog.csdn.net/nyist327/article/details/45074559) +* [ERROR 2059](https://blog.csdn.net/airt_xiang/article/details/80261674) \ No newline at end of file diff --git a/source/_posts/memory-hs.md b/source/_posts/memory-hs.md new file mode 100644 index 000000000..c1755d56c --- /dev/null +++ b/source/_posts/memory-hs.md @@ -0,0 +1,34 @@ +--- +title: 忆·黄山 +date: 2018-05-01 00:02:00 +categories: Memory +tag: 黄山 +--- + +{% cq %}

黄山归来不看岳

{% endcq %} + +五岳未归,先品黄山。以前看黄山还是小学课本《黄山》一文介绍黄山的美,黄山的秀丽,黄山的与众不同,这次是亲身去体验黄山的姿态;趁着五一,趁着年轻,趁着...。废话不多讲,先看黄山日出美景 + +{% dplayer "url=https://res.cloudinary.com/incoder/video/upload/v1528018149/blog/video/HuangShan-Sunrise.mp4" "pic=https://res.cloudinary.com/incoder/image/upload/v1528024134/blog/travel/travel-huangshan-back.jpg" "loop=no" "theme=#FADFA3" "autoplay=false" "token=tokendemo" %} +>别问我为啥抖,没有支撑点,全程手持...逃 + +这次黄山之行并没有做任何功课,计划到实施前后不超过15天,抱着走一步,看一点的心态去玩,没想到五一节假日,来黄山的人不是很多。 + +## 出行方式 +杭州 **城西客运站** 做大巴直达黄山景区,票价:¥110,时间:大约4小时左右到达 +## 攻略 +逃,没有...... +由于到达黄山游客集散中心已是14:00,由于距离黄山还有10多公里,你可以走路去黄山山脚下,而且16:00之后没有大巴去黄山景区。因此随便找了个地吃完中午饭,就往乘大巴车黄山景区去了(¥12/人),由于上山的入口有好几个,我们也没有去研究,大巴到 **云谷寺** 景区,我们也就下车从这里出发往山上去了,你可以坐缆车去往山顶,我们一行三人,选择了徒步上山,对了门票:¥230/人 + +一路说说笑笑,也没有预订上山的旅店,我们心真大,刚走了没多久,就看到了两个人被交椅抬着下山了,其中一个应该是摔了,头破血流的样子,还没开始,就...;没多管,一路还是很轻松,毕竟都是年轻人,体力不错,走到 **白鹅岭** 已经开始下雨,雨越下越大,因为在边走边看的路上,我们决定来黄山当然是去 **迎客松** 的景点,然后我们顺着 **白鹅岭** 前往 **白鹅山庄旅游商场** 去避雨,然后是人多的无法挪开脚,此时天色已晚,我们稍作休息,找了半天也没有能睡得地,那床都是人挤人。我们找了个茶馆,吃了些带着的食品,喝了一小时茶,大约20:00左右,我们决定,今晚夜行到 **迎客松** + +雨后起了大雾,山顶那时雾色正浓,能见度大约在3米。我们三人也紧随其形,在 **光明顶** 片区玩了一会,这里看日出不错,当我们并没有这里等日出,毕竟这里离 **迎客松** 有一小时多的行程,我们要明天早早的在 **迎客松** 那里拍照装逼,拍完照然后回走去最高峰 **莲花峰** ,然而到了 **迎客松** 才发现,并不像电视上看到的,是在山的悬崖边。好了,这会才23:00多,怎么办,还有好几小时,又没有帐篷什么地可住,三人就在这 **迎客松** 前的广场上,发现了超大遮阳伞两把,哈哈哈,我们就用遮阳伞前后堵住,加上自己的雨伞,构建了一个堡垒,这下,我们三可用在里面睡觉了,雨后的山上很潮湿,就这样半将半究的,坚持到4点多。 + +天快要亮了,要找地儿去拍日出,我答应别人了,要发日出照片给她,往回走去 **莲花峰** 那里并不合适,更重要的是山路也被封,不上上去,只好找到 **玉屏索道** 的另一条路上,这里刚刚好可用看到日出 + +![日出](https://res.cloudinary.com/incoder/image/upload/v1528023909/blog/travel/travel-huangshan-sunrise.jpg) + +拍完日出,我们快速折回到 **迎客松** ,那里已经开始有三三两两的人了,我们动作要快,否则等会从索道上来大批人马,嗯,快速装逼完成,迅速撤离战场 + +![迎客松](https://res.cloudinary.com/incoder/image/upload/v1528023881/blog/travel/travel-huangshan-yks.jpg) + diff --git a/source/_posts/memory-hz1.md b/source/_posts/memory-hz1.md new file mode 100644 index 000000000..44feaa58b --- /dev/null +++ b/source/_posts/memory-hz1.md @@ -0,0 +1,20 @@ +--- +title: 品·杭州 +date: 2018-04-29 00:11:01 +categories: Memory +tag: 杭州 +--- + +上有天堂,下游苏杭,杭州,一个温文尔雅,一个记忆中天堂,一个南方姑娘的城市。 +杭州:毕业后的第二个城市,很开心在这样的城市生活,工作,结识这里的人,杭州和家乡的气候非常相似,因此在杭州有种在家的感觉,在这里遇到的的人,我都会记着你们美丽帅气的脸庞 + +18年是一个动荡的一年,一起的伙伴渐渐的离开了昔日的团队,这两年中,有的人毕业,有的人结婚,有的人生子,有的人成长,感谢我能成为你们生命中的一个过客,和你们一起经历生活百态 + +不管你们在何方,从事着什么样的工作,过着什么样的生活,我会想你们,愿你们的一切顺利 + +粗略的剪影,请异步[优酷](http://v.youku.com/v_show/id_XMzU4NTgyMDE0NA==.html?spm=a2hzp.8244740.0.0) + +{% note default %} +不遵守规则的人,我们叫他废物,但是,不珍惜同伴的人,连废物都不如 +——宁智波·带土 +{% endnote %} \ No newline at end of file diff --git a/source/_posts/movie-fierce.md b/source/_posts/movie-fierce.md new file mode 100644 index 000000000..f964d12b2 --- /dev/null +++ b/source/_posts/movie-fierce.md @@ -0,0 +1,22 @@ +--- +title: 《激战》 +date: 2018-10-03 00:02:00 +categories: Movie +tag: 黄山 +--- + +{% cq %}

怕,你就会输一辈子

{% endcq %} + +{% dplayer "url=https://vodkgeyttp8.vod.126.net/vodkgeyttp8/er2FM3CV_126646839_hd.mp4?wsSecret=1e98e23b7864a26fae93a384aad1bd3b&wsTime=1538906004" "pic=http://p1.music.126.net/w0PZ_MfRNkwDvBwWhjiCtQ==/109951163572827164.jpg" "loop=no" "theme=#FADFA3" "autoplay=false" "token=tokendemo" %} + +喜欢其中的一些台词,大伙共勉 +* 其实,我每次上台都很怕的,不过每次我都会跟自己说,我能做到 +* 这场比赛我可能会跌倒,但我一定会站起来 +* 怕,你就会输一辈子 + +自己的一些感触: +其实很多时候,道理都懂,但却不能坚持下去,但这些道理都在自己生活中一点点的用生活感悟出来,那这些道理会更浓烈,更让人刻骨铭心 +* 尊重和珍惜,那些愿意为你去花时间的人 +* 要和自己志同道合,有共同目标的伙伴去互相较劲 +* 从哪里跌倒就要从哪里爬起来 +* 一路跌跌撞撞走下去,中间的酸甜苦辣是最美的味道 \ No newline at end of file diff --git a/source/_posts/network-http.md b/source/_posts/network-http.md new file mode 100644 index 000000000..73b5461ac --- /dev/null +++ b/source/_posts/network-http.md @@ -0,0 +1,179 @@ +--- +title: Http VS Https +date: 2018-06-22 01:14:25 +categories: Network +tag: [Http,Https] +--- +## 基础名称 +### 请求报文 +客户端发送一个HTTP请求到服务器的请求消息包括以下格式: +请求行(request line)、请求头(header)、请求内容组成,如下请求报文的一般格式。 +![请求报文](https://user-gold-cdn.xitu.io/2018/4/16/162cdac93015af8f?imageView2/0/w/1280/h/960/format/webp/ignore-error/1) + +#### 请求行 +1. 方法: + * GET: 获取资源 + * POST: 向服务器端发送数据,传输实体主体 + * PUT: 传输文件 + * HEAD: 获取报文首部 + * DELETE: 删除文件 + * OPTIONS: 询问支持的方法 + * TRACE: 追踪路径 +2. URL: + `scheme://host:port/path?query` + * scheme: 表示协议,如Http, Https, Ftp等 + * host: 表示所访问资源所在的主机名:如:www.baidu.com + * port: 表示端口号,Http默认为80,Https默认为443 + * path: 表示所访问的资源在目标主机上的储存路径 + * query: 表示查询条件 + +3. 协议/版本号: + +#### 请求头 +1. 通用首部(General Header) +2. 请求首部(Request Header) +3. 实体首部(Entity Header Fields) + +#### 请求内容 +如: 客户端POST的数据就放在这里(对比:GET的数据放在请求行的URL里) + +例如: +![请求示例](https://res.cloudinary.com/incoder/image/upload/v1529805798/blog/http-request.png) + +### 响应报文 +服务端响应一个HTTP请求消息包括以下格式: +响应行(response line)、响应头(header)、响应内容组成 + +#### 响应行 +1. 状态码: + * 1XX:Informational(信息性状态码) + * 2XX:Success(成功状态码) + * 3XX:Redirection(重定向) + * 4XX:Client Error(客户端错误状态码) + * 5XX:Server Error(服务器错误状态吗) +2. 状态码描述: +3. 协议/版本号: + +#### 响应头 +1. 通用首部(General Header) +2. 响应首部(Response Header) +3. 实体首部(Entity Header Fields) + +#### 响应内容 +如:服务器返回的HTML、JSON等数据 + +![响应示例](https://res.cloudinary.com/incoder/image/upload/v1529805798/blog/http-response.png) + +## Http +### 概念 +* [HTTP](https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%8D%8F%E8%AE%AE):超文本传输协议(HyperText Transfer Protocol)是一种用于分布式、协作式和超媒体信息系统的应用层协议. +* HTTP是万维网的数据通信的基础. + +### 通信 +1. 建立TCP连接 +在HTTP工作开始之前,Client首先要通过网络与Service建立连接,该连接是通过TCP来完成的,HTTP是比TCP更高层次的应用层协议,根据规则,只有低层协议建立之后才能进行更高层协议的连接,因此,首先要建立TCP连接 +2. Client发起HTTP请求(Request) +Requset通常包含请求行,请求头,请求内容这三部风组成的请求报文 +3. Service发送HTTP响应(Response) +Response通常包含响应行,响应头,响应内容这三部风组成的响应报文 +4. Client关闭TCP连接 + +### 特点 +1. 无状态 + * 每个请求结束后都会被关闭,每次的请求都是独立的,它的执行情况和结果与前面的请求和之后的请求是无直接关系的,它不会受前面的请求应答情况直接影响,也不会直接影响后面的请求应答情况 + * 服务器中没有保存客户端的状态,客户端必须每次带上自己的状态去请求服务器 +2. 明文传输,可能被窃听 +3. 不验证通信方的身份,可能遭遇伪装 + * HTTP 协议中的请求和响应不会对通信方进行确认。也就是说存在“服务器是否就是发送请求中 URI 真正指定的主机,返回的响应是否真的返回到实际提出请求的客户端”等类似问题 + * HTTP 协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求 +4. 无法证明报文的完整性,可能遭遇篡改 + * 在请求或响应送出之后直到对方接收之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉 + +## Https +### 概念 +* [HTTPS](https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8%E5%8D%8F%E8%AE%AE):超文本传输安全协议(Hypertext Transfer Protocol Secure,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议. +* HTTPS经由HTTP进行通信,但利用`SSL/TLS`来加密数据包. + +> HTTP+加密+认证+完整性保护 = HTTPS + +![HTTP VS HTTPS](https://res.cloudinary.com/incoder/image/upload/v1529822573/HTTPS.png) + +### 通信 +#### SSL/TLS +SSL/TLS:安全传输层协议(Transport Layer Security), 是介于TCP和HTTP之间的一层安全协议,TLS的前身是SSL(Secure Sockets Layer) + +>TLS/SSL关系 +* SSL2.0 +* SSL3.0 +* TLS1.0(SSL3.1) +* TLS1.1(SSL3.2) +* TLS1.2(SSL3.3) + +#### SSL/TLS工作原理 +HTTPS协议的主要功能都依赖于SSL/TLS协议,SSL/TLS的功能实现主要依赖于三类算法:`对称加密`,`非对称加密`,`散列函数Hash` +* 非对称加密实现身份认证和密钥协商, +* 对称加密算法采用协商的密钥对数据加密, +* 基于散列函数验证信息的完整性 + +#### SSL/TLS协议实现 +TLS以记录协议(record protocol)实现。记录协议负责在传输连接上交换所有的底层消息,并可以配置加密。每一条TLS记录以一个短标头起始。标头包含记录内容的类型(或子协议)、协议版本和长度 + +TLS的主规格说明书定义了四个核心子协议: + +* 握手协议(handshake protocol); +* 密钥规格变更协议(change cipher spec protocol); +* 应用数据协议(application data protocol); +* 警报协议(alert protocol); + +#### 握手协议 +握手是TLS协议中最精密复杂的部分。在这个过程中,通信双方协商连接参数,并且完成身份验证。根据使用的功能的不同,整个过程通常需要交换6~10条消息。根据配置和支持的协议扩展的不同,交换过程可能有许多变种,在使用中经常可以观察到以下三种流程: +* 单向验证(完整的握手,对服务器进行身份验证) +* 双向验证(对客户端和服务器都进行身份验证的握手) +* 简短握手(恢复之前的会话) + +##### 单向验证 +![单向验证](https://blog-10039692.file.myqcloud.com/1494841223417_6503_1494841223715.png) +1. Handshake:ClentHello +客户端通过发送 Client Hello 报文开始 SSL通信。报文中包含客户端支持的 SSL的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)。 +2. Handshake:ServerHello +服务器可进行 SSL通信时,会以 ServerHello 报文作为应答。和客户端一样,在报文中包含 SSL版本以及加密组件。服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的。 +3. Handshake:Certificate +之后服务器发送 Certificate 报文。报文中包含公开密钥证书。 +4. Handshake:ServerHelloDone +最后服务器发送 ServerHelloDone 报文通知客户端,最初阶段的 SSL握手协商部分结束。 +5. Handshake:ClientKeyExchange +SSL第一次握手结束之后,客户端以 ClientKeyExchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串。该报文已用3 中的公开密钥进行加密。 +6. ChangeCipherSpec +接着客户端继续发送 ChangeCipherSpec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。 +7. Handshake:Finished +客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。 +8. ChangeCipherSpec +服务器同样发送 ChangeCipherSpec 报文。 +9. Handshake:Finished +服务器同样发送 Finished 报文。 +10. Application Data(HTTP) +服务器和客户端的 Finished 报文交换完毕之后,SSL连接就算建立完成。当然,通信会受到 SSL的保护。从此处开始进行应用层协议的通信,即发送 HTTP 请求。 +11. Application Data(HTTP) +应用层协议通信,即发送 HTTP 响应。 +12. Alert:warning,close notify +最后由客户端断开连接。断开连接时,发送 close_notify 报文(上图做了一些省略,实际到这一步还需要发送TCP FIN报文关闭TCP链接) + +##### 双向验证 +![双向验证](https://blog-10039692.file.myqcloud.com/1494841503771_6933_1494841504095.png) +同单向验证流程相比,双向验证多了如下两条消息:`CertificateRequest`与`CertificateVerify`,其余流程大致相同 +* CertificateRequest +CertificateRequest是TLS规定的一个可选功能,用于服务器认证客户端的身份。通过服务器要求客户端发送一个证书实现,服务器应该在ServerKeyExchange之后立即发送CertificateRequest消息 +* CertificateVerify +当需要做客户端认证时,客户端发送CertificateVerify消息,来证明自己确实拥有客户端证书的私钥。这条消息仅仅在客户端证书有签名能力的情况下发送 + +#### 应用数据协议(application data protocol) +应用数据协议携带着应用消息,只以TLS的角度考虑的话,这些就是数据缓冲区。记录层使用当前连接安全参数对这些消息进行打包、碎片整理和加密 + +#### 警报协议(alert protocol) +警报的目的是以简单的通知机制告知对端通信出现异常状况。它通常会携带close_notify异常,在连接关闭时使用,报告错误 + +## 附录 +* 《图解HTTP》 +* [HTTP | MDN](https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Overview) +* [数字证书及CA的扫盲介绍](https://kb.cnblogs.com/page/194742) +* [HTTPS 原理浅析及其在 Android 中的使用](https://cloud.tencent.com/developer/article/1005073) \ No newline at end of file diff --git a/source/_posts/network-okhttp1.md b/source/_posts/network-okhttp1.md new file mode 100644 index 000000000..119b7ef10 --- /dev/null +++ b/source/_posts/network-okhttp1.md @@ -0,0 +1,286 @@ +--- +title: Network(一) 之OkHttp 入门 +date: 2018-06-23 12:44:25 +categories: Network +tag: OkHttp +--- + +自从Android4.4的源码中可以看到`HttpURLConnection`已经替换成`OkHttp`开始( [JakeWharton曾在Twitter表示](https://twitter.com/JakeWharton/status/482563299511250944) ) ,`OkHttp`+`Retrofit`+`RxJava`的组合网络请求一直经久不衰,主流app的网络架构基本都是这样的组合模式,存在即合理,说明`OkHttp`+`Retrofit`+`RxJava`的方式确实给开发,用户体验等带来可观的优势,那么这个系列文章围绕Android的网络展开. + +OkHttp:An HTTP & HTTP/2 client for Android and Java applications + +>Android 历史网络库 +* `HttpClient` 是 Apache 提供的HTTP网络访问接口,从一开始的时候就被引入到了Android的API中; +* `HttpURLConnection` 是一种多用途, 轻量极的HTTP客户端, 提供的API比较简单, 可以容易地去使用和扩展. + +## OkHttp优势 +* 支持HTTP/2, HTTP/2通过使用多路复用技术在一个单独的TCP连接上支持并发, 通过在一个连接上一次性发送多个请求来发送或接收数据 +* 如果HTTP/2不可用, 连接池复用技术也可以极大减少延时 +* 支持GZIP, 可以压缩下载体积 +* 响应缓存可以直接避免重复请求 +* 会从很多常用的连接问题中自动恢复 +* 如果您的服务器配置了多个IP地址, 当第一个IP连接失败的时候, OkHttp会自动尝试下一个IP +* OkHttp还处理了代理服务器问题和SSL握手失败问题,等等... + +## 基本使用 +该系列版本说明 +* OkHttp版本统一:**3.10.0** +* JDK:**1.8+** + +Gradle包导入 +```groovy +// okhttp核心库 +implementation 'com.squareup.okhttp3:okhttp:3.10.0' +// okhttp网络请求拦截日志库 +implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' +``` +### OkHttp请求 +已在[Http VS Https](https://incoder.org/2018/06/22/network-http/#%E8%AF%B7%E6%B1%82%E6%8A%A5%E6%96%87)文章中介绍了,HTTP请求相关内容 + +### OkHttp响应 +已在[Http VS Https](https://incoder.org/2018/06/22/network-http/#%E5%93%8D%E5%BA%94%E6%8A%A5%E6%96%87)文章中介绍了,HTTP响应相关内容 + +## 同步与异步 +`同步`和`异步`关注的是消息通信机制 (synchronous communication/ asynchronous communication) +### 同步 +就是在发出一个 **调用** 时,在没有得到结果之前,该 **调用** 就不返回,但是一旦调用返回,就得到返回值了。 +换句话说,就是由 **调用者** 主动等待这个 **调用** 的结果。 +Okhttp同步(`execute()`):Invokes the request immediately, and blocks until the response can be processed or is in error. + +```java +OkHttpClient client = new OkHttpClient(); + +String run(String url) throws IOException { + Request request = new Request.Builder().url(url).build(); + // 执行同步操作 + Response response = client.newCall(request).execute(); + if (response.isSuccessful()) { + return response.body().string(); + } else { + throw new IOException("Unexpected code " + response); + } +} +``` +### 异步 +**异步** 则与同步相反,**调用** 在发出之后,这个调用就直接返回了,所以没有返回结果。 +换句话说,当一个异步过程调用发出后,**调用者** 不会立刻得到结果。而是在 **调用** 发出后,**被调用者** 通过状态、通知来通知 **调用者**,或通过回调函数处理这个调用。 +Okhttp同步(`enqueue(Callback responseCallback)`):Schedules the request to be executed at some point in the future. + +```java +String url = "https://api.github.com/users/BladeCode"; +OkHttpClient client = new OkHttpClient(); + +Request request = new Request.Builder().url(url).build(); +// 返回response 对象 +Response response = client.newCall(request).enqueue(new Callback() { + + @Override + public void onFailure(Call call, IOException e) { + System.out.println(e.toString()); + } + + @Override + public void onResponse(Call call, Response response) throws IOException { + // 字符串形式表达响应 + System.out.println(response.body().string()); + // 或流的形式表达响应 + System.out.println(response.body().charStream()); + System.out.println(response.body().byteStream()); + } +}); +``` +>注意: +* 响应体太大(超过1MB), 应避免使用 string()方法, 因为它会将把整个文档加载到内存中. +* 对于超过1MB的响应body, 应使用流的方式来处理响应body. 这和我们处理xml文档的逻辑是一致的, 小文件可以载入内存树状解析, 大文件就必须流式解析 + +## OkHttp Get +```java +OkHttpClient client = new OkHttpClient(); + +String run(String url) throws IOException { + Request request = new Request.Builder().url(url).build(); + Response response = client.newCall(request).execute(); + + if (response.isSuccessful()) { + return response.body().string(); + } else { + throw new IOException("Unexpected code " + response); + } +} +``` + +## OkHttp Post +```java +public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); + +OkHttpClient client = new OkHttpClient(); + +String post(String url, String json) throws IOException { + RequestBody body = RequestBody.create(JSON, json); + Request request = new Request.Builder() + .url(url) + .post(body) + .build(); + + Response response = client.newCall(request).execute(); + + if (response.isSuccessful()) { + return response.body().string(); + } else { + throw new IOException("Unexpected code " + response); + } + +} +``` + +### 提交String +```java +public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); + +private final OkHttpClient client = new OkHttpClient(); + +public void run() throws Exception { + String postBody = "" + + "Releases\n" + + "--------\n" + + "\n" + + " * _1.0_ May 6, 2013\n" + + " * _1.1_ June 15, 2013\n" + + " * _1.2_ August 11, 2013\n"; + + Request request = new Request.Builder() + .url("https://api.github.com/markdown/raw") + .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody)) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + System.out.println(response.body().string()); +} +``` +> 注意:当提交数据大于1MB,请使用流的方式 + +### 提交流 +```java +public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); + +private final OkHttpClient client = new OkHttpClient(); + +public void run() throws Exception { + RequestBody requestBody = new RequestBody() { + @Override + public MediaType contentType() { + return MEDIA_TYPE_MARKDOWN; + } + + @Override + public void writeTo(BufferedSink sink) throws IOException { + sink.writeUtf8("Numbers\n"); + sink.writeUtf8("-------\n"); + for (int i = 2; i <= 997; i++) { + sink.writeUtf8(String.format(" * %s = %s\n", i, factor(i))); + } + } + + private String factor(int n) { + for (int i = 2; i < n; i++) { + int x = n / i; + if (x * i == n) return factor(x) + " × " + i; + } + return Integer.toString(n); + } + }; + + Request request = new Request.Builder() + .url("https://api.github.com/markdown/raw") + .post(requestBody) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + System.out.println(response.body().string()); +} +``` + +### 提交文件 +```java +public static final MediaType MEDIA_TYPE_MARKDOWN = MediaType.parse("text/x-markdown; charset=utf-8"); + +private final OkHttpClient client = new OkHttpClient(); + +public void run() throws Exception { + File file = new File("README.md"); + + Request request = new Request.Builder() + .url("https://api.github.com/BladeCode/raw") + .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file)) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + System.out.println(response.body().string()); +} +``` + +### 提交表单 +使用`FormEncodingBuilder`来构建和HTML
标签相同效果的请求体。键值对将使用一种HTML兼容形式的URL编码来进行编码 + +```java +private final OkHttpClient client = new OkHttpClient(); + +public void run() throws Exception { + RequestBody formBody = new FormEncodingBuilder() + .add("search", "Jurassic Park") + .build(); + Request request = new Request.Builder() + .url("https://en.wikipedia.org/w/index.php") + .post(formBody) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + System.out.println(response.body().string()); +} +``` + +### 提交分块请求 +`MultipartBuilder`可以构建复杂的请求体,与HTML文件上传形式兼容。多块请求体中每块请求都是一个请求体,可以定义自己的请求头。这些请求头可以用来描述这块请求,例如他的`Content-Disposition`。如果`Content-Length`和`Content-Type`可用的话,他们会被自动添加到请求头中。 + +```java +private static final String IMGUR_CLIENT_ID = "..."; +private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png"); + +private final OkHttpClient client = new OkHttpClient(); + +public void run() throws Exception { + // Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image + RequestBody requestBody = new MultipartBuilder() + .type(MultipartBuilder.FORM) + .addPart( + Headers.of("Content-Disposition", "form-data; name=\"title\""), + RequestBody.create(null, "Square Logo")) + .addPart( + Headers.of("Content-Disposition", "form-data; name=\"image\""), + RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png"))) + .build(); + + Request request = new Request.Builder() + .header("Authorization", "Client-ID " + IMGUR_CLIENT_ID) + .url("https://api.imgur.com/3/image") + .post(requestBody) + .build(); + + Response response = client.newCall(request).execute(); + if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + + System.out.println(response.body().string()); +} +``` + +## 附录 +* [怎样理解阻塞非阻塞与同步异步的区别](https://www.zhihu.com/question/19732473) +* [OkHttp使用教程](http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0106/2275.html) \ No newline at end of file diff --git a/source/_posts/rap1.md b/source/_posts/rap1.md new file mode 100644 index 000000000..c157095c2 --- /dev/null +++ b/source/_posts/rap1.md @@ -0,0 +1,76 @@ +--- +title: Api 文档管理系统 RAP1环境搭建 +date: 2018-03-27 10:19:25 +categories: Api +tag: RAP +--- + +前后端分离的路上,一款强大的API管理工具,可以降低沟通成本,大大提高开发效率,节省的时间,我们来做更有意义的事情。 + +API管理工具又很多,选择适合自身需求的就是最好 + +这里以[阿里妈妈](https://thx.github.io)出品的[RAP](https://thx.github.io/RAP)产品;目前RAP分为: ~~[RAP1](https://github.com/thx/RAP)~~,[RAP2](https://github.com/thx/rap2-delos) + +>虽然RAP1不再添加新功能,只做维护工作,介于RAP2目前还不是很成熟,本篇文章先讲RAP1的搭建过程(虽然官方[Wiki](https://github.com/thx/RAP/wiki)已经有很详细的部署教程,但在部署过程中还是遇到一些问题,因此就记录下来) + +如果你不需要搭建,可以直接访问RAP1提供的服务[http://rapapi.org](http://rapapi.org) + +## 项目构建 + +* 安装环境:Windows 10 x64 +* 准备工具:[Git](https://git-scm.com/downloads),[IDEA](https://www.jetbrains.com/idea/download),[JDK1.8+](https://www.java.com/zh_CN/download/manual.jsp),[Tomcat8*](https://tomcat.apache.org/download-80.cgi),[MySQL](https://www.mysql.com/cn/downloads),[Redis3+](https://redis.io/download) + +这里Git,IDEA,JDK1.8,Tomcat8*,MySQL不再赘述安装步骤以及环境配置 + +### 安装基本工具 +#### Redis +由于Redis 官方并未支持Windows系统,因此借助MicrosoftArchive团队所提供的[Windows Redis安装包](https://github.com/MicrosoftArchive/redis/releases),这里下载最新的`Redis-x64-3.2.100.msi` + +* 以管理员身份运行安装包`Redis-x64-3.2.100.msi` + 1. 添加环境变量 + ![env](https://res.cloudinary.com/incoder/image/upload/v1525517089/blog/gitpages-redis-env-var.png) + 2. 默认`6379`端口 + ![port](https://res.cloudinary.com/incoder/image/upload/v1525517270/blog/gitpages-redis-port.png) + 3. 检查Redis服务,是否已经启动 + ![serve](https://res.cloudinary.com/incoder/image/upload/v1525517284/blog/gitpages-redis-serve.png) + + >其他默认即可,不要设置Memory Limit + +## 构建项目 +### 获取源代码 +```sh +git clone git@github.com:thx/RAP.git +git checkout release +``` + +>确保您正确的切换到release分支,否则会出现少包,因为master分支引用一些不对外公开的内部组件,不提供给外部用户使用 +### 导入到IDEA +IDEA==>Open==>RAP + +### 初始化数据库 +执行脚本文件:RAP\src\main\resources\database\\`initialize.sql` + +### 修改配置文件 +文件:RAP\src\main\resources\database\\`config.properties` +修改:数据库`用户名`及`密码` +![update](https://res.cloudinary.com/incoder/image/upload/v1525517302/blog/gitpages-rap1-update-database-config.png) +## 启动项目 +1. Edit config +![config](https://res.cloudinary.com/incoder/image/upload/v1525517326/blog/gitpages-rap1-tomcat-config.png) +2. Create Tomcat +![create](https://res.cloudinary.com/incoder/image/upload/v1525517350/blog/gitpages-rap1-tomcat-create.png) +3. Deploy war +![deploy](https://res.cloudinary.com/incoder/image/upload/v1525517364/blog/gitpages-rap1-tomcat-deploy.png) +4. Deploy success +![success](https://res.cloudinary.com/incoder/image/upload/v1525517384/blog/gitpages-rap1-deploy-success.png) + +注意成功部署后,请`注册`新账号登录 + +至此,RAP1的本机部署已经完成。 + +## 其他 +* [RAP1学习中心](http://thx.github.io/RAP/study.html) + 部分同学无法查看视频,请异步至[issues](https://github.com/thx/RAP/issues/935) +* [RAP1 Wiki](https://github.com/thx/RAP/wiki)文档 +* [Mockjs](http://mockjs.com) +* [RAP2环境搭建教程](https://www.incoder.org/2018/03/27/rap2) \ No newline at end of file diff --git a/source/_posts/rap2.md b/source/_posts/rap2.md new file mode 100644 index 000000000..322007e22 --- /dev/null +++ b/source/_posts/rap2.md @@ -0,0 +1,238 @@ +--- +title: Api 文档管理系统 RAP2环境搭建 +date: 2018-03-27 10:20:10 +update: 2018-08-01 22:10:11 +categories: Api +tag: RAP +--- + +RAP2是采用前后端分离的形式,因此搭建完整的RAP2需要 **服务端:**[rap2-delos](https://github.com/thx/rap2-delos),**客户端:**[rap2-dolores](https://github.com/thx/rap2-dolores) 同时部署 + +部署RAP2需要亲具有Node+Linux+MySQL的运维知识,如果亲对此不是很了解,建议用[http://rap2.taobao.org](http://rap2.taobao.org) 线上版本就可以 + +由于 **客户端:**[rap2-dolores](https://github.com/thx/rap2-dolores) 是建立在 **服务端:**[rap2-delos](https://github.com/thx/rap2-delos) 基础上,因此先搭建服务端应用 + +> * 截至到2018-08-01 delos 并没有发布Tag版本,应该还处于功能开发前期阶段吧。本教程是在CentOS机器上实战部署 +> * 然而安装部署并不是顺利,因此记录踩过的坑(别问我为啥不用Docker,因为我司分配的机器无法满足Docker的最低内核版本),安装环境介绍:Redis,delos,dolores均在一台服务器,MySQL使用已存在的服务 + +## 安装基本工具 +* [Git](https://git-scm.com/downloads) +* [Node 8.9.4+](https://nodejs.org/zh-cn/download) +* [Redis 4.0+](https://redis.io/download) +* [MySQL 5.7+](https://www.mysql.com/cn/downloads) + +以上基本工具请根据自身需要,下载对应系统安装包,请自行解决安装配置等问题,这里不做过多说明 + +> Redis 安装可参考[Linux 常用应用安装](https://incoder.org/2018/05/15/linux-build); +Redis 最好用非安全模式启动 + +## 服务端delos环境搭建 + +### 构建项目 + +> 构建项目前,请确认Node,Redis,MySQL服务均能正常使用 + +``` sh +git clone https://github.com/thx/rap2-delos.git +``` + +### 环境配置 + +#### 创建数据库 + +* Mac or Linux + ```sql + mysql -e 'CREATE DATABASE IF NOT EXISTS RAP2_DELOS_APP DEFAULT CHARSET utf8 COLLATE utf8_general_ci'; + ``` +* Windows 环境 + + 进入mysql命令后执行 + ```sql + CREATE DATABASE IF NOT EXISTS RAP2_DELOS_APP DEFAULT CHARSET utf8 COLLATE utf8_general_ci; + ``` +#### 配置文件 + +目录:rap2-delos/src/config +文件:`config.dev.ts`;其中dev,表示开发环境,其他同理 +修改:`config.dev.ts`文件中`db`对象中`username`,`password`参数与**本地**或者**开发环境**的数据库信息匹配 + +### 启动项目 + +#### 安装项目依赖包 + +项目根目录下执行 + +```sh +# 安装项目所需依赖 +npm install +# 全局安装PM2 +npm install -g pm2 +``` + +#### 安装TypeScript编译包 + +```sh +npm install typescript -g +``` + +> 如果下载缓慢,请使用[淘宝npm镜像](https://npm.taobao.org) + +#### 初始化数据库 + +项目根目录下执行(该过程比较慢,耐心等待初始化完成) + +```npm +npm run create-db +``` + +#### 编译启动项目 +执行mocha测试用例和js代码规范检查 +```sh +npm run check +``` + +* 开发模式 +启动开发模式的服务器 监视并在发生代码变更时自动重启(第一次运行比较慢,请耐心等待) + ```sh + npm run dev + ``` +* 生产模式 + 启动生产模式服务器 + ```sh + npm start + ``` + +看到浏览器中如下提示,表示**服务端delos**已经部署成功 +>RAP2后端服务已启动,请从前端服务(rap2-dolores)访问。 RAP2 back-end server is started, please visit via front-end service (rap2-dolores). + +或者在程序控制台出现如下Log,表示**服务端delos**已经部署成功 +![delos](https://res.cloudinary.com/incoder/image/upload/v1525517437/blog/gitpages-rap2-delos-success.png) + +### 常见问题 + +#### 部署问题 +1. Windows下执行`npm run build`,提示`'rm' 不是内部或外部命令,也不是可运行的程序或批处理文件` + + 原因:`rm` 是Linux下命令, + 解决方法:Windows系统可使用 `git bash` 打开该项目,执行该命令 + +2. 执行`npm run create-db`命令,提示`Unable to connect to the database:{ SequelizeAccessDeniedError: Access denied for user 'root'@'localhost' (using password:NO)}` + + 原因:未修改`rap2-delos/src/config`目录下数据库配置文件,或者是与文件中的数据库信息与之连接的数据库信息不匹配 + 解决方法:修改`config.dev.ts`文件数据库配置信息 + >如果修改正确无误后,执行`npm run create-db`依旧出错,那么查看该项目中是否已经存在`dist`目录,如果有,请按照如上修改对应的数据库配置信息 +3. 执行`npm run dev`命令,提示`Error: listen EADDRINUSE :::8080` + 原因:8080端口被占用 + 解决方法:杀掉占用8080端口的应用 +4. 执行`npm install` 命令,提示`hiredis` 编译无法通过 + 原因:无权限操作`rap2-delos/node_modules/hiredis`路径 + 解决方法:`sudo npm install` + > 如果提示`sudo: npm: command not found`,请参考[stackoverflow-npm](https://stackoverflow.com/questions/31472755/sudo-npm-command-not-found),[stackoverflow-node](https://stackoverflow.com/questions/4976658/on-ec2-sudo-node-command-not-found-but-node-without-sudo-is-ok) +5. 执行`npm run dev`可以正常启动,`npm start`命令无法正常启动服务 + 原因:请使用`pm2 logs`查看日志具体定位 + 示例:由于Redis的安全模式,不能正常使用 + ```bash + ReplyError: Ready check failed: DENIED Redis is running in protected mode because protected mode is enabled, no bind address was specified, no authentication password is requested to clients. In this mode connections are only accepted from the loopback interface. If you want to connect from external computers to Redis you may adopt one of the following solutions: + + 1) Just disable protected mode sending the command 'CONFIG SET protected-mode no' from the loopback interface by connecting to Redis from the same host the server is running, however MAKE SURE Redis is not publicly accessible from internet if you do so. Use CONFIG REWRITE to make this change permanent. + 2) Alternatively you can just disable the protected mode by editing the Redis configuration file, and setting the protected mode option to 'no', and then restarting the server. + 3) If you started the server manually just for testing, restart it with the '--protected-mode no' option. + 4) Setup a bind address or an authentication password. + NOTE: You only need to do one of the above things in order for the server to start accepting connections from the outside. + ``` + 解决方法: 使用`--protected-mode no`方式启动 + +## 客户端dolores环境搭建 + +### 构建项目 +#### 获取源代码 +``` sh +git clone https://github.com/thx/rap2-dolores.git +``` + +### 环境配置 + +#### 配置文件 + +目录:rap2-dolores/src/config +文件:`config.dev.ts`;其中dev,表示开发环境,其他同理 +修改:`config.dev.ts`文件,`serve`地址是 **服务端** `rap2-delos` 部署成功后的地址,默认:`'http://localhost:8080'` + +### 启动项目 + +#### 安装项目依赖包 + +项目根目录下执行 + +```sh +npm install +``` + +> 如果下载缓慢,请使用[淘宝npm镜像](https://npm.taobao.org) + +#### 编译启动项目 + +* 开发模式 +自动监视改变后重新编译 + ```sh + npm run dev + ``` + 备注:测试用例 + ```sh + npm run test + ``` +* 生产模式 +编译React生产包 + ```sh + npm run build + ``` + 用serve命令或nginx服务器路由到编译产出的build文件夹作为静态服务器即可 + ```sh + serve -s ./build -p 80 + ``` + +看到浏览器中出现登录页面,表示部署成功 +![dolores](https://res.cloudinary.com/incoder/image/upload/v1525517454/blog/gitpages-rap2-dolores-success.png) + +### 常见问题 + +#### 部署问题 +1. 执行`npm run dev`,提示 + ```sh + return process.dlopen(module,path._makeLong(filename)) + ... + ...node_modules\node-sass\vendor\win32-x64-57\binding.node is not a valid Win32 application... + ``` + + 原因:项目依赖包`node-sass`没有安装完全 + 解决方法:`npm install node-sass` + +2. 项目运行起来,但一直停留在加载动画那里 + + 浏览器控制台输出: + `GET http://127.0.0.1:8080/account/info ==>> + Failed to load http://127.0.0.1:8080/account/info` + + 原因:未修改`rap2-delos/src/config`目录下服务端连接地址,或者修改结果与[rap2-dolores](https://github.com/thx/rap2-dolores)实际提供服务地址不匹配 + 解决方法:修改`config.dev.ts`文件serve配置信息 + >如果Windows系统修改正确无误后,依旧出错,那么查看hosts(路径:C:\Windows\System32\drivers\etc)中127.0.0.1的IP前是否有`#`,如果有请取消注释 + +## 其他 +### MySQL 运行问题 +* 错误一 +![mysql](https://res.cloudinary.com/incoder/image/upload/v1525517475/blog/gitpages-rap2-mysql.png) +原因:MySQL 集成命令没有加入系统的环境变量 +解决方法:将安装的MySQL Service路径加入系统变量 +![path](https://res.cloudinary.com/incoder/image/upload/v1525517495/blog/gitpages-rap2-mysql-path.png) +* 错误二 +![create](https://res.cloudinary.com/incoder/image/upload/v1525517523/blog/gitpages-rap2-mysql-create.png) +原因:没有数据库链接权限 +解决方法:先登录用root数据库,密码具体看自己数据库当时设置的密码 + +### 如何获取更新 +目前请选择`master`分支源码,后续其他分支请看相应分支说明文档。在开发环境中git pull来获取最新的源码更新,每一期更新都会有对应的update.md请关注并按照上面的指示进行升级工作。 + +## 附录 +* [redis如何后台启动](https://blog.csdn.net/ksdb0468473/article/details/52126009) +* [Redis配置文件介绍](http://www.cnblogs.com/ysocean/p/9074787.html) +* [PM2实用入门指南](https://www.cnblogs.com/chyingp/p/pm2-documentation.html) \ No newline at end of file diff --git a/source/_posts/realm.md b/source/_posts/realm.md new file mode 100644 index 000000000..e36d12b0d --- /dev/null +++ b/source/_posts/realm.md @@ -0,0 +1,193 @@ +--- +title: Realm 数据库快速上手 +date: 2018-04-24 01:11:10 +categories: DataBase +tag: Realm +--- + +![realm-db](https://res.cloudinary.com/incoder/image/upload/v1525517554/blog/gitpages-realm-mobile-db.png) +Android 供了多种选项来保存永久性应用数据。 +* [Shared preferences](https://developer.android.google.cn/guide/topics/data/data-storage.html?hl=zh-cn#pref) +* [Internal file storage](https://developer.android.google.cn/guide/topics/data/data-storage.html?hl=zh-cn#filesInternal) +* [External file storage](https://developer.android.google.cn/guide/topics/data/data-storage.html?hl=zh-cn#filesExternal) +* [Databases](https://developer.android.google.cn/guide/topics/data/data-storage.html?hl=zh-cn#db) +* [Network](https://developer.android.google.cn/guide/topics/data/data-storage.html?hl=zh-cn#netw) + +其中数据库存储是一种必备技能,而衍生的mobile db也是层出不穷,本节主要介绍全平台(除Android,iOS,macOS外还支持web,桌面应用)[Realm](https://realm.io)数据库在Android上的使用 + +## 快速上手 + +* [Android Studio 1.5.1+](https://developer.android.google.cn/studio/index.html?hl=zh-cn) +* JDK1.7+ +* Android API 9+ +* Realm 默认情况下使用内部存储(internal storage),一般来说,这个文件位于`/data/data//files/`,文件名:`default.realm` + +### 集成 + +* 在项目的 build.gradle 文件中添加如下 class path 依赖 +```groovy +buildscript { + repositories { + jcenter() + } + dependencies { + classpath "io.realm:realm-gradle-plugin:5.0.0" + } +} +``` +* 在 app 的 build.gradle 文件中应用 realm-android 插件 +```groovy +apply plugin: 'realm-android' +``` + +### 初始化 +* 默认初始化 +```java +public class MyApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + // 默认Realm的配置文件 + Realm.init(this); + } +} +``` +* 自定义初始化 +```java +public class MyApplication extends Application { + @Override + public void onCreate() { + super.onCreate(); + // 自定义配置Realm + initRealm(); + } + + private void initRealm() { + RealmConfiguration config = new RealmConfiguration.Builder() + .name("myrealm.realm") // 命名文件名:myrealm.realm + .inMemory() // 一个非持久化的、存在于内存中的 Realm 实例 + .encryptionKey(getKey()) // 数据库加密key + .schemaVersion(2) // 数据库结构版本号 + .modules(new MySchemaModule()) // 数据库结构对象 + .migration(new MyMigration()) // 数据库迁移 + .build(); + Realm.setDefaultConfiguration(config); + } +} +``` +> 1. Realm 实例是线程单例化的,也就是说多次在同一线程调用静态构建器会返回同一 Realm 实例 +2. 使用同样的名称同时创建“内存中的”Realm 和常规的(持久化)Realm 是不允许的 + +### 字段类型 +Realm 支持以下字段类型:`boolean`、`byte`、`short`、`int`、`long`、`float`、`double`、`String`、`Date`和`byte []`。整数类型 `short`、`int` 和 `long` 都被映射到 Realm 内的相同类型(实际上为 `long` )。 + +* @Required修饰类型和空值(null) + >Realm强制禁止空值(null)被存储 + 只有`Boolean`,`Byte`,`Short`,`Integer`,`Long`,`Float`,`Double`,`String`,`byte[]`,`Date`可被修饰 +* @Ignore标识一个字段不应该被保存到 Realm +* @Index为字段增加搜索索引 + > 仅支持索引的属性类型包括:`String`,`byte`,`short`,`int`,`long`,`boolean`和`Date` +* @PrimaryKey + > 必须为字符串(`String`)或整数(`short`,`int`,`long`)以及它们的包装类型(`Short`,`Int`,`Long`) + +### 声明Realm数据模型 + +#### RealmObject +可以把RealmObject 当作POJO使用 + +```java +public class User extends RealmObject { + +} +``` + +#### RealmModel +```java +@RealmClass +public class User implements RealmModel { + +} +``` + +### 关系 + +#### 多对一 +```java +public class Contact extends RealmObject { + private Email email; + // Other fields… +} + +public class Email extends RealmObject { + private String address; + private boolean active; + // ... setters and getters left out +} +``` + +#### 多对多 + +```java +public class Contact extends RealmObject { + public String name; + public RealmList emails; +} + +public class Email extends RealmObject { + public String address; + public boolean active; +} +``` + +### CRUD +* 所有的写操作(添加、修改和删除对象),必须包含在写入事务(transaction)中 +* 在提交期间,所有更改都将被写入磁盘,并且,只有当所有更改可以被持久化时,提交才会成功。通过取消一个写入事务,所有更改将被丢弃。 +* 益于 Realm 的 MVCC 架构,当正在进行一个写入事务时读取操作并不会被阻塞!这意味着,除非你需要从多个线程进行并发写入操作,否则,你可以尽量使用更大的写入事务来做更多的事情而不是使用多个更小的写入事务。 + +#### 增 +* +* 事务执行 +```java +Realm realm = Realm.getDefaultInstance(); +realm.executeTransaction(new Realm.Transaction() { + @Override + public void execute(Realm realm) { + User user = realm.createObject(User.class); + user.setName("John"); + user.setEmail("john@corporation.com"); + } +}); +``` +* 异步事务 +```java +Realm realm = Realm.getDefaultInstance(); +realm.executeTransactionAsync(new Realm.Transaction() { + @Override + public void execute(Realm bgRealm) { + User user = bgRealm.createObject(User.class); + user.setName("John"); + user.setEmail("john@corporation.com"); + } +}, new Realm.Transaction.OnSuccess() { + @Override + public void onSuccess() { + // Transaction was a success. + } +}, new Realm.Transaction.OnError() { + @Override + public void onError(Throwable error) { + // Transaction failed and was automatically canceled. + } +}); +``` + +>OnSuccess 和 OnError 并不是必须重载的,重载了的回调函数会在事务成功或者失败时在被调用发生的线程执行。 +#### 删 + +#### 改 + +#### 查 + +## Realm进阶 + +## Realm云 diff --git a/source/_posts/rxjava.md b/source/_posts/rxjava.md new file mode 100644 index 000000000..1e9a5adf9 --- /dev/null +++ b/source/_posts/rxjava.md @@ -0,0 +1,371 @@ +--- +title: RxJava 入门 +date: 2018-10-02 10:02:00 +categories: RxJava +tag: [RxJava] +--- + +RxJava – Reactive Extensions for the JVM – a library for composing **asynchronous** and **event-based** programs using **observable** sequences for the Java VM.(一个在 Java VM 上使用可观测的序列( **观察者模式** )来组成 **异步** 的、**基于事件**的程序的库). + +在实际开发过程中,RxJava已是一个不可或缺的组件,因此对于RxJava的学习和思考,记录分享是很重要的一个环节 + +本系列文章主要: +1. [RxJava 入门](https://incoder.org/2018/10/02/rxjava/) +2. RxJava 实际应用 +3. RxJava 源码剖析 + +目前来说,RxJava有两个版本,RxJava1 与 RxJava2 两个版本之间虽然存在很多不同,但它们的本质是相同,由于对于RxJava1 **已废弃**,因此建议没有学习或者是使用过,可直接上手学习RxJava2(在学习过程中部分地方还是会有RxJava1相关的说明,但这不是重点) + +文章使用RxJava版本如下: +* `implementation 'io.reactivex:rxjava:1.3.0'` +* `implementation 'io.reactivex.rxjava2:rxjava:2.2.1'` +* 项目示例:[rc-cluster-network](https://github.com/RootCluster/rc-cluster-network) + +>由于一个项目中RxJava1与RxJava2并不能共存,因此实际参考项目中仅RxJava2示例 + +## RxJava 基础 + +### RxJava1 VS RxJava2 + +![rxjava1 vs rxjava2](https://res.cloudinary.com/incoder/image/upload/v1538815280/blog/RxJava1_vs_RxJava2.png) +>以上是列举出不同版本间主要的变换,其它更细节部分,请查看官方[Wiki](https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0) + +### 关键词 + +#### RxJava1 +* Observable (可观察者,即被观察者) +* Observer (观察者) +* subscribe (订阅) +* 事件 + +>Observable和Observer通过subscribe()方法实现订阅关系,从而Observable可以在需要的时候发出事件来通知Observer + +#### RxJava2 +* Observable (可观察者,即被观察者) +* Observer (观察者) +* ObservableEmitter (发射器) +* 事件 + +>RxJava2中`Subscrber`被`ObservableEmitter`取代,`Observer`中多了一个回调方法 `onSubscribe()`,传递参数为`Disposable` + +* ObservableEmitter:Emitter是发射器的意思,这个就是用来发出事件,它可以发出三种类型的事件,通过调用`emitter`的`onNext(T value)`,`onComplete()`和`onError(Throwable e)`就可以分别发出`next`事件,`complete`事件和`error`事件 +* Disposable:字面意思是一次性用品,用完即可丢弃。在RxJava中可以理解成两根管道间的阀门,当调用它的的`dispose()`方法时,它就将两根管道切断,从而导致下游收不到事件,即相当于`Subsciption` + +### 基本实现 + +#### Create Observable +![operators](https://raw.githubusercontent.com/wiki/ReactiveX/RxJava/images/rx-operators/legend.png) + +##### RxJava1 + +```java +Observable observable = Observable.unsafeCreate(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + subscriber.onNext("Hello"); + subscriber.onNext("World"); + subscriber.onNext("RxJava1"); + subscriber.onCompleted(); + } +}); +``` +>1.2.7版本后,Observable的`create()`方法已被废弃,如果没有特殊需求,可以使用`unsafeCreate()`代替,构造Obaservable实例 + +##### RxJava2 + +```java +Observable observable = Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + emitter.onNext("Hello"); + emitter.onNext("World"); + emitter.onNext("RxJava2"); + emitter.onComplete(); + } +}); +``` +`unsafeCreate()/create()`方法是RxJava最基本创建时间序列的方法。基于这个方法,RxJava还提供了一些方法来快捷创建事件队列 +* just(T...):将传入的参数依次发送出来 +```java +Observable observable = Observable.just("Hello", "World", "RxJava"); +// 将会依次调用: +// onNext("Hello"); +// onNext("World"); +// onNext("RxJava"); +// onCompleted(); +``` +* from(T[])/from(Iierabble):将传入的数组或Iterable拆分成具体对象后,依次发送出来 +```java +String[] words = {"Hello", "World", "RxJava"}; +Observable observable = Observable.from(words); +// 将会依次调用: +// onNext("Hello"); +// onNext("World"); +// onNext("RxJava"); +// onCompleted(); +``` + +##### Flowable +Flowable是RxJava2中新增的类,专门应对背压(Backpressure)问题,但这个概念并不是RxJava2中引入的概念。 + +出现Flowable的原因:即生产者(被观察者发送事件)的速度与消费者(观察者接收所有事件)的速度不匹配,从而导致观察者无法及时响应/处理所有发送过来的事件问题,最终导致缓冲区溢出,事件丢失 & OOM等问题。 + +一般情况,被观察者发送事件速度 > 观察者接收事件速度。比如:点击过快造成等 + +```java +Flowable.create(new FlowableOnSubscribe() { + + @Override + public void subscribe(FlowableEmitter emitter) throws Exception { + emitter.onNext("Hello"); + emitter.onNext("World"); + emitter.onNext("RxJava2"); + emitter.onComplete(); + } +}, BackpressureStrategy.ERROR) + .subscribeOn(Schedulers.computation()) + .observeOn(Schedulers.newThread()) + .subscribe(new Consumer() { + @Override + public void accept(String s) throws Exception { + // 相当于onNext + Thread.sleep(1000); + System.out.println("accept"); + } + }, new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + // 相当于onError + System.out.println("accept" + throwable.toString()); + } + }); +``` +Flowable并不是订阅就开始发送数据,而是需等到执行`Subscription.request()`才开始发送数据 + +#### Create Observer + +##### RxJava1 +```java +Observer observer = new Observer() { + @Override + public void onCompleted() { + System.out.println("Completed!"); + } + + @Override + public void onError(Throwable e) { + System.out.println("Error" + e); + } + + @Override + public void onNext(String s) { + System.out.println("Next" + s); + } +}; +``` +除了`Observer`接口之外,RxJava内置了一个实现`Observer`的抽象类`Subscriber`,`Subscriber`对`Observer`接口进行了一些扩展,但它们的基本使用方式是完全一样 +```java +Subscriber subscriber = new Subscriber() { + @Override + public void onCompleted() { + System.out.println("Completed!"); + } + + @Override + public void onError(Throwable e) { + System.out.println("Error" + e); + } + + @Override + public void onNext(String s) { + System.out.println("Next" + s); + } +}; +``` +实际,在RxJava的subscribe过程中,`Observer`也总是会先被转成一个`Subscriber`再使用。对于使用者来说`Observer`与`Subscriber`的主要区别是: +1. onStart():这是`Subscriber`增加的方法。它会再subscribe刚开始,而事件还未发送之前被调用,可以用于做一些准备工作,例如:数据的重置等操作。这是一个可选方法,默认情况下它的实现为空。 +>注意: +>对于准备工作有线程要求,`onStart()`就不适用,因为它总是再subscribe所发生的线程被调用,而不能指定线程。要指定线程来准备工作,可以使用`doOnSubscribe()`方法 +2. unsubscribe():`Subscriber`所实现的另一个接口`Subscription`的方法,用于取消订阅。在这个方法被调用后,`Subscriber`将不再接收事件。 +>注意: +>* 一般需要在调用`unsubscribe()`方法前,需要使用`isUnsubscribed()`先判断状态。 +>* 不再使用的时候尽快在合适的地方调用`unsubscribe()`来解除引用关系,以避免内存泄漏 + +##### RxJava2 +```java +Observer observer = new Observer() { + @Override + public void onSubscribe(Disposable d) { + System.out.println("Subscribe: " + d); + } + + @Override + public void onNext(String s) { + System.out.println("Next: " + s); + } + + @Override + public void onError(Throwable e) { + System.out.println("Error: " + e); + } + + @Override + public void onComplete() { + System.out.println("Complete !"); + } +}; +``` + +#### Subscribe +创建好`Observable`和`Observer`之后,再用`subscribe()`方法将它们联结起来 +```java +observable.subscribe(observer); +// 或者(仅支持RxJava1) +observable.subscribe(subscriber); +``` + +#### chain calls +以上三步是使用RxJava进行异步操作的基本过程,创建`被观察者`,创建`观察者`,`被观察者`订阅`观察者`,我们可以通过链式调用形式完成操作 + +```java +Observable.unsafeCreate(new Observable.OnSubscribe() { + @Override + public void call(Subscriber subscriber) { + subscriber.onNext("Hello"); + subscriber.onNext("World"); + subscriber.onNext("RxJava1"); + subscriber.onCompleted(); + } +}).subscribe(new Observer() { + @Override + public void onCompleted() { + System.out.println("Completed!"); + } + + @Override + public void onError(Throwable e) { + System.out.println("Error" + e); + } + + @Override + public void onNext(String s) { + System.out.println("Next" + s); + } +}); +``` +#### 简化订阅 +除了`subscribe(Observer)`和`subscribe(Subscriber)(仅支持RxJava1)`,`subscribe()`还支持不完整的简化订阅回调 + +```java +// RxJava1 +Action1 onNextAction = new Action1() { + @Override + public void call(String s) { + System.out.println("onNext" + s); + } +}; + +Action1 onErrorAction = new Action1() { + @Override + public void call(Throwable throwable) { + System.out.println("onError" + throwable); + } +}; + +Action0 onCompletedAction = new Action0() { + @Override + public void call() { + System.out.println("completed"); + } +}; + +// RxJava2 +Consumer onNextAction = new Consumer() { + @Override + public void accept(String s) throws Exception { + System.out.println("onNext" + s); + } +}; + +Consumer onErrorAction = new Consumer() { + @Override + public void accept(Throwable throwable) throws Exception { + System.out.println("onError" + throwable); + } +}; + +Action onCompleteAction = new Action() { + @Override + public void run() throws Exception { + System.out.println("complete"); + } +}; + +// 自动创建 Subscriber ,并使用 onNextAction 来定义 onNext() +observable.subscribe(onNextAction); +// 自动创建 Subscriber ,并使用 onNextAction 和 onErrorAction 来定义 onNext() 和 onError() +observable.subscribe(onNextAction, onErrorAction); +// 自动创建 Subscriber ,并使用 onNextAction、 onErrorAction 和 onCompletedAction 来定义 onNext()、 onError() 和 onCompleted() +observable.subscribe(onNextAction, onErrorAction, onCompletedAction/onCompleteAction); + +``` + +## RxJava 线程 +在RxJava的默认规则中,事件的发出和消费都是在同一个线程(在哪个线程条用`subscriber()`,就在哪个线程生产事件;在哪个线程生产事件,就在哪个线程消费事件),也就是说,以上RxJava基本操作,实现出来的只是一个`同步`的观察者模式。而观察者模式本身的目的是“后台处理,前台回调”的`异步`机制,因此在RxJava中通过`Scheduler`来对线程进行管理 + +### Scheduler API +Scheduler相当于线程控制器,RxJava通过它指定代码应该运行在什么样的线程,其中RxJava中内置了几个Scheduler +* Schedulers.computation():计算所使用的`Scheduler`。这个计算值的是CPU密集型计算,即不会被I/O操作等限制性能的操作。不要把I/O操作放在`computation()`中,否则I/O操作的等待时间会浪费CPU。 +* Schedulers.form(Executor): +* Schedulers.immediate():直接在当前线程运行,相当于不指定线程,这也是默认的Scheduler. +* Schedulers.io():I/O操作(读写文件,读写数据库,网络信息交换等)所使用的Scheduler。行为模式和newThread()差不多,区别在于io()的内部实现是一个无数量上限的线程池,可以重用空闲的线程,因此多数情况下io()比newThread()更高效 +* Schedulers.newThread():总是启用新线程,并在新线程执行操作 +* Schedulers.single()『仅RxJava2中存在』: +* Schedulers.test()『仅RxJava1中存在』:顾名思义,这是一个测试 +* Schedulers.trampoline(): +* AndoroidSchedulers.mainThread():指定操作在Android的主线程 + +有了Scheduler,我们可以使用`subscribeOn()`和`observeOn()`方法来对线程进行控制 +* subscribeOn():指定subscribe()所发生的线程,即Observable.OnSubscribe被激活时所处的线程,或者叫做事件的产生的线程 +* observeOn():指定Subscriber所运行的线程。或者叫做事件的消费线程 + +```java +// RxJava2 +Observable.create(new ObservableOnSubscribe() { + @Override + public void subscribe(ObservableEmitter emitter) throws Exception { + emitter.onNext("Hello"); + emitter.onNext("World"); + emitter.onNext("RxJava2"); + emitter.onComplete(); + } +}) + // 指定 subscribe() 发生在 IO 线程 + .subscribeOn(Schedulers.io()) + // 指定 Subscriber 的回调发生在主线程 + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Consumer() { + @Override + public void accept(String s) throws Exception { + System.out.println(s); + } + }); +``` + +## 操作符 +说RxJava好用,还有一个原因是RxJava提供了大量的操作符,这些操作符保证了在面都复杂的逻辑下,依旧可以是逻辑清晰的链式调用 + +![RxJava_action](https://res.cloudinary.com/incoder/image/upload/v1538815494/blog/RxJava_action.png) + +## 总结 +本篇文章作为RxJava系列的学习的入门,不会讲解相关操作的原理等 +学习目的 +* 了解RxJava1与RxJava2之间的不同点, +* 了解RxJava的线程管理, +* 掌握完成RxJava的基本操作, +* 清楚RxJava操作符,以及分别适用于什么样的场景 + +## 附录 +文章中部分原话引用了参考学习文章的原话,在这里向那些无私分享的大佬致敬 +* [给 Android 开发者的 RxJava 详解](https://gank.io/post/560e15be2dca930e00da1083) +* [RxJava系列教程](https://www.jianshu.com/nb/14302692) \ No newline at end of file diff --git a/source/_posts/security-rsa.md b/source/_posts/security-rsa.md new file mode 100644 index 000000000..17670d14d --- /dev/null +++ b/source/_posts/security-rsa.md @@ -0,0 +1,74 @@ +--- +title: 非对称加密——RSA +date: 2018-07-03 20:28:51 +categories: Security +tag: RSA +--- + +这是常用加密技术的系列文章,主要包含`非对称`,`对称`,`JWT`三类常用技术的应用 + +## RSA +[RSA](https://zh.wikipedia.org/wiki/RSA%E5%8A%A0%E5%AF%86%E6%BC%94%E7%AE%97%E6%B3%95):RSA加密算法是一种 **非对称** 加密算法。在公开密钥加密和电子商业中RSA被广泛使用。RSA是1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的。RSA就是他们三人姓氏开头字母拼在一起组成的。 + +### RSA加密解密 +公钥 **加密** 私钥 **解密**,持有公钥(多人持有)可以对数据加密,但是只有持有私钥(一人持有)才可以解密并查看数据 + +### RSA加签验签 +私钥 **加签** 公钥 **验签**,持有私钥(一人持有)可以加签,持有公钥(多人持有)可以验签 + +### RSA过程示意图 + +![security-rsa](https://res.cloudinary.com/incoder/image/upload/v1530793864/blog/security-rsa.png) + +如上图,具体表述两个场景过程 + +#### 结果不需加密 +场景:返回的数据不需要加密(例如:绑定银行卡的时候) +* 客户端`Client A`发送使用服务端`Serve publicKey` **加密** 的密文`cipher A(包含用户的银行卡号,手机号等重要信息)`到服务器 +* 服务器`Serve` 通过 `Serve privateKey`**解密** +* 服务端业务处理完成,直接返回数据(一些普通信息,比如状态码code,提示信息msg,提示操作是成功还是失败)给客户端`Client A` + +#### 结果需加密 +场景:返回的数据需要加密(例如:用户登录) +* 客户端`Client B`发送使用服务端`Serve publicKey` **加密** 的密文`cipher B(包含用户名和密码等重要信息)`以及客户端`Client B`的`Client B publicKey`到服务器 +* 服务器`Serve` 通过 `Serve privateKey`**解密** +* 服务端业务处理完成,直接返回数据(一般为token,token使用客户端`Client B`的`Client B publicKey`加密)给客户端`Client B` +* 客户端`Client B`使用`Client B privateKey`进行 **解密** 获取相应的用户信息等 + +## 密钥对 +在使用RSA加密解密之前,首先要生成密钥对。所谓的密钥对,指的是公钥和私钥。RSA算法的密钥可以通过两个途径生成,一是借助`openssl`命令终端,二是使用`JDK`生成。 +本篇采用`JDK`方式生成密钥对,`openssl`方式可自行尝试 + +### JDK + +#### Serve端密钥对 + +#### Client端密钥对 + +##### Android密钥对 + +##### Web密钥对 + +##### iOS密钥对 + +### OpenSSL + +略... + +## RSA加密 + +## RSA解密 + +## RSA缺点 +虽然RSA是一种较高级别加密机制,但也存在一些缺点 +1. 产生密钥很麻烦,受到素数产生技术的限制,因而难以做到一次一密。 +2. 安全性,RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价,而且密码学界多数人士倾向于因子分解不是NP问题。 +3. 速度太慢,由于`RSA`的分组长度太大,为保证安全性,n 至少也要 `600 bit` 以上,使运算代价很高,尤其是速度较慢,较对称密码算法慢几个数量级;且随着大数分解技术的发展,这个长度还在增加,不利于数据格式的标准化。 + +## 附录 +参考学习文章 +* [一张图了解RSA加解密与加验签](https://blog.csdn.net/zhshulin/article/details/71573542) +* [RSA加密解密及RSA加签验签](https://www.cnblogs.com/loveyou/p/7299524.html) +* [RSA加解密和加签验签](https://www.jianshu.com/p/ff9bd897e96a) +* [RSA加密解密样例](https://www.jianshu.com/p/283fff43a948) +* [RSA加密解密实现](https://blog.csdn.net/hustpzb/article/details/72734578) \ No newline at end of file diff --git a/source/_posts/ssm.md b/source/_posts/ssm.md new file mode 100644 index 000000000..82e177d0e --- /dev/null +++ b/source/_posts/ssm.md @@ -0,0 +1,52 @@ +--- +title: 构建基础SSM框架 +date: 2018-05-20 09:39:10 +categories: Frame +tag: + - Spring + - SpringMVC + - Mybatis +--- + +## SSM结构 + +![SSM](https://res.cloudinary.com/incoder/image/upload/v1528039004/blog/ssm-structure.png) + +## SSM框架整合 +所谓的SSM即:Spring,SpringMVC,Mybatis +* [Spring](https://spring.io):一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP。 +* [SpringMVC](https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html):Spring实现的一个Web层,相当于Struts的框架,但是比Struts更加灵活和强大. +* [Mybatis](http://www.mybatis.org/mybatis-3):一个持久层的框架,在使用上相比Hibernate更加灵活,可以控制SQL的编写,使用 XML或注解进行相关的配置. + +## 实战项目 +![ssm-practice](https://res.cloudinary.com/incoder/image/upload/v1528647074/blog/ssm-practice.png) + +项目功能: +1. Spring,SpringMVC,Mybatis框架整合 +2. Create Features +3. Retrieve Features +4. Update Features +5. Delete Features + +> 项目示例:[rc-ssm](https://github.com/RootCluster/rc-ssm/tree/example) + +## 其他 +### ajax之PUT请求 +客户端ajax方式发送PUT请求,Tomcat默认不会对请求进行处理; +Tomcat: +1. 将请求体中的数据,封装成一个map +2. request.getParameter("fileName")就会从这个map中取值 +3. springMVC封装POJO对象时,会把POJO中的属性的值,request.getParameter("fileName") + + 解决方式: + - 方式一:Ajax发送POST请求 + Ajax中type:"POST" + data: $("").serialize()+"&_method=PUT" + + - 方式二:web配置中添加HttpPutFormContentFilter过滤器 + 1.HttpPutFormContentFilter将请求体中的数据解析包装成一个map + 2.request被重新包装,request.getParameter()被重写,从自己封装的map中取出数据 + +### 获取属性的值 +prop修改和读取DOM原生属性的值 +attr修改和读取自定义属性的值 diff --git a/source/_posts/syncing-a-fork.md b/source/_posts/syncing-a-fork.md new file mode 100644 index 000000000..5aeaf737d --- /dev/null +++ b/source/_posts/syncing-a-fork.md @@ -0,0 +1,64 @@ +--- +title: Git 同步 Fork 项目 +date: 2018-08-01 16:09:50 +categories: Git +tag: Syncing +--- + +[Github](https://www.github.com) 全球最大的同性交友网站,这里拥有最前沿的IT技术创新,拥有最流行的开源项目,等等...,总之这里是我的知识仓库,每天都会在上面寻找,学习知识 + +扯远了,本篇解决对于fork的项目,如何进行源项目的更新和同步问题 + +## 远程仓库 +1. 查看fork项目的远程仓库信息 +```bash +git remote -v +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) +``` +2. 设置源项目仓库地址 +```bash +git remote add upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git +``` +3. 检查远程地址信息 +```bash +git remote -v +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch) +origin https://github.com/YOUR_USERNAME/YOUR_FORK.git (push) +upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch) +upstream https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push) +``` + +## 同步源仓库信息 + +1. 获取源仓库更新 +```bash +git fetch upstream +remote: Counting objects: 75, done. +remote: Compressing objects: 100% (53/53), done. +remote: Total 62 (delta 27), reused 44 (delta 9) +Unpacking objects: 100% (62/62), done. +From https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY + * [new branch] master -> upstream/master +``` +2. 查看本地master分支 +```bash +git checkout master +Switched to branch 'master' +``` +3. 合并源仓库更新到本地master分支 +```bash +git merge upstream/master +Updating a422352..5fdff0f +Fast-forward + README | 9 ------- + README.md | 7 ++++++ + 2 files changed, 7 insertions(+), 9 deletions(-) + delete mode 100644 README + create mode 100644 README.md +``` + +## 附录 +* [同步你的 Fork 仓库](http://wiki.jikexueyuan.com/project/github-basics/fork-synced.html) +* [Configuring a remote for a fork](https://help.github.com/articles/configuring-a-remote-for-a-fork/) +* [Syncing a fork](https://help.github.com/articles/syncing-a-fork) \ No newline at end of file diff --git a/source/_posts/travel-zjj.md b/source/_posts/travel-zjj.md new file mode 100644 index 000000000..baaa56c1f --- /dev/null +++ b/source/_posts/travel-zjj.md @@ -0,0 +1,104 @@ +--- +title: 行·张家界 +date: 2018-05-20 22:39:10 +categories: Travel +tag: 张家界 +--- + +{% note default %} +* 时间:2018.06.16——2018.06.19 +* 地点:杭州——张家界 +* 目标:武陵源景区,天门山景区,大峡谷景区 +{% endnote %} + +听说张家界是人间仙境,鬼斧神工,嗯,今年端午就去一探究竟,慌慌张张,匆匆忙忙做一份旅行攻略,翻遍百度,爬烂谷歌,都没有找到匹配的攻略,哎,可能是我姿势不对?! + +张家界,张家界景区共分为四块:**张家界国家森林公园**,**杨家界自然保护区**,**天子山自然保护区**,**索溪峪自然保护区**四大景区,统称为武陵源风景名胜。 + +**最受欢迎** 的四大景区 +1. 武陵源景区(森林公园、金鞭溪、袁家界、杨家界、天子山、十里画廊等) +2. 天门山景区(亚州最长的索道、世界公路奇观、玻璃栈道等) +3. 大峡谷风景区(新开发的玻璃桥) +4. 凤凰古城 + +## 出行准备 +1. 身份证件等相关证件 +2. 数码产品,雨具等 +3. 简单洗漱用品及换洗衣物 +4. 现金若干(不必太多) +5. 零食(必备:辣条) + +## 注意事项 +由于是自由行的方式,因此提醒以下几点 +1. 到达张家界后,**拒绝** 和 **一切** 人搭话,避免一些麻烦,给行程带来不愉快 +2. 保管好自己的物品 +3. 张家界火车站出站后即可到汽车站乘坐大巴去武陵源景区,50分钟左右,10(森林公园)—12元(武陵源) +4. 大峡谷,天门山景区玻璃桥都需要提前5天在网上预定 + +## 出行路线 + +### 整体路线图 +路线一: + * Day1(16):天门山景区 + * Day2.Day3(17-18):武陵源景区 + * Day4(19):大峡谷风景区 + +路线二(推荐) + * Day1.Day2(16-17):武陵源景区 + * Day2.Day3(18):大峡谷风景区 + * Day4(19):天门山景区 + +![扼要路线图](https://res.cloudinary.com/incoder/image/upload/v1527342618/blog/gitpages-zjj-road.png) + +{% note info %} +标记说明 +1. 张家界火车站 +2. 武陵源景区 +3. 大峡谷风景区 +4. 天门山景区 +{% endnote %} + +### 武陵源景区路线 +门票:245 元+保险费3 元(3天内多次进出有效,含环保车票价) +开放时间:8:00-17:00 +Day1:森林公园-金鞭溪-杨家界 +Day2:大观台-天子山-十里画廊-索溪湖-武陵源门票站 +从森林公园进,从武陵源出,不走回头路。需要在 **丁香榕** 住一宿 +![武陵源景区](https://res.cloudinary.com/incoder/image/upload/v1527324112/blog/gitpages-zjj.gif) + +### 大峡谷风景区路线 +门票:大峡谷(门票122元)+玻璃桥(门票138元) +开放时间:08:00-17:00 +Day3:玻璃桥-大峡谷 + +### 天门山景区路线 +门票:258.00元(含往返索道、环保车)【旺季】 +开放时间:08:00~16:00 +路线Day4:玻璃栈道-天门山寺-天门洞(坐索道上山顶——走西线——再到天门翻水处坐自动扶梯到天门洞——爬999级阶梯——最终坐环保车返回至市区) +**自备中午餐** + +![天门山景区路线图](https://res.cloudinary.com/incoder/image/upload/v1528189150/blog/gitpages-zjj-tms.png.jpg) + +## 住宿 +现在还未确定路线,个人推荐路线二;其次,16,17,18号需要住宿,要提前预定旅店 + +## 美食 + +### 胡师傅三下锅 +三下锅,所谓的三下锅其实就是一种很方便的干锅,它是由三种主料做成的,炖着不放汤的火锅,三角坪附近的那个“胡师傅三下锅”味道不错,三下锅50元一份,分量很够吃的,包你吃够吃好!推荐的就是干煸肠子,干煸核桃肉和湘西腊肉三种混在一起炖,吃的同时还可以点一份酸萝卜,又脆又酸。真的是极品哦!(吃过后,发现并没有网上说的这么好吃,就是大烩菜,哈哈哈) + +等等。。。 + +## 汇总 +![汇总](https://res.cloudinary.com/incoder/image/upload/v1527434516/blog/gitpages-zjj-summary.png) + +## 游记 +废话不说,**武陵源景区**不用去,虽说是5A景区,除了山还是山,而且商业气息很重,很多地方都不能步行,需要坐缆车,电梯等交通工具,况且这次去森林公园那边在修路,说是在修高铁,建议直接去 **大峡谷风景区** 和 **天门山景区** + +### 武陵源景区 +整个武陵 +![武陵源](https://res.cloudinary.com/incoder/image/upload/v1530682536/blog/travel/travel-zjj-wly.jpg) +### 大峡谷风景区 +![大峡谷](https://res.cloudinary.com/incoder/image/upload/v1530682775/blog/travel/travel-zjj-dxg.jpg) +### 天门山景区 +{% dplayer "url=https://res.cloudinary.com/incoder/video/upload/v1530682876/blog/travel/travel-zjj-tms.mp4" "loop=no" "theme=#FADFA3" "autoplay=false" "token=tokendemo" %} \ No newline at end of file diff --git a/source/_posts/treasure.md b/source/_posts/treasure.md new file mode 100644 index 000000000..f9fe1cedb --- /dev/null +++ b/source/_posts/treasure.md @@ -0,0 +1,122 @@ +--- +title: 藏经阁 +date: 2018-07-16 23:00:10 +categories: Resources +tag: DevTool +--- + +{% cq %}

工欲善其事,必先利其器

{% endcq %} +记录汇总一些资源库 + +## 导航页 +[Hi World](http://www.shandowsocks.info) +[创造师导航](http://chuangzaoshi.com) +[UI设计师导航](http://so.uigreat.com) +[Devdocs](https://devdocs.io) + +## 开发者网站 + +### 国际大厂 +[Google Developer](https://developers.google.com) +[Apple Developer](https://developer.apple.com) +[Microsoft Developer](https://developer.microsoft.com) +[Facebook Developer](https://developers.facebook.com) +[Twitter Developer](https://developer.twitter.com) +[Github Developer](https://developers.github.com) +[Baidu Developer](https://developer.baidu.com) +[Alibaba Developer](https://dev.aliyun.com) +[Tencent Developer](http://open.qq.com) + +### 手机厂商 +[Android Developer](https://developer.android.com) +[iOS Developer](https://developer.apple.com/ios) +[Samsung Developer](https://developer.samsung.com) +[Huawei Developer](http://developer.huawei.com/cn) +[XiaoMi Developer](https://dev.mi.com) +[HTC Developer](https://www.htcdev.com/) +[Flyme Developer](https://open.flyme.cn/) +[Oppo Developer](https://open.oppomobile.com) +[Vivo Developer](https://dev.vivo.com.cn) +[Smartisan Developer](http://dev.smartisan.com) +[360 Developer](http://dev.360.cn) + +### 应用市场 +[Google Play](https://play.google.com) +[App Store]() +[XiaoMi 应用市场](http://app.mi.com) +[Huawei 应用市场](http://developer.huawei.com/consumer/cn/devunion/ui/server/appMarket.html) +[360 应用市场](http://zhushou.360.cn) +[酷安市场](https://www.coolapk.com) +[应用宝](http://sj.qq.com) + +### 小程序 + +[PWA](https://developers.google.cn/web/progressive-web-apps) +[微信小程序](https://mp.weixin.qq.com/cgi-bin/wx) +[支付宝小程序](https://docs.alipay.com/mini/developer/getting-started) +[快应用](https://www.quickapp.cn) + +### ROM与论坛 +[LineageOS](https://lineageos.org) +[XDA](https://forum.xda-developers.com) +[Mokee](https://www.mokeedev.com) +[MoDaCo](https://www.modaco.com) +[机锋](http://bbs.gfan.com/forum.php) +[智友](http://bbs.zhiyoo.com) +[MiUi](http://rom.xiaomi.cn) +[0pengApps](https://opengapps.org) + +## DevTools + +### IDE +[Jetbrains 全家桶](http://www.jetbrains.com) +[Android Studio](https://developer.android.google.cn/studio) +[Xcode](https://developer.apple.com/xcode/ide) +[Eclipse](http://www.eclipse.org/downloads/eclipse-packages) +[Visual Studio Code](https://code.visualstudio.com) +[Sublime](http://www.sublimetext.com) +[PostMan](https://www.getpostman.com/apps) +[Xshell Xftp](http://www.netsarang.com/products/xsh_overview.html) + +### Plugin +[Alibaba Java Coding Guidelines](https://github.com/alibaba/p3c) +[Android ButterKnife Zelezny](https://github.com/avast/android-butterknife-zelezny) +[Android Material Design Icon Generator](https://github.com/konifar/android-material-design-icon-generator-plugin) +[Android Parcelable code generator](https://github.com/mcharmas/android-parcelable-intellij-plugin) +[Android Postfix Completion](https://plugins.jetbrains.com/plugin/7775-android-postfix-completion) +[Android Resource Usage Count](https://github.com/niorgai/Android-Resource-Usage-Count) +[Android Studio Prettify](https://github.com/Haehnchen/idea-android-studio-plugin) +[ADB Idea](http://www.developerphil.com/renaming-your-gradle-build-files) +[EventBus3 Intellij Plugin](https://plugins.jetbrains.com/plugin/8603-eventbus3-intellij-plugin) +[GrepConsole](https://github.com/krasa/GrepConsole) +[GsonFormat](https://github.com/zzz40500/GsonFormat) +[Jetbrains Plugins](https://plugins.jetbrains.com/) +[Jrebel](https://zeroturnaround.com/software/jrebel) +[ignore](http://ignore.hsz.mobi) +[LayoutFormatter](https://github.com/drakeet/LayoutFormatter) +[Markdown Navigator](https://github.com/vsch/idea-multimarkdown) +[PlantUML integration](https://github.com/esteinberg/plantuml4idea) +[SQLScout](https://plugins.jetbrains.com/plugin/8322-sqlscout-sqlite-support-) +[Translation](http://yiiguxing.github.io/TranslationPlugin) + +### Managed code +[Github](https://www.github.com) +[Gitlab](https://www.gitlab.com) +[Bitbucket](https://bitbucket.org) +[Gitee](https://www.gitee.com) +[Coding](https://coding.net) + +## Yun +[Google Cloud](https://console.cloud.google.com) +[Microsoft Azure](https://azure.microsoft.com) +[Amazon Web Services](https://aws.amazon.com) +[Aliyun](https://www.aliyun.com) +[Tencent Cloud](https://cloud.tencent.com) +[DiDi Cloud](https://www.didiyun.com) +[MT Cloud](https://www.mtyun.com) +[NetEase Cloud](https://www.163yun.com) + +## Mirror +[Tsinghua](https://mirrors.tuna.tsinghua.edu.cn) +[Gradle](http://services.gradle.org/distributions) +[Firfox](https://download-installer.cdn.mozilla.net/pub/firefox/releases) \ No newline at end of file diff --git a/source/about/index.md b/source/about/index.md new file mode 100644 index 000000000..7f3d0431c --- /dev/null +++ b/source/about/index.md @@ -0,0 +1,31 @@ +--- +title: 关于 +date: 2018-05-04 17:50:34 +comments: false +--- + + + +## 关于我 + +>Life's a struggle!(生命不息,折腾不止,当然这不能是瞎折腾)~ + +陕西汉中人,现居浙江杭州,理工男一枚 +机械制造与自动化专业,14年毕业后投奔于互联网世界 +16年开始自学Android开发,现从事Android开发工作 + +喜欢Coding,音乐,电影 + +## 关于本站 + +> 本站已开启HTTPS + +资源:便捷,高效,有趣的工具资源 + +经验:工作中一些问题解决方式及思考 + +阅读:阅读一些书籍的收获以及感兴趣的文字 + +学习:编程语言,热门开源框架的学习过程记录 + +影音:视觉,听觉的享受分享 diff --git a/source/categories/index.md b/source/categories/index.md new file mode 100644 index 000000000..dea1cbcc2 --- /dev/null +++ b/source/categories/index.md @@ -0,0 +1,6 @@ +--- +title: 分类 +type: categories +date: 2018-03-24 22:38:58 +comments: false +--- diff --git a/source/tags/index.md b/source/tags/index.md new file mode 100644 index 000000000..286c05569 --- /dev/null +++ b/source/tags/index.md @@ -0,0 +1,6 @@ +--- +title: 标签 +type: tags +date: 2018-03-24 22:36:28 +comments: false +--- diff --git a/.bowerrc b/themes/next/.bowerrc similarity index 100% rename from .bowerrc rename to themes/next/.bowerrc diff --git a/.editorconfig b/themes/next/.editorconfig similarity index 100% rename from .editorconfig rename to themes/next/.editorconfig diff --git a/.eslintrc.json b/themes/next/.eslintrc.json similarity index 100% rename from .eslintrc.json rename to themes/next/.eslintrc.json diff --git a/.gitattributes b/themes/next/.gitattributes similarity index 100% rename from .gitattributes rename to themes/next/.gitattributes diff --git a/.github/CODE_OF_CONDUCT.md b/themes/next/.github/CODE_OF_CONDUCT.md similarity index 100% rename from .github/CODE_OF_CONDUCT.md rename to themes/next/.github/CODE_OF_CONDUCT.md diff --git a/.github/CONTRIBUTING.md b/themes/next/.github/CONTRIBUTING.md similarity index 100% rename from .github/CONTRIBUTING.md rename to themes/next/.github/CONTRIBUTING.md diff --git a/.github/ISSUE_TEMPLATE.md b/themes/next/.github/ISSUE_TEMPLATE.md similarity index 100% rename from .github/ISSUE_TEMPLATE.md rename to themes/next/.github/ISSUE_TEMPLATE.md diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/themes/next/.github/PULL_REQUEST_TEMPLATE.md similarity index 100% rename from .github/PULL_REQUEST_TEMPLATE.md rename to themes/next/.github/PULL_REQUEST_TEMPLATE.md diff --git a/.github/browserstack_logo.png b/themes/next/.github/browserstack_logo.png similarity index 100% rename from .github/browserstack_logo.png rename to themes/next/.github/browserstack_logo.png diff --git a/.github/stale.yml b/themes/next/.github/stale.yml similarity index 100% rename from .github/stale.yml rename to themes/next/.github/stale.yml diff --git a/themes/next/.gitignore b/themes/next/.gitignore new file mode 100644 index 000000000..26b5eab0b --- /dev/null +++ b/themes/next/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +.idea/ +*.log +*.iml +yarn.lock +package-lock.json +node_modules/ + +# Ignore optional external libraries +source/lib/* + +# Track internal libraries & Ignore unused verdors files +source/lib/font-awesome/less/ +source/lib/font-awesome/scss/ +!source/lib/font-awesome/* + +!source/lib/jquery/ + +source/lib/ua-parser-js/* +!source/lib/ua-parser-js/dist/ + +!source/lib/velocity/ diff --git a/.stickler.yml b/themes/next/.stickler.yml similarity index 100% rename from .stickler.yml rename to themes/next/.stickler.yml diff --git a/.stylintrc b/themes/next/.stylintrc similarity index 100% rename from .stylintrc rename to themes/next/.stylintrc diff --git a/themes/next/.travis.yml b/themes/next/.travis.yml new file mode 100644 index 000000000..9591f0b23 --- /dev/null +++ b/themes/next/.travis.yml @@ -0,0 +1,18 @@ +language: node_js +#node_js: node +node_js: lts/* + +cache: + directories: + - node_modules + +install: npm install + +before_script: + - npm install -g gulp + +addons: + browserstack: + username: "ivannginx1" + access_key: + secure: "NutOhdgtUdBUXMPZhy8X1F1Jq+tan1LeNOV0FArBt15SNlxtNArqhiyTi4XnG9MPruX4306aGF2RBrKso+OiGNRdGtRGngH613Q0GWNtlC/boMqnI7fHqLIyCs6S12y2uA8PK4Ifxg9bZ0VtCTYYbMy+p1KvBM//L12vmtfdnby8z5Qvex3tB3dLoPOR50CKkINHJVDLm+iVRFrdz4/83oDsulZSRRGIaxu5taDWPIcp3fYZtre2Nc+RXcsyFDyjN7U0Hvr5tKBbloJxXEQEBv2xLkMOtp85nmCPD06s1Il8Wus1ux3raVsfUyaW5FpNX37Jeb5e00RQUM1wgU5m75H6qiGwDvQswbugJG0i/a2nNfsgVmbrSZdMnkHcx2Uxmrw4ejyEP5NSrJSBi05Ck1fQ4UsZ4Qkdf1fd04SI0LpLWt43eoNO/7rHKsQoP4LCX9gxKUuC075NEBLODyJ529RYfA6dKKwwH6o0ZbOgASmCoAWaM65g4+FHRnJcKL/Kj9ZWklQtRa7/ynlHaA65jefFS2lB8Ut6d3rXDDBih9mIrwV1uUaEH96xgAN42bgU/vY6FGzNkDOYZqj4YfsepDM0wbOsslFie7JZq7iFjsYvrXqLvYUMk37AZwQ2Sb6uH4tIT4Qw/4oZfDzA1En3/8HdZJ28nKW/lzjwMSqheIY=" diff --git a/LICENSE.md b/themes/next/LICENSE.md similarity index 100% rename from LICENSE.md rename to themes/next/LICENSE.md diff --git a/themes/next/README.md b/themes/next/README.md new file mode 100644 index 000000000..ac8019351 --- /dev/null +++ b/themes/next/README.md @@ -0,0 +1,138 @@ +
Language: :us: +:cn: +:ru:
+ +#
e x T
+ +

«NexT» is a high quality elegant Hexo theme. It is crafted from scratch, with love.

+ +[![gitter-image]][gitter-url] +[![riot-image]][riot-url] +[![t-chat-image]][t-chat-url] +[![t-news-image]][t-news-url] +[![lang-image]][lang-url] +[![travis-image]][travis-url] +[![rel-image]][releases-url] +[![hexo-image]][hexo-url] +[![lic-image]][lic-url] + +## Live Preview + +* :heart_decoration: Muse scheme: [LEAFERx](https://leaferx.online) | [XiaMo](https://notes.wanghao.work) | [OAwan](https://oawan.me) +* :six_pointed_star: Mist scheme: [Jeff](https://blog.zzbd.org) | [uchuhimo](http://uchuhimo.me) | [xirong](http://www.ixirong.com) +* :pisces: Pisces scheme: [Vi](http://notes.iissnan.com) | [Acris](https://acris.me) | [Rainy](https://rainylog.com) +* :gemini: Gemini scheme: [Ivan.Nginx](https://almostover.ru) | [Raincal](https://raincal.com) | [Dandy](https://dandyxu.me) + +More «NexT» examples [here](https://github.com/iissnan/hexo-theme-next/issues/119). + +## Installation + +Simplest way to install is by cloning whole repository: + + ```sh + $ cd hexo + $ git clone https://github.com/theme-next/hexo-theme-next themes/next + ``` + +Or you can see [detailed installation instructions][docs-installation-url] if you want any other variant. + +## Plugins + +In NexT config now you can find dependencies on each module which was moved to external repositories which can be found by [main organization link](https://github.com/theme-next). + +For example, you want to use `fancybox` in your site. Go to NexT config and see: + +```yml +# Fancybox +# Dependencies: https://github.com/theme-next/theme-next-fancybox +fancybox: false +``` + +Then turn on `fancybox` and go to «Dependencies» link with installation instructions of this module. + +### Exceptions + +If you use cdn for any plugins, you need to replace your cdn link. + +For example, you want to use `fancybox` and you configured a cdn link. Go to NexT config and see: + +```yml +vendors: + # ... + # Some contents... + # ... + fancybox: # Set or update fancybox cdn url. + fancybox_css: # Set or update fancybox cdn url. +``` + +Instead of defining [main organization link](https://github.com/theme-next) for updates. + +## Update + +You can update to latest master branch by the following command: + +```sh +$ cd themes/next +$ git pull +``` + +And if you see any error message during update (something like **«Commit your changes or stash them before you can merge»**), recommended to learn [Hexo data files][docs-data-files-url] feature.\ +Howbeit, you can bypass update errors by `Commit`, `Stash` or `Discard` local changes. See [here](https://stackoverflow.com/a/15745424/5861495) how to do it. + +**If you want to update from v5.1.x to v6.0.x, read [here][docs-update-5-1-x-url].** + +## Known Bugs + +For those who also encounter **«[Error: Cannot find module 'hexo-util'](https://github.com/iissnan/hexo-theme-next/issues/1490)»**, please check your NPM version. + +* `> 3`: Still not work? Please remove `node_modules` directory and reinstall using `npm install`. +* `< 3`: Please add `hexo-util` explicitly via `npm install --save-dev hexo-util` to you site package deps. + +## Contributing + +Contribution is welcome, feel free to open an issue and fork. Waiting for your pull request. + +## Third party applications + +* :triangular_flag_on_post: HexoEditor + +[browser-image]: https://img.shields.io/badge/browser-%20chrome%20%7C%20firefox%20%7C%20opera%20%7C%20safari%20%7C%20ie%20%3E%3D%209-lightgrey.svg +[browser-url]: https://www.browserstack.com + +[lang-image]: https://d322cqt584bo4o.cloudfront.net/theme-next/localized.svg "Add or improve translation in few seconds!" +[lang-url]: https://crwd.in/theme-next + +[gitter-image]: https://img.shields.io/badge/gitter-chat-orange.svg "Join to our Gitter room" +[gitter-url]: https://gitter.im/theme-next + +[riot-image]: https://img.shields.io/badge/riot-chat-DCAB08.svg "Join to our Riot room" +[riot-url]: https://riot.im/app/#/room/#NexT:matrix.org + +[t-chat-image]: https://img.shields.io/badge/telegram-chat-BAB210.svg "Join to our Telegram group" +[t-chat-url]: https://t.me/theme_next + +[t-news-image]: https://img.shields.io/badge/telegram-news-98B919.svg "Join to our Telegram news channel" +[t-news-url]: https://t.me/theme_next_news + +[travis-image]: https://travis-ci.org/theme-next/hexo-theme-next.svg?branch=master +[travis-url]: https://travis-ci.org/theme-next/hexo-theme-next?branch=master "Travis CI [Linux]" + +[hexo-image]: https://img.shields.io/badge/hexo-%3E%3D%203.5.0-blue.svg +[hexo-url]: http://hexo.io + +[lic-image]: https://img.shields.io/badge/license-%20AGPL-blue.svg +[lic-url]: https://github.com/theme-next/hexo-theme-next/blob/master/LICENSE.md + + +[rel-image]: https://badge.fury.io/gh/theme-next%2Fhexo-theme-next.svg + + +[download-latest-url]: https://github.com/theme-next/hexo-theme-next/archive/master.zip +[releases-latest-url]: https://github.com/theme-next/hexo-theme-next/releases/latest +[releases-url]: https://github.com/theme-next/hexo-theme-next/releases +[tags-url]: https://github.com/theme-next/hexo-theme-next/tags +[commits-url]: https://github.com/theme-next/hexo-theme-next/commits/master + +[docs-installation-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/INSTALLATION.md +[docs-data-files-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/DATA-FILES.md +[docs-update-5-1-x-url]: https://github.com/theme-next/hexo-theme-next/blob/master/docs/UPDATE-FROM-5.1.X.md diff --git a/themes/next/_config.yml b/themes/next/_config.yml new file mode 100644 index 000000000..7b3107c58 --- /dev/null +++ b/themes/next/_config.yml @@ -0,0 +1,973 @@ +# --------------------------------------------------------------- +# Theme Core Configuration Settings +# --------------------------------------------------------------- + +# If false, merge configs from `_data/next.yml` into default configuration (rewrite). +# If true, will fully override default configuration by options from `_data/next.yml` (override). Only for NexT settings. +# And if true, all config from default NexT `_config.yml` must be copied into `next.yml`. Use if you know what you are doing. +# Useful if you want to comment some options from NexT `_config.yml` by `next.yml` without editing default config. +override: false + +# Allow to cache content generation. Introduced in NexT v6.0.0. +cache: + enable: true + +# Redefine custom file paths. Introduced in NexT v6.0.2. +# If commented, will be used default custom file paths. + +# For example, you want to put your custom styles file +# outside theme directory in root `source/_data`, set +# `styles: source/_data/styles.styl` +#custom_file_path: + # Default paths: layout/_custom/* + #head: source/_data/head.swig + #header: source/_data/header.swig + #sidebar: source/_data/sidebar.swig + + # Default path: source/css/_variables/custom.styl + #variables: source/_data/variables.styl + # Default path: source/css/_mixins/custom.styl + #mixins: source/_data/mixins.styl + # Default path: source/css/_custom/custom.styl + #styles: source/_data/styles.styl + + +# --------------------------------------------------------------- +# Site Information Settings +# --------------------------------------------------------------- + +# To get or check favicons visit: https://realfavicongenerator.net +# Put your favicons into `hexo-site/source/` (recommend) or `hexo-site/themes/next/source/images/` directory. + +# Default NexT favicons placed in `hexo-site/themes/next/source/images/` directory. +# And if you want to place your icons in `hexo-site/source/` root directory, you must remove `/images` prefix from pathes. + +# For example, you put your favicons into `hexo-site/source/images` directory. +# Then need to rename & redefine they on any other names, otherwise icons from Next will rewrite your custom icons in Hexo. +favicon: + small: /images/favicon-16x16-next.png + medium: /images/favicon-32x32-next.png + apple_touch_icon: /images/apple-touch-icon-next.png + safari_pinned_tab: /images/logo.svg + #android_manifest: /images/manifest.json + #ms_browserconfig: /images/browserconfig.xml + +# Set rss to false to disable feed link. +# Leave rss as empty to use site's feed link, and install hexo-generator-feed: `npm install hexo-generator-feed --save`. +# Set rss to specific value if you have burned your feed already. +rss: + +footer: + # Specify the date when the site was setup. + # If not defined, current year will be used. + #since: 2015 + + # Icon between year and copyright info. + icon: + # Icon name in fontawesome, see: https://fontawesome.com/v4.7.0/icons + # `heart` is recommended with animation in red (#ff0000). + name: user + # If you want to animate the icon, set it to true. + animated: false + # Change the color of icon, using Hex Code. + color: "#808080" + + # If not defined, will be used `author` from Hexo main config. + copyright: + # ------------------------------------------------------------- + powered: + # Hexo link (Powered by Hexo). + enable: true + # Version info of Hexo after Hexo link (vX.X.X). + version: true + + theme: + # Theme & scheme info link (Theme - NexT.scheme). + enable: true + # Version info of NexT after scheme info (vX.X.X). + version: true + # ------------------------------------------------------------- + # Any custom text can be defined here. + #custom_text: Hosted by Coding Pages + +# --------------------------------------------------------------- +# SEO Settings +# --------------------------------------------------------------- + +# Canonical, set a canonical link tag in your hexo, you could use it for your SEO of blog. +# See: https://support.google.com/webmasters/answer/139066 +# Tips: Before you open this tag, remember set up your URL in hexo _config.yml ( ex. url: http://yourdomain.com ) +canonical: true + +# Change headers hierarchy on site-subtitle (will be main site description) and on all post/pages titles for better SEO-optimization. +seo: false + +# If true, will add site-subtitle to index page, added in main hexo config. +# subtitle: Subtitle +index_with_subtitle: false + + +# --------------------------------------------------------------- +# Menu Settings +# --------------------------------------------------------------- + +# When running the site in a subdirectory (e.g. domain.tld/blog), remove the leading slash from link value (/archives -> archives). +# Usage: `Key: /link/ || icon` +# Key is the name of menu item. If translate for this menu will find in languages - this translate will be loaded; if not - Key name will be used. Key is case-senstive. +# Value before `||` delimeter is the target link. +# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, question icon will be loaded. +menu: + home: / || home + #about: /about/ || user + #tags: /tags/ || tags + #categories: /categories/ || th + archives: /archives/ || archive + #schedule: /schedule/ || calendar + #sitemap: /sitemap.xml || sitemap + #commonweal: /404/ || heartbeat + +# Enable/Disable menu icons / item badges. +menu_settings: + icons: true + badges: false + +# --------------------------------------------------------------- +# Scheme Settings +# --------------------------------------------------------------- + +# Schemes +scheme: Muse +#scheme: Mist +#scheme: Pisces +#scheme: Gemini + + +# --------------------------------------------------------------- +# Sidebar Settings +# --------------------------------------------------------------- + +# Posts / Categories / Tags in sidebar. +site_state: true + +# Social Links. +# Usage: `Key: permalink || icon` +# Key is the link label showing to end users. +# Value before `||` delimeter is the target permalink. +# Value after `||` delimeter is the name of FontAwesome icon. If icon (with or without delimeter) is not specified, globe icon will be loaded. +#social: + #GitHub: https://github.com/yourname || github + #E-Mail: mailto:yourname@gmail.com || envelope + #Google: https://plus.google.com/yourname || google + #Twitter: https://twitter.com/yourname || twitter + #FB Page: https://www.facebook.com/yourname || facebook + #VK Group: https://vk.com/yourname || vk + #StackOverflow: https://stackoverflow.com/yourname || stack-overflow + #YouTube: https://youtube.com/yourname || youtube + #Instagram: https://instagram.com/yourname || instagram + #Skype: skype:yourname?call|chat || skype + +social_icons: + enable: true + icons_only: false + transition: false + # Dependencies: exturl: true in Tags Settings section below. + # To encrypt links above use https://www.base64encode.org + # Example encoded link: `GitHub: aHR0cHM6Ly9naXRodWIuY29tL3RoZW1lLW5leHQ= || github` + exturl: false + +# Follow me on GitHub banner in right-top corner. +# Usage: `permalink || title` +# Value before `||` delimeter is the target permalink. +# Value after `||` delimeter is the title and aria-label name. +#github_banner: https://github.com/yourname || Follow me on GitHub + +# Blog rolls +links_icon: link +links_title: Links +links_layout: block +#links_layout: inline +#links: + #Title: http://example.com/ + +# Sidebar Avatar +avatar: + # in theme directory(source/images): /images/avatar.gif + # in site directory(source/uploads): /uploads/avatar.gif + # You can also use other linking images. + url: #/images/avatar.gif + # If true, the avatar would be dispalyed in circle. + rounded: false + # The value of opacity should be choose from 0 to 1 to set the opacity of the avatar. + opacity: 1 + # If true, the avatar would be rotated with the cursor. + rotated: false + +# Table Of Contents in the Sidebar +toc: + enable: true + + # Automatically add list number to toc. + number: true + + # If true, all words will placed on next lines if header width longer then sidebar width. + wrap: false + +# Creative Commons 4.0 International License. +# http://creativecommons.org/ +# Available: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | zero +#creative_commons: by-nc-sa +#creative_commons: + +sidebar: + # Sidebar Position, available value: left | right (only for Pisces | Gemini). + position: left + #position: right + + # Sidebar Display, available value (only for Muse | Mist): + # - post expand on posts automatically. Default. + # - always expand for all pages automatically + # - hide expand only when click on the sidebar toggle icon. + # - remove Totally remove sidebar including sidebar toggle. + display: post + #display: always + #display: hide + #display: remove + + # Sidebar offset from top menubar in pixels (only for Pisces | Gemini). + offset: 12 + + # Back to top in sidebar (only for Pisces | Gemini). + b2t: false + + # Scroll percent label in b2t button. + scrollpercent: false + + # Enable sidebar on narrow view (only for Muse | Mist). + onmobile: false + + +# --------------------------------------------------------------- +# Post Settings +# --------------------------------------------------------------- + +# Automatically scroll page to section which is under mark. +scroll_to_more: true + +# Automatically saving scroll position on each post/page in cookies. +save_scroll: false + +# Automatically excerpt description in homepage as preamble text. +excerpt_description: true + +# Automatically Excerpt. Not recommend. +# Please use in the post to control excerpt accurately. +auto_excerpt: + enable: false + length: 150 + +# Post meta display settings +post_meta: + item_text: true + created_at: true + updated_at: + enabled: true + # If true, show updated date label only if `updated date` different from 'created date' (post edited in another day than was created). + # And if post will edited in same day as created, edited time will show in popup title under created time label. + # If false show anyway, but if post edited in same day, show only edited time. + another_day: true + categories: true + +# Post wordcount display settings +# Dependencies: https://github.com/theme-next/hexo-symbols-count-time +symbols_count_time: + separated_meta: true + item_text_post: true + item_text_total: false + awl: 4 + wpm: 275 + +codeblock: + # Manual define the border radius in codeblock + # Leave it empty for the default 1 + border_radius: + # Add copy button on codeblock + copy_button: + enable: false + # Show text copy result + show_result: false + +# Wechat Subscriber +#wechat_subscriber: + #enabled: true + #qcode: /path/to/your/wechatqcode ex. /uploads/wechat-qcode.jpg + #description: ex. subscribe to my blog by scanning my public wechat account + +# Reward +#reward_comment: Donate comment here +#wechatpay: /images/wechatpay.jpg +#alipay: /images/alipay.jpg +#bitcoin: /images/bitcoin.png + +# Related popular posts +# Dependencies: https://github.com/tea3/hexo-related-popular-posts +related_posts: + enable: false + title: # custom header, leave empty to use the default one + display_in_home: false + params: + maxCount: 5 + #PPMixingRate: 0.0 + #isDate: false + #isImage: false + #isExcerpt: false + +# Declare license on posts +post_copyright: + enable: false + license: CC BY-NC-SA 4.0 + +# Post edit +# Dependencies: https://github.com/hexojs/hexo-deployer-git +post_edit: + enable: false + url: https://github.com/theme-next/theme-next.org/_posts/tree/master/ # Link for view source. +# url: https://github.com/theme-next/theme-next.org/_posts/edit/master/ # Link for fork & edit. + + +# --------------------------------------------------------------- +# Misc Theme Settings +# --------------------------------------------------------------- + +# Reduce padding / margin indents on devices with narrow width. +mobile_layout_economy: false + +# Android Chrome header panel color ($brand-bg / $headband-bg => $black-deep). +android_chrome_color: "#222" + +# Custom Logo. +# !!Only available for Default Scheme currently. +# Options: +# enabled: [true/false] - Replace with specific image +# image: url-of-image - Images's url +custom_logo: + enabled: false + image: + +# Code Highlight theme +# Available values: normal | night | night eighties | night blue | night bright +# https://github.com/chriskempson/tomorrow-theme +highlight_theme: normal + +# Enable "cheers" for archive page. +cheers_enabled: true + +# Manual define the max content width +# !!Only available for Gemini Scheme currently +# Leave it empty for the default 75% (suggest not less than 1000px) +#max_content_width: 1000px + +# Manual define the sidebar width +# !!Only available for Gemini Scheme currently +# Leave it empty for the default 240 +sidebar_width: + +# --------------------------------------------------------------- +# Font Settings +# - Find fonts on Google Fonts (https://www.google.com/fonts) +# - All fonts set here will have the following styles: +# light, light italic, normal, normal italic, bold, bold italic +# - Be aware that setting too much fonts will cause site running slowly +# - Introduce in 5.0.1 +# --------------------------------------------------------------- +# CAUTION! Safari Version 10.1.2 bug: https://github.com/iissnan/hexo-theme-next/issues/1844 +# To avoid space between header and sidebar in Pisces / Gemini themes recommended to use Web Safe fonts for `global` (and `logo`): +# Arial | Tahoma | Helvetica | Times New Roman | Courier New | Verdana | Georgia | Palatino | Garamond | Comic Sans MS | Trebuchet MS +# --------------------------------------------------------------- +font: + enable: false + + # Uri of fonts host. E.g. //fonts.googleapis.com (Default). + host: + + # Font options: + # `external: true` will load this font family from `host` above. + # `family: Times New Roman`. Without any quotes. + # `size: xx`. Use `px` as unit. + + # Global font settings used for all elements in . + global: + external: true + family: Lato + size: + + # Font settings for Headlines (H1, H2, H3, H4, H5, H6). + # Fallback to `global` font settings. + headings: + external: true + family: + size: + + # Font settings for posts. + # Fallback to `global` font settings. + posts: + external: true + family: + + # Font settings for Logo. + # Fallback to `global` font settings. + logo: + external: true + family: + size: + + # Font settings for and code blocks. + codes: + external: true + family: + size: + + +# --------------------------------------------------------------- +# Third Party Services Settings +# --------------------------------------------------------------- + +# Math Equations Render Support +math: + enable: false + + # Default(true) will load mathjax/katex script on demand + # That is it only render those page who has 'mathjax: true' in Front Matter. + # If you set it to false, it will load mathjax/katex srcipt EVERY PAGE. + per_page: true + + engine: mathjax + #engine: katex + + # hexo-rendering-pandoc (or hexo-renderer-kramed) needed to full MathJax support. + mathjax: + # Use 2.7.1 as default, jsdelivr as default CDN, works everywhere even in China + cdn: //cdn.jsdelivr.net/npm/mathjax@2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML + # For newMathJax CDN (cdnjs.cloudflare.com) with fallback to oldMathJax (cdn.mathjax.org). + #cdn: //cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML + # For direct link to MathJax.js with CloudFlare CDN (cdnjs.cloudflare.com). + #cdn: //cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML + # For automatic detect latest version link to MathJax.js and get from Bootcss. + #cdn: //cdn.bootcss.com/mathjax/2.7.1/latest.js?config=TeX-AMS-MML_HTMLorMML + + # hexo-renderer-markdown-it-plus (or hexo-renderer-markdown-it with markdown-it-katex plugin) + # needed to full Katex support. + katex: + # Use 0.7.1 as default, jsdelivr as default CDN, works everywhere even in China + cdn: //cdn.jsdelivr.net/npm/katex@0.7.1/dist/katex.min.css + # CDNJS, provided by cloudflare, maybe the best CDN, but not works in China + #cdn: //cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css + # Bootcss, works great in China, but not so well in other region + #cdn: //cdn.bootcss.com/KaTeX/0.7.1/katex.min.css + +# Han Support +# Dependencies: https://github.com/theme-next/theme-next-han +han: false + +# Pangu Support +# Dependencies: https://github.com/theme-next/theme-next-pangu +# For more information: https://github.com/vinta/pangu.js +pangu: false + +# Swiftype Search API Key +#swiftype_key: + +# Baidu Analytics ID +#baidu_analytics: + +# Disqus +disqus: + enable: false + shortname: + count: true + lazyload: false + +# Hypercomments +#hypercomments_id: + +# changyan +changyan: + enable: false + appid: + appkey: + + +# Valine. +# You can get your appid and appkey from https://leancloud.cn +# more info please open https://valine.js.org +valine: + enable: false + appid: # your leancloud application appid + appkey: # your leancloud application appkey + notify: false # mail notifier , https://github.com/xCss/Valine/wiki + verify: false # Verification code + placeholder: Just go go # comment box placeholder + avatar: mm # gravatar style + guest_info: nick,mail,link # custom comment header + pageSize: 10 # pagination size + + +# Support for youyan comments system. +# You can get your uid from http://www.uyan.cc +#youyan_uid: your uid + +# Support for LiveRe comments system. +# You can get your uid from https://livere.com/insight/myCode (General web site) +#livere_uid: your uid + +# Gitment +# Introduction: https://imsun.net/posts/gitment-introduction/ +gitment: + enable: false + mint: true # RECOMMEND, A mint on Gitment, to support count, language and proxy_gateway + count: true # Show comments count in post meta area + lazy: false # Comments lazy loading with a button + cleanly: false # Hide 'Powered by ...' on footer, and more + language: # Force language, or auto switch by theme + github_user: # MUST HAVE, Your Github Username + github_repo: # MUST HAVE, The name of the repo you use to store Gitment comments + client_id: # MUST HAVE, Github client id for the Gitment + client_secret: # EITHER this or proxy_gateway, Github access secret token for the Gitment + proxy_gateway: # Address of api proxy, See: https://github.com/aimingoo/intersect + redirect_protocol: # Protocol of redirect_uri with force_redirect_protocol when mint enabled + +# Baidu Share +# Available value: +# button | slide +# Warning: Baidu Share does not support https. +#baidushare: +## type: button + +# Share +# This plugin is more useful in China, make sure you known how to use it. +# And you can find the use guide at official webiste: http://www.jiathis.com/. +# Warning: JiaThis does not support https. +#jiathis: + ##uid: Get this uid from http://www.jiathis.com/ + +#add_this_id: + +# NeedMoreShare2 +# Dependencies: https://github.com/theme-next/theme-next-needmoreshare2 +# See: https://github.com/revir/need-more-share2 +# Also see: https://github.com/DzmVasileusky/needShareButton +# iconStyle: default | box +# boxForm: horizontal | vertical +# position: top / middle / bottom + Left / Center / Right +# networks: Weibo,Wechat,Douban,QQZone,Twitter,Linkedin,Mailto,Reddit, +# Delicious,StumbleUpon,Pinterest,Facebook,GooglePlus,Slashdot, +# Technorati,Posterous,Tumblr,GoogleBookmarks,Newsvine, +# Evernote,Friendfeed,Vkontakte,Odnoklassniki,Mailru +needmoreshare2: + enable: false + postbottom: + enable: false + options: + iconStyle: box + boxForm: horizontal + position: bottomCenter + networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook + float: + enable: false + options: + iconStyle: box + boxForm: horizontal + position: middleRight + networks: Weibo,Wechat,Douban,QQZone,Twitter,Facebook + +# Google Webmaster tools verification setting +# See: https://www.google.com/webmasters/ +#google_site_verification: + +# Google Analytics +#google_analytics: + +# Bing Webmaster tools verification setting +# See: https://www.bing.com/webmaster/ +#bing_site_verification: + +# Yandex Webmaster tools verification setting +# See: https://webmaster.yandex.ru/ +#yandex_site_verification: + +# CNZZ count +#cnzz_siteid: + +# Application Insights +# See https://azure.microsoft.com/en-us/services/application-insights/ +# application_insights: + +# Post widgets & FB/VK comments settings. +# --------------------------------------------------------------- +# Facebook SDK Support. +# https://github.com/iissnan/hexo-theme-next/pull/410 +facebook_sdk: + enable: false + app_id: # + fb_admin: # + like_button: #true + webmaster: #true + +# Facebook comments plugin +# This plugin depends on Facebook SDK. +# If facebook_sdk.enable is false, Facebook comments plugin is unavailable. +facebook_comments_plugin: + enable: false + num_of_posts: 10 # min posts num is 1 + width: 100% # default width is 550px + scheme: light # default scheme is light (light or dark) + +# VKontakte API Support. +# To get your AppID visit https://vk.com/editapp?act=create +vkontakte_api: + enable: false + app_id: # + like: true + comments: true + num_of_posts: 10 + +# Star rating support to each article. +# To get your ID visit https://widgetpack.com +rating: + enable: false + id: # + color: fc6423 +# --------------------------------------------------------------- + +# Show number of visitors to each article. +# You can visit https://leancloud.cn get AppID and AppKey. +leancloud_visitors: + enable: false + app_id: # + app_key: # + # Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security + # If you don't care about security in lc counter and just want to use it directly + # (without hexo-leancloud-counter-security plugin), set the `security` to `false`. + security: true + betterPerformance: false + +# Another tool to show number of visitors to each article. +# visit https://console.firebase.google.com/u/0/ to get apiKey and projectId +# visit https://firebase.google.com/docs/firestore/ to get more information about firestore +firestore: + enable: false + collection: articles #required, a string collection name to access firestore database + apiKey: #required + projectId: #required + bluebird: false #enable this if you want to include bluebird 3.5.1(core version) Promise polyfill + +# Show Views/Visitors of the website/page with busuanzi. +# Get more information on http://ibruce.info/2015/04/04/busuanzi/ +busuanzi_count: + enable: false + total_visitors: true + total_visitors_icon: user + total_views: true + total_views_icon: eye + post_views: true + post_views_icon: eye + + +# Tencent analytics ID +# tencent_analytics: + +# Tencent MTA ID +# tencent_mta: + + +# Enable baidu push so that the blog will push the url to baidu automatically which is very helpful for SEO +baidu_push: false + +# Google Calendar +# Share your recent schedule to others via calendar page +# +# API Documentation: +# https://developers.google.com/google-apps/calendar/v3/reference/events/list +calendar: + enable: false + calendar_id: + api_key: + orderBy: startTime + offsetMax: 24 + offsetMin: 4 + timeZone: + showDeleted: false + singleEvents: true + maxResults: 250 + +# Algolia Search +# See: https://github.com/theme-next/hexo-theme-next/blob/master/docs/ALGOLIA-SEARCH.md +# Dependencies: https://github.com/theme-next/theme-next-algolia-instant-search +algolia_search: + enable: false + hits: + per_page: 10 + labels: + input_placeholder: Search for Posts + hits_empty: "We didn't find any results for the search: ${query}" + hits_stats: "${hits} results found in ${time} ms" + +# Local search +# Dependencies: https://github.com/theme-next/hexo-generator-searchdb +local_search: + enable: false + # if auto, trigger search by changing input + # if manual, trigger search by pressing enter key or search button + trigger: auto + # show top n results per article, show all results by setting to -1 + top_n_per_article: 1 + # unescape html strings to the readable one + unescape: false + +# Bookmark Support +# Dependencies: https://github.com/theme-next/theme-next-bookmark +bookmark: + enable: false + # if auto + # - save the reading position when closing the page + # - or clicking the bookmark-icon + # if manual, only save it by clicking the bookmark-icon + save: auto + + +# --------------------------------------------------------------- +# Tags Settings +# --------------------------------------------------------------- + +# External URL with BASE64 encrypt & decrypt. +# Usage: {% exturl text url "title" %} +# Alias: {% extlink text url "title" %} +exturl: false + +# Note tag (bs-callout). +note: + # Note tag style values: + # - simple bs-callout old alert style. Default. + # - modern bs-callout new (v2-v3) alert style. + # - flat flat callout style with background, like on Mozilla or StackOverflow. + # - disabled disable all CSS styles import of note tag. + style: simple + icons: false + border_radius: 3 + # Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6). + # Offset also applied to label tag variables. This option can work with disabled note tag. + light_bg_offset: 0 + +# Label tag. +label: true + +# Tabs tag. +tabs: + enable: true + transition: + tabs: false + labels: true + border_radius: 0 + +# Reading progress bar +# Dependencies: https://github.com/theme-next/theme-next-reading-progress +reading_progress: + enable: false + color: "#37c6c0" + height: 2px + + +#! --------------------------------------------------------------- +#! DO NOT EDIT THE FOLLOWING SETTINGS +#! UNLESS YOU KNOW WHAT YOU ARE DOING +#! --------------------------------------------------------------- + +# Use velocity to animate everything. +motion: + enable: true + async: false + transition: + # Transition variants: + # fadeIn | fadeOut | flipXIn | flipXOut | flipYIn | flipYOut | flipBounceXIn | flipBounceXOut | flipBounceYIn | flipBounceYOut + # swoopIn | swoopOut | whirlIn | whirlOut | shrinkIn | shrinkOut | expandIn | expandOut + # bounceIn | bounceOut | bounceUpIn | bounceUpOut | bounceDownIn | bounceDownOut | bounceLeftIn | bounceLeftOut | bounceRightIn | bounceRightOut + # slideUpIn | slideUpOut | slideDownIn | slideDownOut | slideLeftIn | slideLeftOut | slideRightIn | slideRightOut + # slideUpBigIn | slideUpBigOut | slideDownBigIn | slideDownBigOut | slideLeftBigIn | slideLeftBigOut | slideRightBigIn | slideRightBigOut + # perspectiveUpIn | perspectiveUpOut | perspectiveDownIn | perspectiveDownOut | perspectiveLeftIn | perspectiveLeftOut | perspectiveRightIn | perspectiveRightOut + post_block: fadeIn + post_header: slideDownIn + post_body: slideDownIn + coll_header: slideLeftIn + # Only for Pisces | Gemini. + sidebar: slideUpIn + +# Fancybox. There is support for old version 2 and new version 3. +# Please, choose only any one variant, do not need to install both. +# For install 2.x: https://github.com/theme-next/theme-next-fancybox +# For install 3.x: https://github.com/theme-next/theme-next-fancybox3 +fancybox: false + +# Added switch option for separated repo in 6.0.0. +# Dependencies: https://github.com/theme-next/theme-next-fastclick +fastclick: false + +# Added switch option for separated repo in 6.0.0. +# Dependencies: https://github.com/theme-next/theme-next-jquery-lazyload +lazyload: false + +# Progress bar in the top during page loading. +# Dependencies: https://github.com/theme-next/theme-next-pace +pace: false +# Themes list: +#pace-theme-big-counter +#pace-theme-bounce +#pace-theme-barber-shop +#pace-theme-center-atom +#pace-theme-center-circle +#pace-theme-center-radar +#pace-theme-center-simple +#pace-theme-corner-indicator +#pace-theme-fill-left +#pace-theme-flash +#pace-theme-loading-bar +#pace-theme-mac-osx +#pace-theme-minimal +# For example +# pace_theme: pace-theme-center-simple +pace_theme: pace-theme-minimal + +# Canvas-nest +# Dependencies: https://github.com/theme-next/theme-next-canvas-nest +canvas_nest: false + +# JavaScript 3D library. +# Dependencies: https://github.com/theme-next/theme-next-three +# three_waves +three_waves: false +# canvas_lines +canvas_lines: false +# canvas_sphere +canvas_sphere: false + +# Only fit scheme Pisces +# Dependencies: https://github.com/theme-next/theme-next-canvas-ribbon +# Canvas-ribbon +# size: The width of the ribbon. +# alpha: The transparency of the ribbon. +# zIndex: The display level of the ribbon. +canvas_ribbon: + enable: false + size: 300 + alpha: 0.6 + zIndex: -1 + +# Script Vendors. +# Set a CDN address for the vendor you want to customize. +# For example +# jquery: https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js +# Be aware that you should use the same version as internal ones to avoid potential problems. +# Please use the https protocol of CDN files when you enable https on your site. +vendors: + # Internal path prefix. Please do not edit it. + _internal: lib + + # Internal version: 2.1.3 + jquery: + + # Internal version: 2.1.5 + # See: http://fancyapps.com/fancybox/ + fancybox: + fancybox_css: + + # Internal version: 1.0.6 + # See: https://github.com/ftlabs/fastclick + fastclick: + + # Internal version: 1.9.7 + # See: https://github.com/tuupola/jquery_lazyload + lazyload: + + # Internal version: 1.2.1 + # See: http://VelocityJS.org + velocity: + + # Internal version: 1.2.1 + # See: http://VelocityJS.org + velocity_ui: + + # Internal version: 0.7.9 + # See: https://faisalman.github.io/ua-parser-js/ + ua_parser: + + # Internal version: 4.6.2 + # See: http://fontawesome.io/ + fontawesome: + + # Internal version: 1 + # https://www.algolia.com + algolia_instant_js: + algolia_instant_css: + + # Internal version: 1.0.2 + # See: https://github.com/HubSpot/pace + # Or use direct links below: + # pace: //cdn.bootcss.com/pace/1.0.2/pace.min.js + # pace_css: //cdn.bootcss.com/pace/1.0.2/themes/blue/pace-theme-flash.min.css + pace: + pace_css: + + # Internal version: 1.0.0 + # https://github.com/hustcc/canvas-nest.js + canvas_nest: + + # three + three: + + # three_waves + # https://github.com/jjandxa/three_waves + three_waves: + + # three_waves + # https://github.com/jjandxa/canvas_lines + canvas_lines: + + # three_waves + # https://github.com/jjandxa/canvas_sphere + canvas_sphere: + + # Internal version: 1.0.0 + # https://github.com/zproo/canvas-ribbon + canvas_ribbon: + + # Internal version: 3.3.0 + # https://github.com/ethantw/Han + Han: + + # Internal version: 3.3.0 + # https://github.com/vinta/pangu.js + pangu: + + # needMoreShare2 + # https://github.com/revir/need-more-share2 + needmoreshare2_js: + needmoreshare2_css: + + # bookmark + # Internal version: 1.0.0 + # https://github.com/theme-next/theme-next-bookmark + bookmark: + + # reading_progress + # Internal version: 1.0 + # https://github.com/theme-next/theme-next-reading-progress + # Example: https://cdn.jsdelivr.net/gh/theme-next/theme-next-reading-progress@1.1/reading_progress.min.js + reading_progress: + + # valine comment + # Example: https://cdn.jsdelivr.net/npm/valine@1.1.8/dist/Valine.min.js + valine: + + +# Assets +css: css +js: js +images: images diff --git a/bower.json b/themes/next/bower.json similarity index 100% rename from bower.json rename to themes/next/bower.json diff --git a/crowdin.yml b/themes/next/crowdin.yml similarity index 100% rename from crowdin.yml rename to themes/next/crowdin.yml diff --git a/docs/AGPL3.md b/themes/next/docs/AGPL3.md similarity index 100% rename from docs/AGPL3.md rename to themes/next/docs/AGPL3.md diff --git a/docs/ALGOLIA-SEARCH.md b/themes/next/docs/ALGOLIA-SEARCH.md similarity index 100% rename from docs/ALGOLIA-SEARCH.md rename to themes/next/docs/ALGOLIA-SEARCH.md diff --git a/docs/AUTHORS.md b/themes/next/docs/AUTHORS.md similarity index 100% rename from docs/AUTHORS.md rename to themes/next/docs/AUTHORS.md diff --git a/docs/DATA-FILES.md b/themes/next/docs/DATA-FILES.md similarity index 100% rename from docs/DATA-FILES.md rename to themes/next/docs/DATA-FILES.md diff --git a/docs/INSTALLATION.md b/themes/next/docs/INSTALLATION.md similarity index 100% rename from docs/INSTALLATION.md rename to themes/next/docs/INSTALLATION.md diff --git a/docs/LEANCLOUD-COUNTER-SECURITY.md b/themes/next/docs/LEANCLOUD-COUNTER-SECURITY.md similarity index 100% rename from docs/LEANCLOUD-COUNTER-SECURITY.md rename to themes/next/docs/LEANCLOUD-COUNTER-SECURITY.md diff --git a/docs/LICENSE b/themes/next/docs/LICENSE similarity index 100% rename from docs/LICENSE rename to themes/next/docs/LICENSE diff --git a/docs/MATH.md b/themes/next/docs/MATH.md similarity index 100% rename from docs/MATH.md rename to themes/next/docs/MATH.md diff --git a/docs/UPDATE-FROM-5.1.X.md b/themes/next/docs/UPDATE-FROM-5.1.X.md similarity index 100% rename from docs/UPDATE-FROM-5.1.X.md rename to themes/next/docs/UPDATE-FROM-5.1.X.md diff --git a/docs/ru/DATA-FILES.md b/themes/next/docs/ru/DATA-FILES.md similarity index 100% rename from docs/ru/DATA-FILES.md rename to themes/next/docs/ru/DATA-FILES.md diff --git a/docs/ru/INSTALLATION.md b/themes/next/docs/ru/INSTALLATION.md similarity index 100% rename from docs/ru/INSTALLATION.md rename to themes/next/docs/ru/INSTALLATION.md diff --git a/docs/ru/README.md b/themes/next/docs/ru/README.md similarity index 100% rename from docs/ru/README.md rename to themes/next/docs/ru/README.md diff --git a/docs/ru/UPDATE-FROM-5.1.X.md b/themes/next/docs/ru/UPDATE-FROM-5.1.X.md similarity index 100% rename from docs/ru/UPDATE-FROM-5.1.X.md rename to themes/next/docs/ru/UPDATE-FROM-5.1.X.md diff --git a/docs/zh-CN/ALGOLIA-SEARCH.md b/themes/next/docs/zh-CN/ALGOLIA-SEARCH.md similarity index 100% rename from docs/zh-CN/ALGOLIA-SEARCH.md rename to themes/next/docs/zh-CN/ALGOLIA-SEARCH.md diff --git a/docs/zh-CN/CODE_OF_CONDUCT.md b/themes/next/docs/zh-CN/CODE_OF_CONDUCT.md similarity index 100% rename from docs/zh-CN/CODE_OF_CONDUCT.md rename to themes/next/docs/zh-CN/CODE_OF_CONDUCT.md diff --git a/docs/zh-CN/CONTRIBUTING.md b/themes/next/docs/zh-CN/CONTRIBUTING.md similarity index 100% rename from docs/zh-CN/CONTRIBUTING.md rename to themes/next/docs/zh-CN/CONTRIBUTING.md diff --git a/docs/zh-CN/DATA-FILES.md b/themes/next/docs/zh-CN/DATA-FILES.md similarity index 100% rename from docs/zh-CN/DATA-FILES.md rename to themes/next/docs/zh-CN/DATA-FILES.md diff --git a/docs/zh-CN/INSTALLATION.md b/themes/next/docs/zh-CN/INSTALLATION.md similarity index 100% rename from docs/zh-CN/INSTALLATION.md rename to themes/next/docs/zh-CN/INSTALLATION.md diff --git a/docs/zh-CN/LEANCLOUD-COUNTER-SECURITY.md b/themes/next/docs/zh-CN/LEANCLOUD-COUNTER-SECURITY.md similarity index 100% rename from docs/zh-CN/LEANCLOUD-COUNTER-SECURITY.md rename to themes/next/docs/zh-CN/LEANCLOUD-COUNTER-SECURITY.md diff --git a/docs/zh-CN/MATH.md b/themes/next/docs/zh-CN/MATH.md similarity index 100% rename from docs/zh-CN/MATH.md rename to themes/next/docs/zh-CN/MATH.md diff --git a/docs/zh-CN/README.md b/themes/next/docs/zh-CN/README.md similarity index 100% rename from docs/zh-CN/README.md rename to themes/next/docs/zh-CN/README.md diff --git a/docs/zh-CN/UPDATE-FROM-5.1.X.md b/themes/next/docs/zh-CN/UPDATE-FROM-5.1.X.md similarity index 100% rename from docs/zh-CN/UPDATE-FROM-5.1.X.md rename to themes/next/docs/zh-CN/UPDATE-FROM-5.1.X.md diff --git a/gulpfile.coffee b/themes/next/gulpfile.coffee similarity index 100% rename from gulpfile.coffee rename to themes/next/gulpfile.coffee diff --git a/languages/de.yml b/themes/next/languages/de.yml similarity index 100% rename from languages/de.yml rename to themes/next/languages/de.yml diff --git a/languages/default.yml b/themes/next/languages/default.yml similarity index 100% rename from languages/default.yml rename to themes/next/languages/default.yml diff --git a/languages/en.yml b/themes/next/languages/en.yml similarity index 100% rename from languages/en.yml rename to themes/next/languages/en.yml diff --git a/languages/fr.yml b/themes/next/languages/fr.yml similarity index 100% rename from languages/fr.yml rename to themes/next/languages/fr.yml diff --git a/languages/id.yml b/themes/next/languages/id.yml similarity index 100% rename from languages/id.yml rename to themes/next/languages/id.yml diff --git a/languages/it.yml b/themes/next/languages/it.yml similarity index 100% rename from languages/it.yml rename to themes/next/languages/it.yml diff --git a/languages/ja.yml b/themes/next/languages/ja.yml similarity index 100% rename from languages/ja.yml rename to themes/next/languages/ja.yml diff --git a/languages/ko.yml b/themes/next/languages/ko.yml similarity index 100% rename from languages/ko.yml rename to themes/next/languages/ko.yml diff --git a/languages/nl.yml b/themes/next/languages/nl.yml similarity index 100% rename from languages/nl.yml rename to themes/next/languages/nl.yml diff --git a/languages/pt-BR.yml b/themes/next/languages/pt-BR.yml similarity index 100% rename from languages/pt-BR.yml rename to themes/next/languages/pt-BR.yml diff --git a/languages/pt.yml b/themes/next/languages/pt.yml similarity index 100% rename from languages/pt.yml rename to themes/next/languages/pt.yml diff --git a/languages/ru.yml b/themes/next/languages/ru.yml similarity index 100% rename from languages/ru.yml rename to themes/next/languages/ru.yml diff --git a/languages/tr.yml b/themes/next/languages/tr.yml similarity index 100% rename from languages/tr.yml rename to themes/next/languages/tr.yml diff --git a/languages/vi.yml b/themes/next/languages/vi.yml similarity index 100% rename from languages/vi.yml rename to themes/next/languages/vi.yml diff --git a/languages/zh-CN.yml b/themes/next/languages/zh-CN.yml similarity index 98% rename from languages/zh-CN.yml rename to themes/next/languages/zh-CN.yml index 0d828c89c..4fc0eb8d1 100644 --- a/languages/zh-CN.yml +++ b/themes/next/languages/zh-CN.yml @@ -9,6 +9,8 @@ menu: archives: 归档 categories: 分类 tags: 标签 + books: 阅读 + movies: 电影 about: 关于 search: 搜索 schedule: 日程表 diff --git a/languages/zh-HK.yml b/themes/next/languages/zh-HK.yml similarity index 100% rename from languages/zh-HK.yml rename to themes/next/languages/zh-HK.yml diff --git a/languages/zh-TW.yml b/themes/next/languages/zh-TW.yml similarity index 100% rename from languages/zh-TW.yml rename to themes/next/languages/zh-TW.yml diff --git a/layout/_custom/head.swig b/themes/next/layout/_custom/head.swig similarity index 100% rename from layout/_custom/head.swig rename to themes/next/layout/_custom/head.swig diff --git a/layout/_custom/header.swig b/themes/next/layout/_custom/header.swig similarity index 100% rename from layout/_custom/header.swig rename to themes/next/layout/_custom/header.swig diff --git a/layout/_custom/sidebar.swig b/themes/next/layout/_custom/sidebar.swig similarity index 100% rename from layout/_custom/sidebar.swig rename to themes/next/layout/_custom/sidebar.swig diff --git a/layout/_layout.swig b/themes/next/layout/_layout.swig similarity index 100% rename from layout/_layout.swig rename to themes/next/layout/_layout.swig diff --git a/layout/_macro/menu/menu-badge.swig b/themes/next/layout/_macro/menu/menu-badge.swig similarity index 100% rename from layout/_macro/menu/menu-badge.swig rename to themes/next/layout/_macro/menu/menu-badge.swig diff --git a/layout/_macro/menu/menu-item.swig b/themes/next/layout/_macro/menu/menu-item.swig similarity index 100% rename from layout/_macro/menu/menu-item.swig rename to themes/next/layout/_macro/menu/menu-item.swig diff --git a/layout/_macro/post-collapse.swig b/themes/next/layout/_macro/post-collapse.swig similarity index 100% rename from layout/_macro/post-collapse.swig rename to themes/next/layout/_macro/post-collapse.swig diff --git a/layout/_macro/post-copyright.swig b/themes/next/layout/_macro/post-copyright.swig similarity index 100% rename from layout/_macro/post-copyright.swig rename to themes/next/layout/_macro/post-copyright.swig diff --git a/layout/_macro/post-related.swig b/themes/next/layout/_macro/post-related.swig similarity index 100% rename from layout/_macro/post-related.swig rename to themes/next/layout/_macro/post-related.swig diff --git a/layout/_macro/post.swig b/themes/next/layout/_macro/post.swig similarity index 100% rename from layout/_macro/post.swig rename to themes/next/layout/_macro/post.swig diff --git a/layout/_macro/reward.swig b/themes/next/layout/_macro/reward.swig similarity index 100% rename from layout/_macro/reward.swig rename to themes/next/layout/_macro/reward.swig diff --git a/layout/_macro/sidebar.swig b/themes/next/layout/_macro/sidebar.swig similarity index 100% rename from layout/_macro/sidebar.swig rename to themes/next/layout/_macro/sidebar.swig diff --git a/layout/_macro/wechat-subscriber.swig b/themes/next/layout/_macro/wechat-subscriber.swig similarity index 100% rename from layout/_macro/wechat-subscriber.swig rename to themes/next/layout/_macro/wechat-subscriber.swig diff --git a/layout/_partials/breadcrumb.swig b/themes/next/layout/_partials/breadcrumb.swig similarity index 100% rename from layout/_partials/breadcrumb.swig rename to themes/next/layout/_partials/breadcrumb.swig diff --git a/layout/_partials/comments.swig b/themes/next/layout/_partials/comments.swig similarity index 100% rename from layout/_partials/comments.swig rename to themes/next/layout/_partials/comments.swig diff --git a/layout/_partials/footer.swig b/themes/next/layout/_partials/footer.swig similarity index 100% rename from layout/_partials/footer.swig rename to themes/next/layout/_partials/footer.swig diff --git a/layout/_partials/head/external-fonts.swig b/themes/next/layout/_partials/head/external-fonts.swig similarity index 100% rename from layout/_partials/head/external-fonts.swig rename to themes/next/layout/_partials/head/external-fonts.swig diff --git a/layout/_partials/head/head-unique.swig b/themes/next/layout/_partials/head/head-unique.swig similarity index 100% rename from layout/_partials/head/head-unique.swig rename to themes/next/layout/_partials/head/head-unique.swig diff --git a/layout/_partials/head/head.swig b/themes/next/layout/_partials/head/head.swig similarity index 100% rename from layout/_partials/head/head.swig rename to themes/next/layout/_partials/head/head.swig diff --git a/layout/_partials/header/brand.swig b/themes/next/layout/_partials/header/brand.swig similarity index 100% rename from layout/_partials/header/brand.swig rename to themes/next/layout/_partials/header/brand.swig diff --git a/layout/_partials/header/index.swig b/themes/next/layout/_partials/header/index.swig similarity index 100% rename from layout/_partials/header/index.swig rename to themes/next/layout/_partials/header/index.swig diff --git a/layout/_partials/header/menu.swig b/themes/next/layout/_partials/header/menu.swig similarity index 100% rename from layout/_partials/header/menu.swig rename to themes/next/layout/_partials/header/menu.swig diff --git a/layout/_partials/header/sub-menu.swig b/themes/next/layout/_partials/header/sub-menu.swig similarity index 100% rename from layout/_partials/header/sub-menu.swig rename to themes/next/layout/_partials/header/sub-menu.swig diff --git a/layout/_partials/page-header.swig b/themes/next/layout/_partials/page-header.swig similarity index 100% rename from layout/_partials/page-header.swig rename to themes/next/layout/_partials/page-header.swig diff --git a/layout/_partials/pagination.swig b/themes/next/layout/_partials/pagination.swig similarity index 100% rename from layout/_partials/pagination.swig rename to themes/next/layout/_partials/pagination.swig diff --git a/layout/_partials/search/index.swig b/themes/next/layout/_partials/search/index.swig similarity index 100% rename from layout/_partials/search/index.swig rename to themes/next/layout/_partials/search/index.swig diff --git a/layout/_partials/search/localsearch.swig b/themes/next/layout/_partials/search/localsearch.swig similarity index 100% rename from layout/_partials/search/localsearch.swig rename to themes/next/layout/_partials/search/localsearch.swig diff --git a/layout/_partials/search/swiftype.swig b/themes/next/layout/_partials/search/swiftype.swig similarity index 100% rename from layout/_partials/search/swiftype.swig rename to themes/next/layout/_partials/search/swiftype.swig diff --git a/layout/_partials/search/tinysou.swig b/themes/next/layout/_partials/search/tinysou.swig similarity index 100% rename from layout/_partials/search/tinysou.swig rename to themes/next/layout/_partials/search/tinysou.swig diff --git a/layout/_partials/share/add-this.swig b/themes/next/layout/_partials/share/add-this.swig similarity index 100% rename from layout/_partials/share/add-this.swig rename to themes/next/layout/_partials/share/add-this.swig diff --git a/layout/_partials/share/baidushare.swig b/themes/next/layout/_partials/share/baidushare.swig similarity index 100% rename from layout/_partials/share/baidushare.swig rename to themes/next/layout/_partials/share/baidushare.swig diff --git a/layout/_partials/share/duoshuo_share.swig b/themes/next/layout/_partials/share/duoshuo_share.swig similarity index 100% rename from layout/_partials/share/duoshuo_share.swig rename to themes/next/layout/_partials/share/duoshuo_share.swig diff --git a/layout/_partials/share/jiathis.swig b/themes/next/layout/_partials/share/jiathis.swig similarity index 100% rename from layout/_partials/share/jiathis.swig rename to themes/next/layout/_partials/share/jiathis.swig diff --git a/layout/_scripts/boostrap.swig b/themes/next/layout/_scripts/boostrap.swig similarity index 100% rename from layout/_scripts/boostrap.swig rename to themes/next/layout/_scripts/boostrap.swig diff --git a/layout/_scripts/commons.swig b/themes/next/layout/_scripts/commons.swig similarity index 100% rename from layout/_scripts/commons.swig rename to themes/next/layout/_scripts/commons.swig diff --git a/layout/_scripts/noscript.swig b/themes/next/layout/_scripts/noscript.swig similarity index 100% rename from layout/_scripts/noscript.swig rename to themes/next/layout/_scripts/noscript.swig diff --git a/layout/_scripts/pages/post-details.swig b/themes/next/layout/_scripts/pages/post-details.swig similarity index 100% rename from layout/_scripts/pages/post-details.swig rename to themes/next/layout/_scripts/pages/post-details.swig diff --git a/layout/_scripts/schemes/gemini.swig b/themes/next/layout/_scripts/schemes/gemini.swig similarity index 100% rename from layout/_scripts/schemes/gemini.swig rename to themes/next/layout/_scripts/schemes/gemini.swig diff --git a/layout/_scripts/schemes/mist.swig b/themes/next/layout/_scripts/schemes/mist.swig similarity index 100% rename from layout/_scripts/schemes/mist.swig rename to themes/next/layout/_scripts/schemes/mist.swig diff --git a/layout/_scripts/schemes/muse.swig b/themes/next/layout/_scripts/schemes/muse.swig similarity index 100% rename from layout/_scripts/schemes/muse.swig rename to themes/next/layout/_scripts/schemes/muse.swig diff --git a/layout/_scripts/schemes/pisces.swig b/themes/next/layout/_scripts/schemes/pisces.swig similarity index 100% rename from layout/_scripts/schemes/pisces.swig rename to themes/next/layout/_scripts/schemes/pisces.swig diff --git a/layout/_scripts/vendors.swig b/themes/next/layout/_scripts/vendors.swig similarity index 100% rename from layout/_scripts/vendors.swig rename to themes/next/layout/_scripts/vendors.swig diff --git a/layout/_third-party/analytics/analytics-with-widget.swig b/themes/next/layout/_third-party/analytics/analytics-with-widget.swig similarity index 100% rename from layout/_third-party/analytics/analytics-with-widget.swig rename to themes/next/layout/_third-party/analytics/analytics-with-widget.swig diff --git a/layout/_third-party/analytics/application-insights.swig b/themes/next/layout/_third-party/analytics/application-insights.swig similarity index 100% rename from layout/_third-party/analytics/application-insights.swig rename to themes/next/layout/_third-party/analytics/application-insights.swig diff --git a/layout/_third-party/analytics/baidu-analytics.swig b/themes/next/layout/_third-party/analytics/baidu-analytics.swig similarity index 100% rename from layout/_third-party/analytics/baidu-analytics.swig rename to themes/next/layout/_third-party/analytics/baidu-analytics.swig diff --git a/layout/_third-party/analytics/busuanzi-counter.swig b/themes/next/layout/_third-party/analytics/busuanzi-counter.swig similarity index 100% rename from layout/_third-party/analytics/busuanzi-counter.swig rename to themes/next/layout/_third-party/analytics/busuanzi-counter.swig diff --git a/layout/_third-party/analytics/cnzz-analytics.swig b/themes/next/layout/_third-party/analytics/cnzz-analytics.swig similarity index 100% rename from layout/_third-party/analytics/cnzz-analytics.swig rename to themes/next/layout/_third-party/analytics/cnzz-analytics.swig diff --git a/layout/_third-party/analytics/facebook-sdk.swig b/themes/next/layout/_third-party/analytics/facebook-sdk.swig similarity index 100% rename from layout/_third-party/analytics/facebook-sdk.swig rename to themes/next/layout/_third-party/analytics/facebook-sdk.swig diff --git a/layout/_third-party/analytics/firestore.swig b/themes/next/layout/_third-party/analytics/firestore.swig similarity index 100% rename from layout/_third-party/analytics/firestore.swig rename to themes/next/layout/_third-party/analytics/firestore.swig diff --git a/layout/_third-party/analytics/google-analytics.swig b/themes/next/layout/_third-party/analytics/google-analytics.swig similarity index 100% rename from layout/_third-party/analytics/google-analytics.swig rename to themes/next/layout/_third-party/analytics/google-analytics.swig diff --git a/layout/_third-party/analytics/index.swig b/themes/next/layout/_third-party/analytics/index.swig similarity index 100% rename from layout/_third-party/analytics/index.swig rename to themes/next/layout/_third-party/analytics/index.swig diff --git a/layout/_third-party/analytics/lean-analytics.swig b/themes/next/layout/_third-party/analytics/lean-analytics.swig similarity index 100% rename from layout/_third-party/analytics/lean-analytics.swig rename to themes/next/layout/_third-party/analytics/lean-analytics.swig diff --git a/layout/_third-party/analytics/tencent-analytics.swig b/themes/next/layout/_third-party/analytics/tencent-analytics.swig similarity index 100% rename from layout/_third-party/analytics/tencent-analytics.swig rename to themes/next/layout/_third-party/analytics/tencent-analytics.swig diff --git a/layout/_third-party/analytics/tencent-mta.swig b/themes/next/layout/_third-party/analytics/tencent-mta.swig similarity index 100% rename from layout/_third-party/analytics/tencent-mta.swig rename to themes/next/layout/_third-party/analytics/tencent-mta.swig diff --git a/layout/_third-party/analytics/vkontakte-api.swig b/themes/next/layout/_third-party/analytics/vkontakte-api.swig similarity index 100% rename from layout/_third-party/analytics/vkontakte-api.swig rename to themes/next/layout/_third-party/analytics/vkontakte-api.swig diff --git a/layout/_third-party/bookmark.swig b/themes/next/layout/_third-party/bookmark.swig similarity index 100% rename from layout/_third-party/bookmark.swig rename to themes/next/layout/_third-party/bookmark.swig diff --git a/layout/_third-party/comments/changyan.swig b/themes/next/layout/_third-party/comments/changyan.swig similarity index 100% rename from layout/_third-party/comments/changyan.swig rename to themes/next/layout/_third-party/comments/changyan.swig diff --git a/layout/_third-party/comments/disqus.swig b/themes/next/layout/_third-party/comments/disqus.swig similarity index 100% rename from layout/_third-party/comments/disqus.swig rename to themes/next/layout/_third-party/comments/disqus.swig diff --git a/layout/_third-party/comments/gitment.swig b/themes/next/layout/_third-party/comments/gitment.swig similarity index 100% rename from layout/_third-party/comments/gitment.swig rename to themes/next/layout/_third-party/comments/gitment.swig diff --git a/layout/_third-party/comments/hypercomments.swig b/themes/next/layout/_third-party/comments/hypercomments.swig similarity index 100% rename from layout/_third-party/comments/hypercomments.swig rename to themes/next/layout/_third-party/comments/hypercomments.swig diff --git a/layout/_third-party/comments/index.swig b/themes/next/layout/_third-party/comments/index.swig similarity index 100% rename from layout/_third-party/comments/index.swig rename to themes/next/layout/_third-party/comments/index.swig diff --git a/layout/_third-party/comments/livere.swig b/themes/next/layout/_third-party/comments/livere.swig similarity index 100% rename from layout/_third-party/comments/livere.swig rename to themes/next/layout/_third-party/comments/livere.swig diff --git a/layout/_third-party/comments/valine.swig b/themes/next/layout/_third-party/comments/valine.swig similarity index 100% rename from layout/_third-party/comments/valine.swig rename to themes/next/layout/_third-party/comments/valine.swig diff --git a/layout/_third-party/comments/youyan.swig b/themes/next/layout/_third-party/comments/youyan.swig similarity index 100% rename from layout/_third-party/comments/youyan.swig rename to themes/next/layout/_third-party/comments/youyan.swig diff --git a/layout/_third-party/copy-code.swig b/themes/next/layout/_third-party/copy-code.swig similarity index 100% rename from layout/_third-party/copy-code.swig rename to themes/next/layout/_third-party/copy-code.swig diff --git a/layout/_third-party/exturl.swig b/themes/next/layout/_third-party/exturl.swig similarity index 100% rename from layout/_third-party/exturl.swig rename to themes/next/layout/_third-party/exturl.swig diff --git a/layout/_third-party/github-banner.swig b/themes/next/layout/_third-party/github-banner.swig similarity index 100% rename from layout/_third-party/github-banner.swig rename to themes/next/layout/_third-party/github-banner.swig diff --git a/layout/_third-party/math/index.swig b/themes/next/layout/_third-party/math/index.swig similarity index 100% rename from layout/_third-party/math/index.swig rename to themes/next/layout/_third-party/math/index.swig diff --git a/layout/_third-party/math/katex.swig b/themes/next/layout/_third-party/math/katex.swig similarity index 100% rename from layout/_third-party/math/katex.swig rename to themes/next/layout/_third-party/math/katex.swig diff --git a/layout/_third-party/math/mathjax.swig b/themes/next/layout/_third-party/math/mathjax.swig similarity index 100% rename from layout/_third-party/math/mathjax.swig rename to themes/next/layout/_third-party/math/mathjax.swig diff --git a/layout/_third-party/needsharebutton.swig b/themes/next/layout/_third-party/needsharebutton.swig similarity index 100% rename from layout/_third-party/needsharebutton.swig rename to themes/next/layout/_third-party/needsharebutton.swig diff --git a/layout/_third-party/pangu.swig b/themes/next/layout/_third-party/pangu.swig similarity index 100% rename from layout/_third-party/pangu.swig rename to themes/next/layout/_third-party/pangu.swig diff --git a/layout/_third-party/rating.swig b/themes/next/layout/_third-party/rating.swig similarity index 100% rename from layout/_third-party/rating.swig rename to themes/next/layout/_third-party/rating.swig diff --git a/layout/_third-party/schedule.swig b/themes/next/layout/_third-party/schedule.swig similarity index 100% rename from layout/_third-party/schedule.swig rename to themes/next/layout/_third-party/schedule.swig diff --git a/layout/_third-party/scroll-cookie.swig b/themes/next/layout/_third-party/scroll-cookie.swig similarity index 100% rename from layout/_third-party/scroll-cookie.swig rename to themes/next/layout/_third-party/scroll-cookie.swig diff --git a/layout/_third-party/search/algolia-search/assets.swig b/themes/next/layout/_third-party/search/algolia-search/assets.swig similarity index 100% rename from layout/_third-party/search/algolia-search/assets.swig rename to themes/next/layout/_third-party/search/algolia-search/assets.swig diff --git a/layout/_third-party/search/algolia-search/dom.swig b/themes/next/layout/_third-party/search/algolia-search/dom.swig similarity index 100% rename from layout/_third-party/search/algolia-search/dom.swig rename to themes/next/layout/_third-party/search/algolia-search/dom.swig diff --git a/layout/_third-party/search/index.swig b/themes/next/layout/_third-party/search/index.swig similarity index 100% rename from layout/_third-party/search/index.swig rename to themes/next/layout/_third-party/search/index.swig diff --git a/layout/_third-party/search/localsearch.swig b/themes/next/layout/_third-party/search/localsearch.swig similarity index 100% rename from layout/_third-party/search/localsearch.swig rename to themes/next/layout/_third-party/search/localsearch.swig diff --git a/layout/_third-party/search/tinysou.swig b/themes/next/layout/_third-party/search/tinysou.swig similarity index 100% rename from layout/_third-party/search/tinysou.swig rename to themes/next/layout/_third-party/search/tinysou.swig diff --git a/layout/_third-party/seo/baidu-push.swig b/themes/next/layout/_third-party/seo/baidu-push.swig similarity index 100% rename from layout/_third-party/seo/baidu-push.swig rename to themes/next/layout/_third-party/seo/baidu-push.swig diff --git a/layout/archive.swig b/themes/next/layout/archive.swig similarity index 100% rename from layout/archive.swig rename to themes/next/layout/archive.swig diff --git a/layout/category.swig b/themes/next/layout/category.swig similarity index 100% rename from layout/category.swig rename to themes/next/layout/category.swig diff --git a/layout/index.swig b/themes/next/layout/index.swig similarity index 100% rename from layout/index.swig rename to themes/next/layout/index.swig diff --git a/layout/page.swig b/themes/next/layout/page.swig similarity index 100% rename from layout/page.swig rename to themes/next/layout/page.swig diff --git a/layout/post.swig b/themes/next/layout/post.swig similarity index 100% rename from layout/post.swig rename to themes/next/layout/post.swig diff --git a/layout/schedule.swig b/themes/next/layout/schedule.swig similarity index 100% rename from layout/schedule.swig rename to themes/next/layout/schedule.swig diff --git a/layout/tag.swig b/themes/next/layout/tag.swig similarity index 100% rename from layout/tag.swig rename to themes/next/layout/tag.swig diff --git a/themes/next/package.json b/themes/next/package.json new file mode 100644 index 000000000..dcd68887a --- /dev/null +++ b/themes/next/package.json @@ -0,0 +1,36 @@ +{ + "name": "hexo-theme-next", + "version": "6.3.0", + "description": "Elegant and powerful theme for Hexo", + "main": "index.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "gulp" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/theme-next/hexo-theme-next.git" + }, + "keywords": [ + "hexo", + "theme", + "next" + ], + "author": "NexT (https://theme-next.org)", + "license": "AGPL", + "bugs": { + "url": "https://github.com/theme-next/hexo-theme-next/issues" + }, + "homepage": "https://theme-next.org", + "devDependencies": { + "coffee-script": "^1.10.0", + "gulp": "^3.9.0", + "gulp-jshint": "^1.12.0", + "gulp-shell": "^0.6.1", + "js-yaml": "^3.8.1", + "jshint-stylish": "^2.1.0", + "stylint": "^1.5.9" + } +} diff --git a/scripts/helpers.js b/themes/next/scripts/helpers.js similarity index 100% rename from scripts/helpers.js rename to themes/next/scripts/helpers.js diff --git a/scripts/merge-configs.js b/themes/next/scripts/merge-configs.js similarity index 100% rename from scripts/merge-configs.js rename to themes/next/scripts/merge-configs.js diff --git a/scripts/merge.js b/themes/next/scripts/merge.js similarity index 100% rename from scripts/merge.js rename to themes/next/scripts/merge.js diff --git a/scripts/tags/button.js b/themes/next/scripts/tags/button.js similarity index 100% rename from scripts/tags/button.js rename to themes/next/scripts/tags/button.js diff --git a/scripts/tags/center-quote.js b/themes/next/scripts/tags/center-quote.js similarity index 100% rename from scripts/tags/center-quote.js rename to themes/next/scripts/tags/center-quote.js diff --git a/scripts/tags/exturl.js b/themes/next/scripts/tags/exturl.js similarity index 100% rename from scripts/tags/exturl.js rename to themes/next/scripts/tags/exturl.js diff --git a/scripts/tags/full-image.js b/themes/next/scripts/tags/full-image.js similarity index 100% rename from scripts/tags/full-image.js rename to themes/next/scripts/tags/full-image.js diff --git a/scripts/tags/group-pictures.js b/themes/next/scripts/tags/group-pictures.js similarity index 100% rename from scripts/tags/group-pictures.js rename to themes/next/scripts/tags/group-pictures.js diff --git a/scripts/tags/include-raw.js b/themes/next/scripts/tags/include-raw.js similarity index 100% rename from scripts/tags/include-raw.js rename to themes/next/scripts/tags/include-raw.js diff --git a/scripts/tags/label.js b/themes/next/scripts/tags/label.js similarity index 100% rename from scripts/tags/label.js rename to themes/next/scripts/tags/label.js diff --git a/scripts/tags/lazy-image.js b/themes/next/scripts/tags/lazy-image.js similarity index 100% rename from scripts/tags/lazy-image.js rename to themes/next/scripts/tags/lazy-image.js diff --git a/scripts/tags/note.js b/themes/next/scripts/tags/note.js similarity index 100% rename from scripts/tags/note.js rename to themes/next/scripts/tags/note.js diff --git a/scripts/tags/tabs.js b/themes/next/scripts/tags/tabs.js similarity index 100% rename from scripts/tags/tabs.js rename to themes/next/scripts/tags/tabs.js diff --git a/source/css/_common/components/back-to-top-sidebar.styl b/themes/next/source/css/_common/components/back-to-top-sidebar.styl similarity index 100% rename from source/css/_common/components/back-to-top-sidebar.styl rename to themes/next/source/css/_common/components/back-to-top-sidebar.styl diff --git a/source/css/_common/components/back-to-top.styl b/themes/next/source/css/_common/components/back-to-top.styl similarity index 100% rename from source/css/_common/components/back-to-top.styl rename to themes/next/source/css/_common/components/back-to-top.styl diff --git a/source/css/_common/components/buttons.styl b/themes/next/source/css/_common/components/buttons.styl similarity index 100% rename from source/css/_common/components/buttons.styl rename to themes/next/source/css/_common/components/buttons.styl diff --git a/source/css/_common/components/comments.styl b/themes/next/source/css/_common/components/comments.styl similarity index 100% rename from source/css/_common/components/comments.styl rename to themes/next/source/css/_common/components/comments.styl diff --git a/source/css/_common/components/components.styl b/themes/next/source/css/_common/components/components.styl similarity index 100% rename from source/css/_common/components/components.styl rename to themes/next/source/css/_common/components/components.styl diff --git a/source/css/_common/components/footer/footer.styl b/themes/next/source/css/_common/components/footer/footer.styl similarity index 100% rename from source/css/_common/components/footer/footer.styl rename to themes/next/source/css/_common/components/footer/footer.styl diff --git a/source/css/_common/components/header/github-banner.styl b/themes/next/source/css/_common/components/header/github-banner.styl similarity index 100% rename from source/css/_common/components/header/github-banner.styl rename to themes/next/source/css/_common/components/header/github-banner.styl diff --git a/source/css/_common/components/header/header.styl b/themes/next/source/css/_common/components/header/header.styl similarity index 100% rename from source/css/_common/components/header/header.styl rename to themes/next/source/css/_common/components/header/header.styl diff --git a/source/css/_common/components/header/headerband.styl b/themes/next/source/css/_common/components/header/headerband.styl similarity index 100% rename from source/css/_common/components/header/headerband.styl rename to themes/next/source/css/_common/components/header/headerband.styl diff --git a/source/css/_common/components/header/menu.styl b/themes/next/source/css/_common/components/header/menu.styl similarity index 100% rename from source/css/_common/components/header/menu.styl rename to themes/next/source/css/_common/components/header/menu.styl diff --git a/source/css/_common/components/header/site-meta.styl b/themes/next/source/css/_common/components/header/site-meta.styl similarity index 100% rename from source/css/_common/components/header/site-meta.styl rename to themes/next/source/css/_common/components/header/site-meta.styl diff --git a/source/css/_common/components/header/site-nav.styl b/themes/next/source/css/_common/components/header/site-nav.styl similarity index 100% rename from source/css/_common/components/header/site-nav.styl rename to themes/next/source/css/_common/components/header/site-nav.styl diff --git a/source/css/_common/components/highlight/diff.styl b/themes/next/source/css/_common/components/highlight/diff.styl similarity index 100% rename from source/css/_common/components/highlight/diff.styl rename to themes/next/source/css/_common/components/highlight/diff.styl diff --git a/source/css/_common/components/highlight/highlight.styl b/themes/next/source/css/_common/components/highlight/highlight.styl similarity index 100% rename from source/css/_common/components/highlight/highlight.styl rename to themes/next/source/css/_common/components/highlight/highlight.styl diff --git a/source/css/_common/components/highlight/theme.styl b/themes/next/source/css/_common/components/highlight/theme.styl similarity index 100% rename from source/css/_common/components/highlight/theme.styl rename to themes/next/source/css/_common/components/highlight/theme.styl diff --git a/source/css/_common/components/pages/archive.styl b/themes/next/source/css/_common/components/pages/archive.styl similarity index 100% rename from source/css/_common/components/pages/archive.styl rename to themes/next/source/css/_common/components/pages/archive.styl diff --git a/source/css/_common/components/pages/breadcrumb.styl b/themes/next/source/css/_common/components/pages/breadcrumb.styl similarity index 100% rename from source/css/_common/components/pages/breadcrumb.styl rename to themes/next/source/css/_common/components/pages/breadcrumb.styl diff --git a/source/css/_common/components/pages/categories.styl b/themes/next/source/css/_common/components/pages/categories.styl similarity index 100% rename from source/css/_common/components/pages/categories.styl rename to themes/next/source/css/_common/components/pages/categories.styl diff --git a/source/css/_common/components/pages/pages.styl b/themes/next/source/css/_common/components/pages/pages.styl similarity index 100% rename from source/css/_common/components/pages/pages.styl rename to themes/next/source/css/_common/components/pages/pages.styl diff --git a/source/css/_common/components/pages/post-detail.styl b/themes/next/source/css/_common/components/pages/post-detail.styl similarity index 100% rename from source/css/_common/components/pages/post-detail.styl rename to themes/next/source/css/_common/components/pages/post-detail.styl diff --git a/source/css/_common/components/pages/schedule.styl b/themes/next/source/css/_common/components/pages/schedule.styl similarity index 100% rename from source/css/_common/components/pages/schedule.styl rename to themes/next/source/css/_common/components/pages/schedule.styl diff --git a/source/css/_common/components/pagination.styl b/themes/next/source/css/_common/components/pagination.styl similarity index 100% rename from source/css/_common/components/pagination.styl rename to themes/next/source/css/_common/components/pagination.styl diff --git a/source/css/_common/components/post/post-button.styl b/themes/next/source/css/_common/components/post/post-button.styl similarity index 100% rename from source/css/_common/components/post/post-button.styl rename to themes/next/source/css/_common/components/post/post-button.styl diff --git a/source/css/_common/components/post/post-collapse.styl b/themes/next/source/css/_common/components/post/post-collapse.styl similarity index 100% rename from source/css/_common/components/post/post-collapse.styl rename to themes/next/source/css/_common/components/post/post-collapse.styl diff --git a/source/css/_common/components/post/post-copyright.styl b/themes/next/source/css/_common/components/post/post-copyright.styl similarity index 100% rename from source/css/_common/components/post/post-copyright.styl rename to themes/next/source/css/_common/components/post/post-copyright.styl diff --git a/source/css/_common/components/post/post-eof.styl b/themes/next/source/css/_common/components/post/post-eof.styl similarity index 100% rename from source/css/_common/components/post/post-eof.styl rename to themes/next/source/css/_common/components/post/post-eof.styl diff --git a/source/css/_common/components/post/post-expand.styl b/themes/next/source/css/_common/components/post/post-expand.styl similarity index 100% rename from source/css/_common/components/post/post-expand.styl rename to themes/next/source/css/_common/components/post/post-expand.styl diff --git a/source/css/_common/components/post/post-gallery.styl b/themes/next/source/css/_common/components/post/post-gallery.styl similarity index 100% rename from source/css/_common/components/post/post-gallery.styl rename to themes/next/source/css/_common/components/post/post-gallery.styl diff --git a/source/css/_common/components/post/post-meta.styl b/themes/next/source/css/_common/components/post/post-meta.styl similarity index 100% rename from source/css/_common/components/post/post-meta.styl rename to themes/next/source/css/_common/components/post/post-meta.styl diff --git a/source/css/_common/components/post/post-nav.styl b/themes/next/source/css/_common/components/post/post-nav.styl similarity index 100% rename from source/css/_common/components/post/post-nav.styl rename to themes/next/source/css/_common/components/post/post-nav.styl diff --git a/source/css/_common/components/post/post-reading_progress.styl b/themes/next/source/css/_common/components/post/post-reading_progress.styl similarity index 100% rename from source/css/_common/components/post/post-reading_progress.styl rename to themes/next/source/css/_common/components/post/post-reading_progress.styl diff --git a/source/css/_common/components/post/post-reward.styl b/themes/next/source/css/_common/components/post/post-reward.styl similarity index 100% rename from source/css/_common/components/post/post-reward.styl rename to themes/next/source/css/_common/components/post/post-reward.styl diff --git a/source/css/_common/components/post/post-rtl.styl b/themes/next/source/css/_common/components/post/post-rtl.styl similarity index 100% rename from source/css/_common/components/post/post-rtl.styl rename to themes/next/source/css/_common/components/post/post-rtl.styl diff --git a/source/css/_common/components/post/post-tags.styl b/themes/next/source/css/_common/components/post/post-tags.styl similarity index 100% rename from source/css/_common/components/post/post-tags.styl rename to themes/next/source/css/_common/components/post/post-tags.styl diff --git a/source/css/_common/components/post/post-title.styl b/themes/next/source/css/_common/components/post/post-title.styl similarity index 100% rename from source/css/_common/components/post/post-title.styl rename to themes/next/source/css/_common/components/post/post-title.styl diff --git a/source/css/_common/components/post/post-type.styl b/themes/next/source/css/_common/components/post/post-type.styl similarity index 100% rename from source/css/_common/components/post/post-type.styl rename to themes/next/source/css/_common/components/post/post-type.styl diff --git a/source/css/_common/components/post/post-widgets.styl b/themes/next/source/css/_common/components/post/post-widgets.styl similarity index 100% rename from source/css/_common/components/post/post-widgets.styl rename to themes/next/source/css/_common/components/post/post-widgets.styl diff --git a/source/css/_common/components/post/post.styl b/themes/next/source/css/_common/components/post/post.styl similarity index 100% rename from source/css/_common/components/post/post.styl rename to themes/next/source/css/_common/components/post/post.styl diff --git a/source/css/_common/components/sidebar/sidebar-author-links.styl b/themes/next/source/css/_common/components/sidebar/sidebar-author-links.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-author-links.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-author-links.styl diff --git a/source/css/_common/components/sidebar/sidebar-author.styl b/themes/next/source/css/_common/components/sidebar/sidebar-author.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-author.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-author.styl diff --git a/source/css/_common/components/sidebar/sidebar-blogroll.styl b/themes/next/source/css/_common/components/sidebar/sidebar-blogroll.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-blogroll.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-blogroll.styl diff --git a/source/css/_common/components/sidebar/sidebar-dimmer.styl b/themes/next/source/css/_common/components/sidebar/sidebar-dimmer.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-dimmer.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-dimmer.styl diff --git a/source/css/_common/components/sidebar/sidebar-feed-link.styl b/themes/next/source/css/_common/components/sidebar/sidebar-feed-link.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-feed-link.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-feed-link.styl diff --git a/source/css/_common/components/sidebar/sidebar-nav.styl b/themes/next/source/css/_common/components/sidebar/sidebar-nav.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-nav.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-nav.styl diff --git a/source/css/_common/components/sidebar/sidebar-toc.styl b/themes/next/source/css/_common/components/sidebar/sidebar-toc.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-toc.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-toc.styl diff --git a/source/css/_common/components/sidebar/sidebar-toggle.styl b/themes/next/source/css/_common/components/sidebar/sidebar-toggle.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar-toggle.styl rename to themes/next/source/css/_common/components/sidebar/sidebar-toggle.styl diff --git a/source/css/_common/components/sidebar/sidebar.styl b/themes/next/source/css/_common/components/sidebar/sidebar.styl similarity index 100% rename from source/css/_common/components/sidebar/sidebar.styl rename to themes/next/source/css/_common/components/sidebar/sidebar.styl diff --git a/source/css/_common/components/sidebar/site-state.styl b/themes/next/source/css/_common/components/sidebar/site-state.styl similarity index 100% rename from source/css/_common/components/sidebar/site-state.styl rename to themes/next/source/css/_common/components/sidebar/site-state.styl diff --git a/source/css/_common/components/tag-cloud.styl b/themes/next/source/css/_common/components/tag-cloud.styl similarity index 100% rename from source/css/_common/components/tag-cloud.styl rename to themes/next/source/css/_common/components/tag-cloud.styl diff --git a/source/css/_common/components/tags/blockquote-center.styl b/themes/next/source/css/_common/components/tags/blockquote-center.styl similarity index 100% rename from source/css/_common/components/tags/blockquote-center.styl rename to themes/next/source/css/_common/components/tags/blockquote-center.styl diff --git a/source/css/_common/components/tags/exturl.styl b/themes/next/source/css/_common/components/tags/exturl.styl similarity index 100% rename from source/css/_common/components/tags/exturl.styl rename to themes/next/source/css/_common/components/tags/exturl.styl diff --git a/source/css/_common/components/tags/full-image.styl b/themes/next/source/css/_common/components/tags/full-image.styl similarity index 100% rename from source/css/_common/components/tags/full-image.styl rename to themes/next/source/css/_common/components/tags/full-image.styl diff --git a/source/css/_common/components/tags/group-pictures.styl b/themes/next/source/css/_common/components/tags/group-pictures.styl similarity index 100% rename from source/css/_common/components/tags/group-pictures.styl rename to themes/next/source/css/_common/components/tags/group-pictures.styl diff --git a/source/css/_common/components/tags/label.styl b/themes/next/source/css/_common/components/tags/label.styl similarity index 100% rename from source/css/_common/components/tags/label.styl rename to themes/next/source/css/_common/components/tags/label.styl diff --git a/source/css/_common/components/tags/note-modern.styl b/themes/next/source/css/_common/components/tags/note-modern.styl similarity index 100% rename from source/css/_common/components/tags/note-modern.styl rename to themes/next/source/css/_common/components/tags/note-modern.styl diff --git a/source/css/_common/components/tags/note.styl b/themes/next/source/css/_common/components/tags/note.styl similarity index 100% rename from source/css/_common/components/tags/note.styl rename to themes/next/source/css/_common/components/tags/note.styl diff --git a/source/css/_common/components/tags/tabs.styl b/themes/next/source/css/_common/components/tags/tabs.styl similarity index 100% rename from source/css/_common/components/tags/tabs.styl rename to themes/next/source/css/_common/components/tags/tabs.styl diff --git a/source/css/_common/components/tags/tags.styl b/themes/next/source/css/_common/components/tags/tags.styl similarity index 100% rename from source/css/_common/components/tags/tags.styl rename to themes/next/source/css/_common/components/tags/tags.styl diff --git a/source/css/_common/components/third-party/algolia-search.styl b/themes/next/source/css/_common/components/third-party/algolia-search.styl similarity index 100% rename from source/css/_common/components/third-party/algolia-search.styl rename to themes/next/source/css/_common/components/third-party/algolia-search.styl diff --git a/source/css/_common/components/third-party/baidushare.styl b/themes/next/source/css/_common/components/third-party/baidushare.styl similarity index 100% rename from source/css/_common/components/third-party/baidushare.styl rename to themes/next/source/css/_common/components/third-party/baidushare.styl diff --git a/source/css/_common/components/third-party/busuanzi-counter.styl b/themes/next/source/css/_common/components/third-party/busuanzi-counter.styl similarity index 100% rename from source/css/_common/components/third-party/busuanzi-counter.styl rename to themes/next/source/css/_common/components/third-party/busuanzi-counter.styl diff --git a/source/css/_common/components/third-party/gitment.styl b/themes/next/source/css/_common/components/third-party/gitment.styl similarity index 100% rename from source/css/_common/components/third-party/gitment.styl rename to themes/next/source/css/_common/components/third-party/gitment.styl diff --git a/source/css/_common/components/third-party/han.styl b/themes/next/source/css/_common/components/third-party/han.styl similarity index 100% rename from source/css/_common/components/third-party/han.styl rename to themes/next/source/css/_common/components/third-party/han.styl diff --git a/source/css/_common/components/third-party/jiathis.styl b/themes/next/source/css/_common/components/third-party/jiathis.styl similarity index 100% rename from source/css/_common/components/third-party/jiathis.styl rename to themes/next/source/css/_common/components/third-party/jiathis.styl diff --git a/source/css/_common/components/third-party/localsearch.styl b/themes/next/source/css/_common/components/third-party/localsearch.styl similarity index 100% rename from source/css/_common/components/third-party/localsearch.styl rename to themes/next/source/css/_common/components/third-party/localsearch.styl diff --git a/source/css/_common/components/third-party/needsharebutton.styl b/themes/next/source/css/_common/components/third-party/needsharebutton.styl similarity index 100% rename from source/css/_common/components/third-party/needsharebutton.styl rename to themes/next/source/css/_common/components/third-party/needsharebutton.styl diff --git a/source/css/_common/components/third-party/related-posts.styl b/themes/next/source/css/_common/components/third-party/related-posts.styl similarity index 100% rename from source/css/_common/components/third-party/related-posts.styl rename to themes/next/source/css/_common/components/third-party/related-posts.styl diff --git a/source/css/_common/components/third-party/third-party.styl b/themes/next/source/css/_common/components/third-party/third-party.styl similarity index 100% rename from source/css/_common/components/third-party/third-party.styl rename to themes/next/source/css/_common/components/third-party/third-party.styl diff --git a/source/css/_common/outline/outline.styl b/themes/next/source/css/_common/outline/outline.styl similarity index 100% rename from source/css/_common/outline/outline.styl rename to themes/next/source/css/_common/outline/outline.styl diff --git a/source/css/_common/scaffolding/base.styl b/themes/next/source/css/_common/scaffolding/base.styl similarity index 100% rename from source/css/_common/scaffolding/base.styl rename to themes/next/source/css/_common/scaffolding/base.styl diff --git a/source/css/_common/scaffolding/helpers.styl b/themes/next/source/css/_common/scaffolding/helpers.styl similarity index 100% rename from source/css/_common/scaffolding/helpers.styl rename to themes/next/source/css/_common/scaffolding/helpers.styl diff --git a/source/css/_common/scaffolding/mobile.styl b/themes/next/source/css/_common/scaffolding/mobile.styl similarity index 100% rename from source/css/_common/scaffolding/mobile.styl rename to themes/next/source/css/_common/scaffolding/mobile.styl diff --git a/source/css/_common/scaffolding/normalize.styl b/themes/next/source/css/_common/scaffolding/normalize.styl similarity index 100% rename from source/css/_common/scaffolding/normalize.styl rename to themes/next/source/css/_common/scaffolding/normalize.styl diff --git a/source/css/_common/scaffolding/scaffolding.styl b/themes/next/source/css/_common/scaffolding/scaffolding.styl similarity index 100% rename from source/css/_common/scaffolding/scaffolding.styl rename to themes/next/source/css/_common/scaffolding/scaffolding.styl diff --git a/source/css/_common/scaffolding/tables.styl b/themes/next/source/css/_common/scaffolding/tables.styl similarity index 100% rename from source/css/_common/scaffolding/tables.styl rename to themes/next/source/css/_common/scaffolding/tables.styl diff --git a/source/css/_custom/custom.styl b/themes/next/source/css/_custom/custom.styl similarity index 100% rename from source/css/_custom/custom.styl rename to themes/next/source/css/_custom/custom.styl diff --git a/source/css/_mixins/Gemini.styl b/themes/next/source/css/_mixins/Gemini.styl similarity index 100% rename from source/css/_mixins/Gemini.styl rename to themes/next/source/css/_mixins/Gemini.styl diff --git a/source/css/_mixins/Mist.styl b/themes/next/source/css/_mixins/Mist.styl similarity index 100% rename from source/css/_mixins/Mist.styl rename to themes/next/source/css/_mixins/Mist.styl diff --git a/source/css/_mixins/Muse.styl b/themes/next/source/css/_mixins/Muse.styl similarity index 100% rename from source/css/_mixins/Muse.styl rename to themes/next/source/css/_mixins/Muse.styl diff --git a/source/css/_mixins/Pisces.styl b/themes/next/source/css/_mixins/Pisces.styl similarity index 100% rename from source/css/_mixins/Pisces.styl rename to themes/next/source/css/_mixins/Pisces.styl diff --git a/source/css/_mixins/base.styl b/themes/next/source/css/_mixins/base.styl similarity index 100% rename from source/css/_mixins/base.styl rename to themes/next/source/css/_mixins/base.styl diff --git a/source/css/_mixins/custom.styl b/themes/next/source/css/_mixins/custom.styl similarity index 100% rename from source/css/_mixins/custom.styl rename to themes/next/source/css/_mixins/custom.styl diff --git a/source/css/_schemes/Gemini/index.styl b/themes/next/source/css/_schemes/Gemini/index.styl similarity index 100% rename from source/css/_schemes/Gemini/index.styl rename to themes/next/source/css/_schemes/Gemini/index.styl diff --git a/source/css/_schemes/Mist/_base.styl b/themes/next/source/css/_schemes/Mist/_base.styl similarity index 100% rename from source/css/_schemes/Mist/_base.styl rename to themes/next/source/css/_schemes/Mist/_base.styl diff --git a/source/css/_schemes/Mist/_header.styl b/themes/next/source/css/_schemes/Mist/_header.styl similarity index 100% rename from source/css/_schemes/Mist/_header.styl rename to themes/next/source/css/_schemes/Mist/_header.styl diff --git a/source/css/_schemes/Mist/_logo.styl b/themes/next/source/css/_schemes/Mist/_logo.styl similarity index 100% rename from source/css/_schemes/Mist/_logo.styl rename to themes/next/source/css/_schemes/Mist/_logo.styl diff --git a/source/css/_schemes/Mist/_menu.styl b/themes/next/source/css/_schemes/Mist/_menu.styl similarity index 100% rename from source/css/_schemes/Mist/_menu.styl rename to themes/next/source/css/_schemes/Mist/_menu.styl diff --git a/source/css/_schemes/Mist/_posts-expanded.styl b/themes/next/source/css/_schemes/Mist/_posts-expanded.styl similarity index 100% rename from source/css/_schemes/Mist/_posts-expanded.styl rename to themes/next/source/css/_schemes/Mist/_posts-expanded.styl diff --git a/source/css/_schemes/Mist/_search.styl b/themes/next/source/css/_schemes/Mist/_search.styl similarity index 100% rename from source/css/_schemes/Mist/_search.styl rename to themes/next/source/css/_schemes/Mist/_search.styl diff --git a/source/css/_schemes/Mist/index.styl b/themes/next/source/css/_schemes/Mist/index.styl similarity index 100% rename from source/css/_schemes/Mist/index.styl rename to themes/next/source/css/_schemes/Mist/index.styl diff --git a/source/css/_schemes/Mist/outline/outline.styl b/themes/next/source/css/_schemes/Mist/outline/outline.styl similarity index 100% rename from source/css/_schemes/Mist/outline/outline.styl rename to themes/next/source/css/_schemes/Mist/outline/outline.styl diff --git a/source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl b/themes/next/source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl similarity index 100% rename from source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl rename to themes/next/source/css/_schemes/Mist/sidebar/sidebar-blogroll.styl diff --git a/source/css/_schemes/Muse/_layout.styl b/themes/next/source/css/_schemes/Muse/_layout.styl similarity index 100% rename from source/css/_schemes/Muse/_layout.styl rename to themes/next/source/css/_schemes/Muse/_layout.styl diff --git a/source/css/_schemes/Muse/_logo.styl b/themes/next/source/css/_schemes/Muse/_logo.styl similarity index 100% rename from source/css/_schemes/Muse/_logo.styl rename to themes/next/source/css/_schemes/Muse/_logo.styl diff --git a/source/css/_schemes/Muse/_menu.styl b/themes/next/source/css/_schemes/Muse/_menu.styl similarity index 100% rename from source/css/_schemes/Muse/_menu.styl rename to themes/next/source/css/_schemes/Muse/_menu.styl diff --git a/source/css/_schemes/Muse/_search.styl b/themes/next/source/css/_schemes/Muse/_search.styl similarity index 100% rename from source/css/_schemes/Muse/_search.styl rename to themes/next/source/css/_schemes/Muse/_search.styl diff --git a/source/css/_schemes/Muse/index.styl b/themes/next/source/css/_schemes/Muse/index.styl similarity index 100% rename from source/css/_schemes/Muse/index.styl rename to themes/next/source/css/_schemes/Muse/index.styl diff --git a/source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl b/themes/next/source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl similarity index 100% rename from source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl rename to themes/next/source/css/_schemes/Muse/sidebar/sidebar-blogroll.styl diff --git a/source/css/_schemes/Pisces/_brand.styl b/themes/next/source/css/_schemes/Pisces/_brand.styl similarity index 100% rename from source/css/_schemes/Pisces/_brand.styl rename to themes/next/source/css/_schemes/Pisces/_brand.styl diff --git a/source/css/_schemes/Pisces/_layout.styl b/themes/next/source/css/_schemes/Pisces/_layout.styl similarity index 100% rename from source/css/_schemes/Pisces/_layout.styl rename to themes/next/source/css/_schemes/Pisces/_layout.styl diff --git a/source/css/_schemes/Pisces/_menu.styl b/themes/next/source/css/_schemes/Pisces/_menu.styl similarity index 100% rename from source/css/_schemes/Pisces/_menu.styl rename to themes/next/source/css/_schemes/Pisces/_menu.styl diff --git a/source/css/_schemes/Pisces/_posts.styl b/themes/next/source/css/_schemes/Pisces/_posts.styl similarity index 100% rename from source/css/_schemes/Pisces/_posts.styl rename to themes/next/source/css/_schemes/Pisces/_posts.styl diff --git a/source/css/_schemes/Pisces/_sidebar.styl b/themes/next/source/css/_schemes/Pisces/_sidebar.styl similarity index 100% rename from source/css/_schemes/Pisces/_sidebar.styl rename to themes/next/source/css/_schemes/Pisces/_sidebar.styl diff --git a/source/css/_schemes/Pisces/_sub-menu.styl b/themes/next/source/css/_schemes/Pisces/_sub-menu.styl similarity index 100% rename from source/css/_schemes/Pisces/_sub-menu.styl rename to themes/next/source/css/_schemes/Pisces/_sub-menu.styl diff --git a/source/css/_schemes/Pisces/index.styl b/themes/next/source/css/_schemes/Pisces/index.styl similarity index 100% rename from source/css/_schemes/Pisces/index.styl rename to themes/next/source/css/_schemes/Pisces/index.styl diff --git a/source/css/_variables/Gemini.styl b/themes/next/source/css/_variables/Gemini.styl similarity index 100% rename from source/css/_variables/Gemini.styl rename to themes/next/source/css/_variables/Gemini.styl diff --git a/source/css/_variables/Mist.styl b/themes/next/source/css/_variables/Mist.styl similarity index 100% rename from source/css/_variables/Mist.styl rename to themes/next/source/css/_variables/Mist.styl diff --git a/source/css/_variables/Muse.styl b/themes/next/source/css/_variables/Muse.styl similarity index 100% rename from source/css/_variables/Muse.styl rename to themes/next/source/css/_variables/Muse.styl diff --git a/source/css/_variables/Pisces.styl b/themes/next/source/css/_variables/Pisces.styl similarity index 100% rename from source/css/_variables/Pisces.styl rename to themes/next/source/css/_variables/Pisces.styl diff --git a/source/css/_variables/base.styl b/themes/next/source/css/_variables/base.styl similarity index 100% rename from source/css/_variables/base.styl rename to themes/next/source/css/_variables/base.styl diff --git a/source/css/_variables/custom.styl b/themes/next/source/css/_variables/custom.styl similarity index 100% rename from source/css/_variables/custom.styl rename to themes/next/source/css/_variables/custom.styl diff --git a/source/css/main.styl b/themes/next/source/css/main.styl similarity index 100% rename from source/css/main.styl rename to themes/next/source/css/main.styl diff --git a/source/fonts/.gitkeep b/themes/next/source/fonts/.gitkeep similarity index 100% rename from source/fonts/.gitkeep rename to themes/next/source/fonts/.gitkeep diff --git a/source/images/algolia_logo.svg b/themes/next/source/images/algolia_logo.svg similarity index 100% rename from source/images/algolia_logo.svg rename to themes/next/source/images/algolia_logo.svg diff --git a/source/images/apple-touch-icon-next.png b/themes/next/source/images/apple-touch-icon-next.png similarity index 100% rename from source/images/apple-touch-icon-next.png rename to themes/next/source/images/apple-touch-icon-next.png diff --git a/source/images/avatar.gif b/themes/next/source/images/avatar.gif similarity index 100% rename from source/images/avatar.gif rename to themes/next/source/images/avatar.gif diff --git a/source/images/cc-by-nc-nd.svg b/themes/next/source/images/cc-by-nc-nd.svg similarity index 100% rename from source/images/cc-by-nc-nd.svg rename to themes/next/source/images/cc-by-nc-nd.svg diff --git a/source/images/cc-by-nc-sa.svg b/themes/next/source/images/cc-by-nc-sa.svg similarity index 100% rename from source/images/cc-by-nc-sa.svg rename to themes/next/source/images/cc-by-nc-sa.svg diff --git a/source/images/cc-by-nc.svg b/themes/next/source/images/cc-by-nc.svg similarity index 100% rename from source/images/cc-by-nc.svg rename to themes/next/source/images/cc-by-nc.svg diff --git a/source/images/cc-by-nd.svg b/themes/next/source/images/cc-by-nd.svg similarity index 100% rename from source/images/cc-by-nd.svg rename to themes/next/source/images/cc-by-nd.svg diff --git a/source/images/cc-by-sa.svg b/themes/next/source/images/cc-by-sa.svg similarity index 100% rename from source/images/cc-by-sa.svg rename to themes/next/source/images/cc-by-sa.svg diff --git a/source/images/cc-by.svg b/themes/next/source/images/cc-by.svg similarity index 100% rename from source/images/cc-by.svg rename to themes/next/source/images/cc-by.svg diff --git a/source/images/cc-zero.svg b/themes/next/source/images/cc-zero.svg similarity index 100% rename from source/images/cc-zero.svg rename to themes/next/source/images/cc-zero.svg diff --git a/source/images/favicon-16x16-next.png b/themes/next/source/images/favicon-16x16-next.png similarity index 100% rename from source/images/favicon-16x16-next.png rename to themes/next/source/images/favicon-16x16-next.png diff --git a/source/images/favicon-32x32-next.png b/themes/next/source/images/favicon-32x32-next.png similarity index 100% rename from source/images/favicon-32x32-next.png rename to themes/next/source/images/favicon-32x32-next.png diff --git a/source/images/loading.gif b/themes/next/source/images/loading.gif similarity index 100% rename from source/images/loading.gif rename to themes/next/source/images/loading.gif diff --git a/source/images/logo.svg b/themes/next/source/images/logo.svg similarity index 100% rename from source/images/logo.svg rename to themes/next/source/images/logo.svg diff --git a/source/images/placeholder.gif b/themes/next/source/images/placeholder.gif similarity index 100% rename from source/images/placeholder.gif rename to themes/next/source/images/placeholder.gif diff --git a/source/images/quote-l.svg b/themes/next/source/images/quote-l.svg similarity index 100% rename from source/images/quote-l.svg rename to themes/next/source/images/quote-l.svg diff --git a/source/images/quote-r.svg b/themes/next/source/images/quote-r.svg similarity index 100% rename from source/images/quote-r.svg rename to themes/next/source/images/quote-r.svg diff --git a/source/images/searchicon.png b/themes/next/source/images/searchicon.png similarity index 100% rename from source/images/searchicon.png rename to themes/next/source/images/searchicon.png diff --git a/source/js/src/affix.js b/themes/next/source/js/src/affix.js similarity index 100% rename from source/js/src/affix.js rename to themes/next/source/js/src/affix.js diff --git a/source/js/src/algolia-search.js b/themes/next/source/js/src/algolia-search.js similarity index 100% rename from source/js/src/algolia-search.js rename to themes/next/source/js/src/algolia-search.js diff --git a/source/js/src/bootstrap.js b/themes/next/source/js/src/bootstrap.js similarity index 100% rename from source/js/src/bootstrap.js rename to themes/next/source/js/src/bootstrap.js diff --git a/source/js/src/exturl.js b/themes/next/source/js/src/exturl.js similarity index 100% rename from source/js/src/exturl.js rename to themes/next/source/js/src/exturl.js diff --git a/source/js/src/js.cookie.js b/themes/next/source/js/src/js.cookie.js similarity index 100% rename from source/js/src/js.cookie.js rename to themes/next/source/js/src/js.cookie.js diff --git a/source/js/src/motion.js b/themes/next/source/js/src/motion.js similarity index 100% rename from source/js/src/motion.js rename to themes/next/source/js/src/motion.js diff --git a/source/js/src/post-details.js b/themes/next/source/js/src/post-details.js similarity index 100% rename from source/js/src/post-details.js rename to themes/next/source/js/src/post-details.js diff --git a/source/js/src/schemes/pisces.js b/themes/next/source/js/src/schemes/pisces.js similarity index 100% rename from source/js/src/schemes/pisces.js rename to themes/next/source/js/src/schemes/pisces.js diff --git a/source/js/src/scroll-cookie.js b/themes/next/source/js/src/scroll-cookie.js similarity index 100% rename from source/js/src/scroll-cookie.js rename to themes/next/source/js/src/scroll-cookie.js diff --git a/source/js/src/scrollspy.js b/themes/next/source/js/src/scrollspy.js similarity index 100% rename from source/js/src/scrollspy.js rename to themes/next/source/js/src/scrollspy.js diff --git a/source/js/src/utils.js b/themes/next/source/js/src/utils.js similarity index 100% rename from source/js/src/utils.js rename to themes/next/source/js/src/utils.js diff --git a/source/lib/fancybox/.bower.json b/themes/next/source/lib/fancybox/.bower.json similarity index 100% rename from source/lib/fancybox/.bower.json rename to themes/next/source/lib/fancybox/.bower.json diff --git a/source/lib/fancybox/.gitattributes b/themes/next/source/lib/fancybox/.gitattributes similarity index 100% rename from source/lib/fancybox/.gitattributes rename to themes/next/source/lib/fancybox/.gitattributes diff --git a/source/lib/fancybox/LICENSE b/themes/next/source/lib/fancybox/LICENSE similarity index 100% rename from source/lib/fancybox/LICENSE rename to themes/next/source/lib/fancybox/LICENSE diff --git a/source/lib/fancybox/README.md b/themes/next/source/lib/fancybox/README.md similarity index 100% rename from source/lib/fancybox/README.md rename to themes/next/source/lib/fancybox/README.md diff --git a/source/lib/fancybox/source/jquery.fancybox.css b/themes/next/source/lib/fancybox/source/jquery.fancybox.css similarity index 100% rename from source/lib/fancybox/source/jquery.fancybox.css rename to themes/next/source/lib/fancybox/source/jquery.fancybox.css diff --git a/source/lib/fancybox/source/jquery.fancybox.js b/themes/next/source/lib/fancybox/source/jquery.fancybox.js similarity index 100% rename from source/lib/fancybox/source/jquery.fancybox.js rename to themes/next/source/lib/fancybox/source/jquery.fancybox.js diff --git a/source/lib/fancybox/source/jquery.fancybox.min.css b/themes/next/source/lib/fancybox/source/jquery.fancybox.min.css similarity index 100% rename from source/lib/fancybox/source/jquery.fancybox.min.css rename to themes/next/source/lib/fancybox/source/jquery.fancybox.min.css diff --git a/source/lib/fancybox/source/jquery.fancybox.min.js b/themes/next/source/lib/fancybox/source/jquery.fancybox.min.js similarity index 100% rename from source/lib/fancybox/source/jquery.fancybox.min.js rename to themes/next/source/lib/fancybox/source/jquery.fancybox.min.js diff --git a/source/lib/fancybox/source/jquery.fancybox.pack.js b/themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js similarity index 100% rename from source/lib/fancybox/source/jquery.fancybox.pack.js rename to themes/next/source/lib/fancybox/source/jquery.fancybox.pack.js diff --git a/source/lib/font-awesome/.bower.json b/themes/next/source/lib/font-awesome/.bower.json similarity index 100% rename from source/lib/font-awesome/.bower.json rename to themes/next/source/lib/font-awesome/.bower.json diff --git a/source/lib/font-awesome/.gitignore b/themes/next/source/lib/font-awesome/.gitignore similarity index 100% rename from source/lib/font-awesome/.gitignore rename to themes/next/source/lib/font-awesome/.gitignore diff --git a/source/lib/font-awesome/.npmignore b/themes/next/source/lib/font-awesome/.npmignore similarity index 100% rename from source/lib/font-awesome/.npmignore rename to themes/next/source/lib/font-awesome/.npmignore diff --git a/source/lib/font-awesome/HELP-US-OUT.txt b/themes/next/source/lib/font-awesome/HELP-US-OUT.txt similarity index 100% rename from source/lib/font-awesome/HELP-US-OUT.txt rename to themes/next/source/lib/font-awesome/HELP-US-OUT.txt diff --git a/source/lib/font-awesome/bower.json b/themes/next/source/lib/font-awesome/bower.json similarity index 100% rename from source/lib/font-awesome/bower.json rename to themes/next/source/lib/font-awesome/bower.json diff --git a/source/lib/font-awesome/css/font-awesome.css b/themes/next/source/lib/font-awesome/css/font-awesome.css similarity index 100% rename from source/lib/font-awesome/css/font-awesome.css rename to themes/next/source/lib/font-awesome/css/font-awesome.css diff --git a/source/lib/font-awesome/css/font-awesome.css.map b/themes/next/source/lib/font-awesome/css/font-awesome.css.map similarity index 100% rename from source/lib/font-awesome/css/font-awesome.css.map rename to themes/next/source/lib/font-awesome/css/font-awesome.css.map diff --git a/source/lib/font-awesome/css/font-awesome.min.css b/themes/next/source/lib/font-awesome/css/font-awesome.min.css similarity index 100% rename from source/lib/font-awesome/css/font-awesome.min.css rename to themes/next/source/lib/font-awesome/css/font-awesome.min.css diff --git a/source/lib/font-awesome/fonts/fontawesome-webfont.eot b/themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot similarity index 100% rename from source/lib/font-awesome/fonts/fontawesome-webfont.eot rename to themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.eot diff --git a/source/lib/font-awesome/fonts/fontawesome-webfont.woff b/themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff similarity index 100% rename from source/lib/font-awesome/fonts/fontawesome-webfont.woff rename to themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff diff --git a/source/lib/font-awesome/fonts/fontawesome-webfont.woff2 b/themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2 similarity index 100% rename from source/lib/font-awesome/fonts/fontawesome-webfont.woff2 rename to themes/next/source/lib/font-awesome/fonts/fontawesome-webfont.woff2 diff --git a/source/lib/jquery/index.js b/themes/next/source/lib/jquery/index.js similarity index 100% rename from source/lib/jquery/index.js rename to themes/next/source/lib/jquery/index.js diff --git a/source/lib/reading_progress/.editorconfig b/themes/next/source/lib/reading_progress/.editorconfig similarity index 100% rename from source/lib/reading_progress/.editorconfig rename to themes/next/source/lib/reading_progress/.editorconfig diff --git a/source/lib/reading_progress/.gitignore b/themes/next/source/lib/reading_progress/.gitignore similarity index 100% rename from source/lib/reading_progress/.gitignore rename to themes/next/source/lib/reading_progress/.gitignore diff --git a/source/lib/reading_progress/LICENSE b/themes/next/source/lib/reading_progress/LICENSE similarity index 100% rename from source/lib/reading_progress/LICENSE rename to themes/next/source/lib/reading_progress/LICENSE diff --git a/source/lib/reading_progress/README.md b/themes/next/source/lib/reading_progress/README.md similarity index 100% rename from source/lib/reading_progress/README.md rename to themes/next/source/lib/reading_progress/README.md diff --git a/source/lib/reading_progress/package.json b/themes/next/source/lib/reading_progress/package.json similarity index 100% rename from source/lib/reading_progress/package.json rename to themes/next/source/lib/reading_progress/package.json diff --git a/source/lib/reading_progress/reading_progress.js b/themes/next/source/lib/reading_progress/reading_progress.js similarity index 100% rename from source/lib/reading_progress/reading_progress.js rename to themes/next/source/lib/reading_progress/reading_progress.js diff --git a/source/lib/reading_progress/reading_progress.min.js b/themes/next/source/lib/reading_progress/reading_progress.min.js similarity index 100% rename from source/lib/reading_progress/reading_progress.min.js rename to themes/next/source/lib/reading_progress/reading_progress.min.js diff --git a/source/lib/ua-parser-js/dist/ua-parser.min.js b/themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js similarity index 100% rename from source/lib/ua-parser-js/dist/ua-parser.min.js rename to themes/next/source/lib/ua-parser-js/dist/ua-parser.min.js diff --git a/source/lib/ua-parser-js/dist/ua-parser.pack.js b/themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js similarity index 100% rename from source/lib/ua-parser-js/dist/ua-parser.pack.js rename to themes/next/source/lib/ua-parser-js/dist/ua-parser.pack.js diff --git a/source/lib/velocity/velocity.js b/themes/next/source/lib/velocity/velocity.js similarity index 100% rename from source/lib/velocity/velocity.js rename to themes/next/source/lib/velocity/velocity.js diff --git a/source/lib/velocity/velocity.min.js b/themes/next/source/lib/velocity/velocity.min.js similarity index 100% rename from source/lib/velocity/velocity.min.js rename to themes/next/source/lib/velocity/velocity.min.js diff --git a/source/lib/velocity/velocity.ui.js b/themes/next/source/lib/velocity/velocity.ui.js similarity index 100% rename from source/lib/velocity/velocity.ui.js rename to themes/next/source/lib/velocity/velocity.ui.js diff --git a/source/lib/velocity/velocity.ui.min.js b/themes/next/source/lib/velocity/velocity.ui.min.js similarity index 100% rename from source/lib/velocity/velocity.ui.min.js rename to themes/next/source/lib/velocity/velocity.ui.min.js diff --git a/test/.jshintrc b/themes/next/test/.jshintrc similarity index 100% rename from test/.jshintrc rename to themes/next/test/.jshintrc diff --git a/test/helpers.js b/themes/next/test/helpers.js similarity index 100% rename from test/helpers.js rename to themes/next/test/helpers.js diff --git a/test/intern.js b/themes/next/test/intern.js similarity index 100% rename from test/intern.js rename to themes/next/test/intern.js