diff --git a/app/config.js b/app/config.js index af794eae..c18121b3 100644 --- a/app/config.js +++ b/app/config.js @@ -3,12 +3,13 @@ console.log(`Configuring .env and expanding .env to include environment variable const path = require('path'); const dotenv = require('dotenv'); const dotenvExpand = require('dotenv-expand'); +const process = require('process'); let env = dotenv.config(); dotenvExpand.expand(env); const getAppHttpHost = () => env.APP_HTTP_HOST||'nm3clol-express-app'; -const getAppHttpPort = () => parseInt(env.APP_HTTP_PORT||env.PORT||3000); +const getAppHttpPort = () => process.env.PORT||env.APP_HTTP_PORT||3000; const getAppHttpUrl = () => { return env.APP_HTTP_URL || `http://${getAppHttpHost() + ((getAppHttpPort() === 80) ? '' : ':' + getAppHttpPort())}` }; @@ -30,20 +31,24 @@ const getSolrLawPort = () => parseInt(env.SOLR_LAW_PORT||getSolrDocsPort()); const getSolrLawCore = () => env.SOLR_LAW_CORE||'vacode_core'; module.exports = { - config: { - publicPath: getPublicPath(), - pagesPath: getPagesPath(), - staticPath: getStaticPath(), + config: { + appHttpHost: getAppHttpHost(), + appHttpPort: getAppHttpPort(), + appHttpUrl: getAppHttpUrl(), + siteName: getSiteName(), siteWelcomeMessage: getSiteWelcomeMessage(), siteHost: getSiteHost(), siteUrl: getSiteUrl(), - appHttpHost: getAppHttpHost(), - appHttpPort: getAppHttpPort(), - appHttpUrl: getAppHttpUrl(), + + publicPath: getPublicPath(), + pagesPath: getPagesPath(), + staticPath: getStaticPath(), + solrDocsHost: getSolrDocsHost(), solrDocsPort: getSolrDocsPort(), solrDocsCore: getSolrDocsCore(), + solrLawHost: getSolrLawHost(), solrLawPort: getSolrLawPort(), solrLawCore: getSolrLawCore(), diff --git a/app/server.js b/app/server.js index d312343f..0ce91ea2 100644 --- a/app/server.js +++ b/app/server.js @@ -88,7 +88,7 @@ glob.globSync('**/*.md', { const fmData = { fm: fm.data, excerpt: fm.excerpt }; const content = helpers.md.render(fm.content, fmData ); const renderData = { content, route, filePath, fullFilePath, req, paths, ...fmData }; - res.render("page", { h: helpers, ...renderData }); + res.render("page", { h: helpers, require, ...renderData }); }); }); diff --git a/app/vercel-serve.js b/app/vercel-serve.js index d59b25a8..9de0f09a 100644 --- a/app/vercel-serve.js +++ b/app/vercel-serve.js @@ -25,7 +25,7 @@ const helpers = require('../views/helpers/functions'); // const errorTemplate = require('./views/error'); const directoryTemplate = (vals) => { return new Promise((resolve, reject) => { - ejs.renderFile(path.join(__dirname, '..', 'views', 'directory.ejs'), { h: helpers, ...vals }, (err, str) => { + ejs.renderFile(path.join(__dirname, '..', 'views', 'directory.ejs'), { h: helpers, require, ...vals }, (err, str) => { if (err) { reject(err); } else { @@ -36,7 +36,7 @@ const directoryTemplate = (vals) => { }; const errorTemplate = (vals) => { return new Promise((resolve, reject) => { - ejs.renderFile(path.join(__dirname, '..', 'views', 'error.ejs'), { h: helpers, ...vals }, (err, str) => { + ejs.renderFile(path.join(__dirname, '..', 'views', 'error.ejs'), { h: helpers, require, ...vals }, (err, str) => { if (err) { reject(err); } else { diff --git a/views/directory.ejs b/views/directory.ejs index 4040eb7a..c613b8c9 100644 --- a/views/directory.ejs +++ b/views/directory.ejs @@ -22,7 +22,9 @@   <%= h.getSiteWelcomeMessage() %> <% } else if (h.shouldOmitLinkOnLastBreadcrumb({paths, index})) { %> - <%= h.trimSlashes({path: value.name}).replaceAll('_', ' ') %> + <%= h.trimSlashes(value.name).replaceAll('_', ' ') %> + <% } else if (index == 0) { %> + <%= h.getSiteName() %> <% } else { %> <%= h.getDirectoryName({directory: value.name}).replaceAll('_', ' ') %> diff --git a/views/helpers/functions.js b/views/helpers/functions.js index 753e0d43..d072da2b 100644 --- a/views/helpers/functions.js +++ b/views/helpers/functions.js @@ -1,7 +1,7 @@ const path = require('path'); const glob = require('glob'); const fs = require('fs'); -const config = require('../../app/config'); +const { config } = require('../../app/config'); const markdownit = require('markdown-it'); var markdownItAttrs = require('markdown-it-attrs'); const md = markdownit({ @@ -18,34 +18,50 @@ const md = markdownit({ ); const moment = require('moment-timezone').tz.setDefault("UTC"); -const getSiteName = config.getSiteName; +const getSiteName = () => config.siteName; -const trimSlashes = ({path}) => { - return path.replace(/^[\/\\]|[\/\\]$/g, ''); +const trimSlashes = (dirPath) => { + return dirPath.replace(/^[\/\\]|[\/\\]$/g, ''); }; + +const getLeftMostDirectory = (directory) => { + if (directory.indexOf(path.sep)) { + return directory.substring(0, directory.indexOf(path.sep)); + } + return directory; +} + +const leftTrimFirstDirectory = (directory) => { + if (directory.indexOf(path.sep)) { + return directory.substring(directory.indexOf(path.sep)); + } + return directory; +} + const getDirectoryName = ({directory}) => { - directory = trimSlashes({path: directory}); - let title = trimSlashes({path: directory.replace("public", "")}).replaceAll(path.sep, path.posix.sep); - return (directory=="public") ? getSiteName() : title; + directory = trimSlashes(directory); + const leftMostDirectory = getLeftMostDirectory(directory); + let title = trimSlashes(leftTrimFirstDirectory(directory)).replaceAll(path.sep, path.posix.sep); + return (trimSlashes(directory)==leftMostDirectory) ? getSiteName() : title; }; const getDirectoryTitle = ({directory}) => { - directory = trimSlashes({path: directory}); - let title = trimSlashes({path: directory.replace("public", "")}) + const leftMostDirectory = getLeftMostDirectory(directory); + let title = trimSlashes(leftTrimFirstDirectory(directory)) .replaceAll(path.sep, path.posix.sep) .replaceAll('_', ' ') .split('/') .reverse() .join(' - '); - return (directory=="public") ? getSiteName() : `${title} - ${getSiteName()}`; + return (trimSlashes(directory)==leftMostDirectory) ? getSiteName() : `${title} - ${getSiteName()}`; }; -const getSiteWelcomeMessage = config.getSiteWelcomeMessage; +const getSiteWelcomeMessage = () => config.siteWelcomeMessage; const shouldShowDirectorySeparator = ({index}) => (index > 0); const shouldShowSiteWelcomeMessage = ({paths}) => (paths.length == 1); const shouldOmitLinkOnLastBreadcrumb = ({paths, index}) => (index == paths.length-1); const resolveReadmeFile = ({directory}) => { const resolveFile = (file) => { - const pathToFile = path.join(__dirname, "..", "..", directory, file); + const pathToFile = path.join(config.publicPath, trimSlashes(leftTrimFirstDirectory(directory)), file); return fs.existsSync(pathToFile) ? pathToFile : ""; }; return ( @@ -157,18 +173,19 @@ const renderArchive = (html, paths) => { } module.exports = { - trimSlashes, - getSiteName, - getDirectoryName, - getDirectoryTitle, - getSiteWelcomeMessage, - shouldShowDirectorySeparator, - shouldShowSiteWelcomeMessage, - shouldOmitLinkOnLastBreadcrumb, - directoryContainsReadme, - printReadme, - stripWebVTT, - renderArchive, - md, - moment, + leftTrimFirstDirectory, + trimSlashes, + getSiteName, + getDirectoryName, + getDirectoryTitle, + getSiteWelcomeMessage, + shouldShowDirectorySeparator, + shouldShowSiteWelcomeMessage, + shouldOmitLinkOnLastBreadcrumb, + directoryContainsReadme, + printReadme, + stripWebVTT, + renderArchive, + md, + moment, }; \ No newline at end of file diff --git a/views/page.ejs b/views/page.ejs index add5b040..c9b4b96e 100644 --- a/views/page.ejs +++ b/views/page.ejs @@ -20,8 +20,10 @@ <% } %> <% if (h.shouldOmitLinkOnLastBreadcrumb({paths, index})) { %> <%= (typeof fm.title !== 'undefined') ? `${fm.title}` : value %> - <% } else { %> - + <% } else if (index == 0) { %> + <%= h.getSiteName() %> + <% } else { %> + <%= (value == 'public' ? h.getSiteName() : value) %> <% } %> diff --git a/views/video-player.ejs b/views/video-player.ejs index 9c02d16f..28dbaa31 100644 --- a/views/video-player.ejs +++ b/views/video-player.ejs @@ -21,8 +21,10 @@ Welcome to <%= h.getDirectoryTitle({directory}) %> <% } else if (h.shouldOmitLinkOnLastBreadcrumb({paths, index})) { %> <%= h.trimSlashes({path: value.name}) %> - <% } else { %> - + <% } else if (index == 0) { %> + <%= h.getSiteName() %> + <% } else { %> + <%= h.getDirectoryName({directory: value.name}) %> <% } %> diff --git a/web.config b/web.config index d02dbde9..59865d79 100644 --- a/web.config +++ b/web.config @@ -27,7 +27,7 @@ - +