Compare commits

..
44 Commits
Author SHA1 Message Date
AllienWorks 2630642b04 deploy: 9651e06842 2021-07-12 08:10:23 +00:00
cedricve 9b9ffb41ea deploy: 17ff73ae65 2021-07-06 17:50:11 +00:00
AllienWorks b5bacbfec2 deploy: 85a2798763 2021-06-21 13:12:09 +00:00
AllienWorks 684a86fb5f deploy: 0c0952d5e6 2021-06-21 10:06:20 +00:00
AllienWorks 2c0a25d40b deploy: 259c3a8d90 2021-06-21 07:57:59 +00:00
cedricve af2f67e238 deploy: b6a33bbd79 2021-06-20 20:05:26 +00:00
cedricve 24947afb0d deploy: 70ea43d83d 2021-06-20 19:57:30 +00:00
cedricve fb40152692 deploy: 6e4c6bca42 2021-06-18 20:56:41 +00:00
cedricve a51cf0752c deploy: cd81b9f13f 2021-06-18 20:53:51 +00:00
cedricve d4da3cd072 deploy: 30d1d64e20 2021-06-18 20:50:02 +00:00
cedricve 032ba86c9a deploy: e644164b96 2021-06-18 20:34:46 +00:00
AllienWorks 0e72a51245 deploy: fe414b7326 2021-06-18 18:18:10 +00:00
AllienWorks 6091861ccf deploy: aede637d87 2021-06-18 16:28:51 +00:00
AllienWorks 50e44b8bbe deploy: c73719f8d3 2021-06-18 16:21:02 +00:00
AllienWorks eb317ceb76 deploy: dee4e9f2cc 2021-06-17 17:04:24 +00:00
cedricve 2bda839259 deploy: a417f2e649 2021-06-11 14:21:03 +00:00
cedricve a48f6223fe deploy: 835e89581a 2021-06-11 13:16:25 +00:00
cedricve f851148297 deploy: 8a82424cd1 2021-06-11 13:08:39 +00:00
cedricve 2273279bb9 deploy: ed17b490e5 2021-06-11 11:24:02 +00:00
cedricve 2e6d2d5fd6 deploy: 1ad898e9a4 2021-06-11 11:22:31 +00:00
cedricve 08458793d0 deploy: 35b34beda1 2021-06-11 10:58:53 +00:00
cedricve 3aad210343 deploy: 9b7f74f02f 2021-06-10 19:14:51 +00:00
cedricve 84a9b9aecd deploy: 535220498a 2021-06-10 18:28:32 +00:00
cedricve 64352a863f deploy: f2919daeb8 2021-06-10 14:35:25 +00:00
cedricve 140be9887f deploy: a0812566c5 2021-06-10 12:19:51 +00:00
cedricve 03003ca756 deploy: 2ea4cff8d3 2021-06-10 11:14:10 +00:00
cedricve 7a62d700a0 deploy: b7dadd274a 2021-06-09 20:37:28 +00:00
cedricve 792ca1c114 deploy: 31182a1076 2021-06-09 19:00:16 +00:00
cedricve bcbfa28f63 deploy: da4ed7873c 2021-06-09 17:53:02 +00:00
cedricve 248f7a7320 deploy: 9b2c6b7f76 2021-06-09 12:38:25 +00:00
cedricve 108e7c2d3a deploy: 2ffa306600 2021-06-08 09:01:42 +00:00
cedricve a01706822e deploy: d363f56f39 2021-06-08 08:58:03 +00:00
cedricve 9abac1cff2 deploy: e0d957e5b3 2021-06-08 08:55:27 +00:00
cedricve e5c33430af deploy: eefe804f37 2021-06-08 08:51:09 +00:00
cedricve d40b7d9d14 deploy: 4f4529cf0e 2021-06-07 20:50:03 +00:00
Cédric Verstraeten eee897c2f6 Create CNAME 2021-06-07 22:10:24 +02:00
cedricve bddefe28b3 deploy: 7c1970ffdb 2021-06-07 20:09:59 +00:00
Cédric Verstraeten 78d14facc9 Create CNAME 2021-06-07 22:08:09 +02:00
cedricve 0d913eab91 deploy: ceae9510f4 2021-06-07 20:07:04 +00:00
Cédric Verstraeten 91fa4e5e19 Create CNAME 2021-06-07 22:04:37 +02:00
cedricve fe7bc97607 deploy: d628253c89 2021-06-07 20:03:13 +00:00
Cédric Verstraeten 899bf4a651 Update CNAME 2021-06-07 22:02:10 +02:00
Cédric Verstraeten 286b34d71d Create CNAME 2021-06-07 22:01:45 +02:00
cedricve f4f23b3a5e deploy: 66fb95b761 2021-06-07 19:53:22 +00:00
451 changed files with 1864 additions and 67141 deletions
-37
View File
@@ -1,37 +0,0 @@
name: github pages
on:
push:
branches:
- master
- develop
pull_request:
jobs:
deploy:
runs-on: ubuntu-18.04
steps:
- uses: actions/checkout@v2
with:
submodules: recursive # Fetch Hugo themes (true OR recursive)
fetch-depth: 1 # Fetch all history for .GitInfo and .Lastmod
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
extended: true
- name: Install npm packages
run: |
npm install # reads info from package.js
- name: Build
run: hugo --minify --environment production # uses default config/_default/* files + merges with config/production ones
- name: Deploy
uses: peaceiris/actions-gh-pages@v3
if: github.ref == 'refs/heads/move-to-hugo-doks'
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./public
-5
View File
@@ -1,5 +0,0 @@
node_modules
.DS_Store
.docz/
public/
resources/
-72
View File
@@ -1,72 +0,0 @@
image: monachus/hugo
variables:
GIT_SUBMODULE_STRATEGY: recursive
ARTIFACT_NAME: documentation
REPO_NAME: kerberos-io/${ARTIFACT_NAME}
REPO_DIR: gitlab.com/${REPO_NAME}
CI_VERSION: "1.0.${CI_PIPELINE_ID}"
DOCKER_HOST: tcp://localhost:2375
NAMESPACE: kerberos
REGISTRY: registry.gitlab.com/kerberos-io/${ARTIFACT_NAME}
stages:
- build-staging # Staging environment -> develop
- build-production # Production environment -> master
- docker # All branches
- kubernetes-staging # Staging environment -> develop
- kubernetes-production # Production environment -> master
build-staging:
image: node:10.22.1
stage: build-staging
script:
- yarn
- yarn run build-staging
artifacts:
paths:
- public
except:
- master
build-production:
image: node:10.22.1
stage: build-production
script:
- yarn
- yarn run build
artifacts:
paths:
- public
only:
- master
docker:
image: docker:stable
stage: docker
services:
- docker:18.09.7-dind
script:
- docker login -u ${gitlab_id} -p ${gitlab_token} $CI_REGISTRY
- docker build --build-arg gitlab_id=${gitlab_id} --build-arg gitlab_token=${gitlab_token} -t $CI_REGISTRY/$REPO_NAME:$CI_VERSION .
- docker push $CI_REGISTRY/$REPO_NAME:$CI_VERSION
kubernetes-staging:
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: kubernetes-staging
environment:
name: staging
script:
- kubectl patch deployment kerberos-documentation --patch="{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"kerberos-documentation\",\"image\":\"${REGISTRY}:${CI_VERSION}\"}]}}}}" -n kerberos-ecosystem
except:
- master
kubernetes-production:
image: registry.cn-hangzhou.aliyuncs.com/haoshuwei24/kubectl:1.16.6
stage: kubernetes-production
environment:
name: production
script:
- kubectl patch deployment kerberos-documentation --patch="{\"spec\":{\"template\":{\"spec\":{\"containers\":[{\"name\":\"kerberos-documentation\",\"image\":\"${REGISTRY}:${CI_VERSION}\"}]}}}}" -n kerberos-ecosystem
only:
- master
-5
View File
@@ -1,5 +0,0 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
-12
View File
@@ -1,12 +0,0 @@
<?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>
-4
View File
@@ -1,4 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding" addBOMForNewFiles="with NO BOM" />
</project>
-6
View File
@@ -1,6 +0,0 @@
<component name="InspectionProjectProfileManager">
<profile version="1.0">
<option name="myName" value="Project Default" />
<inspection_tool class="Eslint" enabled="true" level="WARNING" enabled_by_default="true" />
</profile>
</component>
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="JSX" />
</component>
</project>
-8
View File
@@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/documentation.iml" filepath="$PROJECT_DIR$/.idea/documentation.iml" />
</modules>
</component>
</project>
Generated
-6
View File
@@ -1,6 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
View File
+6
View File
@@ -0,0 +1,6 @@
<!doctype html><html lang=en-us><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"><link rel=stylesheet href=https://doc.kerberos.io/main.5aa8061fdddcae33bf9aae606a659f783fca649c2a6c915897a14d1088493ae547064045e7ca5a43d69061955d449757d1bcb708760ae71f478384770974e798.css integrity="sha512-WqgGH93crjO/mq5gamWfeD/KZJwqbJFYl6FNEIhJOuVHBkBF58paQ9aQYZVdRJdX0by3CHYK5x9Hg4R3CXTnmA==" crossorigin=anonymous><noscript><style>img.lazyload{display:none}</style></noscript><meta name=robots content="noindex, follow"><title>404 Page not found - Kerberos Docs</title><meta name=description content="Open and extensible video surveillance and analytics solution for everyone at any location."><link rel=canonical href=https://doc.kerberos.io/404.html><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="/doks.png"><meta name=twitter:title content="404 Page not found"><meta name=twitter:description content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta name=twitter:site content="@kerberosio"><meta name=twitter:creator content="@kerberosio"><meta property="og:title" content="404 Page not found"><meta property="og:description" content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta property="og:type" content="website"><meta property="og:url" content="/404.html"><meta property="og:image" content="/doks.png"><meta property="og:site_name" content="Kerberos Docs"><meta property="article:publisher" content="https://www.facebook.com/"><meta property="article:author" content="https://www.facebook.com/"><meta property="og:locale" content="en_US"><script type=application/ld+json>{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/doc.kerberos.io\/"},{"@type":"ListItem","position":3,"name":"404.Html","item":"https:\/\/doc.kerberos.io\/\/404.html\/"}]}</script><meta name=theme-color content="#fff"><link rel=apple-touch-icon sizes=180x180 href=https://doc.kerberos.io/favicons/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://doc.kerberos.io/favicons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://doc.kerberos.io/favicons/favicon-16x16.png><link rel=manifest href=https://doc.kerberos.io/site.webmanifest><script async defer data-domain=doc.kerberos.io src=https://plausible.kerberos.io/js/plausible.js></script></head><body class=error404><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 me-auto" href=https://doc.kerberos.io/><img src=https://doc.kerberos.io/images/kerberos-logo.svg class=logo>
Kerberos Docs</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 1111.21 3 7 7 0 0021 12.79z"/></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"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></span></button><div class="collapse navbar-collapse order-4 order-md-1"><ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class=nav-item><a class=nav-link href=https://kerberos.io>Homepage</a></li></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><div class="wrap container" role=document><div class=content><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></div></div><footer class="footer text-muted"><div class=container><div class=row><div class="col-lg-6 order-last order-lg-first"><ul class="navbar-nav social-nav"><li class=copyright>&copy;&nbsp;2014&ndash;2021
<a href=https://kerberos.io>Kerberos.io</a></li><li class=nav-item><a class=link href=https://twitter.com/kerberosio title=Twitter><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 01-3.14 1.53 4.48 4.48.0 00-7.86 3v1A10.66 10.66.0 013 4s-4 9 5 13a11.64 11.64.0 01-7 2c9 5 20 0 20-11.5a4.5 4.5.0 00-.08-.83A7.72 7.72.0 0023 3z"/></svg><span class="ms-2 visually-hidden">Twitter</span></a></li><li class=nav-item><a class=link href=https://github.com/kerberos-io title=GitHub><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 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg><span class="ms-2 visually-hidden">GitHub</span></a></li><li class=nav-item><a class=link href=https://www.reddit.com/r/kerberos_io/ title=Reddit><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-message-circle"><path d="M21 11.5a8.38 8.38.0 01-.9 3.8A8.5 8.5.0 0112.5 20a8.38 8.38.0 01-3.8-.9L3 21l1.9-5.7A8.38 8.38.0 014 11.5a8.5 8.5.0 014.7-7.6 8.38 8.38.0 013.8-.9h.5a8.48 8.48.0 018 8v.5z"/></svg><span class="ms-2 visually-hidden">Reddit</span></a></li></ul></div><div class="col-lg-10 order-first order-lg-last text-lg-end"><ul class=list-inline><li class=list-inline-item>Learn more about</li><li class=list-inline-item><a href=https://kerberos.io/product/enterprise-agent/>Enterprise Agent</a></li><li class=list-inline-item><a href=https://kerberos.io/product/hub/>Hub</a></li><li class=list-inline-item><a href=https://kerberos.io/product/open-source/>Kerberos Opensource</a></li><li class=list-inline-item><a href=https://kerberos.io/product/vault/>Vault</a></li></ul></div></div></div></footer><script src=https://doc.kerberos.io/js/highlight.min.13bf6b39f28cd07b0780c0c154bf050bad1e7b73231c15e43b993504cca3fa814222ded3c525f429528451fe039a5078c71ae4d000486d26f9b920cc7db474da.js integrity="sha512-E79rOfKM0HsHgMDBVL8FC60ee3MjHBXkO5k1BMyj+oFCIt7TxSX0KVKEUf4DmlB4xxrk0ABIbSb5uSDMfbR02g==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/main.min.89223fc6eee34e2dc10266cff3c7fc87949c595388f775ec6e93132410cef77e5ff7f24a81db03c9b9eb6d2e6d75ea5a7d22945c574b65dfeb426f65af771230.js integrity="sha512-iSI/xu7jTi3BAmbP88f8h5ScWVOI93XsbpMTJBDO935f9/JKgdsDybnrbS5tdepafSKUXFdLZd/rQm9lr3cSMA==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/index.min.71e05784bf5441c378e8824d18e4b5a057f28cde2bd06f927216eb278586f7ea7d96309df4600474b3b928ef2b635a64248e2cf3a7a023136087ed4050162608.js integrity="sha512-ceBXhL9UQcN46IJNGOS1oFfyjN4r0G+SchbrJ4WG9+p9ljCd9GAEdLO5KO8rY1pkJI4s86egIxNgh+1AUBYmCA==" crossorigin=anonymous defer></script></body></html>
-243
View File
@@ -1,243 +0,0 @@
# 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.2.3](https://github.com/h-enk/doks/compare/v0.2.2...v0.2.3) (2021-04-02)
### Features
* update for netlify dev support ([10d0b45](https://github.com/h-enk/doks/commit/10d0b45203003a43727521dc9f5c35e655500309))
### Bug Fixes
* add class user added to img-simple shortcode ([bce8863](https://github.com/h-enk/doks/commit/bce8863269dd036146d5b6e447d67a23de70227d))
* drop npm workflow ([977bbda](https://github.com/h-enk/doks/commit/977bbdad82e8e21599e1fcfc0d93fc4e448cf2af))
### Dependencies
* bump versions to latest ([171293a](https://github.com/h-enk/doks/commit/171293a692450d45348be2870434db2a01578de9))
### [0.2.2](https://github.com/h-enk/doks/compare/v0.2.1...v0.2.2) (2021-03-26)
### Features
* update default highlight style ([28a3b39](https://github.com/h-enk/doks/commit/28a3b39fb9653db3f627cd55d610f28ed95860b3))
### Dependencies
* bump bootstrap to 5.0.0-beta3 ([f76e68e](https://github.com/h-enk/doks/commit/f76e68e832737c5fbc2421f164988767dddc5d99))
* bump versions to latest ([843e8d4](https://github.com/h-enk/doks/commit/843e8d45252bc596f8422fbce6938b38976373f9))
### [0.2.1](https://github.com/h-enk/doks/compare/v0.2.0...v0.2.1) (2021-03-18)
### Bug Fixes
* update package.json for npm workflow ([83b2c0e](https://github.com/h-enk/doks/commit/83b2c0e002e09aabc0f4b1e8fb30353151707d8b))
## [0.2.0](https://github.com/h-enk/doks/compare/v0.1.6...v0.2.0) (2021-03-18)
### Features
* add doks default style + examples ([ad91b05](https://github.com/h-enk/doks/commit/ad91b0523e6e240c98710bfedfd31342cb2389dc))
* add highlight.js as an option ([5180bd5](https://github.com/h-enk/doks/commit/5180bd53c6349372916907783fa9d0d3b22755af))
* add katex math typesetting ([253b938](https://github.com/h-enk/doks/commit/253b938a2e303a06d07488c6eae79c74442e56d6))
* add npm-package workflow ([e2ba008](https://github.com/h-enk/doks/commit/e2ba0086f780380fa171cfc2efaa1e868cfc5fc5))
* add npm-package workflow ([be4b68c](https://github.com/h-enk/doks/commit/be4b68c3d85a04251a9cdcbf1e5a3639b9c53144))
* add optional breadcrumb trail ([9c67aca](https://github.com/h-enk/doks/commit/9c67aca368f68ab916ff61caa36e0de69c43dec3))
* add table support in markdown ([5ee11a8](https://github.com/h-enk/doks/commit/5ee11a80e274d5e71ff7a4809516101e7e7ea214))
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([5f03d61](https://github.com/h-enk/doks/commit/5f03d61e81aff6f8a0a194cb23bcf821c3476481))
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([5099c47](https://github.com/h-enk/doks/commit/5099c4773195aab0a39bd160330bc25f3173c3b0))
* added options lazySizes, clipBoard, instantPage, flexSearch, and darkMode ([226f661](https://github.com/h-enk/doks/commit/226f661966ebb68f595541b31e6605d1c71efbdd))
* preload key katex fonts ([6c4d45d](https://github.com/h-enk/doks/commit/6c4d45d248ee9b58745105d91259fc2dfb9540b3))
* update bootstrap to 5.0.0-beta2 ([22afec7](https://github.com/h-enk/doks/commit/22afec709a1f11ef010d3436eca401cd4d5fd62f))
* update netlify.toml for netlify-cli use ([9581fc4](https://github.com/h-enk/doks/commit/9581fc4c44d2fdfe6b6093365fdbf5dcd2b869a2))
* update netlify.toml for netlify-cli use ([20bac2a](https://github.com/h-enk/doks/commit/20bac2a25bcdb3156120afd0d1b6543c0235f3c7))
### Bug Fixes
* linting error ([92798c9](https://github.com/h-enk/doks/commit/92798c92cd300bf1ed953c2a25bcbe0f8b24c1b2))
* script loading + script order ([89784d9](https://github.com/h-enk/doks/commit/89784d9656712ce31d83c038a87821f78aa07a3c))
* update content security header ([64efe3f](https://github.com/h-enk/doks/commit/64efe3ff00c5d315b43d40a4dc056ef7a3f88151))
* update content security header ([e0996b3](https://github.com/h-enk/doks/commit/e0996b36cbdc439bf0ad6595342c0f965f31c119))
* update content security header ([b54cae0](https://github.com/h-enk/doks/commit/b54cae0621211bce0754c17fdc302c96b6e50f6c))
* update content security header ([6d38761](https://github.com/h-enk/doks/commit/6d387614d584607d07c3f944ee55b8a2d6a4ce4e))
* update content security headers ([c70baa4](https://github.com/h-enk/doks/commit/c70baa448770d39d5c8f0842f742f5f8828a31ca))
* update content security headers ([8df0fdd](https://github.com/h-enk/doks/commit/8df0fdd8c311752de685ed10f7e8ec1d5d22f69c))
* update content security headers ([d1008a7](https://github.com/h-enk/doks/commit/d1008a736639e731679fd1e18eba4e6d437f00ad))
### Dependencies
* bump versions to latest ([e43f982](https://github.com/h-enk/doks/commit/e43f9821e49792e2e06f2e18ac419d58befc7723))
* bump versions to latest ([9cdd693](https://github.com/h-enk/doks/commit/9cdd69352bb02c12a6174cea5d7d6b330e47f1b5))
### [0.1.6](https://github.com/h-enk/doks/compare/v0.1.5...v0.1.6) (2021-03-01)
### Features
* add check commands ([85baab4](https://github.com/h-enk/doks/commit/85baab47ff06557051f373aa6afeb114fb40f50f))
* match active class docs menu on identifier ([7384cfe](https://github.com/h-enk/doks/commit/7384cfe8f1652b8053f077c964633d4ad12cf281))
* update package-lock.json ([8c73d74](https://github.com/h-enk/doks/commit/8c73d741fd789e829c35bf51cfc25c6d790b0dbb))
### Bug Fixes
* convert tabs to spaces ([6511531](https://github.com/h-enk/doks/commit/6511531c5e3f4ae1a9ad5e64972bd34c8e62cb0d))
* remove extra space in else statement ([03637e5](https://github.com/h-enk/doks/commit/03637e547ef7afa1dcea853746634df3161656db))
* update urls for deploy to github+ ([8c10161](https://github.com/h-enk/doks/commit/8c101613fa488518152675bb0916e74d444df1e2))
### Documentation
* update faq ([555fd17](https://github.com/h-enk/doks/commit/555fd17bb21d94764688f8f0c818d352183244b7))
* update faq ([f751f3f](https://github.com/h-enk/doks/commit/f751f3ff02b736b36854e396b2536a9fef311c50))
* update readme ([f32c60f](https://github.com/h-enk/doks/commit/f32c60f1ff6fe7f898efa7dc5ff97bd4b60148a6))
* update requirement sections ([22a8bfb](https://github.com/h-enk/doks/commit/22a8bfbc87b20ae4d03b733b32f1e1f956e3671c))
* update requirements sections ([3767e8b](https://github.com/h-enk/doks/commit/3767e8bfa0893d9bb827c35b5b2694c023e78ceb))
* update requirements sections ([8e14777](https://github.com/h-enk/doks/commit/8e14777805500abbf7cbc840a4a19c7635ce5b96))
* update requirements sections ([49f803e](https://github.com/h-enk/doks/commit/49f803e7e3d905d01ff00f5d02357defb885fe7e))
* update requirements sections ([4791d5a](https://github.com/h-enk/doks/commit/4791d5a0ba464c57f74d3bd6736985830f0d9e71))
* update requirements sections ([5321e8d](https://github.com/h-enk/doks/commit/5321e8d3c1094074c2503c3895579ebe32846176))
* update requirements sections ([920776a](https://github.com/h-enk/doks/commit/920776a6d55167cd8ce40f2edfcc37f2841e3def))
* update requirements sections ([3420ae9](https://github.com/h-enk/doks/commit/3420ae9c55dedd5424bf7f2f32a3cf1dacaf4e6f))
* update showcase link ([3e00037](https://github.com/h-enk/doks/commit/3e00037d78b3e980bdbdf005a5c13d9a39d2fa3d))
### Dependencies
* bump autoprefixer, bootstrap, stylelint, and netlify-lambda to latest versions ([955cb46](https://github.com/h-enk/doks/commit/955cb46a5d4936ce355c28a4a2a8b5c025a8ca1c))
* bump deps to latest ([05de29a](https://github.com/h-enk/doks/commit/05de29ace1e735840aea04f90924c2c833b00b86))
* bump postcss-purgecss to 4.0.0 + eslint to 7.18.0 ([44e90f2](https://github.com/h-enk/doks/commit/44e90f2bc944693967c6e3864673d8f21ee07648))
* bump versions to latest ([857906c](https://github.com/h-enk/doks/commit/857906c69b2d9779abd158dd88c1057f84c8eb6f))
* bump versions to latest ([5e52acb](https://github.com/h-enk/doks/commit/5e52acbc35db30267867e1b0981c8f4299bdf51d))
* bump versions to latest ([3087ae0](https://github.com/h-enk/doks/commit/3087ae0f521a780d38ccbd0afbb07e23fa9fad7d))
### [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))
View File
-76
View File
@@ -1,76 +0,0 @@
# 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
-7
View File
@@ -1,7 +0,0 @@
FROM nginx:alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY public /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
-21
View File
@@ -1,21 +0,0 @@
MIT License
Copyright (c) 2020-2021 Gridsome, 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.
-40
View File
@@ -1,40 +0,0 @@
# Kerberos Documentation
And so it began. The documentation of the entire Kerberos.io ecosystem.
Master branch
> [doc.kerberos.io](https://doc.kerberos.io)
Develop branch
> [staging.doc.kerberos.live](https://staging.doc.kerberos.live)
## Development
Install dependencies
$ yarn install
Run Hugo dev server with auto compile of assets
$ yarn start
## Formatting notes
**YouTube/Vimeo**
Using Hugo's built-in video shortcodes ([source](https://gohugo.io/content-management/shortcodes/#vimeo)):
{{< vimeo id="146022717" class="responsive-video ratio-16by10" title="My vimeo video" >}}
{{< youtube id="w7Ft2ymGmfc" title="A New Hugo Site in Under Two Minutes" >}}
- keep the `responsive-video` class intact
- use `ratio-16by10` or `ratio-4by3` class to fix aspect ratio if video is different than 16:9
## TODO
- config/_default/params.toml
- [ ] open:graph image
- [ ] schema logo
- nice to haves:
- [ ] transform colors to CSS vars (and use for easier dark mode)
View File
+1
View File
@@ -0,0 +1 @@
# redirects for Netlify - https://www.netlify.com/docs/redirects/
-13
View File
@@ -1,13 +0,0 @@
---
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
View File
@@ -1,8 +0,0 @@
---
title: "{{ replace .Name "-" " " | title }}"
description: ""
date: {{ .Date }}
lastmod: {{ .Date }}
draft: true
images: []
---
-16
View File
@@ -1,16 +0,0 @@
---
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 }}" >}}
-3
View File
@@ -1,3 +0,0 @@
function random(){
}
-2
View File
@@ -1,2 +0,0 @@
import 'bootstrap/dist/js/bootstrap.bundle.min.js'
// import 'bootstrap/dist/js/bootstrap.min.js'
-18
View File
@@ -1,18 +0,0 @@
import Clipboard from 'clipboard';
var clipboard = new Clipboard('.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);
});
-12
View File
@@ -1,12 +0,0 @@
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');
}
-24
View File
@@ -1,24 +0,0 @@
import hljs from 'highlight.js/lib/core';
import javascript from 'highlight.js/lib/languages/javascript';
import json from 'highlight.js/lib/languages/json';
import bash from 'highlight.js/lib/languages/bash';
import htmlbars from 'highlight.js/lib/languages/htmlbars';
import ini from 'highlight.js/lib/languages/ini';
import yaml from 'highlight.js/lib/languages/yaml';
import markdown from 'highlight.js/lib/languages/markdown';
hljs.registerLanguage('javascript', javascript);
hljs.registerLanguage('json', json);
hljs.registerLanguage('bash', bash);
hljs.registerLanguage('html', htmlbars);
hljs.registerLanguage('ini', ini);
hljs.registerLanguage('toml', ini);
hljs.registerLanguage('yaml', yaml);
hljs.registerLanguage('md', markdown);
document.addEventListener('DOMContentLoaded', () => {
document.querySelectorAll('pre code').forEach((block) => {
hljs.highlightElement(block);
});
});
-146
View File
@@ -1,146 +0,0 @@
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 := .Site.Pages -}}
{
id: {{ $index }},
href: "{{ .RelPermalink | relURL }}",
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;
suggestions.appendChild(entry);
});
while(childs.length > len){
suggestions.removeChild(childs[i])
}
}
function accept_suggestion(){
while(suggestions.lastChild){
suggestions.removeChild(suggestions.lastChild);
}
return false;
}
}());
-1
View File
@@ -1 +0,0 @@
import 'instant.page';
-1
View File
@@ -1 +0,0 @@
import 'lazysizes';
View File
-11
View File
@@ -1,11 +0,0 @@
exports.handler = (event, context, callback) => {
callback (null, {
statusCode: 200,
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
message: 'Hi from Lambda.',
}),
});
}
-127
View File
@@ -1,127 +0,0 @@
:root {
// ---------- COLORS ---------- //
/*
Usage:
- regular colors: "color: var(--hub);"
- transparent colors: "color: hsla(var(--hub-hsl), 0.3);" (mind the "-hsl" suffix in variable)
*/
--hub: hsl(278, 30%, 48%);
--hub-hsl: 278, 30%, 48%;
--hub-darker: hsl(278, 34%, 31%);
--hub-darker-hsl: 278, 34%, 31%;
--oss: hsl(2, 48%, 39%);
--oss-hsl: 2, 48%, 39%;
--oss-darker: hsl(2, 52%, 25%);
--oss-darker-hsl: 2, 52%, 25%;
--enterprise: hsl(162, 24%, 38%);
--enterprise-hsl: 162, 24%, 38%;
--enterprise-darker: hsl(162, 26%, 26%);
--enterprise-darker-hsl: 162, 26%, 26%;
--vault: hsl(229, 25%, 45%);
--vault-hsl: 229, 25%, 45%;
--vault-darker: hsl(230, 28%, 31%);
--vault-darker-hsl: 230, 28%, 31%;
--secondary: hsl(0, 3%, 41%);
--secondary-hsl: 0, 3%, 41%;
--secondary-darker: hsl(0, 3%, 48%);
--secondary-darker-hsl: 0, 3%, 48%;
--text: hsl(0, 3%, 15%);
--text-hsl: 0, 3%, 15%;
--text-muted: hsl(0, 3%, 41%);
--text-muted-hsl: 0, 3%, 41%;
--text-light: hsl(0, 5%, 63%);
--text-light-hsl: 0, 5%, 63%;
--card: hsl(0, 0%, 100%);
--card-hsl: 0, 0%, 100%;
--card-muted: hsl(0, 0%, 98%);
--card-muted-hsl: 0, 0%, 98%;
--info: hsl(205, 74%, 53%);
--info-hsl: 205, 74%, 53%;
--success: hsl(131, 31%, 52%);
--success-hsl: 131, 31%, 52%;
--warning: hsl(47, 86%, 47%);
--warning-hsl: 47, 86%, 47%;
--alert: hsl(2, 58%, 48%);
--alert-hsl: 2, 58%, 48%;
--bg: hsl(0, 5%, 93%);
--bg-hsl: 0, 5%, 93%;
--bg-muted: hsl(0, 4%, 89%);
--bg-muted-hsl: 0, 4%, 89%;
--bg-white: hsl(0, 0%, 100%);
--bg-white-hsl: 0, 0%, 100%;
body.dark {
--hub: hsl(200, 93%, 77%);
--hub-hsl: 200, 93%, 77%;
--text-muted: hsl(210, 14%, 89%);
--text-muted-hsl: 210, 14%, 89%;
--card: hsl(206, 8%, 18%);
--card-hsl: 206, 8%, 18%;
--card-muted: hsl(206, 8%, 16%);
--card-muted-hsl: 206, 8%, 16%;
--bg: hsl(210, 11%, 15%);
--bg-hsl: 210, 11%, 15%;
}
// ---------- UI ---------- //
--radius: 4px;
// default padding for cards ("V" for vertical, "H" for horizontal)
--card-paddingV: #{size(2)}; // interpolate to embed the result in CSS var
--card-paddingH: #{size(1)};
@include break(t) {
--card-paddingV: #{size(2)};
--card-paddingH: #{size(2)};
}
@include break(d) {
--card-paddingV: #{size(3)};
--card-paddingH: #{size(3)};
}
}
// ========== PLACEHOLDERS ========== //
/*
Usage:
@extend %box-shadow;
*/
%card-header-shadow {
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.07);
}
%card-footer-shadow {
box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.07) inset;
}
%box-shadow {
box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.03);
}
%box-shadow-bigger {
box-shadow: 0px 4px 34px rgba(0, 0, 0, 0.04), 0px 3px 4px rgba(0, 0, 0, 0.1);
border-radius: var(--radius);
}
%modal-shadow {
box-shadow: 0px 4px 34px rgba(0, 0, 0, 0.24), 0px 3px 4px rgba(0, 0, 0, 0.2);
}
%tfx {
transition: all 0.15s;
@media (prefers-reduced-motion) {
transition: none;
}
}
-147
View File
@@ -1,147 +0,0 @@
/*! doc.kerberos.io v2.0.0 | MIT License */
// ----- Basics & Typography ----- //
body {
font-family: 'Inter', sans-serif; // use regular Inter font by default..
@supports (font-variation-settings: normal) {
font-family: 'Inter var', sans-serif; // ..but if supported, use variable Inter font instead (all-in-one)
}
color: var(--text-muted);
background: var(--bg);
}
h1, h2, h3, h4, h5, h6 {
font-weight: 600;
color: var(--text);
body.dark & {
color: var(--bg-white);
}
}
h1 {
font-size: 24px;
line-height: size(3);
@include break(t) {
font-size: 30px;
line-height: size(4);
}
@include break(w) {
font-size: 36px;
}
}
h2 {
font-size: 24px;
line-height: size(2.5);
@include break(w) {
font-size: 30px;
line-height: size(4);
}
}
h3 {
font-size: 20px;
line-height: size(2);
@include break(w) { font-size: 24px; line-height: size(3); }
}
h4 {
font-size: 16px;
line-height: size(2);
@include break(w) { font-size: 18px; line-height: size(3); }
}
p {
font-size: 15px;
line-height: size(2);
margin: 0 0 size(1);
@include break(w) {
font-size: 16px;
line-height: size(2.5);
}
&.lead {
color: var(--text-light);
margin: size(-1) 0 size(2);
font-size: 18px;
line-height: size(2);
@include break(d) {
margin: size(-1.5) 0 size(2);
}
@include break(w) {
font-size: 22px;
line-height: size(3);
}
}
}
strong {
font-weight: 550;
color: var(--text);
body.dark & {
color: var(--bg-white);
}
}
li {
font-size: 15px;
line-height: size(2);
@include break(w) {
font-size: 16px;
line-height: size(2.5);
}
}
hr {
margin: 2.5rem 0;
opacity: 0.1;
}
img {
max-width: 100%;
}
// ----- UI ----- //
.responsive-video {
position: relative;
padding-bottom: 56.25%;
height: 0;
overflow: hidden;
margin: 2rem 0 0;
border-radius: var(--radius);
&.ratio-16by10 { padding-bottom: 62.5%; }
&.ratio-4by3 { padding-bottom: 75%; }
iframe {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
}
// ----- Layout ----- //
.navbar {
.navbar-nav {
.nav-link {
color: var(--text-muted);
}
}
}
.footer {
box-shadow: 0 -4px 34px rgba(0, 0, 0, 0.04), 0 -3px 4px rgba(0, 0, 0, 0.1);
background: var(--card);
// copyright with social links
.navbar-nav {
margin-top: 1rem;
@include break-from(992px) { margin: 0; }
.copyright {
margin-right: 1rem;
}
}
li { margin-bottom: 0; }
}
-35
View File
@@ -1,35 +0,0 @@
/** Import Bootstrap functions */
@import "bootstrap/scss/functions";
/** Import theme variables */
@import "common/variables";
/** Import Bootstrap */
@import "bootstrap/scss/bootstrap";
/** Import highlight.js */
// @import "highlight.js/scss/dracula";
/** Import theme styles */
@import "common/fonts";
@import "common/global";
@import "common/dark";
@import "components/doks";
// @import "components/syntax";
@import "components/code";
@import "components/alerts";
@import "components/buttons";
@import "components/comments";
@import "components/forms";
@import "components/images";
@import "components/search";
@import "components/tables";
@import "layouts/footer";
@import "layouts/header";
@import "layouts/pages";
@import "layouts/posts";
@import "layouts/sidebar";
/* Kerberos tweaks & branding */
@import "kerberos-config";
@import "kerberos";
-330
View File
@@ -1,330 +0,0 @@
/** 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%);
$navbar-dark-color: $body-color-dark;
$navbar-dark-hover-color: $link-color-dark;
$navbar-dark-active-color: $link-color-dark;
/** Theme styles */
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 .btn-outline-primary {
@include button-outline-variant($button-color-dark, $button-color-dark);
color: $link-color-dark;
}
body.dark .btn-outline-primary:hover {
color: $body-bg-dark;
}
/*
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-600;
border: 1px solid $gray-800;
}
body.dark .form-control {
color: $gray-500;
}
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 pre code::-webkit-scrollbar-thumb {
background: $border-dark;
}
body.dark code:not(.hljs) {
background: $body-overlay-dark;
color: $body-color-dark;
}
body.dark pre code:hover {
scrollbar-width: thin;
scrollbar-color: $border-dark transparent;
}
body.dark pre code::-webkit-scrollbar-thumb:hover {
background: $border-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;
}
body.dark table {
@extend .table-dark;
}
body.dark .copy-status::after {
content: "Copy";
display: block;
color: $body-color-dark;
}
body.dark .copy-status:hover::after {
content: "Copy";
display: block;
color: $link-color-dark;
}
body.dark .copy-status:focus::after,
body.dark .copy-status:active::after {
content: "Copied";
display: block;
color: $link-color-dark;
}
-52
View File
@@ -1,52 +0,0 @@
/*
Self-hosted fonts
*/
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
font-display: swap;
src: url("fonts/Inter-Regular.woff2?v=3.18") format("woff2"),
url("fonts/Inter-Regular.woff?v=3.18") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
font-display: swap;
src: url("fonts/Inter-Medium.woff2?v=3.18") format("woff2"),
url("fonts/Inter-Medium.woff?v=3.18") format("woff");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
font-display: swap;
src: url("fonts/Inter-SemiBold.woff2?v=3.18") format("woff2"),
url("fonts/Inter-SemiBold.woff?v=3.18") format("woff");
}
/* -------------------------------------------------------
Variable font.
Usage:
body {
font-family: 'Inter', sans-serif; // use regular Inter font by default..
@supports (font-variation-settings: normal) {
font-family: 'Inter var', sans-serif; // ..but if supported, use variable Inter font instead (all-in-one)
}
}
*/
@font-face {
font-family: 'Inter var';
font-weight: 100 900;
font-display: swap;
font-style: normal;
font-named-instance: 'Regular';
src: url("fonts/Inter-roman.var.woff2?v=3.18") format("woff2");
}
-236
View File
@@ -1,236 +0,0 @@
.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: 2.5rem 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.875rem + 1.5vw);
}
*/
a:hover,
a:focus {
text-decoration: underline;
}
a.btn:hover,
a.btn:focus {
text-decoration: none;
}
.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: 2px solid var(--bg-muted);
}
@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 {
@extend %box-shadow-bigger;
padding-bottom: 3rem;
order: 1;
background: var(--card-muted);
border-radius: var(--radius);
@include break(d) {
padding: 0 size(4) size(2);
margin: size(4) 0;
}
a {
font-weight: 500;
}
}
.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;
}
}
.navbar a:hover,
.navbar a:focus {
text-decoration: none;
}
#TableOfContents ul {
padding-left: 0;
list-style: none;
}
::selection {
background: rgba(212, 53, 159, 0.2);
}
.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;
}
-226
View File
@@ -1,226 +0,0 @@
/*
Override SASS' handling of HSL(a) color functions, don't touch it and let CSS handle it itself.
This will enable the trick with variable alpha channels for CSS color variables (see below).
*/
@function hsla($args...) { @return #{'hsla(#{$args})'}; }
/*
Function for defining (not only) vertical rhythm by multiplies of 12px
Examples:
width: size(2); (equals to "width: 24px;")
line-height: size(3); (equals to "line-height: 36px;")
*/
@function size($multiplier) {
@return $multiplier * 12px;
}
// ----- Mixins ----- //
// Bootstrap breakpoints
$gap: 32px;
$tablet: 768px;
$desktop: 992px;
$widescreen: 1200px;
$fullhd: 1400px;
// Responsive mixin (Bulma's)
@mixin break($media) {
@if $media == t {
@media only screen and (min-width: $tablet) { @content; }
}
@else if $media == d {
@media only screen and (min-width: $desktop) { @content; }
}
@else if $media == w {
@media only screen and (min-width: $widescreen) { @content; }
}
@else if $media == f {
@media only screen and (min-width: $fullhd) { @content; }
}
}
// Custom responsivity (px-based, for when default breakpoints aren't enough)
@mixin break-from($size) {
// Usage: @include break-from(741px) { }
@media only screen and (min-width: $size) { @content; }
}
// Orientation mixin for landscape/portrait
@mixin orientation($orientation) {
// @include orientation(landscape) { ... }
// @include orientation(portrait) { ... }
@media only screen and (orientation: $orientation) { @content; }
}
// @include gradient (<top-color>, <bottom-color>);
@mixin gradient($top, $bottom) {
background: $top;
background: -moz-linear-gradient(top, $top 0%, $bottom 100%);
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,$top), color-stop(100%,$bottom));
background: -webkit-linear-gradient(top, $top 0%,$bottom 100%);
background: -o-linear-gradient(top, $top 0%,$bottom 100%);
background: -ms-linear-gradient(top, $top 0%,$bottom 100%);
background: linear-gradient(to bottom, $top 0%,$bottom 100%);
}
// 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;
// Options
//
// Quickly modify global styling by enabling or disabling optional features.
$enable-caret: true;
$enable-rounded: true;
$enable-shadows: false;
$enable-gradients: false;
$enable-transitions: true;
$enable-reduced-motion: true;
$enable-smooth-scroll: true;
$enable-grid-classes: true;
$enable-button-pointers: true;
$enable-rfs: true;
$enable-validation-icons: true;
$enable-negative-margins: true;
$enable-deprecation-messages: true;
$enable-important-utilities: true;
/** 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;
// Links
//
// Style anchor elements.
$link-color: $primary;
$link-decoration: none;
// Grid containers
//
// Define the maximum width of `.container` for different screen sizes.
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1240px,
xxl: 1320px
);
@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: null;
$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: $spacer;
$alert-padding-x: $spacer * 1.5;
$alert-margin-bottom: 0;
$alert-border-radius: 0;
$alert-link-font-weight: $headings-font-weight;
$alert-border-width: 0;
$alert-bg-scale: 0;
$alert-border-scale: 0;
$alert-color-scale: 0;
-63
View File
@@ -1,63 +0,0 @@
.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;
}
-91
View File
@@ -1,91 +0,0 @@
.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) {
.doks-clipboard {
position: relative;
float: right;
}
.btn-clipboard {
position: absolute;
top: 1rem;
right: 0.25rem;
z-index: 10;
display: block;
padding: 0.25rem 0.5rem;
font-size: $font-size-sm;
}
}
.copy-status::after {
content: "Copy";
display: block;
color: $body-color;
}
.copy-status:hover::after {
content: "Copy";
display: block;
color: $pink-500;
}
.copy-status:focus::after,
.copy-status:active::after {
content: "Copied";
display: block;
color: $pink-500;
}
-62
View File
@@ -1,62 +0,0 @@
pre,
code,
kbd,
samp {
font-family: $font-family-monospace;
font-size: $font-size-sm;
border-radius: $border-radius;
}
code {
background: $beige;
color: $black;
padding: 0.25rem 0.5rem;
}
pre {
margin: 2rem 0;
}
pre code {
display: block;
overflow-x: auto;
line-height: $line-height-base;
padding: 1.25rem 1.5rem;
tab-size: 4;
scrollbar-width: thin;
scrollbar-color: transparent transparent;
}
.hljs {
padding: 1.25rem 1.5rem;
}
@include media-breakpoint-down(sm) {
pre,
code,
kbd,
samp {
border-radius: 0;
}
pre {
margin: 2rem -1.5rem;
}
}
pre code::-webkit-scrollbar {
height: 5px;
}
pre code::-webkit-scrollbar-thumb {
background: $gray-200;
}
pre code:hover {
scrollbar-width: thin;
scrollbar-color: $gray-200 transparent;
}
pre code::-webkit-scrollbar-thumb:hover {
background: $gray-200;
}
-30
View File
@@ -1,30 +0,0 @@
.comment-list {
@extend .list-unstyled;
}
.comment-list ol {
list-style: none;
}
.comment-form p {
@extend .form-group !optional;
}
.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;
}
-62
View File
@@ -1,62 +0,0 @@
/*
Doks — based on Ascetic by (c) Ivan Sagalaev <Maniac@SoftwareManiacs.Org>
*/
.hljs {
display: block;
overflow-x: auto;
padding: 0.5em;
background: $beige;
color: $body-color;
}
.hljs-string,
.hljs-variable,
.hljs-template-variable,
.hljs-symbol,
.hljs-bullet,
.hljs-section,
.hljs-addition,
.hljs-attribute,
.hljs-link {
color: $pink-500;
}
.hljs-comment,
.hljs-quote,
.hljs-meta,
.hljs-deletion {
color: #888;
}
.hljs-keyword,
.hljs-selector-tag,
.hljs-section,
.hljs-name,
.hljs-type,
.hljs-strong {
font-weight: bold;
}
.hljs-emphasis {
font-style: italic;
}
body.dark .hljs {
background: $body-overlay-dark;
color: $body-color-dark;
}
body.dark .hljs-string,
body.dark .hljs-variable,
body.dark .hljs-template-variable,
body.dark .hljs-symbol,
body.dark .hljs-bullet,
body.dark .hljs-section,
body.dark .hljs-addition,
body.dark .hljs-attribute,
body.dark .hljs-link {
color: $blue-300;
}
-19
View File
@@ -1,19 +0,0 @@
/** Search form */
.search-form {
@extend .form-inline !optional;
}
.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
View File
@@ -1,48 +0,0 @@
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
View File
@@ -1,75 +0,0 @@
.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
View File
@@ -1,131 +0,0 @@
/*!
* 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;
}
-5
View File
@@ -1,5 +0,0 @@
table {
@extend .table;
margin: 3rem 0;
}
-33
View File
@@ -1,33 +0,0 @@
.footer {
border-top: 1px solid $gray-200;
padding-top: 1.125rem;
padding-bottom: 1.125rem;
body.dark & {
background: #212529;
}
a {
color: var(--text);
&:hover, &:focus {
color: var(--hub);
text-decoration: none;
body.dark & {
text-decoration: underline;
}
}
}
}
.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;
}
}
-281
View File
@@ -1,281 +0,0 @@
.banner .nav li {
@extend .nav-item;
}
.banner .nav a {
@extend .nav-link;
}
.navbar-text {
margin-left: 1rem;
}
.navbar-brand {
font-weight: 600;
font-size: 18px;
.logo {
width: size(2);
height: size(2);
margin: 0 size(0.5);
position: relative;
top: -1px;
@include break(t) { margin-left: 0; }
@include break(d) { width: size(2.5); height: size(2.5); }
}
}
.navbar-light .navbar-brand,
.navbar-light .navbar-brand:hover,
.navbar-light .navbar-brand:active {
color: $body-color;
}
.navbar-light .navbar-nav .active .nav-link {
color: $primary;
}
@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 {
@extend %box-shadow-bigger;
background-color: hsla(var(--card-hsl), 0.95);
margin-top: 6px;
backdrop-filter: blur(4px);
}
.header-bar {
border-top: 6px solid;
border-image-source: linear-gradient(90deg, rgb(132, 85, 159) 0%, rgb(178, 85, 180) 58.33%, rgb(148, 55, 52) 100%);
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;
}
-62
View File
@@ -1,62 +0,0 @@
.docs-content > h2[id]::before,
.docs-content > h3[id]::before,
.docs-content > h4[id]::before {
display: block;
height: 6rem;
margin-top: -6rem;
content: "";
}
.docs-content figure {
&.stretch img {
width: 100%;
}
figcaption {
text-align: center;
font-weight: 400;
padding: 10px 0 0 0;
p {
font-size: 14px;
opacity: 0.7;
padding: 0 size(2);
line-height: size(2);
}
}
}
.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;
}
.breadcrumb {
margin-top: 2.25rem;
font-size: $font-size-base;
}
-28
View File
@@ -1,28 +0,0 @@
.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;
}
-139
View File
@@ -1,139 +0,0 @@
.docs-links,
.docs-toc {
@extend %tfx;
scrollbar-width: thin;
scrollbar-color: var(--bg) var(--bg);
ul {
li { // sidebar & TOC links
margin: 0;
line-height: 24px;
}
}
}
.docs-links,
.docs-toc {
&::-webkit-scrollbar { width: 5px; }
&::-webkit-scrollbar-track { background: transparent; }
&::-webkit-scrollbar-thumb { background: transparent; }
&:hover {
scrollbar-width: thin;
scrollbar-color: var(--text-light) var(--bg-muted);
&::-webkit-scrollbar-track { background: var(--bg-muted); }
&::-webkit-scrollbar-thumb { background: var(--text-light); border-radius: var(--radius); }
}
}
.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 break(d) {
margin: 1.125rem size(3) 0.75rem 0;
padding: 1.375rem 0 0 0;
}
}
.docs-links h3:not(:first-child) {
border-top: 2px solid var(--bg-muted);
}
a.docs-link,
.page-links a {
@extend %tfx;
color: var(--text-muted);
display: block;
padding: size(0.5) size(1); //0.125rem 0;
font-size: $font-size-base;
line-height: size(2);
border-radius: var(--radius);
@include break(d) {
margin: 0 size(3) 0 0;
}
&:hover {
color: var(--text);
background: var(--bg-muted);
text-decoration: none;
body.dark & {
color: var(--bg-white);
background: hsla(var(--bg-muted-hsl), 0.05);
}
}
&.active {
text-decoration: none;
color: var(--hub);
font-weight: 500;
background: hsla(var(--hub-hsl), 0.1);
body.dark & {
color: hsl(200.4, 93.2%, 77.1%);
background: hsla(200.4, 93.2%, 77.1%, 0.1);
}
}
}
.page-links { // TOC
a {
margin: 0;
font-size: 13px;
line-height: size(1.5);
font-weight: 500;
color: var(--text);
padding: size(0.5) size(1);
}
li {
margin-top: 0.375rem;
padding-top: 0.375rem;
ul {
li {
padding-left: 1rem;
padding-top: 0.125rem;
a {
font-weight: 400;
color: var(--text-muted);
}
}
}
}
}
/*
.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;
}
View File
-17
View File
@@ -1,17 +0,0 @@
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'
]
}
}
]
]
};
-3
View File
@@ -1,3 +0,0 @@
docker build -t documentation .
docker tag documentation kerberos/documentation:1.14
docker push kerberos/documentation:1.14
+6
View File
@@ -0,0 +1,6 @@
<!doctype html><html lang=en-us><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"><link rel=stylesheet href=https://doc.kerberos.io/main.5aa8061fdddcae33bf9aae606a659f783fca649c2a6c915897a14d1088493ae547064045e7ca5a43d69061955d449757d1bcb708760ae71f478384770974e798.css integrity="sha512-WqgGH93crjO/mq5gamWfeD/KZJwqbJFYl6FNEIhJOuVHBkBF58paQ9aQYZVdRJdX0by3CHYK5x9Hg4R3CXTnmA==" crossorigin=anonymous><noscript><style>img.lazyload{display:none}</style></noscript><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"><title>Categories - Kerberos Docs</title><meta name=description content="Open and extensible video surveillance and analytics solution for everyone at any location."><link rel=canonical href=https://doc.kerberos.io/categories/><meta name=twitter:card content="summary_large_image"><meta name=twitter:image content="/doks.png"><meta name=twitter:title content="Categories"><meta name=twitter:description content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta name=twitter:site content="@kerberosio"><meta name=twitter:creator content="@kerberosio"><meta property="og:title" content="Categories"><meta property="og:description" content="Open and extensible video surveillance and analytics solution for everyone at any location."><meta property="og:type" content="website"><meta property="og:url" content="/categories/"><meta property="og:image" content="/doks.png"><meta property="og:site_name" content="Kerberos Docs"><meta property="article:publisher" content="https://www.facebook.com/"><meta property="article:author" content="https://www.facebook.com/"><meta property="og:locale" content="en_US"><link rel=alternate type=application/rss+xml href=https://doc.kerberos.io/categories/index.xml><script type=application/ld+json>{"@context":"http://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/doc.kerberos.io\/"},{"@type":"ListItem","position":3,"name":"Categories","item":"https:\/\/doc.kerberos.io\/\/categories\/"}]}</script><meta name=theme-color content="#fff"><link rel=apple-touch-icon sizes=180x180 href=https://doc.kerberos.io/favicons/apple-touch-icon.png><link rel=icon type=image/png sizes=32x32 href=https://doc.kerberos.io/favicons/favicon-32x32.png><link rel=icon type=image/png sizes=16x16 href=https://doc.kerberos.io/favicons/favicon-16x16.png><link rel=manifest href=https://doc.kerberos.io/site.webmanifest><script async defer data-domain=doc.kerberos.io src=https://plausible.kerberos.io/js/plausible.js></script></head><body class="categories list"><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 me-auto" href=https://doc.kerberos.io/><img src=https://doc.kerberos.io/images/kerberos-logo.svg class=logo>
Kerberos Docs</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 1111.21 3 7 7 0 0021 12.79z"/></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"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></span></button><div class="collapse navbar-collapse order-4 order-md-1"><ul class="navbar-nav main-nav me-auto order-5 order-md-2"><li class=nav-item><a class=nav-link href=https://kerberos.io>Homepage</a></li></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><div class="wrap container" role=document><div class=content><div class="row justify-content-center"><div class="col-md-12 col-lg-10 col-xl-8"><article><h1 class=text-center>Categories</h1><div class=text-center></div><div class=card-list></div></article></div></div></div></div><footer class="footer text-muted"><div class=container><div class=row><div class="col-lg-6 order-last order-lg-first"><ul class="navbar-nav social-nav"><li class=copyright>&copy;&nbsp;2014&ndash;2021
<a href=https://kerberos.io>Kerberos.io</a></li><li class=nav-item><a class=link href=https://twitter.com/kerberosio title=Twitter><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 01-3.14 1.53 4.48 4.48.0 00-7.86 3v1A10.66 10.66.0 013 4s-4 9 5 13a11.64 11.64.0 01-7 2c9 5 20 0 20-11.5a4.5 4.5.0 00-.08-.83A7.72 7.72.0 0023 3z"/></svg><span class="ms-2 visually-hidden">Twitter</span></a></li><li class=nav-item><a class=link href=https://github.com/kerberos-io title=GitHub><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 00-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44.0 0020 4.77 5.07 5.07.0 0019.91 1S18.73.65 16 2.48a13.38 13.38.0 00-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07.0 005 4.77 5.44 5.44.0 003.5 8.55c0 5.42 3.3 6.61 6.44 7A3.37 3.37.0 009 18.13V22"/></svg><span class="ms-2 visually-hidden">GitHub</span></a></li><li class=nav-item><a class=link href=https://www.reddit.com/r/kerberos_io/ title=Reddit><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentcolor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-message-circle"><path d="M21 11.5a8.38 8.38.0 01-.9 3.8A8.5 8.5.0 0112.5 20a8.38 8.38.0 01-3.8-.9L3 21l1.9-5.7A8.38 8.38.0 014 11.5a8.5 8.5.0 014.7-7.6 8.38 8.38.0 013.8-.9h.5a8.48 8.48.0 018 8v.5z"/></svg><span class="ms-2 visually-hidden">Reddit</span></a></li></ul></div><div class="col-lg-10 order-first order-lg-last text-lg-end"><ul class=list-inline><li class=list-inline-item>Learn more about</li><li class=list-inline-item><a href=https://kerberos.io/product/enterprise-agent/>Enterprise Agent</a></li><li class=list-inline-item><a href=https://kerberos.io/product/hub/>Hub</a></li><li class=list-inline-item><a href=https://kerberos.io/product/open-source/>Kerberos Opensource</a></li><li class=list-inline-item><a href=https://kerberos.io/product/vault/>Vault</a></li></ul></div></div></div></footer><script src=https://doc.kerberos.io/js/highlight.min.13bf6b39f28cd07b0780c0c154bf050bad1e7b73231c15e43b993504cca3fa814222ded3c525f429528451fe039a5078c71ae4d000486d26f9b920cc7db474da.js integrity="sha512-E79rOfKM0HsHgMDBVL8FC60ee3MjHBXkO5k1BMyj+oFCIt7TxSX0KVKEUf4DmlB4xxrk0ABIbSb5uSDMfbR02g==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/main.min.89223fc6eee34e2dc10266cff3c7fc87949c595388f775ec6e93132410cef77e5ff7f24a81db03c9b9eb6d2e6d75ea5a7d22945c574b65dfeb426f65af771230.js integrity="sha512-iSI/xu7jTi3BAmbP88f8h5ScWVOI93XsbpMTJBDO935f9/JKgdsDybnrbS5tdepafSKUXFdLZd/rQm9lr3cSMA==" crossorigin=anonymous defer></script><script src=https://doc.kerberos.io/index.min.71e05784bf5441c378e8824d18e4b5a057f28cde2bd06f927216eb278586f7ea7d96309df4600474b3b928ef2b635a64248e2cf3a7a023136087ed4050162608.js integrity="sha512-ceBXhL9UQcN46IJNGOS1oFfyjN4r0G+SchbrJ4WG9+p9ljCd9GAEdLO5KO8rY1pkJI4s86egIxNgh+1AUBYmCA==" crossorigin=anonymous defer></script></body></html>
+1
View File
@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Categories on</title><link>https://doc.kerberos.io/categories/</link><description>Recent content in Categories on</description><generator>Hugo -- gohugo.io</generator><language>en-US</language><atom:link href="https://doc.kerberos.io/categories/index.xml" rel="self" type="application/rss+xml"/></channel></rss>
-88
View File
@@ -1,88 +0,0 @@
baseurl = "/"
canonifyURLs = false
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.parser]
autoHeadingID = true
autoHeadingIDType = "github"
[markup.goldmark.parser.attribute]
block = true
title = true
[markup.goldmark.renderer]
unsafe = true
[markup.highlight]
codeFences = false
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"
[RelPermalinks]
blog = "/blog/:title/"
[module]
[[module.mounts]]
source = "assets"
target = "assets"
[[module.mounts]]
source = "static"
target = "static"
[[module.mounts]]
source = "node_modules/flexsearch"
target = "assets/js/vendor/flexsearch"
-86
View File
@@ -1,86 +0,0 @@
[[docs]]
name = "Prologue"
weight = 10
identifier = "prologue"
url = "/prologue/"
[[opensource]]
name = "Opensource"
weight = 11
identifier = "opensource"
url = "/opensource/"
[[agent]]
name = "Agent"
weight = 12
identifier = "agent"
url = "/agent/"
[[enterprise]]
name = "Enterprise"
weight = 13
identifier = "enterprise"
url = "/enterprise/"
[[factory]]
name = "Factory"
weight = 14
identifier = "factory"
url = "/factory/"
[[vault]]
name = "Vault"
weight = 15
identifier = "vault"
url = "/vault/"
[[hub]]
name = "Hub"
weight = 16
identifier = "hub"
url = "/hub/"
[[main]]
name = "Homepage"
url = "https://kerberos.io"
weight = 12
[[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/kerberosio"
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/kerberos-io"
post = "v0.1.0"
weight = 20
[[social]]
name = "Reddit"
pre = "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" class=\"feather feather-message-circle\"><path d=\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\"></path></svg>"
url = "https://www.reddit.com/r/kerberos_io/"
weight = 30
[[footer]]
name = "Agent"
url = "https://kerberos.io/product/open-source/"
weight = 10
[[footer]]
name = "Factory"
url = "https://kerberos.io/product/enterprise-agent/"
weight = 11
[[footer]]
name = "Vault"
url = "https://kerberos.io/product/vault/"
weight = 12
[[footer]]
name = "Hub"
url = "https://kerberos.io/product/hub/"
weight = 13
-58
View File
@@ -1,58 +0,0 @@
# Meta Data for SEO
## Homepage
title = "Kerberos Docs"
titleSeparator = "-"
titleAddition = "Video surveillance for everyone"
description = "Open and extensible video surveillance and analytics solution for everyone at any location."
## Open Graph + Twitter Cards
images = ["doks.png"]
twitterSite = "kerberosio"
twitterCreator = "kerberosio"
#facebookAuthor = "verlinde.henk"
#facebookPublisher = "verlinde.henk"
ogLocale = "en_US"
## JSON-LD
schemaType = "Organization"
schemaLogo = "logo-doks.png"
schemaTwitter = "https://twitter.com/kerberosio"
#schemaLinkedIn = "https://www.linkedin.com/in/henkverlinde/"
schemaGitHub = "https://github.com/kerberos-io"
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 = "Powered by <a href=\"https://www.github.com/\">GitHub</a>, <a href=\"https://gohugo.io/\">Hugo</a>, and <a href=\"https://getdoks.org/\">Doks</a>"
copyrightSince = 2014
# Alert
alert = false
alertText = "Like Doks? <a class=\"alert-link\" href=\"https://github.com/h-enk/doks/stargazers\">Star on GitHub</a>. Thanks!</a>"
# Edit Page
docsRepo = "https://github.com/kerberos-io/documentation"
editPage = true
[options]
lazySizes = true
clipBoard = true
instantPage = true
flexSearch = true
darkMode = true
bootStrapJs = false
breadCrumb = false
highLight = true
-2
View File
@@ -1,2 +0,0 @@
baseurl = "https://doks-next.netlify.app/"
canonifyURLs = true
-32
View File
@@ -1,32 +0,0 @@
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',
'table',
'thead',
'tbody',
'tr',
'th',
'td',
...whitelister([
'./assets/scss/components/_doks.scss',
'./assets/scss/components/_code.scss',
'./assets/scss/components/_search.scss',
'./assets/scss/common/_dark.scss',
'./assets/scss/_kerberos-config.scss',
'./assets/scss/_kerberos.scss',
]),
],
}),
],
}
-4
View File
@@ -1,4 +0,0 @@
baseurl = "https://doc.kerberos.io/"
canonifyURLs = true
docsRepo = "https://github.com/kerberos-io/documentation"
editPage = true
-1
View File
@@ -1 +0,0 @@
env = "production"
-4
View File
@@ -1,4 +0,0 @@
baseurl = "https://staging.doc.kerberos.live/"
canonifyURLs = true
docsRepo = "https://github.com/kerberos-io/documentation"
editPage = true
-1
View File
@@ -1 +0,0 @@
env = "staging"
-48
View File
@@ -1,48 +0,0 @@
---
title: "Introduction"
description: "And so it began. The ecosystem of Kerberos.io"
lead: "And so it began. The ecosystem of Kerberos.io"
date: 2020-10-06T08:48:57+00:00
lastmod: 2020-10-06T08:48:57+00:00
draft: false
images: []
menu:
docs:
parent: "prologue"
weight: 100
toc: true
---
The **Kerberos.io** project, pronounced as `/kuh buh ruhs dot ai o/`, is a video analytics and video management platform, which was initiated back in 2014. Over the years it has evolved into a stable and feature-rich video platform, which is used for management and analytics such as machine learning.
To set the expectations of what is possible and how, it's recommended to have a look [at the architectures page](/prologue/deployments/) to find the best, or most reasonable architecture for your use case.
## Kerberos.io
Many people are confused, and don't understand why this project is called Kerberos.io. If you've been in the IT world for a while you will notice that Kerberos is already used for the authentication protocol [Kerberos](https://en.wikipedia.org/wiki/Kerberos_(protocol)).
We believe that the name Kerberos.io makes sense for this project as well, with a strong emphasize on the suffix **.io**, which stands for input and output devices (e.g. any type of camera). Kerberos.io can be seen as a kind of security protocol for images and recordings.
## Why Kerberos.io
Kerberos.io initiated as a side project, due to inspiration and motivation in the space of video analytics, computer vision and machine learning. Its first focus was video surveillance only, as nowadays burglary or attacks are very common in this world.
Due to this, our first mission is to provide every human being on this planet with a solution, a video platform, to protect its families, friends, homes or anything else which you think is important.
Our second mission is to make this video platform affordable and Open Source (MIT), and develop it in such a way, that it's using the latest technologies, to create a seamless, never-seen and delicious user experience.
While we moved forward our third mission is to scale, and make Kerberos reach far beyond a traditional video platform. With the rise of [Kerberos Enterprise Suite](/enterprise/first-things-first), we now focus on large scale deployments (covering thousands of cameras), and video analytics through machine learning.
## What is Kerberos.io
Kerberos.io is a video analytics and monitoring platform, that is focussing on both end-consumer and enterprises. It comes with modular solutions to support small deployments, a couple of camera streams and larger deployments, with multiple sites and thousands of camera streams.
{{< figure src="kerberos-agent-edge.svg" alt="A Kerberos Agent is monitoring a single camera stream." caption="A Kerberos Agent is monitoring a single camera stream." class="stretch">}}
With Kerberos.io you start small with one or more [Kerberos Agents](/opensource/first-things-first/), and grow over time while introducing more and more components like [Kerberos Factory](/factory/first-things-first/), [Kerberos Vault](/vault/first-things-first/) and [Kerberos Hub](/hub/first-things-first/), which is also referred to as the [Kerberos Enterprise Suite](/enterprise/first-things-first/). Kerberos.io is shipped through the concept of container technology such as Docker and Kubernetes, and implements the ideas of bring your own cloud, bring your own storage and bring your own technology.
{{< figure src="./kerberos-global.svg" alt="A scalable video platform for an ever-growing video landscape." caption="A scalable video platform for an ever-growing video landscape." class="stretch">}}
The whole idea is that any solution you will find at Kerberos.io, is extensible and allows you to integrate by default. For example, you decide where to deploy the solutions (edge/cloud/hybrid), what storage you want (edge/cloud/hybrid), how to integrate it with other third-party solutions, etc. Every solution you'll find in the Kerberos.io space, ships Swagger APIs by default, and will allow you to build your own applications or integrations.
Machine learning and Artificial Intelligence is a critical component of the Kerberos.io ecosystem. Within Kerberos Vault you can integrate your own machine learning models, and run them at scale. [Learn more about how we support](/vault/machine-learning/) machine learning use cases.
-9
View File
@@ -1,9 +0,0 @@
---
title: "Agent"
description: ""
lead: ""
date: 2020-10-06T08:49:15+00:00
lastmod: 2020-10-06T08:49:15+00:00
draft: false
images: []
---
-53
View File
@@ -1,53 +0,0 @@
---
title: "Announcement"
description: "A Kerberos Agent with more features, better performance, and great UX."
lead: "A Kerberos Agent with more features, better performance, and great UX."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
agent:
parent: "agent"
weight: 300
toc: true
---
Kerberos Agent is the next generation of Kerberos.io, and is the successor of Kerberos Open Source (v1/v2). More specifically it will replace and merge the [machinery](https://github.com/kerberos-io/machinery) and [web](https://github.com/kerberos-io/web) repositories. A switch in technologies and architecture has been made. Kerberos Agent is still under active development, and not yet released. The progress can be followed at the [develop branch](https://github.com/kerberos-io/opensource/tree/develop) and [project overview](https://github.com/kerberos-io/opensource/projects/1).
## What is changing?
Bottom line, we are rebuilding the project from scratch using a different technology stack. We are saying goodbye to C++, PHP (Laravel), BackboneJS and saying hello to Golang and React. Despite the technology changes, we are also changing the architecture which was put in place a couple of years ago. The biggest change is to run the show inside a single repository, and no longer over seperate repos (machinery and web). Read more about this in the FAQ.
{{< figure src="opensource-to-agent.svg" alt="The Kerberos Agent is a complete new rewrite of the Kerberos Open Source version 1 and 2." caption="The Kerberos Agent is a complete new rewrite of the Kerberos Open Source version 1 and 2." class="stretch">}}
## FAQ
### 1. Why a mono repo?
We have noticed in the past (v1 and v2) that splitting the repositories (machinery and web), created a lot of confusion within our community. People didn't understand the different versions and so on. This caused a lack of collaboration, and made it impossible for some people to collaborate and contribute.
Having a mono repo, which is well-organised, simplifies the entry point for new people who would like to use, understand and/or contribute to Kerberos Agent.
### 2. Why a change in technologies?
In previous versions (v1 and v2) we used technologies like C++, PHP and BackboneJS. 7 years ago this was still acceptable, however time has changed and new technologies such as React and Golang became very popular.
Due to previous reason we have decided to rebuild the Kerberos Open Source technology from scratch, taking into account all the feedback we acquired over the years. Having these technologies available, we will enable more people to contribute and use our technology.
### 3. How is the Kerberos Enterprise Suite involved?
We started the developments of the Kerberos Enterprise Suite a year ago (January, 2020), our focus here was scalability, fast development and easy deployment. We noticed that with technologies such as Golang and React, we can still provide a highly performant video surveillance system.
The Kerberos Agent which is currently part of the Kerberos Enterprise Suite will be open sourced and become the one and only engine for video stream capturing, motion detection, etc.
The Kerberos Agent will be used both in the open source as the B2B communities. Other solutions such as Factory, Vault and Hub will be made available through different licensing.
### 4. When are we going to be able to install the first version?
We plan to ship the **first version by the end of Q1**, afterwards we will add more and more features as usual.
### 5. Change in License
Kerberos Agent is now available under the MIT license.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 77 KiB

-41
View File
@@ -1,41 +0,0 @@
---
title: "License"
description: ""
lead: ""
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
agent:
parent: "agent"
weight: 301
toc: true
---
Kerberos Agent is an open source solution that is made available free of charge. The solution and its source code is maintained by the Kerberos.io development team and open source community, and made available through source code, and binaries through a Docker container. Kerberos Agent, and its related binaries, can be used under the MIT license.
## The MIT License (MIT)
Copyright © `2021` `Kerberos.io`
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.
-9
View File
@@ -1,9 +0,0 @@
---
title: "Enterprise"
description: ""
lead: ""
date: 2020-10-06T08:49:15+00:00
lastmod: 2020-10-06T08:49:15+00:00
draft: false
images: []
---
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 118 KiB

@@ -1,74 +0,0 @@
---
title: "First things first"
description: "Kerberos Enterprise Suite - A revolutionary design to scale your video landscape."
lead: "Kerberos Enterprise Suite - A revolutionary design to scale your video landscape."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
enterprise:
parent: "enterprise"
weight: 300
toc: true
---
Kerberos Enterprise Suite is a consequence of supporting enterprises and customers for more than 7 years in the video analytics and video streaming industry. Kerberos Enterprise Suite is a collection of best practices supporting the ever-growing needs of enterprises rolling out huge amounts of video streams, requiring extreme flexibility in terms of deployment and customization, and putting strong focus on video analytics and more specific machine learning and AI.
As a result to the developments of the Kerberos Agent, previously called Kerberos Open Source, the Kerberos Enterprise Suite is here to enable more flexibility through concepts such as Bring Your Own Cloud, Bring Your Own Storage and Bring Your Own Technology.
Kerberos Enterprise Suite is taking the Kerberos Agent to another level, by building additional tools on top such as [Kerberos Vault](/vault/first-things-first) and [Kerberos Hub](/vault/first-things-first). It scales your Kerberos Agents through the concept of [Kerberos Factory](/factory/first-things-first) which helps to deploy your Kerberos Agents in bulk.
## Kubernetes: flexible and scale
Kubernetes is a proven, and a widely spread technology which is gaining more momentum every single day. Although many enterprises still have to adopt and embrace Kubernetes, many already do. It's just a matter of time.
{{< figure src="kubernetes-enterprise.svg" alt="" caption="" class="stretch">}}
Kubernetes sits at the center of the Kerberos Enterprise Suite. Every solution within the suite is build on top of Kubernetes, so it allows you to bring your own cloud, bring your own storage and bring your own technology.
### Bring your own cloud
By using Kubernetes as a basis for [Kerberos Factory](/factory/first-things-first), [Kerberos Vault](/vault/first-things-first) and [Kerberos Hub](/vault/first-things-first), all solutions can be deployed where your Kubernetes cluster can be deployed. This means you can deploy at the edge, in a private or public cloud. As the solutions are modular build, you can also have hybrid deployments. For example processing at the edge and visualisation in a cloud environment, or storage at the edge and limited storage in a cloud environment.
### Bring your own storage
One thing you don't want, is to store your most precious data on someone else storage. We believe you should be the one and only owner of your data, and therefore we have build [Kerberos Vault](/vault/first-things-first), in such a way that you bring you own storage. Bringing your own storage is great, but actually you want to bring multiple storage providers, for example edge storage and cloud storage. The concept of keeping a vast amount of storage at the edge, and [forward only the most important data](/vault/forwarding/) to a cloud environment, is a core feature of [Kerberos Vault](/vault/first-things-first).
### Bring your own technology
Kubernetes brings a lot of advantages in terms of deployment, scalability, resilience, and also high availability, but there is more. Due to the nature of Kubernetes, enterprises and administrators can bring any tool, service, solution or application inside their cluster. As the Kubernetes Enterprise Suite has specific dependencies, there is no need to install already existing tools, but you can reuse the ones you already have.
Next to that, all solutions within the Kerberos Enterprise Suite ships Swagger APIs by default. This allows you to extend or integrate your own solutions or extend them with the technology you already master or prefer within your organisation.
## The solution stack
The Kerberos Enterprise Suite is a collection of modular solutions that can be deployed wherever you want. It contains three crucial parts.
- Kerberos Agents and Kerberos Factory
- Kerberos Vault
- Kerberos Hub
### Kerberos Agents and Kerberos Factory
An agent is deployed for each video stream. An agent is responsible for a specific video stream: recording, livestreaming and alerting. Kerberos Factory is used to scale and deploy the Kerberos Agents in your Kubernetes clusters by providing a UI.
{{< figure src="kerberos-enterprise-suite.svg" alt="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." caption="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." class="stretch">}}
### Kerberos Vault
Kerberos Agents are persisting their recordings at a central place, which we call Kerberos Vault. Within Kerberos Vault you set up multiple edge or cloud storage providers, to persist your data at the edge or in the cloud.
{{< figure src="vault-edge-cloud-storage.svg" alt="Bring your own storage using Vault" caption="Bring your own storage using Kerberos Vault" class="stretch">}}
Events and messages [are sent through integrations](/vault/integrations/) to initiate custom processes and applications; for example [a machine learning model](/vault/machine-learning/). Edge and cloud storage are combined and can be enabled in forwarding mode, so only a subset of recordings is persisted in cloud storage.
{{< figure src="vault-forwarding-chaining.svg" alt="Synchronise recordings between multiple Kerberos Vaults." caption="Synchronise recordings between multiple Kerberos Vaults." class="stretch">}}
### Kerberos Hub
[Kerberos Hub](/vault/first-things-first) is a scale UI that consolidates the entire Kerberos ecosystem. It shows livestreams/alerts from your Kerberos Agents and recordings stored in Kerberos Vault through a single pane of glass.
[Kerberos Hub](/vault/first-things-first) is build out of modular and scalable microservices which you can install and scale independently, wherever you want.
{{< figure src="hub-with-vault.svg" alt="Kerberos Vault connected to Kerberos Hub." caption="Kerberos Vault connected to Kerberos Hub." class="stretch">}}
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 90 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 61 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 131 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 471 KiB

-16
View File
@@ -1,16 +0,0 @@
---
title: "Usecases"
description: "Customers using the Kerberos Enterprise Suite."
lead: "Customers using the Kerberos Enterprise Suite."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: true
images: []
menu:
enterprise:
parent: "enterprise"
weight: 300
toc: true
---
-> Sorry, to be written. We have a couple of customer stories available.
-9
View File
@@ -1,9 +0,0 @@
---
title: "Enterprise"
description: ""
lead: ""
date: 2020-10-06T08:49:15+00:00
lastmod: 2020-10-06T08:49:15+00:00
draft: false
images: []
---
@@ -1,32 +0,0 @@
---
title: "First things first"
description: "A revolutionary design to scale your video analytics and video surveillance landscape."
lead: "A revolutionary design to scale your video analytics and video surveillance landscape."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
factory:
parent: "factory"
weight: 300
toc: true
---
Kerberos Factory brings the Kerberos Agent to another level. The Kerberos Agent can be deployed anywhere you want, it can run as a binary, Docker container and inside a Kubernetes cluster. The latter is where Kerberos Factory shines, it is a UI that allows you to deploy and configure your Kerberos Agents into your Kubernetes cluster more easily.
{{< figure src="kerberos-enterprise-suite.svg" alt="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." caption="Kerberos Enterprise Suite contains Kerberos Agent, Kerberos Factory, Kerberos Vault and Kerberos Hub." class="stretch">}}
## Kerberos Factory in a nutshell
Kerberos Factory is a front-end that consumes and interacts with the Kubernetes API. It schedules Kerberos Agents as Kubernetes resource, and more specific `deployments`. For every camera stream a Kerberos Agent is created as a Kubernetes deployment.
Through the front-end an administrator can configure or add more Kerberos Agents to the cluster. The administrator has the ability to interact with the Kerberos Agent through one or more configuration screens, to tune and optimize the Kerberos Agent.
### ONVIF discovery
Kerberos Factory allows you to scan the local network and create Kerberos Agents for every discovered camera. Once discovered, Kerberos Factory will create a Kubernetes deployment for every Kerberos Agent.
### Global settings
Instead of tuning all your Kerberos Agent, Kerberos Factory allows you to set up global settings which are inherited by all your Kerberos Agents.
File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 90 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 MiB

-156
View File
@@ -1,156 +0,0 @@
---
title: "Getting Started"
description: "What to expect from the Kerberos Factory."
lead: "What to expect from the Kerberos Factory."
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
factory:
parent: "factory"
weight: 301
toc: true
---
Once you've installed Kerberos Factory, you will have the web application running inside your cluster. This web application allows you to administrate and automate the creation of your Kerberos Agents through the concept of [Kubernetes deployments](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/) and pods.
Important to note is that this web application is relying [on the official Golang Kubernetes API](https://github.com/kubernetes/client-go), so that means from an administration point of view, you could simply use the well known `kubectl` command instead. The web application adds some functionalities on top of the Kubernetes API, which are specific to a Kerberos Agent; for example region of interests, livestreaming settings, etc.
## Login page
Once you open a browser, and navigate to the web application (see installation for the url), you will land on the login page.
{{< figure src="login.gif" alt="Login into the Kerberos Factory interface." caption="Login into the Kerberos Factory interface." class="stretch">}}
The default username password, specified in the [`deployment.yaml`](https://github.com/kerberos-io/enterprise/blob/master/yaml/factory/deployment.yaml#L54) is:
- username: **root**
- password: **kerberos**
> The username and password [can be changed in the `deployment.yaml` file](https://github.com/kerberos-io/factory/blob/master/yaml/deployment.yaml#L34-L37).
## Overview
On the overview page you will find an intuitive overview of the different pages and functionalities. As Kerberos Factory is running on top of a Kubernetes cluster, Kerberos Agents are deployed as Kubernetes deployments.
Kerberos Factory allows you to inspect and configure your Kerberos Agents, but also provide an overview of the Kubernetes nodes and pods.
{{< figure src="overview.gif" alt="Review your Docker or Kubernetes agents." caption="Review your Docker or Kubernetes agents." class="stretch">}}
On the left menu you will find pages are available:
- Settings: the global settings which are inherited by Kerberos Agents.
- Camera: a list of all the Kerberos Agents running in your cluster.
- Nodes: a list of all the nodes in your cluster.
- Pods: all the pods running in your cluster.
## Nodes
The nodes section lists all the available nodes inside your Kubernetes cluster. It shows a limited amount of information such as the version, the number of Docker images installed on the node, and some basic hardware information.
{{< figure src="nodes.gif" alt="Get an entire list of nodes which are connected to your Kubernetes cluster." caption="Get an entire list of nodes which are connected to your Kubernetes cluster." class="stretch">}}
## Cameras
The cameras section will list all the Kerberos Agents (running as deployments) that you have deployed inside your cluster. This page gives you access to deploy new Kerberos Agents. Next to that you can easily upgrade Kerberos Agents to a newer version, reboot them, view logging and update the configuration options of the Kerberos Agent.
{{< figure src="deployments.gif" alt="Get a list of all your Kerberos Agents." caption="Get a list of all your Kerberos Agents." class="stretch">}}
### Adding a new deployment
By specifying a name for your Kerberos Agent, and it's corresponding RTSP url, a new Kubernetes deployment will be created for you, and a Kuebrnetes pod will be deployed to one of your installed nodes.
{{< figure src="add-kerberos-agent.gif" alt="Deploy a single Kerberos Agent or in bulk." caption="Deploy a single Kerberos Agent or in bulk." class="stretch">}}
### Configuring a deployment
Once you have a running Kerberos Agent, you should see a green circle next to the deployment, indicating that it is successfully running. At any time you can configure your Kerberos Agent by clicking on the <SettingsIcon className="pointer"/> icon. This will open a popup, allowing you to change some settings.
{{< figure src="configure-kerberos-agent.gif" alt="Once you created the Kerberos Agent, you can configure the agent." caption="Once you created the Kerberos Agent, you can configure the agent." class="stretch">}}
Following settings can be changed:
- One or more regions of interest,
- Time based conditions,
- Pre- and post recording
- Continuous recording
- Linking to [Kerberos Hub Saas](/hub/first-things-first) or [Kerberos Vault](/vault/first-things-first)
### Global configuration
Configuration can be specified in a Kerberos Agent, this means that you update the configuration of a specific Kubernetes deployment. However, this can also be specified at a higher level. This higher level is what we call the global configuration.
By specifying configurations at a higher level, any Kerberos Agents will inherit from that configuration. This is improving the overall maintenance and management of your Kerberos Agents.
{{< figure src="global-settings.gif" alt="You can specify the configurations on a global level, so all Kerberos Agents will inherit from that." caption="You can specify the configurations on a global level, so all Kerberos Agents will inherit from that." class="stretch">}}
### Upgrade or reboot a Kerberos Agent
At Kerberos, we have agile development cycles, which means that new versions will be released every day, week or month. To make sure you can upgrade or downgrade these Kerberos Agent easily, an upgrade feature is built-in. When pressing the upgrade button, you will be able to select the version to which you would like to upgrade or downgrade. Once submitted, **a zero downtime upgrade will take place**. Kubernetes will download the new release, create a new pod, and destroy the old one.
At any moment you can reboot one of your Kerberos Agents. When pressing the reboot button, next to your deployment, Kubernetes will destroy the pod of your deployment, and schedule a new one.
{{< figure src="upgrade-kerberos-agent.gif" alt="You can specify the configurations on a global level, so all agents will inherit from that." caption="You can specify the configurations on a global level, so all agents will inherit from that." class="stretch">}}
## Pods
When creating a Kerberos Agent, Kubernetes will create a Kubernetes deployment and schedule a pod. The pod will be managed by your deployment, and deployed as a container to one of your available nodes. Once a pod dies/ crashes, or whatever unexpected scenario, the deployment will make sure it is deployed again to a different (or the same) node. This makes sure the Kerberos Agent is in a healthy state at all times.
{{< figure src="pods.gif" alt="When creating a deployment, a Kubernetes pod has created and assigned to a node." caption="When creating a deployment, a Kubernetes pod has created and assigned to a node." class="stretch">}}
## Storage and video management
Kerberos Factory allows you to scale your video landscape horizontally, using the concept of Kubernetes, and brings a strong backbone for stability and performance. It allows you to avoid reinventing the wheel, and get stuck in the numerous challenges of developing a scalable video platform.
Kerberos Agents store their recordings locally for a short period. This means that long-term storage is not included in the solution. On top of that it also does not have a visual component, which allows you te review dashboards or recordings. To overcome these two challenges, long-term storage with extensibility/integration capabilities and visualisation features, following solutions were developed [Kerberos Vault](/storage/introduction) and [Kerberos Hub](/cloud).
### Kerberos Vault
[Kerberos Vault](/vault/first-things-first) is a solution which makes it possible to store recordings from Kerberos Agents (across different clusters) at a central place, on the storage provider you want. You can store your recordings in the cloud (AWS S3, Google Cloud Storage, Azure Blob storage) or at the edge (Minio, Ceph).
On the other hand it's an open platform, as it allows you build extensions and integrations (web apps, mobile apps, machine learning services much more). Kerberos Vault ships with the ability of real-time messaging (Kafka), and a REST API (documented as Swagger).
{{< figure src="vault-cloud-storage.svg" alt="Kerberos Vault allows you to centralise your recordings and build integrations." caption="Kerberos Vault allows you to centralise your recordings and build integrations." class="stretch">}}
To connect one or more Kerberos Agents to your Kerberos Vault instance, you should open the configuration option and navigate to the `cloud` tab. After selected you need to fill-in the credentials from your Kerberos Vault account.
To connect one or more Kerberos Agents to your Kerberos Vault instance, you should open the configuration option and navigate to the `cloud` tab. After selected you need to fill-in the credentials from your Kerberos Vault account.
- Kerberos Vault URI: this is the API endpoint of your Kerberos Vault instance. Usually this is in the following format: `http(s)://api.yourdomain.com`. Where `api.yourdomain.com` should match your Kerberos Vault API endpoint. If you are deploying Kerberos Vault at the edge, in the same cluster, you can use the internal DNS name, as following `http://kerberos-vault.kerberos-vault:8081`.
- Provider: the name of the provider, which you created on the Kerberos Vault providers page, to which you want to send your recordings to.
- Directory: this is the subdirectory in which your files will be stored. At the time of writing this should also equal your Kerberos Hub username, if you plan to upload to Kerberos Hub.
- Access Key: this should match the access key of one of your Kerberos Vault accounts.
- Secret Key: this should match the secret key of one of your Kerberos Vault accounts.
{{< figure src="kerberos-factory-kerberos-vault.gif" alt="Using Kerberos Vault you can bring your own storage, and store the recordings of your agents in your own storage provider." caption="Using Kerberos Vault you can bring your own storage, and store the recordings of your agents in your own storage provider." class="stretch">}}
### Kerberos Hub
For the visualisation part Kerberos Hub comes into the picture. Kerberos Hub is a web app, backed up with a number of microservices, that shows dashboards, live streams, filter recordings and much more. Learn more [about the features and functions here](/cloud).
You have two choices when using Kerberos Hub, either you send your recordings from your Kerberos Agents directly to Kerberos Hub, or you send your recordings to Kerberos Vault, and connect Kerberos Vault to Kerberos Hub. About the latter more is explained on the [Kerberos Vault page](/storage/get-started).
Select the Kerberos Hub option, and copy-paste the credentials from your Kerberos Hub subscription.
{{< figure src="kerberos-factory-kerberos-hub.gif" alt="By linking the Kerberos Agent to Kerberos Hub, your recordings and livestreams will become available online." caption="By linking your Enterprise agent to Kerberos Hub, your recordings and livestreams will become available online." class="stretch">}}
- Proxy URI: this is a proxy service which moves the recording in the Kerberos Hub SAAS version. By default `http://proxy.kerberos.io`.
- Region: this is the region where your recordings will be stored. Only `eu-west-1` for now (will change, on the roadmap).
- Bucket: the name of the Kerberos Hub bucket. Only `kerberosaccept` for now (will change, on the roadmap).
- Directory: this is your personal directory, and matches your Kerberos Hub username.
In the Kerberos Hub section (next to persistence) provide following information
- API url: the url of the Kerberos Hub endpoint. By default `https://api.cloud.kerberos.io` for our Kerberos Hub SAAS version.
- Public Key: this should match the public key of your Kerberos Hub subscription.
- Private Key: this should match the private key of your Kerberos Hub subscription.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.7 MiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 109 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 70 KiB

-178
View File
@@ -1,178 +0,0 @@
---
title: "Cloud Installation"
description: ""
lead: ""
date: 2020-10-06T08:49:31+00:00
lastmod: 2020-10-06T08:49:31+00:00
draft: false
images: []
menu:
factory:
parent: "factory"
weight: 303
toc: true
---
If not already the case, start by creating a Kubernetes cluster. This can be done though one of the hyperscalers (AWS, GCP, Azure), cloud providers (Digital Ocean, Scaleway, etc) or inside your private cloud; for the latter it is advised [to follow the edge installation](/factory/installation-edge).
{{< figure src="factory-cloud.svg" alt="Process your video streams in the cloud." caption="Process your video streams in the cloud" class="stretch">}}
## Installation
Before setting up Kerberos Factory, the first thing that we need to do is enabling RBAC permissions (Role Based Access Control). This needs to be enabled to query specific endpoints from the Kubernetes API. By default, these endpoints are blocked, so we need to unlock them.
First clone the configurations from the GitHub repository [kerberos-io/factory]( https://github.com/kerberos-io/factory).
git clone https://github.com/kerberos-io/factory
A best practice is to create a separate namespace for your Kerberos Factory and Kerberos Agent deployments.
kubectl create namespace kerberos-factory
Next go into the directory and execute the first Kubernetes configuration file `clusterrole.yaml`.
kubectl create -n kerberos-factory -f ./factory/yaml/clusterrole.yaml
This will make several APIs inside your Kubernetes cluster available. We need this to be able to create deployments from the factory web app through the Kubernetes Golang SDK.
### Helm
Next we will install a couple of dependencies which are required for Kerberos Factory. [**Helm**](https://helm.sh/) is a package manager for Kubernetes, it helps you to set up services more easily (this could be a MQTT broker, a database, etc).
Instead of writing yaml files for every service we need, we use so-called Charts (libraries), that you can reuse and configure the, with the appropriate settings.
Use one of the preferred OS package managers to install the Helm client:
brew install helm
choco install kubernetes-helm
scoop install helm
gofish install helm
### Traefik
[**Traefik**](https://containo.us/traefik/) is a reverse proxy and load balancer which allows you to expose your deployments more easily. Kerberos uses Traefik to expose its APIs more easily.
Add the Helm repository and install traefik.
kubectl create namespace traefik
helm repo add traefik https://helm.traefik.io/traefik
helm install traefik traefik/traefik -n traefik
After installation, you should have an IP attached to Traefik service, look for it by executing the `get service` command. You will see the ip address in the `EXTERNAL-IP` attribute.
kubectl get svc
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 36h
--> traefik LoadBalancer 10.0.27.93 40.114.168.96 443:31623/TCP,80:31804/TCP 35h
traefik-dashboard NodePort 10.0.252.6 <none> 80:31146/TCP 35h
Go to your DNS provider and link the domain you've configured in the first step `traefik.domain.com` to the IP address of thT `EXTERNAL-IP` attribute. When browsing to `traefik.domain.com`, you should see the traefik dashboard showing up.
### Ingress-Nginx (alternative for Traefik)
If you don't like `Traefik` but you prefer `Ingress Nginx`, that works as well.
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm repo update
kubectl create namespace ingress-nginx
helm install ingress-nginx -n ingress-nginx ingress-nginx/ingress-nginx
### MongoDB
When using Kerberos Factory, it will generate configurations for every video stream deployed. These configuration files are persisted in a MongoDB database. As used before, we are using `helm` to install MongoDB in our Kubernetes cluster.
Have a look into the `./factory/yaml/mongodb/values.yaml` file, you will find plenty of configurations for the MongoDB helm chart. To change the username and password of the MongoDB instance, go ahead and [find the attribute where](https://github.com/kerberos-io/factory/blob/master/yaml/mongodb/values.yaml#L75) you can change the root password.
helm repo add bitnami https://charts.bitnami.com/bitnami
kubectl create namespace mongodb
helm install mongodb -n mongodb bitnami/mongodb --values ./factory/yaml/mongodb/values.yaml
Once installed successfully, we should verify if the password has been set correctly. Print out the password using `echo $MONGODB_ROOT_PASSWORD` and confirm the password is what you've specified in the `values.yaml` file.
export MONGODB_ROOT_PASSWORD=$(kubectl get secret -n mongodb mongodb -o jsonpath="{.data.mongodb-root-password}" | base64 --decode)
echo $MONGODB_ROOT_PASSWORD
### Kerberos Factory
The last step is to install the Kerberos Factory application. Kerberos Factory is responsible for installing and creating the kubernetes deployments inside your Kubernetes cluster.
#### Config Map
Kerberos Factory requires a MongoDB instance to be running, it uses it to store configuration files and other metrics. To specify those credentials a configmap is created and injected into the Kerberos Factory deployment.
Modify the MongoDB credentials, and make sure they match the credentials of your MongoDB instance.
- name: MONGODB_USERNAME
value: "root"
- name: MONGODB_PASSWORD
--> value: "xxxxxxxxxx"
Create the config map.
kubectl apply -f ./factory/yaml/mongodb.config.yaml -n kerberos-factory
#### Deployment
Before installing Kerberos Factory, open the `./factory/yaml/deployment.yaml` configuration file. At the of the bottom file you will find two endpoints, similar to the Ingres file below. Update the hostnames to your own preferred domain, and add these to your DNS server or `/etc/hosts` file (pointing to the same IP as the Traefik/Ingress-nginx EXTERNAL-IP).
spec:
rules:
--> - host: factory.domain.com
http:
paths:
- path: /
backend:
serviceName: factory
servicePort: 80
--> - host: api.factory.domain.com
http:
paths:
- path: /
backend:
serviceName: factory
servicePort: 8081
If you are using Ingress Nginx, do not forgot to comment `Traefik` and uncomment `Ingress Nginx`.
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: factory
annotations:
#kubernetes.io/ingress.class: traefik
kubernetes.io/ingress.class: nginx
Once you have corrected the DNS names (or internal /etc/hosts file), install the Kerberos Factory web app inside your cluster.
kubectl apply -n kerberos-factory -f ./factory/yaml/factory/deployment.yaml
## Test out configuration
If everything worked out as expected, you should now have following services in your cluster across different namespaces:
- MongoDB
- Traefik
- Factory
It should look like this.
$ kubectl get pods -n kerberos-factory
NAME READY STATUS RESTARTS AGE
factory-6f5c877d7c-hf77p 1/1 Running 0 2d11h
$ kubectl get pods -n mongodb
NAME READY STATUS RESTARTS AGE
mongodb-758d5c5ddd-qsfq9 1/1 Running 0 5m31s
$ kubectl get pods -n traefik
NAME READY STATUS RESTARTS AGE
traefik-7d566ccc47-mwslb 1/1 Running 0 4d12h
## Access the system
Once everything is configured correctly your cluster and DNS, you should be able to set up the Factory application. By navigating to the domain `factory.domain.com` in your browser you will see the login page showing up.
{{< figure src="login.png" alt="Once successfully installed Kerberos Factory, it will show you the login page." caption="Once successfully installed Kerberos Factory, it will show you the login page." class="stretch">}}

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