indexHandlers.js 2.8 KB

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