diff --git a/bin/deck b/bin/deck index f43e49f..6f30566 100755 --- a/bin/deck +++ b/bin/deck @@ -11,6 +11,10 @@ var handlebars = require('handlebars'); var app = express(); var staticHandler = express['static'].bind(express); +function toInt(num) { + return parseInt(num, 10); +} + app.use((function log() { var text = '{{date}} {{req.method}} {{req.url}}'; var logTemplate = handlebars.compile(text); @@ -50,17 +54,27 @@ function index(req, res) { app.get('/', index); -app.get('/slides', function showHandler(req, res) { +function getMarkdownFiles(cb) { fs.readdir(pathToFile('data', 'slide'), function (err, files) { + if (err) { + return cb(err); + } files.sort(); - var jsonFiles = _.filter(files, function (file) { + var markdownFiles = _.filter(files, function (file) { return /^\d+\.md$/.test(file); }); + cb(null, markdownFiles); + }); +} + +app.get('/slides', function showHandler(req, res) { + getMarkdownFiles(function (err, files) { + if (err) { + return renderError(res, err); + } - res.send(_.map(jsonFiles, function (file) { - return { - id: parseInt(file.replace(/\.md$/, ''), 10) - }; + res.send(_.map(files, function (file, index) { + return {id: index + 1}; })); }); }); @@ -71,33 +85,23 @@ app.get(/slide\/(\d+)/, function showHandler(req, res, next) { return; } - var slideIndex = req.params[0]; + var slideIndex = toInt(req.params[0]); - fs.readdir(pathToFile('data', 'slide'), function (err, files) { + getMarkdownFiles(function (err, files) { if (err) { return renderError(res, err); } - - files.sort(); - var markdownFiles = _.filter(files, function (file) { - return /\.md$/.test(file); - }); - - if (slideIndex > markdownFiles.length) { + if (slideIndex > files.length) { return next(); } - var markdownFile = markdownFiles[slideIndex - 1]; + var markdownFile = files[slideIndex - 1]; var markdownPath = pathToFile('data', 'slide', markdownFile); fs.readFile(markdownPath, {encoding: 'utf8'}, function (err, content) { if (err) { return renderError(res, err); } - - res.send({ - id: parseInt(slideIndex, 10), - copy: content - }); + res.send({id: toInt(slideIndex), copy: content}); }); }); }); diff --git a/data/slide/01.md b/data/slide/010.md similarity index 100% rename from data/slide/01.md rename to data/slide/010.md diff --git a/data/slide/02.md b/data/slide/020.md similarity index 100% rename from data/slide/02.md rename to data/slide/020.md diff --git a/data/slide/03.md b/data/slide/030.md similarity index 100% rename from data/slide/03.md rename to data/slide/030.md diff --git a/data/slide/04.md b/data/slide/040.md similarity index 100% rename from data/slide/04.md rename to data/slide/040.md diff --git a/data/slide/05.md b/data/slide/050.md similarity index 100% rename from data/slide/05.md rename to data/slide/050.md diff --git a/data/slide/06.md b/data/slide/060.md similarity index 100% rename from data/slide/06.md rename to data/slide/060.md diff --git a/data/slide/07.md b/data/slide/070.md similarity index 100% rename from data/slide/07.md rename to data/slide/070.md diff --git a/data/slide/08.md b/data/slide/080.md similarity index 100% rename from data/slide/08.md rename to data/slide/080.md diff --git a/data/slide/09.md b/data/slide/090.md similarity index 100% rename from data/slide/09.md rename to data/slide/090.md diff --git a/data/slide/10.md b/data/slide/100.md similarity index 100% rename from data/slide/10.md rename to data/slide/100.md diff --git a/data/slide/11.md b/data/slide/110.md similarity index 100% rename from data/slide/11.md rename to data/slide/110.md diff --git a/data/slide/12.md b/data/slide/120.md similarity index 100% rename from data/slide/12.md rename to data/slide/120.md diff --git a/data/slide/13.md b/data/slide/130.md similarity index 100% rename from data/slide/13.md rename to data/slide/130.md diff --git a/data/slide/14.md b/data/slide/140.md similarity index 100% rename from data/slide/14.md rename to data/slide/140.md diff --git a/data/slide/15.md b/data/slide/150.md similarity index 100% rename from data/slide/15.md rename to data/slide/150.md diff --git a/data/slide/16.md b/data/slide/160.md similarity index 100% rename from data/slide/16.md rename to data/slide/160.md diff --git a/data/slide/17.md b/data/slide/170.md similarity index 100% rename from data/slide/17.md rename to data/slide/170.md