From 88dfad39b41f59d36df71a1ea0abcf8146a92be5 Mon Sep 17 00:00:00 2001 From: Iuri Matias Date: Fri, 7 May 2021 12:15:41 -0400 Subject: [PATCH] initial user guide & dev docs --- devuser_guide/.editorconfig | 11 + devuser_guide/.eslintignore | 4 + devuser_guide/.eslintrc.json | 31 + .../.github/ISSUE_TEMPLATE/bug-report---.md | 25 + .../.github/ISSUE_TEMPLATE/config.yml | 4 + .../ISSUE_TEMPLATE/feature-request---.md | 17 + devuser_guide/.github/dependabot.yml | 11 + .../.github/workflows/codeql-analysis.yml | 62 + .../.github/workflows/node.js-ci.yml | 48 + devuser_guide/.github/workflows/readme.yml | 17 + devuser_guide/.gitignore | 6 + devuser_guide/.markdownlint.json | 10 + devuser_guide/.markdownlintignore | 3 + devuser_guide/.npmrc | 1 + devuser_guide/.stylelintignore | 3 + devuser_guide/.stylelintrc.json | 34 + devuser_guide/.versionrc.json | 28 + devuser_guide/CHANGELOG.md | 243 + devuser_guide/CODE_OF_CONDUCT.md | 76 + devuser_guide/LICENSE | 21 + devuser_guide/README.md | 125 + devuser_guide/archetypes/blog.md | 13 + devuser_guide/archetypes/default.md | 8 + devuser_guide/archetypes/docs.md | 16 + devuser_guide/assets/fonts/.gitkeep | 0 devuser_guide/assets/images/.gitkeep | 0 devuser_guide/assets/js/app.js | 0 devuser_guide/assets/js/bootstrap.js | 2 + devuser_guide/assets/js/clipboard.js | 18 + devuser_guide/assets/js/darkmode.js | 12 + devuser_guide/assets/js/highlight.js | 24 + devuser_guide/assets/js/index.js | 146 + devuser_guide/assets/js/instant.page.js | 1 + devuser_guide/assets/js/katex.js | 10 + devuser_guide/assets/js/lazysizes.js | 1 + devuser_guide/assets/js/vendor/.gitkeep | 0 devuser_guide/assets/lambda/.gitignore | 0 devuser_guide/assets/lambda/hi-from-lambda.js | 11 + devuser_guide/assets/scss/app.scss | 34 + devuser_guide/assets/scss/common/_dark.scss | 333 + devuser_guide/assets/scss/common/_fonts.scss | 71 + devuser_guide/assets/scss/common/_global.scss | 229 + .../assets/scss/common/_variables.scss | 157 + .../assets/scss/components/_alerts.scss | 63 + .../assets/scss/components/_buttons.scss | 91 + .../assets/scss/components/_code.scss | 62 + .../assets/scss/components/_comments.scss | 30 + .../assets/scss/components/_doks.scss | 62 + .../assets/scss/components/_forms.scss | 19 + .../assets/scss/components/_images.scss | 48 + .../assets/scss/components/_search.scss | 75 + .../assets/scss/components/_syntax.scss | 131 + .../assets/scss/components/_tables.scss | 5 + .../assets/scss/layouts/_footer.scss | 20 + .../assets/scss/layouts/_header.scss | 268 + devuser_guide/assets/scss/layouts/_pages.scss | 45 + devuser_guide/assets/scss/layouts/_posts.scss | 28 + .../assets/scss/layouts/_sidebar.scss | 110 + devuser_guide/assets/scss/vendor/.gitkeep | 0 devuser_guide/babel.config.js | 17 + devuser_guide/config/_default/config.toml | 91 + devuser_guide/config/_default/menus.toml | 62 + devuser_guide/config/_default/params.toml | 58 + devuser_guide/config/next/config.toml | 2 + devuser_guide/config/postcss.config.js | 31 + devuser_guide/config/production/config.toml | 2 + devuser_guide/content/_index.md | 9 + devuser_guide/content/blog/_index.md | 8 + .../content/blog/say-hello-to-doks/index.md | 11 + .../say-hello-to-doks/say-hello-to-doks.png | Bin 0 -> 8211 bytes devuser_guide/content/contact/index.md | 10 + devuser_guide/content/contributors/_index.md | 10 + .../contributors/henk-verlinde/_index.md | 12 + devuser_guide/content/dev_guide/_index.md | 11 + .../content/dev_guide/browser/_index.md | 10 + .../content/dev_guide/browser/dapp.md | 18 + .../content/dev_guide/browser/favourites.md | 83 + .../dev_guide/browser/other_features.md | 16 + .../dev_guide/browser/other_options.md | 20 + .../content/dev_guide/browser/settings.md | 18 + .../content/dev_guide/browser/tabs.md | 18 + .../content/dev_guide/browser/url_bar.md | 19 + .../content/dev_guide/browser/wallet.md | 19 + devuser_guide/content/docs/_index.md | 9 + devuser_guide/content/docs/browser/_index.md | 10 + devuser_guide/content/docs/browser/dapp.md | 18 + .../content/docs/browser/favourites.md | 58 + .../content/docs/browser/other_features.md | 16 + .../content/docs/browser/other_options.md | 20 + .../content/docs/browser/settings.md | 18 + devuser_guide/content/docs/browser/tabs.md | 18 + devuser_guide/content/docs/browser/url_bar.md | 19 + devuser_guide/content/docs/browser/wallet.md | 19 + devuser_guide/content/docs/help/_index.md | 9 + devuser_guide/content/docs/help/faq.md | 50 + .../content/docs/help/how-to-update.md | 32 + .../content/docs/help/troubleshooting.md | 30 + devuser_guide/content/docs/prologue/_index.md | 9 + .../content/docs/prologue/commands.md | 118 + .../content/docs/prologue/introduction.md | 58 + .../content/docs/prologue/quick-start.md | 79 + devuser_guide/content/docs/test/_index.md | 9 + devuser_guide/content/docs/test/test2.md | 118 + devuser_guide/content/privacy-policy/index.md | 36 + devuser_guide/data/.gitkeep | 0 devuser_guide/data/doks.json | 4 + devuser_guide/data/hyas.json | 4 + devuser_guide/images/screenshot.png | Bin 0 -> 124825 bytes devuser_guide/images/tn.png | Bin 0 -> 139888 bytes devuser_guide/layouts/404.html | 10 + .../layouts/_default/_markup/.gitkeep | 0 devuser_guide/layouts/_default/baseof.html | 30 + devuser_guide/layouts/_default/index.js | 10 + devuser_guide/layouts/_default/index.json | 5 + devuser_guide/layouts/_default/list.html | 13 + .../layouts/_default/section.sitemap.xml | 46 + devuser_guide/layouts/_default/single.html | 10 + devuser_guide/layouts/blog/list.html | 21 + devuser_guide/layouts/blog/single.html | 14 + devuser_guide/layouts/contributors/list.html | 23 + devuser_guide/layouts/dev_guide/list.html | 22 + devuser_guide/layouts/dev_guide/single.html | 36 + devuser_guide/layouts/docs/list.html | 22 + devuser_guide/layouts/docs/single.html | 36 + devuser_guide/layouts/index.headers | 9 + devuser_guide/layouts/index.html | 59 + devuser_guide/layouts/index.redirects | 6 + .../layouts/partials/footer/alert.html | 3 + .../layouts/partials/footer/footer.html | 18 + .../partials/footer/script-footer.html | 90 + .../layouts/partials/head/favicons.html | 5 + devuser_guide/layouts/partials/head/head.html | 10 + .../layouts/partials/head/opengraph.html | 93 + .../layouts/partials/head/resource-hints.html | 6 + .../layouts/partials/head/script-header.html | 0 devuser_guide/layouts/partials/head/seo.html | 50 + .../partials/head/structured-data.html | 109 + .../layouts/partials/head/stylesheet.html | 11 + .../layouts/partials/head/twitter_cards.html | 33 + .../layouts/partials/header/header.html | 43 + .../layouts/partials/main/blog-meta.html | 1 + .../layouts/partials/main/breadcrumb.html | 4 + .../partials/main/docs-navigation.html | 24 + .../layouts/partials/main/edit-page.html | 1 + .../layouts/partials/main/headline-hash.html | 1 + .../layouts/partials/sidebar/dev-menu.html | 13 + .../layouts/partials/sidebar/docs-menu.html | 13 + .../layouts/partials/sidebar/docs-toc.html | 6 + devuser_guide/layouts/robots.txt | 7 + devuser_guide/layouts/rss.xml | 27 + devuser_guide/layouts/shortcodes/alert.html | 12 + .../layouts/shortcodes/btn-copy.html | 5 + devuser_guide/layouts/shortcodes/email.html | 1 + .../layouts/shortcodes/img-simple.html | 3 + devuser_guide/layouts/shortcodes/img.html | 23 + devuser_guide/layouts/sitemap.xml | 22 + devuser_guide/netlify.toml | 30 + devuser_guide/package-lock.json | 11753 ++++++++++++++++ devuser_guide/package.json | 66 + .../static/android-chrome-192x192.png | Bin 0 -> 5765 bytes .../static/android-chrome-512x512.png | Bin 0 -> 20786 bytes devuser_guide/static/apple-touch-icon.png | Bin 0 -> 5105 bytes devuser_guide/static/css/vendor/.gitkeep | 0 devuser_guide/static/doks.png | Bin 0 -> 8211 bytes devuser_guide/static/doks.svg | 1 + devuser_guide/static/favicon-16x16.png | Bin 0 -> 416 bytes devuser_guide/static/favicon-32x32.png | Bin 0 -> 773 bytes devuser_guide/static/favicon.ico | Bin 0 -> 15406 bytes .../static/fonts/KaTeX_AMS-Regular.ttf | Bin 0 -> 70936 bytes .../static/fonts/KaTeX_AMS-Regular.woff | Bin 0 -> 36912 bytes .../static/fonts/KaTeX_AMS-Regular.woff2 | Bin 0 -> 31136 bytes .../static/fonts/KaTeX_Caligraphic-Bold.ttf | Bin 0 -> 15416 bytes .../static/fonts/KaTeX_Caligraphic-Bold.woff | Bin 0 -> 9376 bytes .../static/fonts/KaTeX_Caligraphic-Bold.woff2 | Bin 0 -> 8392 bytes .../fonts/KaTeX_Caligraphic-Regular.ttf | Bin 0 -> 14908 bytes .../fonts/KaTeX_Caligraphic-Regular.woff | Bin 0 -> 9148 bytes .../fonts/KaTeX_Caligraphic-Regular.woff2 | Bin 0 -> 8248 bytes .../static/fonts/KaTeX_Fraktur-Bold.ttf | Bin 0 -> 24400 bytes .../static/fonts/KaTeX_Fraktur-Bold.woff | Bin 0 -> 16208 bytes .../static/fonts/KaTeX_Fraktur-Bold.woff2 | Bin 0 -> 13912 bytes .../static/fonts/KaTeX_Fraktur-Regular.ttf | Bin 0 -> 23904 bytes .../static/fonts/KaTeX_Fraktur-Regular.woff | Bin 0 -> 15880 bytes .../static/fonts/KaTeX_Fraktur-Regular.woff2 | Bin 0 -> 13668 bytes .../static/fonts/KaTeX_Main-Bold.ttf | Bin 0 -> 59972 bytes .../static/fonts/KaTeX_Main-Bold.woff | Bin 0 -> 35056 bytes .../static/fonts/KaTeX_Main-Bold.woff2 | Bin 0 -> 29932 bytes .../static/fonts/KaTeX_Main-BoldItalic.ttf | Bin 0 -> 42872 bytes .../static/fonts/KaTeX_Main-BoldItalic.woff | Bin 0 -> 24500 bytes .../static/fonts/KaTeX_Main-BoldItalic.woff2 | Bin 0 -> 21244 bytes .../static/fonts/KaTeX_Main-Italic.ttf | Bin 0 -> 46028 bytes .../static/fonts/KaTeX_Main-Italic.woff | Bin 0 -> 25352 bytes .../static/fonts/KaTeX_Main-Italic.woff2 | Bin 0 -> 22076 bytes .../static/fonts/KaTeX_Main-Regular.ttf | Bin 0 -> 68880 bytes .../static/fonts/KaTeX_Main-Regular.woff | Bin 0 -> 37856 bytes .../static/fonts/KaTeX_Main-Regular.woff2 | Bin 0 -> 32312 bytes .../static/fonts/KaTeX_Math-BoldItalic.ttf | Bin 0 -> 42300 bytes .../static/fonts/KaTeX_Math-BoldItalic.woff | Bin 0 -> 23980 bytes .../static/fonts/KaTeX_Math-BoldItalic.woff2 | Bin 0 -> 21192 bytes .../static/fonts/KaTeX_Math-Italic.ttf | Bin 0 -> 44484 bytes .../static/fonts/KaTeX_Math-Italic.woff | Bin 0 -> 24668 bytes .../static/fonts/KaTeX_Math-Italic.woff2 | Bin 0 -> 21668 bytes .../static/fonts/KaTeX_SansSerif-Bold.ttf | Bin 0 -> 32588 bytes .../static/fonts/KaTeX_SansSerif-Bold.woff | Bin 0 -> 17988 bytes .../static/fonts/KaTeX_SansSerif-Bold.woff2 | Bin 0 -> 15296 bytes .../static/fonts/KaTeX_SansSerif-Italic.ttf | Bin 0 -> 29860 bytes .../static/fonts/KaTeX_SansSerif-Italic.woff | Bin 0 -> 17044 bytes .../static/fonts/KaTeX_SansSerif-Italic.woff2 | Bin 0 -> 14484 bytes .../static/fonts/KaTeX_SansSerif-Regular.ttf | Bin 0 -> 28708 bytes .../static/fonts/KaTeX_SansSerif-Regular.woff | Bin 0 -> 15712 bytes .../fonts/KaTeX_SansSerif-Regular.woff2 | Bin 0 -> 13300 bytes .../static/fonts/KaTeX_Script-Regular.ttf | Bin 0 -> 23520 bytes .../static/fonts/KaTeX_Script-Regular.woff | Bin 0 -> 12992 bytes .../static/fonts/KaTeX_Script-Regular.woff2 | Bin 0 -> 11792 bytes .../static/fonts/KaTeX_Size1-Regular.ttf | Bin 0 -> 11932 bytes .../static/fonts/KaTeX_Size1-Regular.woff | Bin 0 -> 6300 bytes .../static/fonts/KaTeX_Size1-Regular.woff2 | Bin 0 -> 5332 bytes .../static/fonts/KaTeX_Size2-Regular.ttf | Bin 0 -> 11080 bytes .../static/fonts/KaTeX_Size2-Regular.woff | Bin 0 -> 6012 bytes .../static/fonts/KaTeX_Size2-Regular.woff2 | Bin 0 -> 5080 bytes .../static/fonts/KaTeX_Size3-Regular.ttf | Bin 0 -> 7028 bytes .../static/fonts/KaTeX_Size3-Regular.woff | Bin 0 -> 4148 bytes .../static/fonts/KaTeX_Size3-Regular.woff2 | Bin 0 -> 3400 bytes .../static/fonts/KaTeX_Size4-Regular.ttf | Bin 0 -> 10008 bytes .../static/fonts/KaTeX_Size4-Regular.woff | Bin 0 -> 5820 bytes .../static/fonts/KaTeX_Size4-Regular.woff2 | Bin 0 -> 4720 bytes .../static/fonts/KaTeX_Typewriter-Regular.ttf | Bin 0 -> 34560 bytes .../fonts/KaTeX_Typewriter-Regular.woff | Bin 0 -> 19700 bytes .../fonts/KaTeX_Typewriter-Regular.woff2 | Bin 0 -> 16868 bytes devuser_guide/static/fonts/vendor/.gitkeep | 0 .../fonts/vendor/jost/jost-v4-latin-500.woff | Bin 0 -> 12888 bytes .../fonts/vendor/jost/jost-v4-latin-500.woff2 | Bin 0 -> 9828 bytes .../vendor/jost/jost-v4-latin-500italic.woff | Bin 0 -> 14504 bytes .../vendor/jost/jost-v4-latin-500italic.woff2 | Bin 0 -> 11108 bytes .../fonts/vendor/jost/jost-v4-latin-700.woff | Bin 0 -> 12928 bytes .../fonts/vendor/jost/jost-v4-latin-700.woff2 | Bin 0 -> 9820 bytes .../vendor/jost/jost-v4-latin-700italic.woff | Bin 0 -> 14616 bytes .../vendor/jost/jost-v4-latin-700italic.woff2 | Bin 0 -> 11112 bytes .../vendor/jost/jost-v4-latin-italic.woff | Bin 0 -> 13580 bytes .../vendor/jost/jost-v4-latin-italic.woff2 | Bin 0 -> 10352 bytes .../vendor/jost/jost-v4-latin-regular.woff | Bin 0 -> 11820 bytes .../vendor/jost/jost-v4-latin-regular.woff2 | Bin 0 -> 8864 bytes .../static/images/browser/add_favourite.png | Bin 0 -> 7955 bytes .../static/images/browser/add_modal.png | Bin 0 -> 25589 bytes .../static/images/browser/context_menu_1.png | Bin 0 -> 14506 bytes .../static/images/browser/context_menu_2.png | Bin 0 -> 15617 bytes .../static/images/browser/edit_modal.png | Bin 0 -> 24678 bytes .../static/images/browser/favourites.png | Bin 0 -> 91707 bytes .../static/images/browser/star_modal.png | Bin 0 -> 96455 bytes .../static/images/browser/url_bar.png | Bin 0 -> 9770 bytes devuser_guide/static/images/vendor/.gitkeep | 0 devuser_guide/static/js/vendor/.gitkeep | 0 devuser_guide/static/logo-doks.png | Bin 0 -> 20786 bytes devuser_guide/static/site.webmanifest | 1 + devuser_guide/theme.toml | 12 + 254 files changed, 17108 insertions(+) create mode 100644 devuser_guide/.editorconfig create mode 100644 devuser_guide/.eslintignore create mode 100644 devuser_guide/.eslintrc.json create mode 100644 devuser_guide/.github/ISSUE_TEMPLATE/bug-report---.md create mode 100644 devuser_guide/.github/ISSUE_TEMPLATE/config.yml create mode 100644 devuser_guide/.github/ISSUE_TEMPLATE/feature-request---.md create mode 100644 devuser_guide/.github/dependabot.yml create mode 100644 devuser_guide/.github/workflows/codeql-analysis.yml create mode 100644 devuser_guide/.github/workflows/node.js-ci.yml create mode 100644 devuser_guide/.github/workflows/readme.yml create mode 100644 devuser_guide/.gitignore create mode 100644 devuser_guide/.markdownlint.json create mode 100644 devuser_guide/.markdownlintignore create mode 100644 devuser_guide/.npmrc create mode 100644 devuser_guide/.stylelintignore create mode 100644 devuser_guide/.stylelintrc.json create mode 100644 devuser_guide/.versionrc.json create mode 100644 devuser_guide/CHANGELOG.md create mode 100644 devuser_guide/CODE_OF_CONDUCT.md create mode 100644 devuser_guide/LICENSE create mode 100644 devuser_guide/README.md create mode 100644 devuser_guide/archetypes/blog.md create mode 100644 devuser_guide/archetypes/default.md create mode 100644 devuser_guide/archetypes/docs.md create mode 100644 devuser_guide/assets/fonts/.gitkeep create mode 100644 devuser_guide/assets/images/.gitkeep create mode 100644 devuser_guide/assets/js/app.js create mode 100644 devuser_guide/assets/js/bootstrap.js create mode 100644 devuser_guide/assets/js/clipboard.js create mode 100644 devuser_guide/assets/js/darkmode.js create mode 100644 devuser_guide/assets/js/highlight.js create mode 100644 devuser_guide/assets/js/index.js create mode 100644 devuser_guide/assets/js/instant.page.js create mode 100644 devuser_guide/assets/js/katex.js create mode 100644 devuser_guide/assets/js/lazysizes.js create mode 100644 devuser_guide/assets/js/vendor/.gitkeep create mode 100644 devuser_guide/assets/lambda/.gitignore create mode 100644 devuser_guide/assets/lambda/hi-from-lambda.js create mode 100644 devuser_guide/assets/scss/app.scss create mode 100644 devuser_guide/assets/scss/common/_dark.scss create mode 100644 devuser_guide/assets/scss/common/_fonts.scss create mode 100644 devuser_guide/assets/scss/common/_global.scss create mode 100644 devuser_guide/assets/scss/common/_variables.scss create mode 100644 devuser_guide/assets/scss/components/_alerts.scss create mode 100644 devuser_guide/assets/scss/components/_buttons.scss create mode 100644 devuser_guide/assets/scss/components/_code.scss create mode 100644 devuser_guide/assets/scss/components/_comments.scss create mode 100644 devuser_guide/assets/scss/components/_doks.scss create mode 100644 devuser_guide/assets/scss/components/_forms.scss create mode 100644 devuser_guide/assets/scss/components/_images.scss create mode 100644 devuser_guide/assets/scss/components/_search.scss create mode 100644 devuser_guide/assets/scss/components/_syntax.scss create mode 100644 devuser_guide/assets/scss/components/_tables.scss create mode 100644 devuser_guide/assets/scss/layouts/_footer.scss create mode 100644 devuser_guide/assets/scss/layouts/_header.scss create mode 100644 devuser_guide/assets/scss/layouts/_pages.scss create mode 100644 devuser_guide/assets/scss/layouts/_posts.scss create mode 100644 devuser_guide/assets/scss/layouts/_sidebar.scss create mode 100644 devuser_guide/assets/scss/vendor/.gitkeep create mode 100644 devuser_guide/babel.config.js create mode 100644 devuser_guide/config/_default/config.toml create mode 100644 devuser_guide/config/_default/menus.toml create mode 100644 devuser_guide/config/_default/params.toml create mode 100644 devuser_guide/config/next/config.toml create mode 100644 devuser_guide/config/postcss.config.js create mode 100644 devuser_guide/config/production/config.toml create mode 100644 devuser_guide/content/_index.md create mode 100644 devuser_guide/content/blog/_index.md create mode 100644 devuser_guide/content/blog/say-hello-to-doks/index.md create mode 100644 devuser_guide/content/blog/say-hello-to-doks/say-hello-to-doks.png create mode 100644 devuser_guide/content/contact/index.md create mode 100644 devuser_guide/content/contributors/_index.md create mode 100644 devuser_guide/content/contributors/henk-verlinde/_index.md create mode 100644 devuser_guide/content/dev_guide/_index.md create mode 100644 devuser_guide/content/dev_guide/browser/_index.md create mode 100644 devuser_guide/content/dev_guide/browser/dapp.md create mode 100644 devuser_guide/content/dev_guide/browser/favourites.md create mode 100644 devuser_guide/content/dev_guide/browser/other_features.md create mode 100644 devuser_guide/content/dev_guide/browser/other_options.md create mode 100644 devuser_guide/content/dev_guide/browser/settings.md create mode 100644 devuser_guide/content/dev_guide/browser/tabs.md create mode 100644 devuser_guide/content/dev_guide/browser/url_bar.md create mode 100644 devuser_guide/content/dev_guide/browser/wallet.md create mode 100644 devuser_guide/content/docs/_index.md create mode 100644 devuser_guide/content/docs/browser/_index.md create mode 100644 devuser_guide/content/docs/browser/dapp.md create mode 100644 devuser_guide/content/docs/browser/favourites.md create mode 100644 devuser_guide/content/docs/browser/other_features.md create mode 100644 devuser_guide/content/docs/browser/other_options.md create mode 100644 devuser_guide/content/docs/browser/settings.md create mode 100644 devuser_guide/content/docs/browser/tabs.md create mode 100644 devuser_guide/content/docs/browser/url_bar.md create mode 100644 devuser_guide/content/docs/browser/wallet.md create mode 100644 devuser_guide/content/docs/help/_index.md create mode 100644 devuser_guide/content/docs/help/faq.md create mode 100644 devuser_guide/content/docs/help/how-to-update.md create mode 100644 devuser_guide/content/docs/help/troubleshooting.md create mode 100644 devuser_guide/content/docs/prologue/_index.md create mode 100644 devuser_guide/content/docs/prologue/commands.md create mode 100644 devuser_guide/content/docs/prologue/introduction.md create mode 100644 devuser_guide/content/docs/prologue/quick-start.md create mode 100644 devuser_guide/content/docs/test/_index.md create mode 100644 devuser_guide/content/docs/test/test2.md create mode 100644 devuser_guide/content/privacy-policy/index.md create mode 100644 devuser_guide/data/.gitkeep create mode 100644 devuser_guide/data/doks.json create mode 100644 devuser_guide/data/hyas.json create mode 100644 devuser_guide/images/screenshot.png create mode 100644 devuser_guide/images/tn.png create mode 100644 devuser_guide/layouts/404.html create mode 100644 devuser_guide/layouts/_default/_markup/.gitkeep create mode 100644 devuser_guide/layouts/_default/baseof.html create mode 100644 devuser_guide/layouts/_default/index.js create mode 100644 devuser_guide/layouts/_default/index.json create mode 100644 devuser_guide/layouts/_default/list.html create mode 100644 devuser_guide/layouts/_default/section.sitemap.xml create mode 100644 devuser_guide/layouts/_default/single.html create mode 100644 devuser_guide/layouts/blog/list.html create mode 100644 devuser_guide/layouts/blog/single.html create mode 100644 devuser_guide/layouts/contributors/list.html create mode 100644 devuser_guide/layouts/dev_guide/list.html create mode 100644 devuser_guide/layouts/dev_guide/single.html create mode 100644 devuser_guide/layouts/docs/list.html create mode 100644 devuser_guide/layouts/docs/single.html create mode 100644 devuser_guide/layouts/index.headers create mode 100644 devuser_guide/layouts/index.html create mode 100644 devuser_guide/layouts/index.redirects create mode 100644 devuser_guide/layouts/partials/footer/alert.html create mode 100644 devuser_guide/layouts/partials/footer/footer.html create mode 100644 devuser_guide/layouts/partials/footer/script-footer.html create mode 100644 devuser_guide/layouts/partials/head/favicons.html create mode 100644 devuser_guide/layouts/partials/head/head.html create mode 100644 devuser_guide/layouts/partials/head/opengraph.html create mode 100644 devuser_guide/layouts/partials/head/resource-hints.html create mode 100644 devuser_guide/layouts/partials/head/script-header.html create mode 100644 devuser_guide/layouts/partials/head/seo.html create mode 100644 devuser_guide/layouts/partials/head/structured-data.html create mode 100644 devuser_guide/layouts/partials/head/stylesheet.html create mode 100644 devuser_guide/layouts/partials/head/twitter_cards.html create mode 100644 devuser_guide/layouts/partials/header/header.html create mode 100644 devuser_guide/layouts/partials/main/blog-meta.html create mode 100644 devuser_guide/layouts/partials/main/breadcrumb.html create mode 100644 devuser_guide/layouts/partials/main/docs-navigation.html create mode 100644 devuser_guide/layouts/partials/main/edit-page.html create mode 100644 devuser_guide/layouts/partials/main/headline-hash.html create mode 100644 devuser_guide/layouts/partials/sidebar/dev-menu.html create mode 100644 devuser_guide/layouts/partials/sidebar/docs-menu.html create mode 100644 devuser_guide/layouts/partials/sidebar/docs-toc.html create mode 100644 devuser_guide/layouts/robots.txt create mode 100644 devuser_guide/layouts/rss.xml create mode 100644 devuser_guide/layouts/shortcodes/alert.html create mode 100644 devuser_guide/layouts/shortcodes/btn-copy.html create mode 100644 devuser_guide/layouts/shortcodes/email.html create mode 100644 devuser_guide/layouts/shortcodes/img-simple.html create mode 100644 devuser_guide/layouts/shortcodes/img.html create mode 100644 devuser_guide/layouts/sitemap.xml create mode 100644 devuser_guide/netlify.toml create mode 100644 devuser_guide/package-lock.json create mode 100644 devuser_guide/package.json create mode 100644 devuser_guide/static/android-chrome-192x192.png create mode 100644 devuser_guide/static/android-chrome-512x512.png create mode 100644 devuser_guide/static/apple-touch-icon.png create mode 100644 devuser_guide/static/css/vendor/.gitkeep create mode 100644 devuser_guide/static/doks.png create mode 100644 devuser_guide/static/doks.svg create mode 100644 devuser_guide/static/favicon-16x16.png create mode 100644 devuser_guide/static/favicon-32x32.png create mode 100644 devuser_guide/static/favicon.ico create mode 100644 devuser_guide/static/fonts/KaTeX_AMS-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_AMS-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_AMS-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Bold.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Bold.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Bold.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Caligraphic-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Bold.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Bold.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Bold.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Fraktur-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Bold.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Bold.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Bold.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Main-BoldItalic.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Main-BoldItalic.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Main-BoldItalic.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Italic.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Italic.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Italic.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Main-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Math-BoldItalic.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Math-BoldItalic.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Math-BoldItalic.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Math-Italic.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Math-Italic.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Math-Italic.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Bold.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Bold.woff create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Bold.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Italic.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Italic.woff create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Italic.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_SansSerif-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Script-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Script-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Script-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Size1-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Size1-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Size1-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Size2-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Size2-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Size2-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Size3-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Size3-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Size3-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Size4-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Size4-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Size4-Regular.woff2 create mode 100644 devuser_guide/static/fonts/KaTeX_Typewriter-Regular.ttf create mode 100644 devuser_guide/static/fonts/KaTeX_Typewriter-Regular.woff create mode 100644 devuser_guide/static/fonts/KaTeX_Typewriter-Regular.woff2 create mode 100644 devuser_guide/static/fonts/vendor/.gitkeep create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-500.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-500.woff2 create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-500italic.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-500italic.woff2 create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-700.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-700.woff2 create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-700italic.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-700italic.woff2 create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-italic.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-italic.woff2 create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-regular.woff create mode 100644 devuser_guide/static/fonts/vendor/jost/jost-v4-latin-regular.woff2 create mode 100644 devuser_guide/static/images/browser/add_favourite.png create mode 100644 devuser_guide/static/images/browser/add_modal.png create mode 100644 devuser_guide/static/images/browser/context_menu_1.png create mode 100644 devuser_guide/static/images/browser/context_menu_2.png create mode 100644 devuser_guide/static/images/browser/edit_modal.png create mode 100644 devuser_guide/static/images/browser/favourites.png create mode 100644 devuser_guide/static/images/browser/star_modal.png create mode 100644 devuser_guide/static/images/browser/url_bar.png create mode 100644 devuser_guide/static/images/vendor/.gitkeep create mode 100644 devuser_guide/static/js/vendor/.gitkeep create mode 100644 devuser_guide/static/logo-doks.png create mode 100644 devuser_guide/static/site.webmanifest create mode 100644 devuser_guide/theme.toml diff --git a/devuser_guide/.editorconfig b/devuser_guide/.editorconfig new file mode 100644 index 000000000..dad6b5822 --- /dev/null +++ b/devuser_guide/.editorconfig @@ -0,0 +1,11 @@ +# editorconfig.org + +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/devuser_guide/.eslintignore b/devuser_guide/.eslintignore new file mode 100644 index 000000000..57d005799 --- /dev/null +++ b/devuser_guide/.eslintignore @@ -0,0 +1,4 @@ +assets/js/index.js +assets/js/katex.js +assets/js/vendor +node_modules \ No newline at end of file diff --git a/devuser_guide/.eslintrc.json b/devuser_guide/.eslintrc.json new file mode 100644 index 000000000..c926994dc --- /dev/null +++ b/devuser_guide/.eslintrc.json @@ -0,0 +1,31 @@ +{ + "env": { + "browser": true, + "commonjs": true, + "es6": true, + "node": true + }, + "extends": "eslint:recommended", + "globals": { + "Atomics": "readonly", + "SharedArrayBuffer": "readonly" + }, + "parserOptions": { + "ecmaVersion": 2018, + "sourceType": "module" + }, + "rules": { + "no-console": 0, + "quotes": ["error", "single"], + "comma-dangle": [ + "error", + { + "arrays": "always-multiline", + "objects": "always-multiline", + "imports": "always-multiline", + "exports": "always-multiline", + "functions": "ignore" + } + ] + } +} \ No newline at end of file diff --git a/devuser_guide/.github/ISSUE_TEMPLATE/bug-report---.md b/devuser_guide/.github/ISSUE_TEMPLATE/bug-report---.md new file mode 100644 index 000000000..6a8b3a848 --- /dev/null +++ b/devuser_guide/.github/ISSUE_TEMPLATE/bug-report---.md @@ -0,0 +1,25 @@ +--- +name: "Bug report \U0001F41E" +about: Create a report to help us improve + +--- + +## Description + +Describe the issue that you're seeing. + +### Steps to reproduce + +Clear steps describing how to reproduce the issue. Please please please link to a demo project if possible, this makes your issue _much_ easier to diagnose (seriously). + +### Expected result + +What should happen? + +### Actual result + +What happened. + +### Environment + +Paste the information here as shown by `npm run check` diff --git a/devuser_guide/.github/ISSUE_TEMPLATE/config.yml b/devuser_guide/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..e3766187d --- /dev/null +++ b/devuser_guide/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,4 @@ +contact_links: + - name: Question 🙋 + url: https://github.com/h-enk/doks/discussions/categories/q-a + about: Ask your question in Doks Discussions \ No newline at end of file diff --git a/devuser_guide/.github/ISSUE_TEMPLATE/feature-request---.md b/devuser_guide/.github/ISSUE_TEMPLATE/feature-request---.md new file mode 100644 index 000000000..74da274c4 --- /dev/null +++ b/devuser_guide/.github/ISSUE_TEMPLATE/feature-request---.md @@ -0,0 +1,17 @@ +--- +name: "Feature request \U0001F680" +about: Suggest an idea for Doks + +--- + +## Summary + +Brief explanation of the feature. + +### Basic example + +Include a basic example or links here. + +### Motivation + +Why are we doing this? What use cases does it support? What is the expected outcome? diff --git a/devuser_guide/.github/dependabot.yml b/devuser_guide/.github/dependabot.yml new file mode 100644 index 000000000..8abca405f --- /dev/null +++ b/devuser_guide/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/devuser_guide/.github/workflows/codeql-analysis.yml b/devuser_guide/.github/workflows/codeql-analysis.yml new file mode 100644 index 000000000..0f02f7c79 --- /dev/null +++ b/devuser_guide/.github/workflows/codeql-analysis.yml @@ -0,0 +1,62 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +name: "CodeQL" + +on: + push: + branches: [master] + pull_request: + # The branches below must be a subset of the branches above + branches: [master] + schedule: + - cron: '0 11 * * 5' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # Override automatic language detection by changing the below list + # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] + language: ['javascript'] + # Learn more... + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹī¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏ī¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/devuser_guide/.github/workflows/node.js-ci.yml b/devuser_guide/.github/workflows/node.js-ci.yml new file mode 100644 index 000000000..fce41fcd5 --- /dev/null +++ b/devuser_guide/.github/workflows/node.js-ci.yml @@ -0,0 +1,48 @@ +# Test and build your Hyas project +# For more information see: https://henkverlinde.com/continuous-integration-workflow-for-your-hyas-project/ + +name: Hyas CI + +on: + push: + branches: [master] + pull_request: + branches: [master] + +jobs: + build: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [14.x, 15.x] + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Install Hugo + uses: peaceiris/actions-hugo@v2 + with: + hugo-version: 'latest' + extended: true + + - name: Check install Hugo + run: hugo version + + - name: Install dependencies + run: npm ci + + - name: Check for linting errors + run: npm test + + - name: Delete temporary directories + run: npm run clean + + - name: Build production website + run: npm run build diff --git a/devuser_guide/.github/workflows/readme.yml b/devuser_guide/.github/workflows/readme.yml new file mode 100644 index 000000000..9b40ec79e --- /dev/null +++ b/devuser_guide/.github/workflows/readme.yml @@ -0,0 +1,17 @@ +name: Readme + +on: + schedule: + - cron: 0 18 * * * + push: + branches: + - master + +jobs: + update: + runs-on: ubuntu-latest + steps: + - uses: JasonEtco/rss-to-readme@v1 + with: + feed-url: https://getdoks.org/blog/index.xml + readme-section: feed \ No newline at end of file diff --git a/devuser_guide/.gitignore b/devuser_guide/.gitignore new file mode 100644 index 000000000..6b8464487 --- /dev/null +++ b/devuser_guide/.gitignore @@ -0,0 +1,6 @@ +functions +node_modules +public +resources +# Local Netlify folder +.netlify \ No newline at end of file diff --git a/devuser_guide/.markdownlint.json b/devuser_guide/.markdownlint.json new file mode 100644 index 000000000..a8b885d07 --- /dev/null +++ b/devuser_guide/.markdownlint.json @@ -0,0 +1,10 @@ +{ + "comment": "Hyas rules", + + "default": true, + "line_length": false, + "no-inline-html": false, + "no-trailing-punctuation": false, + "no-duplicate-heading": false, + "no-bare-urls": false +} \ No newline at end of file diff --git a/devuser_guide/.markdownlintignore b/devuser_guide/.markdownlintignore new file mode 100644 index 000000000..a0380d659 --- /dev/null +++ b/devuser_guide/.markdownlintignore @@ -0,0 +1,3 @@ +node_modules +CHANGELOG.md +README.md \ No newline at end of file diff --git a/devuser_guide/.npmrc b/devuser_guide/.npmrc new file mode 100644 index 000000000..445772bb5 --- /dev/null +++ b/devuser_guide/.npmrc @@ -0,0 +1 @@ +hugo_bin_build_tags = "extended" \ No newline at end of file diff --git a/devuser_guide/.stylelintignore b/devuser_guide/.stylelintignore new file mode 100644 index 000000000..3972095a3 --- /dev/null +++ b/devuser_guide/.stylelintignore @@ -0,0 +1,3 @@ +assets/scss/components/_syntax.scss +assets/scss/vendor +node_modules \ No newline at end of file diff --git a/devuser_guide/.stylelintrc.json b/devuser_guide/.stylelintrc.json new file mode 100644 index 000000000..1490802c9 --- /dev/null +++ b/devuser_guide/.stylelintrc.json @@ -0,0 +1,34 @@ +{ + "extends": "stylelint-config-standard", + "rules": { + "no-empty-source": null, + "string-quotes": "double", + "at-rule-no-unknown": [ + true, + { + "ignoreAtRules": [ + "extend", + "at-root", + "debug", + "warn", + "error", + "if", + "else", + "for", + "each", + "while", + "mixin", + "include", + "content", + "return", + "function", + "tailwind", + "apply", + "responsive", + "variants", + "screen" + ] + } + ] + } +} \ No newline at end of file diff --git a/devuser_guide/.versionrc.json b/devuser_guide/.versionrc.json new file mode 100644 index 000000000..68d870cb9 --- /dev/null +++ b/devuser_guide/.versionrc.json @@ -0,0 +1,28 @@ +{ + "types": [ + {"type": "feat", "section": "Features"}, + {"type": "fix", "section": "Bug Fixes"}, + {"type": "chore", "hidden": true}, + {"type": "deps", "section": "Dependencies"}, + {"type": "docs", "section": "Documentation"}, + {"type": "dev_guide", "section": "Dev Guid"}, + {"type": "style", "hidden": true}, + {"type": "refactor", "hidden": true}, + {"type": "perf", "hidden": true}, + {"type": "test", "hidden": true} + ], + "bumpFiles": [ + { + "filename": "package.json", + "type": "json" + }, + { + "filename": "package-lock.json", + "type": "json" + }, + { + "filename": "data/doks.json", + "type": "json" + } + ] +} \ No newline at end of file diff --git a/devuser_guide/CHANGELOG.md b/devuser_guide/CHANGELOG.md new file mode 100644 index 000000000..8e64ad590 --- /dev/null +++ b/devuser_guide/CHANGELOG.md @@ -0,0 +1,243 @@ +# 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)) diff --git a/devuser_guide/CODE_OF_CONDUCT.md b/devuser_guide/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..77366b2e2 --- /dev/null +++ b/devuser_guide/CODE_OF_CONDUCT.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or + advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic + address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at hello@getdoks.org. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/devuser_guide/LICENSE b/devuser_guide/LICENSE new file mode 100644 index 000000000..fc33812f5 --- /dev/null +++ b/devuser_guide/LICENSE @@ -0,0 +1,21 @@ +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. \ No newline at end of file diff --git a/devuser_guide/README.md b/devuser_guide/README.md new file mode 100644 index 000000000..4a89be7d2 --- /dev/null +++ b/devuser_guide/README.md @@ -0,0 +1,125 @@ +

