Compare commits

...

2 Commits

Author SHA1 Message Date
寂静的羽夏 f6d731b520 宣发视频 2025-04-05 13:11:32 +08:00
寂静的羽夏 9f8bce4cbc 更新文档网站 2025-04-05 13:11:20 +08:00
500 changed files with 36493 additions and 9084 deletions

View File

@ -1,37 +0,0 @@
module.exports = {
parserPreset: 'conventional-changelog-conventionalcommits',
rules: {
'body-leading-blank': [1, 'always'],
'footer-leading-blank': [1, 'always'],
'header-max-length': [2, 'always', 72],
'scope-case': [2, 'always', 'lower-case'],
'subject-case': [
2,
'never',
['sentence-case', 'start-case', 'pascal-case', 'upper-case']
],
'subject-empty': [2, 'never'],
'subject-full-stop': [2, 'never', '.'],
'type-case': [2, 'always', 'lower-case'],
'type-empty': [2, 'never'],
'type-enum': [
2,
'always',
[
'build',
'chore',
'ci',
'docs',
'feat',
'fix',
'improvement',
'perf',
'refactor',
'release',
'revert',
'style',
'test'
]
]
}
};

View File

@ -1,11 +1,13 @@
# http://editorconfig.org
# editorconfig.org
root = true
[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
max_line_length = 80
indent_size = 2
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = false
[*.md]
trim_trailing_whitespace = false

View File

@ -1,20 +0,0 @@
{
"env": {
"browser": true,
"jquery": true,
"node": true
},
"rules": {
"no-console": "error",
"semi": ["error", "always"],
"quotes": ["error", "single"],
"comma-dangle": ["error", "never"],
"block-scoped-var": "error",
"default-case": "error",
"no-extra-bind": "error",
"camelcase": "error",
"indent": ["error", 2, { "SwitchCase": 1 }],
"eol-last": ["error", "always"]
},
"extends": ["eslint:recommended"]
}

10
.gitattributes vendored Normal file
View File

@ -0,0 +1,10 @@
assets/fonts/* linguist-vendored
assets/js/main.min.js linguist-vendored
assets/js/lunr/* linguist-vendored
assets/js/plugins/* linguist-vendored
assets/js/vendor/* linguist-vendored
_sass/minimal-mistakes/vendor/* linguist-vendored
CHANGELOG.md text merge=union
docs/_docs/18-history.md text merge=union
*.md text

44
.gitignore vendored
View File

@ -1,28 +1,32 @@
# Vim
*~
~*
*.diff
*.patch
*.bak
.DS_Store
*.swp
*.swo
*.log
*.log.*
*.sw[p_]
/.vscode/
build/
# IntelliJ IDEA
*.idea
node_modules/
.sass-cache/
# Sublime Text
*.sublime-project
*.sublime-workspace
/.bundle/
/vendor/bundle
# Ruby Gem
*.gem
yarn.lock
package-lock.json
.bundle
Gemfile.lock
**/vendor/bundle
_site/
# Node.js and NPM
node_modules
npm-debug.log*
package-lock.json
codekit-config.json
# macOS
.DS_Store
# Jekyll generated files
.jekyll-cache
.jekyll-metadata
.jekyll-cache/
.sass-cache
_asset_bundler_cache
_site

View File

@ -1,5 +0,0 @@
{
"MD033": false,
"MD013": false,
"MD041": false
}

View File

@ -1,5 +0,0 @@
/node_modules/
/_gh_pages/
**/dist/
**/*.min.css
**/vendor/

View File

@ -1,276 +0,0 @@
{
"extends": ["stylelint-config-standard", "stylelint-config-recommended-scss"],
"plugins": [
"stylelint-order"
],
"rules": {
"at-rule-empty-line-before": null,
"at-rule-name-space-after": "always",
"at-rule-no-vendor-prefix": true,
"at-rule-semicolon-space-before": "never",
"block-closing-brace-empty-line-before": null,
"block-closing-brace-newline-after": null,
"block-opening-brace-space-before": null,
"color-named": "never",
"color-hex-case": "lower",
"color-hex-length": "short",
"declaration-block-semicolon-newline-after": "always-multi-line",
"declaration-block-semicolon-newline-before": "never-multi-line",
"declaration-block-semicolon-space-after": "always-single-line",
"declaration-empty-line-before": null,
"declaration-no-important": true,
"font-family-name-quotes": "always-where-recommended",
"font-weight-notation": null,
"function-url-no-scheme-relative": true,
"function-url-quotes": "always",
"length-zero-no-unit": true,
"max-empty-lines": 2,
"max-line-length": null,
"media-feature-name-no-vendor-prefix": true,
"media-feature-parentheses-space-inside": "never",
"media-feature-range-operator-space-after": "always",
"media-feature-range-operator-space-before": "never",
"no-descending-specificity": null,
"no-duplicate-selectors": true,
"number-leading-zero": "never",
"media-feature-name-no-unknown": [true, {
"ignoreMediaFeatureNames": ["prefers-reduced-motion"]
}],
"order/properties-order": [
"position",
"top",
"right",
"bottom",
"left",
"z-index",
"box-sizing",
"display",
"flex",
"flex-align",
"flex-basis",
"flex-direction",
"flex-wrap",
"flex-flow",
"flex-shrink",
"flex-grow",
"flex-order",
"flex-pack",
"align-content",
"align-items",
"align-self",
"justify-content",
"order",
"float",
"width",
"min-width",
"max-width",
"height",
"min-height",
"max-height",
"padding",
"padding-top",
"padding-right",
"padding-bottom",
"padding-left",
"margin",
"margin-top",
"margin-right",
"margin-bottom",
"margin-left",
"overflow",
"overflow-x",
"overflow-y",
"-webkit-overflow-scrolling",
"-ms-overflow-x",
"-ms-overflow-y",
"-ms-overflow-style",
"columns",
"column-count",
"column-fill",
"column-gap",
"column-rule",
"column-rule-width",
"column-rule-style",
"column-rule-color",
"column-span",
"column-width",
"orphans",
"widows",
"clip",
"clear",
"font",
"font-family",
"font-size",
"font-style",
"font-weight",
"font-variant",
"font-size-adjust",
"font-stretch",
"font-effect",
"font-emphasize",
"font-emphasize-position",
"font-emphasize-style",
"font-smooth",
"src",
"hyphens",
"line-height",
"color",
"text-align",
"text-align-last",
"text-emphasis",
"text-emphasis-color",
"text-emphasis-style",
"text-emphasis-position",
"text-decoration",
"text-indent",
"text-justify",
"text-outline",
"-ms-text-overflow",
"text-overflow",
"text-overflow-ellipsis",
"text-overflow-mode",
"text-shadow",
"text-transform",
"text-wrap",
"-webkit-text-size-adjust",
"-ms-text-size-adjust",
"letter-spacing",
"-ms-word-break",
"word-break",
"word-spacing",
"-ms-word-wrap",
"word-wrap",
"overflow-wrap",
"tab-size",
"white-space",
"vertical-align",
"direction",
"unicode-bidi",
"list-style",
"list-style-position",
"list-style-type",
"list-style-image",
"pointer-events",
"-ms-touch-action",
"touch-action",
"cursor",
"visibility",
"zoom",
"table-layout",
"empty-cells",
"caption-side",
"border-spacing",
"border-collapse",
"content",
"quotes",
"counter-reset",
"counter-increment",
"resize",
"user-select",
"nav-index",
"nav-up",
"nav-right",
"nav-down",
"nav-left",
"background",
"background-color",
"background-image",
"filter",
"background-repeat",
"background-attachment",
"background-position",
"background-position-x",
"background-position-y",
"background-clip",
"background-origin",
"background-size",
"border",
"border-color",
"border-style",
"border-width",
"border-top",
"border-top-color",
"border-top-style",
"border-top-width",
"border-right",
"border-right-color",
"border-right-style",
"border-right-width",
"border-bottom",
"border-bottom-color",
"border-bottom-style",
"border-bottom-width",
"border-left",
"border-left-color",
"border-left-style",
"border-left-width",
"border-radius",
"border-top-left-radius",
"border-top-right-radius",
"border-bottom-right-radius",
"border-bottom-left-radius",
"border-image",
"border-image-source",
"border-image-slice",
"border-image-width",
"border-image-outset",
"border-image-repeat",
"outline",
"outline-width",
"outline-style",
"outline-color",
"outline-offset",
"box-shadow",
"opacity",
"-ms-interpolation-mode",
"page-break-after",
"page-break-before",
"page-break-inside",
"transition",
"transition-delay",
"transition-timing-function",
"transition-duration",
"transition-property",
"transform",
"transform-origin",
"perspective",
"appearance",
"animation",
"animation-name",
"animation-duration",
"animation-play-state",
"animation-timing-function",
"animation-delay",
"animation-iteration-count",
"animation-direction",
"animation-fill-mode",
"fill",
"stroke"
],
"property-no-vendor-prefix": true,
"rule-empty-line-before": null,
"selector-attribute-quotes": "always",
"selector-list-comma-newline-after": "always-multi-line",
"selector-list-comma-newline-before": "never-multi-line",
"selector-list-comma-space-after": "always-single-line",
"selector-list-comma-space-before": "never-single-line",
"selector-max-attribute": 2,
"selector-max-class": 4,
"selector-max-combinators": 4,
"selector-max-compound-selectors": 4,
"selector-max-empty-lines": 1,
"selector-max-id": 0,
"selector-max-specificity": null,
"selector-max-type": 2,
"selector-max-universal": 1,
"selector-no-qualifying-type": null,
"selector-no-vendor-prefix": true,
"string-quotes": "double",
"value-keyword-case": "lower",
"value-list-comma-newline-after": "never-multi-line",
"value-list-comma-newline-before": "never-multi-line",
"value-list-comma-space-after": "always",
"value-no-vendor-prefix": true
}
}

View File

@ -1,17 +1,11 @@
language: ruby
rvm:
- 2.4.1
cache: bundler
gemfile: docs/Gemfile
script:
- bundle exec jekyll algolia --source docs --destination docs/_site --config docs/_config.yml
branches:
only:
- master
before_script: cp -rfv docs/_includes .
script: JEKYLL_ENV=production bundle exec jekyll build --config ./docs/_config.yml
deploy:
provider: pages
skip_cleanup: true
github_token: $GITHUB_TOKEN
local_dir: _site
keep-history: true
on:
branch: master
target_branch: gh-pages
# Change this to gh-pages if you're deploying using the gh-pages branch
- master
rvm:
- 2.4

22
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,22 @@
{
"markdownlint.config": {
"MD033": {
"allowed_elements": [
"table",
"tr",
"td",
"a",
"br",
"img",
"sub",
"b",
"kbd",
"h1",
"p",
"video",
"source"
]
},
"MD041": false
}
}

View File

@ -1,3 +0,0 @@
---
layout: 404
---

1751
CHANGELOG.md Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,18 +0,0 @@
FROM ruby:2.7
# Set default locale for the environment
ENV LC_ALL C.UTF-8
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
# throw errors if Gemfile has been modified since Gemfile.lock
RUN bundle config --global frozen 1
WORKDIR /usr/src/app
COPY Gemfile Gemfile.lock jekyll-text-theme.gemspec ./
RUN bundle install
EXPOSE 4000
CMD ["bundle", "exec", "jekyll", "help"]

View File

@ -1,4 +1,2 @@
source "https://rubygems.org"
# gem "github-pages", group: :jekyll_plugins
gemspec

View File

@ -1,6 +1,6 @@
MIT License
The MIT License (MIT)
Copyright (c) 2017 Tian Qi
Copyright (c) 2013-2024 Michael Rose and contributors
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

207
Rakefile Normal file
View File

@ -0,0 +1,207 @@
require "bundler/gem_tasks"
require "jekyll"
require "json"
require "listen"
require "rake/clean"
require "shellwords"
require "time"
require "yaml"
task :default => %i[copyright changelog js version]
package_json = JSON.parse(File.read("package.json"))
def listen_ignore_paths(base, options)
[
/_config\.ya?ml/,
/_site/,
/\.jekyll-metadata/
]
end
def listen_handler(base, options)
site = Jekyll::Site.new(options)
Jekyll::Command.process_site(site)
proc do |modified, added, removed|
t = Time.now
c = modified + added + removed
n = c.length
relative_paths = c.map{ |p| Pathname.new(p).relative_path_from(base).to_s }
print Jekyll.logger.message("Regenerating:", "#{relative_paths.join(", ")} changed... ")
begin
Jekyll::Command.process_site(site)
puts "regenerated in #{Time.now - t} seconds."
rescue => e
puts "error:"
Jekyll.logger.warn "Error:", e.message
Jekyll.logger.warn "Error:", "Run jekyll build --trace for more information."
end
end
end
task :preview do
base = Pathname.new('.').expand_path
options = {
"source" => base.join('test').to_s,
"destination" => base.join('test/_site').to_s,
"force_polling" => false,
"serving" => true,
"theme" => "minimal-mistakes-jekyll"
}
options = Jekyll.configuration(options)
ENV["LISTEN_GEM_DEBUGGING"] = "1"
listener = Listen.to(
base.join("_data"),
base.join("_includes"),
base.join("_layouts"),
base.join("_sass"),
base.join("assets"),
options["source"],
:ignore => listen_ignore_paths(base, options),
:force_polling => options['force_polling'],
&(listen_handler(base, options))
)
begin
listener.start
Jekyll.logger.info "Auto-regeneration:", "enabled for '#{options["source"]}'"
unless options['serving']
trap("INT") do
listener.stop
puts " Halting auto-regeneration."
exit 0
end
sleep
end
rescue ThreadError
# You pressed Ctrl-C, oh my!
end
Jekyll::Commands::Serve.process(options)
end
task :history => :changelog
task :changelog => "docs/_docs/18-history.md"
file "docs/_docs/18-history.md" => "CHANGELOG.md" do |t|
front_matter = {
title: "History",
classes: "wide",
permalink: "/docs/history/",
excerpt: "Change log of enhancements and bug fixes made to the theme.",
sidebar: {
nav: "docs",
},
last_modified_at: Time.now.iso8601,
toc: false,
}
# https://stackoverflow.com/a/49553523/5958455
front_matter = JSON.parse(JSON.dump(front_matter))
File.open(t.name, "w") do |f|
f.puts front_matter.to_yaml
f.puts "---"
f.puts ""
f.puts "<!--\n Sourced from CHANGELOG.md\n See Rakefile `task :changelog` for details\n-->"
f.puts ""
f.puts "{% raw %}"
# Remove H1
changelog = File.read(t.prerequisites.first)
.gsub(/^# [^\n]*$/m, "")
.gsub(/\(#(\d+)\)$/m, "[#\\1](https://github.com/mmistakes/minimal-mistakes/issues/\\1)")
.strip
f.write changelog
f.puts ""
f.puts "{% endraw %}"
end
end
COPYRIGHT_LINES = [
"Minimal Mistakes Jekyll Theme #{package_json["version"]} by Michael Rose",
"Copyright 2013-#{Time.now.year} Michael Rose - mademistakes.com | @mmistakes",
"Free for personal and commercial use under the MIT license",
"https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE",
]
COPYRIGHT_FILES = [
"_includes/copyright.html",
"_includes/copyright.js",
"_sass/minimal-mistakes/_copyright.scss",
]
def genenerate_copyright_file(filename, header, prefix, footer)
File.open(filename, "w") do |f|
f.puts header
COPYRIGHT_LINES.each do |line|
f.puts "#{prefix}#{line}"
end
f.puts footer
end
end
file "_includes/copyright.html" => "package.json" do |t|
genenerate_copyright_file(t.name, "<!--", " ", "-->")
end
file "_includes/copyright.js" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end
file "_sass/minimal-mistakes/_copyright.scss" => "package.json" do |t|
genenerate_copyright_file(t.name, "/*!", " * ", " */")
end
task :copyright => COPYRIGHT_FILES
CLEAN.include(*COPYRIGHT_FILES)
JS_FILES = ["assets/js/vendor/jquery/jquery-3.6.0.js"] + Dir.glob("assets/js/plugins/*.js") + ["assets/js/_main.js"]
JS_TARGET = "assets/js/main.min.js"
task :js => JS_TARGET
file JS_TARGET => ["_includes/copyright.js"] + JS_FILES do |t|
sh Shellwords.join(%w[npx uglifyjs -c --comments /@mmistakes/ --source-map -m -o] +
[t.name] + t.prerequisites)
end
task :watch_js do
listener = Listen.to(
"assets/js",
ignore: /main\.min\.js$/,
) do |modified, added, removed|
Rake::Task[:js].invoke
end
trap("INT") do
listener.stop
exit 0
end
begin
listener.start
sleep
rescue ThreadError
end
end
task :version => ["docs/_data/theme.yml", "README.md", "docs/_pages/home.md"]
file "docs/_data/theme.yml" => "package.json" do |t|
theme = { "version" => package_json["version"] }
File.open(t.name, "w") do |f|
f.puts "# for use with in-page templates"
f.puts theme.to_yaml
end
end
file "README.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(mmistakes\/minimal-mistakes@)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end
file "docs/_pages/home.md" => "package.json" do |t|
content = File.read(t.name)
content = content.gsub(/(\breleases\/tag\/|Latest release v)[\d.]+/, '\1' + package_json["version"])
File.write(t.name, content)
end

View File

@ -1,236 +1,316 @@
# Welcome to Jekyll!
#
# This config file is meant for settings that affect your whole blog, values
# This config file is meant for settings that affect your entire site, values
# which you are expected to set up once and rarely need to edit after that.
# For technical reasons, this file is *NOT* reloaded automatically when you use
# 'jekyll serve'. If you change this file, please restart the server process.
# `jekyll serve`. If you change this file, please restart the server process.
# Theme Settings
#
# ,--------. ,--. ,--. ,--.
# '--. .--',---. \ `.' /,-' '-.
# | | | .-. : .' \ '-. .-'
# | | \ --. / .'. \ | |
# `--' `----''--' '--' `--'
# Review documentation to determine if you should use `theme` or `remote_theme`
# https://mmistakes.github.io/minimal-mistakes/docs/quick-start-guide/#installing-the-theme
# theme : "minimal-mistakes-jekyll"
# remote_theme : "mmistakes/minimal-mistakes"
minimal_mistakes_skin : "dark" # "air", "aqua", "contrast", "dark", "dirt", "neon", "mint", "plum", "sunrise"
## => Site Settings
##############################
text_skin: dark # "default" (default), "dark", "forest", "ocean", "chocolate", "orange"
highlight_theme: tomorrow-night-eighties # "default" (default), "tomorrow", "tomorrow-night", "tomorrow-night-eighties", "tomorrow-night-blue", "tomorrow-night-bright"
url : https://wing-summer.github.io/WingHexExplorer2 # the base hostname & protocol for your site e.g. https://www.someone.com
baseurl : # does not include hostname
title : WingHexExplorer2
description: > # this means to ignore newlines until "Language & timezone"
一个自由强大跨平台的十六进制编辑器
## => Language and Timezone
##############################
lang: zh-Hans # the language of your site, default as "en"
timezone: # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for the available values
## => Author and Social
##############################
author:
type : # "person" (default), "organization"
name : 寂静的羽夏
url : https://www.cnblogs.com/wingsummer
avatar : # path or url of avatar image (square)
bio : 一个热爱计算机技术的菜鸟
email :
facebook : # "user_name" the last part of your profile url, e.g. https://www.facebook.com/user_name
twitter : # "user_name" the last part of your profile url, e.g. https://twitter.com/user_name
weibo : # "user_id" the last part of your profile url, e.g. https://www.weibo.com/user_id/profile?...
googleplus: # "user_id" the last part of your profile url, e.g. https://plus.google.com/u/0/user_id
telegram : # "user_name" the last part of your profile url, e.g. https://t.me/user_name
medium : # "user_name" the last part of your profile url, e.g. https://medium.com/user_name
zhihu : # "user_name" the last part of your profile url, e.g. https://www.zhihu.com/people/user_name
douban : # "user_name" the last part of your profile url, e.g. https://www.douban.com/people/user_name
linkedin : # "user_name" the last part of your profile url, e.g. https://www.linkedin.com/in/user_name
github : Wing-summer
npm : # "user_name" the last part of your profile url, e.g. https://www.npmjs.com/~user_name
## => GitHub Repository (if the site is hosted by GitHub)
##############################
repository: wingsummer/WingHexExplorer2
repository_tree: main
## => Paths
##############################
paths:
root : # title link url, "/" (default)
home : # home layout url, "/" (default)
archive : # "/archive.html" (default)
rss : # "/feed.xml" (default)
## => Post
##############################
## excerpt
excerpt_separator: <!--more-->
## license
license: BY-NC-SA-4.0 # "CC-BY-4.0", "CC-BY-SA-4.0", "CC-BY-NC-4.0", "CC-BY-ND-4.0", "BY-NC-SA-4.0"
## TOC
toc:
selectors: # "h1,h2,h3" (default)
## => Markdown Enhancements
##############################
## Mathjax
mathjax: # false (default), true
mathjax_autoNumber: # false (default), true
## Mermaid
mermaid: true # false (default), true
## Chart
chart: # false (default), true
## => Paginate
##############################
paginate: 8
paginate_path: /page:num # don't change this unless for special need
## => Sources
##############################
sources: # bootcdn (default), unpkg
## => Sharing
##############################
sharing:
provider: false # false (default), "addtoany", "addthis", "custom"
## AddThis
addthis:
id: # AddThis pubid, e.g. ra-5xxxxxxxxxxx
## => Comments
##############################
# Site Settings
locale : "zh-CN"
rtl : # true, false (default) # turns direction of the page into right to left for RTL languages
title : "WingHexExplorer2"
title_separator : "-"
subtitle : "羽云十六进制编辑器2" # site tagline that appears below site title in masthead
name : "寂静的羽夏"
description : "一个自由强大跨平台的十六进制编辑器"
url : https://wing-summer.github.io # the base hostname & protocol for your site e.g. "https://mmistakes.github.io"
baseurl : /WingHexExplorer2 # the subpath of your site, e.g. "/blog"
repository : wingsummer/WingHexExplorer2 # GitHub username/repo-name e.g. "mmistakes/minimal-mistakes"
teaser : # path of fallback teaser image, e.g. "/assets/images/500x300.png"
logo : "/assets/images/appicon.png" # path of logo image to display in the masthead, e.g. "/assets/images/88x88.png"
masthead_title : # overrides the website title displayed in the masthead, use " " for no title
breadcrumbs : # true, false (default)
words_per_minute : 200
enable_copy_code_button : true # true, false (default)
copyright : "寂静的羽夏 (wingsummer)" # "copyright" name, defaults to site.title
copyright_url : ”https://www.cnblogs.com/wingsummer“ # "copyright" URL, defaults to site.url
comments:
provider: false # false (default), "disqus", "gitalk", "valine", "custom"
## Disqus
provider : # false (default), "disqus", "discourse", "facebook", "staticman", "staticman_v2", "utterances", "giscus", "custom"
disqus:
shortname: # the Disqus shortname for the site
shortname : # https://help.disqus.com/customer/portal/articles/466208-what-s-a-shortname-
discourse:
server : # https://meta.discourse.org/t/embedding-discourse-comments-via-javascript/31963 , e.g.: meta.discourse.org
facebook:
# https://developers.facebook.com/docs/plugins/comments
appid :
num_posts : # 5 (default)
colorscheme : # "light" (default), "dark"
utterances:
theme : # "github-light" (default), "github-dark"
issue_term : # "pathname" (default)
giscus:
repo_id : # Shown during giscus setup at https://giscus.app
category_name : # Full text name of the category
category_id : # Shown during giscus setup at https://giscus.app
discussion_term : # "pathname" (default), "url", "title", "og:title"
reactions_enabled : # '1' for enabled (default), '0' for disabled
theme : # "light" (default), "dark", "dark_dimmed", "transparent_dark", "preferred_color_scheme"
strict : # 1 for enabled, 0 for disabled (default)
input_position : # "top", "bottom" # The comment input box will be placed above or below the comments
emit_metadata : # 1 for enabled, 0 for disabled (default) # https://github.com/giscus/giscus/blob/main/ADVANCED-USAGE.md#imetadatamessage
lang : # "en" (default)
lazy : # true, false # Loading of the comments will be deferred until the user scrolls near the comments container.
staticman:
branch : # "master"
endpoint : # "https://{your Staticman v3 API}/v3/entry/github/"
reCaptcha:
siteKey :
secret :
atom_feed:
path : # blank (default) uses feed.xml
hide : # true, false (default)
search : # true, false (default)
search_full_content : # true, false (default)
search_provider : # lunr (default), algolia, google
lunr:
search_within_pages : # true, false (default)
algolia:
application_id : # YOUR_APPLICATION_ID
index_name : # YOUR_INDEX_NAME
search_only_api_key : # YOUR_SEARCH_ONLY_API_KEY
powered_by : # true (default), false
google:
search_engine_id : # YOUR_SEARCH_ENGINE_ID
instant_search : # false (default), true
# SEO Related
google_site_verification :
bing_site_verification :
naver_site_verification :
yandex_site_verification :
baidu_site_verification :
## Gitalk
# please refer to https://github.com/gitalk/gitalk for more info.
gitalk:
clientID : # GitHub Application Client ID
clientSecret: # GitHub Application Client Secret
repository : # GitHub repo
owner : # GitHub repo owner
admin: # GitHub repo owner and collaborators, only these guys can initialize GitHub issues, IT IS A LIST.
# - your GitHub Id
# Social Sharing
twitter:
username :
facebook:
username :
app_id :
publisher :
og_image : # Open Graph/Twitter default site image
# For specifying social profiles
# - https://developers.google.com/structured-data/customize/social-profiles
social:
type : # Person or Organization (defaults to Person)
name : # If the user or organization name differs from the site's name
links: # An array of links to social media profiles
## Valine
# please refer to https://valine.js.org/en/ for more info.
valine:
app_id : # LeanCloud App id
app_key : # LeanCloud App key
placeholder : # Prompt information
visitor : # false (default)
meta : # "[nick, mail, link]" (default) nickname, E-mail, Personal-site
## => Pageview
##############################
pageview:
provider: false # false (default), "leancloud", "custom"
## Leancloud
leancloud:
app_id : # LeanCloud App id
app_key : # LeanCloud App key
app_class : # LeanCloud App class
## => Search
##############################
search:
provider: default # "default" (default), false, "google", "custom"
## Google Custom Search Engine
google:
custom_search_engine_id: # Google Custom Search Engine ID
## => Analytics
##############################
# Analytics
analytics:
provider: false # false (default), "google", "custom"
## Google Analytics
provider : # false (default), "google", "google-universal", "google-gtag", "custom"
google:
tracking_id : # Google Analytics id for the site
anonymize_ip: false # Anonymize IP tracking for Analytics
tracking_id :
anonymize_ip : # true, false (default)
## => Build
##############################
markdown : kramdown
highlighter : rouge
permalink : date
# Site Author
author:
name : "寂静的羽夏"
avatar : /assets/images/author.jpg # path of avatar image, e.g. "/assets/images/bio-photo.jpg"
bio : "一个热爱计算机技术的菜鸟"
location :
email :
links:
- label: "Email"
icon: "fas fa-fw fa-envelope-square"
url: "mailto:wing-summer@qq.com"
- label: "Website"
icon: "fas fa-fw fa-link"
url: "https://www.cnblogs.com/wingsummer"
- label: "GitHub"
icon: "fab fa-fw fa-github"
url: "https://github.com/Wing-summer"
# Site Footer
footer:
links:
- label: "GitHub"
icon: "fab fa-fw fa-github"
url: "https://github.com/Wing-summer"
# Reading Files
include:
- .htaccess
- _pages
exclude:
- "*.sublime-project"
- "*.sublime-workspace"
- vendor
- .asset-cache
- .bundle
- .jekyll-assets-cache
- .sass-cache
- assets/js/plugins
- assets/js/_main.js
- assets/js/vendor
- Capfile
- CHANGELOG
- config
- Gemfile
- Gemfile.lock
- LICENSE
- README-*.md
- README.md
- Gruntfile.js
- gulpfile.js
- jekyll-text-theme.gemspec
- package-lock.json
- LICENSE
- log
- minimal-mistakes-jekyll.gemspec
- node_modules
- package.json
- /node_modules
- /screenshots
- /vendor
- .markdownlint.json
- package-lock.json
- Rakefile
- README
- tmp
keep_files:
- .git
- .svn
encoding: "utf-8"
markdown_ext: "markdown,mkdown,mkdn,mkd,md"
# Conversion
markdown: kramdown
highlighter: rouge
lsi: false
excerpt_separator: "\n\n"
incremental: false
# Markdown Processing
kramdown:
input: GFM
hard_wrap: false
auto_ids: true
footnote_nr: 1
entity_output: as_char
toc_levels: 1..6
smart_quotes: lsquo,rsquo,ldquo,rdquo
enable_coderay: false
# Sass/SCSS
sass:
sass_dir: _sass
style: compressed # https://sass-lang.com/documentation/file.SASS_REFERENCE.html#output_style
# Outputting
permalink: /:categories/:title/
timezone: # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
# Pagination with jekyll-paginate
paginate: 5 # amount of posts to show
paginate_path: /page:num/
# Pagination with jekyll-paginate-v2
# See https://github.com/sverrirs/jekyll-paginate-v2/blob/master/README-GENERATOR.md#site-configuration
# for configuration details
pagination:
# Set enabled to true to use paginate v2
# enabled: true
debug: false
collection: 'posts'
per_page: 10
permalink: '/page/:num/'
title: ':title - page :num'
limit: 0
sort_field: 'date'
sort_reverse: true
category: 'posts'
tag: ''
locale: ''
trail:
before: 2
after: 2
# Plugins (previously gems:)
plugins:
- jekyll-paginate
- jekyll-sitemap
- jekyll-gist
- jekyll-feed
- jekyll-include-cache
# mimic GitHub Pages with --safe
whitelist:
- jekyll-paginate
- jekyll-sitemap
- jekyll-gist
- jekyll-feed
- jekyll-include-cache
# Archives
# Type
# - GitHub Pages compatible archive pages built with Liquid ~> type: liquid (default)
# - Jekyll Archives plugin archive pages ~> type: jekyll-archives
# Path (examples)
# - Archive page should exist at path when using Liquid method or you can
# expect broken links (especially with breadcrumbs enabled)
# - <base_path>/tags/my-awesome-tag/index.html ~> path: /tags/
# - <base_path>/categories/my-awesome-category/index.html ~> path: /categories/
# - <base_path>/my-awesome-category/index.html ~> path: /
category_archive:
type: liquid
path: /categories/
tag_archive:
type: liquid
path: /tags/
# https://github.com/jekyll/jekyll-archives
# jekyll-archives:
# enabled:
# - categories
# - tags
# layouts:
# category: archive-taxonomy
# tag: archive-taxonomy
# permalinks:
# category: /categories/:name/
# tag: /tags/:name/
# HTML Compression
# - https://jch.penibelst.de/
compress_html:
clippings: all
ignore:
envs: development
collections:
docs:
output: true
permalink: /:collection/:path/
# Defaults
defaults:
# _posts
- scope:
path: ""
type: posts
values:
layout: article
sharing: true
license: true
aside:
toc: true
show_edit_on_github: true
show_subscribe: true
pageview: true
layout: single
author_profile: true
read_time: false
share: true
related: false
- scope:
path: "docs/zh"
path: ""
type: docs
values:
layout: article
sidebar:
nav: docs-zh
layout: single
read_time: false
author_profile: false
share: false
comments: false
toc_sticky: true
license: true
aside:
toc: true
lang: zh
title: "文档"
show_edit_on_github: false
show_title: false
show_date: false
## => Plugins
##############################
plugins:
- jekyll-feed
- jekyll-paginate
- jekyll-sitemap
- jemoji
sidebar:
nav: "docs-zh"

View File

@ -1,20 +0,0 @@
CC-BY-4.0:
name: Attribution 4.0 International
url: https://creativecommons.org/licenses/by/4.0/
image: https://i.creativecommons.org/l/by/4.0/88x31.png
CC-BY-SA-4.0:
name: Attribution-ShareAlike 4.0 International
url: https://creativecommons.org/licenses/by-sa/4.0/
image: https://i.creativecommons.org/l/by-sa/4.0/88x31.png
CC-BY-NC-4.0:
name: Attribution-NonCommercial 4.0 International
url: https://creativecommons.org/licenses/by-nc/4.0/
image: https://i.creativecommons.org/l/by-nc/4.0/88x31.png
CC-BY-ND-4.0:
name: Attribution-NoDerivatives 4.0 International
url: https://creativecommons.org/licenses/by-nd/4.0/
image: https://i.creativecommons.org/l/by-nd/4.0/88x31.png
BY-NC-SA-4.0:
name: Attribution-NonCommercial-ShareAlike 4.0 International
url: https://creativecommons.org/licenses/by-nc-sa/4.0/
image: https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png

View File

@ -1,175 +0,0 @@
# @start locale config
## => English
########################
en: &EN
SUBSCRIBE : "Subscribe"
READMORE : "Read more"
SEARCH : "Search"
CANCEL : "Cancel"
VIEWS : "views"
LAST_UPDATED : "Last updated"
PREVIOUS : "PREVIOUS"
NEXT : "NEXT"
ARTICLE_DATE_FORMAT : "%b %d, %Y"
ARTICLE_LIST_DATE_FORMAT: "%b %d"
STATISTICS : "[POST_COUNT] post articles, [PAGE_COUNT] pages."
LICENSE_ANNOUNCE : "This work is licensed under a [LICENSE] license."
POST_ON_GITHUB : "Edit on Github"
FOLLOW_ME : "Follow me on [NAME]."
FOLLOW_US : "Follow us on [NAME]."
EMAIL_ME : "Send me an Email."
EMAIL_US : "Send us an Email."
COPYRIGHT_DATES : "2021"
DOCUMENT : "Docs"
en-GB:
<<: *EN
en-US:
<<: *EN
en-CA:
<<: *EN
en-AU:
<<: *EN
## => Simplified Chinese
########################
zh-Hans: &ZH_HANS
SUBSCRIBE : "订阅"
READMORE : "阅读更多"
SEARCH : "搜索"
CANCEL : "取消"
VIEWS : "阅读"
LAST_UPDATED : "更新于"
PREVIOUS : "上篇"
NEXT : "下篇"
ARTICLE_DATE_FORMAT : "%Y年 %m月%d日"
ARTICLE_LIST_DATE_FORMAT: "%m月%d日"
STATISTICS : "共计 [POST_COUNT] 篇文章,[PAGE_COUNT] 页。"
LICENSE_ANNOUNCE : "本文遵守 [LICENSE] 许可协议。"
POST_ON_GITHUB : "在 Github 上修改"
FOLLOW_ME : "在 [NAME] 上关注我。"
FOLLOW_US : "在 [NAME] 上关注我们。"
EMAIL_ME : "给我发邮件。"
EMAIL_US : "给我们发邮件。"
COPYRIGHT_DATES : "2021"
DOCUMENT : "文档"
zh:
<<: *ZH_HANS
zh-CN:
<<: *ZH_HANS
zh-SG:
<<: *ZH_HANS
## => Traditional Chinese
########################
zh-Hant: &ZH_HANT
SUBSCRIBE : "訂閱"
READMORE : "閱讀更多"
SEARCH : "搜索"
CANCEL : "取消"
VIEWS : "閱讀"
LAST_UPDATED : "更新於"
PREVIOUS : "上篇"
NEXT : "下篇"
ARTICLE_DATE_FORMAT : "%Y年 %m月%d日"
ARTICLE_LIST_DATE_FORMAT: "%m月%d日"
STATISTICS : "共計 [POST_COUNT] 篇文章,[PAGE_COUNT] 頁。"
LICENSE_ANNOUNCE : "本文遵守 [LICENSE] 許可協議。"
POST_ON_GITHUB : "在 Github 上修改"
FOLLOW_ME : "在 [NAME] 上關注我。"
FOLLOW_US : "在 [NAME] 上關注我們。"
EMAIL_ME : "給我發郵件。"
EMAIL_US : "給我們發郵件。"
COPYRIGHT_DATES : "2021"
DOCUMENT : "文檔"
zh-TW:
<<: *ZH_HANT
zh-HK:
<<: *ZH_HANT
## => Korean
########################
ko: &KO
SUBSCRIBE : "구독하기"
READMORE : "더보기"
SEARCH : "검색"
CANCEL : "취소"
VIEWS : "조회"
LAST_UPDATED : "마지막 수정"
PREVIOUS : "이전"
NEXT : "다음"
ARTICLE_DATE_FORMAT : "%Y년 %m월 %d일"
ARTICLE_LIST_DATE_FORMAT: "%m월 %d일"
STATISTICS : "전체 글 [POST_COUNT]개, [PAGE_COUNT] 페이지"
LICENSE_ANNOUNCE : "이 글의 저작권은 [LICENSE] 라이센스를 따릅니다."
POST_ON_GITHUB : "Github에서 확인하기"
FOLLOW_ME : "[NAME]에서 팔로우하기"
FOLLOW_US : "[NAME]에서 팔로우하기"
EMAIL_ME : "이메일 보내기"
EMAIL_US : "이메일 보내기"
COPYRIGHT_DATES : "2021"
DOCUMENT : "문서"
ko-KR:
<<: *KO
## => French
########################
fr: &FR
SUBSCRIBE : "S'abonner"
READMORE : "Plus"
SEARCH : "Recherche"
CANCEL : "Annuler"
VIEWS : "vues"
LAST_UPDATED : "Dernière modification"
PREVIOUS : "PRÉCÉDENT"
NEXT : "SUIVANT"
ARTICLE_DATE_FORMAT : "%d %b, %Y"
ARTICLE_LIST_DATE_FORMAT: "%d %b"
STATISTICS : "[POST_COUNT] articles, [PAGE_COUNT] pages."
LICENSE_ANNOUNCE : "Ce travail est sous licence [LICENSE]."
POST_ON_GITHUB : "Modifier sur Github"
FOLLOW_ME : "Suivez-moi sur [NAME]."
FOLLOW_US : "Suivez-nous sur [NAME]."
EMAIL_ME : "Envoyez-moi un courriel."
EMAIL_US : "Envoyez-nous un courriel"
COPYRIGHT_DATES : "2021"
DONATE : "Faites un don de [NAME]."
DOCUMENT : "Docs"
fr-BE:
<<: *FR
fr-CA:
<<: *FR
fr-CH:
<<: *FR
fr-FR:
<<: *FR
fr-LU:
<<: *FR
## => Turkish
########################
tr: &TR
SUBSCRIBE : "Takip et"
READMORE : "Devamını Oku"
SEARCH : "İçerik Ara"
CANCEL : "İptal"
VIEWS : "gösterim"
LAST_UPDATED : "Son güncellenme"
PREVIOUS : "ÖNCEKİ"
NEXT : "SONRAKİ"
ARTICLE_DATE_FORMAT : "%d %b, %Y"
ARTICLE_LIST_DATE_FORMAT: "%d %b"
STATISTICS : "Toplam [POST_COUNT] adet gönderim ve [PAGE_COUNT] adet sayfa bulunuyor."
LICENSE_ANNOUNCE : "Bu içerik [LICENSE] ile lisanslanmıştır."
POST_ON_GITHUB : "Github üzerinde düzenle"
FOLLOW_ME : "Beni [NAME] üzerinden takip et."
FOLLOW_US : "Bizi [NAME] üzerinden takip edin."
EMAIL_ME : "Bana email ile ulaşın."
EMAIL_US : "Bize email ile ulaşın."
COPYRIGHT_DATES : "2021"
DOCUMENT : "Belgeler"
# @end locale config

View File

@ -1,100 +1,86 @@
header:
- title: GitHub
url: https://github.com/Wing-summer/WingHexExplorer2
- titles:
# @start locale config
en : &EN Docs
en-GB : *EN
en-US : *EN
en-CA : *EN
en-AU : *EN
zh-Hans : &ZH_HANS 文档
zh : *ZH_HANS
zh-CN : *ZH_HANS
zh-SG : *ZH_HANS
zh-Hant : &ZH_HANT 文檔
zh-TW : *ZH_HANT
zh-HK : *ZH_HANT
ko : &KO 문서
ko-KR : *KO
fr : &FR Docs
fr-BE : *FR
fr-CA : *FR
fr-CH : *FR
fr-FR : *FR
fr-LU : *FR
tr : &TR Belgeler
# @end locale config
url: /docs/DocsIndex.html
- titles:
# @start locale config
en : &EN Archive
en-GB : *EN
en-US : *EN
en-CA : *EN
en-AU : *EN
zh-Hans : &ZH_HANS 归档
zh : *ZH_HANS
zh-CN : *ZH_HANS
zh-SG : *ZH_HANS
zh-Hant : &ZH_HANT 歸檔
zh-TW : *ZH_HANT
zh-HK : *ZH_HANT
ko : &KO 아카이브
ko-KR : *KO
fr : &FR Archives
fr-BE : *FR
fr-CA : *FR
fr-CH : *FR
fr-FR : *FR
fr-LU : *FR
tr : &TR Arşivdekiler
# @end locale config
url: /archive.html
- titles:
# @start locale config
en : &EN About
en-GB : *EN
en-US : *EN
en-CA : *EN
en-AU : *EN
zh-Hans : &ZH_HANS 关于
zh : *ZH_HANS
zh-CN : *ZH_HANS
zh-SG : *ZH_HANS
zh-Hant : &ZH_HANT 關於
zh-TW : *ZH_HANT
zh-HK : *ZH_HANT
ko : &KO 소개
ko-KR : *KO
fr : &FR À propos
fr-BE : *FR
fr-CA : *FR
fr-CH : *FR
fr-FR : *FR
fr-LU : *FR
tr : &TR Hakkında
# @end locale config
url: /about.html
# main links
main:
- title: 主页
url: /
- title: 博客
url: /posts
- title: 文档
url: /docs
- title: 关于
url: /about
docs-zh:
- title: 鸣谢
children:
- title: 鸣谢与说明
key: docs-credits
url: /docs/zh/credits.html
url: /docs/zh/credits
- title: 入门
children:
- title: 简介
key: docs-introduction
url: /docs/zh/introduction.html
url: /docs/zh/introduction
- title: 基础
key: docs-basis
url: /docs/zh/basis.html
url: /docs/zh/basis
- title: 工作区
url: /docs/zh/workspace
- title: 文件基本操作
url: /docs/zh/fileop-basis
- title: 查找和跳转
url: /docs/zh/find-replace
- title: 标记
url: /docs/zh/mark
- title: 窗口
url: /docs/zh/window
- title: 插件使用
url: /docs/zh/plugin-usage
- title: 设置相关
url: /docs/zh/settings
- title: 脚本开发
children:
- title: 编辑器介绍
url: /docs/zh/script-ide
- title: 设置相关
url: /docs/zh/script-setting
- title: AngelScript 简介
url: /docs/zh/script-angelscript
- title: 语言基础 - 基本语法
url: /docs/zh/script-grammar
- title: 语言基础 - 表达式
url: /docs/zh/script-expression
- title: 语言基础 - 基本数据类型
url: /docs/zh/script-data-type
- title: 语言基础 - 类和接口
url: /docs/zh/script-class-interface
- title: 语言基础 - 运算优先级
url: /docs/zh/script-pri-op
- title: 语言基础 - 句柄
url: /docs/zh/script-handle
- title: 语言基础 - 对象
url: /docs/zh/script-obj
- title: 语言基础 - 标准库
url: /docs/zh/script-stl
- title: 函数包 - reader
url: /docs/zh/script-reader
- title: 函数包 - ctl
url: /docs/zh/script-ctl
- title: 函数包 - UI 相关
url: /docs/zh/script-ui
- title: 函数包 - 其他
url: /docs/zh/script-other
- title: 脚本调试
url: /docs/zh/script-dbg
- title: 代码格式化
url: /docs/zh/script-clang-format
- title: 插件开发
- title: 其他语言
children:
- title: 环境配置
url: /docs/zh/plgdev-env
- title: 插件系统介绍
url: /docs/zh/plgdev-plgsys
- title: 标准插件开发
url: /docs/zh/plgdev-stdplg
- title: 文件设备驱动插件开发
url: /docs/zh/plgdev-drvplg
- title: 插件调试
url: /docs/zh/plgdev-dbg
- title: 插件系统实现番外
url: /docs/zh/plgdev-impl

2185
_data/ui-text.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,64 +0,0 @@
default:
text_skin: default
highlight_theme: default
lang: en
paths:
root: /
home: /
archive: /archive.html
rss: /feed.xml
mathjax: false
mathjax_autoNumber: false
mermaid: false
chart: false
toc:
selectors: 'h1,h2,h3'
sources: bootcdn
page:
mode: normal
type: webpage
article_header:
align: left
theme: light
articles:
show_cover: true
show_excerpt: false
show_readmore: false
show_info: false
show_title: true
show_edit_on_github: false
show_date: true
show_tags: true
show_author_profile: false
show_subscribe: false
full_width: false
sharing: false
comment: true
license: false
pageview: false
search: default
sources:
bootcdn:
font_awesome: 'https://cdn.bootcdn.net/ajax/libs/font-awesome/5.15.1/css/all.css'
jquery: 'https://cdn.bootcss.com/jquery/3.1.1/jquery.min.js'
leancloud_js_sdk: '//cdn.jsdelivr.net/npm/leancloud-storage@3.13.2/dist/av-min.js'
chart: 'https://cdn.bootcss.com/Chart.js/2.7.2/Chart.bundle.min.js'
gitalk:
js: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.js'
css: 'https://cdn.bootcss.com/gitalk/1.2.2/gitalk.min.css'
valine: 'https://unpkg.com/valine/dist/Valine.min.js' # bootcdn not available
mathjax: 'https://cdn.bootcss.com/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML'
mermaid: 'https://cdn.bootcss.com/mermaid/8.0.0-rc.8/mermaid.min.js'
unpkg:
font_awesome: 'https://use.fontawesome.com/releases/v5.15.1/css/all.css'
jquery: 'https://unpkg.com/jquery@3.3.1/dist/jquery.min.js'
leancloud_js_sdk: '//cdn.jsdelivr.net/npm/leancloud-storage@3.13.2/dist/av-min.js'
chart: 'https://unpkg.com/chart.js@2.7.2/dist/Chart.min.js'
gitalk:
js: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.min.js'
css: 'https://unpkg.com/gitalk@1.2.2/dist/gitalk.css'
valine: 'https//unpkg.com/valine/dist/Valine.min.js'
mathjax: 'https://unpkg.com/mathjax@2.7.4/unpacked/MathJax.js?config=TeX-MML-AM_CHTML'
mermaid: 'https://unpkg.com/mermaid@8.0.0-rc.8/dist/mermaid.min.js'

View File

@ -1,13 +1,12 @@
---
title: 鸣谢与说明
permalink: /docs/zh/credits
key: docs-credits
toc: true
---
## 鸣谢
<p align="center">
<img alt="羽云十六进制编辑器2" src="{{site.url}}/assets/images/appicon.png" />
</p>
![羽云十六进制编辑器2]({{"/assets/images/appicon.png" | relative_url }}){: .align-center}
🏅 如果您对本项目文档有贡献,但被忘记记录在内。首先对疏忽遗漏的情况表示抱歉,请 [联系我](https://github.com/Wing-summer) 补充。
{:.warning}
@ -37,4 +36,4 @@ key: docs-credits
如果您要参与该项目文档编写,则会遵守 **知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议** 。无论您是作为贡献者还是转载,都要注意这件事情,这是对我们作为用爱发电的开源作者最起码的尊重,在此表示真诚的感谢。
本 WIKI 是通过 PR 进行合作,当然也可以通过 issue 提出问题。一旦修改合并后,会自动推送合并到项目对应的文档区域
本 WIKI 是通过 PR 进行合作,当然也可以通过 issue 提出问题来进行修改采纳

View File

@ -1,6 +1,7 @@
---
title: 入门
permalink: /docs/zh/introduction
key: docs-introduction
toc: true
---
## 简介
@ -8,14 +9,13 @@ key: docs-introduction
该文档提供该软件的使用说明,所有的说明都会以该图作为标注。这张图会包含了大量的信息。
{:.info}
<p align="center">
<img alt="软件截图" src="{{site.url}}/assets/images/screenshot.png" />
<p align="center">羽云十六进制浏览器</p>
</p>
![软件截图]({{"/assets/images/screenshot.png" | relative_url }}){: .align-center}
羽云十六进制浏览器
{: .text-center}
<p align="center">
<img alt="wingsummer" src="{{site.url}}/assets/images/authorband.svg" />
<img alt="AGPL-v3.0" src="{{site.url}}/assets/images/licenseband.svg" />
<img alt="wingsummer" src="{{"/assets/images/authorband.svg" | relative_url }}" />
<img alt="AGPL-v3.0" src="{{"/assets/images/licenseband.svg" | relative_url }}" />
</p>
一个自由的强大免费的十六进制编辑器,基于 QT C++ 进行开发,作者是 [寂静的羽夏](https://www.cnblogs.com/wingsummer) 。
@ -34,6 +34,9 @@ key: docs-introduction
对于 Qt 5 版本,仅支持 5.15.2 或更高版本Qt 6 的话 6.6.2 或更高的版本,其他低版本由于关键库的 API 缺失和自身的一些 Bug所以不提供支持。
目前 Qt5 版本已不再提供主动支持,如果特别需要,请联系我进行付费支持,非诚勿扰。如果你想通过 PR 帮忙继续 Qt5 支持,也欢迎!
{: .notice--warning}
装好对应的 QT 安装包 SDK 和 CMake 之后,还需要装个依赖,这只针对 Linux 才会需要,因为`Qt-Advanced-Docking-System`,如下是原文档里面的说明(其他发行版请自行对照,也欢迎补充):
- Qt5 on Ubuntu 18.04 or 20.04
@ -59,7 +62,7 @@ sudo apt install qt6-default qt6-base-dev qt6-base-private-dev qt6-tools-dev lib
### 在 QtCreator 中编译
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/introduction/image-20241009012251972.png" />
<img alt="" src="{{"/assets/docs/intro/image-20241009012251972.png" | relative_url }}" />
</p>
把项目文件夹拖进去 QtCreator点击左下角的电脑图标选择`Debug`或者`Release`版本,然后点击最下方的锤子图标进行构建,稍等十分钟左右,即可构建完成,点击绿色三角图标运行即可。

View File

@ -1,6 +1,7 @@
---
title: 入门
permalink: /docs/zh/basis
key: docs-basis
toc: true
---
## 简述
@ -11,37 +12,31 @@ key: docs-basis
当安装完毕软件后你直接打开程序时,就会得到如下界面:
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-1.png" />
</p>
![程序初始界面]({{"/assets/docs/basis/1-1.png" | relative_url }}){: .align-center}
该程序也可以在 root 权限运行,你就会看到如下的界面:
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-2.png" />
</p>
![程序管理员权限]({{"/assets/docs/basis/1-2.png" | relative_url }}){: .align-center}
如果眼尖的话你就能看到区别,你可以看到图标和中间区域的图标有所不同,在颜色上色相是相反的,同时在 root 会有蓝色的骷髅:
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-3.png" />
<p align="center">用户权限</p>
</p>
![用户权限]({{"/assets/docs/basis/1-3.png" | relative_url }}){: .align-center}
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-4.png" />
<p align="center">root 权限</p>
</p>
用户权限
{: .text-center}
![root 权限]({{"/assets/docs/basis/1-4.png" | relative_url }}){: .align-center}
root 权限
{: .text-center}
这就是提醒你是否在使用 root 执行程序(在 Win 下是管理员及其以上的权限)的一个最重要最显眼的标志,除此之外没有任何显眼的了。不过在`v2.0.0`下,将会有更细节的提示尽可能的**避免**高危误操作的问题。
> 无论是在用户模式,还是在 root 模式,在界面上没有任何区别,只是在某些情况下,功能无法使用,比如直接读取磁盘数据需要 root 模式。在用户模式下无法将文件保存到需要 root 权限写文件的文件夹中。
> 无论是在用户模式,还是在 root 模式,在界面上没有任何区别,只是在某些情况下,功能无法使用。在用户模式下无法将文件保存到需要 root 权限写文件的文件夹中。
下面我们先从全面的视角来看看这个软件的界面结构:
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-5.png" />
</p>
![界面结构]({{"/assets/docs/basis/1-5.png" | relative_url }}){: .align-center}
- 菜单工具栏:包含编辑文件和操作的一些工具。
- 编辑区:当打开文件时,该区域将会是一个十六进制编辑区,这个是唯一的,也就是程序不打开文件时的空白区域。
@ -52,11 +47,10 @@ key: docs-basis
菜单工具栏是该软件的几乎所有功能大集合体。软件自带的和插件、脚本注册的功能全都会在这里面显示。插件可以在这里面追加新的分类方便自己大量功能的集成。它默认有:**文件、编辑、视图、脚本、设置、关于** 这四个选项卡,每个选项卡都有自己负责的任务,至于每块功能的详细介绍将会分步在后面几个章节进行介绍。
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/image-20241009110510461.png" />
</p>
![菜单工具栏]({{"/assets/docs/basis/image-20241009110510461.png" | relative_url }}){: .align-center}
视图-工具中的各勾选对应的选项卡
{: .text-center}
### 编辑区
@ -85,14 +79,12 @@ Dock 区是除编辑区、菜单工具栏、状态栏之外的贴边窗体的统
## 当前文档
当前文档是区别于`WingHexExplorer`这一个版本所不具备的概念,因为这软件只能同时编辑一个文件。而新版的`WingHexExplorer2`不同,它能同时编辑不同文件,也可以同时编辑同一个文件,那么要清楚编辑是哪个文件是十分重要的事情。
当前文档是区别于`WingHexExplorer`这一个版本所不具备的概念。而新版的`WingHexExplorer2`不同,它能同时编辑不同文件,也可以同时编辑同一个文件,那么要清楚编辑是哪个文件是十分重要的事情。
目前版本,对于当前文件的判断是标签上的信息提示,对于不同主题,它的颜色是不一样的。**所以,如果你要贡献主题的话,必须包含能体现当前文档含义的设置,否则不是一个好的主题。**
以暗色主题为例,再把上面的图拿下来:
<p align="center">
<img alt="" src="{{site.url}}/assets/markdown-pic/basis/1-5.png" />
</p>
![程序界面]({{"/assets/docs/basis/1-5.png" | relative_url }}){: .align-center}
标注为编辑区的文档不是当前文档,而当前文档是标记为 Dock 区的十六进制编辑区。首先**上边缘**的颜色**明显区别于**其他普通标签的颜色,并且**右边缘和上边缘同色**,这是判断是否为当前文档的唯一区别,也希望后面其他主题也遵循这种类似的设计。

8
_docs/zh/04-workspace.md Normal file
View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/workspace
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/fileop-basis
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/find-replace
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

8
_docs/zh/07-mark.md Normal file
View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/mark
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

8
_docs/zh/08-window.md Normal file
View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/window
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/plugin-usage
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

8
_docs/zh/10-settings.md Normal file
View File

@ -0,0 +1,8 @@
---
title: 入门
permalink: /docs/zh/settings
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-ide
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-setting
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-angelscript
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-grammar
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-expression
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-data-type
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-class-interface
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-pri-op
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-handle
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-obj
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-stl
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-reader
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-ctl
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

8
_docs/zh/23-script-ui.md Normal file
View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-ui
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-other
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-dbg
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 脚本开发
permalink: /docs/zh/script-clang-format
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-env
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-plgsys
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-stdplg
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-drvplg
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-dbg
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -0,0 +1,8 @@
---
title: 插件开发
permalink: /docs/zh/plgdev-impl
toc: true
---
🚧 本页面仍在建设中,欢迎有热心的志愿者前来参与合作!🚧
{: .notice--warning .text-center}

View File

@ -1,3 +1,3 @@
<!-- start custom analytics snippet -->
<!-- end custom analytics snippet -->
<!-- end custom analytics snippet -->

View File

@ -0,0 +1,9 @@
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.tracking_id }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ site.analytics.google.tracking_id }}', { 'anonymize_ip': {{ site.analytics.google.anonymize_ip | default: false }}});
</script>

View File

@ -0,0 +1,7 @@
<script>
window.ga=function(){ga.q.push(arguments)};ga.q=[];ga.l=+new Date;
ga('create','{{ site.analytics.google.tracking_id }}','auto');
ga('set', 'anonymizeIp', {{ site.analytics.google.anonymize_ip | default: false }});
ga('send','pageview')
</script>
<script src="https://www.google-analytics.com/analytics.js" async></script>

View File

@ -1,14 +1,14 @@
{%- if site.analytics.google.tracking_id -%}
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google.tracking_id }}"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
<script>
var _gaq = _gaq || [];
_gaq.push(['_setAccount', '{{ site.analytics.google.tracking_id }}']);
{% if site.analytics.google.anonymize_ip == true %}
_gaq.push(['_gat._anonymizeIp']);
{% endif %}
_gaq.push(['_trackPageview']);
gtag('config', '{{ site.analytics.google.tracking_id }}');
{% if site.analytics.google.anonymize_ip == true %}
gtag('config', '{{ site.analytics.google.tracking_id }}', { 'anonymize_ip': true });
{% endif %}
</script>
{%- endif -%}
(function() {
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
})();
</script>

View File

@ -1,7 +1,14 @@
{%- if jekyll.environment != 'development' -%}
{%- if site.analytics.provider == 'google' -%}
{%- include analytics-providers/google.html -%}
{%- elsif site.analytics.provider == 'custom' -%}
{%- include analytics-providers/custom.html -%}
{%- endif -%}
{%- endif -%}
{% if jekyll.environment == 'production' and site.analytics.provider and page.analytics != false %}
{% case site.analytics.provider %}
{% when "google" %}
{% include /analytics-providers/google.html %}
{% when "google-universal" %}
{% include /analytics-providers/google-universal.html %}
{% when "google-gtag" %}
{% include /analytics-providers/google-gtag.html %}
{% when "custom" %}
{% include /analytics-providers/custom.html %}
{% endcase %}
{% endif %}

View File

@ -0,0 +1,30 @@
{% if post.header.teaser %}
{% capture teaser %}{{ post.header.teaser }}{% endcapture %}
{% else %}
{% assign teaser = site.teaser %}
{% endif %}
{% if post.id %}
{% assign title = post.title | markdownify | remove: "<p>" | remove: "</p>" %}
{% else %}
{% assign title = post.title %}
{% endif %}
<div class="{{ include.type | default: 'list' }}__item">
<article class="archive__item" itemscope itemtype="https://schema.org/CreativeWork"{% if post.locale %} lang="{{ post.locale }}"{% endif %}>
{% if include.type == "grid" and teaser %}
<div class="archive__item-teaser">
<img src="{{ teaser | relative_url }}" alt="">
</div>
{% endif %}
<h2 class="archive__item-title no_toc" itemprop="headline">
{% if post.link %}
<a href="{{ post.link }}">{{ title }}</a> <a href="{{ post.url | relative_url }}" rel="permalink"><i class="fas fa-link" aria-hidden="true" title="permalink"></i><span class="sr-only">Permalink</span></a>
{% else %}
<a href="{{ post.url | relative_url }}" rel="permalink">{{ title }}</a>
{% endif %}
</h2>
{% include page__meta.html type=include.type %}
{% if post.excerpt %}<p class="archive__item-excerpt" itemprop="description">{{ post.excerpt | markdownify | strip_html | truncate: 160 }}</p>{% endif %}
</article>
</div>

View File

@ -1,55 +0,0 @@
{%- include snippets/assign.html
target=site.data.variables.default.page.show_author_profile
source0=layout.show_author_profile source1=page.show_author_profile -%}
{%- assign _show_author_profile = __return -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.show_subscribe
source0=layout.show_subscribe source1=page.show_subscribe -%}
{%- assign _show_subscribe = __return -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.license
source0=layout.license source1=page.license -%}
{%- assign _license = __return -%}
<footer class="article__footer">
{%- if page.modify_date -%}
{%- include snippets/get-locale-string.html key='ARTICLE_DATE_FORMAT' -%}
{%- assign _locale_date_format = __return -%}
{%- include snippets/get-locale-string.html key='LAST_UPDATED' -%}
{%- assign _locale_last_update = __return -%}
<span>{{ _locale_last_update }}
<time itemprop="dateModified" datetime="{{ page.modify_date | date_to_xmlschema }}">{{ page.modify_date | date: _locale_date_format }}</time>
</span>
{%- elsif page.date -%}
<meta itemprop="dateModified" content="{{ page.date | date_to_xmlschema }}">
{%- endif -%}
{%- include article/footer/custom.html -%}
{%- if _show_author_profile -%}
{%- if page.author -%}
{%- assign _author = site.data.authors[page.author] -%}
{%- else -%}
{%- assign _author = site.author -%}
{%- endif -%}
{%- include article/footer/author-profile.html author=_author -%}
{%- endif -%}
{%- if _show_subscribe -%}
<div class="article__subscribe">{%- include article/footer/subscribe.html -%}</div>
{%- endif -%}
{%- if _license != false -%}
{%- assign _data_license = site.data.licenses-%}
{%- if site.license -%}
{%- assign _license_data = _data_license[site.license] -%}
{%- endif -%}
{%- if _license != true -%}
{%- assign _license_data = _data_license[_license] -%}
{%- endif -%}
<div class="article__license">{%- include article/footer/license.html license=_license_data -%}</div>
{%- endif -%}
</footer>

View File

@ -1,49 +0,0 @@
{%- include snippets/get-article-title.html article=include.article-%}
{%- assign _article_title = __return -%}
{%- if include.html != false -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.show_title
source0=layout.show_title source1=include.article.show_title -%}
{%- assign _show_title = __return -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.show_edit_on_github
source0=layout.show_edit_on_github source1=include.article.show_edit_on_github -%}
{%- assign _show_edit_on_github = __return -%}
{%- if _show_title or _show_edit_on_github -%}
<div class="article__header">
{%- if _show_title -%}
<header><h1>{{ _article_title }}</h1></header>
{%- endif -%}
{%- if _show_edit_on_github -%}
{%- if site.repository and site.repository_tree -%}
{%- include snippets/is_collection.html page=include.article -%}
{%- assign _is_article_collection = __return -%}
{%- include snippets/get-locale-string.html key='POST_ON_GITHUB' -%}
{%- assign _locale_post_on_github = __return -%}
{%- if _is_article_collection -%}
{%- include snippets/prepend-path.html path=include.article.path prepend_path=site.collections_dir -%}
{%- assign _article_path = __return -%}
{%- else -%}
{%- assign _article_path = include.article.path -%}
{%- endif -%}
{%- assign _github_path = site.repository | append: '/tree/' | append: site.repository_tree | append: '/' | append: _article_path | replace:'//','/' -%}
<span class="split-space">&nbsp;</span>
<a class="edit-on-github"
title="{{ _locale_post_on_github }}"
href="https://github.com/{{ _github_path }}">
<i class="far fa-edit"></i></a>
{%- endif -%}
{%- endif -%}
</div>
{%- else -%}
<header style="display:none;"><h1>{{ _article_title }}</h1></header>
{%- endif -%}
{%- endif -%}
{%- if include.semantic != false -%}
<meta itemprop="headline" content="{{ _article_title }}">
{%- endif -%}

View File

@ -1,96 +0,0 @@
{%- assign _author = site.data.authors[include.article.author] | default: site.author -%}
{%- if include.html != false -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.show_date
source0=layout.show_date source1=include.article.show_date -%}
{%- assign _show_date = __return -%}
{%- if _show_date and include.article.date -%}
{%- assign _show_date = true -%}
{%- else -%}
{%- assign _show_date = false -%}
{%- endif -%}
{%- include snippets/assign.html
target=site.data.variables.default.page.show_tags
source0=layout.show_tags source1=include.article.show_tags -%}
{%- assign _show_tags = __return -%}
{%- if _show_tags and include.article.tags[0] -%}
{%- assign _show_tags = true -%}
{%- else -%}
{%- assign _show_tags = false -%}
{%- endif -%}
{%- assign _show_author = include.article.author -%}
{%- include snippets/assign.html target=site.data.variables.default.page.pageview
source0=layout.pageview source1=page.pageview -%}
{%- assign _pageview = __return -%}
{%- if _pageview or include.show_pageview -%}
{%- assign _pageview = true -%}
{%- else -%}
{%- assign _pageview = false -%}
{%- endif -%}
{%- assign _paths_archive = site.paths.archive | default: site.data.variables.default.paths.archive -%}
{%- if _show_tags or _show_author or _show_date or _pageview -%}
<div class="article__info clearfix">
{%- if _show_tags -%}
<ul class="left-col menu">
{%- assign _tag_path = _paths_archive | append: '?tag=' -%}
{%- include snippets/prepend-baseurl.html path=_tag_path -%}
{%- for _tag in include.article.tags -%}
{%- assign _tag_path = __return -%}
{%- assign _tag_encode = _tag | strip | url_encode } -%}
<li>
<a class="button button--secondary button--pill button--sm"
href="{{ _tag_path | append: _tag_encode | replace: '//', '/' }}">{{ _tag }}</a>
</li>
{%- endfor -%}
</ul>
{%- endif -%}
{%- if _show_author or _show_date or _pageview -%}
<ul class="right-col menu">
{%- if _show_author -%}
<li><i class="fas fa-user"></i> <span>{{ _author.name }}</span></li>
{%- endif -%}
{%- if _show_date -%}
<li>
{%- include snippets/get-locale-string.html key='ARTICLE_DATE_FORMAT' -%}
<i class="far fa-calendar-alt"></i> <span>{{ include.article.date | date: __return }}</span>
</li>
{%- endif -%}
{%- if _pageview -%}
{%- if site.pageview.provider -%}
{%- include snippets/get-locale-string.html key='VIEWS' -%}
{%- assign _locale_views = __return -%}
<li><i class="far fa-eye"></i> <span class="js-pageview" data-page-key="{{ include.article.key }}">0</span> {{ _locale_views }}</li>
{%- endif -%}
{%- endif -%}
</ul>
{%- endif -%}
</div>
{%- endif -%}
{%- endif -%}
{%- if include.semantic != false -%}
{%- if _author -%}
<meta itemprop="author" content="{{ _author.name }}"/>
{%- endif -%}
{%- if include.article.date -%}
<meta itemprop="datePublished" content="{{ include.article.date | date_to_xmlschema }}">
{%- endif -%}
{%- if include.article.tags[0] -%}
{%- assign _keywords = include.article.tags | join: ',' %}
<meta itemprop="keywords" content="{{ _keywords }}">
{%- endif -%}
{%- endif -%}

