/* global __dirname */ "use strict"; var _ = require('lodash'); var Mustache = require('mustache'); var path = require('path'); var fs = require('fs'); var chokidar = require('chokidar'); var indexTmplPath = path.normalize(__dirname + '/../html/index.mustache.html'); var indexTpml; var { readFilesAsync } = require('../lib/fsio'); // One-liner for current directory, ignores .dotfiles chokidar.watch('./html', {ignored: /(^|[\/\\])\../}).on('all', (event, path) => { // console.log(event, path); if(path === 'html/index.mustache.html') { console.log('reload index html'); indexTpml = fs.readFileSync(indexTmplPath).toString(); } }); module.exports = function(exStore, exDir) { function readExampleFiles(repoSlug, exampleSlug, config) { const exampleDir = exDir + '/' + repoSlug + '/' + exampleSlug; const libsCssDir = path.normalize(__dirname + '/../css/vendor'); const libsJsDir = path.normalize(__dirname + '/../js/vendor'); const { html, js, css } = config; // libsCss, libsJs const files = [].concat(html, js, css); // console.log('#2', exampleDir, html, js, css, files); return readFilesAsync(exampleDir, files); // .then(files => { // console.log('#### files', files); // return files; // }); } return { /** * Get bare index without repo or examples */ getIndexBare: function(req, res) { const menuRepo = exStore.getRepoMenu(); // const title = 'Home'; console.log(menuRepo); res.send(Mustache.render(indexTpml, { // title, menuRepo, filesJSON: '[]' })); }, /** * Get index with repo selected only */ 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: '[]' })); }, /** * Get index with selected repo&example */ 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) })); }); } }; };