From c5829b65ea298195f7962e6543ff31015c7f23c4 Mon Sep 17 00:00:00 2001 From: Buddy Sandidge Date: Mon, 27 Apr 2015 23:08:20 -0700 Subject: [PATCH] Change how slides are served to be easier to edit Serve up markdown based on filename in the data slide folder. Use the index to find what file to use. Removed ability to run code on slide on the server. Wasn't that useful for how much of a pain it is. --- bin/deck | 125 +++--------------- data/code/html5.js | 19 --- data/copy/crash-explain.md | 5 - data/copy/js-runtime.md | 1 - data/copy/only-title.md | 1 - data/copy/testing.md | 1 - data/copy/umd.md | 1 - data/copy/use-after-free.md | 1 - data/slide/01.json | 3 - data/{copy/title.md => slide/01.md} | 0 data/slide/02.json | 3 - data/{copy/about.md => slide/02.md} | 0 data/slide/03.json | 3 - data/{copy/screen-shot.md => slide/03.md} | 0 data/slide/04.json | 4 - .../04.md} | 4 + data/slide/05.json | 3 - data/{copy/not-node.md => slide/05.md} | 0 data/slide/06.json | 3 - data/{copy/qt.md => slide/06.md} | 0 data/slide/07.json | 4 - data/{code/use-after-free.js => slide/07.md} | 4 + data/slide/08.json | 3 - data/{copy/null-pointer.md => slide/08.md} | 0 data/slide/09.json | 4 - data/{code/crash.js => slide/09.md} | 8 ++ data/slide/10.json | 4 - data/{code/prototypes.js => slide/10.md} | 4 + data/slide/11.json | 3 - data/{copy/code-share.md => slide/11.md} | 0 data/slide/12.json | 4 - data/{code/backbone-umd.js => slide/12.md} | 4 + data/slide/13.json | 4 - data/{code/backbone.js => slide/13.md} | 4 + data/slide/14.json | 4 - data/{code/some-test.js => slide/14.md} | 4 + data/slide/15.json | 4 - data/{code/test.js => slide/15.md} | 4 + data/slide/16.json | 3 - data/{copy/other-awesome.md => slide/16.md} | 0 data/slide/17.json | 3 - data/{copy/fin.md => slide/17.md} | 0 42 files changed, 55 insertions(+), 194 deletions(-) delete mode 100644 data/code/html5.js delete mode 100644 data/copy/crash-explain.md delete mode 100644 data/copy/js-runtime.md delete mode 100644 data/copy/only-title.md delete mode 100644 data/copy/testing.md delete mode 100644 data/copy/umd.md delete mode 100644 data/copy/use-after-free.md delete mode 100644 data/slide/01.json rename data/{copy/title.md => slide/01.md} (100%) delete mode 100644 data/slide/02.json rename data/{copy/about.md => slide/02.md} (100%) delete mode 100644 data/slide/03.json rename data/{copy/screen-shot.md => slide/03.md} (100%) delete mode 100644 data/slide/04.json rename data/{code/phantom-webpage-screenshot.js => slide/04.md} (88%) delete mode 100644 data/slide/05.json rename data/{copy/not-node.md => slide/05.md} (100%) delete mode 100644 data/slide/06.json rename data/{copy/qt.md => slide/06.md} (100%) delete mode 100644 data/slide/07.json rename data/{code/use-after-free.js => slide/07.md} (79%) delete mode 100644 data/slide/08.json rename data/{copy/null-pointer.md => slide/08.md} (100%) delete mode 100644 data/slide/09.json rename data/{code/crash.js => slide/09.md} (60%) delete mode 100644 data/slide/10.json rename data/{code/prototypes.js => slide/10.md} (90%) delete mode 100644 data/slide/11.json rename data/{copy/code-share.md => slide/11.md} (100%) delete mode 100644 data/slide/12.json rename data/{code/backbone-umd.js => slide/12.md} (92%) delete mode 100644 data/slide/13.json rename data/{code/backbone.js => slide/13.md} (89%) delete mode 100644 data/slide/14.json rename data/{code/some-test.js => slide/14.md} (79%) delete mode 100644 data/slide/15.json rename data/{code/test.js => slide/15.md} (95%) delete mode 100644 data/slide/16.json rename data/{copy/other-awesome.md => slide/16.md} (100%) delete mode 100644 data/slide/17.json rename data/{copy/fin.md => slide/17.md} (100%) diff --git a/bin/deck b/bin/deck index e164d62..f43e49f 100755 --- a/bin/deck +++ b/bin/deck @@ -3,10 +3,8 @@ var fs = require('fs'); var path = require('path'); -var exec = require('child_process').exec; var _ = require('lodash'); -var async = require('async'); var express = require('express'); var handlebars = require('handlebars'); @@ -52,28 +50,16 @@ function index(req, res) { app.get('/', index); -function serveIfExists(path) { - return function _serveIfExists(cb) { - fs.exists(path, function (exists) { - if (!exists) { - cb(null, null); - return; - } - fs.readFile(path, {encoding: 'utf8'}, cb); - }); - }; -} - app.get('/slides', function showHandler(req, res) { fs.readdir(pathToFile('data', 'slide'), function (err, files) { files.sort(); var jsonFiles = _.filter(files, function (file) { - return /^\d+\.json$/.test(file); + return /^\d+\.md$/.test(file); }); res.send(_.map(jsonFiles, function (file) { return { - id: parseInt(file.replace(/\.json$/, ''), 10) + id: parseInt(file.replace(/\.md$/, ''), 10) }; })); }); @@ -85,107 +71,34 @@ app.get(/slide\/(\d+)/, function showHandler(req, res, next) { return; } - var slideId = req.params[0]; - var slidePath = pathToFile('data', 'slide', slideId + '.json'); + var slideIndex = req.params[0]; - fs.exists(slidePath, function (exists) { - if (!exists) { - next(); - return; + fs.readdir(pathToFile('data', 'slide'), function (err, files) { + if (err) { + return renderError(res, err); } - fs.readFile(slidePath, {encoding: 'utf8'}, function (err, content) { - if (err) { - renderError(res, err); - return; - } - - try { - var slide = JSON.parse(content); - } catch (err) { - renderError(res, err); - return; - } - - async.parallel({ - copy: serveIfExists(pathToFile('data', 'copy', slide.copy + '.md')), - code: serveIfExists(pathToFile('data', 'code', slide.code + '.js')) - }, function (err, slideContent) { - if (err) { - renderError(res, err); - return; - } - slideContent.id = parseInt(slideId, 10); - slideContent.title = slide.title || ''; - res.send(slideContent); - }); + files.sort(); + var markdownFiles = _.filter(files, function (file) { + return /\.md$/.test(file); }); - }); -}); - -app.get(/results\/([^\/]+)\/(\d\d)$/, function resultsHandler(req, res, next) { - var app = req.params[0]; - var slideId = req.params[1]; - var validApps = [ - 'node', 'phantomjs-1.9.8', 'phantomjs-2.0.0' - ]; - - if (!_.contains(validApps, app)) { - next(); - return; - } - - var slidePath = pathToFile('data', 'slide', slideId + '.json'); - fs.exists(slidePath, function (exists) { - if (!exists) { + if (slideIndex > markdownFiles.length) { return next(); } - var noSlideError = new Error('No code for slide'); - async.waterfall([ - - function (cb) { - fs.readFile(slidePath, {encoding: 'utf8'}, cb); - }, - - function (content, cb) { - try { - var slide = JSON.parse(content); - } catch (err) { - cb(err, null); - return; - } - cb(null, slide); - }, - - function (slide, cb) { - var codePath = pathToFile('data', 'code', slide.code + '.js'); - fs.exists(codePath, function (exists) { - if (exists) { - cb(null, codePath); - } else { - cb(noSlideError); - } - }); - }, - - function (path, cb) { - exec(app + ' ' + path, cb); - } - - ], function (err, stdout, stderr) { - if (err === noSlideError) { - next(); - return; - } + var markdownFile = markdownFiles[slideIndex - 1]; + var markdownPath = pathToFile('data', 'slide', markdownFile); + fs.readFile(markdownPath, {encoding: 'utf8'}, function (err, content) { if (err) { - res.send({stdout: '', stderr: err.toString()}); - return; + return renderError(res, err); } - res.send({stdout: stdout, stderr: stderr}); - }); + res.send({ + id: parseInt(slideIndex, 10), + copy: content + }); + }); }); }); diff --git a/data/code/html5.js b/data/code/html5.js deleted file mode 100644 index e4edf4b..0000000 --- a/data/code/html5.js +++ /dev/null @@ -1,19 +0,0 @@ -var page = require('webpage').create(); -page.viewportSize = {width: 1280, height: 720}; - -page.open('https://html5test.com/', function() { - function doneLoading() { - var el = document.getElementById('loading'); - return window.getComputedStyle(el).display === 'none'; - } - - function checkPage() { - if (page.evaluate(doneLoading)) { - page.render('static/html5.' + phantom.version.major + '.png'); - console.log('created static/html5.' + phantom.version.major + '.png'); - phantom.exit(); - } - setTimeout(checkPage, 100); - } - checkPage(); -}); diff --git a/data/copy/crash-explain.md b/data/copy/crash-explain.md deleted file mode 100644 index 72aabb1..0000000 --- a/data/copy/crash-explain.md +++ /dev/null @@ -1,5 +0,0 @@ -# Use After Free - -- Create webpage object in JavaScript -- Close webpage in JavaScript -- Do something with webpage in JavaScript diff --git a/data/copy/js-runtime.md b/data/copy/js-runtime.md deleted file mode 100644 index 204c9df..0000000 --- a/data/copy/js-runtime.md +++ /dev/null @@ -1 +0,0 @@ -# JavaScript Runtime diff --git a/data/copy/only-title.md b/data/copy/only-title.md deleted file mode 100644 index cfa4384..0000000 --- a/data/copy/only-title.md +++ /dev/null @@ -1 +0,0 @@ -# PhantomJS diff --git a/data/copy/testing.md b/data/copy/testing.md deleted file mode 100644 index f00b526..0000000 --- a/data/copy/testing.md +++ /dev/null @@ -1 +0,0 @@ -# Testing diff --git a/data/copy/umd.md b/data/copy/umd.md deleted file mode 100644 index 6af4daa..0000000 --- a/data/copy/umd.md +++ /dev/null @@ -1 +0,0 @@ -# Backbone's UMD diff --git a/data/copy/use-after-free.md b/data/copy/use-after-free.md deleted file mode 100644 index 2afb56e..0000000 --- a/data/copy/use-after-free.md +++ /dev/null @@ -1 +0,0 @@ -# This will error, not crash diff --git a/data/slide/01.json b/data/slide/01.json deleted file mode 100644 index 2c94aea..0000000 --- a/data/slide/01.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "title" -} diff --git a/data/copy/title.md b/data/slide/01.md similarity index 100% rename from data/copy/title.md rename to data/slide/01.md diff --git a/data/slide/02.json b/data/slide/02.json deleted file mode 100644 index 1a86225..0000000 --- a/data/slide/02.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "about" -} diff --git a/data/copy/about.md b/data/slide/02.md similarity index 100% rename from data/copy/about.md rename to data/slide/02.md diff --git a/data/slide/03.json b/data/slide/03.json deleted file mode 100644 index 5c165e9..0000000 --- a/data/slide/03.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "screen-shot" -} diff --git a/data/copy/screen-shot.md b/data/slide/03.md similarity index 100% rename from data/copy/screen-shot.md rename to data/slide/03.md diff --git a/data/slide/04.json b/data/slide/04.json deleted file mode 100644 index e9a3a5a..0000000 --- a/data/slide/04.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "only-title", - "code": "phantom-webpage-screenshot" -} diff --git a/data/code/phantom-webpage-screenshot.js b/data/slide/04.md similarity index 88% rename from data/code/phantom-webpage-screenshot.js rename to data/slide/04.md index dc4afc7..e2f416e 100644 --- a/data/code/phantom-webpage-screenshot.js +++ b/data/slide/04.md @@ -1,3 +1,6 @@ +# PhantomJS + +```javascript var page = require('webpage').create(); page.viewportSize = {width: 1280, height: 720}; @@ -7,3 +10,4 @@ page.open('http://phantomjs.org', function() { console.log('created phantomjs.png. ☮ out!'); phantom.exit(); }); +``` diff --git a/data/slide/05.json b/data/slide/05.json deleted file mode 100644 index 9496681..0000000 --- a/data/slide/05.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "not-node" -} diff --git a/data/copy/not-node.md b/data/slide/05.md similarity index 100% rename from data/copy/not-node.md rename to data/slide/05.md diff --git a/data/slide/06.json b/data/slide/06.json deleted file mode 100644 index 6d4cd4c..0000000 --- a/data/slide/06.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "qt" -} diff --git a/data/copy/qt.md b/data/slide/06.md similarity index 100% rename from data/copy/qt.md rename to data/slide/06.md diff --git a/data/slide/07.json b/data/slide/07.json deleted file mode 100644 index 6ecc732..0000000 --- a/data/slide/07.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "use-after-free", - "code": "use-after-free" -} diff --git a/data/code/use-after-free.js b/data/slide/07.md similarity index 79% rename from data/code/use-after-free.js rename to data/slide/07.md index 433b7cc..70d7b8d 100644 --- a/data/code/use-after-free.js +++ b/data/slide/07.md @@ -1,3 +1,6 @@ +# This will error, not crash + +```javascript var phantom = this.phantom || {exit: function () {}}; var foo = {bar: {baz: 123}}; delete foo.bar; @@ -7,3 +10,4 @@ try { console.log(err); phantom.exit(); } +``` diff --git a/data/slide/08.json b/data/slide/08.json deleted file mode 100644 index 0d1a9e5..0000000 --- a/data/slide/08.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "null-pointer" -} diff --git a/data/copy/null-pointer.md b/data/slide/08.md similarity index 100% rename from data/copy/null-pointer.md rename to data/slide/08.md diff --git a/data/slide/09.json b/data/slide/09.json deleted file mode 100644 index de2da20..0000000 --- a/data/slide/09.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "crash-explain", - "code": "crash" -} diff --git a/data/code/crash.js b/data/slide/09.md similarity index 60% rename from data/code/crash.js rename to data/slide/09.md index 405f959..33867d6 100644 --- a/data/code/crash.js +++ b/data/slide/09.md @@ -1,3 +1,10 @@ +# Use After Free + +- Create webpage object in JavaScript +- Close webpage in JavaScript +- Do something with webpage in JavaScript + +```javascript var phantom = this.phantom || {exit: function () {}}; var page = require('webpage').create(); // code, code, code… @@ -6,3 +13,4 @@ page.open('about:blank', function () { console.log('☮ out!'); phantom.exit(); }); +``` diff --git a/data/slide/10.json b/data/slide/10.json deleted file mode 100644 index 468ceb8..0000000 --- a/data/slide/10.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "js-runtime", - "code": "prototypes" -} diff --git a/data/code/prototypes.js b/data/slide/10.md similarity index 90% rename from data/code/prototypes.js rename to data/slide/10.md index ec799dd..2edd1e1 100644 --- a/data/code/prototypes.js +++ b/data/slide/10.md @@ -1,3 +1,6 @@ +# JavaScript Runtime + +```javascript var phantom = this.phantom || {exit: function () {}}; console.log('bind:', typeof Function.prototype.bind); console.log('9 === parseInt("09"):', 9 === parseInt('09')); @@ -8,3 +11,4 @@ console.log('filter:', typeof Array.prototype.filter); console.log('Object.create:', typeof Object.create); phantom.exit(); +``` diff --git a/data/slide/11.json b/data/slide/11.json deleted file mode 100644 index 54efe99..0000000 --- a/data/slide/11.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "code-share" -} diff --git a/data/copy/code-share.md b/data/slide/11.md similarity index 100% rename from data/copy/code-share.md rename to data/slide/11.md diff --git a/data/slide/12.json b/data/slide/12.json deleted file mode 100644 index 3662815..0000000 --- a/data/slide/12.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "umd", - "code": "backbone-umd" -} diff --git a/data/code/backbone-umd.js b/data/slide/12.md similarity index 92% rename from data/code/backbone-umd.js rename to data/slide/12.md index 4bddc08..08b90ac 100644 --- a/data/code/backbone-umd.js +++ b/data/slide/12.md @@ -1,3 +1,6 @@ +# Backbone's UMD + +```javascript (function(root, factory) { if (typeof define === 'function' && define.amd) { define(['underscore', 'jquery', 'exports'], function(_, $, exports) { @@ -12,3 +15,4 @@ }(this, function(root, Backbone, _, $) { // Backbone… })); +``` diff --git a/data/slide/13.json b/data/slide/13.json deleted file mode 100644 index 55d3be8..0000000 --- a/data/slide/13.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "only-title", - "code": "backbone" -} diff --git a/data/code/backbone.js b/data/slide/13.md similarity index 89% rename from data/code/backbone.js rename to data/slide/13.md index befac1e..1014c4a 100644 --- a/data/code/backbone.js +++ b/data/slide/13.md @@ -1,3 +1,6 @@ +# PhantomJS + +```javascript var phantom = phantom || {exit: function () {}}; var _ = require('../../vendor/underscore/underscore'); phantom.injectJs('../../vendor/backbone/backbone.js'); @@ -5,3 +8,4 @@ console.log(_.toString()); console.log(Backbone.View.toString()); phantom.exit(); //module.exports = Backbone; +``` diff --git a/data/slide/14.json b/data/slide/14.json deleted file mode 100644 index a12e499..0000000 --- a/data/slide/14.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "testing", - "code": "some-test" -} diff --git a/data/code/some-test.js b/data/slide/14.md similarity index 79% rename from data/code/some-test.js rename to data/slide/14.md index 9b8bd63..72634c0 100644 --- a/data/code/some-test.js +++ b/data/slide/14.md @@ -1,5 +1,9 @@ +# Testing + +```javascript describe('some test', function () { it('→ some test case', function () { expect(1 + 1).toBe(2); }); }); +``` diff --git a/data/slide/15.json b/data/slide/15.json deleted file mode 100644 index db310c4..0000000 --- a/data/slide/15.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "copy": "testing", - "code": "test" -} diff --git a/data/code/test.js b/data/slide/15.md similarity index 95% rename from data/code/test.js rename to data/slide/15.md index 54ad373..f22e907 100644 --- a/data/code/test.js +++ b/data/slide/15.md @@ -1,3 +1,6 @@ +# Testing + +```javascript phantom.injectJs('../../vendor/jasmine/lib/jasmine-core/jasmine.js'); var consoleFns = require('../../vendor/jasmine/lib/console/console.js'); var jasmine = jasmineRequire.core(jasmineRequire); @@ -13,3 +16,4 @@ jasmine.getEnv().addReporter(new jasmine.ConsoleReporter({ phantom.injectJs('./some-test.js'); jasmine.getEnv().execute(); +``` diff --git a/data/slide/16.json b/data/slide/16.json deleted file mode 100644 index 2a35e99..0000000 --- a/data/slide/16.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "other-awesome" -} diff --git a/data/copy/other-awesome.md b/data/slide/16.md similarity index 100% rename from data/copy/other-awesome.md rename to data/slide/16.md diff --git a/data/slide/17.json b/data/slide/17.json deleted file mode 100644 index b1dbd4c..0000000 --- a/data/slide/17.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "copy": "fin" -} diff --git a/data/copy/fin.md b/data/slide/17.md similarity index 100% rename from data/copy/fin.md rename to data/slide/17.md