| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- /* 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)
- }));
- });
- }
- };
- };
|