Browse Source

add docsify forwarder & redirects

Jack Humbert 3 years ago
parent
commit
db9f5c6013
5 changed files with 326 additions and 158 deletions
  1. 4 0
      docs/README.md
  2. 279 158
      docs/docusaurus.config.js
  3. 24 0
      docs/package-lock.json
  4. 1 0
      docs/package.json
  5. 18 0
      docs/src/components/DocsifyForwarder.js

+ 4 - 0
docs/README.md

@@ -1,3 +1,5 @@
+import DocsifyForwarder from '@site/src/components/DocsifyForwarder';
+
 # Quantum Mechanical Keyboard Firmware
 
 ## What is QMK Firmware?
@@ -43,3 +45,5 @@ There are a lot of ways you can contribute to the QMK Community. The easiest way
 * [Translate our documentation into your language](translating.md)
 * [Report a bug](https://github.com/qmk/qmk_firmware/issues/new/choose)
 * [Open a Pull Request](contributing.md)
+
+<DocsifyForwarder />

+ 279 - 158
docs/docusaurus.config.js

@@ -1,169 +1,290 @@
 // @ts-check
 // Note: type annotations allow type checking and IDEs autocompletion
 
-const lightCodeTheme = require('prism-react-renderer/themes/github');
-const darkCodeTheme = require('prism-react-renderer/themes/dracula');
+const lightCodeTheme = require("prism-react-renderer/themes/github");
+const darkCodeTheme = require("prism-react-renderer/themes/dracula");
 
 /** @type {import('@docusaurus/types').Config} */
 const config = {
-  title: 'QMK Firmware',
-  tagline: 'Potatoes are cool',
-  favicon: 'img/favicon.ico',
-
-  // Set the production url of your site here
-  url: 'https://docs.qmk.fm',
-  // Set the /<baseUrl>/ pathname under which your site is served
-  // For GitHub pages deployment, it is often '/<projectName>/'
-  baseUrl: '/',
-
-  // GitHub pages deployment config.
-  // If you aren't using GitHub pages, you don't need these.
-  organizationName: 'qmk', // Usually your GitHub org/user name.
-  projectName: 'qmk_firmware', // Usually your repo name.
-
-  onBrokenLinks: 'throw',
-  onBrokenMarkdownLinks: 'warn',
-
-  // Even if you don't use internalization, you can use this field to set useful
-  // metadata like html lang. For example, if your site is Chinese, you may want
-  // to replace "en" with "zh-Hans".
-  i18n: {
-    defaultLocale: 'en',
-    locales: ['en'],//, 'ja', 'zh-cn'],
-  },
-
-  presets: [
-    [
-      'classic',
-      /** @type {import('@docusaurus/preset-classic').Options} */
-      ({
-        docs: {
-          sidebarPath: require.resolve('./sidebars.js'),
-          path: ".",
-          routeBasePath: "/",
-          exclude: [
-            "node_modules",
-            "src",
-            "static",
-            "ja",
-            "zh-cn",
-            "gitbook",
-            // "ChangeLog"
-          ],
-          editUrl:
-            'https://github.com/qmk/qmk_firmware/edit/master/docs/',
-        },
-        blog: false,
-        theme: {
-          customCss: require.resolve('./src/css/custom.css'),
-        },
-      }),
-    ],
-  ],
-
-  themeConfig:
-    /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
-    ({
-      image: 'img/qmk-social-card.jpg',
-      navbar: {
-        title: 'QMK Firmware Docs',
-        logo: {
-          alt: 'QMK Firmware',
-          src: 'img/qmk-new-light.svg',
-          srcDark: 'img/qmk-new-dark.svg',
-          width: 32,
-          height: 32,
-        },
-        items: [
-          {
-            type: 'localeDropdown',
-            position: 'right',
-          },
-          {
-            href: 'https://github.com/qmk/qmk_firmware',
-            label: 'GitHub',
-            position: 'right',
-          },
+    title: "QMK Firmware",
+    tagline: "The full documentation of the open-source firmware",
+    favicon: "img/favicon.ico",
+
+    // Set the production url of your site here
+    url: "https://docs.qmk.fm",
+    // Set the /<baseUrl>/ pathname under which your site is served
+    // For GitHub pages deployment, it is often '/<projectName>/'
+    baseUrl: "/",
+
+    // GitHub pages deployment config.
+    // If you aren't using GitHub pages, you don't need these.
+    organizationName: "qmk", // Usually your GitHub org/user name.
+    projectName: "qmk_firmware", // Usually your repo name.
+
+    onBrokenLinks: "throw",
+    onBrokenMarkdownLinks: "warn",
+
+    // Even if you don't use internalization, you can use this field to set useful
+    // metadata like html lang. For example, if your site is Chinese, you may want
+    // to replace "en" with "zh-Hans".
+    i18n: {
+        defaultLocale: "en",
+        locales: ["en"], //, 'ja', 'zh-cn'],
+    },
+
+    presets: [
+        [
+            "classic",
+            /** @type {import('@docusaurus/preset-classic').Options} */
+            ({
+                docs: {
+                    sidebarPath: require.resolve("./sidebars.js"),
+                    path: ".",
+                    routeBasePath: "/",
+                    exclude: [
+                        "node_modules",
+                        "src",
+                        "static",
+                        "ja",
+                        "zh-cn",
+                        "gitbook",
+                        // "ChangeLog"
+                    ],
+                    editUrl:
+                        "https://github.com/qmk/qmk_firmware/edit/master/docs/",
+                },
+                blog: false,
+                theme: {
+                    customCss: require.resolve("./src/css/custom.css"),
+                },
+            }),
         ],
-      },
-      docs: {
-        sidebar: {
-          autoCollapseCategories: false
-        }
-      },
-      footer: {
-        style: 'dark',
-        links: [
-          {
-            title: 'Docs',
-            items: [
-              {
-                label: 'Docs',
-                to: '/',
-              },
-            ],
-          },
-          {
-            title: 'Community',
-            items: [
-              {
-                label: 'Discord',
-                href: 'https://discord.gg/Uq7gcHh',
-              },
-              {
-                label: 'Reddit',
-                href: 'https://reddit.com/r/olkb',
-              },
-            ],
-          },
-          {
-            title: 'More',
-            items: [
-              {
-                label: 'GitHub',
-                href: 'https://github.com/qmk/qmk_firmware',
-              },
-            ],
-          },
+    ],
+
+    plugins: [
+        [
+            "@docusaurus/plugin-client-redirects",
+            {
+                fromExtensions: ['md', 'html'],
+                redirects: [
+                    // from index.html
+                    {
+                        from: '/adding_a_keyboard_to_qmk',
+                        to: '/hardware_keyboard_guidelines',
+                    },
+                    {
+                        from: '/build_environment_setup',
+                        to: '/newbs_getting_started',
+                    },
+                    {
+                        from: '/cli_dev_configuration',
+                        to: '/cli_configuration',
+                    },
+                    {
+                        from: '/dynamic_macros',
+                        to: '/feature_dynamic_macros',
+                    },
+                    {
+                        from: '/feature_common_shortcuts',
+                        to: '/feature_advanced_keycodes',
+                    },
+                    {
+                        from: '/glossary',
+                        to: '/reference_glossary',
+                    },
+                    {
+                        from: '/key_lock',
+                        to: '/feature_key_lock',
+                    },
+                    {
+                        from: '/make_instructions',
+                        to: '/getting_started_make_guide',
+                    },
+                    {
+                        from: '/space_cadet_shift',
+                        to: '/feature_space_cadet_shift',
+                    },
+                    {
+                        from: '/getting_started_getting_help',
+                        to: '/support',
+                    },
+                    {
+                        from: '/tap_dance',
+                        to: '/feature_tap_dance',
+                    },
+                    {
+                        from: '/unicode',
+                        to: '/feature_unicode',
+                    },
+                    {
+                        from: '/python_development',
+                        to: '/cli_development',
+                    },
+                    {
+                        from: '/getting_started_build_tools',
+                        to: '/newbs_getting_started',
+                    },
+                    {
+                        from: '/tutorial',
+                        to: '/newbs',
+                    },
+                    // from redirects.json
+                    // {
+                    //     from: "/adding_a_keyboard_to_qmk",
+                    //     to: "/hardware_keyboard_guidelines"
+                    // },
+                    // {
+                    //     from: "/build_environment_setup",
+                    //     to: "/getting_started_build_tools"
+                    // },
+                    // {
+                    //     from: "/dynamic_macros",
+                    //     to: "/feature_dynamic_macros"
+                    // },
+                    // {
+                    //     from: "/feature_common_shortcuts",
+                    //     to: "/feature_advanced_keycodes"
+                    // },
+                    // {
+                    //     from: "/glossary",
+                    //     to: "/reference_glossary"
+                    // },
+                    // {
+                    //     from: "/key_lock",
+                    //     to: "/feature_key_lock"
+                    // },
+                    // {
+                    //     from: "/make_instructions",
+                    //     to: "/getting_started_make_guide"
+                    // },
+                    // {
+                    //     from: "/porting_your_keyboard_to_qmk",
+                    //     to: "/hardware_avr"
+                    // },
+                    // {
+                    //     from: "/space_cadet_shift",
+                    //     to: "/feature_space_cadet_shift"
+                    // },
+                    // {
+                    //     from: "/tap_dance",
+                    //     to: "/feature_tap_dance"
+                    // },
+                    // {
+                    //     from: "/unicode",
+                    //     to: "/feature_unicode"
+                    // },
+                    // {
+                    //     from: "/python_development",
+                    //     to: "/cli_development"
+                    // }
+                  ],
+            },
         ],
-        copyright: `Copyright © ${new Date().getFullYear()} QMK. Built with Docusaurus.`,
-      },
-      prism: {
-        theme: lightCodeTheme,
-        darkTheme: darkCodeTheme,
-      },  
-      // applied for - will fill out once we hear back
-      //
-      // algolia: {
-      //   // The application ID provided by Algolia
-      //   appId: 'YOUR_APP_ID',
-
-      //   // Public API key: it is safe to commit it
-      //   apiKey: 'YOUR_SEARCH_API_KEY',
-
-      //   indexName: 'YOUR_INDEX_NAME',
-
-      //   // Optional: see doc section below
-      //   contextualSearch: true,
-
-      //   // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
-      //   externalUrlRegex: 'external\\.com|domain\\.com',
-
-      //   // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs
-      //   replaceSearchResultPathname: {
-      //     from: '/docs/', // or as RegExp: /\/docs\//
-      //     to: '/',
-      //   },
-
-      //   // Optional: Algolia search parameters
-      //   searchParameters: {},
-
-      //   // Optional: path for search page that enabled by default (`false` to disable it)
-      //   searchPagePath: 'search',
-
-      //   //... other Algolia params
-      // },
-    }),
+    ],
+
+    themeConfig:
+        /** @type {import('@docusaurus/preset-classic').ThemeConfig} */
+        ({
+            image: "img/qmk-social-card.jpg",
+            navbar: {
+                title: "QMK Firmware Docs",
+                logo: {
+                    alt: "QMK Firmware",
+                    src: "img/qmk-new-light.svg",
+                    srcDark: "img/qmk-new-dark.svg",
+                    width: 32,
+                    height: 32,
+                },
+                items: [
+                    // {
+                    // type: 'localeDropdown',
+                    // position: 'right',
+                    // },
+                    {
+                        href: "https://github.com/qmk/qmk_firmware",
+                        label: "GitHub",
+                        position: "right",
+                    },
+                ],
+            },
+            docs: {
+                sidebar: {
+                    autoCollapseCategories: false,
+                },
+            },
+            footer: {
+                style: "dark",
+                links: [
+                    {
+                        title: "Docs",
+                        items: [
+                            {
+                                label: "Docs",
+                                to: "/",
+                            },
+                        ],
+                    },
+                    {
+                        title: "Community",
+                        items: [
+                            {
+                                label: "Discord",
+                                href: "https://discord.gg/Uq7gcHh",
+                            },
+                            {
+                                label: "Reddit",
+                                href: "https://reddit.com/r/olkb",
+                            },
+                        ],
+                    },
+                    {
+                        title: "More",
+                        items: [
+                            {
+                                label: "GitHub",
+                                href: "https://github.com/qmk/qmk_firmware",
+                            },
+                        ],
+                    },
+                ],
+                copyright: `Copyright © ${new Date().getFullYear()} QMK. Built with Docusaurus.`,
+            },
+            prism: {
+                theme: lightCodeTheme,
+                darkTheme: darkCodeTheme,
+            },
+            // applied for - will fill out once we hear back
+            //
+            // algolia: {
+            //   // The application ID provided by Algolia
+            //   appId: 'YOUR_APP_ID',
+
+            //   // Public API key: it is safe to commit it
+            //   apiKey: 'YOUR_SEARCH_API_KEY',
+
+            //   indexName: 'YOUR_INDEX_NAME',
+
+            //   // Optional: see doc section below
+            //   contextualSearch: true,
+
+            //   // Optional: Specify domains where the navigation should occur through window.location instead on history.push. Useful when our Algolia config crawls multiple documentation sites and we want to navigate with window.location.href to them.
+            //   externalUrlRegex: 'external\\.com|domain\\.com',
+
+            //   // Optional: Replace parts of the item URLs from Algolia. Useful when using the same search index for multiple deployments using a different baseUrl. You can use regexp or string in the `from` param. For example: localhost:3000 vs myCompany.com/docs
+            //   replaceSearchResultPathname: {
+            //     from: '/docs/', // or as RegExp: /\/docs\//
+            //     to: '/',
+            //   },
+
+            //   // Optional: Algolia search parameters
+            //   searchParameters: {},
+
+            //   // Optional: path for search page that enabled by default (`false` to disable it)
+            //   searchPagePath: 'search',
+
+            //   //... other Algolia params
+            // },
+        }),
 };
 
 module.exports = config;

+ 24 - 0
docs/package-lock.json

@@ -9,6 +9,7 @@
       "version": "0.0.0",
       "dependencies": {
         "@docusaurus/core": "2.4.0",
+        "@docusaurus/plugin-client-redirects": "^2.4.0",
         "@docusaurus/preset-classic": "2.4.0",
         "@mdx-js/react": "^1.6.22",
         "clsx": "^1.2.1",
@@ -2185,6 +2186,29 @@
         "react-dom": "*"
       }
     },
+    "node_modules/@docusaurus/plugin-client-redirects": {
+      "version": "2.4.0",
+      "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-2.4.0.tgz",
+      "integrity": "sha512-HsS+Dc2ZLWhfpjYJ5LIrOB/XfXZcElcC7o1iA4yIVtiFz+LHhwP863fhqbwSJ1c6tNDOYBH3HwbskHrc/PIn7Q==",
+      "dependencies": {
+        "@docusaurus/core": "2.4.0",
+        "@docusaurus/logger": "2.4.0",
+        "@docusaurus/utils": "2.4.0",
+        "@docusaurus/utils-common": "2.4.0",
+        "@docusaurus/utils-validation": "2.4.0",
+        "eta": "^2.0.0",
+        "fs-extra": "^10.1.0",
+        "lodash": "^4.17.21",
+        "tslib": "^2.4.0"
+      },
+      "engines": {
+        "node": ">=16.14"
+      },
+      "peerDependencies": {
+        "react": "^16.8.4 || ^17.0.0",
+        "react-dom": "^16.8.4 || ^17.0.0"
+      }
+    },
     "node_modules/@docusaurus/plugin-content-blog": {
       "version": "2.4.0",
       "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-2.4.0.tgz",

+ 1 - 0
docs/package.json

@@ -15,6 +15,7 @@
   },
   "dependencies": {
     "@docusaurus/core": "2.4.0",
+    "@docusaurus/plugin-client-redirects": "^2.4.0",
     "@docusaurus/preset-classic": "2.4.0",
     "@mdx-js/react": "^1.6.22",
     "clsx": "^1.2.1",

+ 18 - 0
docs/src/components/DocsifyForwarder.js

@@ -0,0 +1,18 @@
+import React, { useEffect } from 'react';
+import { useHistory } from 'react-router-dom';
+
+function removeHashSlash(url) {
+  return url.replace(/\/#\//, '/');
+}
+
+export default function DocsifyForwarder(props) {
+    const history = useHistory();
+    const currentUrl = window.location.href;
+    if (currentUrl.includes('/#/')) {
+      const newUrl = removeHashSlash(currentUrl);
+      window.history.replaceState({}, '', newUrl);
+      const relativePath = new URL(newUrl).pathname;
+      history.push(relativePath);
+    }
+    return "";
+}