From 9a598d77d6c1a0afe155842f35bce2ff713d24eb Mon Sep 17 00:00:00 2001 From: Andrew Tomaka Date: Wed, 4 Feb 2015 11:00:02 -0500 Subject: [PATCH] Initial commit --- .bowerrc | 3 + .editorconfig | 10 +++ .gitignore | 6 ++ .jshintrc | 19 ++++++ .yo-rc.json | 8 +++ Gruntfile.coffee | 142 ++++++++++++++++++++++++++++++++++++++++ bower.json | 8 +++ css/source/theme.scss | 57 ++++++++++++++++ js/loadhtmlslides.js | 44 +++++++++++++ package.json | 22 +++++++ slides/index.md | 10 +++ slides/list.json | 1 + templates/_index.html | 93 ++++++++++++++++++++++++++ templates/_section.html | 5 ++ 14 files changed, 428 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 .yo-rc.json create mode 100644 Gruntfile.coffee create mode 100644 bower.json create mode 100644 css/source/theme.scss create mode 100644 js/loadhtmlslides.js create mode 100644 package.json create mode 100644 slides/index.md create mode 100644 slides/list.json create mode 100644 templates/_index.html create mode 100644 templates/_section.html diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..69fad35 --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "bower_components" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..0ea0cc4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,10 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 4 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6065d09 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +node_modules +bower_components +dist +*.log +.sass-cache +index.html diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..855a9ef --- /dev/null +++ b/.jshintrc @@ -0,0 +1,19 @@ +{ + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 4, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "white": true +} diff --git a/.yo-rc.json b/.yo-rc.json new file mode 100644 index 0000000..1dca622 --- /dev/null +++ b/.yo-rc.json @@ -0,0 +1,8 @@ +{ + "generator-reveal": { + "presentationTitle": "Vagrant", + "packageVersion": "0.0.0", + "useSass": true, + "deployToGithubPages": false + } +} \ No newline at end of file diff --git a/Gruntfile.coffee b/Gruntfile.coffee new file mode 100644 index 0000000..1fa657f --- /dev/null +++ b/Gruntfile.coffee @@ -0,0 +1,142 @@ +# Generated on 2015-02-04 using generator-reveal 0.4.0 +module.exports = (grunt) -> + + grunt.initConfig + + watch: + + livereload: + options: + livereload: true + files: [ + 'index.html' + 'slides/{,*/}*.{md,html}' + 'js/*.js' + 'css/*.css' + ] + + index: + files: [ + 'templates/_index.html' + 'templates/_section.html' + 'slides/list.json' + ] + tasks: ['buildIndex'] + + coffeelint: + files: ['Gruntfile.coffee'] + tasks: ['coffeelint'] + + jshint: + files: ['js/*.js'] + tasks: ['jshint'] + + sass: + files: ['css/source/theme.scss'] + tasks: ['sass'] + + sass: + + theme: + files: + 'css/theme.css': 'css/source/theme.scss' + + connect: + + livereload: + options: + port: 9000 + # Change hostname to '0.0.0.0' to access + # the server from outside. + hostname: 'localhost' + base: '.' + open: true + livereload: true + + coffeelint: + + options: + indentation: + value: 4 + max_line_length: + level: 'ignore' + + all: ['Gruntfile.coffee'] + + jshint: + + options: + jshintrc: '.jshintrc' + + all: ['js/*.js'] + + copy: + + dist: + files: [{ + expand: true + src: [ + 'slides/**' + 'bower_components/**' + 'js/**' + 'css/*.css' + ] + dest: 'dist/' + },{ + expand: true + src: ['index.html'] + dest: 'dist/' + filter: 'isFile' + }] + + + + + # Load all grunt tasks. + require('load-grunt-tasks')(grunt) + + grunt.registerTask 'buildIndex', + 'Build index.html from templates/_index.html and slides/list.json.', + -> + indexTemplate = grunt.file.read 'templates/_index.html' + sectionTemplate = grunt.file.read 'templates/_section.html' + slides = grunt.file.readJSON 'slides/list.json' + + html = grunt.template.process indexTemplate, data: + slides: + slides + section: (slide) -> + grunt.template.process sectionTemplate, data: + slide: + slide + grunt.file.write 'index.html', html + + grunt.registerTask 'test', + '*Lint* javascript and coffee files.', [ + 'coffeelint' + 'jshint' + ] + + grunt.registerTask 'serve', + 'Run presentation locally and start watch process (living document).', [ + 'buildIndex' + 'sass' + 'connect:livereload' + 'watch' + ] + + grunt.registerTask 'dist', + 'Save presentation files to *dist* directory.', [ + 'test' + 'sass' + 'buildIndex' + 'copy' + ] + + + + # Define default task. + grunt.registerTask 'default', [ + 'test' + 'serve' + ] diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..4f88b27 --- /dev/null +++ b/bower.json @@ -0,0 +1,8 @@ +{ + "name": "vagrant", + "version": "0.0.0", + "dependencies": { + "reveal.js": "~2.6.1", + "reveal-highlight-themes": "~8.3.0" + } +} diff --git a/css/source/theme.scss b/css/source/theme.scss new file mode 100644 index 0000000..73af36f --- /dev/null +++ b/css/source/theme.scss @@ -0,0 +1,57 @@ +/** + * Default theme for reveal.js. + * + * Copyright (C) 2011-2012 Hakim El Hattab, http://hakim.se + */ + +// This file has been copied over from +// ../../bower_components/reveal.js/css/theme/source/default.scss + +// Default mixins and settings ----------------- +@import "../../bower_components/reveal.js/css/theme/template/mixins"; +@import "../../bower_components/reveal.js/css/theme/template/settings"; +// --------------------------------------------- + +// Include theme-specific fonts ---------------- +@font-face { + font-family: 'League Gothic'; + src: url('../bower_components/reveal.js/lib/font/league_gothic-webfont.eot'); + src: url('../bower_components/reveal.js/lib/font/league_gothic-webfont.eot?#iefix') format('embedded-opentype'), + url('../bower_components/reveal.js/lib/font/league_gothic-webfont.woff') format('woff'), + url('../bower_components/reveal.js/lib/font/league_gothic-webfont.ttf') format('truetype'), + url('../bower_components/reveal.js/lib/font/league_gothic-webfont.svg#LeagueGothicRegular') format('svg'); + + font-weight: normal; + font-style: normal; +} + +@import url(https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic); +// --------------------------------------------- + +// Override theme settings --------------------- +$heading1TextShadow: 0 1px 0 #ccc, 0 2px 0 #c9c9c9, 0 3px 0 #bbb, 0 4px 0 #b9b9b9, 0 5px 0 #aaa, 0 6px 1px rgba(0,0,0,.1), 0 0 5px rgba(0,0,0,.1), 0 1px 3px rgba(0,0,0,.3), 0 3px 5px rgba(0,0,0,.2), 0 5px 10px rgba(0,0,0,.25), 0 20px 20px rgba(0,0,0,.15); +// Other options include e.g. +// $mainFont: 'Open Sans', sans-serif; +// $linkColor: #ed1dff; +// $linkColorHover: $linkColor; +// $headingFont: 'Montserrat', Impact, sans-serif; +// $headingTextShadow: none; +// $headingLetterSpacing: -0.03em; +// $headingTextTransform: none; +// $selectionBackgroundColor: #e0ad52; +// $mainFontSize: 30px; +// See ../../bower_components/reveal.js/css/theme/template/settings.scss for the full list. +// --------------------------------------------- + +// Background generator ------------------------ +@mixin bodyBackground() { + @include radial-gradient( rgba(28,30,32,1), rgba(85,90,95,1) ); +} +// --------------------------------------------- + +// Theme template ------------------------------ +@import "../../bower_components/reveal.js/css/theme/template/theme"; +// --------------------------------------------- + +// See ../../bower_components/reveal.js/css/theme/README.md +// for further explanations on how reveal.js themes work. diff --git a/js/loadhtmlslides.js b/js/loadhtmlslides.js new file mode 100644 index 0000000..aad46f3 --- /dev/null +++ b/js/loadhtmlslides.js @@ -0,0 +1,44 @@ +// Modified from markdown.js from Hakim to handle external html files +(function () { + /*jslint loopfunc: true, browser: true*/ + /*globals alert*/ + 'use strict'; + + var querySlidingHtml = function () { + var sections = document.querySelectorAll('[data-html]'), + section, j, jlen; + + for (j = 0, jlen = sections.length; j < jlen; j++) { + section = sections[j]; + + if (section.getAttribute('data-html').length) { + + var xhr = new XMLHttpRequest(), + url = section.getAttribute('data-html'), + cb = function () { + if (xhr.readyState === 4) { + if ( + (xhr.status >= 200 && xhr.status < 300) || + xhr.status === 0 // file protocol yields status code 0 (useful for local debug, mobile applications etc.) + ) { + section.innerHTML = xhr.responseText; + } else { + section.outerHTML = '
ERROR: The attempt to fetch ' + url + ' failed with the HTTP status ' + xhr.status + '. Check your browser\'s JavaScript console for more details.

