indexHandlers.js 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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. }));
  52. },
  53. /**
  54. * Get index with selected repo&example
  55. */
  56. getIndexExample: function(req, res) {
  57. const repo = exStore.getRepo(req.params.repoSlug);
  58. if(! repo) {
  59. return res.status(404).send('Repo ' + req.params.repoSlug + ' not found');
  60. }
  61. const menuRepo = exStore.getRepoMenu();
  62. const menuExample = exStore.getExampleMenu(repo.path);
  63. const example = _.find(repo.examples, { slug: req.params.exampleSlug });
  64. if(! example) {
  65. return res.status(404).send('Example ' + req.params.repoSlug + '/' + req.params.exampleSlug + ' not found');
  66. }
  67. // const title = 'Home';
  68. console.log(menuExample);
  69. const { repoSlug, exampleSlug } = req.params;
  70. readExampleFiles(repoSlug, exampleSlug, example)
  71. .then(files => {
  72. // console.log('example files', html, js, css);
  73. res.send(Mustache.render(indexTpml, {
  74. // title,
  75. menuRepo,
  76. menuExample,
  77. files,
  78. filesJSON: JSON.stringify(files)
  79. }));
  80. });
  81. }
  82. };
  83. };