View File

@ -1,144 +0,0 @@
{%- assign _excerpt_truncate = include.excerpt_truncate | default: 350 -%}
{%- assign _excerpt_type = include.excerpt_type -%}
{%- include snippets/get-locale-string.html key='READMORE' -%}
{%- assign _locale_readmore = __return -%}
{%- assign _sorted_list = include.articles -%}
{%- if include.group_by == 'year' -%}
{%- assign _sorted_list = _sorted_list | sort: 'date' -%}
{%- endif -%}
{%- if include.reverse -%}
{%- assign _sorted_list = _sorted_list | reverse -%}
{%- endif -%}
{%- if include.type == 'item' -%}
<div class="article-list items items--divided">
{%- elsif include.type == 'brief' -%}
<div class="article-list items">
{%- elsif include.type == 'grid' -%}
{%- if include.size == 'sm' -%}
<div class="article-list grid grid--sm grid--p-3">
{%- else -%}
<div class="article-list grid grid--p-3">
{%- endif -%}
{%- endif -%}
{%- for _article in _sorted_list -%}
{%- include snippets/prepend-baseurl.html path=_article.url -%}
{%- assign _article_url = __return -%}
{%- if _article.cover -%}
{%- include snippets/get-nav-url.html path=_article.cover -%}
{%- assign _article_cover = __return -%}
{%- endif -%}
{%- if include.type == 'item' -%}
{%- if include.article_type == 'BlogPosting' -%}
<article class="item" itemscope itemtype="http://schema.org/BlogPosting">
{%- else -%}
<article class="item">
{%- endif -%}
{%- if _article.cover and include.show_cover-%}
{%- include snippets/get-nav-url.html path=_article.cover -%}
{%- assign _article_cover = __return -%}
<div class="item__image">
{%- if include.cover_size == 'lg' -%}
<img class="image image--lg" src="{{ _article_cover }}" />
{%- elsif include.cover_size == 'sm' -%}
<img class="image image--sm" src="{{ _article_cover }}" />
{%- else -%}
<img class="image" src="{{ _article_cover }}" />
{%- endif -%}
</div>
{%- endif -%}
<div class="item__content">
<header><a href="{{ _article_url }}"><h2 itemprop="headline" class="item__header">{{ _article.title }}</h2></a></header>
<div class="item__description">
{%- if _article.excerpt and include.show_excerpt -%}
<div class="article__content" itemprop="description articleBody">
{%- if _excerpt_type == 'html' -%}
{{ _article.excerpt }}
{%- else -%}
{{ _article.excerpt | strip_html | strip | truncate: _excerpt_truncate }}
{%- endif -%}
</div>
{%- endif -%}
{%- if include.show_readmore -%}
<p><a href="{{ _article_url }}">{{ _locale_readmore }}</a></p>
{%- endif -%}
</div>
{%- if include.show_info -%}
{%- include snippets/assign.html target=site.data.variables.default.page.pageview
source0=_article.pageview -%}
{%- assign _show_pageview = __return -%}
{%- include article-info.html article=_article show_pageview=_show_pageview -%}
{%- endif -%}
</div>
</article>
{%- elsif include.type == 'brief' -%}
{%- assign _tags = '' -%}
{%- for _tag in _article.tags -%}
{%- assign _tag_encode = _tag | strip | url_encode -%}
{%- if forloop.last -%}
{%- assign _tags = _tags | append: _tag_encode -%}
{%- else -%}
{%- assign _tags = _tags | append: _tag_encode | append: ',' -%}
{%- endif -%}
{%- endfor -%}
{%- if include.group_by == 'year' -%}
{%- assign _currentdate = _article.date | date: '%Y' -%}
{%- if _currentdate != _date -%}
{%- unless forloop.first -%}</ul></section>{%- endunless -%}
<section><h2 class="article-list__group-header">{{ _currentdate }}</h2><ul class="items">
{%- assign _date = _currentdate -%}
{%- endif -%}
{%- endif -%}
{%- include snippets/get-locale-string.html key='ARTICLE_LIST_DATE_FORMAT' -%}
<li class="item" itemscope itemtype="http://schema.org/BlogPosting" data-tags="{{ _tags }}">
<div class="item__content">
{%- if include.show_info -%}
<span class="item__meta">{{ _article.date | date: __return }}</span>
{%- endif -%}
<a itemprop="headline" class="item__header" href="{{ _article_url }}">{{ _article.title }}</a></div>
</li>
{%- elsif include.type == 'grid' -%}
{%- if include.size == 'sm' -%}
<div class="cell cell--12 cell--md-4 cell--lg-3">
<div class="card card--flat">
{%- if _article.cover -%}
<div class="card__image">
<img class="image" src="{{ _article_cover }}" />
<div class="overlay overlay--bottom">
<header>
<a href="{{ _article_url }}"><h2 class="card__header">{{ _article.title }}</h2></a>
</header>
</div>
</div>
{%- endif -%}
</div>
</div>
{%- else -%}
<div class="cell cell--12 cell--md-6 cell--lg-4">
<div class="card card--flat">
{%- if _article.cover -%}
<div class="card__image"><img src="{{ _article_cover }}" /></div>
{%- endif -%}
<div class="card__content">
<header>
<a href="{{ _article_url }}"><h2 class="card__header">{{ _article.title }}</h2></a>
</header>
</div>
</div>
</div>
{%- endif -%}
{%- endif -%}
{%- endfor -%}
</div>

