indexHandlers.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /* global __dirname */
  2. "use strict";
  3. var _ = require('lodash');
  4. var Mustache = require('mustache');
  5. var path = require('path');
  6. var fs = require('fs');
  7. var chokidar = require('chokidar');
  8. var indexTmplPath = path.normalize(__dirname + '/../html/index.mustache.html');
  9. var indexTpml;
  10. var {
  11. readFilesAsync
  12. } = require('../lib/fsio');
  13. // One-liner for current directory, ignores .dotfiles
  14. chokidar.watch('./html', {ignored: /(^|[\/\\])\../}).on('all', (event, path) => {
  15. // console.log(event, path);
  16. if(path === 'html/index.mustache.html') {
  17. console.log('reload index html');
  18. indexTpml = fs.readFileSync(indexTmplPath).toString();
  19. }
  20. });
  21. module.exports = function(exStore, exDir) {
  22. function readExampleFiles(repoSlug, exampleSlug, config) {
  23. const exampleDir = exDir + '/' + repoSlug + '/' + exampleSlug;
  24. const libsCssDir = path.normalize(__dirname + '/../css/vendor');
  25. const libsJsDir = path.normalize(__dirname + '/../js/vendor');
  26. const { html, js, css } = config; // libsCss, libsJs
  27. const files = [].concat(html, js, css);
  28. // console.log('#2', exampleDir, html, js, css, files);
  29. return readFilesAsync(exampleDir, files);
  30. // .then(files => {
  31. // console.log('#### files', files);
  32. // return files;
  33. // });
  34. }
  35. return {
  36. /**
  37. * Get bare index without repo or examples
  38. */
  39. getIndexBare: function(req, res) {
  40. const menuRepo = exStore.getRepoMenu();
  41. // const title = 'Home';
  42. console.log(menuRepo);
  43. res.send(Mustache.render(indexTpml, {
  44. // title,
  45. menuRepo,
  46. filesJSON: '[]'
  47. }));
  48. },
  49. /**
  50. * Get index with repo selected only
  51. */
  52. getIndexRepo: function getIndexRepo(req, res) {
  53. const repo = exStore.getRepo(req.params.repoSlug);
  54. if(! repo) {
  55. return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
  56. }
  57. const menuRepo = exStore.getRepoMenu();
  58. const menuExample = exStore.getExampleMenu(repo.path);
  59. // const title = 'Home';
  60. // console.log(menuExample);
  61. res.send(Mustache.render(indexTpml, {
  62. // title,
  63. menuRepo,
  64. menuExample,
  65. filesJSON: '[]'
  66. }));
  67. },
  68. /**
  69. * Get index with selected repo&example
  70. */
  71. getIndexExample: function(req, res) {
  72. console.log('getIndexExample', req.params);
  73. const repo = exStore.getRepo(req.params.repoSlug);
  74. if(! repo) {
  75. return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
  76. }
  77. const menuRepo = exStore.getRepoMenu();
  78. const menuExample = exStore.getExampleMenu(repo.path);
  79. const example = _.find(repo.examples, { slug: req.params.exampleSlug });
  80. if(! example) {
  81. return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
  82. }
  83. // console.log('#1');
  84. // const title = 'Home';
  85. // console.log(menuExample);
  86. const { repoSlug, exampleSlug } = req.params;
  87. readExampleFiles(repoSlug, exampleSlug, example)
  88. .then(files => {
  89. console.log('example files', files);
  90. res.send(Mustache.render(indexTpml, {
  91. // title,
  92. menuRepo,
  93. menuExample,
  94. files,
  95. filesJSON: JSON.stringify(files)
  96. }));
  97. });
  98. }
  99. };
  100. };