+ + Doks + +

+ +

+ Doks +

+ +

+ Modern documentation theme +

+ +

+ Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default. +

+ +

+ + GitHub + + + GitHub release (latest SemVer including pre-releases) + + + GitHub Workflow Status (branch) + + + Netlify + +

+ +![Doks — Modern Documentation Theme](https://raw.githubusercontent.com/h-enk/doks/master/images/tn.png) + +## Demo + +- [doks.netlify.app](https://doks.netlify.app/) + +## Why Doks? + +Nine reasons why you should use Doks: + +1. __Security aware__. Get A+ scores on [Mozilla Observatory](https://observatory.mozilla.org/analyze/doks.netlify.app) out of the box. Easily change the default Security Headers to suit your needs. + +2. __Fast by default__. Get 100 scores on [Google Lighthouse](https://googlechrome.github.io/lighthouse/viewer/?gist=7731347bb8ce999eff7428a8e763b637) by default. Doks removes unused css, prefetches links, and lazy loads images. + +3. __SEO-ready__. Use sensible defaults for structured data, open graph, and Twitter cards. Or easily change the SEO settings to your liking. + +4. __Development tools__. Code with confidence. Check styles, scripts, and markdown for errors and fix automatically or manually. + +5. __Bootstrap framework__. Build robust, flexible, and intuitive websites with Bootstrap 5. Easily customize your Doks site with the source Sass files. + +6. __Netlify-ready__. Deploy to Netlify with sensible defaults. Easily use Netlify Functions, Netlify Redirects, and Netlify Headers. + +7. __Full text search__. Search your Doks site with FlexSearch. Easily customize index settings and search options to your liking. + +8. __Page layouts__. Build pages with a landing page, blog, or documentation layout. Add custom sections and components to suit your needs. + +9. __Dark mode__. Switch to a low-light UI with the click of a button. Change colors with variables to match your branding. + +## Requirements + +Doks uses npm to centralize dependency management, making it [easy to update](https://getdoks.org/docs/help/how-to-update/) resources, build tooling, plugins, and build scripts: + +- Download and install [Node.js](https://nodejs.org/) (it includes npm) for your platform. + +## Get started + +Start a new Doks project in three steps: + +### 1. Create a new site + +Doks is available as a child theme, and a starter theme: + +- Use the Doks child theme, if you do __not__ plan to customize a lot, and/or need future Doks updates. +- Use the Doks starter theme, if you plan to customize a lot, and/or do __not__ need future Doks updates. + +Not quite sure? Use the Doks child theme. + +#### Doks child theme + +```bash +git clone https://github.com/h-enk/doks-child-theme.git my-doks-site && cd my-doks-site +``` + +#### Doks starter theme + +```bash +git clone https://github.com/h-enk/doks.git my-doks-site && cd my-doks-site +``` + +### 2. Install dependencies + +```bash +npm install +``` + +### 3. Start development server + +```bash +npm run start +``` + +## Other commands + +Doks comes with [commands](https://getdoks.org/docs/prologue/commands/) for common tasks. + +## Documentation + +- [Netlify](https://docs.netlify.com/) +- [Hugo](https://gohugo.io/documentation/) +- [Doks](https://getdoks.org/) + +## Communities + +- [Netlify Community](https://community.netlify.com/) +- [Hugo Forums](https://discourse.gohugo.io/) +- [Doks Discussions](https://github.com/h-enk/doks/discussions) + +## Blog + +* [Doks v0.2](https://getdoks.org/blog/doks-v0.2/) +* [Say hello to Doks 👋](https://getdoks.org/blog/say-hello-to-doks/) + diff --git a/devuser_guide/archetypes/blog.md b/devuser_guide/archetypes/blog.md new file mode 100644 index 000000000..787335142 --- /dev/null +++ b/devuser_guide/archetypes/blog.md @@ -0,0 +1,13 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: "" +lead: "" +date: {{ .Date }} +lastmod: {{ .Date }} +draft: true +weight: 50 +images: ["{{ .Name | urlize }}.jpg"] +contributors: [] +--- + +{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" class="wide" >}} diff --git a/devuser_guide/archetypes/default.md b/devuser_guide/archetypes/default.md new file mode 100644 index 000000000..d8210df1b --- /dev/null +++ b/devuser_guide/archetypes/default.md @@ -0,0 +1,8 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: "" +date: {{ .Date }} +lastmod: {{ .Date }} +draft: true +images: [] +--- diff --git a/devuser_guide/archetypes/docs.md b/devuser_guide/archetypes/docs.md new file mode 100644 index 000000000..bb609d265 --- /dev/null +++ b/devuser_guide/archetypes/docs.md @@ -0,0 +1,16 @@ +--- +title: "{{ replace .Name "-" " " | title }}" +description: "" +lead: "" +date: {{ .Date }} +lastmod: {{ .Date }} +draft: true +images: [] +menu: + docs: + parent: "" +weight: 999 +toc: true +--- + +{{< img src="{{ .Name | urlize }}.jpg" alt="{{ replace .Name "-" " " | title }}" caption="{{ replace .Name "-" " " | title }}" >}} diff --git a/devuser_guide/assets/fonts/.gitkeep b/devuser_guide/assets/fonts/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/assets/images/.gitkeep b/devuser_guide/assets/images/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/assets/js/app.js b/devuser_guide/assets/js/app.js new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/assets/js/bootstrap.js b/devuser_guide/assets/js/bootstrap.js new file mode 100644 index 000000000..8d6da8d91 --- /dev/null +++ b/devuser_guide/assets/js/bootstrap.js @@ -0,0 +1,2 @@ +import 'bootstrap/dist/js/bootstrap.bundle.min.js' +// import 'bootstrap/dist/js/bootstrap.min.js' diff --git a/devuser_guide/assets/js/clipboard.js b/devuser_guide/assets/js/clipboard.js new file mode 100644 index 000000000..b216c12bc --- /dev/null +++ b/devuser_guide/assets/js/clipboard.js @@ -0,0 +1,18 @@ +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); +}); diff --git a/devuser_guide/assets/js/darkmode.js b/devuser_guide/assets/js/darkmode.js new file mode 100644 index 000000000..4d8bcce6c --- /dev/null +++ b/devuser_guide/assets/js/darkmode.js @@ -0,0 +1,12 @@ +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'); + +} diff --git a/devuser_guide/assets/js/highlight.js b/devuser_guide/assets/js/highlight.js new file mode 100644 index 000000000..f9879dc6f --- /dev/null +++ b/devuser_guide/assets/js/highlight.js @@ -0,0 +1,24 @@ +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); + }); +}); diff --git a/devuser_guide/assets/js/index.js b/devuser_guide/assets/js/index.js new file mode 100644 index 000000000..8c87d5fb7 --- /dev/null +++ b/devuser_guide/assets/js/index.js @@ -0,0 +1,146 @@ +var suggestions = document.getElementById('suggestions'); +var userinput = document.getElementById('userinput'); + +document.addEventListener('keydown', inputFocus); + +function inputFocus(e) { + + if (e.keyCode === 191 ) { + e.preventDefault(); + userinput.focus(); + } + + if (e.keyCode === 27 ) { + userinput.blur(); + suggestions.classList.add('d-none'); + } + +} + +document.addEventListener('click', function(event) { + + var isClickInsideElement = suggestions.contains(event.target); + + if (!isClickInsideElement) { + suggestions.classList.add('d-none'); + } + +}); + +/* +Source: + - https://dev.to/shubhamprakash/trap-focus-using-javascript-6a3 +*/ + +document.addEventListener('keydown',suggestionFocus); + +function suggestionFocus(e){ + + const focusableSuggestions= suggestions.querySelectorAll('a'); + const focusable= [...focusableSuggestions]; + const index = focusable.indexOf(document.activeElement); + + let nextIndex = 0; + + if (e.keyCode === 38) { + e.preventDefault(); + nextIndex= index > 0 ? index-1 : 0; + focusableSuggestions[nextIndex].focus(); + } + else if (e.keyCode === 40) { + e.preventDefault(); + nextIndex= index+1 < focusable.length ? index+1 : index; + focusableSuggestions[nextIndex].focus(); + } + +} + + +/* +Source: + - https://github.com/nextapps-de/flexsearch#index-documents-field-search + - https://raw.githack.com/nextapps-de/flexsearch/master/demo/autocomplete.html +*/ + +(function(){ + + var index = new FlexSearch({ + preset: 'score', + cache: true, + doc: { + id: 'id', + field: [ + 'title', + 'description', + 'content', + ], + store: [ + 'href', + 'title', + 'description', + ], + }, + }); + + var docs = [ + {{ range $index, $page := (where .Site.Pages "Section" "docs") -}} + { + id: {{ $index }}, + href: "{{ .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 = 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; + } + +}()); diff --git a/devuser_guide/assets/js/instant.page.js b/devuser_guide/assets/js/instant.page.js new file mode 100644 index 000000000..b394bcc4c --- /dev/null +++ b/devuser_guide/assets/js/instant.page.js @@ -0,0 +1 @@ +import 'instant.page'; diff --git a/devuser_guide/assets/js/katex.js b/devuser_guide/assets/js/katex.js new file mode 100644 index 000000000..e0543eafe --- /dev/null +++ b/devuser_guide/assets/js/katex.js @@ -0,0 +1,10 @@ +document.addEventListener('DOMContentLoaded', function() { + renderMathInElement(document.body, { + delimiters: [ + {left: '$$', right: '$$', display: true}, + {left: '$', right: '$', display: false}, + {left: '\\(', right: '\\)', display: false}, + {left: '\\[', right: '\\]', display: true}, + ], + }); +}); diff --git a/devuser_guide/assets/js/lazysizes.js b/devuser_guide/assets/js/lazysizes.js new file mode 100644 index 000000000..c12ed585d --- /dev/null +++ b/devuser_guide/assets/js/lazysizes.js @@ -0,0 +1 @@ +import 'lazysizes'; diff --git a/devuser_guide/assets/js/vendor/.gitkeep b/devuser_guide/assets/js/vendor/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/assets/lambda/.gitignore b/devuser_guide/assets/lambda/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/assets/lambda/hi-from-lambda.js b/devuser_guide/assets/lambda/hi-from-lambda.js new file mode 100644 index 000000000..88e4fa008 --- /dev/null +++ b/devuser_guide/assets/lambda/hi-from-lambda.js @@ -0,0 +1,11 @@ +exports.handler = (event, context, callback) => { + callback (null, { + statusCode: 200, + headers: { + 'Content-Type': 'application/json', + }, + body: JSON.stringify({ + message: 'Hi from Lambda.', + }), + }); +} diff --git a/devuser_guide/assets/scss/app.scss b/devuser_guide/assets/scss/app.scss new file mode 100644 index 000000000..29a22a517 --- /dev/null +++ b/devuser_guide/assets/scss/app.scss @@ -0,0 +1,34 @@ +/** 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 KaTeX */ +@import "katex/dist/katex"; + +/** 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"; diff --git a/devuser_guide/assets/scss/common/_dark.scss b/devuser_guide/assets/scss/common/_dark.scss new file mode 100644 index 000000000..078993917 --- /dev/null +++ b/devuser_guide/assets/scss/common/_dark.scss @@ -0,0 +1,333 @@ +/** 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 { + background: $body-bg-dark; + color: $body-color-dark; +} + +body.dark a { + color: $link-color-dark; +} + +body.dark a.text-body { + color: $body-color-dark !important; +} + +body.dark .btn-primary { + @include button-variant($button-color-dark, $button-color-dark); + + color: $body-bg-dark !important; +} + +body.dark .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; +} diff --git a/devuser_guide/assets/scss/common/_fonts.scss b/devuser_guide/assets/scss/common/_fonts.scss new file mode 100644 index 000000000..d2b772525 --- /dev/null +++ b/devuser_guide/assets/scss/common/_fonts.scss @@ -0,0 +1,71 @@ +/* jost-regular - latin */ +@font-face { + font-family: "Jost"; + font-style: normal; + font-weight: 400; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-regular.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-regular.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* jost-500 - latin */ +@font-face { + font-family: "Jost"; + font-style: normal; + font-weight: 500; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-500.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-500.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* jost-700 - latin */ +@font-face { + font-family: "Jost"; + font-style: normal; + font-weight: 700; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-700.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-700.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* jost-italic - latin */ +@font-face { + font-family: "Jost"; + font-style: italic; + font-weight: 400; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-italic.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* jost-500italic - latin */ +@font-face { + font-family: "Jost"; + font-style: italic; + font-weight: 500; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-500italic.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-500italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} + +/* jost-700italic - latin */ +@font-face { + font-family: "Jost"; + font-style: italic; + font-weight: 700; + font-display: swap; + src: + local("Jost"), + url("fonts/vendor/jost/jost-v4-latin-700italic.woff2") format("woff2"), + url("fonts/vendor/jost/jost-v4-latin-700italic.woff") format("woff"); /* Chrome 6+, Firefox 3.6+, IE 9+, Safari 5.1+ */ +} diff --git a/devuser_guide/assets/scss/common/_global.scss b/devuser_guide/assets/scss/common/_global.scss new file mode 100644 index 000000000..ad4550310 --- /dev/null +++ b/devuser_guide/assets/scss/common/_global.scss @@ -0,0 +1,229 @@ +.contributors .content, +.blog .content, +.page .content, +.error404 .content, +.docs.list .content, +.tutorial.list .content, +.showcase.list .content { + padding-top: 1rem; + padding-bottom: 3rem; +} + +h1, +h2, +h3, +h4, +h5, +h6, +.h1, +.h2, +.h3, +.h4, +.h5, +.h6 { + margin: 2rem 0 1rem; +} + +@include media-breakpoint-up(md) { + body { + font-size: $font-size-md; + padding-top: 4rem !important; + } + + h1, + h2, + h3, + h4, + h5, + h6, + .h1, + .h2, + .h3, + .h4, + .h5, + .h6 { + margin-bottom: 1.125rem; + } +} + +.home h1 { + /* font-size: calc(1.375rem + 1.5vw); */ + font-size: calc(1.875rem + 1.5vw); +} + +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: 1px solid $gray-200; + } + + @supports ((position:-webkit-sticky) or (position:sticky)) { + .docs-sidebar { + position: -webkit-sticky; + position: sticky; + top: 4rem; + z-index: 1000; + height: calc(100vh - 4rem); + } + } +} + +@include media-breakpoint-up(xl) { + .docs-sidebar { + flex: 0 1 320px; + } +} + +.docs-links { + padding-bottom: 5rem; +} + +@include media-breakpoint-up(lg) { + @supports ((position: -webkit-sticky) or (position: sticky)) { + .docs-links { + max-height: calc(100vh - 4rem); + overflow-y: scroll; + } + } +} + +@include media-breakpoint-up(lg) { + .docs-links { + display: block; + width: auto; + margin-right: -1.5rem; + padding-bottom: 4rem; + } +} + +.docs-toc { + order: 2; +} + +@supports ((position:-webkit-sticky) or (position:sticky)) { + .docs-toc { + position: -webkit-sticky; + position: sticky; + top: 4rem; + height: calc(100vh - 4rem); + overflow-y: auto; + } +} + +.docs-content { + padding-bottom: 3rem; + order: 1; +} + +.docs-navigation { + border-top: 1px solid $gray-200; + margin-top: 2rem; + margin-bottom: 0; + padding-top: 2rem; +} + +.docs-navigation a { + font-size: $font-size-base * 0.9; +} + +@include media-breakpoint-up(lg) { + .docs-navigation { + margin-bottom: -1rem; + } + + .docs-navigation a { + font-size: $font-size-base; + } +} + +.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; +} + +.katex { + font-size: $font-size-md; +} diff --git a/devuser_guide/assets/scss/common/_variables.scss b/devuser_guide/assets/scss/common/_variables.scss new file mode 100644 index 000000000..4bb8fc484 --- /dev/null +++ b/devuser_guide/assets/scss/common/_variables.scss @@ -0,0 +1,157 @@ +// 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 `` 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; diff --git a/devuser_guide/assets/scss/components/_alerts.scss b/devuser_guide/assets/scss/components/_alerts.scss new file mode 100644 index 000000000..b40c5712b --- /dev/null +++ b/devuser_guide/assets/scss/components/_alerts.scss @@ -0,0 +1,63 @@ +.alert { + font-family: $font-family-monospace; + font-size: $font-size-sm; +} + +.alert-icon { + margin-right: 0.75rem; +} + +.docs .alert { + margin: 2rem -1.5rem; +} + +.alert .alert-link { + text-decoration: underline; +} + +.alert-dark { + color: $white; + background-color: $black; +} + +.alert-dark .alert-link { + color: $white; +} + +.alert-light { + color: $black; +} + +.alert-warning { + background: $beige; + color: $black; +} + +/* +.alert-light { + color: #215888; + background: linear-gradient(-45deg, rgb(212, 245, 255), rgb(234, 250, 255), rgb(234, 250, 255), #d3f6ef); +} + +.alert-light .alert-link { + color: #215888; +} +*/ + +.alert-white { + background-color: rgba(255, 255, 255, 0.95); +} + +.alert-primary { + color: $white; + background-color: $primary; +} + +.alert-primary .alert-link { + color: $white; +} + +.alert .alert-link:hover, +.alert .alert-link:focus { + text-decoration: none; +} diff --git a/devuser_guide/assets/scss/components/_buttons.scss b/devuser_guide/assets/scss/components/_buttons.scss new file mode 100644 index 000000000..f20a0d2e2 --- /dev/null +++ b/devuser_guide/assets/scss/components/_buttons.scss @@ -0,0 +1,91 @@ +.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; +} diff --git a/devuser_guide/assets/scss/components/_code.scss b/devuser_guide/assets/scss/components/_code.scss new file mode 100644 index 000000000..9ad855bef --- /dev/null +++ b/devuser_guide/assets/scss/components/_code.scss @@ -0,0 +1,62 @@ +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; +} diff --git a/devuser_guide/assets/scss/components/_comments.scss b/devuser_guide/assets/scss/components/_comments.scss new file mode 100644 index 000000000..18f610c94 --- /dev/null +++ b/devuser_guide/assets/scss/components/_comments.scss @@ -0,0 +1,30 @@ +.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; +} diff --git a/devuser_guide/assets/scss/components/_doks.scss b/devuser_guide/assets/scss/components/_doks.scss new file mode 100644 index 000000000..4c8bfc7ef --- /dev/null +++ b/devuser_guide/assets/scss/components/_doks.scss @@ -0,0 +1,62 @@ +/* + +Doks — based on Ascetic by (c) Ivan Sagalaev + +*/ + +.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; +} diff --git a/devuser_guide/assets/scss/components/_forms.scss b/devuser_guide/assets/scss/components/_forms.scss new file mode 100644 index 000000000..9732838df --- /dev/null +++ b/devuser_guide/assets/scss/components/_forms.scss @@ -0,0 +1,19 @@ +/** 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; +} diff --git a/devuser_guide/assets/scss/components/_images.scss b/devuser_guide/assets/scss/components/_images.scss new file mode 100644 index 000000000..254eefa09 --- /dev/null +++ b/devuser_guide/assets/scss/components/_images.scss @@ -0,0 +1,48 @@ +figure { + margin: 2rem 0; +} + +.figure-caption { + margin: 0.25rem 0 0.75rem; +} + +figure.wide { + margin: 2rem -1.5rem; +} + +figure.wide .figure-caption { + margin: 0.25rem 1.5rem 0.75rem; +} + +@include media-breakpoint-up(md) { + figure.wide { + margin: 2rem -2.5rem; + } + + figure.wide .figure-caption { + margin: 0.25rem 2.5rem 0.75rem; + } +} + +@include media-breakpoint-up(lg) { + figure.wide { + margin: 2rem -5rem; + } + + figure.wide .figure-caption { + margin: 0.25rem 5rem 0.75rem; + } +} + +.blur-up { + filter: blur(5px); +} + +.blur-up.lazyloaded { + filter: unset; +} + +.img-simple { + margin-top: 0.375rem; + margin-bottom: 1.25rem; +} diff --git a/devuser_guide/assets/scss/components/_search.scss b/devuser_guide/assets/scss/components/_search.scss new file mode 100644 index 000000000..3a70b2b1f --- /dev/null +++ b/devuser_guide/assets/scss/components/_search.scss @@ -0,0 +1,75 @@ +.navbar-form { + position: relative; +} + +#suggestions { + position: absolute; + right: 0; + margin-top: 0.5rem; + width: calc(100vw - 3rem); +} + +#suggestions a { + display: block; + text-decoration: none; + padding: 0.75rem; + margin: 0 0.5rem; +} + +#suggestions a:focus { + background: $gray-100; + outline: 0; +} + +#suggestions div:not(:first-child) { + border-top: 1px dashed $gray-200; +} + +#suggestions div:first-child { + margin-top: 0.5rem; +} + +#suggestions div:last-child { + margin-bottom: 0.5rem; +} + +#suggestions a:hover { + background: $gray-100; +} + +#suggestions span { + display: flex; + font-size: $font-size-base; +} + +#suggestions span:first-child { + font-weight: $headings-font-weight; + color: $black; +} + +#suggestions span:nth-child(2) { + color: $gray-700; +} + +@include media-breakpoint-up(sm) { + #suggestions { + width: 30rem; + } + + #suggestions a { + display: flex; + } + + #suggestions span:first-child { + width: 9rem; + padding-right: 1rem; + border-right: 1px solid $gray-200; + display: inline-block; + text-align: right; + } + + #suggestions span:nth-child(2) { + width: 19rem; + padding-left: 1rem; + } +} diff --git a/devuser_guide/assets/scss/components/_syntax.scss b/devuser_guide/assets/scss/components/_syntax.scss new file mode 100644 index 000000000..d9a1c0256 --- /dev/null +++ b/devuser_guide/assets/scss/components/_syntax.scss @@ -0,0 +1,131 @@ +/*! + * GitHub Light v0.5.0 + * Copyright (c) 2012 - 2017 GitHub, Inc. + * Licensed under MIT (https://github.com/primer/github-syntax-theme-generator/blob/master/LICENSE) + */ + + .c1, + .c /* comment, punctuation.definition.comment, string.comment */ { + color: #6a737d; + } + + .v /* variable */, + .smw /* sublimelinter.mark.warning */ { + color: #e36209; + } + + // .c1 /* constant, entity.name.constant, variable.other.constant, variable.language, support, meta.property-name, support.constant, support.variable, meta.module-reference, markup.raw, meta.diff.header, meta.output */, + .s .v /* string variable */ { + color: #005cc5; + } + + .e /* entity */, + .en /* entity.name */ { + color: #6f42c1; + } + + .smi /* variable.parameter.function, storage.modifier.package, storage.modifier.import, storage.type.java, variable.other */, + .s .s1 /* string source */ { + color: #24292e; + } + + .ent /* entity.name.tag, markup.quote */ { + color: #22863a; + } + + .k /* keyword, storage, storage.type */ { + color: #d73a49; + } + + .s /* string */, + .pds /* punctuation.definition.string, source.regexp, string.regexp.character-class */, + .s .pse .s1 /* string punctuation.section.embedded source */, + .sr /* string.regexp */, + .sr .cce /* string.regexp constant.character.escape */, + .sr .sre /* string.regexp source.ruby.embedded */, + .sr .sra /* string.regexp string.regexp.arbitrary-repitition */ { + color: #032f62; + } + + .bu /* invalid.broken, invalid.deprecated, invalid.unimplemented, message.error, brackethighlighter.unmatched, sublimelinter.mark.error */ { + color: #b31d28; + } + + .ii /* invalid.illegal */ { + color: #fafbfc; + background-color: #b31d28; + } + + .c2 /* carriage-return */ { + color: #fafbfc; + background-color: #d73a49; + } + + .c2::before /* carriage-return */ { + content: "^M"; + } + + .sr .cce /* string.regexp constant.character.escape */ { + font-weight: bold; + color: #22863a; + } + + .ml /* markup.list */ { + color: #735c0f; + } + + .mh /* markup.heading */, + .mh .en /* markup.heading entity.name */, + .ms /* meta.separator */ { + font-weight: bold; + color: #005cc5; + } + + .mi /* markup.italic */ { + font-style: italic; + color: #24292e; + } + + .mb /* markup.bold */ { + font-weight: bold; + color: #24292e; + } + + .md /* markup.deleted, meta.diff.header.from-file, punctuation.definition.deleted */ { + color: #b31d28; + background-color: #ffeef0; + } + + .mi1 /* markup.inserted, meta.diff.header.to-file, punctuation.definition.inserted */ { + color: #22863a; + background-color: #f0fff4; + } + + .mc /* markup.changed, punctuation.definition.changed */ { + color: #e36209; + background-color: #ffebda; + } + + .mi2 /* markup.ignored, markup.untracked */ { + color: #f6f8fa; + background-color: #005cc5; + } + + .mdr /* meta.diff.range */ { + font-weight: bold; + color: #6f42c1; + } + + .ba /* brackethighlighter.tag, brackethighlighter.curly, brackethighlighter.round, brackethighlighter.square, brackethighlighter.angle, brackethighlighter.quote */ { + color: #586069; + } + + .sg /* sublimelinter.gutter-mark */ { + color: #959da5; + } + + .corl /* constant.other.reference.link, string.other.link */ { + text-decoration: underline; + color: #032f62; + } + \ No newline at end of file diff --git a/devuser_guide/assets/scss/components/_tables.scss b/devuser_guide/assets/scss/components/_tables.scss new file mode 100644 index 000000000..b1f8c2e79 --- /dev/null +++ b/devuser_guide/assets/scss/components/_tables.scss @@ -0,0 +1,5 @@ +table { + @extend .table; + + margin: 3rem 0; +} diff --git a/devuser_guide/assets/scss/layouts/_footer.scss b/devuser_guide/assets/scss/layouts/_footer.scss new file mode 100644 index 000000000..7d2181144 --- /dev/null +++ b/devuser_guide/assets/scss/layouts/_footer.scss @@ -0,0 +1,20 @@ +.footer { + border-top: 1px solid $gray-200; + padding-top: 1.125rem; + padding-bottom: 1.125rem; +} + +.footer ul { + margin-bottom: 0; +} + +.footer li { + font-size: $font-size-sm; + margin-bottom: 0; +} + +@include media-breakpoint-up(md) { + .footer li { + font-size: $font-size-base; + } +} diff --git a/devuser_guide/assets/scss/layouts/_header.scss b/devuser_guide/assets/scss/layouts/_header.scss new file mode 100644 index 000000000..d9e7abd1a --- /dev/null +++ b/devuser_guide/assets/scss/layouts/_header.scss @@ -0,0 +1,268 @@ +.banner .nav li { + @extend .nav-item; +} + +.banner .nav a { + @extend .nav-link; +} + +.navbar-text { + margin-left: 1rem; +} + +.navbar-brand { + font-weight: $headings-font-weight; +} + +.navbar-light .navbar-brand, +.navbar-light .navbar-brand:hover, +.navbar-light .navbar-brand:active { + color: $body-color; +} + +.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 { + background-color: rgba(255, 255, 255, 0.95); + border-bottom: 1px solid $gray-200; + margin-top: 4px; +} + +.header-bar { + border-top: 4px solid; + border-image-source: linear-gradient(90deg, $primary, #8ed6fb 50%, #d32e9d); + border-image-slice: 1; +} + +.home .navbar { + border-bottom: 0; +} + +.navbar-form { + position: relative; + margin-top: 0.25rem; +} + +@include media-breakpoint-up(md) { + .navbar-brand { + margin-right: 1rem !important; + } + + .main-nav .nav-item:first-child .nav-link, + .social-nav .nav-item:first-child .nav-link { + padding-left: 0; + } + + .main-nav .nav-item:last-child .nav-link, + .social-nav .nav-item:last-child .nav-link { + padding-right: 0; + } + + .navbar-form { + margin-top: 0; + margin-left: 6rem; + margin-right: 1.5rem; + } +} + +@include media-breakpoint-up(lg) { + .navbar-form { + margin-left: 15rem; + } +} + +@include media-breakpoint-up(xl) { + .navbar-form { + margin-left: 30rem; + } +} + +.form-control.is-search { + /* + padding-right: calc(1.5em + 0.75rem); + */ + padding-right: 2.5rem; + background: $gray-100; + border: 0; + + /* + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 24 24' fill='none' stroke='%236c757d' stroke-width='2' stroke-linecap='round' stroke-linejoin='round' class='feather feather-search'%3E%3Ccircle cx='11' cy='11' r='8'%3E%3C/circle%3E%3Cline x1='21' y1='21' x2='16.65' y2='16.65'%3E%3C/line%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); + */ +} + +.navbar-form::after { + position: absolute; + top: 0.4625rem; + right: 0.5375rem; + display: flex; + align-items: center; + justify-content: center; + height: 1.5rem; + padding-right: 0.4375rem; + padding-left: 0.4375rem; + font-size: $font-size-base * 0.75; + color: $gray-700; + content: "/"; + border: 1px solid $gray-300; + border-radius: 0.25rem; +} + +/*! purgecss start ignore */ +.algolia-autocomplete { + display: flex !important; +} + +.algolia-autocomplete .ds-dropdown-menu { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +@include media-breakpoint-down(sm) { + .algolia-autocomplete .ds-dropdown-menu { + max-width: 512px !important; + min-width: 312px !important; + width: auto !important; + } + + .algolia-autocomplete .algolia-docsearch-suggestion .algolia-docsearch-suggestion--subcategory-column::after { + content: "|"; + margin-right: 0.25rem; + } +} + +.algolia-autocomplete .algolia-docsearch-suggestion--title { + margin-bottom: 0; +} + +.algolia-autocomplete .algolia-docsearch-suggestion--highlight { + padding: 0 0.05em; +} + +.algolia-autocomplete .algolia-docsearch-footer { + margin-top: 1rem; + margin-right: 0.5rem; + margin-bottom: 0.5rem; +} + +/*! purgecss end ignore */ + +/* + * Source: https://medium.com/creative-technology-concepts-code/responsive-mobile-dropdown-navigation-using-css-only-7218e4498a99 +*/ + +/* Style the menu icon for the dropdown */ + +.navbar .menu-icon { + cursor: pointer; + + /* display: inline-block; */ + + /* float: right; */ + padding: 1.125rem 0.625rem; + margin: 0 0 0 -0.625rem; + + /* position: relative; */ + user-select: none; +} + +.navbar .menu-icon .navicon { + background: $navbar-light-color; + display: block; + height: 2px; + position: relative; + transition: background 0.2s ease-out; + width: 18px; +} + +.navbar .menu-icon .navicon::before, +.navbar .menu-icon .navicon::after { + background: $navbar-light-color; + content: ""; + display: block; + height: 100%; + position: absolute; + transition: all 0.2s ease-out; + width: 100%; +} + +.navbar .menu-icon .navicon::before { + top: 5px; +} + +.navbar .menu-icon .navicon::after { + top: -5px; +} + +/* Add the icon and menu animations when the checkbox is clicked */ + +.navbar .menu-btn { + display: none; +} + +.navbar .menu-btn:checked ~ .navbar-collapse { + display: block; + max-height: 100vh; +} + +.navbar .menu-btn:checked ~ .menu-icon .navicon { + background: transparent; +} + +.navbar .menu-btn:checked ~ .menu-icon .navicon::before { + transform: rotate(-45deg); +} + +.navbar .menu-btn:checked ~ .menu-icon .navicon::after { + transform: rotate(45deg); +} + +.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::before, +.navbar .menu-btn:checked ~ .menu-icon:not(.steps) .navicon::after { + top: 0; +} diff --git a/devuser_guide/assets/scss/layouts/_pages.scss b/devuser_guide/assets/scss/layouts/_pages.scss new file mode 100644 index 000000000..8938dbc19 --- /dev/null +++ b/devuser_guide/assets/scss/layouts/_pages.scss @@ -0,0 +1,45 @@ +.docs-content > h2[id]::before, +.docs-content > h3[id]::before, +.docs-content > h4[id]::before { + display: block; + height: 6rem; + margin-top: -6rem; + content: ""; +} + +.anchor { + visibility: hidden; + padding-left: 0.5rem; +} + +h1:hover a, +h2:hover a, +h3:hover a, +h4:hover a { + visibility: visible; + text-decoration: none; +} + +.card-list { + margin-top: 2.25rem; +} + +.edit-page { + margin-top: 3rem; + font-size: $font-size-base; +} + +.edit-page svg { + margin-right: 0.5rem; + margin-bottom: 0.25rem; +} + +p.meta { + margin-top: 0.5rem; + font-size: $font-size-base; +} + +.breadcrumb { + margin-top: 2.25rem; + font-size: $font-size-base; +} diff --git a/devuser_guide/assets/scss/layouts/_posts.scss b/devuser_guide/assets/scss/layouts/_posts.scss new file mode 100644 index 000000000..da2766052 --- /dev/null +++ b/devuser_guide/assets/scss/layouts/_posts.scss @@ -0,0 +1,28 @@ +.home .card, +.contributors.list .card, +.blog.list .card { + margin-top: 2rem; + margin-bottom: 2rem; + transition: transform 0.3s; +} + +.home .card:hover, +.contributors.list .card:hover, +.blog.list .card:hover { + transform: scale(1.025); +} + +.home .card-body, +.contributors.list .card-body, +.blog.list .card-body { + padding: 0 2rem 1rem; +} + +.blog-header { + text-align: center; + margin-bottom: 2rem; +} + +.blog-footer { + text-align: center; +} diff --git a/devuser_guide/assets/scss/layouts/_sidebar.scss b/devuser_guide/assets/scss/layouts/_sidebar.scss new file mode 100644 index 000000000..46881bd08 --- /dev/null +++ b/devuser_guide/assets/scss/layouts/_sidebar.scss @@ -0,0 +1,110 @@ +.docs-links, +.docs-toc { + scrollbar-width: thin; + scrollbar-color: $white $white; +} + +.docs-links::-webkit-scrollbar, +.docs-toc::-webkit-scrollbar { + width: 5px; +} + +.docs-links::-webkit-scrollbar-track, +.docs-toc::-webkit-scrollbar-track { + background: $white; +} + +.docs-links::-webkit-scrollbar-thumb, +.docs-toc::-webkit-scrollbar-thumb { + background: $white; +} + +.docs-links:hover, +.docs-toc:hover { + scrollbar-width: thin; + scrollbar-color: $gray-200 $white; +} + +.docs-links:hover::-webkit-scrollbar-thumb, +.docs-toc:hover::-webkit-scrollbar-thumb { + background: $gray-200; +} + +.docs-links::-webkit-scrollbar-thumb:hover, +.docs-toc::-webkit-scrollbar-thumb:hover { + background: $gray-200; +} + +.docs-links h3, +.page-links h3 { + text-transform: uppercase; + font-size: $font-size-base; + margin: 1.25rem 0 0.5rem 0; + padding: 1.5rem 0 0 0; +} + +@include media-breakpoint-up(lg) { + .docs-links h3, + .page-links h3 { + margin: 1.125rem 1.5rem 0.75rem 0; + padding: 1.375rem 0 0 0; + } +} + +.docs-links h3:not(:first-child) { + border-top: 1px solid $gray-200; +} + +a.docs-link { + color: $body-color; + display: block; + padding: 0.125rem 0; + font-size: $font-size-base; +} + +.page-links li { + margin-top: 0.375rem; + padding-top: 0.375rem; +} + +.page-links li ul li { + border-top: none; + padding-left: 1rem; + margin-top: 0.125rem; + padding-top: 0.125rem; +} + +.page-links li:not(:first-child) { + border-top: 1px dashed $gray-200; +} + +.page-links a { + color: $body-color; + display: block; + padding: 0.125rem 0; + font-size: $font-size-base * 0.9375; +} + +.docs-link:hover, +.docs-link.active, +.page-links a:hover { + text-decoration: none; + color: $link-color; +} + +.docs-links h3.sidebar-link, +.page-links h3.sidebar-link { + text-transform: none; + font-size: $font-size-md; + font-weight: normal; +} + +.docs-links h3.sidebar-link a, +.page-links h3.sidebar-link a { + color: $body-color; +} + +.docs-links h3.sidebar-link a:hover, +.page-links h3.sidebar-link a:hover { + text-decoration: underline; +} diff --git a/devuser_guide/assets/scss/vendor/.gitkeep b/devuser_guide/assets/scss/vendor/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/babel.config.js b/devuser_guide/babel.config.js new file mode 100644 index 000000000..ce9c9de02 --- /dev/null +++ b/devuser_guide/babel.config.js @@ -0,0 +1,17 @@ +module.exports = { + presets: [ + [ + '@babel/preset-env', + { + targets: { + browsers: [ + // Best practice: https://github.com/babel/babel/issues/7789 + '>=1%', + 'not ie 11', + 'not op_mini all' + ] + } + } + ] + ] +}; \ No newline at end of file diff --git a/devuser_guide/config/_default/config.toml b/devuser_guide/config/_default/config.toml new file mode 100644 index 000000000..c800d6f3d --- /dev/null +++ b/devuser_guide/config/_default/config.toml @@ -0,0 +1,91 @@ +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" + [[module.mounts]] + source = "node_modules/katex" + target = "assets/js/vendor/katex" diff --git a/devuser_guide/config/_default/menus.toml b/devuser_guide/config/_default/menus.toml new file mode 100644 index 000000000..553541b97 --- /dev/null +++ b/devuser_guide/config/_default/menus.toml @@ -0,0 +1,62 @@ +[[docs]] + name = "Prologue" + weight = 10 + identifier = "prologue" + url = "/docs/prologue/" + +[[docs]] + name = "Test" + weight = 10 + identifier = "test" + url = "/docs/test/" + +[[docs]] + name = "Browser" + weight = 11 + identifier = "browser" + url = "/docs/browser/" + +[[dev]] + name = "Browser" + weight = 11 + identifier = "browser" + url = "/dev_guide/browser/" + +[[docs]] + name = "Help" + weight = 60 + identifier = "help" + url = "/docs/help/" + +[[main]] + name = "Docs" + url = "/docs/prologue/introduction/" + weight = 10 + +[[main]] + name = "Dev Guide" + url = "/dev_guide/" + weight = 11 + +[[main]] + name = "Blog" + url = "/blog/" + weight = 20 + +[[social]] + name = "Twitter" + pre = "" + url = "https://twitter.com/getdoks" + weight = 10 + +[[social]] + name = "GitHub" + pre = "" + url = "https://github.com/h-enk/doks" + post = "v0.1.0" + weight = 20 + +# [[footer]] +# name = "Privacy" +# url = "/privacy-policy/" +# weight = 10 diff --git a/devuser_guide/config/_default/params.toml b/devuser_guide/config/_default/params.toml new file mode 100644 index 000000000..ed44ae82b --- /dev/null +++ b/devuser_guide/config/_default/params.toml @@ -0,0 +1,58 @@ +# Meta Data for SEO + +## Homepage +title = "Doks" +titleSeparator = "-" +titleAddition = "Modern Documentation Theme" +description = "Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." + +## Open Graph + Twitter Cards +images = ["doks.png"] +twitterSite = "henkverlinde" +twitterCreator = "henkverlinde" +facebookAuthor = "verlinde.henk" +facebookPublisher = "verlinde.henk" +ogLocale = "en_US" + +## JSON-LD +schemaType = "Organization" +schemaLogo = "logo-doks.png" +schemaTwitter = "https://twitter.com/henkverlinde" +schemaLinkedIn = "https://www.linkedin.com/in/henkverlinde/" +schemaGitHub = "https://github.com/h-enk" +schemaSection = "blog" + +## Sitelinks Search Box +siteLinksSearchBox = false + +## Chrome Browser +themeColor = "#fff" + +# Images +quality = 85 +bgColor = "#fff" +landscapePhotoWidths = [900, 800, 700, 600, 500] +portraitPhotoWidths = [800, 700, 600, 500] +lqipWidth = "20x" + +# Footer +footer = "Powered by Netlify, Hugo, and Doks" + +# Alert +alert = false +alertText = "Like Doks? Star on GitHub. Thanks!" + +# Edit Page +docsRepo = "https://github.com/h-enk/doks" +editPage = false + +[options] + lazySizes = true + clipBoard = true + instantPage = true + flexSearch = true + darkMode = true + bootStrapJs = false + breadCrumb = false + highLight = true + kaTex = false diff --git a/devuser_guide/config/next/config.toml b/devuser_guide/config/next/config.toml new file mode 100644 index 000000000..bf4bbcd94 --- /dev/null +++ b/devuser_guide/config/next/config.toml @@ -0,0 +1,2 @@ +baseurl = "https://doks-next.netlify.app/" +canonifyURLs = true diff --git a/devuser_guide/config/postcss.config.js b/devuser_guide/config/postcss.config.js new file mode 100644 index 000000000..a97ab7812 --- /dev/null +++ b/devuser_guide/config/postcss.config.js @@ -0,0 +1,31 @@ +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', + './node_modules/katex/dist/katex.css', + ]), + ], + }), + ], +} diff --git a/devuser_guide/config/production/config.toml b/devuser_guide/config/production/config.toml new file mode 100644 index 000000000..c4ca660fd --- /dev/null +++ b/devuser_guide/config/production/config.toml @@ -0,0 +1,2 @@ +baseurl = "https://doks.netlify.app/" +canonifyURLs = true diff --git a/devuser_guide/content/_index.md b/devuser_guide/content/_index.md new file mode 100644 index 000000000..db4b8c439 --- /dev/null +++ b/devuser_guide/content/_index.md @@ -0,0 +1,9 @@ +--- +title : "Modern Documentation Theme" +description: "Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +lead: "Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +date: 2020-10-06T08:47:36+00:00 +lastmod: 2020-10-06T08:47:36+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/blog/_index.md b/devuser_guide/content/blog/_index.md new file mode 100644 index 000000000..37cb611db --- /dev/null +++ b/devuser_guide/content/blog/_index.md @@ -0,0 +1,8 @@ +--- +title: "Blog" +description: "The Doks Blog." +date: 2020-10-06T08:49:55+00:00 +lastmod: 2020-10-06T08:49:55+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/blog/say-hello-to-doks/index.md b/devuser_guide/content/blog/say-hello-to-doks/index.md new file mode 100644 index 000000000..e9c31858c --- /dev/null +++ b/devuser_guide/content/blog/say-hello-to-doks/index.md @@ -0,0 +1,11 @@ +--- +title: "Say hello to Doks 👋" +description: "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +lead: "Introducing Doks, a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +date: 2020-11-04T09:19:42+01:00 +lastmod: 2020-11-04T09:19:42+01:00 +draft: false +weight: 50 +images: ["say-hello-to-doks.png"] +contributors: ["Henk Verlinde"] +--- diff --git a/devuser_guide/content/blog/say-hello-to-doks/say-hello-to-doks.png b/devuser_guide/content/blog/say-hello-to-doks/say-hello-to-doks.png new file mode 100644 index 0000000000000000000000000000000000000000..70d8c78611ae4033c26e2d795b2f959133ec6cb4 GIT binary patch literal 8211 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 literal 0 HcmV?d00001 diff --git a/devuser_guide/content/contact/index.md b/devuser_guide/content/contact/index.md new file mode 100644 index 000000000..795089f6d --- /dev/null +++ b/devuser_guide/content/contact/index.md @@ -0,0 +1,10 @@ +--- +title: "Contact" +description: "Drop us an email." +date: 2020-08-27T19:25:12+02:00 +lastmod: 2020-08-27T19:25:12+02:00 +draft: true +images: [] +--- + +{{< email user="hello" domain="getdoks.org" >}} diff --git a/devuser_guide/content/contributors/_index.md b/devuser_guide/content/contributors/_index.md new file mode 100644 index 000000000..e225f3442 --- /dev/null +++ b/devuser_guide/content/contributors/_index.md @@ -0,0 +1,10 @@ +--- +title: "Contributors" +description: "The Doks contributors." +date: 2020-10-06T08:50:29+00:00 +lastmod: 2020-10-06T08:50:29+00:00 +draft: false +images: [] +--- + +The Doks contributors. diff --git a/devuser_guide/content/contributors/henk-verlinde/_index.md b/devuser_guide/content/contributors/henk-verlinde/_index.md new file mode 100644 index 000000000..f775534e0 --- /dev/null +++ b/devuser_guide/content/contributors/henk-verlinde/_index.md @@ -0,0 +1,12 @@ +--- +title: "Henk Verlinde" +description: "Creator of Hyas." +date: 2020-10-06T08:50:45+00:00 +lastmod: 2020-10-06T08:50:45+00:00 +draft: false +images: [] +--- + +Creator of Hyas. + +[@HenkVerlinde](https://twitter.com/henkverlinde) diff --git a/devuser_guide/content/dev_guide/_index.md b/devuser_guide/content/dev_guide/_index.md new file mode 100644 index 000000000..861095384 --- /dev/null +++ b/devuser_guide/content/dev_guide/_index.md @@ -0,0 +1,11 @@ +--- +title : "Dev Guide" +description: "Dev Guide" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +--- + +# Dev Guide diff --git a/devuser_guide/content/dev_guide/browser/_index.md b/devuser_guide/content/dev_guide/browser/_index.md new file mode 100644 index 000000000..3a537fecf --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/_index.md @@ -0,0 +1,10 @@ +--- +title : "Browser" +description: "Status Browser" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +--- + diff --git a/devuser_guide/content/dev_guide/browser/dapp.md b/devuser_guide/content/dev_guide/browser/dapp.md new file mode 100644 index 000000000..5d9aaed4e --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/dapp.md @@ -0,0 +1,18 @@ +--- +title : "DApps" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## dapps +### connecting a dapp +### confirming transaction +### signing diff --git a/devuser_guide/content/dev_guide/browser/favourites.md b/devuser_guide/content/dev_guide/browser/favourites.md new file mode 100644 index 000000000..0cd983c5a --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/favourites.md @@ -0,0 +1,83 @@ +--- +title : "Favourites" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + dev: + parent: "browser" +toc: true +--- + +[User Docs for this section](/docs/browser/favourites/) + +## Adding a favourite + +key source file: [`src/status/libstatus/browser.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/status/libstatus/browser.nim#L3) + +key source file: [`src/app/browser/view.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/app/browser/view.nim#L46) + +#### with the Star icon + +// TODO + +#### with the Add favourite button + +key source file: [`ui/app/AppLayouts/Browser/FavoritesList.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoritesList.qml#L39) + +key source file: [`ui/app/AppLayouts/Browser/AddFavoriteModal.qml`](https://github.com/status-im/status-desktop/blob/17b3a444589725f1723bda8549623e14a0277b2d/ui/app/AppLayouts/Browser/AddFavoriteModal.qml#L9) + +The modal is opened by calling `addFavoriteModal.open()` in `ui/app/AppLayouts/Browser/FavoritesList.qml` + +## Displaying favourites + +key source file: [`src/status/libstatus/browser.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/status/libstatus/browser.nim#L21) + +key source file: [`src/app/browser/view.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/app/browser/view.nim#L39) + +key source file: [`src/app/browser/views/bookmark_list.nim`](https://github.com/status-im/status-desktop/blob/17b3a444589725f1723bda8549623e14a0277b2d/src/app/browser/views/bookmark_list.nim#L5) + +#### In the Toolbar + +key source file: [`ui/app/AppLayouts/Browser/FavoritesBar.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoritesBar.qml#L12) + +#### in the blank page + +key source file: [`ui/app/AppLayouts/Browser/BrowserLayout.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/BrowserLayout.qml#L670) + +key source file: [`ui/app/AppLayouts/Browser/FavoritesList.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoritesList.qml#L10) + +// todo add how the list is added from the backend + +## Editing a favourite + +key source file: [`src/status/libstatus/browser.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/status/libstatus/browser.nim#L13) + +## Removing a favourite + +key source file: [`ui/app/AppLayouts/Browser/FavoriteMenu.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoriteMenu.qml#L53) + +key source file: [`ui/app/AppLayouts/Browser/AddFavoriteModal.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/AddFavoriteModal.qml#L129) + +key source file: [`src/app/browser/view.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/app/browser/view.nim#L51) + +key source file: [`src/status/libstatus/browser.nim`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/src/status/libstatus/browser.nim#L25) + +A favourite is removed by calling `browserModel.removeBookmark` from QML, in Nim, an RPC call to the backend is made using `browsers_deleteBookmark` with `url` as the payload + +## Loading a favourite + +key source file: [`ui/app/AppLayouts/Browser/FavoritesBar.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoritesBar.qml#L46) + +key source file: [`ui/app/AppLayouts/Browser/BrowserLayout.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/BrowserLayout.qml#L51) + +A favourite is loaded by setting `currentWebView.url` to the intended url. + +In this case [`ui/app/AppLayouts/Browser/FavoritesBar.qml`](https://github.com/status-im/status-desktop/blob/d2b6bf9310df088c89abcca7c1df42abc3999b18/ui/app/AppLayouts/Browser/FavoritesBar.qml#L46) each delegate has its own `url` property and that is used to set the `currentWebView.url` value after going through the`determineRealURL` helper in case it's a ENS domain etc.. + +``` +currentWebView.url = determineRealURL(url) +``` diff --git a/devuser_guide/content/dev_guide/browser/other_features.md b/devuser_guide/content/dev_guide/browser/other_features.md new file mode 100644 index 000000000..ebe00e90e --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/other_features.md @@ -0,0 +1,16 @@ +--- +title : "Other Features" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## other features +### downloads diff --git a/devuser_guide/content/dev_guide/browser/other_options.md b/devuser_guide/content/dev_guide/browser/other_options.md new file mode 100644 index 000000000..631bb4885 --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/other_options.md @@ -0,0 +1,20 @@ +--- +title : "Other options" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## other options +### zoom +### find +### compatibility mode +### developer tools +### incognito mode diff --git a/devuser_guide/content/dev_guide/browser/settings.md b/devuser_guide/content/dev_guide/browser/settings.md new file mode 100644 index 000000000..828b4c221 --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/settings.md @@ -0,0 +1,18 @@ +--- +title : "Settings" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## settings +### setting home page +### dapp access permissions +### other configs diff --git a/devuser_guide/content/dev_guide/browser/tabs.md b/devuser_guide/content/dev_guide/browser/tabs.md new file mode 100644 index 000000000..e031094c5 --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/tabs.md @@ -0,0 +1,18 @@ +--- +title : "Tabs" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## tabs +### opening tabs +### reordering tabs +### closing tabs diff --git a/devuser_guide/content/dev_guide/browser/url_bar.md b/devuser_guide/content/dev_guide/browser/url_bar.md new file mode 100644 index 000000000..b267ef99c --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/url_bar.md @@ -0,0 +1,19 @@ +--- +title : "URL Bar" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## url bar +### loading page +### search engine +### ethereum explorer +### ens/swarm support diff --git a/devuser_guide/content/dev_guide/browser/wallet.md b/devuser_guide/content/dev_guide/browser/wallet.md new file mode 100644 index 000000000..164e498d9 --- /dev/null +++ b/devuser_guide/content/dev_guide/browser/wallet.md @@ -0,0 +1,19 @@ +--- +title : "Wallet" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## wallet +### connecting/disconnecting +### choosing account +### viewing assets +### viewing history diff --git a/devuser_guide/content/docs/_index.md b/devuser_guide/content/docs/_index.md new file mode 100644 index 000000000..f807c6528 --- /dev/null +++ b/devuser_guide/content/docs/_index.md @@ -0,0 +1,9 @@ +--- +title : "Docs" +description: "Docs Doks." +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/docs/browser/_index.md b/devuser_guide/content/docs/browser/_index.md new file mode 100644 index 000000000..3a537fecf --- /dev/null +++ b/devuser_guide/content/docs/browser/_index.md @@ -0,0 +1,10 @@ +--- +title : "Browser" +description: "Status Browser" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +--- + diff --git a/devuser_guide/content/docs/browser/dapp.md b/devuser_guide/content/docs/browser/dapp.md new file mode 100644 index 000000000..5d9aaed4e --- /dev/null +++ b/devuser_guide/content/docs/browser/dapp.md @@ -0,0 +1,18 @@ +--- +title : "DApps" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## dapps +### connecting a dapp +### confirming transaction +### signing diff --git a/devuser_guide/content/docs/browser/favourites.md b/devuser_guide/content/docs/browser/favourites.md new file mode 100644 index 000000000..08cbb1957 --- /dev/null +++ b/devuser_guide/content/docs/browser/favourites.md @@ -0,0 +1,58 @@ +--- +title : "Favourites" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +[Dev Docs for this section](/dev_guide/browser/favourites/) + +## Adding a favourite + +There are two ways to add a favourite. + +#### Star icon + +Click the star icon +![url_bar](/images/browser/url_bar.png) + +A dialog will open, confirm the details and click "Done" + +![star_modal](/images/browser/star_modal.png) + +#### Add favourite button + +Another way to add a favourite is through the Add Favourite button in a blank tab +![add_favourite](/images/browser/add_favourite.png) + +A dialog will open, confirm the details and click "Done" + +![add_modal](/images/browser/add_modal.png) + +## Displaying favourites + +Favourites will be displayed in the favourites bar as well as in a blank tab as quick shortcuts +![favourites](/images/browser/favourites.png) + +## Editing a favourite + +Right click on a bookmark and click "Edit" +![context_menu_1](/images/browser/context_menu_1.png) +![context_menu_2](/images/browser/context_menu_2.png) + +then change the details and click "done" + +![edit_modal](/images/browser/edit_modal.png) + +## Removing a favourite + +Right click on a bookmark and click "Remove" +![context_menu_1](/images/browser/context_menu_1.png) +![context_menu_2](/images/browser/context_menu_2.png) diff --git a/devuser_guide/content/docs/browser/other_features.md b/devuser_guide/content/docs/browser/other_features.md new file mode 100644 index 000000000..ebe00e90e --- /dev/null +++ b/devuser_guide/content/docs/browser/other_features.md @@ -0,0 +1,16 @@ +--- +title : "Other Features" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## other features +### downloads diff --git a/devuser_guide/content/docs/browser/other_options.md b/devuser_guide/content/docs/browser/other_options.md new file mode 100644 index 000000000..631bb4885 --- /dev/null +++ b/devuser_guide/content/docs/browser/other_options.md @@ -0,0 +1,20 @@ +--- +title : "Other options" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## other options +### zoom +### find +### compatibility mode +### developer tools +### incognito mode diff --git a/devuser_guide/content/docs/browser/settings.md b/devuser_guide/content/docs/browser/settings.md new file mode 100644 index 000000000..828b4c221 --- /dev/null +++ b/devuser_guide/content/docs/browser/settings.md @@ -0,0 +1,18 @@ +--- +title : "Settings" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## settings +### setting home page +### dapp access permissions +### other configs diff --git a/devuser_guide/content/docs/browser/tabs.md b/devuser_guide/content/docs/browser/tabs.md new file mode 100644 index 000000000..e031094c5 --- /dev/null +++ b/devuser_guide/content/docs/browser/tabs.md @@ -0,0 +1,18 @@ +--- +title : "Tabs" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## tabs +### opening tabs +### reordering tabs +### closing tabs diff --git a/devuser_guide/content/docs/browser/url_bar.md b/devuser_guide/content/docs/browser/url_bar.md new file mode 100644 index 000000000..b267ef99c --- /dev/null +++ b/devuser_guide/content/docs/browser/url_bar.md @@ -0,0 +1,19 @@ +--- +title : "URL Bar" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## url bar +### loading page +### search engine +### ethereum explorer +### ens/swarm support diff --git a/devuser_guide/content/docs/browser/wallet.md b/devuser_guide/content/docs/browser/wallet.md new file mode 100644 index 000000000..164e498d9 --- /dev/null +++ b/devuser_guide/content/docs/browser/wallet.md @@ -0,0 +1,19 @@ +--- +title : "Wallet" +description: "" +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +menu: + docs: + parent: "browser" +toc: true +--- + +## wallet +### connecting/disconnecting +### choosing account +### viewing assets +### viewing history diff --git a/devuser_guide/content/docs/help/_index.md b/devuser_guide/content/docs/help/_index.md new file mode 100644 index 000000000..bc503ecf4 --- /dev/null +++ b/devuser_guide/content/docs/help/_index.md @@ -0,0 +1,9 @@ +--- +title: "Help" +description: "Help Doks." +lead: "" +date: 2020-10-06T08:49:15+00:00 +lastmod: 2020-10-06T08:49:15+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/docs/help/faq.md b/devuser_guide/content/docs/help/faq.md new file mode 100644 index 000000000..826586bfa --- /dev/null +++ b/devuser_guide/content/docs/help/faq.md @@ -0,0 +1,50 @@ +--- +title: "FAQ" +description: "Answers to frequently asked questions." +lead: "Answers to frequently asked questions." +date: 2020-10-06T08:49:31+00:00 +lastmod: 2020-10-06T08:49:31+00:00 +draft: false +images: [] +menu: + docs: + parent: "help" +weight: 630 +toc: true +--- + +## Hyas? + +Doks is a [Hyas theme](https://gethyas.com/themes/) build by the creator of Hyas. + +## Footer notice? + +Please keep it in place. + +## Keyboard shortcuts for search? + +- focus: `/` +- select: `↓` and `↑` +- open: `Enter` +- close: `Esc` + +## Other documentation? + +- [Netlify](https://docs.netlify.com/) +- [Hugo](https://gohugo.io/documentation/) + +## Can I get support? + +Create a topic: + +- [Netlify Community](https://community.netlify.com/) +- [Hugo Forums](https://discourse.gohugo.io/) +- [Doks Discussions](https://github.com/h-enk/doks/discussions) + +## Contact the creator? + +Send `h-enk` a message: + +- [Netlify Community](https://community.netlify.com/) +- [Hugo Forums](https://discourse.gohugo.io/) +- [Doks Discussions](https://github.com/h-enk/doks/discussions) diff --git a/devuser_guide/content/docs/help/how-to-update.md b/devuser_guide/content/docs/help/how-to-update.md new file mode 100644 index 000000000..43cb1f4f4 --- /dev/null +++ b/devuser_guide/content/docs/help/how-to-update.md @@ -0,0 +1,32 @@ +--- +title: "How to Update" +description: "Regularly update the installed npm packages to keep your Doks website stable, usable, and secure." +lead: "Regularly update the installed npm packages to keep your Doks website stable, usable, and secure." +date: 2020-11-12T13:26:54+01:00 +lastmod: 2020-11-12T13:26:54+01:00 +draft: false +images: [] +menu: + docs: + parent: "help" +weight: 610 +toc: true +--- + +{{< alert icon="💡" text="Learn more about semantic versioning and advanced range syntax." >}} + +## Check for outdated packages + +The [`npm outdated`](https://docs.npmjs.com/cli/v7/commands/npm-outdated) command will check the registry to see if any (or, specific) installed packages are currently outdated: + +```bash +npm outdated [[<@scope>/] ...] +``` + +## Update packages + +The [`npm update`](https://docs.npmjs.com/cli/v7/commands/npm-update) command will update all the packages listed to the latest version (specified by the tag config), respecting semver: + +```bash +npm update [...] +``` diff --git a/devuser_guide/content/docs/help/troubleshooting.md b/devuser_guide/content/docs/help/troubleshooting.md new file mode 100644 index 000000000..0d52dbb17 --- /dev/null +++ b/devuser_guide/content/docs/help/troubleshooting.md @@ -0,0 +1,30 @@ +--- +title: "Troubleshooting" +description: "Solutions to common problems." +lead: "Solutions to common problems." +date: 2020-11-12T15:22:20+01:00 +lastmod: 2020-11-12T15:22:20+01:00 +draft: false +images: [] +menu: + docs: + parent: "help" +weight: 620 +toc: true +--- + +## Problems updating npm packages + +Delete the `./node_modules` folder, and run again: + +```bash +npm install +``` + +## Problems with cache + +Delete the temporary directories: + +```bash +npm run clean +``` diff --git a/devuser_guide/content/docs/prologue/_index.md b/devuser_guide/content/docs/prologue/_index.md new file mode 100644 index 000000000..c3c1c40bc --- /dev/null +++ b/devuser_guide/content/docs/prologue/_index.md @@ -0,0 +1,9 @@ +--- +title : "Prologue" +description: "Prologue Doks." +lead: "" +date: 2020-10-06T08:48:45+00:00 +lastmod: 2020-10-06T08:48:45+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/docs/prologue/commands.md b/devuser_guide/content/docs/prologue/commands.md new file mode 100644 index 000000000..b7922ee43 --- /dev/null +++ b/devuser_guide/content/docs/prologue/commands.md @@ -0,0 +1,118 @@ +--- +title: "Commands" +description: "Doks comes with commands for common tasks." +lead: "Doks comes with commands for common tasks." +date: 2020-10-13T15:21:01+02:00 +lastmod: 2020-10-13T15:21:01+02:00 +draft: false +images: [] +menu: + docs: + parent: "prologue" +weight: 130 +toc: true +--- + +{{< alert icon="💡" text="You can change the commands in the scripts section of `./package.json`." >}} + +## create + +Create new content for your site: + +{{< btn-copy text="npm run create" >}} + +```bash +npm run create [path] [flags] +``` + +See also the Hugo docs: [hugo new](https://gohugo.io/commands/hugo_new/). + +## lint + +Check scripts, styles, and markdown for errors: + +{{< btn-copy text="npm run lint" >}} + +```bash +npm run lint +``` + +### scripts + +Check scripts for errors: + +{{< btn-copy text="npm run lint:scripts" >}} + +```bash +npm run lint:scripts [-- --fix] +``` + +### styles + +Check styles for errors: + +{{< btn-copy text="npm run lint:styles" >}} + +```bash +npm run lint:styles [-- --fix] +``` + +### markdown + +Check markdown for errors: + +{{< btn-copy text="npm run lint:markdown" >}} + +```bash +npm run lint:markdown [-- --fix] +``` + +## clean + +Delete temporary directories: + +{{< btn-copy text="npm run clean" >}} + +```bash +npm run clean +``` + +## start + +Start local development server: + +{{< btn-copy text="npm run start" >}} + +```bash +npm run start +``` + +## build + +Build production website: + +{{< btn-copy text="npm run build" >}} + +```bash +npm run build +``` + +### functions + +Build Lambda functions: + +{{< btn-copy text="npm run build:functions" >}} + +```bash +npm run build:functions +``` + +### preview + +Build production website including draft and future content: + +{{< btn-copy text="npm run build:preview" >}} + +```bash +npm run build:preview +``` diff --git a/devuser_guide/content/docs/prologue/introduction.md b/devuser_guide/content/docs/prologue/introduction.md new file mode 100644 index 000000000..e1a62de11 --- /dev/null +++ b/devuser_guide/content/docs/prologue/introduction.md @@ -0,0 +1,58 @@ +--- +title: "Introduction" +description: "Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +lead: "Doks is a Hugo theme helping you build modern documentation websites that are secure, fast, and SEO-ready — by default." +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 +--- + +## Get started + +There are two main ways to get started with Doks: + +### Tutorial + +{{< alert icon="👉" text="The Tutorial is intended for novice to intermediate users." >}} + +Step-by-step instructions on how to start a new Doks project. [Tutorial →](https://getdoks.org/tutorial/introduction/) + +### Quick Start + +{{< alert icon="👉" text="The Quick Start is intended for intermediate to advanced users." >}} + +One page summary of how to start a new Doks project. [Quick Start →]({{< relref "quick-start" >}}) + +## Go further + +Recipes, Reference Guides, Extensions, and Showcase. + +### Recipes + +Get instructions on how to accomplish common tasks with Doks. [Recipes →](https://getdoks.org/docs/recipes/project-configuration/) + +### Reference Guides + +Learn how to customize Doks to fully make it your own. [Reference Guides →](https://getdoks.org/docs/reference-guides/security/) + +### Extensions + +Get instructions on how to add even more to Doks. [Extensions →](https://getdoks.org/docs/extensions/breadcrumb-navigation/) + +### Showcase + +See what others have build with Doks. [Showcase →](https://getdoks.org/showcase/electric-blocks/) + +## Contributing + +Find out how to contribute to Doks. [Contributing →](https://getdoks.org/docs/contributing/how-to-contribute/) + +## Help + +Get help on Doks. [Help →]({{< relref "how-to-update" >}}) diff --git a/devuser_guide/content/docs/prologue/quick-start.md b/devuser_guide/content/docs/prologue/quick-start.md new file mode 100644 index 000000000..89e103254 --- /dev/null +++ b/devuser_guide/content/docs/prologue/quick-start.md @@ -0,0 +1,79 @@ +--- +title: "Quick Start" +description: "One page summary of how to start a new Doks project." +lead: "One page summary of how to start a new Doks project." +date: 2020-11-16T13:59:39+01:00 +lastmod: 2020-11-16T13:59:39+01:00 +draft: false +images: [] +menu: + docs: + parent: "prologue" +weight: 110 +toc: true +--- + +## Requirements + +Doks uses npm to centralize dependency management, making it [easy to update]({{< relref "how-to-update" >}}) resources, build tooling, plugins, and build scripts: + +- Download and install [Node.js](https://nodejs.org/) (it includes npm) for your platform. + +## Start a new Doks project + +Create a new site, change directories, install dependencies, and start development server. + +### Create a new site + +Doks is available as a child theme, and a starter theme: + +- Use the Doks child theme, if you do __not__ plan to customize a lot, and/or need future Doks updates. +- Use the Doks starter theme, if you plan to customize a lot, and/or do __not__ need future Doks updates. + +Not quite sure? Use the Doks child theme. + +#### Doks child theme + +{{< btn-copy text="git clone https://github.com/h-enk/doks-child-theme.git my-doks-site" >}} + +```bash +git clone https://github.com/h-enk/doks-child-theme.git my-doks-site +``` + +#### Doks starter theme + +{{< btn-copy text="git clone https://github.com/h-enk/doks.git my-doks-site" >}} + +```bash +git clone https://github.com/h-enk/doks.git my-doks-site +``` + +### Change directories + +{{< btn-copy text="cd my-doks-site" >}} + +```bash +cd my-doks-site +``` + +### Install dependencies + +{{< btn-copy text="npm install" >}} + +```bash +npm install +``` + +### Start development server + +{{< btn-copy text="npm run start" >}} + +```bash +npm run start +``` + +Doks will start the Hugo development webserver accessible by default at `http://localhost:1313`. Saved changes will live reload in the browser. + +## Other commands + +Doks comes with commands for common tasks. [Commands →]({{< relref "commands" >}}) diff --git a/devuser_guide/content/docs/test/_index.md b/devuser_guide/content/docs/test/_index.md new file mode 100644 index 000000000..e12dc9464 --- /dev/null +++ b/devuser_guide/content/docs/test/_index.md @@ -0,0 +1,9 @@ +--- +title : "test" +description: "Docs Doks." +lead: "" +date: 2020-10-06T08:48:23+00:00 +lastmod: 2020-10-06T08:48:23+00:00 +draft: false +images: [] +--- diff --git a/devuser_guide/content/docs/test/test2.md b/devuser_guide/content/docs/test/test2.md new file mode 100644 index 000000000..00c54e066 --- /dev/null +++ b/devuser_guide/content/docs/test/test2.md @@ -0,0 +1,118 @@ +--- +title: "test25" +description: "Doks comes with commands for common tasks." +lead: "Doks comes with commands for common tasks." +date: 2020-10-13T15:21:01+02:00 +lastmod: 2020-10-13T15:21:01+02:00 +draft: false +images: [] +menu: + docs: + parent: "test" +weight: 130 +toc: true +--- + +{{< alert icon="💡" text="You can change the commands in the scripts section of `./package.json`." >}} + +## create + +Create new content for your site: + +{{< btn-copy text="npm run create" >}} + +```bash +npm run create [path] [flags] +``` + +See also the Hugo docs: [hugo new](https://gohugo.io/commands/hugo_new/). + +## lint + +Check scripts, styles, and markdown for errors: + +{{< btn-copy text="npm run lint" >}} + +```bash +npm run lint +``` + +### scripts + +Check scripts for errors: + +{{< btn-copy text="npm run lint:scripts" >}} + +```bash +npm run lint:scripts [-- --fix] +``` + +### styles + +Check styles for errors: + +{{< btn-copy text="npm run lint:styles" >}} + +```bash +npm run lint:styles [-- --fix] +``` + +### markdown + +Check markdown for errors: + +{{< btn-copy text="npm run lint:markdown" >}} + +```bash +npm run lint:markdown [-- --fix] +``` + +## clean + +Delete temporary directories: + +{{< btn-copy text="npm run clean" >}} + +```bash +npm run clean +``` + +## start + +Start local development server: + +{{< btn-copy text="npm run start" >}} + +```bash +npm run start +``` + +## build + +Build production website: + +{{< btn-copy text="npm run build" >}} + +```bash +npm run build +``` + +### functions + +Build Lambda functions: + +{{< btn-copy text="npm run build:functions" >}} + +```bash +npm run build:functions +``` + +### preview + +Build production website including draft and future content: + +{{< btn-copy text="npm run build:preview" >}} + +```bash +npm run build:preview +``` diff --git a/devuser_guide/content/privacy-policy/index.md b/devuser_guide/content/privacy-policy/index.md new file mode 100644 index 000000000..631502408 --- /dev/null +++ b/devuser_guide/content/privacy-policy/index.md @@ -0,0 +1,36 @@ +--- +title: "Privacy Policy" +description: "We do not use cookies and we do not collect any personal data." +date: 2020-08-27T19:23:18+02:00 +lastmod: 2020-08-27T19:23:18+02:00 +draft: true +images: [] +--- + +__TLDR__: We do not use cookies and we do not collect any personal data. + +## Website visitors + +- No personal information is collected. +- No information is stored in the browser. +- No information is shared with, sent to or sold to third-parties. +- No information is shared with advertising companies. +- No information is mined and harvested for personal and behavioral trends. +- No information is monetized. + +### Information we collect and what we use it for + +We run [Plausible](https://plausible.io/) analytics on getdoks.org. The following information is collected: + +- __Page URL__. We track the page URL of each page view on this website. We use this to understand which pages have been viewed and how many times a particular page has been viewed. For example: _https://getdoks.org/_. +- __HTTP Referrer__. We use the referrer string to understand the number of visitors referred to this website from links on other sites. For example: _https://github.com/_. +- __Browser__. We use this to understand what browsers people use when visiting this website. This is derived from the User-Agent HTTP header. The full User-Agent is discarded. For example: _Chrome_. +- __Operating system__. We use this to understand what operating systems people use when visiting this website. We only use the brand of the operating system and don’t include the version number or any other details. This is derived from the User-Agent HTTP header. The full User-Agent is discarded. For example: _GNU/Linux_. +- __Device type__. We use this to understand what devices people use when visiting this website. This is derived from window.innerWidth. The actual width of the browser in pixels is discarded. For example: _Desktop_. +- __Visitor Country__. We look up the visitor’s country using the IP address. We do not track anything more granular than the country of origin and the IP address of the visitor is discarded. We never store IP addresses in our database or logs. For example: _Canada_. + +## Contact us + +[Contact us]({{< relref "contact/index.md" >}}) if you have any questions. + +Effective Date: _27th August 2020_ diff --git a/devuser_guide/data/.gitkeep b/devuser_guide/data/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/devuser_guide/data/doks.json b/devuser_guide/data/doks.json new file mode 100644 index 000000000..fdd05fa99 --- /dev/null +++ b/devuser_guide/data/doks.json @@ -0,0 +1,4 @@ +{ + "name": "doks", + "version": "0.2.3" +} diff --git a/devuser_guide/data/hyas.json b/devuser_guide/data/hyas.json new file mode 100644 index 000000000..10a92caa0 --- /dev/null +++ b/devuser_guide/data/hyas.json @@ -0,0 +1,4 @@ +{ + "name": "hyas", + "version": "1.3.5" +} \ No newline at end of file diff --git a/devuser_guide/images/screenshot.png b/devuser_guide/images/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..5849cbbb3ed1d7c67ef2ed4e45eeae4854f4030b GIT binary patch literal 124825 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 U6-avM+{xA?KFf*~i0J$LFAUK3MF0Q* literal 0 HcmV?d00001 diff --git a/devuser_guide/images/tn.png b/devuser_guide/images/tn.png new file mode 100644 index 0000000000000000000000000000000000000000..e51da8eea1b4e40cf3ada868ef49181fcbef3279 GIT binary patch literal 139888 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