View File

@ -1,58 +0,0 @@
{%- if page.sidebar.nav -%}
{%- assign _sidebar_nav = site.data.navigation[page.sidebar.nav] -%}
{%- if _sidebar_nav -%}
{%- assign _find_cur = false -%}
{%- assign _find_next = false -%}
{%- for _item in _sidebar_nav -%}
{%- if _find_next -%} {%- break -%} {%- endif -%}
{%- if _item.children -%}
{%- for _child in _item.children -%}
{%- assign _nav_key = _child.key -%}
{%- assign _page_key = page.key -%}
{%- if _nav_key == _page_key -%}
{%- assign _find_cur = true -%}
{%- elsif _find_cur and _find_next != true -%}
{%- assign _find_next = true -%}
{%- assign _next = _child -%}
{%- break -%}
{%- else -%}
{%- assign _previous = _child -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- if _find_cur != true -%}
{%- assign _previous = page.previous -%}
{%- assign _next = page.next -%}
{%- endif -%}
{%- endif -%}
{%- else -%}
{%- assign _previous = page.previous -%}
{%- assign _next = page.next -%}
{%- endif -%}
{%- if _next or _previous -%}
<div class="article__section-navigator clearfix">
{%- if _previous -%}
{%- include snippets/prepend-baseurl.html path=_previous.url -%}
{%- assign _href = __return -%}
{%- include snippets/get-locale-string.html key='PREVIOUS' -%}
{%- assign _locale_previous = __return -%}
<div class="previous"><span>{{ _locale_previous }}</span><a href="{{ _href }}">{{ _previous.title }}</a></div>
{%- endif -%}
{%- if _next -%}
{%- include snippets/prepend-baseurl.html path=_next.url -%}
{%- assign _href = __return -%}
{%- include snippets/get-locale-string.html key='NEXT' -%}
{%- assign _locale_next = __return -%}
<div class="next"><span>{{ _locale_next }}</span><a href="{{ _href }}">{{ _next.title }}</a></div>
{%- endif -%}
</div>
{%- endif -%}

