|
@@ -10,6 +10,7 @@ var indexTpml;
|
|
|
var {
|
|
var {
|
|
|
readFilesAsync
|
|
readFilesAsync
|
|
|
} = require('../lib/fsio');
|
|
} = require('../lib/fsio');
|
|
|
|
|
+var translator = require('../lib/translator');
|
|
|
|
|
|
|
|
|
|
|
|
|
// One-liner for current directory, ignores .dotfiles
|
|
// One-liner for current directory, ignores .dotfiles
|
|
@@ -31,30 +32,88 @@ module.exports = function(exStore, exDir) {
|
|
|
const { html, js, css } = config; // libsCss, libsJs
|
|
const { html, js, css } = config; // libsCss, libsJs
|
|
|
|
|
|
|
|
const files = [].concat(html, js, css);
|
|
const files = [].concat(html, js, css);
|
|
|
- // console.log('#2', exampleDir, html, js, css, files);
|
|
|
|
|
return readFilesAsync(exampleDir, files);
|
|
return readFilesAsync(exampleDir, files);
|
|
|
- // .then(files => {
|
|
|
|
|
- // console.log('#### files', files);
|
|
|
|
|
- // return files;
|
|
|
|
|
- // });
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ function renderIndex(req, withRepo, withExample) {
|
|
|
|
|
|
|
|
|
|
+ // Extract repoSlug and exampleSlug from req.params
|
|
|
|
|
+ const { locale, params: { repoSlug, exampleSlug } } = req;
|
|
|
|
|
+ let repo;
|
|
|
|
|
+ let example;
|
|
|
|
|
+ let menuExample;
|
|
|
|
|
+ let statusCode;
|
|
|
|
|
+
|
|
|
|
|
+ // Initialize view data
|
|
|
|
|
+ let data = {
|
|
|
|
|
+ menuRepo: exStore.getRepoMenu()
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Fetch example repository if needed
|
|
|
|
|
+ if(withRepo) {
|
|
|
|
|
+ repo = exStore.getRepo(repoSlug);
|
|
|
|
|
+ if(! repo) {
|
|
|
|
|
+ // return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
|
|
|
|
|
+ data.errorMessage = translator.get(locale, "repoNotFound", [repoSlug]); //'Repo ' + params.repoSlug + ' not found';
|
|
|
|
|
+ statusCode = 404;
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ data.menuExample = exStore.getExampleMenu(repo.path);
|
|
|
|
|
+ data.showControls = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Fetch example if needed
|
|
|
|
|
+ if(withExample && repo) {
|
|
|
|
|
+ example = _.find(repo.examples, { slug: exampleSlug });
|
|
|
|
|
+ if(! example) {
|
|
|
|
|
+ // return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
|
|
|
|
|
+ data.errorMessage = translator.get(locale, "exampleNotFound", [repoSlug, exampleSlug]);
|
|
|
|
|
+ statusCode = 404;
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ data.showEditor = true;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // Mustache.render(indexTpml, data);
|
|
|
|
|
+ return (
|
|
|
|
|
+ exampleSlug && example ?
|
|
|
|
|
+ readExampleFiles(repoSlug, exampleSlug, example) : Promise.resolve([])
|
|
|
|
|
+ ).then(files =>
|
|
|
|
|
+ ({ files, filesJSON: JSON.stringify(files) })
|
|
|
|
|
+ )
|
|
|
|
|
+ .then(({ files, filesJSON }) => Object.assign(data, { files, filesJSON }))
|
|
|
|
|
+ .then(c => { console.log(c); return c; })
|
|
|
|
|
+ .then(data => ({
|
|
|
|
|
+ html: Mustache.render(indexTpml, data),
|
|
|
|
|
+ code: statusCode ? statusCode : 200
|
|
|
|
|
+ }));
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+ /**
|
|
|
|
|
+ * Extract language header from req
|
|
|
|
|
+ */
|
|
|
|
|
+ getAcceptLanguage: function (req, res, next) {
|
|
|
|
|
+ const acceptLanguageHdr = req.headers["accept-language"];
|
|
|
|
|
+ const re = /[a-z]{2}\-[A-Z]{2}/;
|
|
|
|
|
+ const matches = re.exec(acceptLanguageHdr);
|
|
|
|
|
+ if(matches) {
|
|
|
|
|
+ req.locale = matches[0];
|
|
|
|
|
+ }
|
|
|
|
|
+ next();
|
|
|
|
|
+ },
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* Get bare index without repo or examples
|
|
* Get bare index without repo or examples
|
|
|
*/
|
|
*/
|
|
|
getIndexBare: function(req, res) {
|
|
getIndexBare: function(req, res) {
|
|
|
- const menuRepo = exStore.getRepoMenu();
|
|
|
|
|
- // const title = 'Home';
|
|
|
|
|
- console.log(menuRepo);
|
|
|
|
|
- res.send(Mustache.render(indexTpml, {
|
|
|
|
|
- // title,
|
|
|
|
|
- menuRepo,
|
|
|
|
|
- filesJSON: '[]'
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ renderIndex(req)
|
|
|
|
|
+ .then(({ html, code }) => res.send(html));
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
@@ -62,20 +121,22 @@ module.exports = function(exStore, exDir) {
|
|
|
* Get index with repo selected only
|
|
* Get index with repo selected only
|
|
|
*/
|
|
*/
|
|
|
getIndexRepo: function getIndexRepo(req, res) {
|
|
getIndexRepo: function getIndexRepo(req, res) {
|
|
|
- const repo = exStore.getRepo(req.params.repoSlug);
|
|
|
|
|
- if(! repo) {
|
|
|
|
|
- return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
|
|
|
|
|
- }
|
|
|
|
|
- const menuRepo = exStore.getRepoMenu();
|
|
|
|
|
- const menuExample = exStore.getExampleMenu(repo.path);
|
|
|
|
|
- // const title = 'Home';
|
|
|
|
|
- // console.log(menuExample);
|
|
|
|
|
- res.send(Mustache.render(indexTpml, {
|
|
|
|
|
- // title,
|
|
|
|
|
- menuRepo,
|
|
|
|
|
- menuExample,
|
|
|
|
|
- filesJSON: '[]'
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ renderIndex(req, true)
|
|
|
|
|
+ .then(({ html, code }) => res.status(code).send(html));
|
|
|
|
|
+ // const repo = exStore.getRepo(req.params.repoSlug);
|
|
|
|
|
+ // if(! repo) {
|
|
|
|
|
+ // return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
|
|
|
|
|
+ // }
|
|
|
|
|
+ // const menuRepo = exStore.getRepoMenu();
|
|
|
|
|
+ // const menuExample = exStore.getExampleMenu(repo.path);
|
|
|
|
|
+ // // const title = 'Home';
|
|
|
|
|
+ // // console.log(menuExample);
|
|
|
|
|
+ // res.send(Mustache.render(indexTpml, {
|
|
|
|
|
+ // // title,
|
|
|
|
|
+ // menuRepo,
|
|
|
|
|
+ // menuExample,
|
|
|
|
|
+ // filesJSON: '[]'
|
|
|
|
|
+ // }));
|
|
|
},
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
@@ -83,32 +144,34 @@ module.exports = function(exStore, exDir) {
|
|
|
* Get index with selected repo&example
|
|
* Get index with selected repo&example
|
|
|
*/
|
|
*/
|
|
|
getIndexExample: function(req, res) {
|
|
getIndexExample: function(req, res) {
|
|
|
- console.log('getIndexExample', req.params);
|
|
|
|
|
- const repo = exStore.getRepo(req.params.repoSlug);
|
|
|
|
|
- if(! repo) {
|
|
|
|
|
- return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
|
|
|
|
|
- }
|
|
|
|
|
- const menuRepo = exStore.getRepoMenu();
|
|
|
|
|
- const menuExample = exStore.getExampleMenu(repo.path);
|
|
|
|
|
- const example = _.find(repo.examples, { slug: req.params.exampleSlug });
|
|
|
|
|
- if(! example) {
|
|
|
|
|
- return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
|
|
|
|
|
- }
|
|
|
|
|
- // console.log('#1');
|
|
|
|
|
- // const title = 'Home';
|
|
|
|
|
- // console.log(menuExample);
|
|
|
|
|
- const { repoSlug, exampleSlug } = req.params;
|
|
|
|
|
- readExampleFiles(repoSlug, exampleSlug, example)
|
|
|
|
|
- .then(files => {
|
|
|
|
|
- console.log('example files', files);
|
|
|
|
|
- res.send(Mustache.render(indexTpml, {
|
|
|
|
|
- // title,
|
|
|
|
|
- menuRepo,
|
|
|
|
|
- menuExample,
|
|
|
|
|
- files,
|
|
|
|
|
- filesJSON: JSON.stringify(files)
|
|
|
|
|
- }));
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ renderIndex(req, true, true)
|
|
|
|
|
+ .then(({ html, code }) => res.status(code).send(html));
|
|
|
|
|
+ // console.log('getIndexExample', req.params);
|
|
|
|
|
+ // const repo = exStore.getRepo(req.params.repoSlug);
|
|
|
|
|
+ // if(! repo) {
|
|
|
|
|
+ // return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
|
|
|
|
|
+ // }
|
|
|
|
|
+ // const menuRepo = exStore.getRepoMenu();
|
|
|
|
|
+ // const menuExample = exStore.getExampleMenu(repo.path);
|
|
|
|
|
+ // const example = _.find(repo.examples, { slug: req.params.exampleSlug });
|
|
|
|
|
+ // if(! example) {
|
|
|
|
|
+ // return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
|
|
|
|
|
+ // }
|
|
|
|
|
+ // // console.log('#1');
|
|
|
|
|
+ // // const title = 'Home';
|
|
|
|
|
+ // // console.log(menuExample);
|
|
|
|
|
+ // const { repoSlug, exampleSlug } = req.params;
|
|
|
|
|
+ // readExampleFiles(repoSlug, exampleSlug, example)
|
|
|
|
|
+ // .then(files => {
|
|
|
|
|
+ // console.log('example files', files);
|
|
|
|
|
+ // res.send(Mustache.render(indexTpml, {
|
|
|
|
|
+ // // title,
|
|
|
|
|
+ // menuRepo,
|
|
|
|
|
+ // menuExample,
|
|
|
|
|
+ // files,
|
|
|
|
|
+ // filesJSON: JSON.stringify(files)
|
|
|
|
|
+ // }));
|
|
|
|
|
+ // });
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
};
|
|
};
|