Switch theme to Doks
This commit is contained in:
commit
98666f3a08
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
node_modules
|
6
.gitmodules
vendored
Normal file
6
.gitmodules
vendored
Normal file
@ -0,0 +1,6 @@
|
||||
[submodule "themes/ananke"]
|
||||
path = themes/ananke
|
||||
url = https://github.com/theNewDynamic/gohugo-theme-ananke
|
||||
[submodule "themes/doks"]
|
||||
path = themes/doks
|
||||
url = https://github.com/h-enk/doks
|
12
.idea/arsenm-dev-site.iml
Normal file
12
.idea/arsenm-dev-site.iml
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="WEB_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/.tmp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/temp" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/tmp" />
|
||||
</content>
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/arsenm-dev-site.iml" filepath="$PROJECT_DIR$/.idea/arsenm-dev-site.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
7
.idea/vcs.xml
Normal file
7
.idea/vcs.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$/themes/ananke" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
115
.idea/workspace.xml
Normal file
115
.idea/workspace.xml
Normal file
@ -0,0 +1,115 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="BranchesTreeState">
|
||||
<expand>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="LOCAL_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:dependabot" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:dependabot" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:npm_and_yarn" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
<path>
|
||||
<item name="ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="REMOTE_ROOT" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:origin" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:dependabot" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:npm_and_yarn" type="e8cecc67:BranchNodeDescriptor" />
|
||||
<item name="GROUP_NODE:src" type="e8cecc67:BranchNodeDescriptor" />
|
||||
</path>
|
||||
</expand>
|
||||
<select />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="6d777def-cf1a-4067-90b0-e601bfe77217" name="Default Changelist" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="HTML File" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="ProjectId" id="1ikie6rCic6zTz95QYEGOHpup76" />
|
||||
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent">
|
||||
<property name="DefaultHtmlFileTemplate" value="HTML File" />
|
||||
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
|
||||
<property name="WebServerToolWindowFactoryState" value="false" />
|
||||
<property name="last_opened_file_path" value="$PROJECT_DIR$/../cstate" />
|
||||
<property name="vue.rearranger.settings.migration" value="true" />
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="6d777def-cf1a-4067-90b0-e601bfe77217" name="Default Changelist" comment="" />
|
||||
<created>1602458083066</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1602458083066</updated>
|
||||
<workItem from="1602458084295" duration="5482000" />
|
||||
<workItem from="1602564212348" duration="42000" />
|
||||
<workItem from="1602565400251" duration="209000" />
|
||||
<workItem from="1603217970037" duration="2349000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
<option name="oldMeFiltersMigrated" value="true" />
|
||||
</component>
|
||||
<component name="WindowStateProjectService">
|
||||
<state x="973" y="362" width="326" height="365" key="FileChooserDialogImpl" timestamp="1603222206412">
|
||||
<screen x="0" y="27" width="1920" height="1053" />
|
||||
</state>
|
||||
<state x="973" y="362" key="FileChooserDialogImpl/0.27.1920.1053/1920.0.1920.1080@0.27.1920.1053" timestamp="1603222206412" />
|
||||
<state x="973" y="362" width="326" height="365" key="FileChooserDialogImpl/0.27.1920.1053/1920.0.2560.1080@0.27.1920.1053" timestamp="1602564252356" />
|
||||
<state x="853" y="264" width="505" height="399" key="search.everywhere.popup" timestamp="1602458728726">
|
||||
<screen x="0" y="27" width="1920" height="1053" />
|
||||
</state>
|
||||
<state x="853" y="264" width="505" height="399" key="search.everywhere.popup/0.27.1920.1053/1920.0.2560.1080@0.27.1920.1053" timestamp="1602458728726" />
|
||||
</component>
|
||||
</project>
|
124
CHANGELOG.md
Normal file
124
CHANGELOG.md
Normal file
@ -0,0 +1,124 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
||||
|
||||
### [0.1.5](https://github.com/h-enk/doks/compare/v0.1.4...v0.1.5) (2021-01-12)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add hugo extended as a dependency ([258224c](https://github.com/h-enk/doks/commit/258224c7880911c709f80e478cacf265fafbbb5c))
|
||||
* add hugothemes reqs ([b3afb4b](https://github.com/h-enk/doks/commit/b3afb4b4055f5cfe5a28d355ac26f577fc442392))
|
||||
* remove exampleSite ([70db6bc](https://github.com/h-enk/doks/commit/70db6bca005c2e2f82e3ac64d9150c4d87889758))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update code of conduct ([411123b](https://github.com/h-enk/doks/commit/411123b207cfe0715c31455f9e5cbcfd9a2d93cc))
|
||||
* update frontpage ([f2f4937](https://github.com/h-enk/doks/commit/f2f49370a1ecd7d312de1b348e08e26d0a327121))
|
||||
* update homepage ([4e65d01](https://github.com/h-enk/doks/commit/4e65d012c5887ff8db9650006d8c6f2303d1b338))
|
||||
* update readme ([7283eb9](https://github.com/h-enk/doks/commit/7283eb997da055892d95015f1411b8528f9b2298))
|
||||
* update readme ([9dc2f0e](https://github.com/h-enk/doks/commit/9dc2f0ebfe75f968f77290d911e3be035b34e954))
|
||||
* update readme ([3ed1ad6](https://github.com/h-enk/doks/commit/3ed1ad6376959a678ceac990310dd51d2f2864f8))
|
||||
* update readme ([6a35faf](https://github.com/h-enk/doks/commit/6a35fafe485d82f4a327b8b4ed10a703eac4af1b))
|
||||
* update readme ([40dd5e4](https://github.com/h-enk/doks/commit/40dd5e4eea340f2fae24484bb86325f4410378ff))
|
||||
* update readme ([7b75c47](https://github.com/h-enk/doks/commit/7b75c47c9e0e5953b781ce4f784a3083361970fb))
|
||||
* update readme ([2d33818](https://github.com/h-enk/doks/commit/2d3381885ab6578ed44720e8f99033429034ba2a))
|
||||
* update readme ([632623f](https://github.com/h-enk/doks/commit/632623f29401f38e0a853508346a94267372dfa1))
|
||||
* update readme for docs discussions ([fb9e340](https://github.com/h-enk/doks/commit/fb9e340f6e48293ed2d32a73754ae081f41a0fc9))
|
||||
* update showcase link ([74724eb](https://github.com/h-enk/doks/commit/74724eb4c53d15475492b2b7c103b3056260fd28))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump to latest versions ([83f4163](https://github.com/h-enk/doks/commit/83f41636f71e547f4928597bdf67128fe954f83e))
|
||||
* bump to latest versions ([372d9cb](https://github.com/h-enk/doks/commit/372d9cb64d4d68b6e95b252112e27ff9123b456c))
|
||||
* bump versions to latest ([6184067](https://github.com/h-enk/doks/commit/6184067621a33cf0e53a4ae9fab269a91a11b730))
|
||||
* bump versions to latest ([940f30d](https://github.com/h-enk/doks/commit/940f30dcebfde1a4a8900118fdf84f57410ed63a))
|
||||
* bump versions to latest ([751d6c6](https://github.com/h-enk/doks/commit/751d6c68caa1811be92eaae378e16413f09eb12e))
|
||||
* bump versions to latest ([b66c0a6](https://github.com/h-enk/doks/commit/b66c0a6221cddbaf997c032222276185cc910d9d))
|
||||
* bump versions to latest ([1d7e3b8](https://github.com/h-enk/doks/commit/1d7e3b873b537e498ef4ef5ce5548b252a62c4bc))
|
||||
* bump versions to latest ([0aa2e0f](https://github.com/h-enk/doks/commit/0aa2e0f7e07e930ba507f8652e0d6375c562def7))
|
||||
* bump versions to latest ([ce5c733](https://github.com/h-enk/doks/commit/ce5c7336f95c3d6e6be4c7b3fb7db3812b7ac4ac))
|
||||
* bump versions to latest ([cc62487](https://github.com/h-enk/doks/commit/cc6248722a91f163359ce42e83f06e0ae5277ef7))
|
||||
|
||||
### [0.1.4](https://github.com/h-enk/doks/compare/v0.1.3...v0.1.4) (2020-12-03)
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update content ([63ca41e](https://github.com/h-enk/doks/commit/63ca41e1076375eb99aad5ca6d77d95516b6f349))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions ([c254be6](https://github.com/h-enk/doks/commit/c254be61754071600665858d6a7d2e2fbc105af3))
|
||||
* bump versions to latest ([831442c](https://github.com/h-enk/doks/commit/831442c1a6f3372b2930681ca9c937d123b5f6a3))
|
||||
* bump versions to latest ([0377b0d](https://github.com/h-enk/doks/commit/0377b0de75a3cc8027bd255961f6d0c184d82575))
|
||||
* bump versions to latest ([358bad6](https://github.com/h-enk/doks/commit/358bad680156937886f2957b6c6fcdbcdd97782e))
|
||||
* bump versions to latest ([7ce56d0](https://github.com/h-enk/doks/commit/7ce56d0a362c5099c0a6c50f6ad0f1c7ba969218))
|
||||
|
||||
### [0.1.3](https://github.com/h-enk/doks/compare/v0.1.2...v0.1.3) (2020-11-17)
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* add doks version file ([f8dcfbe](https://github.com/h-enk/doks/commit/f8dcfbeebfda5fef533b9b7bc2463fa0dfafd5fa))
|
||||
* update doks version file ([d326669](https://github.com/h-enk/doks/commit/d326669c1d170cd5a76df1faafea472f3132fdf5))
|
||||
|
||||
### [0.1.2](https://github.com/h-enk/doks/compare/v0.1.1...v0.1.2) (2020-11-17)
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump versions ([6ce5813](https://github.com/h-enk/doks/commit/6ce5813543417f2328846a78b971201d7611781d))
|
||||
|
||||
### [0.1.1](https://github.com/h-enk/doks/compare/v0.1.0...v0.1.1) (2020-11-10)
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update content ([c4c83eb](https://github.com/h-enk/doks/commit/c4c83eb9b68674553c6a7e988249a808d75250b4))
|
||||
* update reasons ([1cec423](https://github.com/h-enk/doks/commit/1cec4237b395ff306b765d47b29b8410c2884921))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump eslint ([d794dab](https://github.com/h-enk/doks/commit/d794dabbe389b0f616ccfca564607f9be4670e0c))
|
||||
* reinstall ([6705f4b](https://github.com/h-enk/doks/commit/6705f4bbc4da4cd967e7165ab3681137014633bb))
|
||||
|
||||
## 0.1.0 (2020-11-06)
|
||||
|
||||
|
||||
### Features
|
||||
|
||||
* add flexsearch ([97d8e2c](https://github.com/h-enk/doks/commit/97d8e2c0e2568f9f9f653dcc243d06aa25482e70))
|
||||
* add standard-version ([6d83ec3](https://github.com/h-enk/doks/commit/6d83ec308e0a9c4db5aa8d2f2c8309ad09673605))
|
||||
* update static assets ([1b16e6b](https://github.com/h-enk/doks/commit/1b16e6bb3d87888b51eff2a8ce7d482cc1a5daf6))
|
||||
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* update badges ([90cea78](https://github.com/h-enk/doks/commit/90cea786c1aec4cc7004fdf9571ad05a739aa96c))
|
||||
* update file path ([73004c3](https://github.com/h-enk/doks/commit/73004c3f8eaee87957ab53bb1f27716acde7a361))
|
||||
|
||||
|
||||
### Documentation
|
||||
|
||||
* update ci badge ([7c4373a](https://github.com/h-enk/doks/commit/7c4373a3a9a29f35f858f27ad4b67ad0379a3da0))
|
||||
* update content ([c6ea4f3](https://github.com/h-enk/doks/commit/c6ea4f3ae54e1c7b890dffb2243c0a81eb96b295))
|
||||
* update content ([c8c403d](https://github.com/h-enk/doks/commit/c8c403dbf9963eeef3c7dca7f6334929bbc5383b))
|
||||
* update gist id ([81d7b1a](https://github.com/h-enk/doks/commit/81d7b1a5df91f238378723018a84d0dd4cd12dd5))
|
||||
* update README ([a1d2e80](https://github.com/h-enk/doks/commit/a1d2e8091a0a2051fdbb3384ad797d8cd5251ce6))
|
||||
* update README ([a9aa6ab](https://github.com/h-enk/doks/commit/a9aa6ab1af1ef5c8619dd3d7c64d96d5a21d956c))
|
||||
* update README ([d0bcf8d](https://github.com/h-enk/doks/commit/d0bcf8d69dfd2d28d9f603945efc37a64b8b529b))
|
||||
* update README ([f6dcccc](https://github.com/h-enk/doks/commit/f6dcccc458a1a4c5cac655976a665fb66b1f7b7a))
|
||||
* update README ([eb4e714](https://github.com/h-enk/doks/commit/eb4e714f4f1fd97117a9fc155df6b6e4be55c0ed))
|
||||
|
||||
|
||||
### Dependencies
|
||||
|
||||
* bump postcss ([12411c3](https://github.com/h-enk/doks/commit/12411c38a98fb362ff348e5c151fcb7813e8691e))
|
||||
* bump postcss-cli ([88b49b5](https://github.com/h-enk/doks/commit/88b49b552849ab807f17ff9bfacfc847d9c2dbd2))
|
||||
* bump versions ([53cf8ba](https://github.com/h-enk/doks/commit/53cf8ba6e260687c4fc5eea0774a7d0e6aa559f8))
|
||||
* update for dependabot PR's ([bad7deb](https://github.com/h-enk/doks/commit/bad7debffa8d8e6b442edf6e51f07f915fdfdd83))
|
76
CODE_OF_CONDUCT.md
Normal file
76
CODE_OF_CONDUCT.md
Normal file
@ -0,0 +1,76 @@
|
||||
# Contributor Covenant Code of Conduct
|
||||
|
||||
## Our Pledge
|
||||
|
||||
In the interest of fostering an open and welcoming environment, we as
|
||||
contributors and maintainers pledge to making participation in our project and
|
||||
our community a harassment-free experience for everyone, regardless of age, body
|
||||
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
||||
level of experience, education, socio-economic status, nationality, personal
|
||||
appearance, race, religion, or sexual identity and orientation.
|
||||
|
||||
## Our Standards
|
||||
|
||||
Examples of behavior that contributes to creating a positive environment
|
||||
include:
|
||||
|
||||
* Using welcoming and inclusive language
|
||||
* Being respectful of differing viewpoints and experiences
|
||||
* Gracefully accepting constructive criticism
|
||||
* Focusing on what is best for the community
|
||||
* Showing empathy towards other community members
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery and unwelcome sexual attention or
|
||||
advances
|
||||
* Trolling, insulting/derogatory comments, and personal or political attacks
|
||||
* Public or private harassment
|
||||
* Publishing others' private information, such as a physical or electronic
|
||||
address, without explicit permission
|
||||
* Other conduct which could reasonably be considered inappropriate in a
|
||||
professional setting
|
||||
|
||||
## Our Responsibilities
|
||||
|
||||
Project maintainers are responsible for clarifying the standards of acceptable
|
||||
behavior and are expected to take appropriate and fair corrective action in
|
||||
response to any instances of unacceptable behavior.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or
|
||||
reject comments, commits, code, wiki edits, issues, and other contributions
|
||||
that are not aligned to this Code of Conduct, or to ban temporarily or
|
||||
permanently any contributor for other behaviors that they deem inappropriate,
|
||||
threatening, offensive, or harmful.
|
||||
|
||||
## Scope
|
||||
|
||||
This Code of Conduct applies both within project spaces and in public spaces
|
||||
when an individual is representing the project or its community. Examples of
|
||||
representing a project or community include using an official project e-mail
|
||||
address, posting via an official social media account, or acting as an appointed
|
||||
representative at an online or offline event. Representation of a project may be
|
||||
further defined and clarified by project maintainers.
|
||||
|
||||
## Enforcement
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
||||
reported by contacting the project team at hello@getdoks.org. All
|
||||
complaints will be reviewed and investigated and will result in a response that
|
||||
is deemed necessary and appropriate to the circumstances. The project team is
|
||||
obligated to maintain confidentiality with regard to the reporter of an incident.
|
||||
Further details of specific enforcement policies may be posted separately.
|
||||
|
||||
Project maintainers who do not follow or enforce the Code of Conduct in good
|
||||
faith may face temporary or permanent repercussions as determined by other
|
||||
members of the project's leadership.
|
||||
|
||||
## Attribution
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
||||
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
||||
|
||||
[homepage]: https://www.contributor-covenant.org
|
||||
|
||||
For answers to common questions about this code of conduct, see
|
||||
https://www.contributor-covenant.org/faq
|
21
LICENSE
Normal file
21
LICENSE
Normal file
@ -0,0 +1,21 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2020 Henk Verlinde
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
113
README.md
Normal file
113
README.md
Normal file
@ -0,0 +1,113 @@
|
||||
<p align="center">
|
||||
<a href="https://getdoks.org/">
|
||||
<img alt="Doks" src="https://doks.netlify.app/doks.svg" width="60">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
<h1 align="center">
|
||||
Doks
|
||||
</h1>
|
||||
|
||||
<h3 align="center">
|
||||
Modern documentation theme
|
||||
</h3>
|
||||
|
||||
<p align="center">
|
||||
Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default.
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://github.com/h-enk/doks/blob/master/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/h-enk/doks?style=flat-square" alt="GitHub">
|
||||
</a>
|
||||
<a href="https://github.com/h-enk/doks/releases">
|
||||
<img src="https://img.shields.io/github/v/release/h-enk/doks?include_prereleases&style=flat-square"alt="GitHub release (latest SemVer including pre-releases)">
|
||||
</a>
|
||||
<a href="https://github.com/h-enk/doks/actions?query=workflow%3A%22Hyas+CI%22">
|
||||
<img src="https://img.shields.io/github/workflow/status/h-enk/doks/Hyas%20CI/master?style=flat-square" alt="GitHub Workflow Status (branch)">
|
||||
</a>
|
||||
<a href="https://app.netlify.com/sites/doks/deploys">
|
||||
<img src="https://img.shields.io/netlify/895a161c-86be-48a2-8c57-a8c5d68cd1a4?style=flat-square" alt="Netlify">
|
||||
</a>
|
||||
</p>
|
||||
|
||||
![Doks — Modern Documentation Theme](https://raw.githubusercontent.com/h-enk/doks/master/images/tn.png)
|
||||
|
||||
## Demo
|
||||
|
||||
- [doks.netlify.app](https://doks.netlify.app/)
|
||||
|
||||
## Quick start
|
||||
|
||||
Get your Doks site in 1 min.
|
||||
|
||||
[![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/h-enk/doks)
|
||||
|
||||
## Why Doks?
|
||||
|
||||
Nine reasons why you should use Doks:
|
||||
|
||||
1. __Security aware__. Get A+ scores on [Mozilla Observatory](https://observatory.mozilla.org/analyze/doks.netlify.app) out of the box. Easily change the default Security Headers to suit your needs.
|
||||
|
||||
2. __Fast by default__. Get 100 scores on [Google Lighthouse](https://googlechrome.github.io/lighthouse/viewer/?gist=7731347bb8ce999eff7428a8e763b637) by default. Doks removes unused css, prefetches links, and lazy loads images.
|
||||
|
||||
3. __SEO-ready__. Use sensible defaults for structured data, open graph, and Twitter cards. Or easily change the SEO settings to your liking.
|
||||
|
||||
4. __Development tools__. Code with confidence. Check styles, scripts, and markdown for errors and fix automatically or manually.
|
||||
|
||||
5. __Bootstrap framework__. Build robust, flexible, and intuitive websites with Bootstrap. Or use any other front-end framework if you prefer.
|
||||
|
||||
6. __Netlify-ready__. Deploy to Netlify with sensible defaults. Easily use Netlify Functions, Netlify Redirects, and Netlify Headers.
|
||||
|
||||
7. __Full text search__. Search your Doks site with FlexSearch. Easily customize index settings and search options to your liking.
|
||||
|
||||
8. __Page layouts__. Build pages with a landing page, blog, or documentation layout. Add custom sections and components to suit your needs.
|
||||
|
||||
9. __Dark mode__. Switch to a low-light UI with the click of a button. Change colors with variables to match your branding.
|
||||
|
||||
## Requirements
|
||||
|
||||
Doks uses npm for dependency management and customized build scripts. Installing npm is pretty simple. Download and install [Node.js](https://nodejs.org/) (it includes npm) for your platform. I recommend installing the current release.
|
||||
|
||||
## Get started
|
||||
|
||||
Have your local Doks site in three steps:
|
||||
|
||||
### 1. Create new Doks project
|
||||
|
||||
```bash
|
||||
git clone https://github.com/h-enk/doks.git my-doks-site
|
||||
```
|
||||
|
||||
### 2. Install npm packages
|
||||
|
||||
```bash
|
||||
npm install
|
||||
```
|
||||
|
||||
### 3. Start local development server
|
||||
|
||||
```bash
|
||||
npm run start
|
||||
```
|
||||
|
||||
## Other commands
|
||||
|
||||
Doks comes with [commands](https://getdoks.org/docs/prologue/commands/) for common tasks.
|
||||
|
||||
## Documentation
|
||||
|
||||
- [Netlify](https://docs.netlify.com/)
|
||||
- [Hugo](https://gohugo.io/documentation/)
|
||||
- [Doks](https://getdoks.org/)
|
||||
|
||||
## Communities
|
||||
|
||||
- [Netlify Community](https://community.netlify.com/)
|
||||
- [Hugo Forums](https://discourse.gohugo.io/)
|
||||
- [Doks Discussions](https://github.com/h-enk/doks/discussions)
|
||||
|
||||
## Blog
|
||||
<!--START_SECTION:feed-->
|
||||
* [Say hello to Doks 👋](https://getdoks.org/blog/say-hello-to-doks/)
|
||||
<!--END_SECTION:feed-->
|
13
archetypes/blog.md
Normal file
13
archetypes/blog.md
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
weight: 50
|
||||
images: ["{{ .Name | urlize }}.jpg"]
|
||||
contributors: []
|
||||
---
|
||||
|
||||
{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" class="wide" >}}
|
8
archetypes/default.md
Normal file
8
archetypes/default.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
images: []
|
||||
---
|
16
archetypes/docs.md
Normal file
16
archetypes/docs.md
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
title: "{{ replace .Name "-" " " | title }}"
|
||||
description: ""
|
||||
lead: ""
|
||||
date: {{ .Date }}
|
||||
lastmod: {{ .Date }}
|
||||
draft: true
|
||||
images: []
|
||||
menu:
|
||||
docs:
|
||||
parent: ""
|
||||
weight: 999
|
||||
toc: true
|
||||
---
|
||||
|
||||
{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" >}}
|
0
assets/fonts/.gitkeep
Normal file
0
assets/fonts/.gitkeep
Normal file
0
assets/images/.gitkeep
Normal file
0
assets/images/.gitkeep
Normal file
31
assets/js/app.js
Normal file
31
assets/js/app.js
Normal file
@ -0,0 +1,31 @@
|
||||
document.getElementById('mode').addEventListener('click', () => {
|
||||
|
||||
document.body.classList.toggle('dark');
|
||||
localStorage.setItem('theme', document.body.classList.contains('dark') ? 'dark' : 'light');
|
||||
|
||||
});
|
||||
|
||||
if (localStorage.getItem('theme') === 'dark') {
|
||||
|
||||
document.body.classList.add('dark');
|
||||
|
||||
}
|
||||
|
||||
/* eslint-disable */
|
||||
var clipboard = new ClipboardJS('.btn-clipboard');
|
||||
|
||||
clipboard.on('success', function(e) {
|
||||
/*
|
||||
console.info('Action:', e.action);
|
||||
console.info('Text:', e.text);
|
||||
console.info('Trigger:', e.trigger);
|
||||
*/
|
||||
|
||||
e.clearSelection();
|
||||
});
|
||||
|
||||
clipboard.on('error', function(e) {
|
||||
console.error('Action:', e.action);
|
||||
console.error('Trigger:', e.trigger);
|
||||
});
|
||||
/* eslint-enable */
|
147
assets/js/index.js
Normal file
147
assets/js/index.js
Normal file
@ -0,0 +1,147 @@
|
||||
var suggestions = document.getElementById('suggestions');
|
||||
var userinput = document.getElementById('userinput');
|
||||
|
||||
document.addEventListener('keydown', inputFocus);
|
||||
|
||||
function inputFocus(e) {
|
||||
|
||||
if (e.keyCode === 191 ) {
|
||||
e.preventDefault();
|
||||
userinput.focus();
|
||||
}
|
||||
|
||||
if (e.keyCode === 27 ) {
|
||||
userinput.blur();
|
||||
suggestions.classList.add('d-none');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
document.addEventListener('click', function(event) {
|
||||
|
||||
var isClickInsideElement = suggestions.contains(event.target);
|
||||
|
||||
if (!isClickInsideElement) {
|
||||
suggestions.classList.add('d-none');
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
/*
|
||||
Source:
|
||||
- https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3
|
||||
*/
|
||||
|
||||
document.addEventListener('keydown',suggestionFocus);
|
||||
|
||||
function suggestionFocus(e){
|
||||
|
||||
const focusableSuggestions= suggestions.querySelectorAll('a');
|
||||
const focusable= [...focusableSuggestions];
|
||||
const index = focusable.indexOf(document.activeElement);
|
||||
|
||||
let nextIndex = 0;
|
||||
|
||||
if (e.keyCode === 38) {
|
||||
e.preventDefault();
|
||||
nextIndex= index > 0 ? index-1 : 0;
|
||||
focusableSuggestions[nextIndex].focus();
|
||||
}
|
||||
else if (e.keyCode === 40) {
|
||||
e.preventDefault();
|
||||
nextIndex= index+1 < focusable.length ? index+1 : index;
|
||||
focusableSuggestions[nextIndex].focus();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Source:
|
||||
- https://github.com/nextapps-de/flexsearch#index-documents-field-search
|
||||
- https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html
|
||||
*/
|
||||
|
||||
(function(){
|
||||
|
||||
var index = new FlexSearch({
|
||||
preset: 'score',
|
||||
cache: true,
|
||||
doc: {
|
||||
id: 'id',
|
||||
field: [
|
||||
'title',
|
||||
'description',
|
||||
'content',
|
||||
],
|
||||
store: [
|
||||
'href',
|
||||
'title',
|
||||
'description',
|
||||
],
|
||||
},
|
||||
});
|
||||
|
||||
var docs = [
|
||||
{{ range $index, $page := (where .Site.Pages "Section" "docs") -}}
|
||||
{
|
||||
id: {{ $index }},
|
||||
href: "{{ .Permalink | absURL }}",
|
||||
title: {{ .Title | jsonify }},
|
||||
description: {{ .Params.description | jsonify }},
|
||||
content: {{ .Content | jsonify }}
|
||||
},
|
||||
{{ end -}}
|
||||
];
|
||||
|
||||
index.add(docs);
|
||||
|
||||
userinput.addEventListener('input', show_results, true);
|
||||
suggestions.addEventListener('click', accept_suggestion, true);
|
||||
|
||||
function show_results(){
|
||||
var value = this.value;
|
||||
var results = index.search(value, 5);
|
||||
var entry, childs = suggestions.childNodes;
|
||||
var i = 0, len = results.length;
|
||||
|
||||
suggestions.classList.remove('d-none');
|
||||
|
||||
results.forEach(function(page) {
|
||||
|
||||
entry = document.createElement('div');
|
||||
|
||||
entry.innerHTML = '<a href><span></span><span></span></a>';
|
||||
|
||||
a = entry.querySelector('a'),
|
||||
t = entry.querySelector('span:first-child'),
|
||||
d = entry.querySelector('span:nth-child(2)');
|
||||
|
||||
a.href = page.href;
|
||||
t.textContent = page.title;
|
||||
d.textContent = page.description;
|
||||
|
||||
console.log(page.description);
|
||||
|
||||
suggestions.appendChild(entry);
|
||||
|
||||
});
|
||||
|
||||
while(childs.length > len){
|
||||
|
||||
suggestions.removeChild(childs[i])
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function accept_suggestion(){
|
||||
|
||||
while(suggestions.lastChild){
|
||||
|
||||
suggestions.removeChild(suggestions.lastChild);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}());
|
0
assets/js/vendor/.gitkeep
vendored
Normal file
0
assets/js/vendor/.gitkeep
vendored
Normal file
0
assets/lambda/.gitignore
vendored
Normal file
0
assets/lambda/.gitignore
vendored
Normal file
11
assets/lambda/hi-from-lambda.js
Normal file
11
assets/lambda/hi-from-lambda.js
Normal file
@ -0,0 +1,11 @@
|
||||
exports.handler = (event, context, callback) => {
|
||||
callback (null, {
|
||||
statusCode: 200,
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
},
|
||||
body: JSON.stringify({
|
||||
message: 'Hi from Lambda.',
|
||||
}),
|
||||
});
|
||||
}
|
26
assets/scss/app.scss
Normal file
26
assets/scss/app.scss
Normal file
@ -0,0 +1,26 @@
|
||||
/** Import Bootstrap functions */
|
||||
@import "bootstrap/scss/functions";
|
||||
|
||||
/** Import theme variables */
|
||||
@import "common/variables";
|
||||
|
||||
/** Import Bootstrap */
|
||||
@import "bootstrap/scss/bootstrap";
|
||||
|
||||
/** Import theme styles */
|
||||
@import "common/fonts";
|
||||
@import "common/global";
|
||||
@import "common/dark";
|
||||
@import "components/alerts";
|
||||
@import "components/buttons";
|
||||
@import "components/code";
|
||||
// @import "components/syntax";
|
||||
@import "components/comments";
|
||||
@import "components/forms";
|
||||
@import "components/images";
|
||||
@import "components/search";
|
||||
@import "layouts/footer";
|
||||
@import "layouts/header";
|
||||
@import "layouts/pages";
|
||||
@import "layouts/posts";
|
||||
@import "layouts/sidebar";
|
293
assets/scss/common/_dark.scss
Normal file
293
assets/scss/common/_dark.scss
Normal file
@ -0,0 +1,293 @@
|
||||
/** Theme variables */
|
||||
|
||||
// Source: https://material.io/design/color/dark-theme.html
|
||||
|
||||
$body-bg-dark: $gray-900;
|
||||
$body-overlay-dark: darken($body-bg-dark, 2.5%);
|
||||
$border-dark: darken($body-bg-dark, 2.5%);
|
||||
$body-color-dark: $gray-300;
|
||||
$dots-dark: darken($body-color-dark, 50%);
|
||||
|
||||
$link-color-dark: $blue-300;
|
||||
$button-color-dark: $link-color-dark;
|
||||
$focus-color-dark: lighten($link-color-dark, 2.5%);
|
||||
$selection-color-dark: lighten($link-color-dark, 2.5%);
|
||||
|
||||
$navbar-dark-color: $body-color-dark;
|
||||
$navbar-dark-hover-color: $link-color-dark;
|
||||
$navbar-dark-active-color: $link-color-dark;
|
||||
|
||||
/** Theme styles */
|
||||
|
||||
body.dark {
|
||||
background: $body-bg-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark a {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark a.text-body {
|
||||
color: $body-color-dark !important;
|
||||
}
|
||||
|
||||
body.dark .btn-primary {
|
||||
@include button-variant($button-color-dark, $button-color-dark);
|
||||
|
||||
color: $body-bg-dark !important;
|
||||
}
|
||||
|
||||
body.dark .navbar {
|
||||
background: $body-bg-dark;
|
||||
opacity: 0.975;
|
||||
border-bottom: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark.home .navbar {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-brand {
|
||||
color: $navbar-dark-color !important;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link:hover,
|
||||
body.dark .navbar-light .navbar-nav .nav-link:focus {
|
||||
color: $navbar-dark-hover-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .nav-link.disabled {
|
||||
color: $navbar-dark-disabled-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-nav .show > .nav-link,
|
||||
body.dark .navbar-light .navbar-nav .active > .nav-link,
|
||||
body.dark .navbar-light .navbar-nav .nav-link.show,
|
||||
body.dark .navbar-light .navbar-nav .nav-link.active {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .alert-primary a {
|
||||
color: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .alert-warning {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .page-links a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .showcase-meta a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .showcase-meta a:hover,
|
||||
body.dark .showcase-meta a:focus {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-link:hover,
|
||||
body.dark .docs-link.active,
|
||||
body.dark .page-links a:hover {
|
||||
text-decoration: none;
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text a {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .docs-links h3.sidebar-link a,
|
||||
body.dark .page-links h3.sidebar-link a {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar-light .navbar-text a:hover,
|
||||
body.dark .navbar-light .navbar-text a:focus {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link {
|
||||
color: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .content .btn-link {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .content .btn-link:hover {
|
||||
color: $link-color-dark;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link:hover {
|
||||
color: $navbar-dark-hover-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .btn-link:active {
|
||||
color: $navbar-dark-active-color;
|
||||
}
|
||||
|
||||
body.dark .form-control.is-search {
|
||||
background: $body-overlay-dark;
|
||||
|
||||
/*
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right calc(0.375em + 0.1875rem) center;
|
||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||
*/
|
||||
}
|
||||
|
||||
body.dark .navbar-form::after {
|
||||
color: $gray-700;
|
||||
border: 1px solid $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .form-control:focus {
|
||||
box-shadow: 0 0 0 0.2rem $focus-color-dark;
|
||||
}
|
||||
|
||||
body.dark .border-top {
|
||||
border-top: 1px solid $border-dark !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
body.dark .docs-sidebar {
|
||||
order: 0;
|
||||
border-right: 1px solid $border-dark;
|
||||
}
|
||||
}
|
||||
|
||||
body.dark .docs-navigation {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark ::selection {
|
||||
background: $selection-color-dark;
|
||||
}
|
||||
|
||||
body.dark pre {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark code {
|
||||
background: $body-overlay-dark;
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark blockquote {
|
||||
border-left: 3px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .footer {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links,
|
||||
body.dark .docs-toc {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $body-bg-dark $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar,
|
||||
body.dark .docs-toc::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-track,
|
||||
body.dark .docs-toc::-webkit-scrollbar-track {
|
||||
background: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-thumb,
|
||||
body.dark .docs-toc::-webkit-scrollbar-thumb {
|
||||
background: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links:hover,
|
||||
body.dark .docs-toc:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $border-dark $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links:hover::-webkit-scrollbar-thumb,
|
||||
body.dark .docs-toc:hover::-webkit-scrollbar-thumb {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links::-webkit-scrollbar-thumb:hover,
|
||||
body.dark .docs-toc::-webkit-scrollbar-thumb:hover {
|
||||
background: $border-dark;
|
||||
}
|
||||
|
||||
body.dark .docs-links h3:not(:first-child) {
|
||||
border-top: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark a.docs-link {
|
||||
color: $body-color-dark;
|
||||
}
|
||||
|
||||
body.dark .page-links li:not(:first-child) {
|
||||
border-top: 1px dashed $border-dark;
|
||||
}
|
||||
|
||||
body.dark .card {
|
||||
background: $body-bg-dark;
|
||||
border: 1px solid $border-dark;
|
||||
}
|
||||
|
||||
body.dark .card.bg-light {
|
||||
background: $body-overlay-dark !important;
|
||||
}
|
||||
|
||||
body.dark .navbar .menu-icon .navicon {
|
||||
background: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .navbar .menu-icon .navicon::before,
|
||||
body.dark .navbar .menu-icon .navicon::after {
|
||||
background: $navbar-dark-color;
|
||||
}
|
||||
|
||||
body.dark .logo-light {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
body.dark .logo-dark {
|
||||
display: inline-block !important;
|
||||
}
|
||||
|
||||
body.dark .bg-light {
|
||||
background: darken($body-bg-dark, 1.5%) !important;
|
||||
}
|
||||
|
||||
body.dark .bg-dots {
|
||||
background-image: radial-gradient($dots-dark 15%, transparent 15%);
|
||||
}
|
||||
|
||||
body.dark .text-muted {
|
||||
color: darken($body-color-dark, 7.5%) !important;
|
||||
}
|
||||
|
||||
body.dark .alert-primary {
|
||||
background: $link-color-dark;
|
||||
color: $body-bg-dark;
|
||||
}
|
||||
|
||||
body.dark .figure-caption {
|
||||
color: $body-color-dark;
|
||||
}
|
71
assets/scss/common/_fonts.scss
Normal file
71
assets/scss/common/_fonts.scss
Normal file
@ -0,0 +1,71 @@
|
||||
/* jost-regular - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-regular.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-regular.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* jost-500 - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: normal;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-500.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* jost-700 - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-700.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-700.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* jost-italic - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-italic.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* jost-500italic - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: italic;
|
||||
font-weight: 500;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-500italic.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-500italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
||||
|
||||
/* jost-700italic - latin */
|
||||
@font-face {
|
||||
font-family: "Jost";
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
font-display: swap;
|
||||
src:
|
||||
local("Jost"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-700italic.woff2") format("woff2"),
|
||||
url("/fonts/vendor/jost/jost-v4-latin-700italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */
|
||||
}
|
210
assets/scss/common/_global.scss
Normal file
210
assets/scss/common/_global.scss
Normal file
@ -0,0 +1,210 @@
|
||||
.contributors .content,
|
||||
.blog .content,
|
||||
.page .content,
|
||||
.error404 .content,
|
||||
.docs.list .content,
|
||||
.tutorial.list .content,
|
||||
.showcase.list .content {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 3rem;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
margin: 2rem 0 1rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
body {
|
||||
font-size: $font-size-md;
|
||||
padding-top: 4rem !important;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
.h1,
|
||||
.h2,
|
||||
.h3,
|
||||
.h4,
|
||||
.h5,
|
||||
.h6 {
|
||||
margin-bottom: 1.125rem;
|
||||
}
|
||||
}
|
||||
|
||||
.home h1 {
|
||||
/* font-size: calc(1.375rem + 1.5vw); */
|
||||
font-size: calc(1.875rem + 1.5vw);
|
||||
}
|
||||
|
||||
.section {
|
||||
padding-top: 5rem;
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
|
||||
.section-md {
|
||||
padding-top: 3rem;
|
||||
padding-bottom: 3rem;
|
||||
}
|
||||
|
||||
.section-sm {
|
||||
padding-top: 1rem;
|
||||
padding-bottom: 1rem;
|
||||
}
|
||||
|
||||
/*
|
||||
.section svg {
|
||||
display: inline-block;
|
||||
width: 2rem;
|
||||
height: 2rem;
|
||||
vertical-align: text-top;
|
||||
}
|
||||
*/
|
||||
|
||||
body {
|
||||
padding-top: 3.5625rem;
|
||||
}
|
||||
|
||||
.docs-sidebar {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-sidebar {
|
||||
order: 0;
|
||||
border-right: 1px solid $gray-200;
|
||||
}
|
||||
|
||||
@supports ((position:-webkit-sticky) or (position:sticky)) {
|
||||
.docs-sidebar {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 4rem;
|
||||
z-index: 1000;
|
||||
height: calc(100vh - 4rem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
.docs-sidebar {
|
||||
flex: 0 1 320px;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-links {
|
||||
padding-bottom: 5rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
@supports ((position: -webkit-sticky) or (position: sticky)) {
|
||||
.docs-links {
|
||||
max-height: calc(100vh - 4rem);
|
||||
overflow-y: scroll;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-links {
|
||||
display: block;
|
||||
width: auto;
|
||||
margin-right: -1.5rem;
|
||||
padding-bottom: 4rem;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-toc {
|
||||
order: 2;
|
||||
}
|
||||
|
||||
@supports ((position:-webkit-sticky) or (position:sticky)) {
|
||||
.docs-toc {
|
||||
position: -webkit-sticky;
|
||||
position: sticky;
|
||||
top: 4rem;
|
||||
height: calc(100vh - 4rem);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-content {
|
||||
padding-bottom: 3rem;
|
||||
order: 1;
|
||||
}
|
||||
|
||||
.docs-navigation {
|
||||
border-top: 1px solid $gray-200;
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 0;
|
||||
padding-top: 2rem;
|
||||
}
|
||||
|
||||
.docs-navigation a {
|
||||
font-size: $font-size-base * 0.9;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-navigation {
|
||||
margin-bottom: -1rem;
|
||||
}
|
||||
|
||||
.docs-navigation a {
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
}
|
||||
|
||||
#TableOfContents ul {
|
||||
padding-left: 0;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
::selection {
|
||||
background: lighten($primary, 55%);
|
||||
}
|
||||
|
||||
.bg-dots {
|
||||
background-image: radial-gradient($gray-300 15%, transparent 15%);
|
||||
background-position: 0 0;
|
||||
background-size: 1rem 1rem;
|
||||
-webkit-mask: linear-gradient(to top, #fff, transparent);
|
||||
mask: linear-gradient(to top, #fff, transparent);
|
||||
width: 100%;
|
||||
height: 9rem;
|
||||
margin-top: -10rem;
|
||||
z-index: -1;
|
||||
}
|
||||
|
||||
.bg-dots-md {
|
||||
margin-top: -11rem;
|
||||
}
|
||||
|
||||
.bg-dots-lg {
|
||||
margin-top: -12rem;
|
||||
}
|
||||
|
||||
// https://fossheim.io/writing/posts/css-text-gradient/
|
||||
.gradient-text {
|
||||
background-color: $primary;
|
||||
background-image: linear-gradient(90deg, $primary, $blue-300 50%, $pink-500);
|
||||
background-size: 100%;
|
||||
background-repeat: repeat;
|
||||
-webkit-background-clip: text;
|
||||
-moz-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
-moz-text-fill-color: transparent;
|
||||
}
|
130
assets/scss/common/_variables.scss
Normal file
130
assets/scss/common/_variables.scss
Normal file
@ -0,0 +1,130 @@
|
||||
// Color system
|
||||
|
||||
$white: #fff;
|
||||
$gray-100: #f8f9fa;
|
||||
$gray-200: #e9ecef;
|
||||
$gray-300: #dee2e6;
|
||||
$gray-400: #ced4da;
|
||||
$gray-500: #adb5bd;
|
||||
$gray-600: #6c757d;
|
||||
$gray-700: #495057;
|
||||
$gray-800: #343a40;
|
||||
$gray-900: #212529;
|
||||
$black: #000;
|
||||
|
||||
$yellow: #ffe000;
|
||||
$black: #1d2d35;
|
||||
$beige: #fbf7f0;
|
||||
$red: #e55235;
|
||||
$purple: #5d2f86;
|
||||
$brown: #aa9c84;
|
||||
|
||||
$blue-300: #8ed6fb;
|
||||
$pink-500: #d32e9d;
|
||||
|
||||
$primary: $purple;
|
||||
|
||||
/** Bootstrap navbar fix (https://git.io/fADqW) */
|
||||
$navbar-dark-toggler-icon-bg: none;
|
||||
$navbar-light-toggler-icon-bg: none;
|
||||
|
||||
// Options
|
||||
//
|
||||
// Quickly modify global styling by enabling or disabling optional features.
|
||||
|
||||
$enable-responsive-font-sizes: true;
|
||||
|
||||
// Body
|
||||
//
|
||||
// Settings for the `<body>` element.
|
||||
|
||||
$body-bg: $white;
|
||||
$body-color: $black;
|
||||
|
||||
// Grid containers
|
||||
//
|
||||
// Define the maximum width of `.container` for different screen sizes.
|
||||
|
||||
$container-max-widths: (
|
||||
sm: 540px,
|
||||
md: 720px,
|
||||
lg: 960px,
|
||||
xl: 1240px
|
||||
);
|
||||
|
||||
@include _assert-ascending($container-max-widths, "$container-max-widths");
|
||||
|
||||
// Grid columns
|
||||
//
|
||||
// Set the number of columns and specify the width of the gutters.
|
||||
|
||||
$grid-columns: 16;
|
||||
$grid-gutter-width: 48px;
|
||||
$grid-row-columns: 6;
|
||||
|
||||
// Components
|
||||
//
|
||||
// Define common padding and border radius sizes and more.
|
||||
|
||||
$border-color: $gray-200;
|
||||
|
||||
// Typography
|
||||
//
|
||||
// Font, line-height, and color for body text, headings, and more.
|
||||
|
||||
// stylelint-disable value-keyword-case
|
||||
$font-family-sans-serif: "Jost", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
|
||||
$font-family-monospace: sfmono-regular, menlo, monaco, consolas, "Liberation Mono", "Courier New", monospace;
|
||||
$font-family-base: $font-family-sans-serif;
|
||||
// stylelint-enable value-keyword-case
|
||||
|
||||
$font-size-base: 1rem; // Assumes the browser default, typically `16px`
|
||||
$font-size-xl: $font-size-base * 1.375;
|
||||
$font-size-lg: $font-size-base * 1.25;
|
||||
$font-size-md: $font-size-base * 1.125;
|
||||
$font-size-sm: $font-size-base * 0.875;
|
||||
|
||||
$line-height-base: 1.5;
|
||||
|
||||
$headings-font-family: null;
|
||||
$headings-font-weight: 700;
|
||||
|
||||
$lead-font-weight: 400;
|
||||
|
||||
// Spacing
|
||||
//
|
||||
// Control the default styling of most Bootstrap elements by modifying these
|
||||
// variables. Mostly focused on spacing.
|
||||
// You can add more entries to the $spacers map, should you need more variation.
|
||||
|
||||
$spacer: 1rem;
|
||||
|
||||
// Navbar
|
||||
|
||||
$navbar-padding-y: $spacer / 2;
|
||||
$navbar-padding-x: 0;
|
||||
|
||||
$navbar-nav-link-padding-x: 0.5rem;
|
||||
|
||||
$navbar-light-color: $black;
|
||||
$navbar-light-hover-color: $primary;
|
||||
$navbar-light-active-color: $primary;
|
||||
|
||||
// Cards
|
||||
|
||||
$card-border-color: $gray-200;
|
||||
|
||||
// Alerts
|
||||
//
|
||||
// Define alert colors, border radius, and padding.
|
||||
|
||||
$alert-padding-y: 1rem;
|
||||
$alert-padding-x: 1.5rem;
|
||||
$alert-margin-bottom: 0;
|
||||
$alert-border-radius: 0;
|
||||
$alert-link-font-weight: $headings-font-weight;
|
||||
$alert-border-width: 0;
|
||||
|
||||
$alert-bg-level: 0;
|
||||
$alert-border-level: 0;
|
||||
$alert-color-level: 0;
|
63
assets/scss/components/_alerts.scss
Normal file
63
assets/scss/components/_alerts.scss
Normal file
@ -0,0 +1,63 @@
|
||||
.alert {
|
||||
font-family: $font-family-monospace;
|
||||
font-size: $font-size-sm;
|
||||
}
|
||||
|
||||
.alert-icon {
|
||||
margin-right: 0.75rem;
|
||||
}
|
||||
|
||||
.docs .alert {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
|
||||
.alert .alert-link {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
.alert-dark {
|
||||
color: $white;
|
||||
background-color: $black;
|
||||
}
|
||||
|
||||
.alert-dark .alert-link {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.alert-light {
|
||||
color: $black;
|
||||
}
|
||||
|
||||
.alert-warning {
|
||||
background: $beige;
|
||||
color: $black;
|
||||
}
|
||||
|
||||
/*
|
||||
.alert-light {
|
||||
color: #215888;
|
||||
background: linear-gradient(-45deg, rgb(212, 245, 255), rgb(234, 250, 255), rgb(234, 250, 255), #d3f6ef);
|
||||
}
|
||||
|
||||
.alert-light .alert-link {
|
||||
color: #215888;
|
||||
}
|
||||
*/
|
||||
|
||||
.alert-white {
|
||||
background-color: rgba(255, 255, 255, 0.95);
|
||||
}
|
||||
|
||||
.alert-primary {
|
||||
color: $white;
|
||||
background-color: $primary;
|
||||
}
|
||||
|
||||
.alert-primary .alert-link {
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.alert .alert-link:hover,
|
||||
.alert .alert-link:focus {
|
||||
text-decoration: none;
|
||||
}
|
74
assets/scss/components/_buttons.scss
Normal file
74
assets/scss/components/_buttons.scss
Normal file
@ -0,0 +1,74 @@
|
||||
.navbar .btn-link {
|
||||
color: $navbar-light-color;
|
||||
padding: 0.4375rem 0;
|
||||
}
|
||||
|
||||
#mode {
|
||||
margin-right: 1.25rem;
|
||||
}
|
||||
|
||||
.btn-link:focus {
|
||||
outline: 0;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
#navigation {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
#mode {
|
||||
margin-right: 0.5rem;
|
||||
}
|
||||
|
||||
.navbar .btn-link {
|
||||
padding: 0.5625em 0.25rem 0.5rem 0.125rem;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar .btn-link:hover {
|
||||
color: $navbar-light-hover-color;
|
||||
}
|
||||
|
||||
.navbar .btn-link:active {
|
||||
color: $navbar-light-active-color;
|
||||
}
|
||||
|
||||
body .toggle-dark {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body .toggle-light {
|
||||
display: none;
|
||||
}
|
||||
|
||||
body.dark .toggle-light {
|
||||
display: block;
|
||||
}
|
||||
|
||||
body.dark .toggle-dark {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.btn-clipboard {
|
||||
display: none;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.btn-clipboard {
|
||||
display: block;
|
||||
margin: 2.0625rem 0.25rem -4rem auto;
|
||||
}
|
||||
}
|
||||
|
||||
.copy-status::after,
|
||||
.copy-status:hover::after {
|
||||
content: "Copy";
|
||||
display: block;
|
||||
}
|
||||
|
||||
.copy-status:focus::after,
|
||||
.copy-status:active::after {
|
||||
content: "Copied";
|
||||
display: block;
|
||||
}
|
43
assets/scss/components/_code.scss
Normal file
43
assets/scss/components/_code.scss
Normal file
@ -0,0 +1,43 @@
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
font-family: $font-family-monospace;
|
||||
font-size: $font-size-sm;
|
||||
border-radius: $border-radius;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: $beige;
|
||||
color: $black;
|
||||
line-height: $line-height-lg;
|
||||
margin: 2rem 0;
|
||||
overflow: auto;
|
||||
padding: 1.25rem 1.5rem;
|
||||
tab-size: 4;
|
||||
}
|
||||
|
||||
code {
|
||||
background: $beige;
|
||||
color: $black;
|
||||
padding: 0.25rem 0.5rem;
|
||||
}
|
||||
|
||||
pre code {
|
||||
background: none;
|
||||
font-size: inherit;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(xs) {
|
||||
pre {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
|
||||
pre,
|
||||
code,
|
||||
kbd,
|
||||
samp {
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
30
assets/scss/components/_comments.scss
Normal file
30
assets/scss/components/_comments.scss
Normal file
@ -0,0 +1,30 @@
|
||||
.comment-list {
|
||||
@extend .list-unstyled;
|
||||
}
|
||||
|
||||
.comment-list ol {
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
.comment-form p {
|
||||
@extend .form-group;
|
||||
}
|
||||
|
||||
.comment-form input[type="text"],
|
||||
.comment-form input[type="email"],
|
||||
.comment-form input[type="url"],
|
||||
.comment-form textarea {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.comment-form input[type="submit"] {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
margin-bottom: 1rem;
|
||||
font-size: 1.25rem;
|
||||
border-left: 3px solid $gray-300;
|
||||
padding-left: 1rem;
|
||||
}
|
19
assets/scss/components/_forms.scss
Normal file
19
assets/scss/components/_forms.scss
Normal file
@ -0,0 +1,19 @@
|
||||
/** Search form */
|
||||
.search-form {
|
||||
@extend .form-inline;
|
||||
}
|
||||
|
||||
.search-form label {
|
||||
@extend .form-group;
|
||||
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.search-form .search-field {
|
||||
@extend .form-control;
|
||||
}
|
||||
|
||||
.search-form .search-submit {
|
||||
@extend .btn;
|
||||
@extend .btn-secondary;
|
||||
}
|
48
assets/scss/components/_images.scss
Normal file
48
assets/scss/components/_images.scss
Normal file
@ -0,0 +1,48 @@
|
||||
figure {
|
||||
margin: 2rem 0;
|
||||
}
|
||||
|
||||
.figure-caption {
|
||||
margin: 0.25rem 0 0.75rem;
|
||||
}
|
||||
|
||||
figure.wide {
|
||||
margin: 2rem -1.5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 1.5rem 0.75rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
figure.wide {
|
||||
margin: 2rem -2.5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 2.5rem 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
figure.wide {
|
||||
margin: 2rem -5rem;
|
||||
}
|
||||
|
||||
figure.wide .figure-caption {
|
||||
margin: 0.25rem 5rem 0.75rem;
|
||||
}
|
||||
}
|
||||
|
||||
.blur-up {
|
||||
filter: blur(5px);
|
||||
}
|
||||
|
||||
.blur-up.lazyloaded {
|
||||
filter: unset;
|
||||
}
|
||||
|
||||
.img-simple {
|
||||
margin-top: 0.375rem;
|
||||
margin-bottom: 1.25rem;
|
||||
}
|
75
assets/scss/components/_search.scss
Normal file
75
assets/scss/components/_search.scss
Normal file
@ -0,0 +1,75 @@
|
||||
.navbar-form {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#suggestions {
|
||||
position: absolute;
|
||||
right: 0;
|
||||
margin-top: 0.5rem;
|
||||
width: calc(100vw - 3rem);
|
||||
}
|
||||
|
||||
#suggestions a {
|
||||
display: block;
|
||||
text-decoration: none;
|
||||
padding: 0.75rem;
|
||||
margin: 0 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions a:focus {
|
||||
background: $gray-100;
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
#suggestions div:not(:first-child) {
|
||||
border-top: 1px dashed $gray-200;
|
||||
}
|
||||
|
||||
#suggestions div:first-child {
|
||||
margin-top: 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions div:last-child {
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
#suggestions a:hover {
|
||||
background: $gray-100;
|
||||
}
|
||||
|
||||
#suggestions span {
|
||||
display: flex;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
#suggestions span:first-child {
|
||||
font-weight: $headings-font-weight;
|
||||
color: $black;
|
||||
}
|
||||
|
||||
#suggestions span:nth-child(2) {
|
||||
color: $gray-700;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(sm) {
|
||||
#suggestions {
|
||||
width: 30rem;
|
||||
}
|
||||
|
||||
#suggestions a {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#suggestions span:first-child {
|
||||
width: 9rem;
|
||||
padding-right: 1rem;
|
||||
border-right: 1px solid $gray-200;
|
||||
display: inline-block;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
#suggestions span:nth-child(2) {
|
||||
width: 19rem;
|
||||
padding-left: 1rem;
|
||||
}
|
||||
}
|
131
assets/scss/components/_syntax.scss
Normal file
131
assets/scss/components/_syntax.scss
Normal file
@ -0,0 +1,131 @@
|
||||
/*!
|
||||
* GitHub Light v0.5.0
|
||||
* Copyright (c) 2012 - 2017 GitHub, Inc.
|
||||
* Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE)
|
||||
*/
|
||||
|
||||
.c1,
|
||||
.c /* comment, punctuation.definition.comment, string.comment */ {
|
||||
color: #6a737d;
|
||||
}
|
||||
|
||||
.v /* variable */,
|
||||
.smw /* sublimelinter.mark.warning */ {
|
||||
color: #e36209;
|
||||
}
|
||||
|
||||
// .c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */,
|
||||
.s .v /* string variable */ {
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.e /* entity */,
|
||||
.en /* entity.name */ {
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */,
|
||||
.s .s1 /* string source */ {
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.ent /* entity.name.tag, markup.quote */ {
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.k /* keyword, storage, storage.type */ {
|
||||
color: #d73a49;
|
||||
}
|
||||
|
||||
.s /* string */,
|
||||
.pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */,
|
||||
.s .pse .s1 /* string punctuation.section.embedded source */,
|
||||
.sr /* string.regexp */,
|
||||
.sr .cce /* string.regexp constant.character.escape */,
|
||||
.sr .sre /* string.regexp source.ruby.embedded */,
|
||||
.sr .sra /* string.regexp string.regexp.arbitrary-repitition */ {
|
||||
color: #032f62;
|
||||
}
|
||||
|
||||
.bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ {
|
||||
color: #b31d28;
|
||||
}
|
||||
|
||||
.ii /* invalid.illegal */ {
|
||||
color: #fafbfc;
|
||||
background-color: #b31d28;
|
||||
}
|
||||
|
||||
.c2 /* carriage-return */ {
|
||||
color: #fafbfc;
|
||||
background-color: #d73a49;
|
||||
}
|
||||
|
||||
.c2::before /* carriage-return */ {
|
||||
content: "^M";
|
||||
}
|
||||
|
||||
.sr .cce /* string.regexp constant.character.escape */ {
|
||||
font-weight: bold;
|
||||
color: #22863a;
|
||||
}
|
||||
|
||||
.ml /* markup.list */ {
|
||||
color: #735c0f;
|
||||
}
|
||||
|
||||
.mh /* markup.heading */,
|
||||
.mh .en /* markup.heading entity.name */,
|
||||
.ms /* meta.separator */ {
|
||||
font-weight: bold;
|
||||
color: #005cc5;
|
||||
}
|
||||
|
||||
.mi /* markup.italic */ {
|
||||
font-style: italic;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.mb /* markup.bold */ {
|
||||
font-weight: bold;
|
||||
color: #24292e;
|
||||
}
|
||||
|
||||
.md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ {
|
||||
color: #b31d28;
|
||||
background-color: #ffeef0;
|
||||
}
|
||||
|
||||
.mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ {
|
||||
color: #22863a;
|
||||
background-color: #f0fff4;
|
||||
}
|
||||
|
||||
.mc /* markup.changed, punctuation.definition.changed */ {
|
||||
color: #e36209;
|
||||
background-color: #ffebda;
|
||||
}
|
||||
|
||||
.mi2 /* markup.ignored, markup.untracked */ {
|
||||
color: #f6f8fa;
|
||||
background-color: #005cc5;
|
||||
}
|
||||
|
||||
.mdr /* meta.diff.range */ {
|
||||
font-weight: bold;
|
||||
color: #6f42c1;
|
||||
}
|
||||
|
||||
.ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ {
|
||||
color: #586069;
|
||||
}
|
||||
|
||||
.sg /* sublimelinter.gutter-mark */ {
|
||||
color: #959da5;
|
||||
}
|
||||
|
||||
.corl /* constant.other.reference.link, string.other.link */ {
|
||||
text-decoration: underline;
|
||||
color: #032f62;
|
||||
}
|
||||
|
20
assets/scss/layouts/_footer.scss
Normal file
20
assets/scss/layouts/_footer.scss
Normal file
@ -0,0 +1,20 @@
|
||||
.footer {
|
||||
border-top: 1px solid $gray-200;
|
||||
padding-top: 1.125rem;
|
||||
padding-bottom: 1.125rem;
|
||||
}
|
||||
|
||||
.footer ul {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.footer li {
|
||||
font-size: $font-size-sm;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.footer li {
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
}
|
264
assets/scss/layouts/_header.scss
Normal file
264
assets/scss/layouts/_header.scss
Normal file
@ -0,0 +1,264 @@
|
||||
.banner .nav li {
|
||||
@extend .nav-item;
|
||||
}
|
||||
|
||||
.banner .nav a {
|
||||
@extend .nav-link;
|
||||
}
|
||||
|
||||
.navbar-text {
|
||||
margin-left: 1rem;
|
||||
}
|
||||
|
||||
.navbar-brand {
|
||||
font-weight: $headings-font-weight;
|
||||
}
|
||||
|
||||
.navbar-light .navbar-brand,
|
||||
.navbar-light .navbar-brand:hover,
|
||||
.navbar-light .navbar-brand:active {
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar-brand {
|
||||
font-size: $font-size-xl;
|
||||
}
|
||||
|
||||
.navbar-text {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.navbar-nav {
|
||||
flex-direction: row;
|
||||
}
|
||||
|
||||
.nav-item {
|
||||
margin-left: 1.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.nav-item {
|
||||
margin-left: 0.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.nav-item:first-child {
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(md) {
|
||||
.navbar .container {
|
||||
padding-left: 1.5rem;
|
||||
padding-right: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
.break {
|
||||
flex-basis: 100%;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.navbar {
|
||||
background-color: rgba(255, 255, 255, 0.95);
|
||||
border-bottom: 1px solid $gray-200;
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.header-bar {
|
||||
border-top: 4px solid;
|
||||
border-image-source: linear-gradient(90deg, $primary, #8ed6fb 50%, #d32e9d);
|
||||
border-image-slice: 1;
|
||||
}
|
||||
|
||||
.home .navbar {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
.navbar-form {
|
||||
position: relative;
|
||||
margin-top: 0.25rem;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(md) {
|
||||
.navbar-brand {
|
||||
margin-right: 1rem !important;
|
||||
}
|
||||
|
||||
.main-nav .nav-item:first-child .nav-link,
|
||||
.social-nav .nav-item:first-child .nav-link {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
.main-nav .nav-item:last-child .nav-link,
|
||||
.social-nav .nav-item:last-child .nav-link {
|
||||
padding-right: 0;
|
||||
}
|
||||
|
||||
.navbar-form {
|
||||
margin-top: 0;
|
||||
margin-left: 6rem;
|
||||
margin-right: 1.5rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.navbar-form {
|
||||
margin-left: 15rem;
|
||||
}
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(xl) {
|
||||
.navbar-form {
|
||||
margin-left: 30rem;
|
||||
}
|
||||
}
|
||||
|
||||
.form-control.is-search {
|
||||
/*
|
||||
padding-right: calc(1.5em + 0.75rem);
|
||||
*/
|
||||
padding-right: 2.5rem;
|
||||
background: $gray-100;
|
||||
border: 0;
|
||||
|
||||
/*
|
||||
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E");
|
||||
background-repeat: no-repeat;
|
||||
background-position: right calc(0.375em + 0.1875rem) center;
|
||||
background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem);
|
||||
*/
|
||||
}
|
||||
|
||||
.navbar-form::after {
|
||||
position: absolute;
|
||||
top: 0.4625rem;
|
||||
right: 0.5375rem;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
height: 1.5rem;
|
||||
padding-right: 0.4375rem;
|
||||
padding-left: 0.4375rem;
|
||||
font-size: $font-size-base * 0.75;
|
||||
color: $gray-700;
|
||||
content: "/";
|
||||
border: 1px solid $gray-300;
|
||||
border-radius: 0.25rem;
|
||||
}
|
||||
|
||||
/*! purgecss start ignore */
|
||||
.algolia-autocomplete {
|
||||
display: flex !important;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .ds-dropdown-menu {
|
||||
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important;
|
||||
}
|
||||
|
||||
@include media-breakpoint-down(sm) {
|
||||
.algolia-autocomplete .ds-dropdown-menu {
|
||||
max-width: 512px !important;
|
||||
min-width: 312px !important;
|
||||
width: auto !important;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column::after {
|
||||
content: "|";
|
||||
margin-right: 0.25rem;
|
||||
}
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion--title {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-suggestion--highlight {
|
||||
padding: 0 0.05em;
|
||||
}
|
||||
|
||||
.algolia-autocomplete .algolia-docsearch-footer {
|
||||
margin-top: 1rem;
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.5rem;
|
||||
}
|
||||
|
||||
/*! purgecss end ignore */
|
||||
|
||||
/*
|
||||
* Source: https://medium.com/creative-technology-concepts-code/responsive-mobile-dropdown-navigation-using-css-only-7218e4498a99
|
||||
*/
|
||||
|
||||
/* Style the menu icon for the dropdown */
|
||||
|
||||
.navbar .menu-icon {
|
||||
cursor: pointer;
|
||||
|
||||
/* display: inline-block; */
|
||||
|
||||
/* float: right; */
|
||||
padding: 1.125rem 0.625rem;
|
||||
margin: 0 0 0 -0.625rem;
|
||||
|
||||
/* position: relative; */
|
||||
user-select: none;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon {
|
||||
background: $navbar-light-color;
|
||||
display: block;
|
||||
height: 2px;
|
||||
position: relative;
|
||||
transition: background 0.2s ease-out;
|
||||
width: 18px;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::before,
|
||||
.navbar .menu-icon .navicon::after {
|
||||
background: $navbar-light-color;
|
||||
content: "";
|
||||
display: block;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
transition: all 0.2s ease-out;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::before {
|
||||
top: 5px;
|
||||
}
|
||||
|
||||
.navbar .menu-icon .navicon::after {
|
||||
top: -5px;
|
||||
}
|
||||
|
||||
/* Add the icon and menu animations when the checkbox is clicked */
|
||||
|
||||
.navbar .menu-btn {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .navbar-collapse {
|
||||
display: block;
|
||||
max-height: 100vh;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon::before {
|
||||
transform: rotate(-45deg);
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon .navicon::after {
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
|
||||
.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::before,
|
||||
.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::after {
|
||||
top: 0;
|
||||
}
|
40
assets/scss/layouts/_pages.scss
Normal file
40
assets/scss/layouts/_pages.scss
Normal file
@ -0,0 +1,40 @@
|
||||
.docs-content > h2[id]::before,
|
||||
.docs-content > h3[id]::before,
|
||||
.docs-content > h4[id]::before {
|
||||
display: block;
|
||||
height: 6rem;
|
||||
margin-top: -6rem;
|
||||
content: "";
|
||||
}
|
||||
|
||||
.anchor {
|
||||
visibility: hidden;
|
||||
padding-left: 0.5rem;
|
||||
}
|
||||
|
||||
h1:hover a,
|
||||
h2:hover a,
|
||||
h3:hover a,
|
||||
h4:hover a {
|
||||
visibility: visible;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.card-list {
|
||||
margin-top: 2.25rem;
|
||||
}
|
||||
|
||||
.edit-page {
|
||||
margin-top: 3rem;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
.edit-page svg {
|
||||
margin-right: 0.5rem;
|
||||
margin-bottom: 0.25rem;
|
||||
}
|
||||
|
||||
p.meta {
|
||||
margin-top: 0.5rem;
|
||||
font-size: $font-size-base;
|
||||
}
|
28
assets/scss/layouts/_posts.scss
Normal file
28
assets/scss/layouts/_posts.scss
Normal file
@ -0,0 +1,28 @@
|
||||
.home .card,
|
||||
.contributors.list .card,
|
||||
.blog.list .card {
|
||||
margin-top: 2rem;
|
||||
margin-bottom: 2rem;
|
||||
transition: transform 0.3s;
|
||||
}
|
||||
|
||||
.home .card:hover,
|
||||
.contributors.list .card:hover,
|
||||
.blog.list .card:hover {
|
||||
transform: scale(1.025);
|
||||
}
|
||||
|
||||
.home .card-body,
|
||||
.contributors.list .card-body,
|
||||
.blog.list .card-body {
|
||||
padding: 0 2rem 1rem;
|
||||
}
|
||||
|
||||
.blog-header {
|
||||
text-align: center;
|
||||
margin-bottom: 2rem;
|
||||
}
|
||||
|
||||
.blog-footer {
|
||||
text-align: center;
|
||||
}
|
110
assets/scss/layouts/_sidebar.scss
Normal file
110
assets/scss/layouts/_sidebar.scss
Normal file
@ -0,0 +1,110 @@
|
||||
.docs-links,
|
||||
.docs-toc {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $white $white;
|
||||
}
|
||||
|
||||
.docs-links::-webkit-scrollbar,
|
||||
.docs-toc::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
}
|
||||
|
||||
.docs-links::-webkit-scrollbar-track,
|
||||
.docs-toc::-webkit-scrollbar-track {
|
||||
background: $white;
|
||||
}
|
||||
|
||||
.docs-links::-webkit-scrollbar-thumb,
|
||||
.docs-toc::-webkit-scrollbar-thumb {
|
||||
background: $white;
|
||||
}
|
||||
|
||||
.docs-links:hover,
|
||||
.docs-toc:hover {
|
||||
scrollbar-width: thin;
|
||||
scrollbar-color: $gray-200 $white;
|
||||
}
|
||||
|
||||
.docs-links:hover::-webkit-scrollbar-thumb,
|
||||
.docs-toc:hover::-webkit-scrollbar-thumb {
|
||||
background: $gray-200;
|
||||
}
|
||||
|
||||
.docs-links::-webkit-scrollbar-thumb:hover,
|
||||
.docs-toc::-webkit-scrollbar-thumb:hover {
|
||||
background: $gray-200;
|
||||
}
|
||||
|
||||
.docs-links h3,
|
||||
.page-links h3 {
|
||||
text-transform: uppercase;
|
||||
font-size: $font-size-base;
|
||||
margin: 1.25rem 0 0.5rem 0;
|
||||
padding: 1.5rem 0 0 0;
|
||||
}
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
.docs-links h3,
|
||||
.page-links h3 {
|
||||
margin: 1.125rem 1.5rem 0.75rem 0;
|
||||
padding: 1.375rem 0 0 0;
|
||||
}
|
||||
}
|
||||
|
||||
.docs-links h3:not(:first-child) {
|
||||
border-top: 1px solid $gray-200;
|
||||
}
|
||||
|
||||
a.docs-link {
|
||||
color: $body-color;
|
||||
display: block;
|
||||
padding: 0.125rem 0;
|
||||
font-size: $font-size-base;
|
||||
}
|
||||
|
||||
.page-links li {
|
||||
margin-top: 0.375rem;
|
||||
padding-top: 0.375rem;
|
||||
}
|
||||
|
||||
.page-links li ul li {
|
||||
border-top: none;
|
||||
padding-left: 1rem;
|
||||
margin-top: 0.125rem;
|
||||
padding-top: 0.125rem;
|
||||
}
|
||||
|
||||
.page-links li:not(:first-child) {
|
||||
border-top: 1px dashed $gray-200;
|
||||
}
|
||||
|
||||
.page-links a {
|
||||
color: $body-color;
|
||||
display: block;
|
||||
padding: 0.125rem 0;
|
||||
font-size: $font-size-base * 0.9375;
|
||||
}
|
||||
|
||||
.docs-link:hover,
|
||||
.docs-link.active,
|
||||
.page-links a:hover {
|
||||
text-decoration: none;
|
||||
color: $link-color;
|
||||
}
|
||||
|
||||
.docs-links h3.sidebar-link,
|
||||
.page-links h3.sidebar-link {
|
||||
text-transform: none;
|
||||
font-size: $font-size-md;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.docs-links h3.sidebar-link a,
|
||||
.page-links h3.sidebar-link a {
|
||||
color: $body-color;
|
||||
}
|
||||
|
||||
.docs-links h3.sidebar-link a:hover,
|
||||
.page-links h3.sidebar-link a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
0
assets/scss/vendor/.gitkeep
vendored
Normal file
0
assets/scss/vendor/.gitkeep
vendored
Normal file
17
babel.config.js
Normal file
17
babel.config.js
Normal file
@ -0,0 +1,17 @@
|
||||
module.exports = {
|
||||
presets: [
|
||||
[
|
||||
'@babel/preset-env',
|
||||
{
|
||||
targets: {
|
||||
browsers: [
|
||||
// Best practice: https://github.com/babel/babel/issues/7789
|
||||
'>=1%',
|
||||
'not ie 11',
|
||||
'not op_mini all'
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
]
|
||||
};
|
93
config/_default/config.toml
Normal file
93
config/_default/config.toml
Normal file
@ -0,0 +1,93 @@
|
||||
baseurl = "/"
|
||||
disableAliases = true
|
||||
disableHugoGeneratorInject = true
|
||||
enableEmoji = true
|
||||
enableGitInfo = false
|
||||
enableRobotsTXT = true
|
||||
languageCode = "en-US"
|
||||
paginate = 7
|
||||
rssLimit = 10
|
||||
|
||||
# add redirects/headers
|
||||
[outputs]
|
||||
home = ["HTML", "RSS", "REDIRECTS", "HEADERS"]
|
||||
section = ["HTML", "RSS", "SITEMAP"]
|
||||
|
||||
# remove .{ext} from text/netlify
|
||||
[mediaTypes."text/netlify"]
|
||||
suffixes = [""]
|
||||
delimiter = ""
|
||||
|
||||
# add output format for netlify _redirects
|
||||
[outputFormats.REDIRECTS]
|
||||
mediaType = "text/netlify"
|
||||
baseName = "_redirects"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
# add output format for netlify _headers
|
||||
[outputFormats.HEADERS]
|
||||
mediaType = "text/netlify"
|
||||
baseName = "_headers"
|
||||
isPlainText = true
|
||||
notAlternative = true
|
||||
|
||||
# add output format for section sitemap.xml
|
||||
[outputFormats.SITEMAP]
|
||||
mediaType = "application/xml"
|
||||
baseName = "sitemap"
|
||||
isHTML = false
|
||||
isPlainText = true
|
||||
noUgly = true
|
||||
rel = "sitemap"
|
||||
|
||||
[markup]
|
||||
[markup.goldmark]
|
||||
[markup.goldmark.extensions]
|
||||
linkify = false
|
||||
[markup.goldmark.renderer]
|
||||
unsafe = true
|
||||
[markup.highlight]
|
||||
codeFences = true
|
||||
guessSyntax = false
|
||||
hl_Lines = ""
|
||||
lineNoStart = 1
|
||||
lineNos = false
|
||||
lineNumbersInTable = true
|
||||
noClasses = false
|
||||
style = "dracula"
|
||||
tabWidth = 4
|
||||
|
||||
[sitemap]
|
||||
changefreq = "weekly"
|
||||
filename = "sitemap.xml"
|
||||
priority = 0.5
|
||||
|
||||
[taxonomies]
|
||||
contributor = "contributors"
|
||||
|
||||
[permalinks]
|
||||
blog = "/blog/:title/"
|
||||
|
||||
[module]
|
||||
[[module.mounts]]
|
||||
source = "assets"
|
||||
target = "assets"
|
||||
[[module.mounts]]
|
||||
source = "static"
|
||||
target = "static"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/lazysizes"
|
||||
target = "assets/js/vendor/lazysizes"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/instant.page"
|
||||
target = "assets/js/vendor/instant.page"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/lazysizes"
|
||||
target = "assets/js/vendor/lazysizes"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/flexsearch"
|
||||
target = "assets/js/vendor/flexsearch"
|
||||
[[module.mounts]]
|
||||
source = "node_modules/clipboard"
|
||||
target = "assets/js/vendor/clipboard"
|
33
config/_default/menus.toml
Normal file
33
config/_default/menus.toml
Normal file
@ -0,0 +1,33 @@
|
||||
[[docs]]
|
||||
name = "Docs"
|
||||
weight = 10
|
||||
identifier = "docs"
|
||||
url = "/docs/"
|
||||
|
||||
[[main]]
|
||||
name = "Home"
|
||||
url = "/"
|
||||
weight = 10
|
||||
|
||||
[[main]]
|
||||
name = "Docs"
|
||||
url = "/docs/"
|
||||
weight = 20
|
||||
|
||||
# [[social]]
|
||||
# name = "Twitter"
|
||||
# pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-twitter\"><path d=\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\"></path></svg>"
|
||||
# url = "https://twitter.com/gethyas"
|
||||
# weight = 10
|
||||
|
||||
[[social]]
|
||||
name = "GitHub"
|
||||
pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-github\"><path d=\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\"></path></svg>"
|
||||
url = "https://github.com/h-enk/doks"
|
||||
post = "v0.1.0"
|
||||
weight = 20
|
||||
|
||||
# [[footer]]
|
||||
# name = "Privacy"
|
||||
# url = "/privacy-policy/"
|
||||
# weight = 10
|
47
config/_default/params.toml
Normal file
47
config/_default/params.toml
Normal file
@ -0,0 +1,47 @@
|
||||
# Meta Data for SEO
|
||||
|
||||
## Homepage
|
||||
title = "Arsen Dev"
|
||||
titleSeparator = "|"
|
||||
titleAddition = "Home"
|
||||
description = "Doks is a Hugo theme helping you build modern docu`tation websites that are secure, fast, and SEO-ready — by default."
|
||||
|
||||
## Open Graph + Twitter Cards
|
||||
images = ["doks.png"]
|
||||
twitterSite = "henkverlinde"
|
||||
twitterCreator = "henkverlinde"
|
||||
facebookAuthor = "verlinde.henk"
|
||||
facebookPublisher = "verlinde.henk"
|
||||
ogLocale = "en_US"
|
||||
|
||||
## JSON-LD
|
||||
schemaType = "Organization"
|
||||
schemaLogo = "logo-doks.png"
|
||||
schemaTwitter = "https://twitter.com/henkverlinde"
|
||||
schemaLinkedIn = "https://www.linkedin.com/in/henkverlinde/"
|
||||
schemaGitHub = "https://github.com/h-enk"
|
||||
schemaSection = "blog"
|
||||
|
||||
## Sitelinks Search Box
|
||||
siteLinksSearchBox = false
|
||||
|
||||
## Chrome Browser
|
||||
themeColor = "#fff"
|
||||
|
||||
# Images
|
||||
quality = 85
|
||||
bgColor = "#fff"
|
||||
landscapePhotoWidths = [900, 800, 700, 600, 500]
|
||||
portraitPhotoWidths = [800, 700, 600, 500]
|
||||
lqipWidth = "20x"
|
||||
|
||||
# Footer
|
||||
footer = "Copyright © 2021 Arsen Musayelyan"
|
||||
|
||||
# Alert
|
||||
alert = false
|
||||
alertText = ""
|
||||
|
||||
# Edit Page
|
||||
docsRepo = "https://github.com/h-enk/doks"
|
||||
editPage = false
|
23
config/postcss.config.js
Normal file
23
config/postcss.config.js
Normal file
@ -0,0 +1,23 @@
|
||||
const autoprefixer = require('autoprefixer');
|
||||
const purgecss = require('@fullhuman/postcss-purgecss');
|
||||
const whitelister = require('purgecss-whitelister');
|
||||
|
||||
module.exports = {
|
||||
plugins: [
|
||||
autoprefixer(),
|
||||
purgecss({
|
||||
content: [
|
||||
'./layouts/**/*.html',
|
||||
'./content/**/*.md',
|
||||
],
|
||||
safelist: [
|
||||
'lazyloaded',
|
||||
...whitelister([
|
||||
'./assets/scss/components/_code.scss',
|
||||
'./assets/scss/components/_search.scss',
|
||||
'./assets/scss/common/_dark.scss',
|
||||
]),
|
||||
],
|
||||
}),
|
||||
],
|
||||
}
|
0
config/production/.gitkeep
Normal file
0
config/production/.gitkeep
Normal file
0
config/staging/.gitkeep
Normal file
0
config/staging/.gitkeep
Normal file
22
content/_index.md
Normal file
22
content/_index.md
Normal file
@ -0,0 +1,22 @@
|
||||
---
|
||||
title: "Home"
|
||||
draft: false
|
||||
---
|
||||
|
||||
### My Projects
|
||||
---
|
||||
- Pak: A cross-platform wrapper written in go designed to unify package managers. It uses TOML configs to define package managers. Options include commands, shortcuts, root user invocation, root user invocation command, and package manager command.
|
||||
|
||||
{{< button-gitea project="pak" text="Pak" color="green" >}}
|
||||
|
||||
- Opensend: A program made to share files and websites between computers securely and reliably, written in go, using zeroconf for discovery, AES and RSA for encryption, and Tar + Zstandard for compression.
|
||||
|
||||
{{< button-gitea project="opensend" text="Opensend" owner="opensend" color="green" >}}
|
||||
|
||||
- Statusboard: A full-stack web application that tracks website status written in Swift, Swift Crypto, and the Vapor stack. It uses a tabler web UI for the dashboard, a JSON config to define servers to track, and an SQLite database to keep track of log-ins and show private servers. My instance can be found [here](https://status.arsenm.dev)
|
||||
|
||||
{{< button-gitea project="statusboard" text="Statusboard" color="green" >}}
|
||||
|
||||
- Chromebook Linux Audio: A collection of bash scripts to compile and install the required kernel and audio server to enable audio and other chromebook features in a mainline linux distro.
|
||||
|
||||
{{< button-gitlab project="chromebook-linux-audio" text="Chromebook Linux Audio" color="OrangeRed" >}}
|
4
content/docs/_index.md
Normal file
4
content/docs/_index.md
Normal file
@ -0,0 +1,4 @@
|
||||
---
|
||||
title: "Docs"
|
||||
draft: false
|
||||
---
|
8
content/docs/advmake/_index.md
Normal file
8
content/docs/advmake/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "AdvMake Docs"
|
||||
draft: false
|
||||
description: "Documentation for the AdvMake build system"
|
||||
menu:
|
||||
docs:
|
||||
parent: "docs"
|
||||
---
|
242
content/docs/advmake/build-files.md
Normal file
242
content/docs/advmake/build-files.md
Normal file
@ -0,0 +1,242 @@
|
||||
---
|
||||
title: "Build Files"
|
||||
draft: false
|
||||
description: "Understanding AdvMake Build Files"
|
||||
---
|
||||
{{< button-gitea color="green" project="advmake" text="AdvMake" >}}
|
||||
{{< button-gitlab color="OrangeRed" project="advmake" text="AdvMake" >}}
|
||||
|
||||
|
||||
### Format
|
||||
AdvMake uses [Starlark](https://github.com/bazelbuild/starlark) as the format for its build files.
|
||||
Extra builtins are also defined for both convenience and extra functionality.
|
||||
|
||||
Starlark is a Python-like language meant for configuration files.
|
||||
|
||||
### Configuration
|
||||
Build files are by default called `AdvMakefile`, but that can be set via `-f`
|
||||
|
||||
An AdvMakefile example can be found at AdvMake's repo as it uses AdvMake itself.
|
||||
|
||||
AdvMake runs functions exposed by starlark in the format `<name>_<target>`.
|
||||
To set the default name and target, the global variables `defaultName`, and `defaultTarget` must be set.
|
||||
Here is an example from AdvMake's AdvMakefile:
|
||||
```python
|
||||
defaultName = "advmake"
|
||||
defaultTarget = "build"
|
||||
```
|
||||
This will tell AdvMake to run the function `advmake_build()` when run with no arguments.
|
||||
|
||||
If AdvMake is run with one argument (such as `advmake install`), it will use the default name with the specified target,
|
||||
so in that case, it would run `advmake_install()`.
|
||||
|
||||
If run with two arguments, AdvMake will use the first argument as the name and the second as the target.
|
||||
So, running `advmake hello world` would run the function `hello_world()`.
|
||||
|
||||
### Builtins
|
||||
As previously mentioned, AdvMake comes with extra builtins. Those are as follows:
|
||||
|
||||
#### `log()`
|
||||
|
||||
The log function uses zerolog in go to log a message to STDOUT. It has two arguments.
|
||||
The first is a string with the message to log, and the second is `level` which is optional
|
||||
|
||||
Examples:
|
||||
```python
|
||||
log("Info log") # Default level is info
|
||||
log("Warn log", level="warn") # Warn level log
|
||||
log("Debug log", level="debug") # Debug level log
|
||||
log("Fatal log", level="fatal") # Fatal level log. This will exit the program when executed
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `execute()`
|
||||
|
||||
The execute function runs a script using `sh -c`. This function has three arguments.
|
||||
The first is required and is a string with the script to run, the second is `output`
|
||||
which is optional. It can be set to `return`, `stdout`, or `both`, and the default is `both`.
|
||||
|
||||
The `output` argument controls where the script's output will be directed:
|
||||
- `return`: Returns script output as string
|
||||
- `stdout`: Prints script output to STDOUT, returning nothing
|
||||
- `both`: Prints to STDOUT and returns as string
|
||||
|
||||
The third argument is `concurrent` which can be either `True` or `False`, default `False`.
|
||||
If `concurrent` is set to `True`, all the lines in the script will be split and run concurrently
|
||||
via goroutines. The maximum threads for goroutines can be controlled using the `GOMAXPROCS` environment
|
||||
variable and is by default the amount of CPU cores present.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
user = execute("whoami") # This will print the username to STDOUT and set the user variable to it
|
||||
user = execute("whoami", output="return") # This will set the user variable to the username but not print it
|
||||
|
||||
execute("""
|
||||
cp file destination
|
||||
mv destination destination-1
|
||||
echo 'hello world'
|
||||
""") # Example of a multiline script
|
||||
|
||||
execute("""
|
||||
install -Dm755 program /usr/bin
|
||||
install -Dm755 program.cfg /etc
|
||||
""", concurrent=True) # Example of a concurrent multiline script
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `getEnv()`
|
||||
|
||||
The getEnv function simply returns the value of the environment variable specified in its first argument.
|
||||
|
||||
Example:
|
||||
```python
|
||||
term = getEnv("TERM") # Sets variable term to value of $TERM
|
||||
print("Nice " + term) # Prints "Nice $TERM"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `setEnv()`
|
||||
|
||||
The setEnv function sets an environment variable. It has three arguments.
|
||||
The first is the key, it is the name of the environment variable.
|
||||
The second is the new value, what the key should be set to.
|
||||
The third is optional, it is `onlyIfUnset` and it can be set to `True` or `False`, default `False`
|
||||
|
||||
`onlyIfUnset` checks that the variable is not already set before setting it, this can be useful for
|
||||
setting defaults.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
setEnv("MY_ENV_VAR", "Hello, World") # Sets $MY_ENV_VAR to "Hello, World"
|
||||
setEnv("CC", "gcc", onlyIfUnset=True) # Sets $CC to "gcc", but only if $CC is not already set
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `expandFile()`
|
||||
|
||||
The expandFile function replaces all instances of $VAR with the value specified.
|
||||
|
||||
expandFile has two arguments. The first accepts a filename to modify.
|
||||
The second accepts a dictionary to act as mappings for value replacements.
|
||||
|
||||
Example:
|
||||
```python
|
||||
expandFile("a.txt", {"A": "Hello", "B": "World"}) # Replace $A with Hello and $B with world in file a.txt
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `download()`
|
||||
|
||||
The download function downloads a file at a URL.
|
||||
|
||||
download has two arguments. The first is a URL, and the second is an optional
|
||||
argument called `filename`. If `filename` is not provided, the filename will
|
||||
be taken from the URL.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
download("https://www.arsenm.dev/logo-white.png") # Downloads logo-white.png
|
||||
download("https://www.arsenm.dev/logo-white.png", filename="logo.png") # Downloads logo-white.png as logo.png
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `lookPath()`
|
||||
|
||||
The lookPath function uses go's `exec.LookPath()` to find the absolute path of a command.
|
||||
It has a single argument which is the command to look for. If a command is not found, lookPath
|
||||
returns `-1`.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
lookPath("sh") # /bin/sh
|
||||
lookPath("nonExistentCommand") # -1
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `userChoice()`
|
||||
|
||||
The userChoice function presents the user with a choice. It has two arguments. The first
|
||||
is a prompt to be displayed to the user, and the second is a list of choices.
|
||||
|
||||
Example:
|
||||
```python
|
||||
userChoice("Choose command", ["find", "ls"])
|
||||
# This returns:
|
||||
|
||||
# [1] "find"
|
||||
# [2] "ls"
|
||||
# Choose command:
|
||||
```
|
||||
The function will return the chosen object (if input to above is `1`, function returns `"find"`)
|
||||
|
||||
---
|
||||
|
||||
#### `input()`
|
||||
|
||||
The input function is a simple function that uses go's `fmt.Print()` and `fmt.Scanln()` to replicate
|
||||
the functionality of python's `input()` function. It has a single argument, which is the prompt and returns
|
||||
the inputted text.
|
||||
|
||||
Example:
|
||||
```python
|
||||
x = input("Name: ") # This will print "Name: " and then wait for input.
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `fileExists()`
|
||||
|
||||
The fileExists function checks if a specified file exists and is accessible in the filesystem. It has a single
|
||||
argument which is the path to the file being checked, and returns a boolean reflecting the state of the file.
|
||||
|
||||
Examples:
|
||||
```python
|
||||
if fileExists("/etc/passwd"):
|
||||
print("/etc/passwd exists!") # /etc/passwd exists!
|
||||
if fileExists("/abcdef"):
|
||||
print("/abcdef exists!") # No output because /abcdef most likely does not exist
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `getOS()`
|
||||
|
||||
The getOS function returns the value of `runtime.GOOS`. It has no arguments.
|
||||
|
||||
Example:
|
||||
```python
|
||||
if getOS() == "linux":
|
||||
print("This is Linux!")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `getArch()`
|
||||
|
||||
The getArch function returns the value of `runtime.GOARCH`. It has no arguments.
|
||||
|
||||
Example:
|
||||
```python
|
||||
if getArch() == "386":
|
||||
print("x86 32-bit")
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
#### `getCPUNum()`
|
||||
|
||||
The getCPUNum function returns the amount of CPUs available to AdvMake. It has no arguments.
|
||||
|
||||
Example:
|
||||
```python
|
||||
print(getCPUNum() + " CPUs available!")
|
||||
```
|
||||
|
||||
---
|
50
content/docs/advmake/installation.md
Normal file
50
content/docs/advmake/installation.md
Normal file
@ -0,0 +1,50 @@
|
||||
---
|
||||
title: "Installation"
|
||||
draft: false
|
||||
description: "Installing AdvMake"
|
||||
---
|
||||
{{< button-gitea color="green" project="advmake" text="AdvMake" >}}
|
||||
{{< button-gitlab color="OrangeRed" project="advmake" text="AdvMake" >}}
|
||||
|
||||
|
||||
## Building from source
|
||||
|
||||
### Downloading
|
||||
AdvMake is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.
|
||||
|
||||
To download AdvMake, you can either use the download button on Gitea or Gitlab, or
|
||||
you can use the git CLI
|
||||
|
||||
To clone AdvMake using the CLI, run one of the following commands:
|
||||
```bash
|
||||
git clone https://gitea.arsenm.dev/Arsen6331/advmake.git
|
||||
OR
|
||||
git clone https://gitlab.com/moussaelianarsen/advmake.git
|
||||
```
|
||||
|
||||
### Building
|
||||
|
||||
AdvMake is written in Go. This means go must be installed on your computer. Most
|
||||
linux distros call the package that provides it either `go` or `golang`.
|
||||
|
||||
Once go is installed, you can check that it runs by running
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
To compile AdvMake, run
|
||||
```bash
|
||||
go build
|
||||
```
|
||||
|
||||
### Installing
|
||||
|
||||
To install AdvMake, run:
|
||||
```bash
|
||||
sudo install -Dm755 advmake /usr/bin
|
||||
```
|
||||
|
||||
Once the command completes, AdvMake should be ready and you can run the following to make sure it works:
|
||||
|
||||
```bash
|
||||
advmake -h
|
||||
```
|
8
content/docs/kbdemu/_index.md
Normal file
8
content/docs/kbdemu/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "KbdEmu Docs"
|
||||
draft: true
|
||||
description: "Documentation for KbdEmu, the HID emulator"
|
||||
menu:
|
||||
docs:
|
||||
parent: "docs"
|
||||
---
|
70
content/docs/kbdemu/installation.md
Normal file
70
content/docs/kbdemu/installation.md
Normal file
@ -0,0 +1,70 @@
|
||||
---
|
||||
title: "Installation"
|
||||
draft: false
|
||||
description: "Installing kbdemu"
|
||||
---
|
||||
{{< appveyor-ci project="kbdemu" projectID="km2f1wiy7enuh6il" >}}
|
||||
{{< minio-s3 project="kbdemu" >}}
|
||||
|
||||
## Using precompiled binary
|
||||
KbdEmu uses continuous integration to compile. You can find the binary by
|
||||
clicking the CI badge above, selecting "Ubuntu2004" for the linux build or
|
||||
"macOS" for the macOS build, and then going to the artifacts tab.
|
||||
|
||||
## Building from source
|
||||
|
||||
### Downloading
|
||||
KbdEmu is hosted in two places, Gitea and Gitlab. Either one can be used as
|
||||
it is mirrored from Gitea to Gitlab
|
||||
|
||||
{{< button-gitea color="green" project="kbdemu" text="KbdEmu" >}}
|
||||
{{< button-gitlab color="OrangeRed" project="kbdemu" text="KbdEmu" >}}
|
||||
|
||||
To download kbdemu, you can either use the download button on one of the above, or
|
||||
you can use the git command
|
||||
|
||||
To clone kbdemu using the command, run one of the following commands:
|
||||
```bash
|
||||
git clone https://gitea.arsenm.dev/Arsen6331/kbdemu
|
||||
OR
|
||||
git clone https://gitlab.com/moussaelianarsen/kbdemu
|
||||
```
|
||||
|
||||
Now, you will want to `cd` into the root of this repo before completing the rest
|
||||
of these instructions
|
||||
|
||||
### Building
|
||||
|
||||
Since KbdEmu is written in go, you will need go installed in order to compile it.
|
||||
Most linux distros call the package providing it either `go` or `golang`.
|
||||
|
||||
Once go is installed, you can check that it runs by running
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
To compile KbdEmu, run the following commands:
|
||||
```bash
|
||||
go get github.com/go-vgo/robotgo
|
||||
go get github.com/BurntSushi/toml
|
||||
go get github.com/rs/zerolog/log
|
||||
source .envrc
|
||||
go build
|
||||
```
|
||||
|
||||
### Installing
|
||||
|
||||
To install kbdemu, run the following command:
|
||||
|
||||
```bash
|
||||
sudo install -Dm755 kbdemu /usr/bin
|
||||
```
|
||||
|
||||
Once this command completes, to test whether kbdemu was installed properly, run
|
||||
this command:
|
||||
|
||||
```bash
|
||||
kbdemu
|
||||
```
|
||||
|
||||
You should get an error warning you that kbdemu cannot find a TOML file. If you do,
|
||||
kbdemu is properly installed.
|
69
content/docs/kbdemu/usage.md
Normal file
69
content/docs/kbdemu/usage.md
Normal file
@ -0,0 +1,69 @@
|
||||
---
|
||||
title: "Usage"
|
||||
draft: false
|
||||
description: "Using kbdemu"
|
||||
---
|
||||
{{< appveyor-ci project="kbdemu" projectID="km2f1wiy7enuh6il" >}}
|
||||
{{< minio-s3 project="kbdemu" >}}
|
||||
|
||||
This page assumes you have already installed KbdEmu. If not, follow the installation
|
||||
instructions on the installation page.
|
||||
|
||||
{{< button text="Installation" link="../installation" color="blue">}}
|
||||
|
||||
### Configs
|
||||
|
||||
KbdEmu uses TOML configs to tell it what to do. This is the example config which
|
||||
contains all supported features:
|
||||
|
||||
```toml
|
||||
[[action]]
|
||||
type = "var"
|
||||
action = "set key to z"
|
||||
|
||||
[[action]]
|
||||
type = "kbd"
|
||||
action = "hold key @key@"
|
||||
|
||||
[[action]]
|
||||
type = "misc"
|
||||
action = "wait 1 second"
|
||||
|
||||
[[action]]
|
||||
type = "kbd"
|
||||
action = "release key @key@"
|
||||
|
||||
[[action]]
|
||||
type = "kbd"
|
||||
action = "press space"
|
||||
|
||||
[[action]]
|
||||
type = "kbd"
|
||||
action = "type AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
|
||||
|
||||
[[action]]
|
||||
type = "mse"
|
||||
action = "scroll up 5"
|
||||
|
||||
[[action]]
|
||||
type = "mse"
|
||||
action= "right click"
|
||||
|
||||
[[action]]
|
||||
type = "mse"
|
||||
action = "move to {0,0}"
|
||||
|
||||
[[action]]
|
||||
type = "misc"
|
||||
action = "show message Actions complete!"
|
||||
```
|
||||
|
||||
As you can see, the configs are pretty simple. Here is a list of all the currently
|
||||
supported features:
|
||||
{{<table "f6 w-100 mw8 center">}}
|
||||
| Var Type | Misc Type | Kbd Type | Mse Type |
|
||||
|-------------------|-------------------|--------------|----------------|
|
||||
| Setting Variables | Delays | Hold Keys | Scrolling |
|
||||
| | Showing Messages | Release Keys | Mouse Clicks |
|
||||
| | | Type Strings | Mouse Movement |
|
||||
{{</table>}}
|
8
content/docs/opensend/_index.md
Normal file
8
content/docs/opensend/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "OpenSend Docs"
|
||||
draft: false
|
||||
description: "Documentation for the OpenSend file sharing program"
|
||||
menu:
|
||||
docs:
|
||||
parent: "docs"
|
||||
---
|
37
content/docs/opensend/gui.md
Normal file
37
content/docs/opensend/gui.md
Normal file
@ -0,0 +1,37 @@
|
||||
---
|
||||
title: "GUI"
|
||||
draft: false
|
||||
description: "Opensend fyne GUI"
|
||||
---
|
||||
|
||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
|
||||
{{< minio-s3 project="opensend" >}}
|
||||
|
||||
This page assumes you have already installed Opensend. If not, follow the installation
|
||||
instructions on the installation page.
|
||||
|
||||
{{< button text="Installation" link="../installation" color="blue">}}
|
||||
|
||||
### GUI Installation
|
||||
|
||||
Opensend GUI has been written in golang using [fyne](https://fyne.io). Its source code can be found here:
|
||||
|
||||
{{< button-gitea text="Opensend GUI" project="opensend-gui" owner="opensend" color="green" >}}
|
||||
|
||||
To download Opensend GUI, run the following command
|
||||
|
||||
```bash
|
||||
git clone https://gitea.arsenm.dev/opensend/opensend-gui.git
|
||||
```
|
||||
|
||||
To build Opensend GUI, `go` must be installed. The process for that is explained in the installation instructions for Opensend. Once `go` is installed, run:
|
||||
|
||||
```bash
|
||||
go build
|
||||
```
|
||||
|
||||
This may take a while as `go` downloads and compiles Opensend GUI and Fyne.
|
||||
|
||||
Once the build is complete, there should be a file named `opensend-gui` in the directory. Run this file to open the GUI which should look like this:
|
||||
|
||||
{{< image src="/opensend/gui_start.webp" alt="Opensend GUI on start" >}}
|
60
content/docs/opensend/installation.md
Normal file
60
content/docs/opensend/installation.md
Normal file
@ -0,0 +1,60 @@
|
||||
---
|
||||
title: "Installation"
|
||||
draft: false
|
||||
description: "Installing opensend"
|
||||
---
|
||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
|
||||
{{< minio-s3 project="opensend" >}}
|
||||
|
||||
## Using precompiled binary
|
||||
Opensend uses continuous integration to compile. You can find the binary by clicking the download binary badge above.
|
||||
|
||||
## Building from source
|
||||
|
||||
### Downloading
|
||||
Opensend is hosted on Gitea.
|
||||
|
||||
{{< button-gitea color="green" project="opensend" owner="opensend" text="Opensend" >}}
|
||||
|
||||
To download opensend, you can either use the download button on one of the above, or
|
||||
you can use the git command
|
||||
|
||||
To clone opensend using the command, run the following command:
|
||||
```bash
|
||||
git clone https://gitea.arsenm.dev/opensend/opensend.git
|
||||
```
|
||||
|
||||
Now, you will want to `cd` into the root of this repo before completing the rest
|
||||
of these instructions
|
||||
|
||||
### Building
|
||||
|
||||
Since Opensend is written in go, you will need go installed in order to compile it.
|
||||
Most linux distros call the package providing it either `go` or `golang`.
|
||||
|
||||
Once go is installed, you can check that it runs by running
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
To compile Opensend, run the following command:
|
||||
```bash
|
||||
make
|
||||
```
|
||||
|
||||
### Installing
|
||||
|
||||
To install opensend, run one of the following commands:
|
||||
|
||||
```bash
|
||||
sudo make install # Linux
|
||||
sudo make install-macos # macOS
|
||||
```
|
||||
|
||||
Once this command completes, to test whether opensend was installed properly, run
|
||||
this command:
|
||||
|
||||
```bash
|
||||
opensend -h
|
||||
```
|
||||
|
||||
You should get the usage for opensend.
|
53
content/docs/opensend/usage.md
Normal file
53
content/docs/opensend/usage.md
Normal file
@ -0,0 +1,53 @@
|
||||
---
|
||||
title: "Usage"
|
||||
draft: false
|
||||
description: "Using opensend"
|
||||
---
|
||||
{{< appveyor-ci project="opensend" projectID="wrv3bbuujw57578h" >}}
|
||||
{{< minio-s3 project="opensend" >}}
|
||||
|
||||
This page assumes you have already installed Opensend. If not, follow the installation
|
||||
instructions on the installation page.
|
||||
|
||||
{{< button text="Installation" link="../installation" color="blue">}}
|
||||
|
||||
### Configuration
|
||||
Opensend allows configuration by TOML and by command line flags. It looks at the following paths for configs in the specified order:
|
||||
|
||||
#### Config files
|
||||
|
||||
1. Config path from `--config` flag
|
||||
2. `~/.config/opensend.toml`
|
||||
3. `/etc/opensend.toml`
|
||||
|
||||
#### Command line flags
|
||||
|
||||
```text
|
||||
Usage of opensend:
|
||||
-d string
|
||||
Data to send
|
||||
-dest-dir string
|
||||
Destination directory for files or dirs sent over opensend (default "/home/arsen/Downloads")
|
||||
-r Receive data
|
||||
-s Send data
|
||||
-send-to string
|
||||
Use IP address of receiver instead of mDNS
|
||||
-skip-mdns
|
||||
Skip zeroconf service registration (use if mdns fails)
|
||||
-t string
|
||||
Type of data being sent
|
||||
```
|
||||
|
||||
The purpose of the mdns-skipping flags is to account for the iSH app in iOS, as the mdns resolver and registration fails on it.
|
||||
|
||||
### Algorithms and software used
|
||||
|
||||
- RSA for asymmetric encryption
|
||||
- AES for symmetric encryption
|
||||
- Tar for archiving directories
|
||||
- Zstandard for compression
|
||||
- Base91 for encoding
|
||||
- Gob for serialization
|
||||
- JSON for serialization
|
||||
- TCP sockets for transfer
|
||||
- Zeroconf/mDNS for device discovery
|
8
content/docs/pak/_index.md
Normal file
8
content/docs/pak/_index.md
Normal file
@ -0,0 +1,8 @@
|
||||
---
|
||||
title: "Pak Docs"
|
||||
draft: false
|
||||
description: "Documentation for the Pak package manager wrapper"
|
||||
menu:
|
||||
docs:
|
||||
parent: "docs"
|
||||
---
|
42
content/docs/pak/configuration.md
Normal file
42
content/docs/pak/configuration.md
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
title: "Configuration"
|
||||
draft: false
|
||||
description: "Configuring pak"
|
||||
---
|
||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
|
||||
{{< minio-s3 project="pak" >}}
|
||||
|
||||
### Config file
|
||||
Pak uses a custom config file at `/etc/pak.cfg`. For example, this is what the
|
||||
apt config looks like:
|
||||
|
||||
```cfg
|
||||
# Write the name of the package manager in all lowercase below
|
||||
apt
|
||||
# Write a comma separated list of commands from the manager below
|
||||
install,remove,update,upgrade,search,download
|
||||
# Write "yes" or "no" depending on whether you want to use root
|
||||
yes
|
||||
# Write command to use for root
|
||||
sudo
|
||||
# Write a comma separated list of shortcuts below
|
||||
rm,inst
|
||||
# Write a comma separated list of shortcut mappings from the manager below
|
||||
remove,install
|
||||
|
||||
```
|
||||
This file is read by pak to tell it what to do. The comments above each keyword
|
||||
explain what it's for.
|
||||
|
||||
Here is a list of all the fields and their uses:
|
||||
|
||||
1. Command to invoke the package manager.
|
||||
2. Comma-separated list of commands supported by the package manager.
|
||||
3. Whether or not to invoke the root command.
|
||||
4. Command to use for root invocation (`sudo`, `doas`, etc.)
|
||||
5. Comma-separated list of shortcuts for pak to accept
|
||||
6. Comma-separated list of shortcut mappings (what each shortcut sends to the
|
||||
package manager). These do not necessarily need to be in the commands list.
|
||||
|
||||
Once you have made the config, just place it at `/etc/pak.cfg` and pak will
|
||||
automatically use it.
|
91
content/docs/pak/installation.md
Normal file
91
content/docs/pak/installation.md
Normal file
@ -0,0 +1,91 @@
|
||||
---
|
||||
title: "Installation"
|
||||
draft: false
|
||||
description: "Installing pak"
|
||||
---
|
||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
|
||||
{{< minio-s3 project="pak" >}}
|
||||
|
||||
|
||||
## Using precompiled binary
|
||||
Pak uses continuous integration to compile. You can find the binary either by
|
||||
clicking the CI badge above or by going to the gitlab repo using the button below and
|
||||
navigating to the releases.
|
||||
|
||||
{{< button-gitlab color="OrangeRed" project="pak" text="Pak" >}}
|
||||
|
||||
## Using the AUR
|
||||
If you are running an arch-based linux distro, you can use the Arch User Repository
|
||||
to install pak. First, make sure the `yay` AUR helper is installed, then run the following:
|
||||
|
||||
```bash
|
||||
yay -S pak
|
||||
```
|
||||
|
||||
## Building from source
|
||||
|
||||
### Downloading
|
||||
Pak is hosted on my Gitea instance. If that is down, it is also mirrored on Gitlab.
|
||||
|
||||
{{< button-gitea color="green" project="pak" text="Pak" >}}
|
||||
{{< button-gitlab color="OrangeRed" project="pak" text="Pak" >}}
|
||||
|
||||
To download pak, you can either use the download button on Gitea or Gitlab, or
|
||||
you can use the git CLI
|
||||
|
||||
To clone pak using the CLI, run one of the following commands:
|
||||
```bash
|
||||
git clone https://gitea.arsenm.dev/Arsen6331/pak
|
||||
OR
|
||||
git clone https://gitlab.com/moussaelianarsen/pak
|
||||
```
|
||||
|
||||
### Building
|
||||
|
||||
Pak is written in Go. This means go must be installed on your computer. Most
|
||||
linux distros call the package that provides it either `go` or `golang`.
|
||||
|
||||
Once go is installed, you can check that it runs by running
|
||||
```bash
|
||||
go version
|
||||
```
|
||||
To compile pak, run
|
||||
```bash
|
||||
make
|
||||
```
|
||||
Then, you will need to figure out which package manager you have. Here is a list
|
||||
of package managers with ready to use configs:
|
||||
|
||||
- apt
|
||||
- aptitude
|
||||
- brew
|
||||
- yay (with wrapper)
|
||||
- pacman (with wrapper)
|
||||
- zypper
|
||||
- snap
|
||||
|
||||
If your package manager is not in the list, you can make a config for it. Go to
|
||||
the Configuration page for more information.
|
||||
|
||||
### Installing
|
||||
|
||||
If your package manager is in the list, use one of these:
|
||||
|
||||
- apt: `sudo make aptinstall`
|
||||
- aptitude: `sudo make aptitude`
|
||||
- brew: `sudo make brewinstall`
|
||||
- yay: `sudo make yayinstall`
|
||||
- pacman: `sudo make pacinstall`
|
||||
- zypper: `sudo make zyppinstall`
|
||||
- snap: `sudo make snapinstall`
|
||||
- custom: `sudo make installbinonly`
|
||||
|
||||
Once the command completes, unless you're using a custom config, pak should be ready
|
||||
and you can run the following to make sure it works:
|
||||
|
||||
```bash
|
||||
pak
|
||||
```
|
||||
|
||||
Go to the Configuration page for instructions on making a custom config, you **must**
|
||||
have a config for pak to function.
|
28
content/docs/pak/usage.md
Normal file
28
content/docs/pak/usage.md
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
title: "Usage"
|
||||
draft: false
|
||||
description: "Using pak"
|
||||
---
|
||||
{{< appveyor-ci project="pak" projectID="e4yacqd78gkte8a0" >}}
|
||||
{{< minio-s3 project="pak" >}}
|
||||
|
||||
Using pak is simple, just run `pak` and one of the commands from the config file.
|
||||
Pak understands partial commands, so these commands will be identical:
|
||||
|
||||
```bash
|
||||
pak in <package>
|
||||
OR
|
||||
pak inst <package>
|
||||
OR
|
||||
pak install <package>
|
||||
```
|
||||
|
||||
The lack of `sudo` is intentional. Pak will not allow running from root by default
|
||||
as it already invokes root internally. To bypass this, simply give pak the `-r` flag.
|
||||
|
||||
Using shortcuts in pak is just as simple as commands, just run `pak` and a shortcut,
|
||||
like this:
|
||||
|
||||
```bash
|
||||
pak rm <package>
|
||||
```
|
0
data/.gitkeep
Normal file
0
data/.gitkeep
Normal file
4
data/doks.json
Normal file
4
data/doks.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "doks",
|
||||
"version": "0.1.5"
|
||||
}
|
4
data/hyas.json
Normal file
4
data/hyas.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"name": "hyas",
|
||||
"version": "1.3.5"
|
||||
}
|
BIN
images/screenshot.png
Normal file
BIN
images/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 122 KiB |
BIN
images/tn.png
Normal file
BIN
images/tn.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 137 KiB |
10
layouts/404.html
Normal file
10
layouts/404.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<h1 class="text-center">Page not found :(</h1>
|
||||
<p class="text-center">The page you are looking for doesn't exist or has been moved.</p>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
0
layouts/_default/_markup/.gitkeep
Normal file
0
layouts/_default/_markup/.gitkeep
Normal file
30
layouts/_default/baseof.html
Normal file
30
layouts/_default/baseof.html
Normal file
@ -0,0 +1,30 @@
|
||||
<!doctype html>
|
||||
<html lang="{{ .Site.LanguageCode | default "en" }}">
|
||||
{{ partial "head/head.html" . }}
|
||||
{{ if eq .Kind "home" -}}
|
||||
{{ .Scratch.Set "class" "home" -}}
|
||||
{{ else if eq .Kind "404" -}}
|
||||
{{ .Scratch.Set "class" "error404" -}}
|
||||
{{ else if eq .Kind "page" -}}
|
||||
{{ .Scratch.Set "class" .Type -}}
|
||||
{{ .Scratch.Add "class" " single" -}}
|
||||
{{ else -}}
|
||||
{{ .Scratch.Set "class" .Type -}}
|
||||
{{ .Scratch.Add "class" " list" -}}
|
||||
{{ end -}}
|
||||
<body class="{{ .Scratch.Get "class" }}">
|
||||
{{ partial "header/header.html" . }}
|
||||
<div class="wrap container" role="document">
|
||||
<div class="content">
|
||||
{{ block "main" . }}{{ end }}
|
||||
</div>
|
||||
</div>
|
||||
{{ block "sidebar-prefooter" . }}{{ end }}
|
||||
{{ block "sidebar-footer" . }}{{ end }}
|
||||
{{ partial "footer/footer.html" . }}
|
||||
{{ if and .IsHome .Site.Params.alert }}
|
||||
{{ partial "footer/alert.html" . }}
|
||||
{{ end }}
|
||||
{{ partial "footer/script-footer.html" . }}
|
||||
</body>
|
||||
</html>
|
10
layouts/_default/index.js
Normal file
10
layouts/_default/index.js
Normal file
@ -0,0 +1,10 @@
|
||||
var docs = [
|
||||
{{ range $index, $page := (where .Site.Pages "Section" "docs") -}}
|
||||
{
|
||||
id: {{ $index }},
|
||||
title: "{{ .Title }}",
|
||||
description: "{{ .Params.description }}",
|
||||
href: "{{ .URL | absURL }}"
|
||||
},
|
||||
{{ end -}}
|
||||
];
|
5
layouts/_default/index.json
Normal file
5
layouts/_default/index.json
Normal file
@ -0,0 +1,5 @@
|
||||
{{- $.Scratch.Add "index" slice -}}
|
||||
{{- range .Site.RegularPages -}}
|
||||
{{- $.Scratch.Add "index" (dict "title" .Title "description" .Params.description "contents" .Plain "permalink" .Permalink) -}}
|
||||
{{- end -}}
|
||||
{{- $.Scratch.Get "index" | jsonify -}}
|
13
layouts/_default/list.html
Normal file
13
layouts/_default/list.html
Normal file
@ -0,0 +1,13 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
{{ range .Paginator.Pages }}
|
||||
<article>
|
||||
<h2><a href="{{ .Permalink }}">{{ .Title }}</a></h2>
|
||||
{{ .Description }}
|
||||
</article>
|
||||
{{ end }}
|
||||
{{ template "_internal/pagination.html" . }}
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
46
layouts/_default/section.sitemap.xml
Normal file
46
layouts/_default/section.sitemap.xml
Normal file
@ -0,0 +1,46 @@
|
||||
{{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML -}}
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
|
||||
xmlns:xhtml="http://www.w3.org/1999/xhtml">
|
||||
{{ range $i, $e := .Data.Pages -}}
|
||||
{{ if ne .Params.sitemap_exclude true }}
|
||||
<url>
|
||||
<loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
|
||||
<lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
|
||||
<changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
|
||||
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
</url>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ range .Sections -}}
|
||||
{{ range $i, $e := .Data.Pages -}}
|
||||
{{ if ne .Params.sitemap_exclude true -}}
|
||||
<url>
|
||||
<loc>{{ .Permalink }}</loc>{{ if not .Lastmod.IsZero }}
|
||||
<lastmod>{{ safeHTML ( .Lastmod.Format "2006-01-02T15:04:05-07:00" ) }}</lastmod>{{ end }}{{ with .Sitemap.ChangeFreq }}
|
||||
<changefreq>{{ . }}</changefreq>{{ end }}{{ if ge .Sitemap.Priority 0.0 }}
|
||||
<priority>{{ .Sitemap.Priority }}</priority>{{ end }}{{ if .IsTranslated }}{{ range .Translations }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
<xhtml:link
|
||||
rel="alternate"
|
||||
hreflang="{{ .Lang }}"
|
||||
href="{{ .Permalink }}"
|
||||
/>{{ end }}
|
||||
</url>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
</urlset>
|
10
layouts/_default/single.html
Normal file
10
layouts/_default/single.html
Normal file
@ -0,0 +1,10 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
21
layouts/blog/list.html
Normal file
21
layouts/blog/list.html
Normal file
@ -0,0 +1,21 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<h1 class="text-center">{{ .Title }}</h1>
|
||||
<div class="text-center">{{ .Content }}</div>
|
||||
<div class="card-list">
|
||||
{{ range .Data.Pages -}}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h2 class="h3"><a class="stretched-link text-body" href="{{ .Permalink }}">{{ .Params.title }}</a></h2>
|
||||
<p>{{ .Params.lead | safeHTML }}</p>
|
||||
{{ partial "main/blog-meta.html" . -}}
|
||||
</div>
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
14
layouts/blog/single.html
Normal file
14
layouts/blog/single.html
Normal file
@ -0,0 +1,14 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<div class="blog-header">
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ partial "main/blog-meta.html" . }}
|
||||
</div>
|
||||
<p class="lead">{{ .Params.lead | safeHTML }}</p>
|
||||
{{ .Content }}
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
23
layouts/contributors/list.html
Normal file
23
layouts/contributors/list.html
Normal file
@ -0,0 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<h1 class="text-center">{{ .Title }}</h1>
|
||||
<div class="text-center">{{ .Content }}</div>
|
||||
<div class="card-list">
|
||||
{{ range .Data.Pages -}}
|
||||
<div class="card">
|
||||
<div class="card-body">
|
||||
<h2 class="h3"><a class="stretched-link text-body" href="{{ .Permalink }}">{{ .Params.title }}</a></h2>
|
||||
{{ if eq .Section "blog" -}}
|
||||
<p>{{ .Params.lead | safeHTML }}</p>
|
||||
{{ partial "main/blog-meta.html" . -}}
|
||||
{{ end -}}
|
||||
</div>
|
||||
</div>
|
||||
{{ end -}}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
34
layouts/docs/list.html
Normal file
34
layouts/docs/list.html
Normal file
@ -0,0 +1,34 @@
|
||||
{{ define "main" }}
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-12 col-lg-10 col-xl-8">
|
||||
<article>
|
||||
<a href="..">
|
||||
<p class="text-center">⇐ {{ .Parent.Name }}</p>
|
||||
</a>
|
||||
<h1 style="margin: 0;" class="text-center">{{ .Title }}</h1>
|
||||
<div class="text-center">{{ .Content }}</div>
|
||||
<div class="card-list">
|
||||
{{ $currentSection := .CurrentSection }}
|
||||
{{ range .Paginator.Pages }}
|
||||
{{ if in (.Permalink | string) $currentSection.RelPermalink }}
|
||||
<div class="card my-3">
|
||||
<div class="card-body">
|
||||
<a class="stretched-link" href="{{ .Permalink }}">{{ .Params.title | title }} ⇒</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
{{ range .CurrentSection.Sections }}
|
||||
{{ if in (.Permalink | string) $currentSection.RelPermalink }}
|
||||
<div class="card my-3">
|
||||
<div class="card-body">
|
||||
<a class="stretched-link" href="{{ .Permalink }}">{{ .Params.title | title }} ⇒</a>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
</div>
|
||||
</article>
|
||||
</div>
|
||||
</div>
|
||||
{{ end }}
|
30
layouts/docs/single.html
Normal file
30
layouts/docs/single.html
Normal file
@ -0,0 +1,30 @@
|
||||
{{ define "main" }}
|
||||
<div class="row flex-xl-nowrap">
|
||||
<div class="col-lg-5 col-xl-4 docs-sidebar">
|
||||
<nav class="docs-links" aria-label="Main navigation">
|
||||
{{ partial "sidebar/docs-menu.html" . }}
|
||||
</nav>
|
||||
</div>
|
||||
{{ if ne .Params.toc false -}}
|
||||
<nav class="docs-toc d-none d-xl-block col-xl-3" aria-label="Secondary navigation">
|
||||
{{ partial "sidebar/docs-toc.html" . }}
|
||||
</nav>
|
||||
{{ end -}}
|
||||
{{ if .Params.toc -}}
|
||||
<main class="docs-content col-lg-11 col-xl-9">
|
||||
{{ else -}}
|
||||
<main class="docs-content col-lg-11 col-xl-9 mx-xl-auto">
|
||||
{{ end -}}
|
||||
<a href="..">
|
||||
⇐ {{ .Parent.Name }}
|
||||
</a>
|
||||
<h1 style="margin-top: 0.2rem;">{{ .Title }}</h1>
|
||||
<p class="lead">{{ .Params.lead | safeHTML }}</p>
|
||||
{{ partial "main/headline-hash.html" .Content }}
|
||||
{{ if .Site.Params.editPage -}}
|
||||
{{ partial "main/edit-page.html" . }}
|
||||
{{ end -}}
|
||||
{{ partial "main/docs-navigation.html" . }}
|
||||
</main>
|
||||
</div>
|
||||
{{ end }}
|
9
layouts/index.headers
Normal file
9
layouts/index.headers
Normal file
@ -0,0 +1,9 @@
|
||||
/*
|
||||
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
|
||||
X-Content-Type-Options: nosniff
|
||||
X-XSS-Protection: 1; mode=block
|
||||
Content-Security-Policy: default-src 'self'; frame-ancestors https://jamstackthemes.dev; manifest-src 'self'; connect-src 'self'; font-src 'self'; img-src 'self' data:; script-src 'self'; style-src 'self'
|
||||
X-Frame-Options: SAMEORIGIN
|
||||
Referrer-Policy: strict-origin
|
||||
Feature-Policy: geolocation 'self'
|
||||
Cache-Control: public, max-age=31536000
|
23
layouts/index.html
Normal file
23
layouts/index.html
Normal file
@ -0,0 +1,23 @@
|
||||
{{ define "main" }}
|
||||
<section class="section container-fluid mt-n3 pb-3">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-lg-12 text-center">
|
||||
<h1 class="mt-0">{{ .Title }}</h1>
|
||||
</div>
|
||||
<div class="col-lg-9 col-xl-8 text-center">
|
||||
<p class="lead">{{ .Params.Lead | safeHTML }}</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
{{ end }}
|
||||
|
||||
{{ define "sidebar-footer" }}
|
||||
<section class="section section-sm container-fluid">
|
||||
<div class="row justify-content-center text-center">
|
||||
<div class="col-lg-9">
|
||||
{{- .Content -}}
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<br>
|
||||
{{ end }}
|
6
layouts/index.redirects
Normal file
6
layouts/index.redirects
Normal file
@ -0,0 +1,6 @@
|
||||
# redirects for Netlify - https://www.netlify.com/docs/redirects/
|
||||
{{- range $p := .Site.Pages -}}
|
||||
{{- range .Aliases }}
|
||||
{{ . }} {{ $p.RelPermalink -}}
|
||||
{{- end }}
|
||||
{{- end -}}
|
3
layouts/partials/footer/alert.html
Normal file
3
layouts/partials/footer/alert.html
Normal file
@ -0,0 +1,3 @@
|
||||
<div class="alert alert-primary fixed-bottom text-center" role="alert">
|
||||
{{ .Site.Params.alertText | safeHTML }}
|
||||
</div>
|
18
layouts/partials/footer/footer.html
Normal file
18
layouts/partials/footer/footer.html
Normal file
@ -0,0 +1,18 @@
|
||||
<footer class="footer text-muted">
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-lg-8 order-last order-lg-first">
|
||||
<ul class="list-inline">
|
||||
<li class="list-inline-item">{{ .Site.Params.footer | safeHTML }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-lg-8 order-first order-lg-last text-lg-right">
|
||||
<ul class="list-inline">
|
||||
{{ range .Site.Menus.footer -}}
|
||||
<li class="list-inline-item"><a href="{{ .URL | absURL }}">{{ .Name }}</a></li>
|
||||
{{ end -}}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
19
layouts/partials/footer/script-footer.html
Normal file
19
layouts/partials/footer/script-footer.html
Normal file
@ -0,0 +1,19 @@
|
||||
{{ $indexTemplate := resources.Get "js/index.js" -}}
|
||||
{{ $index := $indexTemplate | resources.ExecuteAsTemplate "index.js" . -}}
|
||||
{{ $lazysizes := resources.Get "js/vendor/lazysizes/lazysizes.min.js" -}}
|
||||
{{ $flexsearch := resources.Get "js/vendor/flexsearch/dist/flexsearch.min.js" -}}
|
||||
{{ $clipboard := resources.Get "js/vendor/clipboard/dist/clipboard.min.js" -}}
|
||||
{{ if eq (hugo.Environment) "development" -}}
|
||||
{{ $app := resources.Get "js/app.js" -}}
|
||||
{{ $js := slice $lazysizes $clipboard $flexsearch $app | resources.Concat "main.js" -}}
|
||||
<script src="{{ $js.Permalink }}" defer></script>
|
||||
<script src="{{ $index.Permalink }}" defer></script>
|
||||
{{ else -}}
|
||||
{{ $instantPage := resources.Get "js/vendor/instant.page/instantpage.js" | minify -}}
|
||||
{{ $app := resources.Get "js/app.js" | minify -}}
|
||||
{{ $js := slice $lazysizes $clipboard $flexsearch $instantPage $app | resources.Concat "main.js" -}}
|
||||
{{ $jsProd := $js | resources.Fingerprint "sha512" -}}
|
||||
{{ $indexProd := $index | resources.Minify | resources.Fingerprint "sha512" -}}
|
||||
<script src="{{ $jsProd.Permalink }}" integrity="{{ $jsProd.Data.Integrity }}" crossorigin="anonymous" defer></script>
|
||||
<script src="{{ $indexProd.Permalink }}" integrity="{{ $indexProd.Data.Integrity }}" crossorigin="anonymous" defer></script>
|
||||
{{ end -}}
|
5
layouts/partials/head/favicons.html
Normal file
5
layouts/partials/head/favicons.html
Normal file
@ -0,0 +1,5 @@
|
||||
<meta name="theme-color" content="{{ $.Site.Params.themeColor }}">
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="{{ "apple-touch-icon.png" | absURL }}">
|
||||
<link rel="icon" type="image/png" sizes="32x32" href="{{ "favicon-32x32.png" | absURL }}">
|
||||
<link rel="icon" type="image/png" sizes="16x16" href="{{ "favicon-16x16.png" | absURL }}">
|
||||
<link rel="manifest" href="{{ "site.webmanifest" | absURL }}">
|
11
layouts/partials/head/head.html
Normal file
11
layouts/partials/head/head.html
Normal file
@ -0,0 +1,11 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="x-ua-compatible" content="ie=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
<script src="https://code.iconify.design/1/1.0.7/iconify.min.js"></script>
|
||||
{{ block "head/resource-hints" . }}{{ partial "head/resource-hints.html" . }}{{ end }}
|
||||
{{ block "head/stylesheet" . }}{{ partial "head/stylesheet.html" . }}{{ end }}
|
||||
{{ block "head/seo" . }}{{ partial "head/seo.html" . }}{{ end }}
|
||||
{{ block "head/favicons" . }}{{ partial "head/favicons.html" . }}{{ end }}
|
||||
{{ block "head/script-header" . }}{{ partial "head/script-header.html" . }}{{ end }}
|
||||
</head>
|
93
layouts/partials/head/opengraph.html
Normal file
93
layouts/partials/head/opengraph.html
Normal file
@ -0,0 +1,93 @@
|
||||
<meta property="og:title" content="{{ .Title }}">
|
||||
<meta property="og:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
|
||||
<meta property="og:type" content="{{ if .IsPage }}article{{ else }}website{{ end }}">
|
||||
{{ if $.Scratch.Get "paginator" -}}
|
||||
{{ $paginator := .Paginate (where .Site.RegularPages.ByDate.Reverse "Section" "blog" ) -}}
|
||||
<meta property="og:url" content="{{ .Paginator.URL | absURL }}">
|
||||
{{ else -}}
|
||||
<meta property="og:url" content="{{ .Permalink }}">
|
||||
{{ end -}}
|
||||
|
||||
{{ with $.Params.images -}}
|
||||
{{ range first 6 . -}}
|
||||
<meta property="og:image" content="{{ $.Permalink }}{{ . }}">
|
||||
{{ end -}}
|
||||
{{ else -}}
|
||||
{{ $images := $.Resources.ByType "image" -}}
|
||||
{{ $featured := $images.GetMatch "*feature*" -}}
|
||||
{{ if not $featured -}}
|
||||
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" }}
|
||||
{{ end -}}
|
||||
{{ with $featured -}}
|
||||
<meta property="og:image" content="{{ $featured.Permalink }}"/>
|
||||
{{ else -}}
|
||||
{{ with $.Site.Params.images -}}
|
||||
<meta property="og:image" content="{{ index . 0 | absURL }}"/>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $iso8601 := "2006-01-02T15:04:05-07:00" -}}
|
||||
{{ if .IsPage -}}
|
||||
{{ if not .PublishDate.IsZero -}}
|
||||
<meta property="article:published_time" {{ .PublishDate.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||
{{ else if not .Date.IsZero -}}
|
||||
<meta property="article:published_time" {{ .Date.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||
{{ end -}}
|
||||
{{ if not .Lastmod.IsZero -}}
|
||||
<meta property="article:modified_time" {{ .Lastmod.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||
{{ end -}}
|
||||
{{ else -}}
|
||||
{{ if not .Date.IsZero -}}
|
||||
<meta property="og:updated_time" {{ .Lastmod.Format $iso8601 | printf "content=%q" | safeHTMLAttr }}>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ with .Params.audio -}}
|
||||
<meta property="og:audio" content="{{ . }}">
|
||||
{{ end -}}
|
||||
{{ with .Params.locale -}}
|
||||
<meta property="og:locale" content="{{ . }}">
|
||||
{{ end -}}
|
||||
{{ with .Site.Params.title -}}
|
||||
<meta property="og:site_name" content="{{ . }}">
|
||||
{{ end -}}
|
||||
{{ with .Params.videos -}}
|
||||
{{ range . -}}
|
||||
<meta property="og:video" content="{{ . | absURL }}">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $permalink := .Permalink -}}
|
||||
{{ $siteSeries := .Site.Taxonomies.series -}}
|
||||
{{ with .Params.series -}}
|
||||
{{ range $name := . -}}
|
||||
{{ $series := index $siteSeries $name -}}
|
||||
{{ range $page := first 6 $series.Pages -}}
|
||||
{{ if ne $page.Permalink $permalink -}}
|
||||
<meta property="og:see_also" content="{{ $page.Permalink }}">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ if .IsPage -}}
|
||||
{{ range .Site.Authors -}}
|
||||
{{ with .Social.facebook -}}
|
||||
<meta property="article:author" content="https://www.facebook.com/{{ . }}">
|
||||
{{ end -}}
|
||||
{{ with .Site.Social.facebook -}}
|
||||
<meta property="article:publisher" content="https://www.facebook.com/{{ . }}">
|
||||
{{ end -}}
|
||||
<meta property="article:section" content="{{ .Section }}">
|
||||
{{ with .Params.tags -}}
|
||||
{{ range first 6 . -}}
|
||||
<meta property="article:tag" content="{{ . }}">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ with .Site.Social.facebook_admin -}}
|
||||
<meta property="fb:admins" content="{{ . }}">
|
||||
{{ end -}}
|
2
layouts/partials/head/resource-hints.html
Normal file
2
layouts/partials/head/resource-hints.html
Normal file
@ -0,0 +1,2 @@
|
||||
<link rel="preload" as="font" href="{{ "fonts/vendor/jost/jost-v4-latin-regular.woff2" | absURL }}" type="font/woff2" crossorigin>
|
||||
<link rel="preload" as="font" href="{{ "fonts/vendor/jost/jost-v4-latin-700.woff2" | absURL }}" type="font/woff2" crossorigin>
|
0
layouts/partials/head/script-header.html
Normal file
0
layouts/partials/head/script-header.html
Normal file
50
layouts/partials/head/seo.html
Normal file
50
layouts/partials/head/seo.html
Normal file
@ -0,0 +1,50 @@
|
||||
{{ if eq .Kind "404" -}}
|
||||
<meta name="robots" content="noindex, follow">
|
||||
{{ else -}}
|
||||
{{ with .Params.robots -}}
|
||||
<meta name="robots" content="{{ . }}">
|
||||
{{ else -}}
|
||||
<meta name="robots" content="index, follow">
|
||||
<meta name="googlebot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
||||
<meta name="bingbot" content="index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ if .IsHome -}}
|
||||
<title>{{ .Site.Params.title }} {{ .Site.Params.titleSeparator }} {{ .Site.Params.titleAddition }}</title>
|
||||
{{ else -}}
|
||||
<title>{{ .Title }} {{ .Site.Params.titleSeparator }} {{ .Site.Params.title }}</title>
|
||||
{{ end -}}
|
||||
|
||||
{{ with .Description -}}
|
||||
<meta name="description" content="{{ . }}">
|
||||
{{ else -}}
|
||||
<meta name="description" content="{{ .Site.Params.description }}">
|
||||
{{ end -}}
|
||||
|
||||
{{ if $.Scratch.Get "paginator" }}
|
||||
<link rel="canonical" href="{{ .Paginator.URL | absURL }}">
|
||||
{{ if .Paginator.HasPrev -}}
|
||||
<link rel="prev" href="{{ .Paginator.Prev.URL | absURL }}">
|
||||
{{ end -}}
|
||||
{{ if .Paginator.HasNext -}}
|
||||
<link rel="next" href="{{ .Paginator.Next.URL | absURL }}">
|
||||
{{ end -}}
|
||||
{{ else -}}
|
||||
<link rel="canonical" href="{{ .Permalink }}">
|
||||
{{ end -}}
|
||||
|
||||
{{ partial "head/twitter_cards.html" . }}
|
||||
<meta name="twitter:site" content="@{{ .Site.Params.twitterSite }}">
|
||||
<meta name="twitter:creator" content="@{{ .Site.Params.twitterCreator }}">
|
||||
|
||||
{{ partial "head/opengraph.html" . }}
|
||||
<meta property="article:publisher" content="https://www.facebook.com/{{ .Site.Params.facebookPublisher }}">
|
||||
<meta property="article:author" content="https://www.facebook.com/{{ .Site.Params.facebookAuthor }}">
|
||||
<meta property="og:locale" content="{{ .Site.Params.ogLocale }}">
|
||||
|
||||
{{ range .AlternativeOutputFormats -}}
|
||||
<link rel="{{ .Rel }}" type="{{ .MediaType.Type }}" href="{{ .Permalink | safeURL }}">
|
||||
{{ end -}}
|
||||
|
||||
{{ partial "head/structured-data.html" . }}
|
109
layouts/partials/head/structured-data.html
Normal file
109
layouts/partials/head/structured-data.html
Normal file
@ -0,0 +1,109 @@
|
||||
{{ if .IsHome -}}
|
||||
{{ if eq .Site.Params.schemaType "Organization" -}}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Organization",
|
||||
"url": "{{ "/" | absURL }}",
|
||||
"name": "{{ .Site.Params.title }}",
|
||||
"logo": "{{ "/" | absURL }}{{ .Site.Params.schemaLogo }}",
|
||||
"sameAs": [
|
||||
"{{ .Site.Params.schemaTwitter | safeURL }}",
|
||||
"{{ .Site.Params.schemaLinkedIn | safeURL }}",
|
||||
"{{ .Site.Params.schemaGitHub | safeURL }}"
|
||||
]
|
||||
}
|
||||
</script>
|
||||
{{ end -}}
|
||||
{{ if eq .Site.Params.schemaType "Person" -}}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Person",
|
||||
"url": "{{ "/" | absURL }}",
|
||||
"name": "{{ .Site.Params.title }}",
|
||||
"sameAs": [
|
||||
"{{ .Site.Params.schemaTwitter | safeURL }}",
|
||||
"{{ .Site.Params.schemaLinkedIn | safeURL }}",
|
||||
"{{ .Site.Params.schemaGitHub | safeURL }}"
|
||||
]
|
||||
}
|
||||
</script>
|
||||
{{ end -}}
|
||||
{{ if .Site.Params.siteLinksSearchBox -}}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebSite",
|
||||
"url": "{{ "/" | absURL }}",
|
||||
"potentialAction": {
|
||||
"@type": "SearchAction",
|
||||
"target": "{{ "/" | absURL }}?q={search_term_string}",
|
||||
"query-input": "required name=search_term_string"
|
||||
}
|
||||
}
|
||||
</script>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ if .IsPage -}}
|
||||
{{ if eq .Section .Site.Params.schemaSection -}}
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "Article",
|
||||
"mainEntityOfPage": {
|
||||
"@type": "WebPage",
|
||||
"@id": "{{ .Permalink }}"
|
||||
},
|
||||
"headline": "{{ .Title }}",
|
||||
"image": [{{ range $i, $e := .Params.images }}{{ if $i }}, {{ end }}{{ printf "%s%s" $.Permalink $e }}{{ end }}],
|
||||
"datePublished": "{{ .PublishDate.Format "2006-01-02T15:04:05CET" }}",
|
||||
"dateModified": "{{ .Lastmod.Format "2006-01-02T15:04:05CET" }}",
|
||||
"author": {
|
||||
"@type": "{{ .Site.Params.schemaType }}",
|
||||
"name": "{{ .Site.Params.title }}"
|
||||
},
|
||||
"publisher": {
|
||||
"@type": "{{ .Site.Params.schemaType }}",
|
||||
"name": "{{ .Site.Params.title }}",
|
||||
{{ if eq .Site.Params.schemaType "Organization" -}}
|
||||
"logo": {
|
||||
"@type": "ImageObject",
|
||||
"url": "{{ "/" | absURL }}{{ .Site.Params.schemaLogo }}"
|
||||
}
|
||||
{{ end -}}
|
||||
},
|
||||
"description": "{{ .Description }}"
|
||||
}
|
||||
</script>
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
{{ $dot := . -}}
|
||||
{{ $dot.Scratch.Set "path" "" -}}
|
||||
{{ $dot.Scratch.Set "breadcrumb" slice -}}
|
||||
|
||||
{{ $url := replace .Permalink ( printf "%s" .Site.BaseURL) "" -}}
|
||||
{{ $.Scratch.Add "path" .Site.BaseURL -}}
|
||||
|
||||
{{ $.Scratch.Add "breadcrumb" (slice (dict "url" .Site.BaseURL "name" "home" "position" 1 )) -}}
|
||||
{{ range $index, $element := split $url "/" -}}
|
||||
{{ $dot.Scratch.Add "path" $element -}}
|
||||
{{ $.Scratch.Add "path" "/" -}}
|
||||
{{ if ne $element "" -}}
|
||||
{{ $.Scratch.Add "breadcrumb" (slice (dict "url" ($.Scratch.Get "path") "name" . "position" (add $index 2))) -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "http://schema.org",
|
||||
"@type": "BreadcrumbList",
|
||||
"itemListElement": [{{ range $.Scratch.Get "breadcrumb" }}{{ if ne .position 1 }},{{ end }}{
|
||||
"@type": "ListItem",
|
||||
"position": {{ .position }},
|
||||
"name": "{{ .name | humanize | title }}",
|
||||
"item": "{{ .url }}"
|
||||
}{{ end }}]
|
||||
}
|
||||
</script>
|
11
layouts/partials/head/stylesheet.html
Normal file
11
layouts/partials/head/stylesheet.html
Normal file
@ -0,0 +1,11 @@
|
||||
{{ if eq (hugo.Environment) "development" -}}
|
||||
{{ $options := (dict "targetPath" "main.css" "enableSourceMap" true "includePaths" (slice "node_modules")) -}}
|
||||
{{ $css := resources.Get "scss/app.scss" | toCSS $options -}}
|
||||
<link rel="stylesheet" href="{{ $css.Permalink }}">
|
||||
{{ else -}}
|
||||
{{ $options := (dict "targetPath" "main.css" "outputStyle" "compressed" "includePaths" (slice "node_modules")) -}}
|
||||
{{ $css := resources.Get "scss/app.scss" | toCSS $options | postCSS (dict "config" "config/postcss.config.js") -}}
|
||||
{{ $secureCSS := $css | resources.Fingerprint "sha512" -}}
|
||||
<link rel="stylesheet" href="{{ $secureCSS.Permalink }}" integrity="{{ $secureCSS.Data.Integrity }}" crossorigin="anonymous">
|
||||
{{ end -}}
|
||||
<noscript><style>img.lazyload { display: none; }</style></noscript>
|
33
layouts/partials/head/twitter_cards.html
Normal file
33
layouts/partials/head/twitter_cards.html
Normal file
@ -0,0 +1,33 @@
|
||||
{{ with $.Params.images -}}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="{{ $.Permalink }}{{ index . 0 }}">
|
||||
{{ else -}}
|
||||
{{ $images := $.Resources.ByType "image" -}}
|
||||
{{ $featured := $images.GetMatch "*feature*" -}}
|
||||
{{ if not $featured -}}
|
||||
{{ $featured = $images.GetMatch "{*cover*,*thumbnail*}" -}}
|
||||
{{ end -}}
|
||||
{{ with $featured -}}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="{{ $featured.Permalink }}">
|
||||
{{ else -}}
|
||||
{{ with $.Site.Params.images -}}
|
||||
<meta name="twitter:card" content="summary_large_image">
|
||||
<meta name="twitter:image" content="{{ index . 0 | absURL }}">
|
||||
{{ else -}}
|
||||
<meta name="twitter:card" content="summary">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
{{ end -}}
|
||||
|
||||
<meta name="twitter:title" content="{{ .Title }}">
|
||||
<meta name="twitter:description" content="{{ with .Description }}{{ . }}{{ else }}{{if .IsPage}}{{ .Summary }}{{ else }}{{ with .Site.Params.description }}{{ . }}{{ end }}{{ end }}{{ end }}">
|
||||
{{ with .Site.Social.twitter -}}
|
||||
<meta name="twitter:site" content="@{{ . }}">
|
||||
{{ end -}}
|
||||
|
||||
{{ range .Site.Authors -}}
|
||||
{{ with .twitter -}}
|
||||
<meta name="twitter:creator" content="@{{ . }}">
|
||||
{{ end -}}
|
||||
{{ end -}}
|
39
layouts/partials/header/header.html
Normal file
39
layouts/partials/header/header.html
Normal file
@ -0,0 +1,39 @@
|
||||
<div class="header-bar fixed-top"></div>
|
||||
<header class="navbar fixed-top navbar-expand-md navbar-light">
|
||||
<div class="container">
|
||||
<input class="menu-btn order-0" type="checkbox" id="menu-btn">
|
||||
<label class="menu-icon d-md-none" for="menu-btn"><span class="navicon"></span></label>
|
||||
<a class="navbar-brand order-1 order-md-0 mr-auto" href="{{ "/" | absURL }}">{{ .Site.Params.Title }}</a>
|
||||
<button id="mode" class="btn btn-link order-2 order-md-4" type="button" aria-label="Toggle mode">
|
||||
<span class="toggle-dark"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-moon"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path></svg></span>
|
||||
<span class="toggle-light"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-sun"><circle cx="12" cy="12" r="5"></circle><line x1="12" y1="1" x2="12" y2="3"></line><line x1="12" y1="21" x2="12" y2="23"></line><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line><line x1="1" y1="12" x2="3" y2="12"></line><line x1="21" y1="12" x2="23" y2="12"></line><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line></svg></span>
|
||||
</button>
|
||||
<ul class="navbar-nav social-nav order-3 order-md-5">
|
||||
{{ range .Site.Menus.social -}}
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ .URL | absURL }}">{{ .Pre | safeHTML }}<span class="ml-2 sr-only">{{ .Name | safeHTML }}</span></a>
|
||||
</li>
|
||||
{{ end -}}
|
||||
</ul>
|
||||
<div class="collapse navbar-collapse order-4 order-md-1">
|
||||
<ul class="navbar-nav main-nav mr-auto order-5 order-md-2">
|
||||
{{- $current := . -}}
|
||||
{{ range .Site.Menus.main -}}
|
||||
{{- $active := or ($current.IsMenuCurrent "main" .) ($current.HasMenuCurrent "main" .) -}}
|
||||
{{- $active = or $active (eq .Name $current.Title) -}}
|
||||
{{- $active = or $active (and (eq .Name "Docs") (eq $current.Section "docs")) -}}
|
||||
{{- $active = or $active (and (eq .Name "Guides") (eq $current.Section "guides")) -}}
|
||||
{{- $active = or $active (and (eq .Name "Blog") (eq $current.Section "blog" "authors")) -}}
|
||||
<li class="nav-item{{ if $active }} active{{ end }}">
|
||||
<a class="nav-link" href="{{ .URL | absURL }}">{{ .Name }}</a>
|
||||
</li>
|
||||
{{ end -}}
|
||||
</ul>
|
||||
<div class="break order-6 d-md-none"></div>
|
||||
<form class="navbar-form flex-grow-1 order-7 order-md-3">
|
||||
<input id="userinput" class="form-control is-search" type="search" placeholder="Search docs..." aria-label="Search docs..." autocomplete="off">
|
||||
<div id="suggestions" class="shadow bg-white rounded"></div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
1
layouts/partials/main/blog-meta.html
Normal file
1
layouts/partials/main/blog-meta.html
Normal file
@ -0,0 +1 @@
|
||||
<p><small>Posted {{ .PublishDate.Format "January 2, 2006" }} by {{ if .Params.contributors -}}{{ range $index, $contributor := .Params.contributors }}{{ if gt $index 0 }} and {{ end }}<a class="stretched-link position-relative" href="{{ "/contributors/" | absURL }}{{ . | urlize }}/">{{ . }}</a>{{ end -}}{{ end -}} ‐ <strong>{{ .ReadingTime -}} min read</strong></small><p>
|
24
layouts/partials/main/docs-navigation.html
Normal file
24
layouts/partials/main/docs-navigation.html
Normal file
@ -0,0 +1,24 @@
|
||||
{{ if or .Prev .Next -}}
|
||||
<div class="docs-navigation d-flex justify-content-between">
|
||||
<!-- https://www.feliciano.tech/blog/custom-sort-hugo-single-pages/ -->
|
||||
{{ $pages := where site.RegularPages "Section" .Section -}}
|
||||
{{ with $pages.Next . -}}
|
||||
<a href="{{ .Permalink }}">
|
||||
<div class="card my-1">
|
||||
<div class="card-body py-2">
|
||||
⇐ {{ .Title }}
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{{ end -}}
|
||||
{{ with $pages.Prev . -}}
|
||||
<a class="ml-auto" href="{{ .Permalink }}">
|
||||
<div class="card my-1">
|
||||
<div class="card-body py-2">
|
||||
{{ .Title }} ⇒
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
{{ end -}}
|
||||
</div>
|
||||
{{ end -}}
|
1
layouts/partials/main/edit-page.html
Normal file
1
layouts/partials/main/edit-page.html
Normal file
@ -0,0 +1 @@
|
||||
<p class="edit-page"><a href="{{ .Site.Params.docsRepo }}/blob/master/content/{{ .File.Path }}"><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-edit-2"><path d="M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z"></path></svg>Edit this page on GitHub</a></p>
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user