From b7b6cb1f6aa77907a8639df64bb4d9d3d1ea71f0 Mon Sep 17 00:00:00 2001
From: Nullivex <bryan@nullivex.com>
Date: Fri, 17 Apr 2020 16:22:28 -0600
Subject: [PATCH 1/2] Upgrade to latest application structure.

---
 app.js                                        |   8 +-
 lib/Main.js                                   | 137 +++++++++++++++
 lib/VersionSwitch.js                          |   2 +-
 main/route/index.js                           | 161 ------------------
 {main/public => public}/css/style.css         |   0
 {main/public => public}/favicon.ico           | Bin
 {main/public => public}/kado-favicon-128.png  | Bin
 {main/public => public}/robots.txt            |   0
 {main/views => view}/api.html                 |   0
 .../article/3/fall-update-2019.html           |   0
 .../article/3/introduction-to-kado.html       |   0
 .../article/3/kado-6-months-in.html           |   0
 .../article/3/may-update-2019.html            |   0
 .../article/3/upgrading-from-kado-3.html      |   0
 .../article/4/fall-update-2019.html           |   0
 .../article/4/introduction-to-kado.html       |   0
 .../article/4/kado-4-released.html            |   0
 .../article/4/kado-6-months-in.html           |   0
 .../article/4/may-update-2019.html            |   0
 {main/views => view}/article/4/thesis.html    |   0
 .../article/4/upgrading-from-kado-3.html      |   0
 {main/views => view}/doc.html                 |   0
 {main/views => view}/doc/3/api.html           |   0
 .../doc/3/command-line-interface.html         |   0
 {main/views => view}/doc/3/configuration.html |   0
 {main/views => view}/doc/3/database.html      |   0
 {main/views => view}/doc/3/interfaces.html    |   0
 {main/views => view}/doc/3/module.html        |   0
 {main/views => view}/doc/3/reference.html     |   0
 {main/views => view}/doc/3/templates.html     |   0
 {main/views => view}/doc/4/application.html   |   0
 {main/views => view}/doc/4/assert.html        |   0
 {main/views => view}/doc/4/asset.html         |   0
 {main/views => view}/doc/4/child-process.html |   0
 {main/views => view}/doc/4/cluster.html       |   0
 .../views => view}/doc/4/command-server.html  |   0
 {main/views => view}/doc/4/command.html       |   0
 .../views => view}/doc/4/connect-engine.html  |   0
 {main/views => view}/doc/4/connect.html       |   0
 {main/views => view}/doc/4/contributing.html  |   0
 {main/views => view}/doc/4/cron.html          |   0
 {main/views => view}/doc/4/database.html      |   0
 {main/views => view}/doc/4/email.html         |   0
 {main/views => view}/doc/4/etag.html          |   0
 {main/views => view}/doc/4/event.html         |   0
 {main/views => view}/doc/4/file-system.html   |   0
 {main/views => view}/doc/4/format.html        |   0
 {main/views => view}/doc/4/get-opt.html       |   0
 {main/views => view}/doc/4/history.html       |   0
 {main/views => view}/doc/4/hyper-text.html    |   0
 {main/views => view}/doc/4/language.html      |   0
 {main/views => view}/doc/4/library.html       |   0
 {main/views => view}/doc/4/license.html       |   0
 {main/views => view}/doc/4/lifecycle.html     |   0
 {main/views => view}/doc/4/log.html           |   0
 {main/views => view}/doc/4/mapper.html        |   0
 {main/views => view}/doc/4/message.html       |   0
 {main/views => view}/doc/4/mime.html          |   0
 {main/views => view}/doc/4/module.html        |   0
 {main/views => view}/doc/4/navigation.html    |   0
 {main/views => view}/doc/4/parser.html        |   0
 {main/views => view}/doc/4/path-exp.html      |   0
 {main/views => view}/doc/4/permission.html    |   0
 {main/views => view}/doc/4/profiler.html      |   0
 {main/views => view}/doc/4/router.html        |   0
 {main/views => view}/doc/4/search.html        |   0
 {main/views => view}/doc/4/session.html       |   0
 {main/views => view}/doc/4/test-runner.html   |   0
 {main/views => view}/doc/4/util.html          |   0
 {main/views => view}/doc/4/validate.html      |   0
 {main/views => view}/doc/4/view.html          |   0
 {main/views => view}/error.html               |   0
 {main/views => view}/footer.html              |   0
 {main/views => view}/guide/3/developer.html   |   0
 .../guide/3/getting-started.html              |   0
 .../guide/3/install-the-demo.html             |   0
 .../views => view}/guide/3/installation.html  |   0
 .../guide/3/website-cheat-sheet.html          |   0
 .../guide/4/advanced-techniques.html          |   0
 .../guide/4/build-admin-panel.html            |   0
 .../guide/4/database-work-flow.html           |   0
 {main/views => view}/guide/4/download.html    |   0
 .../guide/4/getting-started.html              |   0
 {main/views => view}/guide/4/hello-world.html |   0
 .../guide/4/make-simple-website.html          |   0
 {main/views => view}/guide/4/quick-start.html |   0
 .../guide/4/views-rendering.html              |   0
 {main/views => view}/guide/4/why-kado.html    |   0
 .../guide/4/working-with-email.html           |   0
 .../views => view}/guide/4/writing-tests.html |   0
 {main/views => view}/header.html              |   0
 {main/views => view}/info.json                |   0
 .../views => view}/info/3/release-cycle.html  |   0
 {main/views => view}/info/3/themes.html       |   0
 {main/views => view}/info/4/about-us.html     |   0
 {main/views => view}/info/4/changelog.html    |   0
 {main/views => view}/info/4/contributing.html |   0
 {main/views => view}/info/4/download.html     |   0
 {main/views => view}/info/4/home.html         |   0
 {main/views => view}/info/4/introduction.html |   0
 {main/views => view}/info/4/license.html      |   0
 {main/views => view}/info/4/why-kado.html     |   0
 {main/views => view}/sidebar.html             |   0
 103 files changed, 142 insertions(+), 166 deletions(-)
 create mode 100644 lib/Main.js
 delete mode 100644 main/route/index.js
 rename {main/public => public}/css/style.css (100%)
 rename {main/public => public}/favicon.ico (100%)
 rename {main/public => public}/kado-favicon-128.png (100%)
 rename {main/public => public}/robots.txt (100%)
 rename {main/views => view}/api.html (100%)
 rename {main/views => view}/article/3/fall-update-2019.html (100%)
 rename {main/views => view}/article/3/introduction-to-kado.html (100%)
 rename {main/views => view}/article/3/kado-6-months-in.html (100%)
 rename {main/views => view}/article/3/may-update-2019.html (100%)
 rename {main/views => view}/article/3/upgrading-from-kado-3.html (100%)
 rename {main/views => view}/article/4/fall-update-2019.html (100%)
 rename {main/views => view}/article/4/introduction-to-kado.html (100%)
 rename {main/views => view}/article/4/kado-4-released.html (100%)
 rename {main/views => view}/article/4/kado-6-months-in.html (100%)
 rename {main/views => view}/article/4/may-update-2019.html (100%)
 rename {main/views => view}/article/4/thesis.html (100%)
 rename {main/views => view}/article/4/upgrading-from-kado-3.html (100%)
 rename {main/views => view}/doc.html (100%)
 rename {main/views => view}/doc/3/api.html (100%)
 rename {main/views => view}/doc/3/command-line-interface.html (100%)
 rename {main/views => view}/doc/3/configuration.html (100%)
 rename {main/views => view}/doc/3/database.html (100%)
 rename {main/views => view}/doc/3/interfaces.html (100%)
 rename {main/views => view}/doc/3/module.html (100%)
 rename {main/views => view}/doc/3/reference.html (100%)
 rename {main/views => view}/doc/3/templates.html (100%)
 rename {main/views => view}/doc/4/application.html (100%)
 rename {main/views => view}/doc/4/assert.html (100%)
 rename {main/views => view}/doc/4/asset.html (100%)
 rename {main/views => view}/doc/4/child-process.html (100%)
 rename {main/views => view}/doc/4/cluster.html (100%)
 rename {main/views => view}/doc/4/command-server.html (100%)
 rename {main/views => view}/doc/4/command.html (100%)
 rename {main/views => view}/doc/4/connect-engine.html (100%)
 rename {main/views => view}/doc/4/connect.html (100%)
 rename {main/views => view}/doc/4/contributing.html (100%)
 rename {main/views => view}/doc/4/cron.html (100%)
 rename {main/views => view}/doc/4/database.html (100%)
 rename {main/views => view}/doc/4/email.html (100%)
 rename {main/views => view}/doc/4/etag.html (100%)
 rename {main/views => view}/doc/4/event.html (100%)
 rename {main/views => view}/doc/4/file-system.html (100%)
 rename {main/views => view}/doc/4/format.html (100%)
 rename {main/views => view}/doc/4/get-opt.html (100%)
 rename {main/views => view}/doc/4/history.html (100%)
 rename {main/views => view}/doc/4/hyper-text.html (100%)
 rename {main/views => view}/doc/4/language.html (100%)
 rename {main/views => view}/doc/4/library.html (100%)
 rename {main/views => view}/doc/4/license.html (100%)
 rename {main/views => view}/doc/4/lifecycle.html (100%)
 rename {main/views => view}/doc/4/log.html (100%)
 rename {main/views => view}/doc/4/mapper.html (100%)
 rename {main/views => view}/doc/4/message.html (100%)
 rename {main/views => view}/doc/4/mime.html (100%)
 rename {main/views => view}/doc/4/module.html (100%)
 rename {main/views => view}/doc/4/navigation.html (100%)
 rename {main/views => view}/doc/4/parser.html (100%)
 rename {main/views => view}/doc/4/path-exp.html (100%)
 rename {main/views => view}/doc/4/permission.html (100%)
 rename {main/views => view}/doc/4/profiler.html (100%)
 rename {main/views => view}/doc/4/router.html (100%)
 rename {main/views => view}/doc/4/search.html (100%)
 rename {main/views => view}/doc/4/session.html (100%)
 rename {main/views => view}/doc/4/test-runner.html (100%)
 rename {main/views => view}/doc/4/util.html (100%)
 rename {main/views => view}/doc/4/validate.html (100%)
 rename {main/views => view}/doc/4/view.html (100%)
 rename {main/views => view}/error.html (100%)
 rename {main/views => view}/footer.html (100%)
 rename {main/views => view}/guide/3/developer.html (100%)
 rename {main/views => view}/guide/3/getting-started.html (100%)
 rename {main/views => view}/guide/3/install-the-demo.html (100%)
 rename {main/views => view}/guide/3/installation.html (100%)
 rename {main/views => view}/guide/3/website-cheat-sheet.html (100%)
 rename {main/views => view}/guide/4/advanced-techniques.html (100%)
 rename {main/views => view}/guide/4/build-admin-panel.html (100%)
 rename {main/views => view}/guide/4/database-work-flow.html (100%)
 rename {main/views => view}/guide/4/download.html (100%)
 rename {main/views => view}/guide/4/getting-started.html (100%)
 rename {main/views => view}/guide/4/hello-world.html (100%)
 rename {main/views => view}/guide/4/make-simple-website.html (100%)
 rename {main/views => view}/guide/4/quick-start.html (100%)
 rename {main/views => view}/guide/4/views-rendering.html (100%)
 rename {main/views => view}/guide/4/why-kado.html (100%)
 rename {main/views => view}/guide/4/working-with-email.html (100%)
 rename {main/views => view}/guide/4/writing-tests.html (100%)
 rename {main/views => view}/header.html (100%)
 rename {main/views => view}/info.json (100%)
 rename {main/views => view}/info/3/release-cycle.html (100%)
 rename {main/views => view}/info/3/themes.html (100%)
 rename {main/views => view}/info/4/about-us.html (100%)
 rename {main/views => view}/info/4/changelog.html (100%)
 rename {main/views => view}/info/4/contributing.html (100%)
 rename {main/views => view}/info/4/download.html (100%)
 rename {main/views => view}/info/4/home.html (100%)
 rename {main/views => view}/info/4/introduction.html (100%)
 rename {main/views => view}/info/4/license.html (100%)
 rename {main/views => view}/info/4/why-kado.html (100%)
 rename {main/views => view}/sidebar.html (100%)