View File

@ -1,47 +0,0 @@
{%- assign _author = include.author -%}
{%- if _author.type == 'organization' -%}
{%- assign _author_itemtype = 'http://schema.org/Organization' -%}
{%- else -%}
{%- assign _author_itemtype = 'http://schema.org/Person' -%}
{%- endif -%}
<div itemscope itemtype="{{ _author_itemtype }}" class="author-profile card card--flat item">
{%- if _author.avatar -%}
{%- if _author.url -%}
<a href="{{ _author.url }}" class="item__image">
{%- endif -%}
{%- include snippets/get-nav-url.html path=_author.avatar -%}
{%- assign _author_avatar = __return -%}
<img class="author-profile__avatar" itemprop="image" src="{{ _author_avatar }}" />
{%- if _author.url -%}
</a>
{%- endif -%}
{%- endif -%}
<div class="item__content">
{%- if _author.name -%}
<meta itemprop="name" content="{{ _author.name }}">
<p class="author-profile__name">
{%- if _author.url -%}
<meta itemprop="url" content="{{ _author.url }}">
<a href="{{ _author.url }}">
{%- endif -%}
{{ _author.name }}
{%- if _author.url -%}
</a>
{%- endif -%}
</p>
{%- endif -%}
{%- if _author.bio -%}
<p itemprop="description">{{ _author.bio }}</p>
{%- endif -%}
<div class="author-profile__links">
{%- include author-links.html author=_author -%}
</div>
</div>
</div>

