indexHandlers.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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 indexTmplPath = path.normalize(__dirname + '/../html/index.mustache.html');
  8. var indexTpml = fs.readFileSync(indexTmplPath).toString();
  9. var {
  10. readFilesAsync
  11. } = require('../lib/fsio');
  12. function readExampleFiles(repoSlug, exampleSlug, config) {
  13. const exampleDir = path.normalize(__dirname + '/../exemples/' + repoSlug + '/' + exampleSlug);
  14. const libsCssDir = path.normalize(__dirname + '/../css/vendor');
  15. const libsJsDir = path.normalize(__dirname + '/../js/vendor');
  16. const { html, js, css } = config; // libsCss, libsJs
  17. const files = [].concat(html, js, css);
  18. return readFilesAsync(exampleDir, files);
  19. }
  20. module.exports = function(exStore) {
  21. return {
  22. /**
  23. * Get bare index without repo or examples
  24. */
  25. getIndexBare: function(req, res) {
  26. const menuRepo = exStore.getRepoMenu();
  27. // const title = 'Home';
  28. console.log(menuRepo);
  29. res.send(Mustache.render(indexTpml, {
  30. // title,
  31. menuRepo,
  32. filesJSON: '[]'
  33. }));
  34. },
  35. /**
  36. * Get index with repo selected only
  37. */
  38. getIndexRepo: function getIndexRepo(req, res) {
  39. const repo = exStore.getRepo(req.params.repoSlug);
  40. if(! repo) {
  41. return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
  42. }
  43. const menuRepo = exStore.getRepoMenu();
  44. const menuExample = exStore.getExampleMenu(repo.path);
  45. // const title = 'Home';
  46. console.log(menuExample);
  47. res.send(Mustache.render(indexTpml, {
  48. // title,
  49. menuRepo,
  50. menuExample,
  51. filesJSON: '[]'
  52. }));
  53. },
  54. /**
  55. * Get index with selected repo&example
  56. */
  57. getIndexExample: function(req, res) {
  58. const repo = exStore.getRepo(req.params.repoSlug);
  59. if(! repo) {
  60. return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
  61. }
  62. const menuRepo = exStore.getRepoMenu();
  63. const menuExample = exStore.getExampleMenu(repo.path);
  64. const example = _.find(repo.examples, { slug: req.params.exampleSlug });
  65. if(! example) {
  66. return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
  67. }
  68. // const title = 'Home';
  69. console.log(menuExample);
  70. const { repoSlug, exampleSlug } = req.params;
  71. readExampleFiles(repoSlug, exampleSlug, example)
  72. .then(files => {
  73. // console.log('example files', html, js, css);
  74. res.send(Mustache.render(indexTpml, {
  75. // title,
  76. menuRepo,
  77. menuExample,
  78. files,
  79. filesJSON: JSON.stringify(files)
  80. }));
  81. });
  82. }
  83. };
  84. };