diff --git a/app.js b/app.js
index d18d772..95f0e22 100644
--- a/app.js
+++ b/app.js
@@ -33,6 +33,7 @@ if (process.env.command !== 'session' && cluster.isMaster()) {
   // declare our application
   const Application = require('kado/lib/Application')
   const HyperText = require('kado/lib/HyperText')
+  const Main = require('./lib/Main')
   const Parser = require('kado/lib/Parser')
   const Session = require('kado/lib/Session')
   const VersionSwitch = require('./lib/VersionSwitch')
@@ -46,11 +47,11 @@ if (process.env.command !== 'session' && cluster.isMaster()) {
   http.setHost(cfg.main.host)
   app.http.addEngine('http', http.createServer(app.router))
   // add a view engine
-  const viewFolder = fs.path.join(__dirname, 'main/views')
+  const viewFolder = fs.path.join(__dirname, 'view')
   app.view.addEngine('mustache', new ViewMustache(viewFolder))
   app.view.activateEngine('mustache')
   // add a static server
-  const staticRoot = fs.path.join(__dirname, 'main/public')
+  const staticRoot = fs.path.join(__dirname, 'public')
   app.use(HyperText.StaticServer.getMiddleware(staticRoot))
   app.use((req) => {
     req.locals._appTitle = cfg.appTitle
@@ -68,8 +69,7 @@ if (process.env.command !== 'session' && cluster.isMaster()) {
   // set the version to session if its in the query string and then redirect
   app.use(VersionSwitch.getMiddleware(cfg.main.versionList))
   // install routes
-  const route = require('./main/route')
-  route.register(app)
+  Main.register(app)
   // initiate communications with the master and startup
   Cluster.child(
     http.getEngine(),
diff --git a/lib/Main.js b/lib/Main.js
new file mode 100644
index 0000000..e7774e5
--- /dev/null
+++ b/lib/Main.js
@@ -0,0 +1,137 @@
+'use strict'
+const Assert = require('kado/lib/Assert')
+const fs = require('kado/lib/FileSystem')
+const info = require('../view/info.json')
+const Validate = require('kado/lib/Validate')
+class Main {
+  static register (app) {
+    const route = new Main(
+      fs.path.join(__dirname, '../view'),
+      info.latestVersion
+    )
+    const redirectPath = (type) => {
+      return (req, res) => {
+        if (!type || !req.params.doc) return false
+        res.statusCode = 302
+        let uri = `/${type}/`
+        if (req.params.version) uri += `${req.params.version}/`
+        uri += `${req.params.doc}/`
+        res.redirect(uri)
+      }
+    }
+    app.get('/', route.index.bind(route))
+    app.get('/:type/:version/:doc/:link.md', route.linkTo.bind(route))
+    app.get('/:type/:doc/:link.md', route.linkTo.bind(route))
+    app.get('/article/:version/:doc/', route.article.bind(route))
+    app.get('/article/:link.md', route.linkTo.bind(route))
+    app.get('/article/:doc/', route.article.bind(route))
+    app.get('/doc/:link.md', route.linkTo.bind(route))
+    app.get('/doc/:version/:doc/', route.doc.bind(route))
+    app.get('/doc/:doc/', route.doc.bind(route))
+    app.get('/download/', route.download.bind(route))
+    app.get('/guide/:version/:link.md', route.linkTo.bind(route))
+    app.get('/guide/:link.md', route.linkTo.bind(route))
+    app.get('/guide/:doc/', route.guide.bind(route))
+    app.get('/info/:version/:link.md', route.linkTo.bind(route))
+    app.get('/info/:link.md', route.linkTo.bind(route))
+    app.get('/info/:doc/', route.info.bind(route))
+    app.get('/license/', route.license.bind(route))
+    app.get('/article/:doc', redirectPath('article'))
+    app.get('/doc/:version/:doc', redirectPath('doc'))
+    app.get('/guide/:version/:doc', redirectPath('guide'))
+    app.get('/doc/:doc', redirectPath('doc'))
+    app.get('/guide/:doc', redirectPath('guide'))
+  }
+
+  static titleCaseToUri (input) {
+    let rv = ''
+    for (let i = 0; i < input.length; i++) {
+      if (input[i] === input[i].toUpperCase() || input[i].match(/\d+/)) {
+        if (rv !== '' && rv !== '-') rv += '-'
+        rv += input[i].toLowerCase()
+      } else { rv += input[i] }
+    }
+    return rv
+  }
+
+  constructor (viewFolder, version) {
+    Assert.isType('string', viewFolder)
+    this.version = version
+    this.viewFolder = viewFolder
+  }
+
+  article (req, res) {
+    this.renderDoc(req.params.doc, res, req.params.version)
+  }
+
+  doc (req, res) {
+    this.renderDoc(req.params.doc, res, req.params.version)
+  }
+
+  download (req, res) { this.renderDoc('download', res) }
+
+  guide (req, res) { this.renderDoc(req.params.doc, res) }
+
+  info (req, res) { this.renderDoc(req.params.doc, res) }
+
+  index (req, res) { this.renderDoc('home', res) }
+
+  license (req, res) { res.redirect('/info/license/') }
+
+  linkTo (req, res) {
+    if (!req.params.link) {
+      res.statusCode = 500
+      return res.end(`Invalid link type: ${req.url}`)
+    }
+    const [majorVersion = '0'] = (
+      '' + (req.params.version || this.version)
+    ).split('.')
+    const docInfo = info['v' + majorVersion]
+    let doc = null
+    const link = Route.titleCaseToUri(req.params.link)
+    if (docInfo.docMap[link]) doc = docInfo.docMap[link]
+    if (Validate.isType('string', doc)) doc = { url: doc }
+    if (!doc) {
+      res.statusCode = 500
+      return res.end(`No document found to link to: ${req.url} from ${link}`)
+    }
+    let url = '/'
+    if (doc.type) url += `${doc.type}/`
+    if (req.params.version) url += `${docInfo.docVersion}/`
+    url += `${doc.name}/`
+    res.statusCode = 302
+    res.setHeader('Location', url)
+    return res.end()
+  }
+
+  renderDoc (name = '', res = {}, version = info.latestVersion) {
+    const vString = `v${version.split('.')[0]}`
+    Assert.isType('string', name)
+    Assert.isOk(
+      name !== 'undefined' && name.length >= 1,
+      'Document name must not be empty'
+    )
+    Assert.isType('Object', info[vString].docMap)
+    Assert.isType('Object', info[vString].docMap[name])
+    const doc = info[vString].docMap[name]
+    let viewPath = doc.filePath
+    if (!fs.exists(viewPath)) {
+      viewPath = info[vString].docMap[name].basePath
+    }
+    viewPath = fs.path.join(this.viewFolder, viewPath)
+    fs.readFile(viewPath)
+      .then((result) => {
+        Assert.isType('Buffer', result)
+        const html = result.toString('utf8')
+        Assert.isType('string', html)
+        const params = { content: html }
+        if (name !== 'home') params._pageTitle = doc.title
+        res.render('doc', params)
+      })
+      .catch((e) => {
+        res.statusCode = 500
+        if (e instanceof Error) res.render('error', { message: e.message })
+      })
+  }
+}
+module.exports = Main
diff --git a/lib/VersionSwitch.js b/lib/VersionSwitch.js
index f37085f..43d267a 100644
--- a/lib/VersionSwitch.js
+++ b/lib/VersionSwitch.js
@@ -1,5 +1,5 @@
 'use strict'
-const info = require('../main/views/info.json')
+const info = require('../view/info.json')
 class VersionSwitch {
   static generateVersion (versionName) {
     const [major = '0', minor = '0', security = '0'] = versionName.split('.')
diff --git a/main/route/index.js b/main/route/index.js
deleted file mode 100644
index 03e7ccb..0000000
--- a/main/route/index.js
+++ /dev/null
@@ -1,161 +0,0 @@
-'use strict'
-const Assert = require('kado/lib/Assert')
-const fs = require('kado/lib/FileSystem')
-const info = require('../views/info.json')
-const Validate = require('kado/lib/Validate')
-class Route {
-  static titleCaseToUri (input) {
-    let rv = ''
-    for (let i = 0; i < input.length; i++) {
-      if (input[i] === input[i].toUpperCase() || input[i].match(/\d+/)) {
-        if (rv !== '' && rv !== '-') rv += '-'
-        rv += input[i].toLowerCase()
-      } else { rv += input[i] }
-    }
-    return rv
-  }
-
-  constructor (viewFolder, version) {
-    Assert.isType('string', viewFolder)
-    this.version = version
-    this.viewFolder = viewFolder
-  }
-
-  renderDoc (name = '', res = {}, version = info.latestVersion) {
-    const vString = `v${version.split('.')[0]}`
-    Assert.isType('string', name)
-    Assert.isOk(
-      name !== 'undefined' && name.length >= 1,
-      'Document name must not be empty'
-    )
-    Assert.isType('Object', info[vString].docMap)
-    Assert.isType('Object', info[vString].docMap[name])
-    const doc = info[vString].docMap[name]
-    let viewPath = doc.filePath
-    if (!fs.exists(viewPath)) {
-      viewPath = info[vString].docMap[name].basePath
-    }
-    viewPath = fs.path.join(this.viewFolder, viewPath)
-    fs.readFile(viewPath)
-      .then((result) => {
-        Assert.isType('Buffer', result)
-        const html = result.toString('utf8')
-        Assert.isType('string', html)
-        const params = { content: html }
-        if (name !== 'home') params._pageTitle = doc.title
-        res.render('doc', params)
-      })
-      .catch((e) => {
-        res.statusCode = 500
-        if (e instanceof Error) res.render('error', { message: e.message })
-      })
-  }
-
-  article () {
-    return (req, res) => {
-      this.renderDoc(req.params.doc, res, req.params.version)
-    }
-  }
-
-  doc () {
-    return (req, res) => {
-      this.renderDoc(req.params.doc, res, req.params.version)
-    }
-  }
-
-  download () {
-    return (req, res) => { this.renderDoc('download', res) }
-  }
-
-  guide () {
-    return (req, res) => {
-      this.renderDoc(req.params.doc, res)
-    }
-  }
-
-  info () {
-    return (req, res) => {
-      this.renderDoc(req.params.doc, res)
-    }
-  }
-
-  index () {
-    return (req, res) => { this.renderDoc('home', res) }
-  }
-
-  license () {
-    return (req, res) => {
-      res.statusCode = 301
-      res.setHeader('Location', '/info/license/')
-      return res.end()
-    }
-  }
-
-  linkDoc () {
-    return (req, res) => {
-      if (!req.params.link) {
-        res.statusCode = 500
-        return res.end(`Invalid link type: ${req.url}`)
-      }
-      const [majorVersion = '0'] = (
-        '' + (req.params.version || this.version)
-      ).split('.')
-      const docInfo = info['v' + majorVersion]
-      let doc = null
-      const link = Route.titleCaseToUri(req.params.link)
-      if (docInfo.docMap[link]) doc = docInfo.docMap[link]
-      if (Validate.isType('string', doc)) doc = { url: doc }
-      if (!doc) {
-        res.statusCode = 500
-        return res.end(`No document found to link to: ${req.url} from ${link}`)
-      }
-      let url = '/'
-      if (doc.type) url += `${doc.type}/`
-      if (req.params.version) url += `${docInfo.docVersion}/`
-      url += `${doc.name}/`
-      res.statusCode = 302
-      res.setHeader('Location', url)
-      return res.end()
-    }
-  }
-}
-Route.register = (app) => {
-  const route = new Route(
-    fs.path.join(__dirname, '../views'),
-    info.latestVersion
-  )
-  const redirectPath = (type) => {
-    return (req, res) => {
-      if (!type || !req.params.doc) return false
-      res.statusCode = 302
-      let uri = `/${type}/`
-      if (req.params.version) uri += `${req.params.version}/`
-      uri += `${req.params.doc}/`
-      res.setHeader('Location', uri)
-      res.end()
-    }
-  }
-  app.get('/', route.index())
-  app.get('/:type/:version/:doc/:link.md', route.linkDoc())
-  app.get('/:type/:doc/:link.md', route.linkDoc())
-  app.get('/article/:version/:doc/', route.article())
-  app.get('/article/:link.md', route.linkDoc())
-  app.get('/article/:doc/', route.article())
-  app.get('/doc/:link.md', route.linkDoc())
-  app.get('/doc/:version/:doc/', route.doc())
-  app.get('/doc/:doc/', route.doc())
-  app.get('/download/', route.download())
-  app.get('/guide/:version/:link.md', route.linkDoc())
-  app.get('/guide/:link.md', route.linkDoc())
-  app.get('/guide/:doc/', route.guide())
-  app.get('/info/:version/:link.md', route.linkDoc())
-  app.get('/info/:link.md', route.linkDoc())
-  app.get('/info/:doc/', route.info())
-  app.get('/license/', route.license())
-  app.get('/article/:doc', redirectPath('article'))
-  app.get('/doc/:version/:doc', redirectPath('doc'))
-  app.get('/guide/:version/:doc', redirectPath('guide'))
-  app.get('/doc/:doc', redirectPath('doc'))
-  app.get('/guide/:doc', redirectPath('guide'))
-}
-module.exports = Route
diff --git a/main/public/css/style.css b/public/css/style.css
similarity index 100%
rename from main/public/css/style.css
rename to public/css/style.css
diff --git a/main/public/favicon.ico b/public/favicon.ico
similarity index 100%
rename from main/public/favicon.ico
rename to public/favicon.ico
diff --git a/main/public/kado-favicon-128.png b/public/kado-favicon-128.png
similarity index 100%
rename from main/public/kado-favicon-128.png
rename to public/kado-favicon-128.png
diff --git a/main/public/robots.txt b/public/robots.txt
similarity index 100%
rename from main/public/robots.txt
rename to public/robots.txt
diff --git a/main/views/api.html b/view/api.html
similarity index 100%
rename from main/views/api.html
rename to view/api.html
diff --git a/main/views/article/3/fall-update-2019.html b/view/article/3/fall-update-2019.html
similarity index 100%
rename from main/views/article/3/fall-update-2019.html
rename to view/article/3/fall-update-2019.html
diff --git a/main/views/article/3/introduction-to-kado.html b/view/article/3/introduction-to-kado.html
similarity index 100%
rename from main/views/article/3/introduction-to-kado.html
rename to view/article/3/introduction-to-kado.html
diff --git a/main/views/article/3/kado-6-months-in.html b/view/article/3/kado-6-months-in.html
similarity index 100%
rename from main/views/article/3/kado-6-months-in.html
rename to view/article/3/kado-6-months-in.html
diff --git a/main/views/article/3/may-update-2019.html b/view/article/3/may-update-2019.html
similarity index 100%
rename from main/views/article/3/may-update-2019.html
rename to view/article/3/may-update-2019.html
diff --git a/main/views/article/3/upgrading-from-kado-3.html b/view/article/3/upgrading-from-kado-3.html
similarity index 100%
rename from main/views/article/3/upgrading-from-kado-3.html
rename to view/article/3/upgrading-from-kado-3.html
diff --git a/main/views/article/4/fall-update-2019.html b/view/article/4/fall-update-2019.html
similarity index 100%
rename from main/views/article/4/fall-update-2019.html
rename to view/article/4/fall-update-2019.html
diff --git a/main/views/article/4/introduction-to-kado.html b/view/article/4/introduction-to-kado.html
similarity index 100%
rename from main/views/article/4/introduction-to-kado.html
rename to view/article/4/introduction-to-kado.html
diff --git a/main/views/article/4/kado-4-released.html b/view/article/4/kado-4-released.html
similarity index 100%
rename from main/views/article/4/kado-4-released.html
rename to view/article/4/kado-4-released.html
diff --git a/main/views/article/4/kado-6-months-in.html b/view/article/4/kado-6-months-in.html
similarity index 100%
rename from main/views/article/4/kado-6-months-in.html
rename to view/article/4/kado-6-months-in.html
diff --git a/main/views/article/4/may-update-2019.html b/view/article/4/may-update-2019.html
similarity index 100%
rename from main/views/article/4/may-update-2019.html
rename to view/article/4/may-update-2019.html
diff --git a/main/views/article/4/thesis.html b/view/article/4/thesis.html
similarity index 100%
rename from main/views/article/4/thesis.html
rename to view/article/4/thesis.html
diff --git a/main/views/article/4/upgrading-from-kado-3.html b/view/article/4/upgrading-from-kado-3.html
similarity index 100%
rename from main/views/article/4/upgrading-from-kado-3.html
rename to view/article/4/upgrading-from-kado-3.html
diff --git a/main/views/doc.html b/view/doc.html
similarity index 100%
rename from main/views/doc.html
rename to view/doc.html
diff --git a/main/views/doc/3/api.html b/view/doc/3/api.html
similarity index 100%
rename from main/views/doc/3/api.html
rename to view/doc/3/api.html
diff --git a/main/views/doc/3/command-line-interface.html b/view/doc/3/command-line-interface.html
similarity index 100%
rename from main/views/doc/3/command-line-interface.html
rename to view/doc/3/command-line-interface.html
diff --git a/main/views/doc/3/configuration.html b/view/doc/3/configuration.html
similarity index 100%
rename from main/views/doc/3/configuration.html
rename to view/doc/3/configuration.html
diff --git a/main/views/doc/3/database.html b/view/doc/3/database.html
similarity index 100%
rename from main/views/doc/3/database.html
rename to view/doc/3/database.html
diff --git a/main/views/doc/3/interfaces.html b/view/doc/3/interfaces.html
similarity index 100%
rename from main/views/doc/3/interfaces.html
rename to view/doc/3/interfaces.html
diff --git a/main/views/doc/3/module.html b/view/doc/3/module.html
similarity index 100%
rename from main/views/doc/3/module.html
rename to view/doc/3/module.html
diff --git a/main/views/doc/3/reference.html b/view/doc/3/reference.html
similarity index 100%
rename from main/views/doc/3/reference.html
rename to view/doc/3/reference.html
diff --git a/main/views/doc/3/templates.html b/view/doc/3/templates.html
similarity index 100%
rename from main/views/doc/3/templates.html
rename to view/doc/3/templates.html
diff --git a/main/views/doc/4/application.html b/view/doc/4/application.html
similarity index 100%
rename from main/views/doc/4/application.html
rename to view/doc/4/application.html
diff --git a/main/views/doc/4/assert.html b/view/doc/4/assert.html
similarity index 100%
rename from main/views/doc/4/assert.html
rename to view/doc/4/assert.html
diff --git a/main/views/doc/4/asset.html b/view/doc/4/asset.html
similarity index 100%
rename from main/views/doc/4/asset.html
rename to view/doc/4/asset.html
diff --git a/main/views/doc/4/child-process.html b/view/doc/4/child-process.html
similarity index 100%
rename from main/views/doc/4/child-process.html
rename to view/doc/4/child-process.html
diff --git a/main/views/doc/4/cluster.html b/view/doc/4/cluster.html
similarity index 100%
rename from main/views/doc/4/cluster.html
rename to view/doc/4/cluster.html
diff --git a/main/views/doc/4/command-server.html b/view/doc/4/command-server.html
similarity index 100%
rename from main/views/doc/4/command-server.html
rename to view/doc/4/command-server.html
diff --git a/main/views/doc/4/command.html b/view/doc/4/command.html
similarity index 100%
rename from main/views/doc/4/command.html
rename to view/doc/4/command.html
diff --git a/main/views/doc/4/connect-engine.html b/view/doc/4/connect-engine.html
similarity index 100%
rename from main/views/doc/4/connect-engine.html
rename to view/doc/4/connect-engine.html
diff --git a/main/views/doc/4/connect.html b/view/doc/4/connect.html
similarity index 100%
rename from main/views/doc/4/connect.html
rename to view/doc/4/connect.html
diff --git a/main/views/doc/4/contributing.html b/view/doc/4/contributing.html
similarity index 100%
rename from main/views/doc/4/contributing.html
rename to view/doc/4/contributing.html
diff --git a/main/views/doc/4/cron.html b/view/doc/4/cron.html
similarity index 100%
rename from main/views/doc/4/cron.html
rename to view/doc/4/cron.html
diff --git a/main/views/doc/4/database.html b/view/doc/4/database.html
similarity index 100%
rename from main/views/doc/4/database.html
rename to view/doc/4/database.html
diff --git a/main/views/doc/4/email.html b/view/doc/4/email.html
similarity index 100%
rename from main/views/doc/4/email.html
rename to view/doc/4/email.html
diff --git a/main/views/doc/4/etag.html b/view/doc/4/etag.html
similarity index 100%
rename from main/views/doc/4/etag.html
rename to view/doc/4/etag.html
diff --git a/main/views/doc/4/event.html b/view/doc/4/event.html
similarity index 100%
rename from main/views/doc/4/event.html
rename to view/doc/4/event.html
diff --git a/main/views/doc/4/file-system.html b/view/doc/4/file-system.html
similarity index 100%
rename from main/views/doc/4/file-system.html
rename to view/doc/4/file-system.html
diff --git a/main/views/doc/4/format.html b/view/doc/4/format.html
similarity index 100%
rename from main/views/doc/4/format.html
rename to view/doc/4/format.html
diff --git a/main/views/doc/4/get-opt.html b/view/doc/4/get-opt.html
similarity index 100%
rename from main/views/doc/4/get-opt.html
rename to view/doc/4/get-opt.html
diff --git a/main/views/doc/4/history.html b/view/doc/4/history.html
similarity index 100%
rename from main/views/doc/4/history.html
rename to view/doc/4/history.html
diff --git a/main/views/doc/4/hyper-text.html b/view/doc/4/hyper-text.html
similarity index 100%
rename from main/views/doc/4/hyper-text.html
rename to view/doc/4/hyper-text.html
diff --git a/main/views/doc/4/language.html b/view/doc/4/language.html
similarity index 100%
rename from main/views/doc/4/language.html
rename to view/doc/4/language.html
diff --git a/main/views/doc/4/library.html b/view/doc/4/library.html
similarity index 100%
rename from main/views/doc/4/library.html
rename to view/doc/4/library.html
diff --git a/main/views/doc/4/license.html b/view/doc/4/license.html
similarity index 100%
rename from main/views/doc/4/license.html
rename to view/doc/4/license.html
diff --git a/main/views/doc/4/lifecycle.html b/view/doc/4/lifecycle.html
similarity index 100%
rename from main/views/doc/4/lifecycle.html
rename to view/doc/4/lifecycle.html
diff --git a/main/views/doc/4/log.html b/view/doc/4/log.html
similarity index 100%
rename from main/views/doc/4/log.html
rename to view/doc/4/log.html
diff --git a/main/views/doc/4/mapper.html b/view/doc/4/mapper.html
similarity index 100%
rename from main/views/doc/4/mapper.html
rename to view/doc/4/mapper.html
diff --git a/main/views/doc/4/message.html b/view/doc/4/message.html
similarity index 100%
rename from main/views/doc/4/message.html
rename to view/doc/4/message.html
diff --git a/main/views/doc/4/mime.html b/view/doc/4/mime.html
similarity index 100%
rename from main/views/doc/4/mime.html
rename to view/doc/4/mime.html
diff --git a/main/views/doc/4/module.html b/view/doc/4/module.html
similarity index 100%
rename from main/views/doc/4/module.html
rename to view/doc/4/module.html
diff --git a/main/views/doc/4/navigation.html b/view/doc/4/navigation.html
similarity index 100%
rename from main/views/doc/4/navigation.html
rename to view/doc/4/navigation.html
diff --git a/main/views/doc/4/parser.html b/view/doc/4/parser.html
similarity index 100%
rename from main/views/doc/4/parser.html
rename to view/doc/4/parser.html
diff --git a/main/views/doc/4/path-exp.html b/view/doc/4/path-exp.html
similarity index 100%
rename from main/views/doc/4/path-exp.html
rename to view/doc/4/path-exp.html
diff --git a/main/views/doc/4/permission.html b/view/doc/4/permission.html
similarity index 100%
rename from main/views/doc/4/permission.html
rename to view/doc/4/permission.html
diff --git a/main/views/doc/4/profiler.html b/view/doc/4/profiler.html
similarity index 100%
rename from main/views/doc/4/profiler.html
rename to view/doc/4/profiler.html
diff --git a/main/views/doc/4/router.html b/view/doc/4/router.html
similarity index 100%
rename from main/views/doc/4/router.html
rename to view/doc/4/router.html
diff --git a/main/views/doc/4/search.html b/view/doc/4/search.html
similarity index 100%
rename from main/views/doc/4/search.html
rename to view/doc/4/search.html
diff --git a/main/views/doc/4/session.html b/view/doc/4/session.html
similarity index 100%
rename from main/views/doc/4/session.html
rename to view/doc/4/session.html
diff --git a/main/views/doc/4/test-runner.html b/view/doc/4/test-runner.html
similarity index 100%
rename from main/views/doc/4/test-runner.html
rename to view/doc/4/test-runner.html
diff --git a/main/views/doc/4/util.html b/view/doc/4/util.html
similarity index 100%
rename from main/views/doc/4/util.html
rename to view/doc/4/util.html
diff --git a/main/views/doc/4/validate.html b/view/doc/4/validate.html
similarity index 100%
rename from main/views/doc/4/validate.html
rename to view/doc/4/validate.html
diff --git a/main/views/doc/4/view.html b/view/doc/4/view.html
similarity index 100%
rename from main/views/doc/4/view.html
rename to view/doc/4/view.html
diff --git a/main/views/error.html b/view/error.html
similarity index 100%
rename from main/views/error.html
rename to view/error.html
diff --git a/main/views/footer.html b/view/footer.html
similarity index 100%
rename from main/views/footer.html
rename to view/footer.html
diff --git a/main/views/guide/3/developer.html b/view/guide/3/developer.html
similarity index 100%
rename from main/views/guide/3/developer.html
rename to view/guide/3/developer.html
diff --git a/main/views/guide/3/getting-started.html b/view/guide/3/getting-started.html
similarity index 100%
rename from main/views/guide/3/getting-started.html
rename to view/guide/3/getting-started.html
diff --git a/main/views/guide/3/install-the-demo.html b/view/guide/3/install-the-demo.html
similarity index 100%
rename from main/views/guide/3/install-the-demo.html
rename to view/guide/3/install-the-demo.html
diff --git a/main/views/guide/3/installation.html b/view/guide/3/installation.html
similarity index 100%
rename from main/views/guide/3/installation.html
rename to view/guide/3/installation.html
diff --git a/main/views/guide/3/website-cheat-sheet.html b/view/guide/3/website-cheat-sheet.html
similarity index 100%
rename from main/views/guide/3/website-cheat-sheet.html
rename to view/guide/3/website-cheat-sheet.html
diff --git a/main/views/guide/4/advanced-techniques.html b/view/guide/4/advanced-techniques.html
similarity index 100%
rename from main/views/guide/4/advanced-techniques.html
rename to view/guide/4/advanced-techniques.html
diff --git a/main/views/guide/4/build-admin-panel.html b/view/guide/4/build-admin-panel.html
similarity index 100%
rename from main/views/guide/4/build-admin-panel.html
rename to view/guide/4/build-admin-panel.html
diff --git a/main/views/guide/4/database-work-flow.html b/view/guide/4/database-work-flow.html
similarity index 100%
rename from main/views/guide/4/database-work-flow.html
rename to view/guide/4/database-work-flow.html
diff --git a/main/views/guide/4/download.html b/view/guide/4/download.html
similarity index 100%
rename from main/views/guide/4/download.html
rename to view/guide/4/download.html
diff --git a/main/views/guide/4/getting-started.html b/view/guide/4/getting-started.html
similarity index 100%
rename from main/views/guide/4/getting-started.html
rename to view/guide/4/getting-started.html
diff --git a/main/views/guide/4/hello-world.html b/view/guide/4/hello-world.html
similarity index 100%
rename from main/views/guide/4/hello-world.html
rename to view/guide/4/hello-world.html
diff --git a/main/views/guide/4/make-simple-website.html b/view/guide/4/make-simple-website.html
similarity index 100%
rename from main/views/guide/4/make-simple-website.html
rename to view/guide/4/make-simple-website.html
diff --git a/main/views/guide/4/quick-start.html b/view/guide/4/quick-start.html
similarity index 100%
rename from main/views/guide/4/quick-start.html
rename to view/guide/4/quick-start.html
diff --git a/main/views/guide/4/views-rendering.html b/view/guide/4/views-rendering.html
similarity index 100%
rename from main/views/guide/4/views-rendering.html
rename to view/guide/4/views-rendering.html
diff --git a/main/views/guide/4/why-kado.html b/view/guide/4/why-kado.html
similarity index 100%
rename from main/views/guide/4/why-kado.html
rename to view/guide/4/why-kado.html
diff --git a/main/views/guide/4/working-with-email.html b/view/guide/4/working-with-email.html
similarity index 100%
rename from main/views/guide/4/working-with-email.html
rename to view/guide/4/working-with-email.html
diff --git a/main/views/guide/4/writing-tests.html b/view/guide/4/writing-tests.html
similarity index 100%
rename from main/views/guide/4/writing-tests.html
rename to view/guide/4/writing-tests.html
diff --git a/main/views/header.html b/view/header.html
similarity index 100%
rename from main/views/header.html
rename to view/header.html
diff --git a/main/views/info.json b/view/info.json
similarity index 100%
rename from main/views/info.json
rename to view/info.json
diff --git a/main/views/info/3/release-cycle.html b/view/info/3/release-cycle.html
similarity index 100%
rename from main/views/info/3/release-cycle.html
rename to view/info/3/release-cycle.html
diff --git a/main/views/info/3/themes.html b/view/info/3/themes.html
similarity index 100%
rename from main/views/info/3/themes.html
rename to view/info/3/themes.html
diff --git a/main/views/info/4/about-us.html b/view/info/4/about-us.html
similarity index 100%
rename from main/views/info/4/about-us.html
rename to view/info/4/about-us.html
diff --git a/main/views/info/4/changelog.html b/view/info/4/changelog.html
similarity index 100%
rename from main/views/info/4/changelog.html
rename to view/info/4/changelog.html
diff --git a/main/views/info/4/contributing.html b/view/info/4/contributing.html
similarity index 100%
rename from main/views/info/4/contributing.html
rename to view/info/4/contributing.html
diff --git a/main/views/info/4/download.html b/view/info/4/download.html
similarity index 100%
rename from main/views/info/4/download.html
rename to view/info/4/download.html
diff --git a/main/views/info/4/home.html b/view/info/4/home.html
similarity index 100%
rename from main/views/info/4/home.html
rename to view/info/4/home.html
diff --git a/main/views/info/4/introduction.html b/view/info/4/introduction.html
similarity index 100%
rename from main/views/info/4/introduction.html
rename to view/info/4/introduction.html
diff --git a/main/views/info/4/license.html b/view/info/4/license.html
similarity index 100%
rename from main/views/info/4/license.html
rename to view/info/4/license.html
diff --git a/main/views/info/4/why-kado.html b/view/info/4/why-kado.html
similarity index 100%
rename from main/views/info/4/why-kado.html
rename to view/info/4/why-kado.html
diff --git a/main/views/sidebar.html b/view/sidebar.html
similarity index 100%
rename from main/views/sidebar.html
rename to view/sidebar.html
-- 
GitLab


From a66d277d053cd4ac61fd688a4f80ca0f73fe982c Mon Sep 17 00:00:00 2001
From: Nullivex <bryan@nullivex.com>
Date: Fri, 17 Apr 2020 16:37:26 -0600
Subject: [PATCH 2/2] Update build.js to point to the new view location.

---
 build.js | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.js b/build.js
index 3ff9142..cc7ca51 100644
--- a/build.js
+++ b/build.js
@@ -89,7 +89,7 @@ const converterOpts = {
 const sha1Exp = /^[0-9a-f]{40}$/
 const opt = GetOpt.getInstance(process.argv)
 const op = opt.opts()
-const docRoot = fs.path.join(__dirname, 'main/views')
+const docRoot = fs.path.join(__dirname, 'view')
 const subs = ['article', 'doc', 'guide', 'info']
 let foldersCreated = 0
 const startTime = new Date()
-- 
GitLab