View File

@ -1,3 +0,0 @@
<!-- start custom article footer snippet -->
<!-- end custom article footer snippet -->

View File

@ -1,14 +0,0 @@
{%- include snippets/get-locale-string.html key='LICENSE_ANNOUNCE' -%}
{%- assign _license_announce = __return -%}
{%- if include.license -%}
{%-assign _license_name = '<a itemprop="license" rel="license" href="[URL]">[NAME]</a>' | replace: "[URL]", include.license.url | replace: "[NAME]", include.license.name -%}
<div class="license">
<p align="center">{{ _license_announce | replace: "[LICENSE]", _license_name }}
<a rel="license" href="{{ include.license.url }}">
<img alt="{{ include.license.name }}" src="{{ include.license.image }}" />
</a>
</p>
</div>
{%- endif -%}

View File

@ -1,6 +0,0 @@
{%- assign _paths_rss = site.paths.rss | default: site.data.variables.default.paths.rss -%}
{%- include snippets/get-nav-url.html path=_paths_rss -%}
{%- assign _paths_rss = __return -%}
{%- include snippets/get-locale-string.html key='SUBSCRIBE' -%}
{%- assign _locale_nav_subscribe = __return -%}
<div class="subscribe"><i class="fas fa-rss"></i> <a type="application/rss+xml" href="{{ _paths_rss }}">{{ _locale_nav_subscribe }}</a></div>