'; + } + } + }; + + xhr.onreadystatechange = cb; + + xhr.open('GET', url, false); + try { + xhr.send(); + } catch (e) { + alert('Failed to get file' + url + '.' + e); + } + } + } + }; + + querySlidingHtml(); +})(); diff --git a/package.json b/package.json new file mode 100644 index 0000000..5ed8815 --- /dev/null +++ b/package.json @@ -0,0 +1,22 @@ +{ + "name": "vagrant", + "version": "0.0.0", + "private": true, + "devDependencies": { + "grunt": "^0.4.5", + "grunt-contrib-sass": "^0.8.0", + "grunt-contrib-connect": "^0.9.0", + "grunt-contrib-watch": "^0.6.1", + "grunt-contrib-copy": "^0.7.0", + "grunt-contrib-jshint": "^0.10.0", + "load-grunt-tasks": "^1.0.0", + "grunt-coffeelint": "0.0.13" + }, + "engines": { + "node": ">=0.10.0", + "npm": ">=1.3.7" + }, + "scripts": { + "test": "grunt test" + } +} diff --git a/slides/index.md b/slides/index.md new file mode 100644 index 0000000..364de59 --- /dev/null +++ b/slides/index.md @@ -0,0 +1,10 @@ + +# Vagrant + +From the terminal, pop in: + + ```yo reveal:slide "Slide Title"``` + +Available options: + + ```--markdown --attributes --notes``` diff --git a/slides/list.json b/slides/list.json new file mode 100644 index 0000000..7aade68 --- /dev/null +++ b/slides/list.json @@ -0,0 +1 @@ +["index.md"] diff --git a/templates/_index.html b/templates/_index.html new file mode 100644 index 0000000..54f358a --- /dev/null +++ b/templates/_index.html @@ -0,0 +1,93 @@ + + + + + + + Vagrant + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + <% _.forEach(slides, function(slide) { %> + <% if (!_.isArray(slide)) { %> + <%= section(slide) %> + <% } %> + <% if (_.isArray(slide)) { %> +
+ <% _.forEach(slide, function(verticalslide) { %> + <%= section(verticalslide) %> + <% }); %> +
+ <% } %> + <% }); %> +
+ +
+ + + + + + + + diff --git a/templates/_section.html b/templates/_section.html new file mode 100644 index 0000000..78cb3d4 --- /dev/null +++ b/templates/_section.html @@ -0,0 +1,5 @@ +<% if (!_.isString(slide) && !_.isArray(slide) && _.isObject(slide)) { %> +
<% if (_.isString(slide.filename)) { %>data-<% if (slide.filename.indexOf('.html') !== -1) { %>html<% } else { %>markdown<% }%>="slides/<%= slide.filename %>"<% } %>>
+<% } %><% if (_.isString(slide)) { %> +
html<% } else { %>markdown<% }%>="slides/<%= slide %>">
+<% } %>