View File

@ -1,3 +0,0 @@
<!-- start custom article top snippet -->
<!-- end custom article top snippet -->

View File

@ -1 +0,0 @@
<div class="toc-aside js-toc-root"></div>

View File

@ -1,120 +0,0 @@
{%- assign _author = include.author -%}
<div class="author-links">
<ul class="menu menu--nowrap menu--inline">
{%- if _author.url -%}
<link itemprop="url" href="{{ _author.url }}">
{%- endif -%}
{%- if _author.type == 'organization' -%}
{%- include snippets/get-locale-string.html key='EMAIL_US' -%}
{%- assign _locale_string_email = __return -%}
{%- include snippets/get-locale-string.html key='FOLLOW_US' -%}
{%- assign _locale_string_follow = __return -%}
{%- else -%}
{%- include snippets/get-locale-string.html key='EMAIL_ME' -%}
{%- assign _locale_string_email = __return -%}
{%- include snippets/get-locale-string.html key='FOLLOW_ME' -%}
{%- assign _locale_string_follow = __return -%}
{%- endif -%}
{%- include snippets/get-locale-string.html key='EMAIL_ME' -%}
{%- if _author.email -%}
<li title="{{ _locale_string_email }}">
<a class="button button--circle mail-button" itemprop="email" href="mailto:{{ _author.email }}" target="_blank">
<i class="fas fa-envelope"></i>
</a>
{%- endif -%}
{%- if _author.facebook -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Facebook' }}">
<a class="button button--circle facebook-button" itemprop="sameAs" href="https://www.facebook.com/{{ _author.facebook }}" target="_blank">
<div class="icon">{%- include svg/icon/social/facebook.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.twitter -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Twitter' }}">
<a class="button button--circle twitter-button" itemprop="sameAs" href="https://twitter.com/{{ _author.twitter }}" target="_blank">
<div class="icon">{%- include svg/icon/social/twitter.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.weibo -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Weibo' }}">
<a class="button button--circle weibo-button" itemprop="sameAs" href="https://weibo.com/{{ _author.weibo }}" target="_blank">
<div class="icon">{%- include svg/icon/social/weibo.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.googleplus -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Google+' }}">
<a class="button button--circle googlepluse-button" itemprop="sameAs" href="https://plus.google.com/u/0/{{ _author.googleplus }}" target="_blank">
<div class="icon">{%- include svg/icon/social/googleplus.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.telegram -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Telegram' }}">
<a class="button button--circle telegram-button" itemprop="sameAs" href="https://t.me/{{ _author.telegram }}" target="_blank">
<div class="icon">{%- include svg/icon/social/telegram.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.medium -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Medium' }}">
<a class="button button--circle medium-button" itemprop="sameAs" href="https://medium.com/{{ _author.medium }}" target="_blank">
<div class="icon">{%- include svg/icon/social/medium.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.zhihu -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Zhihu' }}">
<a class="button button--circle zhihu-button" itemprop="sameAs" href="https://www.zhihu.com/people/{{ _author.zhihu }}" target="_blank">
<div class="icon">{%- include svg/icon/social/zhihu.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.douban -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Douban' }}">
<a class="button button--circle douban-button" itemprop="sameAs" href="https://www.douban.com/people/{{ _author.douban }}" target="_blank">
<div class="icon">{%- include svg/icon/social/douban.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.linkedin -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Linkedin' }}">
<a class="button button--circle linkedin-button" itemprop="sameAs" href="https://www.linkedin.com/in/{{ _author.linkedin }}" target="_blank">
<div class="icon">{%- include svg/icon/social/linkedin.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.github -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'Github' }}">
<a class="button button--circle github-button" itemprop="sameAs" href="https://github.com/{{ _author.github }}" target="_blank">
<div class="icon">{%- include svg/icon/social/github.svg -%}</div>
</a>
</li>
{%- endif -%}
{%- if _author.npm -%}
<li title="{{ _locale_string_follow | replace: '[NAME]', 'npm' }}">
<a class="button button--circle npm-button" itemprop="sameAs" href="https://www.npmjs.com/~{{ _author.npm }}" target="_blank">
<div class="icon">{%- include svg/icon/social/npm.svg -%}</div>
</a>
</li>
{%- endif -%}
</ul>
</div>

View File

@ -0,0 +1,7 @@
<!--
<li>
<a href="http://link-to-whatever-social-network.com/user/" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fas fa-fw" aria-hidden="true"></i> Custom Social Profile Link
</a>
</li>
-->

View File

@ -0,0 +1,246 @@
{% assign author = page.author | default: page.authors[0] | default: site.author %}
{% assign author = site.data.authors[author] | default: author %}
<div itemscope itemtype="https://schema.org/Person" class="h-card">
{% if author.avatar %}
<div class="author__avatar">
<a href="{{ author.home | default: '/' | absolute_url }}">
<img src="{{ author.avatar | relative_url }}" alt="{{ author.name }}" itemprop="image" class="u-photo">
</a>
</div>
{% endif %}
<div class="author__content">
<h3 class="author__name p-name" itemprop="name">
<a class="u-url" rel="me" href="{{ author.home | default: '/' | absolute_url }}" itemprop="url">{{ author.name }}</a>
</h3>
{% if author.bio %}
<div class="author__bio p-note" itemprop="description">
{{ author.bio | markdownify }}
</div>
{% endif %}
</div>
<div class="author__urls-wrapper">
<button class="btn btn--inverse">{{ site.data.ui-text[site.locale].follow_label | remove: ":" | default: "Follow" }}</button>
<ul class="author__urls social-icons">
{% if author.location %}
<li itemprop="homeLocation" itemscope itemtype="https://schema.org/Place">
<i class="fas fa-fw fa-map-marker-alt" aria-hidden="true"></i> <span itemprop="name" class="p-locality">{{ author.location }}</span>
</li>
{% endif %}
{% if author.links %}
{% for link in author.links %}
{% if link.label and link.url %}
<li><a href="{{ link.url }}" rel="nofollow noopener noreferrer me"{% if link.url contains 'http' %} itemprop="sameAs"{% endif %}><i class="{{ link.icon | default: 'fas fa-link' }}" aria-hidden="true"></i><span class="label">{{ link.label }}</span></a></li>
{% endif %}
{% endfor %}
{% endif %}
{% if author.uri %}
<li>
<a href="{{ author.uri }}" itemprop="url" rel="me">
<i class="fas fa-fw fa-link" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].website_label | default: "Website" }}</span>
</a>
</li>
{% endif %}
{% if author.email %}
<li>
<a href="mailto:{{ author.email }}" rel="me" class="u-email">
<meta itemprop="email" content="{{ author.email }}" />
<i class="fas fa-fw fa-envelope-square" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
</a>
</li>
{% endif %}
{% if author.keybase %}
<li>
<a href="https://keybase.io/{{ author.keybase }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-keybase" aria-hidden="true"></i><span class="label">Keybase</span>
</a>
</li>
{% endif %}
{% if author.twitter %}
<li>
<a href="https://twitter.com/{{ author.twitter }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-twitter-square" aria-hidden="true"></i><span class="label">Twitter</span>
</a>
</li>
{% endif %}
{% if author.facebook %}
<li>
<a href="https://www.facebook.com/{{ author.facebook }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-facebook-square" aria-hidden="true"></i><span class="label">Facebook</span>
</a>
</li>
{% endif %}
{% if author.linkedin %}
<li>
<a href="https://www.linkedin.com/in/{{ author.linkedin }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-linkedin" aria-hidden="true"></i><span class="label">LinkedIn</span>
</a>
</li>
{% endif %}
{% if author.xing %}
<li>
<a href="https://www.xing.com/profile/{{ author.xing }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-xing-square" aria-hidden="true"></i><span class="label">XING</span>
</a>
</li>
{% endif %}
{% if author.instagram %}
<li>
<a href="https://instagram.com/{{ author.instagram }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-instagram" aria-hidden="true"></i><span class="label">Instagram</span>
</a>
</li>
{% endif %}
{% if author.tumblr %}
<li>
<a href="https://{{ author.tumblr }}.tumblr.com" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-tumblr-square" aria-hidden="true"></i><span class="label">Tumblr</span>
</a>
</li>
{% endif %}
{% if author.bitbucket %}
<li>
<a href="https://bitbucket.org/{{ author.bitbucket }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-bitbucket" aria-hidden="true"></i><span class="label">Bitbucket</span>
</a>
</li>
{% endif %}
{% if author.github %}
<li>
<a href="https://github.com/{{ author.github }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-github" aria-hidden="true"></i><span class="label">GitHub</span>
</a>
</li>
{% endif %}
{% if author.gitlab %}
<li>
<a href="https://gitlab.com/{{ author.gitlab }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-gitlab" aria-hidden="true"></i><span class="label">GitLab</span>
</a>
</li>
{% endif %}
{% if author.stackoverflow %}
<li>
<a href="https://stackoverflow.com/users/{{ author.stackoverflow }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-stack-overflow" aria-hidden="true"></i><span class="label">Stack Overflow</span>
</a>
</li>
{% endif %}
{% if author.lastfm %}
<li>
<a href="https://last.fm/user/{{ author.lastfm }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-lastfm-square" aria-hidden="true"></i><span class="label">Last.fm</span>
</a>
</li>
{% endif %}
{% if author.dribbble %}
<li>
<a href="https://dribbble.com/{{ author.dribbble }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-dribbble" aria-hidden="true"></i><span class="label">Dribbble</span>
</a>
</li>
{% endif %}
{% if author.pinterest %}
<li>
<a href="https://www.pinterest.com/{{ author.pinterest }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-pinterest" aria-hidden="true"></i><span class="label">Pinterest</span>
</a>
</li>
{% endif %}
{% if author.foursquare %}
<li>
<a href="https://foursquare.com/{{ author.foursquare }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-foursquare" aria-hidden="true"></i><span class="label">Foursquare</span>
</a>
</li>
{% endif %}
{% if author.steam %}
<li>
<a href="https://steamcommunity.com/id/{{ author.steam }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-steam" aria-hidden="true"></i><span class="label">Steam</span>
</a>
</li>
{% endif %}
{% if author.youtube %}
{% if author.youtube contains "://" %}
<li>
<a href="{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
</a>
</li>
{% elsif author.youtube %}
<li>
<a href="https://www.youtube.com/user/{{ author.youtube }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-youtube" aria-hidden="true"></i><span class="label">YouTube</span>
</a>
</li>
{% endif %}
{% endif %}
{% if author.soundcloud %}
<li>
<a href="https://soundcloud.com/{{ author.soundcloud }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-soundcloud" aria-hidden="true"></i><span class="label">SoundCloud</span>
</a>
</li>
{% endif %}
{% if author.weibo %}
<li>
<a href="https://www.weibo.com/{{ author.weibo }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-weibo" aria-hidden="true"></i><span class="label">Weibo</span>
</a>
</li>
{% endif %}
{% if author.flickr %}
<li>
<a href="https://www.flickr.com/{{ author.flickr }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-flickr" aria-hidden="true"></i><span class="label">Flickr</span>
</a>
</li>
{% endif %}
{% if author.codepen %}
<li>
<a href="https://codepen.io/{{ author.codepen }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-codepen" aria-hidden="true"></i><span class="label">CodePen</span>
</a>
</li>
{% endif %}
{% if author.vine %}
<li>
<a href="https://vine.co/u/{{ author.vine }}" itemprop="sameAs" rel="nofollow noopener noreferrer me">
<i class="fab fa-fw fa-vine" aria-hidden="true"></i><span class="label">{{ site.data.ui-text[site.locale].email_label | default: "Email" }}</span>
</a>
</li>
{% endif %}
{% include author-profile-custom-links.html %}
</ul>
</div>
</div>

View File

@ -0,0 +1,40 @@
{% case site.category_archive.type %}
{% when "liquid" %}
{% assign path_type = "#" %}
{% when "jekyll-archives" %}
{% assign path_type = nil %}
{% endcase %}
{% if page.collection != 'posts' %}
{% assign path_type = nil %}
{% assign crumb_path = '/' %}
{% else %}
{% assign crumb_path = site.category_archive.path %}
{% endif %}
<nav class="breadcrumbs">
<ol itemscope itemtype="https://schema.org/BreadcrumbList">
{% assign crumbs = page.url | split: '/' %}
{% assign i = 1 %}
{% for crumb in crumbs offset: 1 %}
{% if forloop.first %}
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ '/' | relative_url }}" itemprop="item"><span itemprop="name">{{ site.data.ui-text[site.locale].breadcrumb_home_label | default: "Home" }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% if forloop.last %}
<li class="current"{% if page.locale %} lang="{{ page.locale }}"{% endif %}>{{ page.title }}</li>
{% else %}
{% assign i = i | plus: 1 %}
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
<a href="{{ crumb | downcase | replace: '%20', '-' | prepend: path_type | prepend: crumb_path | relative_url }}" itemprop="item"><span itemprop="name">{{ crumb | url_decode | replace: '-', ' ' | capitalize }}</span></a>
<meta itemprop="position" content="{{ i }}" />
</li>
<span class="sep">{{ site.data.ui-text[site.locale].breadcrumb_separator | default: "/" }}</span>
{% endif %}
{% endfor %}
</ol>
</nav>

View File

@ -0,0 +1,19 @@
{% case site.category_archive.type %}
{% when "liquid" %}
{% assign path_type = "#" %}
{% when "jekyll-archives" %}
{% assign path_type = nil %}
{% endcase %}
{% if site.category_archive.path %}
{% assign categories_sorted = page.categories | sort_natural %}
<p class="page__taxonomy">
<strong><i class="fas fa-fw fa-folder-open" aria-hidden="true"></i> {{ site.data.ui-text[site.locale].categories_label | default: "Categories:" }} </strong>
<span itemprop="keywords">
{% for category_word in categories_sorted %}
<a href="{{ category_word | slugify | prepend: path_type | prepend: site.category_archive.path | relative_url }}" class="page__taxonomy-item p-category" rel="tag">{{ category_word }}</a>{% unless forloop.last %}<span class="sep">, </span>{% endunless %}
{% endfor %}
</span>
</p>
{% endif %}

22
_includes/comment.html Normal file
View File

@ -0,0 +1,22 @@
<article id="comment{{ include.index }}" class="js-comment comment" itemprop="comment" itemscope itemtype="https://schema.org/Comment">
<div class="comment__avatar-wrapper">
<img class="comment__avatar" src="https://www.gravatar.com/avatar/{{ include.email }}?d=mm&s=80" alt="{{ include.name }}">
</div>
<div class="comment__content-wrapper">
<h3 class="comment__author" itemprop="author" itemscope itemtype="https://schema.org/Person">
{% unless include.url == blank %}
<span itemprop="name"><a rel="external nofollow" itemprop="url" href="{{ include.url }}">{{ include.name }}</a></span>
{% else %}
<span itemprop="name">{{ include.name }}</span>
{% endunless %}
</h3>
<p class="comment__date">
{% if include.date %}
{% if include.index %}<a href="#comment{{ include.index }}" itemprop="url">{% endif %}
<time datetime="{{ include.date | date_to_xmlschema }}" itemprop="datePublished">{{ include.date | date: "%B %-d, %Y at %I:%M %p" }}</time>
{% if include.index %}</a>{% endif %}
{% endif %}
</p>
<div itemprop="text">{{ include.message | markdownify }}</div>
</div>
</article>

View File

@ -1,3 +1,3 @@
<!-- start custom comments snippet -->
<!-- end custom comments snippet -->
<!-- end custom comments snippet -->

View File

@ -0,0 +1,3 @@
<!-- start custom comments scripts -->
<!-- end custom comments scripts -->

View File

@ -0,0 +1,13 @@
{% if site.comments.discourse.server %}
{% capture canonical %}{% if site.permalink contains '.html' %}{{ page.url | absolute_url }}{% else %}{{ page.url | absolute_url | remove:'index.html' | strip_slash }}{% endif %}{% endcapture %}
<script type="text/javascript">
DiscourseEmbed = { discourseUrl: '//{{ site.comments.discourse.server }}/',
discourseEmbedUrl: '{{ canonical }}' };
(function () {
var d = document.createElement('script'); d.type = 'text/javascript'; d.async = true;
d.src = DiscourseEmbed.discourseUrl + 'javascripts/embed.js';
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(d);
})();
</script>
<noscript>Please enable JavaScript to view the comments powered by <a href="https://www.discourse.org/">Discourse.</a></noscript>
{% endif %}

View File

@ -1,22 +1,15 @@
{%- if page.key and
site.comments.disqus.shortname -%}
<div id="disqus_thread"></div>
{% if site.comments.disqus.shortname %}
<script>
/**
* RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR PLATFORM OR CMS.
* LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT: https://disqus.com/admin/universalcode/#configuration-variables*/
var disqus_config = function () {
this.page.url = '{%- include snippets/page-url.html -%}';
this.page.identifier = '{{ page.key }}';
};
(function() { // DON'T EDIT BELOW THIS LINE
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
var disqus_config = function () {
this.page.url = "{{ page.url | absolute_url }}"; /* Replace PAGE_URL with your page's canonical URL variable */
this.page.identifier = "{{ page.id }}"; /* Replace PAGE_IDENTIFIER with your page's unique identifier variable */
};
(function() { /* DON'T EDIT BELOW THIS LINE */
var d = document, s = d.createElement('script');
s.src = 'https://{{ site.comments.disqus.shortname }}.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
{%- endif -%}
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
{% endif %}

View File

@ -0,0 +1,8 @@
<div id="fb-root"></div>
<script>(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.5{% if site.comments.facebook.appid %}&appId={{ site.comments.facebook.appid }}{% endif %}";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

View File

@ -0,0 +1,34 @@
<script>
'use strict';
(function () {
var commentContainer = document.querySelector('#giscus-comments');
if (!commentContainer) {
return;
}
var script = document.createElement('script');
script.setAttribute('src', 'https://giscus.app/client.js');
script.setAttribute('data-repo', '{{ site.repository | downcase }}');
script.setAttribute('data-repo-id', '{{ site.comments.giscus.repo_id }}');
script.setAttribute('data-category', '{{ site.comments.giscus.category_name }}');
script.setAttribute('data-category-id', '{{ site.comments.giscus.category_id }}');
script.setAttribute('data-mapping', '{{ site.comments.giscus.discussion_term | default: "pathname" }}');
script.setAttribute('data-strict', '{{ site.comments.giscus.strict | default: 0 }}');
script.setAttribute('data-reactions-enabled', '{{ site.comments.giscus.reactions_enabled | default: 1 }}');
script.setAttribute('data-emit-metadata', '{{ site.comments.giscus.emit_metadata | default: 0 }}');
script.setAttribute('data-input-position', '{{ site.comments.giscus.input_position | default: "top" }}');
script.setAttribute('data-theme', '{{ site.comments.giscus.theme | default: "light" }}');
script.setAttribute('data-lang', '{{ site.comments.giscus.lang | default: "en" }}');
{% if site.comments.giscus.lazy %}
script.setAttribute('data-loading', 'lazy');
{% endif %}
script.setAttribute('crossorigin', 'anonymous');
script.setAttribute('async', '');
commentContainer.appendChild(script);
})();
</script>

View File

@ -1,39 +0,0 @@
{%- if page.key and
site.comments.gitalk.clientID and
site.comments.gitalk.clientSecret and
site.comments.gitalk.repository and
site.comments.gitalk.owner and
site.comments.gitalk.admin -%}
<!-- fix text color in the input textarea of gitalk -->
<style type="text/css">
.gitalk-wrapper .gt-header-textarea {
color: #333 !important;
}
</style>
{%- include snippets/get-sources.html -%}
{%- assign _sources = __return -%}
<div class="gitalk-wrapper" id="js-gitalk-container"></div>
{%- assign _admin = '' -%}
{%- for _admin_id in site.comments.gitalk.admin -%}
{%- assign _admin = _admin | append: ", '" | append: _admin_id | append: "'" -%}
{%- endfor -%}
{%- assign _last = _admin | size | minus: 1 -%}
{%- assign _admin = _admin | slice: 2, _last -%}
<script>
window.Lazyload.css('{{ _sources.gitalk.css }}');
window.Lazyload.js('{{ _sources.gitalk.js }}', function() {
var gitalk = new Gitalk({
clientID: '{{ site.comments.gitalk.clientID }}',
clientSecret: '{{ site.comments.gitalk.clientSecret }}',
repo: '{{ site.comments.gitalk.repository }}',
owner: '{{ site.comments.gitalk.owner }}',
admin: [{{ _admin }}],
id: '{{ page.key }}'
});
gitalk.render('js-gitalk-container');
});
</script>
{%- endif -%}

View File

@ -0,0 +1,20 @@
{% if site.comments.provider and page.comments %}
{% case site.comments.provider %}
{% when "disqus" %}
{% include /comments-providers/disqus.html %}
{% when "discourse" %}
{% include /comments-providers/discourse.html %}
{% when "facebook" %}
{% include /comments-providers/facebook.html %}
{% when "staticman" %}
{% include /comments-providers/staticman.html %}
{% when "staticman_v2" %}
{% include /comments-providers/staticman_v2.html %}
{% when "utterances" %}
{% include /comments-providers/utterances.html %}
{% when "giscus" %}
{% include /comments-providers/giscus.html %}
{% when "custom" %}
{% include /comments-providers/custom_scripts.html %}
{% endcase %}
{% endif %}

View File

@ -0,0 +1,40 @@
{% if site.repository and site.staticman.branch %}
<script>
(function ($) {
$('#new_comment').submit(function () {
var form = this;
$(form).addClass('disabled');
$('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
$('.page__comments-form .js-notice').removeClass('notice--danger');
$('.page__comments-form .js-notice').addClass('notice--success');
showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
},
error: function (err) {
console.log(err);
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
$('.page__comments-form .js-notice').removeClass('notice--success');
$('.page__comments-form .js-notice').addClass('notice--danger');
showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
$(form).removeClass('disabled');
}
});
return false;
});
function showAlert(message) {
$('.page__comments-form .js-notice').removeClass('hidden');
$('.page__comments-form .js-notice-text').html(message);
}
})(jQuery);
</script>
{% endif %}

View File

@ -0,0 +1,40 @@
{% if site.repository and site.comments.staticman.branch %}
<script>
(function ($) {
$('#new_comment').submit(function () {
var form = this;
$(form).addClass('disabled');
$('#comment-form-submit').html('<i class="fas fa-spinner fa-spin fa-fw"></i> {{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}');
$.ajax({
type: $(this).attr('method'),
url: $(this).attr('action'),
data: $(this).serialize(),
contentType: 'application/x-www-form-urlencoded',
success: function (data) {
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submitted | default: "Submitted" }}');
$('.page__comments-form .js-notice').removeClass('notice--danger');
$('.page__comments-form .js-notice').addClass('notice--success');
showAlert('{{ site.data.ui-text[site.locale].comment_success_msg | default: "Thanks for your comment! It will show on the site once it has been approved." }}');
},
error: function (err) {
console.log(err);
$('#comment-form-submit').html('{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}');
$('.page__comments-form .js-notice').removeClass('notice--success');
$('.page__comments-form .js-notice').addClass('notice--danger');
showAlert('{{ site.data.ui-text[site.locale].comment_error_msg | default: "Sorry, there was an error with your submission. Please make sure all required fields have been completed and try again." }}');
$(form).removeClass('disabled');
}
});
return false;
});
function showAlert(message) {
$('.page__comments-form .js-notice').removeClass('hidden');
$('.page__comments-form .js-notice-text').html(message);
}
})(jQuery);
</script>
{% endif %}

View File

@ -0,0 +1,21 @@
<script>
'use strict';
(function() {
var commentContainer = document.querySelector('#utterances-comments');
if (!commentContainer) {
return;
}
var script = document.createElement('script');
script.setAttribute('src', 'https://utteranc.es/client.js');
script.setAttribute('repo', '{{ site.repository }}');
script.setAttribute('issue-term', '{{ site.comments.utterances.issue_term | default: "pathname" }}');
{% if site.comments.utterances.label %}script.setAttribute('label', '{{ site.comments.utterances.label }}');{% endif %}
script.setAttribute('theme', '{{ site.comments.utterances.theme | default: "github-light" }}');
script.setAttribute('crossorigin', 'anonymous');
commentContainer.appendChild(script);
})();
</script>

View File

@ -1,46 +0,0 @@
{%- include snippets/get-sources.html -%}
{%- assign _sources = __return -%}
{%- assign _VALINE_APP_ID = site.comments.valine.app_id -%}
{%- assign _VALINE_APP_KEY = site.comments.valine.app_key -%}
{%- assign _VALINE_PLACEHOLDER = site.comments.valine.placeholder -%}
{%- assign _VALINE_VISITOR = site.comments.valine.visitor -%}
{%- assign _VALINE_META = site.comments.valine.meta -%}
{%- if _VALINE_APP_ID and
_VALINE_APP_KEY -%}
<div id="vcomments"></div>
{%- if _VALINE_VISITOR -%}
<span id="{{page.url}}" class="leancloud-visitors" data-flag-title={{page.title}}>
</span>
{%- endif -%}
<script>
window.Lazyload.js(['{{ _sources.leancloud_js_sdk}}', '{{ _sources.valine }}'], function() {
var _config = {
el: '#vcomments',
appId: '{{ _VALINE_APP_ID }}',
appKey: '{{ _VALINE_APP_KEY }}',
verify: true,
};
{%- if _VALINE_PLACEHOLDER -%}
_config.placeholder = '{{ _VALINE_PLACEHOLDER }}';
{%- endif -%}
{%- assign _page_lang_slice = page.lang | slice: 0, 2 -%}
{%- if _page_lang_slice != 'zh' -%}
_config.lang = 'en';
{%- endif -%}
{%- if _VALINE_VISITOR -%}
_config.visitor = 'true';
{%- endif -%}
{%- if _VALINE_META -%}
_config.meta = {{ _VALINE_META}};
{%- endif -%}
new Valine(_config);
});
</script>
{%- endif -%}

View File

@ -1,11 +1,180 @@
{%- if jekyll.environment != 'development' -%}
{%- if site.comments.provider == 'disqus' -%}
{%- include comments-providers/disqus.html -%}
{%- elsif site.comments.provider == 'gitalk' -%}
{%- include comments-providers/gitalk.html -%}
{%- elsif site.comments.provider == 'valine' -%}
{%- include comments-providers/valine.html -%}
{%- elsif site.comments.provider == 'custom' -%}
{%- include comments-providers/custom.html -%}
{%- endif -%}
{%- endif -%}
<div class="page__comments">
{% capture comments_label %}{{ site.data.ui-text[site.locale].comments_label | default: "Comments" }}{% endcapture %}
{% case site.comments.provider %}
{% when "discourse" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="discourse-comments"></section>
{% when "disqus" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="disqus_thread"></section>
{% when "facebook" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section class="fb-comments" data-href="{{ page.url | absolute_url }}" data-mobile="true" data-num-posts="{{ site.comments.facebook.num_posts | default: 5 }}" data-width="100%" data-colorscheme="{{ site.comments.facebook.colorscheme | default: 'light' }}"></section>
{% when "staticman_v2" %}
<section id="static-comments">
{% if site.repository and site.comments.staticman.branch %}
<!-- Start static comments -->
<div class="js-comments">
{% if site.data.comments[page.slug] %}
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
{% assign comments = site.data.comments[page.slug] %}
<!-- In order to sort by date we must have an array of objects, not an array of arrays, so
create a new array of plain comment objects and then sort by the comment date. -->
{% assign commentObjects = '' | split: '' %}
{% for comment in comments %}
{% assign commentObject = comment[1] %}
{% assign commentObjects = commentObjects | push: commentObject %}
{% endfor %}
{% assign comments = commentObjects | sort: "date" %}
{% for comment in comments %}
{% assign email = comment.email %}
{% assign name = comment.name %}
{% assign url = comment.url %}
{% assign date = comment.date %}
{% assign message = comment.message %}
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
{% endfor %}
{% endif %}
</div>
<!-- End static comments -->
<!-- Start new comment form -->
<div class="page__comments-form">
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
<form id="new_comment" class="page__comments-form js-form form" method="post" action="{{ site.comments.staticman.endpoint }}{{ site.repository }}/{{ site.comments.staticman.branch }}/comments">
<div class="form__spinner">
<i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
</div>
<div class="form-group">
<label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
</div>
<div class="form-group">
<label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
</div>
<div class="form-group">
<label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
</div>
<div class="form-group">
<label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
</div>
<div class="form-group hidden" style="display: none;">
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
{% if site.reCaptcha.siteKey %}<input type="hidden" name="options[reCaptcha][siteKey]" value="{{ site.reCaptcha.siteKey }}">{% endif %}
{% if site.reCaptcha.secret %}<input type="hidden" name="options[reCaptcha][secret]" value="{{ site.reCaptcha.secret }}">{% endif %}
</div>
<!-- Start comment form alert messaging -->
<p class="hidden js-notice">
<strong class="js-notice-text"></strong>
</p>
<!-- End comment form alert messaging -->
{% if site.reCaptcha.siteKey %}
<div class="form-group">
<div class="g-recaptcha" data-sitekey="{{ site.reCaptcha.siteKey }}"></div>
</div>
{% endif %}
<div class="form-group">
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
</div>
</form>
</div>
<!-- End new comment form -->
{% if site.reCaptcha.siteKey %}<script async src="https://www.google.com/recaptcha/api.js"></script>{% endif %}
{% endif %}
</section>
{% when "staticman" %}
<section id="static-comments">
{% if site.repository and site.staticman.branch %}
<!-- Start static comments -->
<div class="js-comments">
{% if site.data.comments[page.slug] %}
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_title | default: "Comments" }}</h4>
{% assign comments = site.data.comments[page.slug] %}
<!-- In order to sort by date we must have an array of objects, not an array of arrays, so
create a new array of plain comment objects and then sort by the comment date. -->
{% assign commentObjects = '' | split: '' %}
{% for comment in comments %}
{% assign commentObject = comment[1] %}
{% assign commentObjects = commentObjects | push: commentObject %}
{% endfor %}
{% assign comments = commentObjects | sort: "date" %}
{% for comment in comments %}
{% assign email = comment.email %}
{% assign name = comment.name %}
{% assign url = comment.url %}
{% assign date = comment.date %}
{% assign message = comment.message %}
{% include comment.html index=forloop.index email=email name=name url=url date=date message=message %}
{% endfor %}
{% endif %}
</div>
<!-- End static comments -->
<!-- Start new comment form -->
<div class="page__comments-form">
<h4 class="page__comments-title">{{ site.data.ui-text[site.locale].comments_label | default: "Leave a Comment" }}</h4>
<p class="small">{{ site.data.ui-text[site.locale].comment_form_info | default: "Your email address will not be published. Required fields are marked" }} <span class="required">*</span></p>
<form id="new_comment" class="page__comments-form js-form form" method="post" action="https://api.staticman.net/v1/entry/{{ site.repository }}/{{ site.staticman.branch }}">
<div class="form__spinner">
<i class="fas fa-spinner fa-spin fa-3x fa-fw"></i>
<span class="sr-only">{{ site.data.ui-text[site.locale].loading_label | default: "Loading..." }}</span>
</div>
<div class="form-group">
<label for="comment-form-message">{{ site.data.ui-text[site.locale].comment_form_comment_label | default: "Comment" }} <small class="required">*</small></label>
<textarea type="text" rows="3" id="comment-form-message" name="fields[message]" tabindex="1"></textarea>
<div class="small help-block"><a href="https://daringfireball.net/projects/markdown/">{{ site.data.ui-text[site.locale].comment_form_md_info | default: "Markdown is supported." }}</a></div>
</div>
<div class="form-group">
<label for="comment-form-name">{{ site.data.ui-text[site.locale].comment_form_name_label | default: "Name" }} <small class="required">*</small></label>
<input type="text" id="comment-form-name" name="fields[name]" tabindex="2" />
</div>
<div class="form-group">
<label for="comment-form-email">{{ site.data.ui-text[site.locale].comment_form_email_label | default: "Email address" }} <small class="required">*</small></label>
<input type="email" id="comment-form-email" name="fields[email]" tabindex="3" />
</div>
<div class="form-group">
<label for="comment-form-url">{{ site.data.ui-text[site.locale].comment_form_website_label | default: "Website (optional)" }}</label>
<input type="url" id="comment-form-url" name="fields[url]" tabindex="4"/>
</div>
<div class="form-group hidden" style="display: none;">
<input type="hidden" name="options[slug]" value="{{ page.slug }}">
<label for="comment-form-location">Not used. Leave blank if you are a human.</label>
<input type="text" id="comment-form-location" name="fields[hidden]" autocomplete="off"/>
</div>
<!-- Start comment form alert messaging -->
<p class="hidden js-notice">
<strong class="js-notice-text"></strong>
</p>
<!-- End comment form alert messaging -->
<div class="form-group">
<button type="submit" id="comment-form-submit" tabindex="5" class="btn btn--primary btn--large">{{ site.data.ui-text[site.locale].comment_btn_submit | default: "Submit Comment" }}</button>
</div>
</form>
</div>
<!-- End new comment form -->
{% endif %}
</section>
{% when "utterances" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="utterances-comments"></section>
{% when "giscus" %}
<h4 class="page__comments-title">{{ comments_label }}</h4>
<section id="giscus-comments"></section>
{% when "custom" %}
{% include /comments-providers/custom.html %}
{% endcase %}
</div>

6
_includes/copyright.html Normal file
View File

@ -0,0 +1,6 @@
<!--
Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
Free for personal and commercial use under the MIT license
https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
-->

6
_includes/copyright.js Normal file
View File

@ -0,0 +1,6 @@
/*!
* Minimal Mistakes Jekyll Theme 4.26.2 by Michael Rose
* Copyright 2013-2024 Michael Rose - mademistakes.com | @mmistakes
* Free for personal and commercial use under the MIT license
* https://github.com/mmistakes/minimal-mistakes/blob/master/LICENSE
*/

View File

@ -0,0 +1,13 @@
{% assign entries = include.entries | default: site[include.collection] | where_exp: "post", "post.hidden != true" %}
{% if include.sort_by %}
{% assign entries = entries | sort: include.sort_by %}
{% endif %}
{% if include.sort_order == 'reverse' %}
{% assign entries = entries | reverse %}
{% endif %}
{%- for post in entries -%}
{% include archive-single.html type=include.type %}
{%- endfor -%}

View File

@ -1,5 +0,0 @@
<div class="extensions extensions--video">
<iframe src="//player.bilibili.com/player.html?aid={{ include.id }}&page=1"
frameborder="no" scrolling="no" allowfullscreen="true">
</iframe>
</div>

View File

@ -1,4 +0,0 @@
<div class="extensions extensions--demo">
<iframe src='//codepen.io/{{ include.user }}/embed/{{ include.hash }}/?theme-id=0&default-tab={{ include.default_tab | default: result }}'
frameborder="0" scrolling="no" allowfullscreen></iframe>
</div>

View File

@ -1,4 +0,0 @@
<iframe class="extensions extensions--audio" width="330" height="86"
src="//music.163.com/outchain/player?type=2&id={{ include.id }}&auto=1&height=66"
frameborder="no" border="0" marginwidth="0" marginheight="0">
</iframe>

View File

@ -1,6 +0,0 @@
<div class="extensions extensions--slide">
<iframe src="//www.slideshare.net/slideshow/embed_code/key/{{ include.id }}"
width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"
style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen>
</iframe>
</div>

Some files were not shown because too many files have changed in this diff Show More