From 42c743678122e3f41a2b6afff52353b4b04da762 Mon Sep 17 00:00:00 2001 From: "Chakib (spike) Benziane" Date: Mon, 16 Dec 2013 11:59:28 +0100 Subject: [PATCH] initial commit --- .bowerrc | 3 + .editorconfig | 21 + .gitattributes | 1 + .gitignore | 5 + .jshintrc | 24 + .travis.yml | 7 + Gruntfile.js | 369 + app/.buildignore | 1 + app/.htaccess | 543 + app/404.html | 157 + app/favicon.ico | Bin 0 -> 4286 bytes app/images/yeoman.png | Bin 0 -> 13501 bytes app/index.html | 55 + app/robots.txt | 3 + app/scripts/app.js | 16 + app/scripts/controllers/main.js | 10 + app/styles/main.css | 79 + app/views/main.html | 36 + bower.json | 15 + karma-e2e.conf.js | 54 + karma.conf.js | 54 + npm-debug.log | 19515 ++++++++++++++++ package.json | 37 + slides/.gitignore | 38 + slides/README.html | 105 + slides/README.md | 130 + slides/app.yaml | 23 + slides/config.rb | 24 + slides/images/barchart.png | Bin 0 -> 17632 bytes slides/images/chart.png | Bin 0 -> 94688 bytes slides/images/chrome-logo-tiny.png | Bin 0 -> 1381 bytes slides/images/google_developers_icon_128.png | Bin 0 -> 4316 bytes slides/images/google_developers_logo.png | Bin 0 -> 14800 bytes slides/images/google_developers_logo_tiny.png | Bin 0 -> 3749 bytes .../images/google_developers_logo_white.png | Bin 0 -> 7105 bytes slides/images/io2012_logo.png | Bin 0 -> 13016 bytes slides/images/io2013_logo.png | Bin 0 -> 5153 bytes slides/images/sky.jpg | Bin 0 -> 194552 bytes slides/js/hammer.js | 586 + slides/js/modernizr.custom.45394.js | 4 + slides/js/order.js | 8 + slides/js/polyfills/classList.min.js | 2 + slides/js/polyfills/dataset.min.js | 2 + slides/js/polyfills/history.min.js | 1 + slides/js/prettify/lang-apollo.js | 2 + slides/js/prettify/lang-clj.js | 18 + slides/js/prettify/lang-css.js | 2 + slides/js/prettify/lang-go.js | 1 + slides/js/prettify/lang-hs.js | 2 + slides/js/prettify/lang-lisp.js | 3 + slides/js/prettify/lang-lua.js | 2 + slides/js/prettify/lang-ml.js | 2 + slides/js/prettify/lang-n.js | 4 + slides/js/prettify/lang-proto.js | 1 + slides/js/prettify/lang-scala.js | 2 + slides/js/prettify/lang-sql.js | 2 + slides/js/prettify/lang-tex.js | 1 + slides/js/prettify/lang-vb.js | 2 + slides/js/prettify/lang-vhdl.js | 3 + slides/js/prettify/lang-wiki.js | 2 + slides/js/prettify/lang-xq.js | 3 + slides/js/prettify/lang-yaml.js | 2 + slides/js/prettify/prettify.css | 1 + slides/js/prettify/prettify.js | 28 + slides/js/require-1.0.8.min.js | 33 + slides/js/slide-controller.js | 109 + slides/js/slide-deck.js | 775 + slides/js/slides.js | 5 + slides/scripts/md/README.md | 5 + slides/scripts/md/base.html | 104 + slides/scripts/md/render.py | 57 + slides/scripts/md/slides.md | 78 + slides/serve.sh | 22 + slides/slide_config.js | 37 + slides/template.html | 416 + slides/theme/css/default.css | 1492 ++ slides/theme/css/phone.css | 1 + slides/theme/scss/_base.scss | 137 + slides/theme/scss/default.scss | 1083 + slides/theme/scss/phone.scss | 35 + test/.jshintrc | 35 + test/runner.html | 10 + test/spec/controllers/main.js | 22 + 83 files changed, 26467 insertions(+) create mode 100644 .bowerrc create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 .travis.yml create mode 100644 Gruntfile.js create mode 100644 app/.buildignore create mode 100644 app/.htaccess create mode 100644 app/404.html create mode 100644 app/favicon.ico create mode 100644 app/images/yeoman.png create mode 100644 app/index.html create mode 100644 app/robots.txt create mode 100644 app/scripts/app.js create mode 100644 app/scripts/controllers/main.js create mode 100644 app/styles/main.css create mode 100644 app/views/main.html create mode 100644 bower.json create mode 100644 karma-e2e.conf.js create mode 100644 karma.conf.js create mode 100644 npm-debug.log create mode 100644 package.json create mode 100644 slides/.gitignore create mode 100644 slides/README.html create mode 100644 slides/README.md create mode 100644 slides/app.yaml create mode 100644 slides/config.rb create mode 100644 slides/images/barchart.png create mode 100644 slides/images/chart.png create mode 100644 slides/images/chrome-logo-tiny.png create mode 100644 slides/images/google_developers_icon_128.png create mode 100644 slides/images/google_developers_logo.png create mode 100644 slides/images/google_developers_logo_tiny.png create mode 100644 slides/images/google_developers_logo_white.png create mode 100644 slides/images/io2012_logo.png create mode 100644 slides/images/io2013_logo.png create mode 100644 slides/images/sky.jpg create mode 100755 slides/js/hammer.js create mode 100644 slides/js/modernizr.custom.45394.js create mode 100644 slides/js/order.js create mode 100644 slides/js/polyfills/classList.min.js create mode 100644 slides/js/polyfills/dataset.min.js create mode 100644 slides/js/polyfills/history.min.js create mode 100644 slides/js/prettify/lang-apollo.js create mode 100644 slides/js/prettify/lang-clj.js create mode 100644 slides/js/prettify/lang-css.js create mode 100644 slides/js/prettify/lang-go.js create mode 100644 slides/js/prettify/lang-hs.js create mode 100644 slides/js/prettify/lang-lisp.js create mode 100644 slides/js/prettify/lang-lua.js create mode 100644 slides/js/prettify/lang-ml.js create mode 100644 slides/js/prettify/lang-n.js create mode 100644 slides/js/prettify/lang-proto.js create mode 100644 slides/js/prettify/lang-scala.js create mode 100644 slides/js/prettify/lang-sql.js create mode 100644 slides/js/prettify/lang-tex.js create mode 100644 slides/js/prettify/lang-vb.js create mode 100644 slides/js/prettify/lang-vhdl.js create mode 100644 slides/js/prettify/lang-wiki.js create mode 100644 slides/js/prettify/lang-xq.js create mode 100644 slides/js/prettify/lang-yaml.js create mode 100644 slides/js/prettify/prettify.css create mode 100644 slides/js/prettify/prettify.js create mode 100644 slides/js/require-1.0.8.min.js create mode 100644 slides/js/slide-controller.js create mode 100644 slides/js/slide-deck.js create mode 100644 slides/js/slides.js create mode 100644 slides/scripts/md/README.md create mode 100644 slides/scripts/md/base.html create mode 100755 slides/scripts/md/render.py create mode 100644 slides/scripts/md/slides.md create mode 100755 slides/serve.sh create mode 100644 slides/slide_config.js create mode 100644 slides/template.html create mode 100644 slides/theme/css/default.css create mode 100644 slides/theme/css/phone.css create mode 100644 slides/theme/scss/_base.scss create mode 100644 slides/theme/scss/default.scss create mode 100644 slides/theme/scss/phone.scss create mode 100644 test/.jshintrc create mode 100644 test/runner.html create mode 100644 test/spec/controllers/main.js diff --git a/.bowerrc b/.bowerrc new file mode 100644 index 0000000..ba0accc --- /dev/null +++ b/.bowerrc @@ -0,0 +1,3 @@ +{ + "directory": "app/bower_components" +} diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..c2cdfb8 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,21 @@ +# EditorConfig helps developers define and maintain consistent +# coding styles between different editors and IDEs +# editorconfig.org + +root = true + + +[*] + +# Change these settings to your own preference +indent_style = space +indent_size = 2 + +# We recommend you to keep these unchanged +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..2125666 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7911b28 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +dist +.tmp +.sass-cache +app/bower_components diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..40377ba --- /dev/null +++ b/.jshintrc @@ -0,0 +1,24 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "globals": { + "angular": false + } +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..83f4e22 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - '0.8' + - '0.10' +before_script: + - 'npm install -g bower grunt-cli' + - 'bower install' diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..d6fb53f --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,369 @@ +// Generated on 2013-12-16 using generator-angular 0.6.0 +'use strict'; + +// # Globbing +// for performance reasons we're only matching one level down: +// 'test/spec/{,*/}*.js' +// use this if you want to recursively match all subfolders: +// 'test/spec/**/*.js' + +module.exports = function (grunt) { + + // Load grunt tasks automatically + require('load-grunt-tasks')(grunt); + + // Time how long tasks take. Can help when optimizing build times + require('time-grunt')(grunt); + + // Define the configuration for all the tasks + grunt.initConfig({ + + // Project settings + yeoman: { + // configurable paths + app: require('./bower.json').appPath || 'app', + dist: 'dist' + }, + + // Watches files for changes and runs tasks based on the changed files + watch: { + js: { + files: ['{.tmp,<%= yeoman.app %>}/scripts/{,*/}*.js'], + tasks: ['newer:jshint:all'] + }, + jsTest: { + files: ['test/spec/{,*/}*.js'], + tasks: ['newer:jshint:test', 'karma'] + }, + styles: { + files: ['<%= yeoman.app %>/styles/{,*/}*.css'], + tasks: ['newer:copy:styles', 'autoprefixer'] + }, + gruntfile: { + files: ['Gruntfile.js'] + }, + livereload: { + options: { + livereload: '<%= connect.options.livereload %>' + }, + files: [ + '<%= yeoman.app %>/{,*/}*.html', + '.tmp/styles/{,*/}*.css', + '<%= yeoman.app %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}' + ] + } + }, + + // The actual grunt server settings + connect: { + options: { + port: 9000, + // Change this to '0.0.0.0' to access the server from outside. + hostname: 'localhost', + livereload: 35729 + }, + livereload: { + options: { + open: true, + base: [ + '.tmp', + '<%= yeoman.app %>' + ] + } + }, + test: { + options: { + port: 9001, + base: [ + '.tmp', + 'test', + '<%= yeoman.app %>' + ] + } + }, + dist: { + options: { + base: '<%= yeoman.dist %>' + } + } + }, + + // Make sure code styles are up to par and there are no obvious mistakes + jshint: { + options: { + jshintrc: '.jshintrc', + reporter: require('jshint-stylish') + }, + all: [ + 'Gruntfile.js', + '<%= yeoman.app %>/scripts/{,*/}*.js' + ], + test: { + options: { + jshintrc: 'test/.jshintrc' + }, + src: ['test/spec/{,*/}*.js'] + } + }, + + // Empties folders to start fresh + clean: { + dist: { + files: [{ + dot: true, + src: [ + '.tmp', + '<%= yeoman.dist %>/*', + '!<%= yeoman.dist %>/.git*' + ] + }] + }, + server: '.tmp' + }, + + // Add vendor prefixed styles + autoprefixer: { + options: { + browsers: ['last 1 version'] + }, + dist: { + files: [{ + expand: true, + cwd: '.tmp/styles/', + src: '{,*/}*.css', + dest: '.tmp/styles/' + }] + } + }, + + + + + + // Renames files for browser caching purposes + rev: { + dist: { + files: { + src: [ + '<%= yeoman.dist %>/scripts/{,*/}*.js', + '<%= yeoman.dist %>/styles/{,*/}*.css', + '<%= yeoman.dist %>/images/{,*/}*.{png,jpg,jpeg,gif,webp,svg}', + '<%= yeoman.dist %>/styles/fonts/*' + ] + } + } + }, + + // Reads HTML for usemin blocks to enable smart builds that automatically + // concat, minify and revision files. Creates configurations in memory so + // additional tasks can operate on them + useminPrepare: { + html: '<%= yeoman.app %>/index.html', + options: { + dest: '<%= yeoman.dist %>' + } + }, + + // Performs rewrites based on rev and the useminPrepare configuration + usemin: { + html: ['<%= yeoman.dist %>/{,*/}*.html'], + css: ['<%= yeoman.dist %>/styles/{,*/}*.css'], + options: { + assetsDirs: ['<%= yeoman.dist %>'] + } + }, + + // The following *-min tasks produce minified files in the dist folder + imagemin: { + dist: { + files: [{ + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.{png,jpg,jpeg,gif}', + dest: '<%= yeoman.dist %>/images' + }] + } + }, + svgmin: { + dist: { + files: [{ + expand: true, + cwd: '<%= yeoman.app %>/images', + src: '{,*/}*.svg', + dest: '<%= yeoman.dist %>/images' + }] + } + }, + htmlmin: { + dist: { + options: { + // Optional configurations that you can uncomment to use + // removeCommentsFromCDATA: true, + // collapseBooleanAttributes: true, + // removeAttributeQuotes: true, + // removeRedundantAttributes: true, + // useShortDoctype: true, + // removeEmptyAttributes: true, + // removeOptionalTags: true*/ + }, + files: [{ + expand: true, + cwd: '<%= yeoman.app %>', + src: ['*.html', 'views/*.html'], + dest: '<%= yeoman.dist %>' + }] + } + }, + + // Allow the use of non-minsafe AngularJS files. Automatically makes it + // minsafe compatible so Uglify does not destroy the ng references + ngmin: { + dist: { + files: [{ + expand: true, + cwd: '.tmp/concat/scripts', + src: '*.js', + dest: '.tmp/concat/scripts' + }] + } + }, + + // Replace Google CDN references + cdnify: { + dist: { + html: ['<%= yeoman.dist %>/*.html'] + } + }, + + // Copies remaining files to places other tasks can use + copy: { + dist: { + files: [{ + expand: true, + dot: true, + cwd: '<%= yeoman.app %>', + dest: '<%= yeoman.dist %>', + src: [ + '*.{ico,png,txt}', + '.htaccess', + 'bower_components/**/*', + 'images/{,*/}*.{webp}', + 'fonts/*' + ] + }, { + expand: true, + cwd: '.tmp/images', + dest: '<%= yeoman.dist %>/images', + src: [ + 'generated/*' + ] + }] + }, + styles: { + expand: true, + cwd: '<%= yeoman.app %>/styles', + dest: '.tmp/styles/', + src: '{,*/}*.css' + } + }, + + // Run some tasks in parallel to speed up the build process + concurrent: { + server: [ + 'copy:styles' + ], + test: [ + 'copy:styles' + ], + dist: [ + 'copy:styles', + 'imagemin', + 'svgmin', + 'htmlmin' + ] + }, + + // By default, your `index.html`'s will take care of + // minification. These next options are pre-configured if you do not wish + // to use the Usemin blocks. + // cssmin: { + // dist: { + // files: { + // '<%= yeoman.dist %>/styles/main.css': [ + // '.tmp/styles/{,*/}*.css', + // '<%= yeoman.app %>/styles/{,*/}*.css' + // ] + // } + // } + // }, + // uglify: { + // dist: { + // files: { + // '<%= yeoman.dist %>/scripts/scripts.js': [ + // '<%= yeoman.dist %>/scripts/scripts.js' + // ] + // } + // } + // }, + // concat: { + // dist: {} + // }, + + // Test settings + karma: { + unit: { + configFile: 'karma.conf.js', + singleRun: true + } + } + }); + + + grunt.registerTask('serve', function (target) { + if (target === 'dist') { + return grunt.task.run(['build', 'connect:dist:keepalive']); + } + + grunt.task.run([ + 'clean:server', + 'concurrent:server', + 'autoprefixer', + 'connect:livereload', + 'watch' + ]); + }); + + grunt.registerTask('server', function () { + grunt.log.warn('The `server` task has been deprecated. Use `grunt serve` to start a server.'); + grunt.task.run(['serve']); + }); + + grunt.registerTask('test', [ + 'clean:server', + 'concurrent:test', + 'autoprefixer', + 'connect:test', + 'karma' + ]); + + grunt.registerTask('build', [ + 'clean:dist', + 'useminPrepare', + 'concurrent:dist', + 'autoprefixer', + 'concat', + 'ngmin', + 'copy:dist', + 'cdnify', + 'cssmin', + 'uglify', + 'rev', + 'usemin' + ]); + + grunt.registerTask('default', [ + 'newer:jshint', + 'test', + 'build' + ]); +}; diff --git a/app/.buildignore b/app/.buildignore new file mode 100644 index 0000000..fc98b8e --- /dev/null +++ b/app/.buildignore @@ -0,0 +1 @@ +*.coffee \ No newline at end of file diff --git a/app/.htaccess b/app/.htaccess new file mode 100644 index 0000000..cb84cb9 --- /dev/null +++ b/app/.htaccess @@ -0,0 +1,543 @@ +# Apache Configuration File + +# (!) Using `.htaccess` files slows down Apache, therefore, if you have access +# to the main server config file (usually called `httpd.conf`), you should add +# this logic there: http://httpd.apache.org/docs/current/howto/htaccess.html. + +# ############################################################################## +# # CROSS-ORIGIN RESOURCE SHARING (CORS) # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Cross-domain AJAX requests | +# ------------------------------------------------------------------------------ + +# Enable cross-origin AJAX requests. +# http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity +# http://enable-cors.org/ + +# +# Header set Access-Control-Allow-Origin "*" +# + +# ------------------------------------------------------------------------------ +# | CORS-enabled images | +# ------------------------------------------------------------------------------ + +# Send the CORS header for images when browsers request it. +# https://developer.mozilla.org/en/CORS_Enabled_Image +# http://blog.chromium.org/2011/07/using-cross-domain-images-in-webgl-and.html +# http://hacks.mozilla.org/2011/11/using-cors-to-load-webgl-textures-from-cross-domain-images/ + + + + + SetEnvIf Origin ":" IS_CORS + Header set Access-Control-Allow-Origin "*" env=IS_CORS + + + + +# ------------------------------------------------------------------------------ +# | Web fonts access | +# ------------------------------------------------------------------------------ + +# Allow access from all domains for web fonts + + + + Header set Access-Control-Allow-Origin "*" + + + + +# ############################################################################## +# # ERRORS # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | 404 error prevention for non-existing redirected folders | +# ------------------------------------------------------------------------------ + +# Prevent Apache from returning a 404 error for a rewrite if a directory +# with the same name does not exist. +# http://httpd.apache.org/docs/current/content-negotiation.html#multiviews +# http://www.webmasterworld.com/apache/3808792.htm + +Options -MultiViews + +# ------------------------------------------------------------------------------ +# | Custom error messages / pages | +# ------------------------------------------------------------------------------ + +# You can customize what Apache returns to the client in case of an error (see +# http://httpd.apache.org/docs/current/mod/core.html#errordocument), e.g.: + +ErrorDocument 404 /404.html + + +# ############################################################################## +# # INTERNET EXPLORER # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Better website experience | +# ------------------------------------------------------------------------------ + +# Force IE to render pages in the highest available mode in the various +# cases when it may not: http://hsivonen.iki.fi/doctype/ie-mode.pdf. + + + Header set X-UA-Compatible "IE=edge" + # `mod_headers` can't match based on the content-type, however, we only + # want to send this header for HTML pages and not for the other resources + + Header unset X-UA-Compatible + + + +# ------------------------------------------------------------------------------ +# | Cookie setting from iframes | +# ------------------------------------------------------------------------------ + +# Allow cookies to be set from iframes in IE. + +# +# Header set P3P "policyref=\"/w3c/p3p.xml\", CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"" +# + +# ------------------------------------------------------------------------------ +# | Screen flicker | +# ------------------------------------------------------------------------------ + +# Stop screen flicker in IE on CSS rollovers (this only works in +# combination with the `ExpiresByType` directives for images from below). + +# BrowserMatch "MSIE" brokenvary=1 +# BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1 +# BrowserMatch "Opera" !brokenvary +# SetEnvIf brokenvary 1 force-no-vary + + +# ############################################################################## +# # MIME TYPES AND ENCODING # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Proper MIME types for all files | +# ------------------------------------------------------------------------------ + + + + # Audio + AddType audio/mp4 m4a f4a f4b + AddType audio/ogg oga ogg + + # JavaScript + # Normalize to standard type (it's sniffed in IE anyways): + # http://tools.ietf.org/html/rfc4329#section-7.2 + AddType application/javascript js jsonp + AddType application/json json + + # Video + AddType video/mp4 mp4 m4v f4v f4p + AddType video/ogg ogv + AddType video/webm webm + AddType video/x-flv flv + + # Web fonts + AddType application/font-woff woff + AddType application/vnd.ms-fontobject eot + + # Browsers usually ignore the font MIME types and sniff the content, + # however, Chrome shows a warning if other MIME types are used for the + # following fonts. + AddType application/x-font-ttf ttc ttf + AddType font/opentype otf + + # Make SVGZ fonts work on iPad: + # https://twitter.com/FontSquirrel/status/14855840545 + AddType image/svg+xml svg svgz + AddEncoding gzip svgz + + # Other + AddType application/octet-stream safariextz + AddType application/x-chrome-extension crx + AddType application/x-opera-extension oex + AddType application/x-shockwave-flash swf + AddType application/x-web-app-manifest+json webapp + AddType application/x-xpinstall xpi + AddType application/xml atom rdf rss xml + AddType image/webp webp + AddType image/x-icon ico + AddType text/cache-manifest appcache manifest + AddType text/vtt vtt + AddType text/x-component htc + AddType text/x-vcard vcf + + + +# ------------------------------------------------------------------------------ +# | UTF-8 encoding | +# ------------------------------------------------------------------------------ + +# Use UTF-8 encoding for anything served as `text/html` or `text/plain`. +AddDefaultCharset utf-8 + +# Force UTF-8 for certain file formats. + + AddCharset utf-8 .atom .css .js .json .rss .vtt .webapp .xml + + + +# ############################################################################## +# # URL REWRITES # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Rewrite engine | +# ------------------------------------------------------------------------------ + +# Turning on the rewrite engine and enabling the `FollowSymLinks` option is +# necessary for the following directives to work. + +# If your web host doesn't allow the `FollowSymlinks` option, you may need to +# comment it out and use `Options +SymLinksIfOwnerMatch` but, be aware of the +# performance impact: http://httpd.apache.org/docs/current/misc/perf-tuning.html#symlinks + +# Also, some cloud hosting services require `RewriteBase` to be set: +# http://www.rackspace.com/knowledge_center/frequently-asked-question/why-is-mod-rewrite-not-working-on-my-site + + + Options +FollowSymlinks + # Options +SymLinksIfOwnerMatch + RewriteEngine On + # RewriteBase / + + +# ------------------------------------------------------------------------------ +# | Suppressing / Forcing the "www." at the beginning of URLs | +# ------------------------------------------------------------------------------ + +# The same content should never be available under two different URLs especially +# not with and without "www." at the beginning. This can cause SEO problems +# (duplicate content), therefore, you should choose one of the alternatives and +# redirect the other one. + +# By default option 1 (no "www.") is activated: +# http://no-www.org/faq.php?q=class_b + +# If you'd prefer to use option 2, just comment out all the lines from option 1 +# and uncomment the ones from option 2. + +# IMPORTANT: NEVER USE BOTH RULES AT THE SAME TIME! + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Option 1: rewrite www.example.com → example.com + + + RewriteCond %{HTTPS} !=on + RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] + RewriteRule ^ http://%1%{REQUEST_URI} [R=301,L] + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Option 2: rewrite example.com → www.example.com + +# Be aware that the following might not be a good idea if you use "real" +# subdomains for certain parts of your website. + +# +# RewriteCond %{HTTPS} !=on +# RewriteCond %{HTTP_HOST} !^www\..+$ [NC] +# RewriteRule ^ http://www.%{HTTP_HOST}%{REQUEST_URI} [R=301,L] +# + + +# ############################################################################## +# # SECURITY # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Content Security Policy (CSP) | +# ------------------------------------------------------------------------------ + +# You can mitigate the risk of cross-site scripting and other content-injection +# attacks by setting a Content Security Policy which whitelists trusted sources +# of content for your site. + +# The example header below allows ONLY scripts that are loaded from the current +# site's origin (no inline scripts, no CDN, etc). This almost certainly won't +# work as-is for your site! + +# To get all the details you'll need to craft a reasonable policy for your site, +# read: http://html5rocks.com/en/tutorials/security/content-security-policy (or +# see the specification: http://w3.org/TR/CSP). + +# +# Header set Content-Security-Policy "script-src 'self'; object-src 'self'" +# +# Header unset Content-Security-Policy +# +# + +# ------------------------------------------------------------------------------ +# | File access | +# ------------------------------------------------------------------------------ + +# Block access to directories without a default document. +# Usually you should leave this uncommented because you shouldn't allow anyone +# to surf through every directory on your server (which may includes rather +# private places like the CMS's directories). + + + Options -Indexes + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Block access to hidden files and directories. +# This includes directories used by version control systems such as Git and SVN. + + + RewriteCond %{SCRIPT_FILENAME} -d [OR] + RewriteCond %{SCRIPT_FILENAME} -f + RewriteRule "(^|/)\." - [F] + + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Block access to backup and source files. +# These files may be left by some text editors and can pose a great security +# danger when anyone has access to them. + + + Order allow,deny + Deny from all + Satisfy All + + +# ------------------------------------------------------------------------------ +# | Secure Sockets Layer (SSL) | +# ------------------------------------------------------------------------------ + +# Rewrite secure requests properly to prevent SSL certificate warnings, e.g.: +# prevent `https://www.example.com` when your certificate only allows +# `https://secure.example.com`. + +# +# RewriteCond %{SERVER_PORT} !^443 +# RewriteRule ^ https://example-domain-please-change-me.com%{REQUEST_URI} [R=301,L] +# + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +# Force client-side SSL redirection. + +# If a user types "example.com" in his browser, the above rule will redirect him +# to the secure version of the site. That still leaves a window of opportunity +# (the initial HTTP connection) for an attacker to downgrade or redirect the +# request. The following header ensures that browser will ONLY connect to your +# server via HTTPS, regardless of what the users type in the address bar. +# http://www.html5rocks.com/en/tutorials/security/transport-layer-security/ + +# +# Header set Strict-Transport-Security max-age=16070400; +# + +# ------------------------------------------------------------------------------ +# | Server software information | +# ------------------------------------------------------------------------------ + +# Avoid displaying the exact Apache version number, the description of the +# generic OS-type and the information about Apache's compiled-in modules. + +# ADD THIS DIRECTIVE IN THE `httpd.conf` AS IT WILL NOT WORK IN THE `.htaccess`! + +# ServerTokens Prod + + +# ############################################################################## +# # WEB PERFORMANCE # +# ############################################################################## + +# ------------------------------------------------------------------------------ +# | Compression | +# ------------------------------------------------------------------------------ + + + + # Force compression for mangled headers. + # http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping + + + SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$ ^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding + RequestHeader append Accept-Encoding "gzip,deflate" env=HAVE_Accept-Encoding + + + + # Compress all output labeled with one of the following MIME-types + # (for Apache versions below 2.3.7, you don't need to enable `mod_filter` + # and can remove the `` and `` lines + # as `AddOutputFilterByType` is still in the core directives). + + AddOutputFilterByType DEFLATE application/atom+xml \ + application/javascript \ + application/json \ + application/rss+xml \ + application/vnd.ms-fontobject \ + application/x-font-ttf \ + application/x-web-app-manifest+json \ + application/xhtml+xml \ + application/xml \ + font/opentype \ + image/svg+xml \ + image/x-icon \ + text/css \ + text/html \ + text/plain \ + text/x-component \ + text/xml + + + + +# ------------------------------------------------------------------------------ +# | Content transformations | +# ------------------------------------------------------------------------------ + +# Prevent some of the mobile network providers from modifying the content of +# your site: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.5. + +# +# Header set Cache-Control "no-transform" +# + +# ------------------------------------------------------------------------------ +# | ETag removal | +# ------------------------------------------------------------------------------ + +# Since we're sending far-future expires headers (see below), ETags can +# be removed: http://developer.yahoo.com/performance/rules.html#etags. + +# `FileETag None` is not enough for every server. + + Header unset ETag + + +FileETag None + +# ------------------------------------------------------------------------------ +# | Expires headers (for better cache control) | +# ------------------------------------------------------------------------------ + +# The following expires headers are set pretty far in the future. If you don't +# control versioning with filename-based cache busting, consider lowering the +# cache time for resources like CSS and JS to something like 1 week. + + + + ExpiresActive on + ExpiresDefault "access plus 1 month" + + # CSS + ExpiresByType text/css "access plus 1 year" + + # Data interchange + ExpiresByType application/json "access plus 0 seconds" + ExpiresByType application/xml "access plus 0 seconds" + ExpiresByType text/xml "access plus 0 seconds" + + # Favicon (cannot be renamed!) + ExpiresByType image/x-icon "access plus 1 week" + + # HTML components (HTCs) + ExpiresByType text/x-component "access plus 1 month" + + # HTML + ExpiresByType text/html "access plus 0 seconds" + + # JavaScript + ExpiresByType application/javascript "access plus 1 year" + + # Manifest files + ExpiresByType application/x-web-app-manifest+json "access plus 0 seconds" + ExpiresByType text/cache-manifest "access plus 0 seconds" + + # Media + ExpiresByType audio/ogg "access plus 1 month" + ExpiresByType image/gif "access plus 1 month" + ExpiresByType image/jpeg "access plus 1 month" + ExpiresByType image/png "access plus 1 month" + ExpiresByType video/mp4 "access plus 1 month" + ExpiresByType video/ogg "access plus 1 month" + ExpiresByType video/webm "access plus 1 month" + + # Web feeds + ExpiresByType application/atom+xml "access plus 1 hour" + ExpiresByType application/rss+xml "access plus 1 hour" + + # Web fonts + ExpiresByType application/font-woff "access plus 1 month" + ExpiresByType application/vnd.ms-fontobject "access plus 1 month" + ExpiresByType application/x-font-ttf "access plus 1 month" + ExpiresByType font/opentype "access plus 1 month" + ExpiresByType image/svg+xml "access plus 1 month" + + + +# ------------------------------------------------------------------------------ +# | Filename-based cache busting | +# ------------------------------------------------------------------------------ + +# If you're not using a build process to manage your filename version revving, +# you might want to consider enabling the following directives to route all +# requests such as `/css/style.12345.css` to `/css/style.css`. + +# To understand why this is important and a better idea than `*.css?v231`, read: +# http://stevesouders.com/blog/2008/08/23/revving-filenames-dont-use-querystring + +# +# RewriteCond %{REQUEST_FILENAME} !-f +# RewriteCond %{REQUEST_FILENAME} !-d +# RewriteRule ^(.+)\.(\d+)\.(js|css|png|jpg|gif)$ $1.$3 [L] +# + +# ------------------------------------------------------------------------------ +# | File concatenation | +# ------------------------------------------------------------------------------ + +# Allow concatenation from within specific CSS and JS files, e.g.: +# Inside of `script.combined.js` you could have +# +# +# and they would be included into this single file. + +# +# +# Options +Includes +# AddOutputFilterByType INCLUDES application/javascript application/json +# SetOutputFilter INCLUDES +# +# +# Options +Includes +# AddOutputFilterByType INCLUDES text/css +# SetOutputFilter INCLUDES +# +# + +# ------------------------------------------------------------------------------ +# | Persistent connections | +# ------------------------------------------------------------------------------ + +# Allow multiple requests to be sent over the same TCP connection: +# http://httpd.apache.org/docs/current/en/mod/core.html#keepalive. + +# Enable if you serve a lot of static content but, be aware of the +# possible disadvantages! + +# +# Header set Connection Keep-Alive +# diff --git a/app/404.html b/app/404.html new file mode 100644 index 0000000..ec98e3c --- /dev/null +++ b/app/404.html @@ -0,0 +1,157 @@ + + + + + Page Not Found :( + + + +
+

Not found :(

+

Sorry, but the page you were trying to view does not exist.

+

It looks like this was the result of either:

+ + + +
+ + diff --git a/app/favicon.ico b/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..6527905307f19ba00762f9241f7eb535fa84a2f9 GIT binary patch literal 4286 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 literal 0 HcmV?d00001 diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..07b5d4e --- /dev/null +++ b/app/index.html @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + diff --git a/app/robots.txt b/app/robots.txt new file mode 100644 index 0000000..9417495 --- /dev/null +++ b/app/robots.txt @@ -0,0 +1,3 @@ +# robotstxt.org + +User-agent: * diff --git a/app/scripts/app.js b/app/scripts/app.js new file mode 100644 index 0000000..6cf637d --- /dev/null +++ b/app/scripts/app.js @@ -0,0 +1,16 @@ +'use strict'; + +angular.module('angularPromisesApp', [ + 'ngResource', + 'ngRoute' +]) + .config(function ($routeProvider) { + $routeProvider + .when('/', { + templateUrl: 'views/main.html', + controller: 'MainCtrl' + }) + .otherwise({ + redirectTo: '/' + }); + }); diff --git a/app/scripts/controllers/main.js b/app/scripts/controllers/main.js new file mode 100644 index 0000000..7467d3a --- /dev/null +++ b/app/scripts/controllers/main.js @@ -0,0 +1,10 @@ +'use strict'; + +angular.module('angularPromisesApp') + .controller('MainCtrl', function ($scope) { + $scope.awesomeThings = [ + 'HTML5 Boilerplate', + 'AngularJS', + 'Karma' + ]; + }); diff --git a/app/styles/main.css b/app/styles/main.css new file mode 100644 index 0000000..ae7a83f --- /dev/null +++ b/app/styles/main.css @@ -0,0 +1,79 @@ +/* Space out content a bit */ +body { + padding-top: 20px; + padding-bottom: 20px; +} + +/* Everything but the jumbotron gets side spacing for mobile first views */ +.header, +.marketing, +.footer { + padding-left: 15px; + padding-right: 15px; +} + +/* Custom page header */ +.header { + border-bottom: 1px solid #e5e5e5; +} +/* Make the masthead heading the same height as the navigation */ +.header h3 { + margin-top: 0; + margin-bottom: 0; + line-height: 40px; + padding-bottom: 19px; +} + +/* Custom page footer */ +.footer { + padding-top: 19px; + color: #777; + border-top: 1px solid #e5e5e5; +} + +/* Customize container */ +@media (min-width: 768px) { + .container { + max-width: 730px; + } +} +.container-narrow > hr { + margin: 30px 0; +} + +/* Main marketing message and sign up button */ +.jumbotron { + text-align: center; + border-bottom: 1px solid #e5e5e5; +} +.jumbotron .btn { + font-size: 21px; + padding: 14px 24px; +} + +/* Supporting marketing content */ +.marketing { + margin: 40px 0; +} +.marketing p + h4 { + margin-top: 28px; +} + +/* Responsive: Portrait tablets and up */ +@media screen and (min-width: 768px) { + /* Remove the padding we set earlier */ + .header, + .marketing, + .footer { + padding-left: 0; + padding-right: 0; + } + /* Space out the masthead */ + .header { + margin-bottom: 30px; + } + /* Remove the bottom border on the jumbotron for visual effect */ + .jumbotron { + border-bottom: 0; + } +} diff --git a/app/views/main.html b/app/views/main.html new file mode 100644 index 0000000..398e26b --- /dev/null +++ b/app/views/main.html @@ -0,0 +1,36 @@ +
+ +

angular promises

+
+ +
+

'Allo, 'Allo!

+

+ I'm Yeoman
+ Always a pleasure scaffolding your apps. +

+

Splendid!

+
+ +
+

HTML5 Boilerplate

+

+ HTML5 Boilerplate is a professional front-end template for building fast, robust, and adaptable web apps or sites. +

+ +

Angular

+

+ AngularJS is a toolset for building the framework most suited to your application development. +

+ +

Karma

+

Spectacular Test Runner for JavaScript.

+
+ + diff --git a/bower.json b/bower.json new file mode 100644 index 0000000..3854ee2 --- /dev/null +++ b/bower.json @@ -0,0 +1,15 @@ +{ + "name": "angular-promises", + "version": "0.0.0", + "dependencies": { + "angular": "~1.2.0", + "json3": "~3.2.4", + "es5-shim": "~2.1.0", + "angular-resource": "~1.2.0", + "angular-route": "~1.2.0" + }, + "devDependencies": { + "angular-mocks": "~1.2.0", + "angular-scenario": "~1.2.0" + } +} diff --git a/karma-e2e.conf.js b/karma-e2e.conf.js new file mode 100644 index 0000000..fa01484 --- /dev/null +++ b/karma-e2e.conf.js @@ -0,0 +1,54 @@ +// Karma configuration +// http://karma-runner.github.io/0.10/config/configuration-file.html + +module.exports = function(config) { + config.set({ + // base path, that will be used to resolve files and exclude + basePath: '', + + // testing framework to use (jasmine/mocha/qunit/...) + frameworks: ['ng-scenario'], + + // list of files / patterns to load in the browser + files: [ + 'test/e2e/**/*.js' + ], + + // list of files / patterns to exclude + exclude: [], + + // web server port + port: 8080, + + // level of logging + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + + // Start these browsers, currently available: + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera + // - Safari (only Mac) + // - PhantomJS + // - IE (only Windows) + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: false + + // Uncomment the following lines if you are using grunt's server to run the tests + // proxies: { + // '/': 'http://localhost:9000/' + // }, + // URL root prevent conflicts with the site root + // urlRoot: '_karma_' + }); +}; diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..23fbd06 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,54 @@ +// Karma configuration +// http://karma-runner.github.io/0.10/config/configuration-file.html + +module.exports = function(config) { + config.set({ + // base path, that will be used to resolve files and exclude + basePath: '', + + // testing framework to use (jasmine/mocha/qunit/...) + frameworks: ['jasmine'], + + // list of files / patterns to load in the browser + files: [ + 'app/bower_components/angular/angular.js', + 'app/bower_components/angular-mocks/angular-mocks.js', + 'app/bower_components/angular-resource/angular-resource.js', + 'app/bower_components/angular-route/angular-route.js', + 'app/scripts/*.js', + 'app/scripts/**/*.js', + 'test/mock/**/*.js', + 'test/spec/**/*.js' + ], + + // list of files / patterns to exclude + exclude: [], + + // web server port + port: 8080, + + // level of logging + // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG + logLevel: config.LOG_INFO, + + + // enable / disable watching file and executing tests whenever any file changes + autoWatch: false, + + + // Start these browsers, currently available: + // - Chrome + // - ChromeCanary + // - Firefox + // - Opera + // - Safari (only Mac) + // - PhantomJS + // - IE (only Windows) + browsers: ['Chrome'], + + + // Continuous Integration mode + // if true, it capture browsers, run tests and exit + singleRun: false + }); +}; diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 0000000..bdde6fe --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,19515 @@ +4002 silly lockFile 54de923f-pike-npm-chalk-0-2-1-package-tgz tar:///home/spike/.npm/chalk/0.2.1/package.tgz +4003 silly lockFile 54de923f-pike-npm-chalk-0-2-1-package-tgz tar:///home/spike/.npm/chalk/0.2.1/package.tgz +4004 silly gunzTarPerm extractEntry readme.markdown +4005 silly gunzTarPerm extractEntry test/align.js +4006 silly gunzTarPerm extractEntry test/ansi-colors.js +4007 silly gunzTarPerm extractEntry test/center.js +4008 silly gunzTarPerm extractEntry test/dotalign.js +4009 silly gunzTarPerm extractEntry test/doubledot.js +4010 silly gunzTarPerm extractEntry test/table.js +4011 info preinstall chalk@0.2.1 +4012 verbose readDependencies using package.json deps +4013 verbose readDependencies using package.json deps +4014 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/48/7a6ae84da8e4a1ee95cf59c7df8ea436fabf4c +4015 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/4e/576c52cb630491ebcf62a77f5e81077c3be57e +4016 verbose cache add [ 'has-color@~0.1.0', null ] +4017 verbose cache add name=undefined spec="has-color@~0.1.0" args=["has-color@~0.1.0",null] +4018 verbose parsed url { protocol: null, +4018 verbose parsed url slashes: null, +4018 verbose parsed url auth: null, +4018 verbose parsed url host: null, +4018 verbose parsed url port: null, +4018 verbose parsed url hostname: null, +4018 verbose parsed url hash: null, +4018 verbose parsed url search: null, +4018 verbose parsed url query: null, +4018 verbose parsed url pathname: 'has-color@~0.1.0', +4018 verbose parsed url path: 'has-color@~0.1.0', +4018 verbose parsed url href: 'has-color@~0.1.0' } +4019 verbose cache add name="has-color" spec="~0.1.0" args=["has-color","~0.1.0"] +4020 verbose parsed url { protocol: null, +4020 verbose parsed url slashes: null, +4020 verbose parsed url auth: null, +4020 verbose parsed url host: null, +4020 verbose parsed url port: null, +4020 verbose parsed url hostname: null, +4020 verbose parsed url hash: null, +4020 verbose parsed url search: null, +4020 verbose parsed url query: null, +4020 verbose parsed url pathname: '~0.1.0', +4020 verbose parsed url path: '~0.1.0', +4020 verbose parsed url href: '~0.1.0' } +4021 verbose addNamed [ 'has-color', '~0.1.0' ] +4022 verbose addNamed [ null, '>=0.1.0-0 <0.2.0-0' ] +4023 silly lockFile c89da621-has-color-0-1-0 has-color@~0.1.0 +4024 verbose lock has-color@~0.1.0 /home/spike/.npm/c89da621-has-color-0-1-0.lock +4025 verbose cache add [ 'ansi-styles@~0.2.0', null ] +4026 verbose cache add name=undefined spec="ansi-styles@~0.2.0" args=["ansi-styles@~0.2.0",null] +4027 verbose parsed url { protocol: null, +4027 verbose parsed url slashes: null, +4027 verbose parsed url auth: null, +4027 verbose parsed url host: null, +4027 verbose parsed url port: null, +4027 verbose parsed url hostname: null, +4027 verbose parsed url hash: null, +4027 verbose parsed url search: null, +4027 verbose parsed url query: null, +4027 verbose parsed url pathname: 'ansi-styles@~0.2.0', +4027 verbose parsed url path: 'ansi-styles@~0.2.0', +4027 verbose parsed url href: 'ansi-styles@~0.2.0' } +4028 verbose cache add name="ansi-styles" spec="~0.2.0" args=["ansi-styles","~0.2.0"] +4029 verbose parsed url { protocol: null, +4029 verbose parsed url slashes: null, +4029 verbose parsed url auth: null, +4029 verbose parsed url host: null, +4029 verbose parsed url port: null, +4029 verbose parsed url hostname: null, +4029 verbose parsed url hash: null, +4029 verbose parsed url search: null, +4029 verbose parsed url query: null, +4029 verbose parsed url pathname: '~0.2.0', +4029 verbose parsed url path: '~0.2.0', +4029 verbose parsed url href: '~0.2.0' } +4030 verbose addNamed [ 'ansi-styles', '~0.2.0' ] +4031 verbose addNamed [ null, '>=0.2.0-0 <0.3.0-0' ] +4032 silly lockFile 847f9987-ansi-styles-0-2-0 ansi-styles@~0.2.0 +4033 verbose lock ansi-styles@~0.2.0 /home/spike/.npm/847f9987-ansi-styles-0-2-0.lock +4034 silly addNameRange { name: 'has-color', +4034 silly addNameRange range: '>=0.1.0-0 <0.2.0-0', +4034 silly addNameRange hasData: false } +4035 silly addNameRange { name: 'ansi-styles', +4035 silly addNameRange range: '>=0.2.0-0 <0.3.0-0', +4035 silly addNameRange hasData: false } +4036 verbose url raw has-color +4037 verbose url resolving [ 'https://registry.npmjs.org/', './has-color' ] +4038 verbose url resolved https://registry.npmjs.org/has-color +4039 info trying registry request attempt 1 at 11:44:30 +4040 verbose etag "72ZL2WOI1PC39PN3SGW6SDCN6" +4041 http GET https://registry.npmjs.org/has-color +4042 verbose url raw ansi-styles +4043 verbose url resolving [ 'https://registry.npmjs.org/', './ansi-styles' ] +4044 verbose url resolved https://registry.npmjs.org/ansi-styles +4045 info trying registry request attempt 1 at 11:44:30 +4046 verbose etag "AEOYK2JSRTD248WNH6VPFMJXF" +4047 http GET https://registry.npmjs.org/ansi-styles +4048 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/52/8f8e1553e2b03aee7ab6eb9216b3ed89061784 +4049 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/68/9c63b3432aaece15106f8b2162619f982ec370 +4050 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/69/bc69fdce113f9c1566aec1392bcc79d10d454b +4051 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/6c/1354ad5764e71a3bf30650013f0f0e9a897450 +4052 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/75/7a3f84cfbf1fc94ce0c67d2f016690eb495bb5 +4053 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/7a/0419da6bb16bbccf5e07f9bcd1754108ed9d1a +4054 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/80/95211f85d5038d6f2ee248a134cf7e7d28e123 +4055 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/83/0e1eb1a47c76ecfd3c1df4ab1485dc8188cf3c +4056 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/88/259581b83fd9081b94deebf2a7632590f09f83 +4057 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/8c/ffccc175240ac0346bd2171a0d25d7c6a88c5f +4058 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/0d/af124cc7163788c501f382461e45bd1de8e7ab +4059 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/90/ed234fb0708235a733bcae0e5b90bd4fac5321 +4060 silly lockFile b8b93663--stylish-node-modules-text-table tar:///home/spike/projects/meetups/angular-promises/node_modules/jshint-stylish/node_modules/text-table +4061 silly lockFile b8b93663--stylish-node-modules-text-table tar:///home/spike/projects/meetups/angular-promises/node_modules/jshint-stylish/node_modules/text-table +4062 silly lockFile 220a4922-npm-text-table-0-2-0-package-tgz tar:///home/spike/.npm/text-table/0.2.0/package.tgz +4063 silly lockFile 220a4922-npm-text-table-0-2-0-package-tgz tar:///home/spike/.npm/text-table/0.2.0/package.tgz +4064 info preinstall text-table@0.2.0 +4065 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/92/afeeb69adc7fd744bb4d6556dc3d7204cb71fa +4066 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/97/17b8c32f1c6acfbe3db68df8856a6630e4772d +4067 verbose readDependencies using package.json deps +4068 verbose readDependencies using package.json deps +4069 silly resolved [] +4070 verbose about to build /home/spike/projects/meetups/angular-promises/node_modules/jshint-stylish/node_modules/text-table +4071 info build /home/spike/projects/meetups/angular-promises/node_modules/jshint-stylish/node_modules/text-table +4072 verbose linkStuff [ false, +4072 verbose linkStuff false, +4072 verbose linkStuff false, +4072 verbose linkStuff '/home/spike/projects/meetups/angular-promises/node_modules/jshint-stylish/node_modules' ] +4073 info linkStuff text-table@0.2.0 +4074 verbose linkBins text-table@0.2.0 +4075 verbose linkMans text-table@0.2.0 +4076 verbose rebuildBundles text-table@0.2.0 +4077 info install text-table@0.2.0 +4078 info postinstall text-table@0.2.0 +4079 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/9c/7fa0117320c0c8b3f7d760143bad93c6e34b9d +4080 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/9e/1ea691c15d1fcbd4df08a43381e52c6b4b8f83 +4081 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/a2/1a15efe0034e57f1455f55ca1cd7805e25adfd +4082 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/aa/77627e06564ada85565b7fee02d9c28047f35a +4083 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/bb/01907369ff7accc18d6ec5b17d231f4217ac2d +4084 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/be/9b0e2ca43b223ab14df61b868e95cb412c6faa +4085 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/bf/7794b69000bbaa6598c3f67cc70c6a51d6ca3d +4086 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/ca/dd0beb4df19711eb9ce432608504cc21beebf3 +4087 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/d3/e127498b258d1827d03aa8980fc8db868352ad +4088 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/d7/bb417d109af63c5bcbd7f7484ddfa66f38af13 +4089 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/ec/b67101368c505a6c23f1a1966d13c6aa66483f +4090 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/ee/947ec6a8a56f6c57d3fb48d10f8c104c66f4ce +4091 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/f2/4e11fa324ac703273a03f54c3d60d840e69e24 +4092 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/f9/260e4e30eb5e9f7d08751c6348e90b505f8af0 +4093 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/f9/3f2fb92626ffd5bb9a17b5e2b2642f2c70c014 +4094 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/fb/18250b19f479c46a49a393a8f8f932ed083b55 +4095 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/pack/pack-af6aba8bdcf0fc9c7b4a690e6e2976ed7bbb8521.idx +4096 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/objects/pack/pack-af6aba8bdcf0fc9c7b4a690e6e2976ed7bbb8521.pack +4097 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/packed-refs +4098 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/refs/heads/master +4099 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/refs/remotes/origin/HEAD +4100 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/refs/remotes/origin/master +4101 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/refs/tags/0.0.1 +4102 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/refs/tags/0.0.2 +4103 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/tortoisegit.data +4104 silly gunzTarPerm extractEntry test/assets/package-repo/git_repo/tortoisegit.index +4105 silly gunzTarPerm extractEntry test/assets/package-repo/test/file_reader.html +4106 silly gunzTarPerm extractEntry test/assets/package-repo/test/index.html +4107 silly gunzTarPerm extractEntry test/assets/package-zip-folder.zip +4108 silly gunzTarPerm extractEntry test/assets/package-zip.zip +4109 silly gunzTarPerm extractEntry test/assets/project/.npmignore +4110 silly gunzTarPerm extractEntry test/assets/project/bower.json +4111 silly gunzTarPerm extractEntry test/assets/project-complex-nest/bower.json +4112 silly gunzTarPerm extractEntry test/assets/project-dev-deps/bower.json +4113 silly gunzTarPerm extractEntry test/assets/project-nested/bower.json +4114 silly gunzTarPerm extractEntry test/assets/project-nested-conflict/bower.json +4115 silly gunzTarPerm extractEntry test/assets/project-new-deps/.npmignore +4116 silly gunzTarPerm extractEntry test/assets/project-new-deps/bower.json +4117 silly gunzTarPerm extractEntry test/assets/project-nonstandard-json/foocomponent.json +4118 silly gunzTarPerm extractEntry test/assets/project-old/component.json +4119 silly gunzTarPerm extractEntry test/assets/project-static/bower.json +4120 silly gunzTarPerm extractEntry test/assets/sprockets/.npmignore +4121 silly gunzTarPerm extractEntry test/assets/sprockets/Rakefile +4122 silly gunzTarPerm extractEntry test/assets/sprockets/assets/application.js +4123 silly gunzTarPerm extractEntry test/assets/sprockets/bower.json +4124 silly lockFile 4e30e0d0-nt-google-cdn-node-modules-bower tar:///home/spike/projects/meetups/angular-promises/node_modules/grunt-google-cdn/node_modules/bower +4125 silly lockFile 4e30e0d0-nt-google-cdn-node-modules-bower tar:///home/spike/projects/meetups/angular-promises/node_modules/grunt-google-cdn/node_modules/bower +4126 silly lockFile 1b2e6ea5-pike-npm-bower-0-9-2-package-tgz tar:///home/spike/.npm/bower/0.9.2/package.tgz +4127 silly lockFile 1b2e6ea5-pike-npm-bower-0-9-2-package-tgz tar:///home/spike/.npm/bower/0.9.2/package.tgz +4128 info preinstall bower@0.9.2 +4129 verbose readDependencies using package.json deps +4130 verbose readDependencies using package.json deps +4131 verbose cache add [ 'abbrev@~1.0.4', null ] +4132 verbose cache add name=undefined spec="abbrev@~1.0.4" args=["abbrev@~1.0.4",null] +4133 verbose parsed url { protocol: null, +4133 verbose parsed url slashes: null, +4133 verbose parsed url auth: null, +4133 verbose parsed url host: null, +4133 verbose parsed url port: null, +4133 verbose parsed url hostname: null, +4133 verbose parsed url hash: null, +4133 verbose parsed url search: null, +4133 verbose parsed url query: null, +4133 verbose parsed url pathname: 'abbrev@~1.0.4', +4133 verbose parsed url path: 'abbrev@~1.0.4', +4133 verbose parsed url href: 'abbrev@~1.0.4' } +4134 verbose cache add name="abbrev" spec="~1.0.4" args=["abbrev","~1.0.4"] +4135 verbose parsed url { protocol: null, +4135 verbose parsed url slashes: null, +4135 verbose parsed url auth: null, +4135 verbose parsed url host: null, +4135 verbose parsed url port: null, +4135 verbose parsed url hostname: null, +4135 verbose parsed url hash: null, +4135 verbose parsed url search: null, +4135 verbose parsed url query: null, +4135 verbose parsed url pathname: '~1.0.4', +4135 verbose parsed url path: '~1.0.4', +4135 verbose parsed url href: '~1.0.4' } +4136 verbose addNamed [ 'abbrev', '~1.0.4' ] +4137 verbose addNamed [ null, '>=1.0.4-0 <1.1.0-0' ] +4138 silly lockFile efa0e9e0-abbrev-1-0-4 abbrev@~1.0.4 +4139 verbose lock abbrev@~1.0.4 /home/spike/.npm/efa0e9e0-abbrev-1-0-4.lock +4140 verbose cache add [ 'archy@~0.0.2', null ] +4141 verbose cache add name=undefined spec="archy@~0.0.2" args=["archy@~0.0.2",null] +4142 verbose parsed url { protocol: null, +4142 verbose parsed url slashes: null, +4142 verbose parsed url auth: null, +4142 verbose parsed url host: null, +4142 verbose parsed url port: null, +4142 verbose parsed url hostname: null, +4142 verbose parsed url hash: null, +4142 verbose parsed url search: null, +4142 verbose parsed url query: null, +4142 verbose parsed url pathname: 'archy@~0.0.2', +4142 verbose parsed url path: 'archy@~0.0.2', +4142 verbose parsed url href: 'archy@~0.0.2' } +4143 verbose cache add name="archy" spec="~0.0.2" args=["archy","~0.0.2"] +4144 verbose parsed url { protocol: null, +4144 verbose parsed url slashes: null, +4144 verbose parsed url auth: null, +4144 verbose parsed url host: null, +4144 verbose parsed url port: null, +4144 verbose parsed url hostname: null, +4144 verbose parsed url hash: null, +4144 verbose parsed url search: null, +4144 verbose parsed url query: null, +4144 verbose parsed url pathname: '~0.0.2', +4144 verbose parsed url path: '~0.0.2', +4144 verbose parsed url href: '~0.0.2' } +4145 verbose addNamed [ 'archy', '~0.0.2' ] +4146 verbose addNamed [ null, '>=0.0.2-0 <0.1.0-0' ] +4147 silly lockFile 835d25e0-archy-0-0-2 archy@~0.0.2 +4148 verbose lock archy@~0.0.2 /home/spike/.npm/835d25e0-archy-0-0-2.lock +4149 verbose cache add [ 'async@~0.2.5', null ] +4150 verbose cache add name=undefined spec="async@~0.2.5" args=["async@~0.2.5",null] +4151 verbose parsed url { protocol: null, +4151 verbose parsed url slashes: null, +4151 verbose parsed url auth: null, +4151 verbose parsed url host: null, +4151 verbose parsed url port: null, +4151 verbose parsed url hostname: null, +4151 verbose parsed url hash: null, +4151 verbose parsed url search: null, +4151 verbose parsed url query: null, +4151 verbose parsed url pathname: 'async@~0.2.5', +4151 verbose parsed url path: 'async@~0.2.5', +4151 verbose parsed url href: 'async@~0.2.5' } +4152 verbose cache add name="async" spec="~0.2.5" args=["async","~0.2.5"] +4153 verbose parsed url { protocol: null, +4153 verbose parsed url slashes: null, +4153 verbose parsed url auth: null, +4153 verbose parsed url host: null, +4153 verbose parsed url port: null, +4153 verbose parsed url hostname: null, +4153 verbose parsed url hash: null, +4153 verbose parsed url search: null, +4153 verbose parsed url query: null, +4153 verbose parsed url pathname: '~0.2.5', +4153 verbose parsed url path: '~0.2.5', +4153 verbose parsed url href: '~0.2.5' } +4154 verbose addNamed [ 'async', '~0.2.5' ] +4155 verbose addNamed [ null, '>=0.2.5-0 <0.3.0-0' ] +4156 silly lockFile cf5596a4-async-0-2-5 async@~0.2.5 +4157 verbose lock async@~0.2.5 /home/spike/.npm/cf5596a4-async-0-2-5.lock +4158 silly addNameRange { name: 'abbrev', range: '>=1.0.4-0 <1.1.0-0', hasData: false } +4159 silly addNameRange { name: 'archy', range: '>=0.0.2-0 <0.1.0-0', hasData: false } +4160 silly addNameRange { name: 'async', range: '>=0.2.5-0 <0.3.0-0', hasData: false } +4161 verbose url raw abbrev +4162 verbose url resolving [ 'https://registry.npmjs.org/', './abbrev' ] +4163 verbose url resolved https://registry.npmjs.org/abbrev +4164 info trying registry request attempt 1 at 11:44:30 +4165 verbose etag "1A2R6SP5BL9S0252UX3EHXNP4" +4166 http GET https://registry.npmjs.org/abbrev +4167 verbose cache add [ 'fstream@~0.1.19', null ] +4168 verbose cache add name=undefined spec="fstream@~0.1.19" args=["fstream@~0.1.19",null] +4169 verbose parsed url { protocol: null, +4169 verbose parsed url slashes: null, +4169 verbose parsed url auth: null, +4169 verbose parsed url host: null, +4169 verbose parsed url port: null, +4169 verbose parsed url hostname: null, +4169 verbose parsed url hash: null, +4169 verbose parsed url search: null, +4169 verbose parsed url query: null, +4169 verbose parsed url pathname: 'fstream@~0.1.19', +4169 verbose parsed url path: 'fstream@~0.1.19', +4169 verbose parsed url href: 'fstream@~0.1.19' } +4170 verbose cache add name="fstream" spec="~0.1.19" args=["fstream","~0.1.19"] +4171 verbose parsed url { protocol: null, +4171 verbose parsed url slashes: null, +4171 verbose parsed url auth: null, +4171 verbose parsed url host: null, +4171 verbose parsed url port: null, +4171 verbose parsed url hostname: null, +4171 verbose parsed url hash: null, +4171 verbose parsed url search: null, +4171 verbose parsed url query: null, +4171 verbose parsed url pathname: '~0.1.19', +4171 verbose parsed url path: '~0.1.19', +4171 verbose parsed url href: '~0.1.19' } +4172 verbose addNamed [ 'fstream', '~0.1.19' ] +4173 verbose addNamed [ null, '>=0.1.19-0 <0.2.0-0' ] +4174 silly lockFile 41db2e12-fstream-0-1-19 fstream@~0.1.19 +4175 verbose lock fstream@~0.1.19 /home/spike/.npm/41db2e12-fstream-0-1-19.lock +4176 verbose cache add [ 'colors@~0.6.0-1', null ] +4177 verbose cache add name=undefined spec="colors@~0.6.0-1" args=["colors@~0.6.0-1",null] +4178 verbose parsed url { protocol: null, +4178 verbose parsed url slashes: null, +4178 verbose parsed url auth: null, +4178 verbose parsed url host: null, +4178 verbose parsed url port: null, +4178 verbose parsed url hostname: null, +4178 verbose parsed url hash: null, +4178 verbose parsed url search: null, +4178 verbose parsed url query: null, +4178 verbose parsed url pathname: 'colors@~0.6.0-1', +4178 verbose parsed url path: 'colors@~0.6.0-1', +4178 verbose parsed url href: 'colors@~0.6.0-1' } +4179 verbose cache add name="colors" spec="~0.6.0-1" args=["colors","~0.6.0-1"] +4180 verbose parsed url { protocol: null, +4180 verbose parsed url slashes: null, +4180 verbose parsed url auth: null, +4180 verbose parsed url host: null, +4180 verbose parsed url port: null, +4180 verbose parsed url hostname: null, +4180 verbose parsed url hash: null, +4180 verbose parsed url search: null, +4180 verbose parsed url query: null, +4180 verbose parsed url pathname: '~0.6.0-1', +4180 verbose parsed url path: '~0.6.0-1', +4180 verbose parsed url href: '~0.6.0-1' } +4181 verbose addNamed [ 'colors', '~0.6.0-1' ] +4182 verbose addNamed [ null, '>=0.6.0-1 <0.7.0-0' ] +4183 silly lockFile f29bff6b-colors-0-6-0-1 colors@~0.6.0-1 +4184 verbose lock colors@~0.6.0-1 /home/spike/.npm/f29bff6b-colors-0-6-0-1.lock +4185 verbose cache add [ 'glob@~3.1.14', null ] +4186 verbose cache add name=undefined spec="glob@~3.1.14" args=["glob@~3.1.14",null] +4187 verbose parsed url { protocol: null, +4187 verbose parsed url slashes: null, +4187 verbose parsed url auth: null, +4187 verbose parsed url host: null, +4187 verbose parsed url port: null, +4187 verbose parsed url hostname: null, +4187 verbose parsed url hash: null, +4187 verbose parsed url search: null, +4187 verbose parsed url query: null, +4187 verbose parsed url pathname: 'glob@~3.1.14', +4187 verbose parsed url path: 'glob@~3.1.14', +4187 verbose parsed url href: 'glob@~3.1.14' } +4188 verbose cache add name="glob" spec="~3.1.14" args=["glob","~3.1.14"] +4189 verbose parsed url { protocol: null, +4189 verbose parsed url slashes: null, +4189 verbose parsed url auth: null, +4189 verbose parsed url host: null, +4189 verbose parsed url port: null, +4189 verbose parsed url hostname: null, +4189 verbose parsed url hash: null, +4189 verbose parsed url search: null, +4189 verbose parsed url query: null, +4189 verbose parsed url pathname: '~3.1.14', +4189 verbose parsed url path: '~3.1.14', +4189 verbose parsed url href: '~3.1.14' } +4190 verbose addNamed [ 'glob', '~3.1.14' ] +4191 verbose addNamed [ null, '>=3.1.14-0 <3.2.0-0' ] +4192 silly lockFile 2d83dc71-glob-3-1-14 glob@~3.1.14 +4193 verbose lock glob@~3.1.14 /home/spike/.npm/2d83dc71-glob-3-1-14.lock +4194 verbose url raw async +4195 verbose url resolving [ 'https://registry.npmjs.org/', './async' ] +4196 verbose url resolved https://registry.npmjs.org/async +4197 info trying registry request attempt 1 at 11:44:30 +4198 verbose etag "6SZA38IP3YTXC2N3QXR6NZ7CH" +4199 http GET https://registry.npmjs.org/async +4200 silly addNameRange { name: 'fstream', range: '>=0.1.19-0 <0.2.0-0', hasData: false } +4201 verbose cache add [ 'hogan.js@~2.0.0', null ] +4202 verbose cache add name=undefined spec="hogan.js@~2.0.0" args=["hogan.js@~2.0.0",null] +4203 verbose parsed url { protocol: null, +4203 verbose parsed url slashes: null, +4203 verbose parsed url auth: null, +4203 verbose parsed url host: null, +4203 verbose parsed url port: null, +4203 verbose parsed url hostname: null, +4203 verbose parsed url hash: null, +4203 verbose parsed url search: null, +4203 verbose parsed url query: null, +4203 verbose parsed url pathname: 'hogan.js@~2.0.0', +4203 verbose parsed url path: 'hogan.js@~2.0.0', +4203 verbose parsed url href: 'hogan.js@~2.0.0' } +4204 verbose cache add name="hogan.js" spec="~2.0.0" args=["hogan.js","~2.0.0"] +4205 verbose parsed url { protocol: null, +4205 verbose parsed url slashes: null, +4205 verbose parsed url auth: null, +4205 verbose parsed url host: null, +4205 verbose parsed url port: null, +4205 verbose parsed url hostname: null, +4205 verbose parsed url hash: null, +4205 verbose parsed url search: null, +4205 verbose parsed url query: null, +4205 verbose parsed url pathname: '~2.0.0', +4205 verbose parsed url path: '~2.0.0', +4205 verbose parsed url href: '~2.0.0' } +4206 verbose addNamed [ 'hogan.js', '~2.0.0' ] +4207 verbose addNamed [ null, '>=2.0.0-0 <2.1.0-0' ] +4208 silly lockFile 09df9878-hogan-js-2-0-0 hogan.js@~2.0.0 +4209 verbose lock hogan.js@~2.0.0 /home/spike/.npm/09df9878-hogan-js-2-0-0.lock +4210 verbose cache add [ 'lodash@~1.0.1', null ] +4211 verbose cache add name=undefined spec="lodash@~1.0.1" args=["lodash@~1.0.1",null] +4212 verbose parsed url { protocol: null, +4212 verbose parsed url slashes: null, +4212 verbose parsed url auth: null, +4212 verbose parsed url host: null, +4212 verbose parsed url port: null, +4212 verbose parsed url hostname: null, +4212 verbose parsed url hash: null, +4212 verbose parsed url search: null, +4212 verbose parsed url query: null, +4212 verbose parsed url pathname: 'lodash@~1.0.1', +4212 verbose parsed url path: 'lodash@~1.0.1', +4212 verbose parsed url href: 'lodash@~1.0.1' } +4213 verbose cache add name="lodash" spec="~1.0.1" args=["lodash","~1.0.1"] +4214 verbose parsed url { protocol: null, +4214 verbose parsed url slashes: null, +4214 verbose parsed url auth: null, +4214 verbose parsed url host: null, +4214 verbose parsed url port: null, +4214 verbose parsed url hostname: null, +4214 verbose parsed url hash: null, +4214 verbose parsed url search: null, +4214 verbose parsed url query: null, +4214 verbose parsed url pathname: '~1.0.1', +4214 verbose parsed url path: '~1.0.1', +4214 verbose parsed url href: '~1.0.1' } +4215 verbose addNamed [ 'lodash', '~1.0.1' ] +4216 verbose cache add [ 'mkdirp@~0.3.4', null ] +4217 verbose cache add name=undefined spec="mkdirp@~0.3.4" args=["mkdirp@~0.3.4",null] +4218 verbose parsed url { protocol: null, +4218 verbose parsed url slashes: null, +4218 verbose parsed url auth: null, +4218 verbose parsed url host: null, +4218 verbose parsed url port: null, +4218 verbose parsed url hostname: null, +4218 verbose parsed url hash: null, +4218 verbose parsed url search: null, +4218 verbose parsed url query: null, +4218 verbose parsed url pathname: 'mkdirp@~0.3.4', +4218 verbose parsed url path: 'mkdirp@~0.3.4', +4218 verbose parsed url href: 'mkdirp@~0.3.4' } +4219 verbose cache add name="mkdirp" spec="~0.3.4" args=["mkdirp","~0.3.4"] +4220 verbose parsed url { protocol: null, +4220 verbose parsed url slashes: null, +4220 verbose parsed url auth: null, +4220 verbose parsed url host: null, +4220 verbose parsed url port: null, +4220 verbose parsed url hostname: null, +4220 verbose parsed url hash: null, +4220 verbose parsed url search: null, +4220 verbose parsed url query: null, +4220 verbose parsed url pathname: '~0.3.4', +4220 verbose parsed url path: '~0.3.4', +4220 verbose parsed url href: '~0.3.4' } +4221 verbose addNamed [ 'mkdirp', '~0.3.4' ] +4222 verbose addNamed [ null, '>=0.3.4-0 <0.4.0-0' ] +4223 silly lockFile f185e6bf-mkdirp-0-3-4 mkdirp@~0.3.4 +4224 verbose lock mkdirp@~0.3.4 /home/spike/.npm/f185e6bf-mkdirp-0-3-4.lock +4225 verbose cache add [ 'nopt@~2.0.0', null ] +4226 verbose cache add name=undefined spec="nopt@~2.0.0" args=["nopt@~2.0.0",null] +4227 verbose parsed url { protocol: null, +4227 verbose parsed url slashes: null, +4227 verbose parsed url auth: null, +4227 verbose parsed url host: null, +4227 verbose parsed url port: null, +4227 verbose parsed url hostname: null, +4227 verbose parsed url hash: null, +4227 verbose parsed url search: null, +4227 verbose parsed url query: null, +4227 verbose parsed url pathname: 'nopt@~2.0.0', +4227 verbose parsed url path: 'nopt@~2.0.0', +4227 verbose parsed url href: 'nopt@~2.0.0' } +4228 verbose cache add name="nopt" spec="~2.0.0" args=["nopt","~2.0.0"] +4229 verbose parsed url { protocol: null, +4229 verbose parsed url slashes: null, +4229 verbose parsed url auth: null, +4229 verbose parsed url host: null, +4229 verbose parsed url port: null, +4229 verbose parsed url hostname: null, +4229 verbose parsed url hash: null, +4229 verbose parsed url search: null, +4229 verbose parsed url query: null, +4229 verbose parsed url pathname: '~2.0.0', +4229 verbose parsed url path: '~2.0.0', +4229 verbose parsed url href: '~2.0.0' } +4230 verbose addNamed [ 'nopt', '~2.0.0' ] +4231 verbose addNamed [ null, '>=2.0.0-0 <2.1.0-0' ] +4232 silly lockFile 42399ddd-nopt-2-0-0 nopt@~2.0.0 +4233 verbose lock nopt@~2.0.0 /home/spike/.npm/42399ddd-nopt-2-0-0.lock +4234 verbose cache add [ 'promptly@~0.1.0', null ] +4235 verbose cache add name=undefined spec="promptly@~0.1.0" args=["promptly@~0.1.0",null] +4236 verbose parsed url { protocol: null, +4236 verbose parsed url slashes: null, +4236 verbose parsed url auth: null, +4236 verbose parsed url host: null, +4236 verbose parsed url port: null, +4236 verbose parsed url hostname: null, +4236 verbose parsed url hash: null, +4236 verbose parsed url search: null, +4236 verbose parsed url query: null, +4236 verbose parsed url pathname: 'promptly@~0.1.0', +4236 verbose parsed url path: 'promptly@~0.1.0', +4236 verbose parsed url href: 'promptly@~0.1.0' } +4237 verbose cache add name="promptly" spec="~0.1.0" args=["promptly","~0.1.0"] +4238 verbose parsed url { protocol: null, +4238 verbose parsed url slashes: null, +4238 verbose parsed url auth: null, +4238 verbose parsed url host: null, +4238 verbose parsed url port: null, +4238 verbose parsed url hostname: null, +4238 verbose parsed url hash: null, +4238 verbose parsed url search: null, +4238 verbose parsed url query: null, +4238 verbose parsed url pathname: '~0.1.0', +4238 verbose parsed url path: '~0.1.0', +4238 verbose parsed url href: '~0.1.0' } +4239 verbose addNamed [ 'promptly', '~0.1.0' ] +4240 verbose addNamed [ null, '>=0.1.0-0 <0.2.0-0' ] +4241 silly lockFile 00921d95-promptly-0-1-0 promptly@~0.1.0 +4242 verbose lock promptly@~0.1.0 /home/spike/.npm/00921d95-promptly-0-1-0.lock +4243 verbose cache add [ 'rc@~0.0.6', null ] +4244 verbose cache add name=undefined spec="rc@~0.0.6" args=["rc@~0.0.6",null] +4245 verbose parsed url { protocol: null, +4245 verbose parsed url slashes: null, +4245 verbose parsed url auth: null, +4245 verbose parsed url host: null, +4245 verbose parsed url port: null, +4245 verbose parsed url hostname: null, +4245 verbose parsed url hash: null, +4245 verbose parsed url search: null, +4245 verbose parsed url query: null, +4245 verbose parsed url pathname: 'rc@~0.0.6', +4245 verbose parsed url path: 'rc@~0.0.6', +4245 verbose parsed url href: 'rc@~0.0.6' } +4246 verbose cache add name="rc" spec="~0.0.6" args=["rc","~0.0.6"] +4247 verbose parsed url { protocol: null, +4247 verbose parsed url slashes: null, +4247 verbose parsed url auth: null, +4247 verbose parsed url host: null, +4247 verbose parsed url port: null, +4247 verbose parsed url hostname: null, +4247 verbose parsed url hash: null, +4247 verbose parsed url search: null, +4247 verbose parsed url query: null, +4247 verbose parsed url pathname: '~0.0.6', +4247 verbose parsed url path: '~0.0.6', +4247 verbose parsed url href: '~0.0.6' } +4248 verbose addNamed [ 'rc', '~0.0.6' ] +4249 verbose addNamed [ null, '>=0.0.6-0 <0.1.0-0' ] +4250 silly lockFile 35fe02d3-rc-0-0-6 rc@~0.0.6 +4251 verbose lock rc@~0.0.6 /home/spike/.npm/35fe02d3-rc-0-0-6.lock +4252 verbose cache add [ 'read-package-json@~0.1.8', null ] +4253 verbose cache add name=undefined spec="read-package-json@~0.1.8" args=["read-package-json@~0.1.8",null] +4254 verbose parsed url { protocol: null, +4254 verbose parsed url slashes: null, +4254 verbose parsed url auth: null, +4254 verbose parsed url host: null, +4254 verbose parsed url port: null, +4254 verbose parsed url hostname: null, +4254 verbose parsed url hash: null, +4254 verbose parsed url search: null, +4254 verbose parsed url query: null, +4254 verbose parsed url pathname: 'read-package-json@~0.1.8', +4254 verbose parsed url path: 'read-package-json@~0.1.8', +4254 verbose parsed url href: 'read-package-json@~0.1.8' } +4255 verbose cache add name="read-package-json" spec="~0.1.8" args=["read-package-json","~0.1.8"] +4256 verbose parsed url { protocol: null, +4256 verbose parsed url slashes: null, +4256 verbose parsed url auth: null, +4256 verbose parsed url host: null, +4256 verbose parsed url port: null, +4256 verbose parsed url hostname: null, +4256 verbose parsed url hash: null, +4256 verbose parsed url search: null, +4256 verbose parsed url query: null, +4256 verbose parsed url pathname: '~0.1.8', +4256 verbose parsed url path: '~0.1.8', +4256 verbose parsed url href: '~0.1.8' } +4257 verbose addNamed [ 'read-package-json', '~0.1.8' ] +4258 verbose addNamed [ null, '>=0.1.8-0 <0.2.0-0' ] +4259 silly lockFile b3dc094e-read-package-json-0-1-8 read-package-json@~0.1.8 +4260 verbose lock read-package-json@~0.1.8 /home/spike/.npm/b3dc094e-read-package-json-0-1-8.lock +4261 verbose cache add [ 'request@~2.11.4', null ] +4262 verbose cache add name=undefined spec="request@~2.11.4" args=["request@~2.11.4",null] +4263 verbose parsed url { protocol: null, +4263 verbose parsed url slashes: null, +4263 verbose parsed url auth: null, +4263 verbose parsed url host: null, +4263 verbose parsed url port: null, +4263 verbose parsed url hostname: null, +4263 verbose parsed url hash: null, +4263 verbose parsed url search: null, +4263 verbose parsed url query: null, +4263 verbose parsed url pathname: 'request@~2.11.4', +4263 verbose parsed url path: 'request@~2.11.4', +4263 verbose parsed url href: 'request@~2.11.4' } +4264 verbose cache add name="request" spec="~2.11.4" args=["request","~2.11.4"] +4265 verbose parsed url { protocol: null, +4265 verbose parsed url slashes: null, +4265 verbose parsed url auth: null, +4265 verbose parsed url host: null, +4265 verbose parsed url port: null, +4265 verbose parsed url hostname: null, +4265 verbose parsed url hash: null, +4265 verbose parsed url search: null, +4265 verbose parsed url query: null, +4265 verbose parsed url pathname: '~2.11.4', +4265 verbose parsed url path: '~2.11.4', +4265 verbose parsed url href: '~2.11.4' } +4266 verbose addNamed [ 'request', '~2.11.4' ] +4267 verbose addNamed [ null, '>=2.11.4-0 <2.12.0-0' ] +4268 silly lockFile c2e2f8c3-request-2-11-4 request@~2.11.4 +4269 verbose lock request@~2.11.4 /home/spike/.npm/c2e2f8c3-request-2-11-4.lock +4270 verbose cache add [ 'rimraf@~2.0.3', null ] +4271 verbose cache add name=undefined spec="rimraf@~2.0.3" args=["rimraf@~2.0.3",null] +4272 verbose parsed url { protocol: null, +4272 verbose parsed url slashes: null, +4272 verbose parsed url auth: null, +4272 verbose parsed url host: null, +4272 verbose parsed url port: null, +4272 verbose parsed url hostname: null, +4272 verbose parsed url hash: null, +4272 verbose parsed url search: null, +4272 verbose parsed url query: null, +4272 verbose parsed url pathname: 'rimraf@~2.0.3', +4272 verbose parsed url path: 'rimraf@~2.0.3', +4272 verbose parsed url href: 'rimraf@~2.0.3' } +4273 verbose cache add name="rimraf" spec="~2.0.3" args=["rimraf","~2.0.3"] +4274 verbose parsed url { protocol: null, +4274 verbose parsed url slashes: null, +4274 verbose parsed url auth: null, +4274 verbose parsed url host: null, +4274 verbose parsed url port: null, +4274 verbose parsed url hostname: null, +4274 verbose parsed url hash: null, +4274 verbose parsed url search: null, +4274 verbose parsed url query: null, +4274 verbose parsed url pathname: '~2.0.3', +4274 verbose parsed url path: '~2.0.3', +4274 verbose parsed url href: '~2.0.3' } +4275 verbose addNamed [ 'rimraf', '~2.0.3' ] +4276 verbose cache add [ 'semver@~1.1.0', null ] +4277 verbose cache add name=undefined spec="semver@~1.1.0" args=["semver@~1.1.0",null] +4278 verbose parsed url { protocol: null, +4278 verbose parsed url slashes: null, +4278 verbose parsed url auth: null, +4278 verbose parsed url host: null, +4278 verbose parsed url port: null, +4278 verbose parsed url hostname: null, +4278 verbose parsed url hash: null, +4278 verbose parsed url search: null, +4278 verbose parsed url query: null, +4278 verbose parsed url pathname: 'semver@~1.1.0', +4278 verbose parsed url path: 'semver@~1.1.0', +4278 verbose parsed url href: 'semver@~1.1.0' } +4279 verbose cache add name="semver" spec="~1.1.0" args=["semver","~1.1.0"] +4280 verbose parsed url { protocol: null, +4280 verbose parsed url slashes: null, +4280 verbose parsed url auth: null, +4280 verbose parsed url host: null, +4280 verbose parsed url port: null, +4280 verbose parsed url hostname: null, +4280 verbose parsed url hash: null, +4280 verbose parsed url search: null, +4280 verbose parsed url query: null, +4280 verbose parsed url pathname: '~1.1.0', +4280 verbose parsed url path: '~1.1.0', +4280 verbose parsed url href: '~1.1.0' } +4281 verbose addNamed [ 'semver', '~1.1.0' ] +4282 verbose addNamed [ null, '>=1.1.0-0 <1.2.0-0' ] +4283 silly lockFile 384d7ac7-semver-1-1-0 semver@~1.1.0 +4284 verbose lock semver@~1.1.0 /home/spike/.npm/384d7ac7-semver-1-1-0.lock +4285 verbose cache add [ 'stable@~0.1.2', null ] +4286 verbose cache add name=undefined spec="stable@~0.1.2" args=["stable@~0.1.2",null] +4287 verbose parsed url { protocol: null, +4287 verbose parsed url slashes: null, +4287 verbose parsed url auth: null, +4287 verbose parsed url host: null, +4287 verbose parsed url port: null, +4287 verbose parsed url hostname: null, +4287 verbose parsed url hash: null, +4287 verbose parsed url search: null, +4287 verbose parsed url query: null, +4287 verbose parsed url pathname: 'stable@~0.1.2', +4287 verbose parsed url path: 'stable@~0.1.2', +4287 verbose parsed url href: 'stable@~0.1.2' } +4288 verbose cache add name="stable" spec="~0.1.2" args=["stable","~0.1.2"] +4289 verbose parsed url { protocol: null, +4289 verbose parsed url slashes: null, +4289 verbose parsed url auth: null, +4289 verbose parsed url host: null, +4289 verbose parsed url port: null, +4289 verbose parsed url hostname: null, +4289 verbose parsed url hash: null, +4289 verbose parsed url search: null, +4289 verbose parsed url query: null, +4289 verbose parsed url pathname: '~0.1.2', +4289 verbose parsed url path: '~0.1.2', +4289 verbose parsed url href: '~0.1.2' } +4290 verbose addNamed [ 'stable', '~0.1.2' ] +4291 verbose addNamed [ null, '>=0.1.2-0 <0.2.0-0' ] +4292 silly lockFile 248113cb-stable-0-1-2 stable@~0.1.2 +4293 verbose lock stable@~0.1.2 /home/spike/.npm/248113cb-stable-0-1-2.lock +4294 verbose cache add [ 'tar@~0.1.13', null ] +4295 verbose cache add name=undefined spec="tar@~0.1.13" args=["tar@~0.1.13",null] +4296 verbose parsed url { protocol: null, +4296 verbose parsed url slashes: null, +4296 verbose parsed url auth: null, +4296 verbose parsed url host: null, +4296 verbose parsed url port: null, +4296 verbose parsed url hostname: null, +4296 verbose parsed url hash: null, +4296 verbose parsed url search: null, +4296 verbose parsed url query: null, +4296 verbose parsed url pathname: 'tar@~0.1.13', +4296 verbose parsed url path: 'tar@~0.1.13', +4296 verbose parsed url href: 'tar@~0.1.13' } +4297 verbose cache add name="tar" spec="~0.1.13" args=["tar","~0.1.13"] +4298 verbose parsed url { protocol: null, +4298 verbose parsed url slashes: null, +4298 verbose parsed url auth: null, +4298 verbose parsed url host: null, +4298 verbose parsed url port: null, +4298 verbose parsed url hostname: null, +4298 verbose parsed url hash: null, +4298 verbose parsed url search: null, +4298 verbose parsed url query: null, +4298 verbose parsed url pathname: '~0.1.13', +4298 verbose parsed url path: '~0.1.13', +4298 verbose parsed url href: '~0.1.13' } +4299 verbose addNamed [ 'tar', '~0.1.13' ] +4300 verbose addNamed [ null, '>=0.1.13-0 <0.2.0-0' ] +4301 silly lockFile e648d358-tar-0-1-13 tar@~0.1.13 +4302 verbose lock tar@~0.1.13 /home/spike/.npm/e648d358-tar-0-1-13.lock +4303 verbose cache add [ 'tmp@~0.0.17', null ] +4304 verbose cache add name=undefined spec="tmp@~0.0.17" args=["tmp@~0.0.17",null] +4305 verbose parsed url { protocol: null, +4305 verbose parsed url slashes: null, +4305 verbose parsed url auth: null, +4305 verbose parsed url host: null, +4305 verbose parsed url port: null, +4305 verbose parsed url hostname: null, +4305 verbose parsed url hash: null, +4305 verbose parsed url search: null, +4305 verbose parsed url query: null, +4305 verbose parsed url pathname: 'tmp@~0.0.17', +4305 verbose parsed url path: 'tmp@~0.0.17', +4305 verbose parsed url href: 'tmp@~0.0.17' } +4306 verbose cache add name="tmp" spec="~0.0.17" args=["tmp","~0.0.17"] +4307 verbose parsed url { protocol: null, +4307 verbose parsed url slashes: null, +4307 verbose parsed url auth: null, +4307 verbose parsed url host: null, +4307 verbose parsed url port: null, +4307 verbose parsed url hostname: null, +4307 verbose parsed url hash: null, +4307 verbose parsed url search: null, +4307 verbose parsed url query: null, +4307 verbose parsed url pathname: '~0.0.17', +4307 verbose parsed url path: '~0.0.17', +4307 verbose parsed url href: '~0.0.17' } +4308 verbose addNamed [ 'tmp', '~0.0.17' ] +4309 verbose addNamed [ null, '>=0.0.17-0 <0.1.0-0' ] +4310 silly lockFile af2449f1-tmp-0-0-17 tmp@~0.0.17 +4311 verbose lock tmp@~0.0.17 /home/spike/.npm/af2449f1-tmp-0-0-17.lock +4312 verbose cache add [ 'unzip@0.1.7', null ] +4313 verbose cache add name=undefined spec="unzip@0.1.7" args=["unzip@0.1.7",null] +4314 verbose parsed url { protocol: null, +4314 verbose parsed url slashes: null, +4314 verbose parsed url auth: null, +4314 verbose parsed url host: null, +4314 verbose parsed url port: null, +4314 verbose parsed url hostname: null, +4314 verbose parsed url hash: null, +4314 verbose parsed url search: null, +4314 verbose parsed url query: null, +4314 verbose parsed url pathname: 'unzip@0.1.7', +4314 verbose parsed url path: 'unzip@0.1.7', +4314 verbose parsed url href: 'unzip@0.1.7' } +4315 verbose cache add name="unzip" spec="0.1.7" args=["unzip","0.1.7"] +4316 verbose parsed url { protocol: null, +4316 verbose parsed url slashes: null, +4316 verbose parsed url auth: null, +4316 verbose parsed url host: null, +4316 verbose parsed url port: null, +4316 verbose parsed url hostname: null, +4316 verbose parsed url hash: null, +4316 verbose parsed url search: null, +4316 verbose parsed url query: null, +4316 verbose parsed url pathname: '0.1.7', +4316 verbose parsed url path: '0.1.7', +4316 verbose parsed url href: '0.1.7' } +4317 verbose addNamed [ 'unzip', '0.1.7' ] +4318 verbose addNamed [ '0.1.7', '0.1.7' ] +4319 silly lockFile d9f02e72-unzip-0-1-7 unzip@0.1.7 +4320 verbose lock unzip@0.1.7 /home/spike/.npm/d9f02e72-unzip-0-1-7.lock +4321 verbose cache add [ 'update-notifier@~0.1.3', null ] +4322 verbose cache add name=undefined spec="update-notifier@~0.1.3" args=["update-notifier@~0.1.3",null] +4323 verbose parsed url { protocol: null, +4323 verbose parsed url slashes: null, +4323 verbose parsed url auth: null, +4323 verbose parsed url host: null, +4323 verbose parsed url port: null, +4323 verbose parsed url hostname: null, +4323 verbose parsed url hash: null, +4323 verbose parsed url search: null, +4323 verbose parsed url query: null, +4323 verbose parsed url pathname: 'update-notifier@~0.1.3', +4323 verbose parsed url path: 'update-notifier@~0.1.3', +4323 verbose parsed url href: 'update-notifier@~0.1.3' } +4324 verbose cache add name="update-notifier" spec="~0.1.3" args=["update-notifier","~0.1.3"] +4325 verbose parsed url { protocol: null, +4325 verbose parsed url slashes: null, +4325 verbose parsed url auth: null, +4325 verbose parsed url host: null, +4325 verbose parsed url port: null, +4325 verbose parsed url hostname: null, +4325 verbose parsed url hash: null, +4325 verbose parsed url search: null, +4325 verbose parsed url query: null, +4325 verbose parsed url pathname: '~0.1.3', +4325 verbose parsed url path: '~0.1.3', +4325 verbose parsed url href: '~0.1.3' } +4326 verbose addNamed [ 'update-notifier', '~0.1.3' ] +4327 verbose addNamed [ null, '>=0.1.3-0 <0.2.0-0' ] +4328 silly lockFile a5119d99-update-notifier-0-1-3 update-notifier@~0.1.3 +4329 verbose lock update-notifier@~0.1.3 /home/spike/.npm/a5119d99-update-notifier-0-1-3.lock +4330 silly addNameRange { name: 'colors', range: '>=0.6.0-1 <0.7.0-0', hasData: false } +4331 silly addNameRange { name: 'glob', range: '>=3.1.14-0 <3.2.0-0', hasData: false } +4332 silly addNameRange { name: 'hogan.js', range: '>=2.0.0-0 <2.1.0-0', hasData: false } +4333 silly addNameRange { name: 'mkdirp', range: '>=0.3.4-0 <0.4.0-0', hasData: false } +4334 silly addNameRange { name: 'nopt', range: '>=2.0.0-0 <2.1.0-0', hasData: false } +4335 silly addNameRange { name: 'promptly', range: '>=0.1.0-0 <0.2.0-0', hasData: false } +4336 silly addNameRange { name: 'rc', range: '>=0.0.6-0 <0.1.0-0', hasData: false } +4337 silly addNameRange { name: 'read-package-json', +4337 silly addNameRange range: '>=0.1.8-0 <0.2.0-0', +4337 silly addNameRange hasData: false } +4338 silly addNameRange { name: 'request', +4338 silly addNameRange range: '>=2.11.4-0 <2.12.0-0', +4338 silly addNameRange hasData: false } +4339 silly addNameRange { name: 'semver', range: '>=1.1.0-0 <1.2.0-0', hasData: false } +4340 silly addNameRange { name: 'stable', range: '>=0.1.2-0 <0.2.0-0', hasData: false } +4341 silly addNameRange { name: 'tar', range: '>=0.1.13-0 <0.2.0-0', hasData: false } +4342 silly addNameRange { name: 'tmp', range: '>=0.0.17-0 <0.1.0-0', hasData: false } +4343 silly addNameRange { name: 'update-notifier', +4343 silly addNameRange range: '>=0.1.3-0 <0.2.0-0', +4343 silly addNameRange hasData: false } +4344 verbose url raw archy +4345 verbose url resolving [ 'https://registry.npmjs.org/', './archy' ] +4346 verbose url resolved https://registry.npmjs.org/archy +4347 info trying registry request attempt 1 at 11:44:30 +4348 verbose etag "867DQUZZNM40PUQBF21OSQVZ0" +4349 http GET https://registry.npmjs.org/archy +4350 verbose url raw fstream +4351 verbose url resolving [ 'https://registry.npmjs.org/', './fstream' ] +4352 verbose url resolved https://registry.npmjs.org/fstream +4353 info trying registry request attempt 1 at 11:44:30 +4354 verbose etag "4PAJYM04YHRR9CLAUIH2N261V" +4355 http GET https://registry.npmjs.org/fstream +4356 verbose url raw colors +4357 verbose url resolving [ 'https://registry.npmjs.org/', './colors' ] +4358 verbose url resolved https://registry.npmjs.org/colors +4359 info trying registry request attempt 1 at 11:44:30 +4360 verbose etag "6A8GBHDKZ62PGBI3M1NRGH6L7" +4361 http GET https://registry.npmjs.org/colors +4362 verbose url raw mkdirp +4363 verbose url resolving [ 'https://registry.npmjs.org/', './mkdirp' ] +4364 verbose url resolved https://registry.npmjs.org/mkdirp +4365 info trying registry request attempt 1 at 11:44:30 +4366 verbose etag "3RS91FMPQ85XXI3EBHF4SIKOZ" +4367 http GET https://registry.npmjs.org/mkdirp +4368 verbose url raw glob +4369 verbose url resolving [ 'https://registry.npmjs.org/', './glob' ] +4370 verbose url resolved https://registry.npmjs.org/glob +4371 info trying registry request attempt 1 at 11:44:30 +4372 verbose etag "B1JO7OQNPSICFIYFPFTZR9ASE" +4373 http GET https://registry.npmjs.org/glob +4374 verbose url raw nopt +4375 verbose url resolving [ 'https://registry.npmjs.org/', './nopt' ] +4376 verbose url resolved https://registry.npmjs.org/nopt +4377 info trying registry request attempt 1 at 11:44:30 +4378 verbose etag "7ZWLQPPM56VM8XQ0VW9DU43K7" +4379 http GET https://registry.npmjs.org/nopt +4380 verbose url raw promptly +4381 verbose url resolving [ 'https://registry.npmjs.org/', './promptly' ] +4382 verbose url resolved https://registry.npmjs.org/promptly +4383 info trying registry request attempt 1 at 11:44:30 +4384 verbose etag "6A4RSOE7FMK8P3KXS7DQK17XU" +4385 http GET https://registry.npmjs.org/promptly +4386 verbose url raw semver +4387 verbose url resolving [ 'https://registry.npmjs.org/', './semver' ] +4388 verbose url resolved https://registry.npmjs.org/semver +4389 info trying registry request attempt 1 at 11:44:30 +4390 verbose etag "2YZHDULC16W0A4C1OJM44P25I" +4391 http GET https://registry.npmjs.org/semver +4392 verbose url raw tar +4393 verbose url resolving [ 'https://registry.npmjs.org/', './tar' ] +4394 verbose url resolved https://registry.npmjs.org/tar +4395 info trying registry request attempt 1 at 11:44:30 +4396 verbose etag "3MM61I8LY97G51H65LC31BGAF" +4397 http GET https://registry.npmjs.org/tar +4398 verbose url raw tmp +4399 verbose url resolving [ 'https://registry.npmjs.org/', './tmp' ] +4400 verbose url resolved https://registry.npmjs.org/tmp +4401 info trying registry request attempt 1 at 11:44:30 +4402 verbose etag "9DCK0BIFCYG9MVH5I3BGY34DT" +4403 http GET https://registry.npmjs.org/tmp +4404 verbose url raw request +4405 verbose url resolving [ 'https://registry.npmjs.org/', './request' ] +4406 verbose url resolved https://registry.npmjs.org/request +4407 info trying registry request attempt 1 at 11:44:30 +4408 verbose etag "80WKAG7N9W84VX89SY65IEUDQ" +4409 http GET https://registry.npmjs.org/request +4410 verbose url raw update-notifier +4411 verbose url resolving [ 'https://registry.npmjs.org/', './update-notifier' ] +4412 verbose url resolved https://registry.npmjs.org/update-notifier +4413 info trying registry request attempt 1 at 11:44:30 +4414 verbose etag "44POGZHWTNMQH683ASPC6NSHM" +4415 http GET https://registry.npmjs.org/update-notifier +4416 verbose url raw hogan.js +4417 verbose url resolving [ 'https://registry.npmjs.org/', './hogan.js' ] +4418 verbose url resolved https://registry.npmjs.org/hogan.js +4419 info trying registry request attempt 1 at 11:44:30 +4420 verbose etag "DYCORUQ64EHETEQ641X7T84U9" +4421 http GET https://registry.npmjs.org/hogan.js +4422 verbose url raw rc +4423 verbose url resolving [ 'https://registry.npmjs.org/', './rc' ] +4424 verbose url resolved https://registry.npmjs.org/rc +4425 info trying registry request attempt 1 at 11:44:30 +4426 verbose etag "23PRV37Q2GM068NCY4M4C354C" +4427 http GET https://registry.npmjs.org/rc +4428 verbose url raw unzip/0.1.7 +4429 verbose url resolving [ 'https://registry.npmjs.org/', './unzip/0.1.7' ] +4430 verbose url resolved https://registry.npmjs.org/unzip/0.1.7 +4431 info trying registry request attempt 1 at 11:44:30 +4432 verbose etag "E6584NK23PN8TPSGIAYW6VLTW" +4433 http GET https://registry.npmjs.org/unzip/0.1.7 +4434 verbose url raw stable +4435 verbose url resolving [ 'https://registry.npmjs.org/', './stable' ] +4436 verbose url resolved https://registry.npmjs.org/stable +4437 info trying registry request attempt 1 at 11:44:30 +4438 verbose etag "EX66EI6UU6X9YGXB4JDRJV09Z" +4439 http GET https://registry.npmjs.org/stable +4440 verbose url raw read-package-json +4441 verbose url resolving [ 'https://registry.npmjs.org/', './read-package-json' ] +4442 verbose url resolved https://registry.npmjs.org/read-package-json +4443 info trying registry request attempt 1 at 11:44:30 +4444 verbose etag "72N0PHRCLBLHC6YNX7NMMHO1D" +4445 http GET https://registry.npmjs.org/read-package-json +4446 http 200 https://registry.npmjs.org/lpad +4447 silly registry.get cb [ 200, +4447 silly registry.get { vary: 'Accept', +4447 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R15B03)', +4447 silly registry.get etag: '"6CMGWZ1ZI0QSBNEIRBHTWQILV"', +4447 silly registry.get date: 'Mon, 16 Dec 2013 10:44:30 GMT', +4447 silly registry.get 'content-type': 'application/json', +4447 silly registry.get 'content-length': '4268' } ] +4448 silly addNameRange number 2 { name: 'lpad', range: '>=0.1.0-0 <0.2.0-0', hasData: true } +4449 silly addNameRange versions [ 'lpad', [ '0.1.0' ] ] +4450 verbose addNamed [ 'lpad', '0.1.0' ] +4451 verbose addNamed [ '0.1.0', '0.1.0' ] +4452 silly lockFile c3589278-lpad-0-1-0 lpad@0.1.0 +4453 verbose lock lpad@0.1.0 /home/spike/.npm/c3589278-lpad-0-1-0.lock +4454 silly lockFile c3589278-lpad-0-1-0 lpad@0.1.0 +4455 silly lockFile c3589278-lpad-0-1-0 lpad@0.1.0 +4456 silly lockFile e072c835-lpad-0-1-0 lpad@~0.1.0 +4457 silly lockFile e072c835-lpad-0-1-0 lpad@~0.1.0 +4458 http 200 https://registry.npmjs.org/ms/-/ms-0.6.2.tgz +4459 http 200 https://registry.npmjs.org/optipng-bin +4460 silly registry.get cb [ 200, +4460 silly registry.get { vary: 'Accept', +4460 silly registry.get server: 'CouchDB/1.5.0 (Erlang OTP/R15B03)', +4460 silly registry.get etag: '"27JJ9H7P4HY9BYEYGR7ZEKYB7"', +4460 silly registry.get date: 'Mon, 16 Dec 2013 10:44:31 GMT', +4460 silly registry.get 'content-type': 'application/json', +4460 silly registry.get 'content-length': '27197' } ] +4461 silly addNameRange number 2 { name: 'optipng-bin', +4461 silly addNameRange range: '>=0.3.0-0 <0.4.0-0', +4461 silly addNameRange hasData: true } +4462 silly addNameRange versions [ 'optipng-bin', +4462 silly addNameRange [ '0.1.0', +4462 silly addNameRange '0.2.0', +4462 silly addNameRange '0.2.1', +4462 silly addNameRange '0.2.2', +4462 silly addNameRange '0.2.3', +4462 silly addNameRange '0.2.4', +4462 silly addNameRange '0.2.5', +4462 silly addNameRange '0.2.6', +4462 silly addNameRange '0.3.0', +4462 silly addNameRange '0.3.1' ] ] +4463 verbose addNamed [ 'optipng-bin', '0.3.1' ] +4464 verbose addNamed [ '0.3.1', '0.3.1' ] +4465 silly lockFile fb0a2585-optipng-bin-0-3-1 optipng-bin@0.3.1 +4466 verbose lock optipng-bin@0.3.1 /home/spike/.npm/fb0a2585-optipng-bin-0-3-1.lock +4467 silly lockFile ef3bb5f1-ptipng-bin-optipng-bin-0-3-1-tgz https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.3.1.tgz +4468 verbose lock https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.3.1.tgz /home/spike/.npm/ef3bb5f1-ptipng-bin-optipng-bin-0-3-1-tgz.lock +4469 verbose addRemoteTarball [ 'https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.3.1.tgz', +4469 verbose addRemoteTarball 'd3eee5ee9dfcc8d7ae2086fd8f9dcec084c6e79b' ] +4470 info retry fetch attempt 1 at 11:44:31 +4471 verbose fetch to= /home/spike/tmp/npm-28710-_zgXwRNE/1387190671529-0.15064548491500318/tmp.tgz +4472 http GET https://registry.npmjs.org/optipng-bin/-/optipng-bin-0.3.1.tgz +4473 verbose tar unpack /home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/tmp.tgz +4474 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4475 verbose lock tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package /home/spike/.npm/86e259f1-0495-0-31165669905021787-package.lock +4476 silly lockFile 6f5eec1e-0495-0-31165669905021787-tmp-tgz tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/tmp.tgz +4477 verbose lock tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/tmp.tgz /home/spike/.npm/6f5eec1e-0495-0-31165669905021787-tmp-tgz.lock +4478 silly gunzTarPerm modes [ '755', '644' ] +4479 silly gunzTarPerm extractEntry package.json +4480 silly gunzTarPerm extractEntry .npmignore +4481 silly gunzTarPerm extractEntry README.md +4482 silly gunzTarPerm extractEntry index.js +4483 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4484 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4485 silly lockFile 6f5eec1e-0495-0-31165669905021787-tmp-tgz tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/tmp.tgz +4486 silly lockFile 6f5eec1e-0495-0-31165669905021787-tmp-tgz tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/tmp.tgz +4487 verbose tar pack [ '/home/spike/.npm/ms/0.6.2/package.tgz', +4487 verbose tar pack '/home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package' ] +4488 verbose tarball /home/spike/.npm/ms/0.6.2/package.tgz +4489 verbose folder /home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4490 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4491 verbose lock tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package /home/spike/.npm/86e259f1-0495-0-31165669905021787-package.lock +4492 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4493 verbose lock tar:///home/spike/.npm/ms/0.6.2/package.tgz /home/spike/.npm/5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz.lock +4494 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4495 silly lockFile 86e259f1-0495-0-31165669905021787-package tar:///home/spike/tmp/npm-28710-_zgXwRNE/1387190670495-0.31165669905021787/package +4496 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4497 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4498 silly lockFile c2351323-home-spike-npm-ms-0-6-2-package /home/spike/.npm/ms/0.6.2/package +4499 verbose lock /home/spike/.npm/ms/0.6.2/package /home/spike/.npm/c2351323-home-spike-npm-ms-0-6-2-package.lock +4500 silly lockFile c2351323-home-spike-npm-ms-0-6-2-package /home/spike/.npm/ms/0.6.2/package +4501 silly lockFile c2351323-home-spike-npm-ms-0-6-2-package /home/spike/.npm/ms/0.6.2/package +4502 verbose tar unpack /home/spike/.npm/ms/0.6.2/package.tgz +4503 silly lockFile 7bae951b--home-spike-npm-ms-0-6-2-package tar:///home/spike/.npm/ms/0.6.2/package +4504 verbose lock tar:///home/spike/.npm/ms/0.6.2/package /home/spike/.npm/7bae951b--home-spike-npm-ms-0-6-2-package.lock +4505 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4506 verbose lock tar:///home/spike/.npm/ms/0.6.2/package.tgz /home/spike/.npm/5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz.lock +4507 silly gunzTarPerm modes [ '755', '644' ] +4508 silly gunzTarPerm extractEntry package.json +4509 silly gunzTarPerm extractEntry .npmignore +4510 silly gunzTarPerm extractEntry README.md +4511 silly gunzTarPerm extractEntry index.js +4512 silly lockFile 7bae951b--home-spike-npm-ms-0-6-2-package tar:///home/spike/.npm/ms/0.6.2/package +4513 silly lockFile 7bae951b--home-spike-npm-ms-0-6-2-package tar:///home/spike/.npm/ms/0.6.2/package +4514 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4515 silly lockFile 5d7c2cf1-e-spike-npm-ms-0-6-2-package-tgz tar:///home/spike/.npm/ms/0.6.2/package.tgz +4516 verbose chmod /home/spike/.npm/ms/0.6.2/package.tgz 644 +4517 verbose chown /home/spike/.npm/ms/0.6.2/package.tgz [ 1000, 1000 ] +4518 silly lockFile 7bcd2b3d-gistry-npmjs-org-ms-ms-0-6-2-tgz https://registry.npmjs.org/ms/-/ms-0.6.2.tgz +4519 silly lockFile 7bcd2b3d-gistry-npmjs-org-ms-ms-0-6-2-tgz https://registry.npmjs.org/ms/-/ms-0.6.2.tgz +4520 silly lockFile 549cc243-ms-0-6-2 ms@0.6.2 +4521 silly lockFile 549cc243-ms-0-6-2 ms@0.6.2 +4522 silly lockFile ca2beeee-ms-0-6-1 ms@~0.6.1 +4523 silly lockFile ca2beeee-ms-0-6-1 ms@~0.6.1 +4524 silly resolved [ { name: 'hooker', +4524 silly resolved description: 'Monkey-patch (hook) functions for debugging and stuff.', +4524 silly resolved version: '0.2.3', +4524 silly resolved homepage: 'http://github.com/cowboy/javascript-hooker', +4524 silly resolved author: { name: '"Cowboy" Ben Alman', url: 'http://benalman.com/' }, +4524 silly resolved repository: +4524 silly resolved { type: 'git', +4524 silly resolved url: 'git://github.com/cowboy/javascript-hooker.git' }, +4524 silly resolved bugs: { url: 'https://github.com/cowboy/javascript-hooker/issues' }, +4524 silly resolved licenses: [ [Object] ], +4524 silly resolved dependencies: {}, +4524 silly resolved devDependencies: { grunt: '~0.2.1' }, +4524 silly resolved keywords: [ 'patch', 'hook', 'function', 'debug', 'aop' ], +4524 silly resolved engines: { node: '*' }, +4524 silly resolved main: 'lib/hooker', +4524 silly resolved scripts: { test: 'grunt test' }, +4524 silly resolved readme: '# JavaScript Hooker\n\nMonkey-patch (hook) functions for debugging and stuff.\n\n## Getting Started\n\nThis code should work just fine in Node.js:\n\nFirst, install the module with: `npm install hooker`\n\n```javascript\nvar hooker = require(\'hooker\');\nhooker.hook(Math, "max", function() {\n console.log(arguments.length + " arguments passed");\n});\nMath.max(5, 6, 7) // logs: "3 arguments passed", returns 7\n```\n\nOr in the browser:\n\n```html\n\n\n```\n\nIn the browser, you can attach Hooker\'s methods to any object.\n\n```html\n\n\n\n```\n\n## Documentation\n\n### hooker.hook\nMonkey-patch (hook) one or more methods of an object.\n#### Signature:\n`hooker.hook(object, [ props, ] [options | prehookFunction])`\n#### `props`\nThe optional `props` argument can be a method name, array of method names or null. If null (or omitted), all enumerable methods of `object` will be hooked.\n#### `options`\n* `pre` - (Function) a pre-hook function to be executed before the original function. Arguments passed into the method will be passed into the pre-hook function as well.\n* `post` - (Function) a post-hook function to be executed after the original function. The original function\'s result is passed into the post-hook function as its first argument, followed by the method arguments.\n* `once` - (Boolean) if true, auto-unhook the function after the first execution.\n* `passName` - (Boolean) if true, pass the name of the method into the pre-hook function as its first arg (preceding all other arguments), and into the post-hook function as the second arg (after result but preceding all other arguments).\n\n#### Returns:\nAn array of hooked method names.\n\n### hooker.unhook\nUn-monkey-patch (unhook) one or more methods of an object.\n#### Signature:\n`hooker.unhook(object [, props ])`\n#### `props`\nThe optional `props` argument can be a method name, array of method names or null. If null (or omitted), all methods of `object` will be unhooked.\n#### Returns:\nAn array of unhooked method names.\n\n### hooker.orig\nGet a reference to the original method from a hooked function.\n#### Signature:\n`hooker.orig(object, props)`\n\n### hooker.override\nWhen a pre- or post-hook returns the result of this function, the value\npassed will be used in place of the original function\'s return value. Any\npost-hook override value will take precedence over a pre-hook override value.\n#### Signature:\n`hooker.override(value)`\n\n### hooker.preempt\nWhen a pre-hook returns the result of this function, the value passed will\nbe used in place of the original function\'s return value, and the original\nfunction will NOT be executed.\n#### Signature:\n`hooker.preempt(value)`\n\n### hooker.filter\nWhen a pre-hook returns the result of this function, the context and\narguments passed will be applied into the original function.\n#### Signature:\n`hooker.filter(context, arguments)`\n\n\n## Examples\nSee the unit tests for more examples.\n\n```javascript\nvar hooker = require(\'hooker\');\n// Simple logging.\nhooker.hook(Math, "max", function() {\n console.log(arguments.length + " arguments passed");\n});\nMath.max(5, 6, 7) // logs: "3 arguments passed", returns 7\n\nhooker.unhook(Math, "max"); // (This is assumed between all further examples)\nMath.max(5, 6, 7) // 7\n\n// Returning hooker.override(value) overrides the original value.\nhooker.hook(Math, "max", function() {\n if (arguments.length === 0) {\n return hooker.override(9000);\n }\n});\nMath.max(5, 6, 7) // 7\nMath.max() // 9000\n\n// Auto-unhook after one execution.\nhooker.hook(Math, "max", {\n once: true,\n pre: function() {\n console.log("Init something here");\n }\n});\nMath.max(5, 6, 7) // logs: "Init something here", returns 7\nMath.max(5, 6, 7) // 7\n\n// Filter `this` and arguments through a pre-hook function.\nhooker.hook(Math, "max", {\n pre: function() {\n var args = [].map.call(arguments, function(num) {\n return num * 2;\n });\n return hooker.filter(this, args); // thisValue, arguments\n }\n});\nMath.max(5, 6, 7) // 14\n\n// Modify the original function\'s result with a post-hook function.\nhooker.hook(Math, "max", {\n post: function(result) {\n return hooker.override(result * 100);\n }\n});\nMath.max(5, 6, 7) // 700\n\n// Hook every Math method. Note: if Math\'s methods were enumerable, the second\n// argument could be omitted. Since they aren\'t, an array of properties to hook\n// must be explicitly passed. Non-method properties will be skipped.\n// See a more generic example here: http://bit.ly/vvJlrS\nhooker.hook(Math, Object.getOwnPropertyNames(Math), {\n passName: true,\n pre: function(name) {\n console.log("=> Math." + name, [].slice.call(arguments, 1));\n },\n post: function(result, name) {\n console.log("<= Math." + name, result);\n }\n});\n\nvar result = Math.max(5, 6, 7);\n// => Math.max [ 5, 6, 7 ]\n// <= Math.max 7\nresult // 7\n\nresult = Math.ceil(3.456);\n// => Math.ceil [ 3.456 ]\n// <= Math.ceil 4\nresult // 4\n```\n\n## Contributing\nIn lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code using [grunt](https://github.com/cowboy/grunt).\n\n_Also, please don\'t edit files in the "dist" subdirectory as they are generated via grunt. You\'ll find source code in the "lib" subdirectory!_\n\n## Release History\n2012/01/09 - v0.2.3 - First official release.\n\n## License\nCopyright (c) 2012 "Cowboy" Ben Alman \nLicensed under the MIT license. \n\n', +4524 silly resolved readmeFilename: 'README.md', +4524 silly resolved _id: 'hooker@0.2.3', +4524 silly resolved _from: 'hooker@~0.2.3' }, +4524 silly resolved { name: 'chalk', +4524 silly resolved version: '0.3.0', +4524 silly resolved description: 'Terminal string styling done right', +4524 silly resolved keywords: +4524 silly resolved [ 'color', +4524 silly resolved 'colour', +4524 silly resolved 'colors', +4524 silly resolved 'terminal', +4524 silly resolved 'console', +4524 silly resolved 'cli', +4524 silly resolved 'string', +4524 silly resolved 'ansi', +4524 silly resolved 'styles', +4524 silly resolved 'tty', +4524 silly resolved 'formatting', +4524 silly resolved 'rgb', +4524 silly resolved '256', +4524 silly resolved 'shell', +4524 silly resolved 'xterm', +4524 silly resolved 'log', +4524 silly resolved 'logging', +4524 silly resolved 'command-line', +4524 silly resolved 'text' ], +4524 silly resolved homepage: 'https://github.com/sindresorhus/chalk', +4524 silly resolved bugs: { url: 'https://github.com/sindresorhus/chalk/issues' }, +4524 silly resolved license: 'MIT', +4524 silly resolved author: +4524 silly resolved { name: 'Sindre Sorhus', +4524 silly resolved email: 'sindresorhus@gmail.com', +4524 silly resolved url: 'http://sindresorhus.com' }, +4524 silly resolved files: [ 'chalk.js' ], +4524 silly resolved main: 'chalk', +4524 silly resolved repository: { type: 'git', url: 'git://github.com/sindresorhus/chalk.git' }, +4524 silly resolved scripts: { test: 'mocha' }, +4524 silly resolved dependencies: { 'has-color': '~0.1.0', 'ansi-styles': '~0.2.0' }, +4524 silly resolved devDependencies: { mocha: '~1.12.0' }, +4524 silly resolved engines: { node: '>=0.8.0' }, +4524 silly resolved readme: '# chalk [![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n> Terminal string styling done right.\n\n[colors.js](https://github.com/Marak/colors.js) is currently the most popular string styling module, but it has serious deficiencies like extending String.prototype which causes all kinds of problems. Although there are other ones, they either do too much or not enough.\n\n**Chalk is a clean and focused alternative.**\n\n![screenshot](screenshot.png)\n\n\n## Why\n\n- **Doesn\'t extend String.prototype**\n- Expressive API\n- Clean and focused\n- Auto-detects color support\n- Actively maintained\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/chalk): `npm install --save chalk`\n\n\n## Example\n\nChalk comes with an easy to use composable API where you just chain the styles you want.\n\n```js\nvar chalk = require(\'chalk\');\n\n// style a string\nconsole.log(chalk.blue(\'Hello world!\'));\n\n// combine styled and normal strings\nconsole.log(chalk.blue(\'Hello\'), \'World\' + chalk.red(\'!\'));\n\n// compose multiple styles using the chainable API\nconsole.log(chalk.blue.bgRed.bold(\'Hello world!\'));\n\n// nest styles\nchalk.red(\'Hello\', chalk.underline.bgBlue(\'world\') + \'!\');\n\n// pass in multiple arguments\nconsole.log(chalk.blue(\'Hello\', \'World!\', \'Foo\', \'bar\', \'biz\', \'baz\')) \n```\n\nYou can easily define your own themes.\n\n```js\nvar chalk = require(\'chalk\');\nvar error = chalk.bold.red;\nconsole.log(error(\'Error!\'));\n```\n\n\n## API\n\n### chalk.\\ + +

HTML5 Slide Template

+ +

Configuring the slides

+

Much of the deck is customized by changing the settings in slide_config.js. +Some of the customizations include the title, Analytics tracking ID, speaker +information (name, social urls, blog), web fonts to load, themes, and other +general behavior.

+

Customizing the #io12 hash

+

The bottom of the slides include #io12 by default. If you'd like to change +this, please update the variable $social-tags: '#io12'; in +/theme/scss/default.scss.

+

See the next section on "Editing CSS" before you go editing things.

+

Editing CSS

+

Compass is a CSS preprocessor used to compile +SCSS/SASS into CSS. We chose SCSS for the new slide deck for maintainability, +easier browser compatibility, and because...it's the future!

+

That said, if not comfortable working with SCSS or don't want to learn something +new, not a problem. The generated .css files can already be found in +(see /theme/css). You can just edit those and bypass SCSS altogether. +However, our recommendation is to use Compass. It's super easy to install and use.

+

Installing Compass and making changes

+

First, install compass:

+
sudo gem update --system
+sudo gem install compass
+
+

Next, you'll want to watch for changes to the exiting .scss files in /theme/scss +and any new one you add:

+
$ cd io-2012-slides
+$ compass watch
+
+

This command automatically recompiles the .scss file when you make a change. +Its corresponding .css file is output to /theme/css. Slick.

+

By default, config.rb in the main project folder outputs minified +.css. It's a best practice after all! However, if you want unminified files, +run watch with the style output flag:

+
compass watch -s expanded
+
+

Note: You should not need to edit _base.scss.

+

Running the slides

+

The slides can be run locally from file:// making development easy :)

+

Running from a web server

+

If at some point you should need a web server, use serve.sh. It will +launch a simple one and point your default browser to http://localhost:8000/template.html:

+
$ cd io-2012-slides
+$ ./serve.sh
+
+

You can also specify a custom port:

+
$ ./serve.sh 8080
+
+

Presenter mode

+

The slides contain a presenter mode feature (beta) to view + control the slides +from a popup window.

+

To enable presenter mode, add presentme=true to the URL: http://localhost:8000/template.html?presentme=true

+

To disable presenter mode, hit http://localhost:8000/template.html?presentme=false

+

Presenter mode is sticky, so refreshing the page will persist your settings.

+
+

That's all she wrote!

diff --git a/slides/README.md b/slides/README.md new file mode 100644 index 0000000..1ba5391 --- /dev/null +++ b/slides/README.md @@ -0,0 +1,130 @@ + + +

HTML5 Slide Template

+ +## Configuring the slides + +Much of the deck is customized by changing the settings in [`slide_config.js`](slide_config.js). +Some of the customizations include the title, Analytics tracking ID, speaker +information (name, social urls, blog), web fonts to load, themes, and other +general behavior. + +### Customizing the `#io12` hash + +The bottom of the slides include `#io12` by default. If you'd like to change +this, please update the variable `$social-tags: '#io12';` in +[`/theme/scss/default.scss`](theme/scss/default.scss). + +See the next section on "Editing CSS" before you go editing things. + +## Editing CSS + +[Compass](http://compass-style.org/install/) is a CSS preprocessor used to compile +SCSS/SASS into CSS. We chose SCSS for the new slide deck for maintainability, +easier browser compatibility, and because...it's the future! + +That said, if not comfortable working with SCSS or don't want to learn something +new, not a problem. The generated .css files can already be found in +(see [`/theme/css`](theme/css)). You can just edit those and bypass SCSS altogether. +However, our recommendation is to use Compass. It's super easy to install and use. + +### Installing Compass and making changes + +First, install compass: + + sudo gem update --system + sudo gem install compass + +Next, you'll want to watch for changes to the exiting .scss files in [`/theme/scss`](theme/scss) +and any new one you add: + + $ cd io-2012-slides + $ compass watch + +This command automatically recompiles the .scss file when you make a change. +Its corresponding .css file is output to [`/theme/css`](theme/css). Slick. + +By default, [`config.rb`](config.rb) in the main project folder outputs minified +.css. It's a best practice after all! However, if you want unminified files, +run watch with the style output flag: + + compass watch -s expanded + +*Note:* You should not need to edit [`_base.scss`](theme/scss/_base.scss). + +## Running the slides + +The slides can be run locally from `file://` making development easy :) + +### Running from a web server + +If at some point you should need a web server, use [`serve.sh`](serve.sh). It will +launch a simple one and point your default browser to [`http://localhost:8000/template.html`](http://localhost:8000/template.html): + + $ cd io-2012-slides + $ ./serve.sh + +You can also specify a custom port: + + $ ./serve.sh 8080 + +### Presenter mode + +The slides contain a presenter mode feature (beta) to view + control the slides +from a popup window. + +To enable presenter mode, add `presentme=true` to the URL: [http://localhost:8000/template.html?presentme=true](http://localhost:8000/template.html?presentme=true) + +To disable presenter mode, hit [http://localhost:8000/template.html?presentme=false](http://localhost:8000/template.html?presentme=false) + +Presenter mode is sticky, so refreshing the page will persist your settings. + +--- + +That's all she wrote! diff --git a/slides/app.yaml b/slides/app.yaml new file mode 100644 index 0000000..7692ab2 --- /dev/null +++ b/slides/app.yaml @@ -0,0 +1,23 @@ +application: my-io-talk +version: 1 +runtime: python27 +api_version: 1 +threadsafe: yes + +handlers: +- url: / + static_files: template.html + upload: template\.html + +- url: /slide_config\.js + static_files: slide_config.js + upload: slide_config\.js + +- url: /js + static_dir: js + +- url: /theme + static_dir: theme + +- url: /images + static_dir: images diff --git a/slides/config.rb b/slides/config.rb new file mode 100644 index 0000000..f2c6751 --- /dev/null +++ b/slides/config.rb @@ -0,0 +1,24 @@ +# Require any additional compass plugins here. + +# Set this to the root of your project when deployed: +http_path = "/" +css_dir = "theme/css" +sass_dir = "theme/scss" +images_dir = "images" +javascripts_dir = "js" + +# You can select your preferred output style here (can be overridden via the command line): +output_style = :compressed #:expanded or :nested or :compact or :compressed + +# To enable relative paths to assets via compass helper functions. Uncomment: +# relative_assets = true + +# To disable debugging comments that display the original location of your selectors. Uncomment: +# line_comments = false + + +# If you prefer the indented syntax, you might want to regenerate this +# project again passing --syntax sass, or you can uncomment this: +# preferred_syntax = :sass +# and then run: +# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass diff --git a/slides/images/barchart.png b/slides/images/barchart.png new file mode 100644 index 0000000000000000000000000000000000000000..1e5743721d39c694f929d062c8b0535a3edd76ba GIT binary patch literal 17632 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 literal 0 HcmV?d00001 diff --git a/slides/images/chrome-logo-tiny.png b/slides/images/chrome-logo-tiny.png new file mode 100644 index 0000000000000000000000000000000000000000..88ef9bdfacdebf05878c39362121ed648732c470 GIT binary patch literal 1381 zcmV-r1)BPaP)^)1=LAwtL^R=ki|Wc|5yW_8>0!sekx0!+iMv zo|$=G<`pyJgH!}?@wO2FP(z9y-&4ldO1LGLOEq69-YZdbJJ`FLVNrDTZYM ziCo7XoB)6UL6;$2P#EfrFJkNgj{XlIZ>C^IDPtt*D;^7GxXdF_j`-#9EITp&Aalq8?lY)MoQ??~HwS?8Y+B@7~NK2j7Ce ztFa63(L20}#b=-6*BkF(dO<;j^<`n_rY|u#^#IM*d3;X~g($}t0?r%2H&OQ_Fe_%p z125eFSt-b`h+uMak^OsL=dM?0DE7tZ?~Zf0bqnvF{1;o+$B4k?xs;84BOJbGlr8fk zpgATnW`Zf0IW+j)@$C!GL;z;&5WwXSE4=WvA%=Fp#kPmO&5^#__{&p&;-lBCBTrHQ z`ijQi&%DIZ{!jAgj{R`%$7t;6wi%!@0^n8vn=vp48!jcheODhRJ{(b4cPoD#ZBvS2 zW-(>HamBM8mkXYgXB*^v3Vb&h0T4`GU-v`HO)L_`g9`Lcro6mwD^nY*WD|?j)0|=} z!;7qTY9mv0p^jw%BESrgm2e>hC#wL|N=Ng{aIRTSDL)}Wa7^aRqEp#0Ha}{72zYU4aT4tC6K##BT@At-d z^5Ox0@vUq4#@!!h&?*d4=D=s}8#MSBNpgx1S5@29%sdCa*+|H8dH{Bg%*3hQ? zP+NxOU_c;n-MV3ppZf>jzqpTkKmRI^?{^&DFARU;3@^XE3tM;vi;Exz2qB9|n?;gl z{F6L))2nw7)Ub>vY(XE1J-rSG5#%msxHiPZ!XgJx|A-CM3au8LKAUiQ`zY(La)hSG z>`HjnF4CB*DMLz)B>Jt`G+XN9uF=rxz}#=-tua4UV|uJMU7soJ0()A#0U)yWi-rh@mls9@$xuT|-9}^3Em6PRqw>RTW+Aikn}qN{d+&?rEs| z;y?7wA88k4X^XX~Ll52-L%+7pIFaE|1U)bIkh&-C6bBJia9L1CUZ+~_!3y}QI@2ZY z5eB!P1O`8((e$eSt@^j>_r}kpUf;(y&#eMquA24Mue@%5ehuHBWkhJ#h6k?j5k~U= zZ{t~K`Rj<=2qhw@k<}>|R$nwJL%rcCy35&1RUtjo`-#J?4daWPf#HGI`%V3Wkp4Gg zW#|2(sjt>a-h3~!$PCAsKN3WQWR^rqWvDz8#Un3~tW*$lHb5H&SOWlQK#@+6PfgIT z<7Y#azsY5|hvHycHvlzzLvnOi?84^dB!eP;g#57$(2gh_ZNxB30F>aiI(XcLWkFfu z$Shp>?Wjg8#xPZ)G#>le)&zCD2Z%YMP>s-%37v@YF~#_~468Z&v1{WB|t_@ z9c+ZS$w|c|oV}w6x`OsezWeL`?y@N?LTacZh}!wSW^VpsF`Fh&c0-uc;2zQ(RE~pl zN6}m*3hA+LOHPQBsb%}h?qoS=uj&<#0~v})p=O>819&Ko4btS)SI=reua$qNbO$^ahnK{yI>G1mTCST10JO^R1N zLUm7$5^H{YFMp&StaBxY8kEsqV zMKnVIOSvWN%*MqLL)&{dAdPrfh#r^Kok(@qHCyZ6@Xk$L(B!EH8HZGinkila*X^Jv zoKag#;%&^7`LWVjK%5=Zqk�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 literal 0 HcmV?d00001 diff --git a/slides/images/google_developers_logo.png b/slides/images/google_developers_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..49b34b7e576da95b54408068e3750eaa4a2976e7 GIT binary patch literal 14800 zcmXwg2|QHq_x}uoYrkXPVrK07l0;c%u3fUFRI-#cWnV&KjEk`^2}u}Hl9aT{o-Kt@ zNm)XK?EAj_r_cBIf6ct^Jg=GOp5=Ys=gfVcdryLug)uve5DNl>p{Fo+_GYmt)Nat{uX{{|TN-;oH? z{riA`e@6iO?M2i&gv(>T| zWNEkJar~|poUHm!Csd|EbbrBn3KJl3A1?OfQ-y2KzfqNVFOb+WyUx-sAWkz910N(6 zm7d3oeJGP9Cz_zuc~5aeO#+!R=#sL52FI}N#`%C`Gz~fsvao)^w~Lo0$yoA2!|mzX z_0mKR2RpUE|CAA{;;5^e+h%jOcK8gXxz@kGm5Y$e!o_V6zAdckzu$WNCTiYHQ}D`l z#QS&eK0+cc$;AhKSo?SGdM?iSLO%wxL z?SgWxJ1&u<)0j>N=Zr#3j#`{VB;we(Y=BO~X)o>*AFukKbinEcK`l&6OlXL;UBD$3 zq{FU#2Rd6h_CKcfK9P}gU^;`~mAxXPV6mq@-o&g^hbTz!J@M}E=uw$d?cu^ui<}EB zcraD?k>6c1|EXuIn7j}ki2JckyVZG>h=KQ?!u+5HrO3c4A^W>VwZq*>eM?b4PsRwp z$&g_Q0oVxG>B;q!_ZGxWhh#xIeP>3N==bPpufoQ_%|fEQQsD{pFKZIKKD z&sB!MOcx0yHVBsB0VItvTT0j<^sbTlVCqzos-6g}?)2jA>e!vGzhych=%F=_O+MqoBUo z$X2hKCblPjm^I#=?!RehsGgon;aotjI(Y}vp`zKO9QP6zzHxOo|8P64iTP&(mq)-I z#(xP9k->`zu^nMf9ee)I^ab8A^tzsFl97n3#KjqaynpsZ-*IIe#w;vJIc+~#ytTaZ zD1N;Mw%Xf-g6I)gc##J>j@J6MW01j7ECr~sS>&c2(YM^}aLRXDCEN__xDbKo2*C`pGY0-Gw{2N!6WMIir_rQ~l zlpn+W`*kx!C$pf4ue=#ENzZ5{mLfKPeZ&1#;QrRN$M+YS^^52~G$mbl3|@TK?(<>M zU1d8_fhI>rkufQ)Gry};MTa!a!y>7niH!pPBECc}(n*ZpHuWEmF3@-B&fx4_*H=)V zlp#&z`|Y2r(97%l{z^>bINTo8;K2*YOZczN=BL&ADrU&c>u zU+w8Nca4mx6T0@NwC#>SCrCb=v&RZ`#I67|4h%V~qHRwaSjK5)64V(8rZLizO{1f z0*$QCx4@c&rH@6Yz&?W2z$nVwKF_O%&BD)U=&KEX{pPvF3+?HN8LqRl@&ONk^Hu$Q zc9+T>uq7k*F&~=hBTn~?1O0`lp&`DH5;vW@c=iM{MM;dDdNkp zLh~5M_OW+=5YBsQI+_O^bJC6bm3&EyMJjb)!N81%>oCl)JL zhq2_XFiCr^GNxxYF~iiaw-)njG&<G%GI$ISf-yLAnYkM-* zu38pen>||b_5^>@=ick|2pU=atBtJcjzu0EPF{W?lh+(wL|P4GsC~+mFo0?;NHR~oQ?N!G15vR6)XrCoCT9ecya| zU}{DPIw7+wZI`NK+3n;-huFKa7!mS7gHC0^cu9OtTmj4aQxeqwEA}|&j^-VW-VLjD z+p9Or!#&;nAKN~D@vWe#w1k0WzWCfrJYg4jqKkjk92}m`O3x|bh!q{{pAU!}hMx6vft+EF=h>2@Q|sgsacHiynq15?#FF|wwwY0Uq6Qar zIh{9yBB)|Oz9@swqMo^KXEpWr_4WE_Ry6j#4l9HM&$W59@+Rqd*SWM)fV*^8z)1;N zWR+u9xlE#giHIFKFDs{z!2Rt`F;)MZ2~6i~b5X(Iq!zMR0>8-w@=GFRGy3!V(0-wo zGS^L7CJo>dCBv1KKyU)ktIBy(7h@tw$_R<#G0Xs%@2Thc{u*ZX+35fLAxXG;Cx`7I(M`*{47Z;iHHainpKnU#A&}ZcUyyJUF)*1S zqd4wQ{3-B#=b{g)w1F+v$T6^cWrS;f6TZFJGKSvjLmf>m3rq|{< zYo3I3KSLL;Z%EUjMRxkr2HYePI#SOf&3-CD zt<1-oQ=ddnlLuxWO7aa!qH}g6Qy3kl;tnCU!5FYY+@ifsY(#}M! z$PoR>l_;as>sC~O5iql=c5lstqE3@_`HciSk zbh&Dez}7QaHs*{Xxp8Aj-3PBxXRl^gi$iUB#Wl`Nz1v>6 zFE5B5;4Z2K2&BesTi9ly*kEj|^nlC%CyGZH%0i6jTfAj6{Nv^tPdKROMs_|3kz+ln ze}Ul4?$(t6j@^&pv_k~ueUxPQC?}_G-c(z2_V*=|EloRF zdOObW(Q+S^doJLC6;WozS6$Mr(7%(`a}{1nW6WhMK1v08 zj9YdrN=c2kb1XQvN~UVAxZKRo&655`ICPi)S7%NqQdhxTobJxvB0VnXT40kJdWHaZ z9yMQl1ZXH_apGeTH5K2fJbnZcZ*EG^CD_mSPHmHrPgjF(e2_k{+% z^N2;Hx2?RBg6DU17--b_xD`C9h6;2Buyx992|uc3dGOtrZY2CyH%Yle6x-1_TffO@EO zRE6=#DdSy81^HD3EfAghL~doMs#5#%PVmT=K*1R13{j(@Q6(3YyMcu`^ZyEkEl%AH zw>Fk@m^*9FpG~&n#C;o7hWIg%eR@&W&Cy7|?|UIvKWIz7I74!SN{&u4LCKG2B! zr~u(+?N7S5tM8u>d;FxD23@#?8>`}5^NF#4X;5qer;44E^aR+7A~u$NqJgLMCR9=m z9jb9y-vFqsJ-+t&J}8MdExN(Vn}HE%vm( zINjM9GyEpA?dG2PKy||KcZ+Ul^HvpekzXyZ+P=Ku*>5Q|bmCzvQ%AOU_by!$rHs23 z^k$~LXMPs(I(1w#6%0_k26R$XZCHb6eS@dWj4?ru{4kZ1AAx-dz@kOE;c{;}OA$ET z>$`_wCsIH+^6XXV+$sjl<0Hd$8V&Ep^9%9Dl3IU#SgbxEfrv9#XhI=RH|)1#P0~Y5 zh5IbPeNM>4Cn1TI!oJQuGu}zPT*uaEYu?%fK4Vc(!H;{P@Yjjb*AUF4AeR<-aOi?Q zRp8H=&}TBb#vlDfjDdGqb@W`Hx5AdqoL>8Ofwo9ex*)_beCs9WUJ-50XsuIz=i5=| zshm@!0#}va{2Q&R6OxD|w>=4@m8NKZqgGN;Ia1-ACH=&`>;RE=H1q_ZSfe76y%+Z% zFTDPxhW9)I$|0aw46IHRy@VoJi5)S2!rRv~ZCzKEiWGE~DUQXrD9hY?fx*e91o2C61pGsdTw+x6=}RmX z1cg?Ju)6BRPouPVPt_3;z=;GVX+H~vE$uXK&A*LNf{ z_w2foleONtaeSEsC`S*u;eq=inM+3Ma3~%sr#BDiFz$@pSQa-#%7}1Uj9#ia?E~93 zM-aH4k^c)|VvmuLbEIcJK=Vk}N^Poims9F)&9ANJmVi7F|HXa)CffyrO7& zIx?>EA)DAPLQNc??R0dTg6mXG#>lo6-z^cze=!WoPP~b4miW3*dt;mj;0+E0jv(+R z`X(TZBAmX@NVPu2PqbnH%a^{V&Z(%s;1u26Vy5pHI;Jb$^e&<$gg4mgxNWe|vpv86 z@|uI<*oJ@(rz;otOY42V(Scm3KKJ$6WsEvr2%i%aF_Of_l%KCJSBg^qi8KM#yNvhT zGicb*>Q%>6b0E*QnqV1p^W>(xu?IbVmsC^&LIURk5Dj#8iQoI~W81A(1 zDur+x+7&y_XmXCN>CAcrCe0te@!hxK!Q%0Vg*u^|^Pd;VWFl2H#;O+)@zTCV<(oU; zkD=&;Gnw9kjj4=!8ORdQ_85mWh(@Eq#2z7>=NGofwR<&H=-R77(4$U!)*QJ-71;IT zQ&g}5!PF>*@8r@0Cad{GW?V5hb*sgoK6V)?fd*fA2cy49u6B(XH|**k4aR&Et_;wy zNAUQZc1XO<3}@0&N-!pE(I{b+2|;2Squ$d9c8m8PQRv>~cq?irmjMdCLWk|gM6R8Q z=gvOk!9kcFHMM$X&Wer2a7dh|qxjG-C8QQ!MEsqaDwxpB#~a`Q0FA`%_NUS_-)sw+ z8VCT2R#=QpejnFV5+aBP3XiI3*DtPzRCqDx^v+qI4pXiA76%}Yr*F&k;}`tXM3 z{oW!f7p$4?e11Q_MF~!FAA#ThuhNAN2^;0-H2u}uppLOC#OjKeE;_kg&f673E zugQkZjjhNyt#BGq?y#I&zx_A+zJ?~=6a|xs;I7lP89eFo*7WhHFbjH$>vO3mcrraR zpG(J?M%Cx1=IPQQs}H9|zn-!t#M@lQxz+q^vo#%c+^P6sO zTH|PaImUK-zKHV`XeN0p8nmlbSe*PcM2g+&r8m*z2ZFEHf4<}P4|AHm*AQ4scfrUt z`x!CzLR4Qo$i#J}w{j||=b7t+BI6jbuZTRM97`>b`6m}ueG?x zN(lkvd(@y3i%O?o`+@Uf%G&}BP<^7tUo#h2e^-=2| zU%k~;GH&I7Qs2D$uB=ierpJQ!x-c9Uo!%$E6hsRzjYXJm1jHTO{B~n5-UK_{6Y9dP z56oZJZ2CP@bow7=4cg#~NZkhG{~-pd0Yx^08XEgYLvJk1A>q)b6lr(}gc@{DHZ2`x z9pyfPZyNpJhnGj11fOEzZzmczgj~2=I;yCcRl?!Zo(@A&^*= z|KsLP*RSDqlhd*O2t6^%|6ZHVPkOkAn5$=~s~Y&4OJ%T{sBe(uee(oHh`Htbo>!jB zJ;#vT(5A`!ftRh8p1vi3E@dO5Tc7=2e3))N`t_^sts3pa2{C2FqrvXA{E^pzov+Hz zAWkH1j<2)7J68GWP1^-vxTd5lgR>x7$Isea?Jvk49jm`c!L zuigfK#}+>5+xbFKyr4jN59VnTt)dty*F1KCa|7>pV#Gby{MNZSD79_g00pfcZGqC~ zO2GejxjZ!_BBi?S;DP4!SohBpkw1(~r|eyH5@{;KZbX+JiAhpGhPImjS>MT+!5DvD6V&9pa_uF`KbDzPXkgPe0P1eb0d1*8^@n?pj|R z5Yg=B(9P2MEy%_PzO?FEWwM%*>jfObKzNr8B63G}5H&x;J^Uznn$LUn>KE!DnL0UXG z8gJhA>-N$OMI*1#aC89~RNn2#8LbFLOtD zn+wxGA#*@kw?hZBoN;y_2hX2!?kQP!5l7|A0mnLQ=W@IJTkqlPx*_u6L96t^8fcci zH8*LysKba*gS#k~Ke_l??Byn0F-5cjMvvQSc!U&UD7l=(&J*&i(kdOp@*e<>ncXzq$@nJeAM?JndYz)S_SE!;-qrMnhjFxTjgTje(+sq=?lo0LTpvFOBbxg zG)&TA2YT3bP6*;XNkd=EqAVzS4bs4yDDu#n0bbmXkEF=FbB# z^=Z@h2s-D$0KHV%4LHVAqTyrhxq^t_H;4RD0<XCPM#Uy)MtO13jjyFU;hp+E`eN zq_1({-R|9a)bb{}=t&F$N2zJ_gzw zUd>LQTO171pT1#(BRowJn3-&=Ff(l(IDi$4w;CBL*jV8q3|yxtx&t-es_jVb0E7*i z|9Wh7?xb+nZzkUg3>~GL&~ZaM!HW)6)kX~x1LyRV+O_?Oe8y~HpRuqwIqGXRCJSq) zH&`Ks2iuKc7vJQ)-4jpHe!+*;%%KUUOZrYUjh7F0+%@ZO1Ut{fQ8_&}?%lAQVOb(9 z$84rtV5QZPqpla}U1Zi-rBjb|@q)FO3?u~>P)SZ+43K0Ym zVKAjmaOG3^31O~UzNV^1RoftX{9(n#3!2f4gkN<}KD>|x9Q5jXYD2G(AG9CQc4RYKZ&hzJ z9r6{*`!=qORq;~#bE}N9FM1ZC(PLAtd8c1~?DlDID2%%O*~Do*-RnU`-O1JE&wFiN zfTU;qlP{dvfp-!E6odDVTJ&wEQ_l%R>3)88E#aui6eo6lsR%YX#hn3>qXOEhV@h{w zdCwoMLf!IJt>WiXj-K4@JJ_`(m@FZw7Pn<}`l*A}H$MdJc3b_%mo+d^l%G{n$2{^s z$4p{c7@)P7WWGXYzH|YcI(_VU`{bqwdY?w;9>m5^V|1_cD_A0LR!BX<)6)|PtCbM0 zMnV$Mi6N}PUSx~wsigI(PB`7UbCD~(1Z(Tcb8E3>icz*}!+R#Yto~`Ye?R0_a^Oq& zzKHO95rTLbbHq*)S*0@~!jg;5?1DTm5Xzzul=e5_EAyvjPpswAd*-unX#yA6uzh8W z$Gs5t)?z;%>1p@uoe*NnR%3NPlq08U+gn4;*&HbfSY3L+Ityco?agSgJH$|~gYR^Y z0)Ns&+uRC|urqqP!+jotW8l@!nIKZpVhT1Bgzo;ms~e}n(Ra(b_`VAhl^Mg!P7IMb zL%1}Cdik@6P<87D0u)k5QQR0P2PinQzBgw|cc`%?t@C-eXwebaf&pg94CtH$69ltz zQ$Y8ch{;dCZ6+lBO}UTWi|Y?=VTah2=S{K57=3$VbK33;T?}Cg@csBy)D@7Nc$}sq z)4Sssh;g6UWad3wsw?9nWS)qRJZC+BRy~wVc{eqwoKK7w+j-l}40umHN_kt;fPJ%A zN1~pfZTMhb>Po}s5Rg2A^5-!a9#k!@?C5xmNV`^-D`n~;On<}69Q)hB%y{(9Bs1>M zzz)~tMj=%vI$2Pj)5yH?8pErd43=LdlF{^cCvf8 zo?zQZ@bXX--n~`sM|We7X2!gDN4za~Ve04bIEIG~hKN)lyeB*6YbOy?1;gwDFBS82}UZ0L0C>a*?`Ex-!N*A0rUD1>Q@x;>pZ$zcny0`7;-n zigvXWt;igy*i8XYq+&B1`ZEh7D2FX>J&;%i>|HkX5JoCZY4Z7vZ=1}mSdgfc)rdf< z417S`t53r)P!>et`ga5Ujm9}+FI`2|nXtPUIEc?8bto)NVBzjZFuS5i$+E4Hpi>47 ztDJVi)w(iL;5q8~om-~}tYG5vq;!yo`A`ssajgG&6%8@RR1v0s4j|Moup$Ctxhn`% zE4&2W#4VY^Z?At8xOJ?Ok4XzfSwO;(`^EAj?_PcviL{Md zyhh`(DU*$&IZV(Dh9?&Su71b3Mx1^S$7I0p!Oj0JhwyZD#M-AfM&=lvSHVW?ro1Mx zmmz@RQc^})3**RHPtGi0)bTZfLKa4Ow^kfgk%{a0XkI)m%VQOq8NUnc zh=OZJFu+Rxn{ga-I&ED~5APf$Oke(fr|^>F_a@pR)t`kkF9y5;^yW~Fgs68uqjPaZ zYR($7yjOfV+~0~k$H#(Q*OQ*RMqM^QQNA7Zv<)?c&$ZM}Ti}_nt9NhgM5gM+u|%Ne zUuRGQ=YzoseK~UeF)K%5ci0PfDhE8JgE_KW2-$xMy?m(=;KfW%J*O;R2R4tEG!2jX z+_)I(GC_#i`uS6Q4iFXCTozNAzVWPN=n3|>zDb&$Pc=b(w`C1fW6+tpfUPKZ<(oT} zLdIk*Uvl(0tVnO90Y4~67i~eMr*eISJes zfRW}`P5ZQ?5se(TAFU(XW^Hm34F$5S@G@fon##x_lp3riyr6YQU@Y3mwP|cf3ke(X zR7ZQp@2$jBQ#l{!B06|2JUO91NSF=(^45(bD(akY%`wtL$a8fdQ#0mQe15hA zEXU~n{9G1h1dbT7wMuMJdhU*3^u$R<;Ny>Tr~YU#t*gD01!s_?nV?so9EP(}xwA)i zzALrRe`x&%_=V9o3Oqy}ZMI2Z+5cOi+k5qKy6Zt$X*~Gm(XWosPw7|*g>dD7{6(&V zTM}xpP4>|T;kAEr$L9Rb}UT8V+SkNz!h*l3$M z9i#|9Z$kaHwI)*RbazBFiU}(Y@V;hqygqFFAUb#Z>zUo?d)2Y&2Q_y`j_+-@Wp#in ziZjv@18fS14LbN3aPx}bP6>FK6-IHQ_BT)5-N?IRkGl~-|J)U9WVI+bIPc=gLCeY% z>`OlcWzdd~*H1mnSGf{TilHieL^~dh13EGHDLj|;nk1aE%lt0)1}iGWq>qN5OI>iB z+A0X8ULQEx=htw?D(V+oc098J;9tAJ*ngC?HKdv)gaEj;AL2W;`%?+j8e+#jn*<-Z zVAwuhNB`3q?AmnOSfYPYuoPyEbz(SZTVTt)g!Gn09rIM~yh%B~r)jiA6d<->2VvNGRzHHfXAoqb>I{l8;f-$rXl z#6K0%JOLo(24bkd>VT@En8FXfsiJ4!Wm4}&?-$m+|M~PD`8VR<(;8doJ>Y^m<+NGl zSLr4Cpv%7+?~#w3vwKdwbk^jKXGSdBRgh@$c!DPF`}sg>ifaA~ z_qE!O795%!Is|iXYi#Ukdvqfp!u%=ot|Xa_wXDR<@P5t9HhUsIdA&Ug+{rm;TTYB8 zU|?~1ZFP!uf4Kdd>cZAYs(*VwGn6F{P0un7?o2N%NCHp{3}9^szA4i~3b)^ekoJZ8 z&Zg7$;P5hgH`!>#88g8S&%kk<0$dj*JGGmsh4&dEw;Em2#MLb{^{tGo#X+IyUd{Bl z!~N)keSb>Bp{uV8&|6NG1pg=b{j9B<9|Lf~x9D{2@i}+9=p&dG7K#Q0^bx70;0Yw` z)4!p7V?tFOeZ{^rn-lE3fC$nI)bi|@BPd#EcHh*F!L96wH?R__k(q}<@s z2fVnF1+d?0PJaA#Ngm&^b1_TJ&EK7Y1!R3@5I+|!~5N3Vu!Vl|}$Ex2n zkyOf!tK!C1gx>mzM?D*M^7_~G%d~2?xriLJM;_Eo$lOp}7d;zzWl*n|CA;+w5yZIO z6hp#u&loTgNbGi;0e7~hlI&kw&`j1#9C0MP5NCrbeMlhbZO^OD3-5T|Py}c<*ZdhV zx7C`+Y|zH=FqaS!oGrJP@++@1^Q6T~zifTf@e2}~yojJ(NLYP*OL*bQQ<}@7Un)X8 z2*`MHP+O2$OcNM(@Ukez?nXN{=#UK(t3Mo&CHf3&oz8KlVb}c7g&ouKE4`R&OGy|H z$V2DR0pW@~7!(i&6c5C-F^eOv5IMz?e|zOG{l1!E&8Dl}m6qms7zOD3z@i+!_UOJ1 zVZqW-!&Xq@=Kw|T>>(s}<700^F zEi^S%Wakv-O@kajWF0&hJS_o z`o>~{XE}r6GU)O=i#O^-IOrAX4_8((!nB6xfHd8Wym*fi;rgE5Sf;irXFmRyyE^2 zcuTNb*=cUpci_Gq#d>xG{GyU=ReJP5&-MbQIe4m}bZyWFPxf}Rys2`v z8u0>z_Zs-_>I26@Hy9&(RC{LfiYKjc#-*eIyGd zelvuML4q%Cea&)dRv4(Py)2_Y#P!SW93Awz$XO_#$Q=`VsC@F}>=Z{qU3K_&rj1v- zTc8&U@aGDUX{kYb8jZ)>=54n?Nd8p3<&E_RHwQh_K}GnpBX82$XYNV44ABGems8ud z%hAWb6@zBC%C`BnJKlK2QP1J~A+5MO&DH(%z;d)n>>Ild=dwvA>d0(MU(dXITv2{; z{25ekYZwm$JJ*%C^nK=j-VZ%vzKep9w-bl3n%C|ni2ky&$D6EZiykh@9ytnoEp8(7 zf)wPh5UKf3SO+kJSGh?xkbY01=&r$tW>W>DLuNX{mBh$Q+Y#H25TpN#KOV^xzU4aZ zmzni5i_ltsn8Xe7-M)7lwD&kl%cc6YzLLvYIRMBdSa7FwCu-z;Gy$czB4d*k#0bdA zhNo<$h;h>r8v%WezpT`MVH+Q>`sj&V-GiR1-lybMRb67O{?Mz(9(1!#?w%8)zA6(q zcXt2<)(B|kHB}qQqv9<7Nn@$u*xSCnp9TGK*%e<}W;aTDB5_Iu7nAG_xD>T zg?1yk+8uV)nB-5DZY5@$G67W~K??NOYBO1C8$Z&&<9qj&Us_6#R!&c3?l4fy+3+iv zPWm`2{oW~6%nKI1@U}D30+IS1QK&w)^_3SMB5;G!l0nWk^72}6~Y6g z69h?+6`=X%HI&}q(eb0s|6M`N`$=m|}(`-$L|^dZ|58AJGD+16ZODO)fv znQC6~SrFTtgih*tOagOUbGeoA)6HSgwEL`X*TpZR@?~8uBgMWE)zU)+&7vaR zO8_jrQ#2P32722i^BkRmOpav}{C(I|YyjlL>cPRdKU)TgY^Q$?45CQUx#z<}`HIWbNIr`~*@#%NQ$~CDB(lNV>uE@<=EiL}#;uag$AKo-ahU{RCr52Nyq@HI& zB?(rXXiP1ba6NyifAiUR_S`pR!vR|PTN)M=58fPIsSsxB5Fg{XG=e%@(!P&)dfJkI z`0lh)o}K;=_H9{3XsaGXtA$D*GfDyy9| zKOD1QTs-rav$Cl_ne+Qyyyg{L+=JEdh$%W{h`JcCvE0(^l5=Y_%sk8k0kl9rQkH=) zW@*(~MyvbIAqB_v&0EYB?0f1Hsg$aMunJB|>6#la1fO4{ulI*wGMi&uI05IHaOX0% z+%nnm*8_GgTeurk8M*4GQEl^(>k(2UQbo_QyLGT;6cwDmi^7svzI+lLqv-KcM%sBjA?LF&S2r%>X51ZX^o|Ig zx!6Fvw+wJNLJau8$V=HV1UMI|X4#Zfmxf6u}Po)X!kB?Wp9aBIq1Ef$;tdh3GolwR?HZ6cjVLIprXzUvWEy+woN3dL@<2O;Hxb5CFo?){R#L zQX<$i^%pb2^jsciO4d%hdMs(CY_;YT#;Blw4~Kf|n+=V7qI5aGdTbVr-dEkziGF52 zO}ysIX|bX3g-e?l%qj^z(@8R!SA%`?m&SXP#S^HV5p}fx)3Go^nF!6j%DUmu)sGwX z>3g3`J3lFPTsq!7^_^#+6`{8sTJj%xFvF%jzU|q+3U(S(wA8%SrG;!`1wJU(f z6Z#%Gx6OGwDehcC;W9#eBeJR*Yt;8mJPJrF4MSjo9a>Ny_PB~aFWgSp1BabS?w z>CKkl+FiH6mS+y3=$-hw_iwC^km+RRxMareJeSmrl&~kA@?%cb2xiX0|L^@W{NDC3 z;wqppKdN_qD>Vp$RRsLqjdC19yEyMeX;n(bbqeZF3xs^kVaCyOrHA&Y$Sp$4Sy%6g z2C|;2P)zQ8&T(%^(|N3j?TFw)gNN=1sq2BH9rvG`^w;RIK|))Xg4@=weh6PJtX|7| z@|>CT?&e^XM~06b=EjYMgOimh=(j`=GR~MhH?u zAkLFd$ARZg_XkJR-%F+hS|Z$9EJJv7Q669nvdN^8_1{7Y@@Z)m;lV!`dh%Q zH6v<&T@q9845PFGqVIA}#9fRRE3GXq9pr*Urrgsy&R#&O>yop7@s>-mQ38LgzaR19 zxvxLvhy0(6)R1a}5?k3z-$nI5iKWdl7m04hJdoibAZWcA02aH(hCA1}R8t_Z)9wEg z?Bp!2x;&vNLeme>EKn5Cf4`K@uc3F1OfhWpG#<@wUhv-(Z}wcl*9asdXdN=NN!GxA z{mG!WNd+QIE!6ASpxn?aL&l+}qpL6RlxhmiNzxh|{%0)@lr{(M+m5MfTk;!J&#^c( zyKG(fjBoi|`22JXciY>-F8i(gW~nu%w12i?Ti&f3rI*}M_@5~m60slxi^594CYcaG z1W7daB}}m>JV2lUm01GPVPFglgQhkB5`<`mktJl||G8+8$pihfpcurN9{4t-UPaKF z6X9*Uu1j-rriRY2gdkQNM$pEn znQD+4B!ESTOMC=A{+svj$A3Q~RG`e{^yKva#QmFOMC(p$q_v14XtNOraTEgKOzYJ` e(3Bt=dlB>env-59&T`PcL6{m^7*s;er2hy1PW?sz literal 0 HcmV?d00001 diff --git a/slides/images/google_developers_logo_tiny.png b/slides/images/google_developers_logo_tiny.png new file mode 100644 index 0000000000000000000000000000000000000000..6e607e4c600ca0fc884c9d53c3a3548784f61ec8 GIT binary patch literal 3749 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 P00000NkvXXu0mjfzy1R> literal 0 HcmV?d00001 diff --git a/slides/images/google_developers_logo_white.png b/slides/images/google_developers_logo_white.png new file mode 100644 index 0000000000000000000000000000000000000000..72a9cb725e6a5c955f9cbe915164610f94721aad GIT binary patch literal 7105 zcmX9@2T+sG(+&_yr~w2*4=ofyLNC%g7&?kni697473m-)goIuqc~OdB2%>VBXCS}a+>+!HGw>G^c}|= zuZ@i0Y)f31P#Jx~_qt83lymKJb4PG2q&@oLJt;{A{O%0HCHbo#=wkFJWo3Tdu{J|> z2VWOTCbxGUkj#V3^teOR9#wTOe_cnVyl3R2g&D_ukM6j9QQgfrq)CGZ8ES=$Tn#^; znNe$F`~t`CKNHpCq<3!}`>t)O3nD14u)D1P-?JsrOQLM)@-GT(*IS9Gix<=W+?$S{^vgQ>Np|;X&N{;*-NI zpY8CopSDrRcf!!56>(NUgd^S;ep_?ov?$m&=FM>T2|B`J^RWJMk^_NI7z zP0RZU!q&d&PbL^Vgf+9DpD&8QNMls7OA=CaQgmJ%1uUk&G$#kUu*BW?AR8Y^KjE_??u9@zy7OZNff!^UW(jHTlH?6NyfSR+2B zb&VTQ6}2vX?ousP?GZv?{cQkfWxTM3x2w97OEEaSo3((kmsgr!#@a2@hoJlq``|Xi zLpq6xa*Pl)jwuv?k;TwP*WH1Yy68~N+2cId6>T*G!01YGU{Zaj#UIqz4-OPjvKO|l zEX;T=jV+1+ppT&rx(a#uN$JJfJy}pZr?iTlnhu@DtV-aDl#XG(7v;eXmSc(O=7lOK zBJ#zgc!;bYAk500Jm33PKD$cSA)webn`Be0of{aI{4hoGspO}VShi9HJS6z?rm-Oc z!dmX;9cOp*+C*C3r&l6~{#T|Yn8Y;y70mSBKr@efJ3hRZi6)j+cOxB{ zsJa7Q>E5rMtYb+=e#~%QItyjHKMxI+GX-`Dba>}EhmsplUc|3P$}x;hbTKyGtIOPc zi1T}41RNs;{uPuVhmllfYE5bEo0H#TBIz8P-;~X62u)jEA^AK3hgV%da4_?8@K?tu zDgQHD3$bBPIYqA;KlEHJi8#U)BU7(-INfVue1EJJREM~5`H2z0a1Kf;8&xIb^jrMG zp4dxq~#?PE)SAD?7x>9`J3xn%jP3LEI)@KdCC z0Y2|_S#*Wk!nZE&XUd7eC4T+>_BboO@)otO!%{Ah8n}D8$PZ=x9H}4iX=tDtBa7Yp zQe8H>L>B=3Tn*W>icJa@@l+M}(a>HO{O}xNMTWw#)uITnEM{-u@maZO z{AP(g0F^qNP(@wb4ZnXY>D7Gw%zYj0l?-%fVGysWl|f`$$D$F9|F?}7rBUBmq?_4r zjwl4(*QDSXzR+MGU9n24wrbD|(|oUna+tL9X!C*>EVZOU}|F#y6@@;O)! z!iwxGq!o*yww_US5L*lr+Grfs-mdJn`cXzj(EEt1DZA;DdIrFnW=PUaQFKxOdQ-JH zbG&-&ZvwwqsG$6{g9lrFQYe-SmG;S^WHiO*gDsTY=KV8#xhJ1j@(xMd4{Km2e*K=W zlMu-XEZZ>qgd@KuzIxrBX$cj87}gzC*9DJ=@^8m*b_|39P%+Ul@6)&rmf;WiuM~Tc z!tMqH5f1A8|Foueh%2K=gCPGfQp+SW6#T`!*N&)e+qKZ2qU4F z6n?O(yhmFRU?0zdWBy8WtSZ{pc*R4|+Rw25qLkM-qyl@#UUgepF!?}IOy|rsq>9&6 zF5DN|DT#6FXPIK{Wp(h~KvEAsrCB~Sm)=(S4f8dlV4$h4nXI!+F;;+j#h#L{)r6US zGmXAr>MCzst=s~5+)j$AU_FsP%h5r>#5HrnFu7ahJ-Z{v$15e=7Lnn9V?D6Q#fk6L2(Nf)02oDd`*TuPcmG7Js4`)sFyM?1M_n^z z3uUWnd`IAAlh3Kijb>Z%=Bz50(ag6ppC3^thAyI~a*zsaPxm;$tGq2A($6n~gD+#q zH&mpQ4V~fb`FhUhB9g|ZYTvnUs;V%XvlAXH7s+)DSOHKXFKI2^`fRVHAe_y<`L_hh zpYX$43KeONj!FDenYJF(R)p66ZJa-4q(3@ABEU)+OLOu7S2^YWcxN5GT{2lcC|)i%ELT*Gg?xm_E6M#*96mL| zLhPIIuuoe<0+iQZ$g%4|NmrtSJI-Nkk1+8)kDT(qOS9%38{hY1xLZ31Q0geA92V0O zShb#Lf~oTt=T%1&|F^9q%<7C8(40-`4O{CwyiHS|)*~XxUwKv+8KQL8?Uqoxc}4pR z&aL#!&Wrh<+!`jcA|ry!A7^pfNqOdqLLE}&tSgx%FXczyrni-#f5e+UKT=^}`K;XE z>szj-M!xkk9~q0Qg2^m|#u47lp9$l0k0*Ga-BF@qU%W%?C>mcE|V>4_UOS`J;Ve**7^Xl%rdQmn349Vp71t z&1j|T>;69r%0MS)`e5>|`emIqHoHeRANZq+mN3<~TBC2PoGjWl(y6Y-{LfBh5}sHU zV|#9dnG6HQyf9V&dcRf= zC8tn?%)zcPxg6mZkGTmq8WQ`IqKdmefwqc5lOg`bIu@i*2V}K_6o`5^F_FOabXOvJ z>$2Zu-BGGdCFV`s>v8;FUkRq*_#tL&@SDewHHbn#K&rVxEiX0!c$e5ga6H$()B;9psb9!2J zt{PCn5=b-#OM)fJHJ6gBCtdWWd|n{cKxFM$@46wq?LBoGoTk|}+%RHi#^GFZ_L~jT z&6fCDgrQR?-F_$bTTzFsJnC;+x|YzC-K)O~QnR8oIz8KE>-D6W1RYmb07aAg3=fZ~ z1mB;F>eqbmUvFWKI*8mQfZA+z_q)9RW(5|O%b+AJf;c@D21^r1YQy1%$-6GXxTF>$ zH@Dk-LwPX(gTMof<9s}f6TW>~uZGY&>y+GfC zLLb;1+^}&68&iRvfB3`e3)pbSrFlop3`NK1hQX%qoF3-NWD}%>5plX6g{|(mOEjO= zciMYM{T22Gl$_XOzwS7`79c2f9=0pFf*b8i`wBw|NLq1>(T@TJnPZjQgZrPjts_pa zKjm=zz~LCgL;j={5%Ykp9iPP1flK*p4IZ^(D){uJrg3CpZ1q-7bVyEZ9ARny%cL*o zQ{t6W+2wd{!$1L4++(itOt@J(`ikvX1k!a(4>!mMGyc21XqfpHPv4WkVS=9Dly$n6yjz|yKw|K|9n0X| z_yOC|8FrU57mCBo+j60tiH|-m6|f~%=YhyBiM>8&QKLSOr-$!_BQv9-=&ou5QFylL zEiwB4_zZ*scDVL~Dd`4~eM*#s@!5E=gvD(q;IQ>0r?s*hXNol~N*ITj6Dlgbs}%_8 zNDKm#NlWY?fd+Pgdi|CQDk^lRbn;sNt2YoABbN6LmtFIp?m{}WvyIvba{PQ8BL`_v zR}-t5k%M=E{l^=fyNHuRM;4e#ZmOX;?ph46RnBf+Tel^Z&{(>)$%-$~qfP2kNWPsP zYp;0l66@{Z3v4OoNo)EW5H$&3 z4F#lI(hxI_4UT^mJflJoP^@K3)1pP`I~W-wYf&du+H)6fe4~8vmscgG_u-zf+D;OF zVX=yFHUGA@DR%W|5t$L)^kwYk1o2T|B?}duxC(6#hkC{Ed%1#v1i$(wb^t^rs{up* zVzBZ1-5jBq;O>>QJKGoSn8}_;v>(`aM^U5G-73V)nLgBYT_vMXhFQU zpFMU&a({-^Xp;~#=q62%qA@7|KP}KeVPRIpXG-aKhmMU3)nXb44co}7%t-X3^P&e) zHv&Q+UdPUnun;iWzj2wbK}bA%^w%g4N(e#WEB$_*MRo1Gn8k<~f9udOXj@FPwa_UDmYFzn*b5$pM)~$WXO&A<802Xl|_WRL_XLuW1@YpRr(Die8(> zDeQ9?AYXXzmaa=u=rSYUO)D&(FLAB_86(uYG8;>u)SHGZU9?aTEm}Z+K*lqoYJQd6 zESoxNM_PGLxLEV~v5z4a8M*aHbDUosjrR?c(E0jtW-Gc}=!)5wPfz$wv6d8XLkdBI zqp=~;(l&E+!Qtk$-#4cGz8S+T-ul^aD+f`YL{HwMps+{IEHIlMgR5n<95-}hFB8rgJ z_gzwxA#Ig*aLw_irZXNCw-Uim4!HTiy*XEA+&VN2*rLsp&*l=A5URcy(<(E_4^?OC zPAz5We!dYR(*C-Jh5Bz}&g0&O@#UX`u|i~!|44nv-$h&DFZ3~~Hos5cXZ&&HuNU&z z9i?CRuVXUodmn0`dboq=@=Ccm5uPAyTH<+O4yH4d0J+@wbca_Sa%rO;s*4e%d z?v#V0#F(r9F5&LJYvs$SHdE}&B+t;VW`!E!L)Tf) z6J0V2bxlkpc3ZpO57e{*`M-BZjw%j4WGlcYN(#zIND#s;!074FC(0So9F$J<#}~%8 z;hDuv1sTPk|CoNU4~_cI0|}_U-Y$F~;$XWiaN{nAzPJuhmwDb%VLD8@dW}Q#AcQhD z6nWMhFReoIoo06OM^}`wvT=RCH}tecuV%eA_t$NUL>+Mh6c&;sFsrdw)pU$uq<3A6 z&*Zpl-gBpqhWo>^;4KjKDjV0Ql)Kh&d}#g@TWdt$Yk1-aya9E|L1L5B@OAx1%wBLH zSh5^jsG*}7+&Sr-jp^pp6qjy?;rle>{tmi#{2NS zU4UO_Ez?vM}bXUtp*hk9=N z>HTYchPc({>P#3kojv;Vn{F9Dx?JKH>)#=1+p`l@g4CN6 z$P!1P%(c}I&o0pTF?)3Wdwf}NEIQbG90@tuT8SRIFIJOA-x02$g?Q2FUzO=#xG&Eb zpzdJ!QLgH{7^>hpy5d@=WvbiC`v8G|Ml8Ck9i&-}W0gD6-|2q7XhL829Sv^sp9Aa1 zKLmU%r%Wp(yQ@usu5Y1P$R!^Q9#V*2ss$wMd4p}JmaZ^XX8Ks(B;AeMCLl_b5uaahz#!`lwrU+tO4sYPFNU$6J6 z8<|9XXqUDX;yEGD{i|SdJZx3UGyG+i!M%rmzRAn2I?5uYy7kZX)5lcq)@FC6f`B&x zPc?fqhvj45g>lNr2kRMx$S!;~!S?1~sBF9Y1QGXTtv)T~#&_mjw#+v8#j#xTG3(n5 z(F4cGfX0l|grl2B7M_3Y^GuVw9c75mCP*dxe(!cf8JtPmI_A&m52mwqw&G`d86(tO z%w~eMmS`6mOY1Z!_kyR9_U;i2(7ajmonf7%M{L|~Sku+@U>w&)u$Aa@aXQd#3sFQZ z%>}eWS8uM6-4~q9c=`h|FEHHnYcmcNB=)PUxE^cUW`nH6ZW@d5zIy5T_hEK+r`X#^G@|V_CpCv3 zhBv}y*^lI#*Wl7CYCNaP1Ygg9&~uKtQ@CkNV~yCEa*T~&jg8vfUq{WEjcRSr)%_=| z>PGwzh?vrV72MYoqFgBmm zBDuG}sHCc{8e_jTja)^6xxz+;N9n>Sfi$?I#21;~!gcS=-?t61Oeks%}274S(bMiju9=oUS3$LQzyDf@); zgVdd@myNZ|NUTM=>Wn^CS*eo`OvI~^Fnz3)Sb4uvs1IXxBYwZW4d31qH{0S6Pr;2yaQ^x5lGa_S zhW#+CBaRgUV<0O#=`$Tr>YSk>7Wcy;9Il?@1h!RJl&SO&K!DeSXcP0LW}B!j|{w?(o=ACDDJr|8_WdjE=Nc;dkG~h1C)3X_9lj ziTN^F*V0A9Ufoq{K%N;FLd!3hw3%yABBV$7$%reI^tQXo$_6_a_$!GbZyjUbKQU=O zZu_YQjA#<-C;;W9Qsms8M3B64e}GktHCQqm>;0l*rLF{PTuRTVX0ZN|;3%^C!Aa!x zgOAHj9wN_&$N(7;)Y(fi^56XT-$KWurBNr}Y#$KDH9l8iU5J)#?mt>yRwO#rdx;m0 z{_DJ%yWE~)LJKq}W2=Er4Ksg`gx{_i@7x|ktd}(LXTi}E8k3LOL#$8y*s8ud-AyA* z(N4nctH$ELT|fW`7h$HZFblJM>uosOD~te2fkLv}sk3zMi%jY>u1aA=#34Dr2>X(x zFzF$4|E(YjLD3(MnPA6>QV2X>GJ;Cgzw^H9VES2l!u3zY6USUlFloziHe8|f4nKkq zoZ#xy8sUKrPm@Ama=(Ti@Rwb!ph~2Do#|Z}%VjYJps|{S@ZudQ1lOnT-QU;3Eu*kH z-09GA#p|e|yexW;IIEM>{S2lA*Z)>Zf+cOoKe;p&WU0*PaUwc>Sz^co(=c*Y z*z_=$yyw=P*;^l6NQ*(?%gQQ8=Ej@IFFJ&O5bIQ{9`~)BiKZD22hCR;+%k;9uPoGKX*PMN@tTkwg-mdTFi=1SZ0+40y$-9(uUr70PINI;D@9o(nu@uzzC?NFj8q{5%AO&sjf!|WQE05i*}6!%A{R4GL!K3 zP!kQ_7)r%P2_bV7p%VhbZ!1;!D=ZGimVM~|i8Wz3*i$@ zZqf^XG5zxnwZh;Xi2iqeQS*=Ox0^eJzOsP7R>jdCL!oXwrc&9Mciay;ZwVjb`wv?x zUiWhOGfW&GV3gTO7TiVg=EEDO_wL^Q_xE->#HCT@RErwagZ+j*l7_Ow9IvcSejF=V zn5|8pBeOUPUX0Nwh0?!)0&oJqu;y^2L1yvh9lX*lF;UHI?W?#u6dsyJZ4#d_t0Dyr z8SPso4aASmdtW^d^IY8Z_Rgk6n!Uw7rM&ze{~y$R;g(4^#4JIw8j3xQL20dljy2)M zTW-_WDdm>ONi&oL1a(%P3@2?m^gD8g zLh>1`Pn!VqE4RW!@i-ubN@rWH=WBAwyiw=surbO~3y8pB`BUpo# z>!)^f!TroIY1yK_e7k9cuGchd;^-kl9ObxqYi&stC;k8I@@7-6YVS_RQMiJ^9m0B4 zS!GfaxXrJBE?_1!OCi9L;VQ4^2<{ktO_n&`9W_)%3-+h|pCRJ#OYxgl7%2Er@TPZx!%Mt)mID*48Y zxsx8jK}!T{(k6!1WI|HAMX=A7?)R{bl!s^rW96}*)wa}dK+VXL)6Y_7vksf%-+Y69B^N}}gQB^~_9&6;%5j1> zs1LRHM7fF`*C`7w<2khIduHPpIA*j7g_cZmgct9hE_h5BC~mACc$eh4%fcSURgO=_col_`V(qW z-zkXdvI+%zq@-bw4H~aJQ1~m9I(97tr6wefoUaZ-?!!A2KfI5zid*O9@Eah~606V* z{~m+9cG}y#ENvFi1>F8O*PvnbcFhwMe=42Swyy`P28BlRya~hZ-yz&bQC=P^BJ9^@ z)jG}F4j%`%cu1?HAjk@$L;ccfLR`wgs9Y)-XvL%4BKi z!rgfBe{!oSQ8r50edD1t6h=|2IaBYjv~;C1ah8$nd8fjBDIMyVq43sIPbUtV#5VA; z|HEvCy=r=6of_WJ>x0jb>7mnND;N4J&b~&X z{S&W5Rz=SlRSRN4;LKaS^Xsc|1rL;3SITc^dGl=;2cQu@#IKohI8sy*tU&d0ed&R2 zld*KowBnXje-1j(`Pa_vv^|tjXA-aWgmkjeY|Bk}8p9uQX4>#IdJGdG7VWPIzx5z5 zG++;eJQ~#v-0VT<4yzL1diu}(=Ko|q8L1gZ9pPZmWFtF{%4`=zeM zS!&Eu@esxv5?5e{#7q}Ltid=J@5WO;JT)qBD9p>hSlyQzWkZ%#U2TTMLy%EZtol`$ zBuf8*`$Y%3_&iy>gv6*HqFsCU67&{69lz6}t$wfSqpWxhV?X}k$dD85UtQdvv9sK8 zPlk7~h}JyK;e?oX<>Y_GB(*g)&067nwICG3Og)Y;qa=)-#~M`!5Qu;9YJ%8mVNmJX zOmk)^d~$jXZ0)!Bd21GT1@*D$ZnjJ`FU?&89V)lSqJ+KUz8<<=7rwYbZCHTZa9V6} zZi~@wNqUcVOGaAc(zf>|eQXiRa-ORgufe|sLe~V(6}RW_YlowY9ij(wH#untQV`Ui zvIL)Gc?kZ+M(#&gjGMb(FjXYf;@%|p17=EFXfs^~+jv5Y_Mh$Q1hMc5+`MIzpH{Ef za>G;BUyeNa;ol$OuYR9gconm{Zgi;djG&VFx)=^0t}c@oxget zddzi9j1Vy8ZRX@6-2d>Sl$p%G3}o$;vy&;)F*B6$8ga!2v}3|@amiF$9shn-s)(;9 zDa=4JcSE^klNMBFzA33Wke3n0O^fn=jA<6d@?Jj`Xrih*Yqjzu)NHjpLZ6XO@lDMm4-1sG%kkx*#52QRz47yU7!s2`Gna98L>tlF8(7R*JpbP{pb*oQ@?xNwA=*g`nJ8I2PUI!cz@|swOUzS((^MD zIOLm!eYYDH5JTH@j-K2Hvzv9>u==H=>K;|{tj~w^p~hCek4Fh04^t&5+cz@Q+^?lT zIF#m%O|_yT%?K0zQ)}k){l+@fT{vxNdwb-(^mf!#M~kbU$N5*cRS4ePv-fd)`Om2q z`Y3rRdq39iX5C7Fv1j?wcYF!7ojVN<-(^6k-ug?v0YORrosjn9pC85KUCh%lpzMQ# zZh8gVEIz`0j-EFHNnXdw;u@${;_D<6EqrfiJ2bO1tmoPsiTx-KTRTwt_2dRRP1$qT zc2I{L$O@HNeBnc8{UL?*IGX$;y#r;>yb0dLe8+&tAoPP^0ocNGDPr z(*4b%pHUmG8uYJzgcG*EoaV=fV#^??f|#m1h62w@UMBN1MNFv$YyO>mPnV_YFu7Wp z0svL&Ao|%99)IOo*Ov^`C|g%kC2{ueVAu-!VDWQ+?%}%Rd>?>3R(`1xXX#-D0VRN3 znOp0T7s%rKntB9|7kH+4t=INfhAlpSF$?pAw+_@@;a~Xx#<9Jt5Wf5uvq*LILH>)c zm`fY;v)tI_*~=fIcP`GX`80ZFCmBxGMO6Qj|63dV=eln@mT9q=e@R}WjF{I>Y#V+F zf>$oW03t8Q1NZ)JMBba7*(b$4K)Xm~b$=7IFxFZh4~&1rpP@rmM#s1x)Rr z8w`I`baJc=OXib(Zp(lNAcknk=O|;v)r;j{N#w*p6HfX+YUAgL4tI!!nvbZowW2sj zzIZL8DFNK0VeVA{5YUJAik_`ffjcsJsf7>mM384uwarscj0~;Hb05!s?P_cl=F=YF zq#bfvU$$eVM5)bbCOcDktfJHIhkrBkfeY43s&Hi0J-@umf|&<-Y@iPcvk!gvu`y)J z&GFUU18R=#sX8vfr;81u@WqHoy);{HLshREK7%LTIjWSm0|rwzCtUpHjY>y3u=CT< z(Fd7Z`!`*zuVFW`v?D?;xB5yT4lF+KMK^6KBi?n_hv85voGKu>c~3LB_cXngvrA2| z{oFvb@O8a1r84#y``3CJdS3eFXSQ|Uv(49M0x|Wd?)OO7Wzeff4F>SmrV!8OC=Ro?fj?SbcJN970*e95XlOdD!VX=o0~5M6&^Cgx0moqw5=7 zFQhV*F}zV#??Wzc*klJ>I}n|!T0t*sDSsxz*{%HxtV%AtJFay01l}2IQ+7997`rpz zxq9w};Bw@z-b}M4BaHw4KFJ%<4VeR@6@V{+e{KqESr2RZiP_t|n3h<>Z=-Ac;X&mY zy5iJXO~U9(2;vIzx{~Ahzig57RP?491Q`fl6XK(|R{lI;dNu5a-QsqT>i9xnVJOwLwhyeWTdZ}P9$BXiJv@Z8Px8YbWTmDgp#Uml zuVY*y(zfOvy2coSl=!5>3}ksIwUQHwpp9=&su&)ZVCfhTfl8zhRqEN;^j2!XVfGWy zk9==IffA?3TKwI6Hg~_~W9!yV*Y3pV~eVEd4F14*S)^v;9SM z8c*ND!x1`d02TdT@aLw$yrV^dkA{jBAIh}0X6}r1ypPnpduTPE`}L@~Jhhe+Uv&P1 z&s=PMnd8gG3g>mwLmj|C|5Re+y#*cWNPcmkMi&wphI=L2$7l7-J9u|j>)BA3*`fv& zkafdveL5zFJ$h6TbRz zGsEu2zBm{szAoc$!du2jSQg!sb1ASufYkXL`=K7l zzy+OiT_;J_U|flNVB&~*`y!yXl=LqmAfPEBfL)zT9j>NWO>p*WZY8%a0SJ*$LLi{> zF#G4c5f}x2go4+rm4xQ`yx_HFMUPt0pbY7-Ukx9uVGrL-b&IZ_989m3--fSU`O#$k zIP1^#^7>9^z*w3Edo%l*-|kxP?wiJo$8HsAdJISk5b>p+90$$Yu1#1=pE^NkuL-7Aes~Fp67@ zhMk{_#t;Xw%#Y}}YEFZaxFc2z+o5$}F63|Py3NJJxwy05lzWKC-AjMXda67#u+3m8O3*HL<;yoAPhWO8KCAm0K6)ILG3Sj2L(#TK%w&gJbgghzcCnxuK2_p!3_nCb;v(qdom$y*Hb4ypMAAof(d=mQ!(N1z}Tr~t` zA+5A%#7kCE951oy_D3Ho>%L!m)e!i`H3*2Y;|;k- zFKDiBU|r+}A;l2eaK@hw_iO-YZlfbSIn$N^2!%Q9tnlGE_eC&LAA55Q9<+ViEBNVF$P66?)LvshwGGRC z82_)OR3#>fyks8U(cVn2&AEd^EK|iou{*KR_h!&F9^UL#FR-iL2jt!$cMc>9d-D*U zO~_@II?42ybLYTp9F#ekRU5yC;%7Wn3t|t(bk6fX(Eg-|2^HorgrKE)0b?1J{4t?h zWm?#N7J5aP6~|=2Yq?76-y^C|VHg^$6_6DI*$*I<4#*{Qm{8o5Sz&~Wt2M+Xe*g-> zw>>{Ou-+pQ&Rrqc9jZ@<#pUn$X5z-jGS6NCpKy zm6yl9;qrYOr=C|+aCL4 zHF(t(k~L{C%u68jHYkYw&2Sqnba7InRc9}Q9GLOX$;{g@sB;8k?!80XC@B7B=qBH= z#Es}gB3afl_e*CLq%DtIpcWWE!bC_*UgrL1L_b%0A8Rp_)I&vZC*SDr%#P3sTUE*w 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 literal 0 HcmV?d00001 diff --git a/slides/images/io2013_logo.png b/slides/images/io2013_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..1cdb4f4bec20962b3a4fd155d182eadec7506cc5 GIT binary patch literal 5153 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 nt8@XecOXm}ux2{{<=+dQO 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 + +
+

+

+

+
+ + +{% for slide in slides %} + + {% if 'segue' in slide.class %} + +
+

{{- slide.title -}}

+

{{- slide.subtitle -}}

+
+ {% else %} +
+

{{- slide.title -}}

+

{{- slide.subtitle -}}

+
+
+ {{- slide.content -}} +
+ {% endif %} +
+{% endfor %} + + + +
+

<Thank You!>

+

Important contact information goes here.

+
+

+ +

+
+ + + + + + + + + + + + diff --git a/slides/scripts/md/render.py b/slides/scripts/md/render.py new file mode 100755 index 0000000..a035b90 --- /dev/null +++ b/slides/scripts/md/render.py @@ -0,0 +1,57 @@ +#!/usr/bin/env python + +import codecs +import re +import jinja2 +import markdown + +def process_slides(): + with codecs.open('../../presentation-output.html', 'w', encoding='utf8') as outfile: + md = codecs.open('slides.md', encoding='utf8').read() + md_slides = md.split('\n---\n') + print 'Compiled %s slides.' % len(md_slides) + + slides = [] + # Process each slide separately. + for md_slide in md_slides: + slide = {} + sections = md_slide.split('\n\n') + # Extract metadata at the beginning of the slide (look for key: value) + # pairs. + metadata_section = sections[0] + metadata = parse_metadata(metadata_section) + slide.update(metadata) + remainder_index = metadata and 1 or 0 + # Get the content from the rest of the slide. + content_section = '\n\n'.join(sections[remainder_index:]) + html = markdown.markdown(content_section) + slide['content'] = postprocess_html(html, metadata) + + slides.append(slide) + + template = jinja2.Template(open('base.html').read()) + + outfile.write(template.render(locals())) + +def parse_metadata(section): + """Given the first part of a slide, returns metadata associated with it.""" + metadata = {} + metadata_lines = section.split('\n') + for line in metadata_lines: + colon_index = line.find(':') + if colon_index != -1: + key = line[:colon_index].strip() + val = line[colon_index + 1:].strip() + metadata[key] = val + + return metadata + +def postprocess_html(html, metadata): + """Returns processed HTML to fit into the slide template format.""" + if metadata.get('build_lists') and metadata['build_lists'] == 'true': + html = html.replace('
    ', '
      ') + html = html.replace('
        ', '
          ') + return html + +if __name__ == '__main__': + process_slides() diff --git a/slides/scripts/md/slides.md b/slides/scripts/md/slides.md new file mode 100644 index 0000000..f8155ac --- /dev/null +++ b/slides/scripts/md/slides.md @@ -0,0 +1,78 @@ +title: Slide Title +subtitle: Subtitle +class: image + +![Mobile vs desktop users](image.png) + +--- + +title: Segue Slide +subtitle: Subtitle +class: segue dark nobackground + +--- + +title: Agenda +class: big +build_lists: true + +Things we'll cover (list should build): + +- Bullet1 +- Bullet2 +- Bullet3 + +--- + +title: Today +class: nobackground fill + +![Many kinds of devices.](image.png) + +
          source: place source info here
          + +--- + +title: Big Title Slide +class: title-slide + +--- + +title: Code Example + +Media Queries are sweet: + +
          +@media screen and (max-width: 640px) {
          +  #sidebar { display: none; }
          +}
          +
          + +--- + +title: Once more, with JavaScript + +
          +function isSmall() {
          +  return window.matchMedia("(min-device-width: ???)").matches;
          +}
          +
          +function hasTouch() {
          +  return Modernizr.touch;
          +}
          +
          +function detectFormFactor() {
          +  var device = DESKTOP;
          +  if (hasTouch()) {
          +    device = isSmall() ? PHONE : TABLET;
          +  }
          +  return device;
          +}
          +
          + +--- + +title: Centered content +content_class: flexbox vcenter + +This content should be centered! diff --git a/slides/serve.sh b/slides/serve.sh new file mode 100755 index 0000000..f2692fe --- /dev/null +++ b/slides/serve.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# +# Starts a basic web server on the port specified. +# +# ./serve.sh 3000 -> http://localhost:3000 +# +# Copyright 2012 Eric Bidelman + +port=$1 +if [ $# -ne 1 ] +then + port=8000 +fi + +if [ $(uname -s) == "Darwin" ] +then + open=open +else + open=xdg-open +fi + +$open http://localhost:$port/template.html && python -m SimpleHTTPServer $port; diff --git a/slides/slide_config.js b/slides/slide_config.js new file mode 100644 index 0000000..a849147 --- /dev/null +++ b/slides/slide_config.js @@ -0,0 +1,37 @@ +var SLIDE_CONFIG = { + // Slide settings + settings: { + title: 'Title Goes Here
          Up To Two Lines', + subtitle: 'Subtitle Goes Here', + //eventTitle: 'Google I/O 2013', + useBuilds: true, // Default: true. False will turn off slide animation builds. + usePrettify: true, // Default: true + enableSlideAreas: true, // Default: true. False turns off the click areas on either slide of the slides. + enableTouch: true, // Default: true. If touch support should enabled. Note: the device must support touch. + //analytics: 'UA-XXXXXXXX-1', // TODO: Using this breaks GA for some reason (probably requirejs). Update your tracking code in template.html instead. + favIcon: 'images/google_developers_logo_tiny.png', + fonts: [ + 'Open Sans:regular,semibold,italic,italicsemibold', + 'Source Code Pro' + ], + //theme: ['mytheme'], // Add your own custom themes or styles in /theme/css. Leave off the .css extension. + }, + + // Author information + presenters: [{ + name: 'Firstname Lastname', + company: 'Job Title, Google', + gplus: 'http://plus.google.com/1234567890', + twitter: '@yourhandle', + www: 'http://www.you.com', + github: 'http://github.com/you' + }/*, { + name: 'Second Name', + company: 'Job Title, Google', + gplus: 'http://plus.google.com/1234567890', + twitter: '@yourhandle', + www: 'http://www.you.com', + github: 'http://github.com/you' + }*/] +}; + diff --git a/slides/template.html b/slides/template.html new file mode 100644 index 0000000..93eb2a0 --- /dev/null +++ b/slides/template.html @@ -0,0 +1,416 @@ + + + + + + + + + + + + + + + + + + + + + + +
          + +
          +
          + + + + +
          +

          +

          +

          +
          +
          + + +
          +

          Slide with Bullets

          +
          +
          +
            +
          • Titles are formatted as Open Sans with bold applied and font size is set at 45
          • +
          • Title capitalization is title case +
              +
            • Subtitle capitalization is title case
            • +
            +
          • +
          • Subtitle capitalization is title case
          • +
          • Titles and subtitles should never have a period at the end
          • +
          +
          +
          + + +
          +

          Slide with Bullets that Build

          +

          Subtitle Placeholder

          +
          +
          +

          A list where items build:

          +
            +
          • Pressing 'h' highlights code snippets
          • +
          • Pressing 'p' toggles speaker notes (if they're on the current slide)
          • +
          • Pressing 'f' toggles fullscreen viewing
          • +
          • Pressing 'w' toggles widescreen
          • +
          • Pressing 'o' toggles overview mode
          • +
          • Pressing 'ESC' toggles off these goodies
          • +
          +

          Another list, but items fade as they build:

          +
            +
          • Hover over me!
          • +
          • Hover over me!
          • +
          • Hover over me!
          • +
          +
          +
          + + +
          +

          Slide with (Smaller Font)

          +
          +
          +
            +
          • All links open in new tabs.
          • +
          • To change that this, add target="_self" to the link.
          • +
          +
          +
          + + + + +
          +

          Code Slide (with Subtitle Placeholder)

          +

          Subtitle Placeholder

          +
          +
          +

          Press 'h' to highlight important sections of code (wrapped in <b>).

          +
          +<script type='text/javascript'>
          +  // Say hello world until the user starts questioning
          +  // the meaningfulness of their existence.
          +  function helloWorld(world) {
          +    for (var i = 42; --i >= 0;) {
          +      alert('Hello ' + String(world));
          +    }
          +  }
          +</script>
          +
          +
          +
          + + +
          +

          Code Slide (Smaller Font)

          +
          +
          +
          +// Say hello world until the user starts questioning
          +// the meaningfulness of their existence.
          +function helloWorld(world) {
          +  for (var i = 42; --i >= 0;) {
          +    alert('Hello ' + String(world));
          +  }
          +}
          +
          +
          +<style>
          +  p { color: pink }
          +  b { color: blue }
          +</style>
          +
          +
          +<!DOCTYPE html>
          +<html>
          +<head>
          +  <title>My Awesome Page</title>
          +</head>
          +<body>
          +  <p>Hello world</p>
          +<body>
          +</html>
          +
          +
          +
          + + + +
          +

          Slide with Speaker Notes

          +
          +
          +

          Press 'p' to toggle speaker notes.

          +
          +
          + + + +
          +

          Presenter Mode

          +
          +
          +

          Add ?presentme=true to the URL to enabled presenter mode. + This setting is sticky, meaning refreshing the page will persist presenter + mode.

          +

          Hit ?presentme=false to disable presenter mode.

          +
          +
          + + +
          +

          Slide with Image

          +
          +
          + Description +
          source: place source info here
          +
          +
          + + +
          +

          Slide with Image (Centered horz/vert)

          +
          +
          + Description +
          source: place source info here
          +
          +
          + + +
          +

          Table Option A

          +

          Subtitle Placeholder

          +
          +
          + + + + + + + + + + + + + + + + + + + +
          Column 1Column 2Column 3Column 4
          Row 1placeholderplaceholderplaceholderplaceholder
          Row 2placeholderplaceholderplaceholderplaceholder
          Row 3placeholderplaceholderplaceholderplaceholder
          Row 4placeholderplaceholderplaceholderplaceholder
          Row 5placeholderplaceholderplaceholderplaceholder
          +
          +
          + + +
          +

          Table Option A (Smaller Text)

          +

          Subtitle Placeholder

          +
          +
          + + + + + + + + + + + + + + + + + + + +
          Column 1Column 2Column 3Column 4
          Row 1placeholderplaceholderplaceholderplaceholder
          Row 2placeholderplaceholderplaceholderplaceholder
          Row 3placeholderplaceholderplaceholderplaceholder
          Row 4placeholderplaceholderplaceholderplaceholder
          Row 5placeholderplaceholderplaceholderplaceholder
          +
          +
          + + +
          +

          Table Option B

          +

          Subtitle Placeholder

          +
          +
          + + + + + + + + + + + + + + + + +
          Header 1placeholderplaceholderplaceholder
          Header 2placeholderplaceholderplaceholder
          Header 3placeholderplaceholderplaceholder
          Header 4placeholderplaceholderplaceholder
          Header 5placeholderplaceholderplaceholder
          +
          +
          + + +
          +

          Slide Styles

          +
          +
          +
          +
            +
          • class="red"
          • +
          • class="red2"
          • +
          • class="red3"
          • +
          • class="blue"
          • +
          • class="blue2"
          • +
          • class="blue3"
          • +
          • class="green"
          • +
          • class="green2"
          • +
          +
            +
          • class="green3"
          • +
          • class="yellow"
          • +
          • class="yellow2"
          • +
          • class="yellow3"
          • +
          • class="gray"
          • +
          • class="gray2"
          • +
          • class="gray3"
          • +
          • class="gray4"
          • +
          +
          +
          + I am centered text with a and button. +
          +
          +
          + + + +
          +

          Segue Slide

          +

          Subtitle Placeholder

          +
          +
          + + +
          +

          Full Image (with Optional Header)

          +
          +
          www.flickr.com/photos/25797459@N06/5438799763/
          +
          + + + +
          + + This is an example of quote text. + +
          + Name
          + Company +
          +
          +
          + + +
          +

          Slide with Iframe

          +
          +
          + +
          +
          + + +
          + +
          +
          + + + +
          +

          <Thank You!>

          +

          Important contact information goes here.

          +
          +

          + +

          +
          + + +
          + +
          +
          + + + +
          + + + + + + diff --git a/slides/theme/css/default.css b/slides/theme/css/default.css new file mode 100644 index 0000000..ec23aea --- /dev/null +++ b/slides/theme/css/default.css @@ -0,0 +1,1492 @@ +@charset "UTF-8"; +/* line 17, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { + margin: 0; + padding: 0; + border: 0; + font: inherit; + font-size: 100%; + vertical-align: baseline; +} + +/* line 22, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +html { + line-height: 1; +} + +/* line 24, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +ol, ul { + list-style: none; +} + +/* line 26, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +table { + border-collapse: collapse; + border-spacing: 0; +} + +/* line 28, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +caption, th, td { + text-align: left; + font-weight: normal; + vertical-align: middle; +} + +/* line 30, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q, blockquote { + quotes: none; +} +/* line 103, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +q:before, q:after, blockquote:before, blockquote:after { + content: ""; + content: none; +} + +/* line 32, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +a img { + border: none; +} + +/* line 116, ../../../../../../Library/Ruby/Gems/1.8/gems/compass-0.12.2/frameworks/compass/stylesheets/compass/reset/_utilities.scss */ +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { + display: block; +} + +/** + * Base SlideDeck Styles + */ +/* line 50, ../scss/_base.scss */ +html { + height: 100%; + overflow: hidden; +} + +/* line 55, ../scss/_base.scss */ +body { + margin: 0; + padding: 0; + opacity: 0; + height: 100%; + min-height: 740px; + width: 100%; + overflow: hidden; + color: #fff; + -webkit-font-smoothing: antialiased; + -moz-font-smoothing: antialiased; + -ms-font-smoothing: antialiased; + -o-font-smoothing: antialiased; + -webkit-transition: opacity 800ms ease-in; + -webkit-transition-delay: 100ms; + -moz-transition: opacity 800ms ease-in 100ms; + -o-transition: opacity 800ms ease-in 100ms; + transition: opacity 800ms ease-in 100ms; +} +/* line 71, ../scss/_base.scss */ +body.loaded { + opacity: 1 !important; +} + +/* line 76, ../scss/_base.scss */ +input, button { + vertical-align: middle; +} + +/* line 80, ../scss/_base.scss */ +slides > slide[hidden] { + display: none !important; +} + +/* line 84, ../scss/_base.scss */ +slides { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + -webkit-transform: translate3d(0, 0, 0); + -moz-transform: translate3d(0, 0, 0); + -ms-transform: translate3d(0, 0, 0); + -o-transform: translate3d(0, 0, 0); + transform: translate3d(0, 0, 0); + -webkit-perspective: 1000; + -moz-perspective: 1000; + -ms-perspective: 1000; + -o-perspective: 1000; + perspective: 1000; + -webkit-transform-style: preserve-3d; + -moz-transform-style: preserve-3d; + -ms-transform-style: preserve-3d; + -o-transform-style: preserve-3d; + transform-style: preserve-3d; + -webkit-transition: opacity 800ms ease-in; + -webkit-transition-delay: 100ms; + -moz-transition: opacity 800ms ease-in 100ms; + -o-transition: opacity 800ms ease-in 100ms; + transition: opacity 800ms ease-in 100ms; +} + +/* line 96, ../scss/_base.scss */ +slides > slide { + display: block; + position: absolute; + overflow: hidden; + left: 50%; + top: 50%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* Slide styles */ +/*article.fill iframe { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + + border: 0; + margin: 0; + + @include border-radius(10px); + + z-index: -1; +} + +slide.fill { + background-repeat: no-repeat; + @include background-size(cover); +} + +slide.fill img { + position: absolute; + left: 0; + top: 0; + min-width: 100%; + min-height: 100%; + + z-index: -1; +} +*/ +/** + * Theme Styles + */ +/* line 58, ../scss/default.scss */ +::selection { + color: white; + background-color: #ffd14d; + text-shadow: none; +} + +/* line 64, ../scss/default.scss */ +::-webkit-scrollbar { + height: 16px; + overflow: visible; + width: 16px; +} + +/* line 69, ../scss/default.scss */ +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, 0.1); + background-clip: padding-box; + border: solid transparent; + min-height: 28px; + padding: 100px 0 0; + -webkit-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.07); + -moz-box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.07); + box-shadow: inset 1px 1px 0 rgba(0, 0, 0, 0.1), inset 0 -1px 0 rgba(0, 0, 0, 0.07); + border-width: 1px 1px 1px 6px; +} + +/* line 78, ../scss/default.scss */ +::-webkit-scrollbar-thumb:hover { + background-color: rgba(0, 0, 0, 0.5); +} + +/* line 81, ../scss/default.scss */ +::-webkit-scrollbar-button { + height: 0; + width: 0; +} + +/* line 85, ../scss/default.scss */ +::-webkit-scrollbar-track { + background-clip: padding-box; + border: solid transparent; + border-width: 0 0 0 4px; +} + +/* line 90, ../scss/default.scss */ +::-webkit-scrollbar-corner { + background: transparent; +} + +/* line 94, ../scss/default.scss */ +body { + background: black; +} + +/* line 98, ../scss/default.scss */ +slides > slide { + display: none; + font-family: "Open Sans", Arial, sans-serif; + font-size: 26px; + color: #797979; + width: 900px; + height: 700px; + margin-left: -450px; + margin-top: -350px; + padding: 40px 60px; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-transition: all 0.6s ease-in-out; + -moz-transition: all 0.6s ease-in-out; + -o-transition: all 0.6s ease-in-out; + transition: all 0.6s ease-in-out; +} +/* line 119, ../scss/default.scss */ +slides > slide.far-past { + display: none; +} +/* line 126, ../scss/default.scss */ +slides > slide.past { + display: block; + opacity: 0; +} +/* line 133, ../scss/default.scss */ +slides > slide.current { + display: block; + opacity: 1; +} +/* line 139, ../scss/default.scss */ +slides > slide.current .auto-fadein { + opacity: 1; +} +/* line 143, ../scss/default.scss */ +slides > slide.current .gdbar { + -webkit-background-size: 100% 100%; + -moz-background-size: 100% 100%; + -o-background-size: 100% 100%; + background-size: 100% 100%; +} +/* line 148, ../scss/default.scss */ +slides > slide.next { + display: block; + opacity: 0; + pointer-events: none; +} +/* line 156, ../scss/default.scss */ +slides > slide.far-next { + display: none; +} +/* line 163, ../scss/default.scss */ +slides > slide.dark { + background: #515151 !important; +} +/* line 171, ../scss/default.scss */ +slides > slide:not(.nobackground):before { + font-size: 12pt; + content: "#yourhashtag"; + position: absolute; + bottom: 20px; + left: 60px; + background: url(../../images/google_developers_icon_128.png) no-repeat 0 50%; + -webkit-background-size: 30px 30px; + -moz-background-size: 30px 30px; + -o-background-size: 30px 30px; + background-size: 30px 30px; + padding-left: 40px; + height: 30px; + line-height: 1.9; +} +/* line 183, ../scss/default.scss */ +slides > slide:not(.nobackground):after { + font-size: 12pt; + content: attr(data-slide-num) "/" attr(data-total-slides); + position: absolute; + bottom: 20px; + right: 60px; + line-height: 1.9; +} +/* line 194, ../scss/default.scss */ +slides > slide.title-slide:after { + content: ''; + /* background: url(../../images/io2012_logo.png) no-repeat 100% 50%; */ + /* background: url(../../images/io2013_logo.png) no-repeat 100% 50%; */ + -webkit-background-size: contain; + -moz-background-size: contain; + -o-background-size: contain; + background-size: contain; + position: absolute; + bottom: 40px; + right: 40px; + width: 100%; + height: 60px; +} +/* line 206, ../scss/default.scss */ +slides > slide.backdrop { + z-index: -10; + display: block !important; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(85%, #ffffff), color-stop(100%, #e6e6e6)); + background: -webkit-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -moz-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -o-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background-color: white; +} +/* line 211, ../scss/default.scss */ +slides > slide.backdrop:after, slides > slide.backdrop:before { + display: none; +} +/* line 216, ../scss/default.scss */ +slides > slide > hgroup + article { + margin-top: 45px; +} +/* line 220, ../scss/default.scss */ +slides > slide > hgroup + article.flexbox.vcenter, slides > slide > hgroup + article.flexbox.vleft, slides > slide > hgroup + article.flexbox.vright { + height: 80%; +} +/* line 225, ../scss/default.scss */ +slides > slide > hgroup + article p { + margin-bottom: 1em; +} +/* line 230, ../scss/default.scss */ +slides > slide > article:only-child { + height: 100%; +} +/* line 233, ../scss/default.scss */ +slides > slide > article:only-child > iframe { + height: 98%; +} + +/* line 239, ../scss/default.scss */ +slides.layout-faux-widescreen > slide { + padding: 40px 160px; +} + +/* line 248, ../scss/default.scss */ +slides.layout-widescreen > slide, +slides.layout-faux-widescreen > slide { + margin-left: -550px; + width: 1100px; +} +/* line 253, ../scss/default.scss */ +slides.layout-widescreen > slide.far-past, +slides.layout-faux-widescreen > slide.far-past { + display: block; + display: none; + -webkit-transform: translate(-2260px); + -moz-transform: translate(-2260px); + -ms-transform: translate(-2260px); + -o-transform: translate(-2260px); + transform: translate(-2260px); + -webkit-transform: translate3d(-2260px, 0, 0); + -moz-transform: translate3d(-2260px, 0, 0); + -ms-transform: translate3d(-2260px, 0, 0); + -o-transform: translate3d(-2260px, 0, 0); + transform: translate3d(-2260px, 0, 0); +} +/* line 260, ../scss/default.scss */ +slides.layout-widescreen > slide.past, +slides.layout-faux-widescreen > slide.past { + display: block; + opacity: 0; +} +/* line 267, ../scss/default.scss */ +slides.layout-widescreen > slide.current, +slides.layout-faux-widescreen > slide.current { + display: block; + opacity: 1; +} +/* line 274, ../scss/default.scss */ +slides.layout-widescreen > slide.next, +slides.layout-faux-widescreen > slide.next { + display: block; + opacity: 0; + pointer-events: none; +} +/* line 282, ../scss/default.scss */ +slides.layout-widescreen > slide.far-next, +slides.layout-faux-widescreen > slide.far-next { + display: block; + display: none; + -webkit-transform: translate(2260px); + -moz-transform: translate(2260px); + -ms-transform: translate(2260px); + -o-transform: translate(2260px); + transform: translate(2260px); + -webkit-transform: translate3d(2260px, 0, 0); + -moz-transform: translate3d(2260px, 0, 0); + -ms-transform: translate3d(2260px, 0, 0); + -o-transform: translate3d(2260px, 0, 0); + transform: translate3d(2260px, 0, 0); +} +/* line 289, ../scss/default.scss */ +slides.layout-widescreen #prev-slide-area, +slides.layout-faux-widescreen #prev-slide-area { + margin-left: -650px; +} +/* line 293, ../scss/default.scss */ +slides.layout-widescreen #next-slide-area, +slides.layout-faux-widescreen #next-slide-area { + margin-left: 550px; +} + +/* line 298, ../scss/default.scss */ +b { + font-weight: 600; +} + +/* line 302, ../scss/default.scss */ +a { + color: #2a7cdf; + text-decoration: none; + border-bottom: 1px solid rgba(42, 124, 223, 0.5); +} +/* line 307, ../scss/default.scss */ +a:hover { + color: black !important; +} + +/* line 312, ../scss/default.scss */ +h1, h2, h3 { + font-weight: 600; +} + +/* line 316, ../scss/default.scss */ +h2 { + font-size: 45px; + line-height: 45px; + letter-spacing: -2px; + color: #515151; +} + +/* line 323, ../scss/default.scss */ +h3 { + font-size: 30px; + letter-spacing: -1px; + line-height: 2; + font-weight: inherit; + color: #797979; +} + +/* line 331, ../scss/default.scss */ +ul { + margin-left: 1.2em; + margin-bottom: 1em; + position: relative; +} +/* line 336, ../scss/default.scss */ +ul li { + margin-bottom: 0.5em; +} +/* line 339, ../scss/default.scss */ +ul li ul { + margin-left: 2em; + margin-bottom: 0; +} +/* line 343, ../scss/default.scss */ +ul li ul li:before { + content: '-'; + font-weight: 600; +} +/* line 350, ../scss/default.scss */ +ul > li:before { + content: '\00B7'; + margin-left: -1em; + position: absolute; + font-weight: 600; +} +/* line 357, ../scss/default.scss */ +ul ul { + margin-top: .5em; +} + +/* line 364, ../scss/default.scss */ +.highlight-code slide.current pre > * { + opacity: 0.25; + -webkit-transition: opacity 0.5s ease-in; + -moz-transition: opacity 0.5s ease-in; + -o-transition: opacity 0.5s ease-in; + transition: opacity 0.5s ease-in; +} +/* line 368, ../scss/default.scss */ +.highlight-code slide.current b { + opacity: 1; +} + +/* line 373, ../scss/default.scss */ +pre { + font-family: "Source Code Pro", "Courier New", monospace; + font-size: 20px; + line-height: 28px; + padding: 10px 0 10px 60px; + letter-spacing: -1px; + margin-bottom: 20px; + width: 106%; + background-color: #e6e6e6; + left: -60px; + position: relative; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + /*overflow: hidden;*/ +} +/* line 387, ../scss/default.scss */ +pre[data-lang]:after { + content: attr(data-lang); + background-color: darkgrey; + right: 0; + top: 0; + position: absolute; + font-size: 16pt; + color: white; + padding: 2px 25px; + text-transform: uppercase; +} + +/* line 400, ../scss/default.scss */ +pre[data-lang="go"] { + color: #333; +} + +/* line 404, ../scss/default.scss */ +code { + font-size: 95%; + font-family: "Source Code Pro", "Courier New", monospace; + color: black; +} + +/* line 410, ../scss/default.scss */ +iframe { + width: 100%; + height: 530px; + background: white; + border: 1px solid #e6e6e6; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} + +/* line 418, ../scss/default.scss */ +dt { + font-weight: bold; +} + +/* line 422, ../scss/default.scss */ +button { + display: inline-block; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(40%, #f9f9f9), color-stop(70%, #e3e3e3)); + background: -webkit-linear-gradient(#f9f9f9 40%, #e3e3e3 70%); + background: -moz-linear-gradient(#f9f9f9 40%, #e3e3e3 70%); + background: -o-linear-gradient(#f9f9f9 40%, #e3e3e3 70%); + background: linear-gradient(#f9f9f9 40%, #e3e3e3 70%); + border: 1px solid darkgrey; + -webkit-border-radius: 3px; + -moz-border-radius: 3px; + -ms-border-radius: 3px; + -o-border-radius: 3px; + border-radius: 3px; + padding: 5px 8px; + outline: none; + white-space: nowrap; + -webkit-user-select: none; + -moz-user-select: none; + user-select: none; + cursor: pointer; + text-shadow: 1px 1px white; + font-size: 10pt; +} + +/* line 436, ../scss/default.scss */ +button:not(:disabled):hover { + border-color: #515151; +} + +/* line 440, ../scss/default.scss */ +button:not(:disabled):active { + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(40%, #e3e3e3), color-stop(70%, #f9f9f9)); + background: -webkit-linear-gradient(#e3e3e3 40%, #f9f9f9 70%); + background: -moz-linear-gradient(#e3e3e3 40%, #f9f9f9 70%); + background: -o-linear-gradient(#e3e3e3 40%, #f9f9f9 70%); + background: linear-gradient(#e3e3e3 40%, #f9f9f9 70%); +} + +/* line 444, ../scss/default.scss */ +:disabled { + color: darkgrey; +} + +/* line 448, ../scss/default.scss */ +.blue { + color: #4387fd; +} + +/* line 451, ../scss/default.scss */ +.blue2 { + color: #3c8ef3; +} + +/* line 454, ../scss/default.scss */ +.blue3 { + color: #2a7cdf; +} + +/* line 457, ../scss/default.scss */ +.yellow { + color: #ffd14d; +} + +/* line 460, ../scss/default.scss */ +.yellow2 { + color: #f9cc46; +} + +/* line 463, ../scss/default.scss */ +.yellow3 { + color: #f6c000; +} + +/* line 466, ../scss/default.scss */ +.green { + color: #0da861; +} + +/* line 469, ../scss/default.scss */ +.green2 { + color: #00a86d; +} + +/* line 472, ../scss/default.scss */ +.green3 { + color: #009f5d; +} + +/* line 475, ../scss/default.scss */ +.red { + color: #f44a3f; +} + +/* line 478, ../scss/default.scss */ +.red2 { + color: #e0543e; +} + +/* line 481, ../scss/default.scss */ +.red3 { + color: #d94d3a; +} + +/* line 484, ../scss/default.scss */ +.gray { + color: #e6e6e6; +} + +/* line 487, ../scss/default.scss */ +.gray2 { + color: darkgrey; +} + +/* line 490, ../scss/default.scss */ +.gray3 { + color: #797979; +} + +/* line 493, ../scss/default.scss */ +.gray4 { + color: #515151; +} + +/* line 497, ../scss/default.scss */ +.white { + color: white !important; +} + +/* line 500, ../scss/default.scss */ +.black { + color: black !important; +} + +/* line 504, ../scss/default.scss */ +.columns-2 { + -webkit-column-count: 2; + -moz-column-count: 2; + -ms-column-count: 2; + -o-column-count: 2; + column-count: 2; +} + +/* line 508, ../scss/default.scss */ +table { + width: 100%; + border-collapse: -moz-initial; + border-collapse: initial; + border-spacing: 2px; + border-bottom: 1px solid #797979; +} +/* line 515, ../scss/default.scss */ +table tr > td:first-child, table th { + font-weight: 600; + color: #515151; +} +/* line 520, ../scss/default.scss */ +table tr:nth-child(odd) { + background-color: #e6e6e6; +} +/* line 524, ../scss/default.scss */ +table th { + color: white; + font-size: 18px; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(40%, #4387fd), color-stop(80%, #2a7cdf)) no-repeat; + background: -webkit-linear-gradient(top, #4387fd 40%, #2a7cdf 80%) no-repeat; + background: -moz-linear-gradient(top, #4387fd 40%, #2a7cdf 80%) no-repeat; + background: -o-linear-gradient(top, #4387fd 40%, #2a7cdf 80%) no-repeat; + background: linear-gradient(top, #4387fd 40%, #2a7cdf 80%) no-repeat; +} +/* line 530, ../scss/default.scss */ +table td, table th { + font-size: 18px; + padding: 1em 0.5em; +} +/* line 535, ../scss/default.scss */ +table td.highlight { + color: #515151; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(40%, #ffd14d), color-stop(80%, #f6c000)) no-repeat; + background: -webkit-linear-gradient(top, #ffd14d 40%, #f6c000 80%) no-repeat; + background: -moz-linear-gradient(top, #ffd14d 40%, #f6c000 80%) no-repeat; + background: -o-linear-gradient(top, #ffd14d 40%, #f6c000 80%) no-repeat; + background: linear-gradient(top, #ffd14d 40%, #f6c000 80%) no-repeat; +} +/* line 540, ../scss/default.scss */ +table.rows { + border-bottom: none; + border-right: 1px solid #797979; +} + +/* line 546, ../scss/default.scss */ +q { + font-size: 45px; + line-height: 72px; +} +/* line 550, ../scss/default.scss */ +q:before { + content: '“'; + position: absolute; + margin-left: -0.5em; +} +/* line 555, ../scss/default.scss */ +q:after { + content: '”'; + position: absolute; + margin-left: 0.1em; +} + +/* line 562, ../scss/default.scss */ +slide.fill { + background-repeat: no-repeat; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-background-size: cover; + -moz-background-size: cover; + -o-background-size: cover; + background-size: cover; +} + +/* Size variants */ +/* line 571, ../scss/default.scss */ +article.smaller p, article.smaller ul { + font-size: 20px; + line-height: 24px; + letter-spacing: 0; +} +/* line 577, ../scss/default.scss */ +article.smaller table td, article.smaller table th { + font-size: 14px; +} +/* line 581, ../scss/default.scss */ +article.smaller pre { + font-size: 15px; + line-height: 20px; + letter-spacing: 0; +} +/* line 586, ../scss/default.scss */ +article.smaller q { + font-size: 40px; + line-height: 48px; +} +/* line 590, ../scss/default.scss */ +article.smaller q:before, article.smaller q:after { + font-size: 60px; +} + +/* Builds */ +/* line 599, ../scss/default.scss */ +.build > * { + -webkit-transition: opacity 0.5s ease-in-out; + -webkit-transition-delay: 0.2s; + -moz-transition: opacity 0.5s ease-in-out 0.2s; + -o-transition: opacity 0.5s ease-in-out 0.2s; + transition: opacity 0.5s ease-in-out 0.2s; +} +/* line 603, ../scss/default.scss */ +.build .to-build { + opacity: 0; +} +/* line 607, ../scss/default.scss */ +.build .build-fade { + opacity: 0.3; +} +/* line 610, ../scss/default.scss */ +.build .build-fade:hover { + opacity: 1.0; +} + +/* line 617, ../scss/default.scss */ +.popup .next .build .to-build { + opacity: 1; +} +/* line 621, ../scss/default.scss */ +.popup .next .build .build-fade { + opacity: 1; +} + +/* Pretty print */ +/* line 629, ../scss/default.scss */ +.prettyprint .str, +.prettyprint .atv { + /* a markup attribute value */ + color: #009f5d; +} + +/* line 633, ../scss/default.scss */ +.prettyprint .kwd, +.prettyprint .tag { + /* a markup tag name */ + color: #0066cc; +} + +/* line 636, ../scss/default.scss */ +.prettyprint .com { + /* a comment */ + color: #797979; + font-style: italic; +} + +/* line 640, ../scss/default.scss */ +.prettyprint .lit { + /* a literal value */ + color: #7f0000; +} + +/* line 645, ../scss/default.scss */ +.prettyprint .pun, +.prettyprint .opn, +.prettyprint .clo { + color: #515151; +} + +/* line 651, ../scss/default.scss */ +.prettyprint .typ, +.prettyprint .atn, +.prettyprint .dec, +.prettyprint .var { + /* a declaration; a variable name */ + color: #d94d3a; +} + +/* line 654, ../scss/default.scss */ +.prettyprint .pln { + color: #515151; +} + +/* line 658, ../scss/default.scss */ +.note { + position: absolute; + z-index: 100; + width: 100%; + height: 100%; + top: 0; + left: 0; + padding: 1em; + background: rgba(0, 0, 0, 0.3); + opacity: 0; + pointer-events: none; + display: -webkit-box !important; + display: -moz-box !important; + display: -ms-box !important; + display: -o-box !important; + display: box !important; + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + box-orient: vertical; + -webkit-box-align: center; + -moz-box-align: center; + -ms-box-align: center; + box-align: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -ms-box-pack: center; + box-pack: center; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-transform: translateY(350px); + -moz-transform: translateY(350px); + -ms-transform: translateY(350px); + -o-transform: translateY(350px); + transform: translateY(350px); + -webkit-transition: all 0.4s ease-in-out; + -moz-transition: all 0.4s ease-in-out; + -o-transition: all 0.4s ease-in-out; + transition: all 0.4s ease-in-out; +} +/* line 676, ../scss/default.scss */ +.note > section { + background: #fff; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + -webkit-box-shadow: 0 0 10px #797979; + -moz-box-shadow: 0 0 10px #797979; + box-shadow: 0 0 10px #797979; + width: 60%; + padding: 2em; +} + +/* line 693, ../scss/default.scss */ +.with-notes.popup slides.layout-widescreen slide.next, +.with-notes.popup slides.layout-faux-widescreen slide.next { + -webkit-transform: translate3d(690px, 80px, 0) scale(0.35); + -moz-transform: translate3d(690px, 80px, 0) scale(0.35); + -ms-transform: translate3d(690px, 80px, 0) scale(0.35); + -o-transform: translate3d(690px, 80px, 0) scale(0.35); + transform: translate3d(690px, 80px, 0) scale(0.35); +} +/* line 696, ../scss/default.scss */ +.with-notes.popup slides.layout-widescreen slide .note, +.with-notes.popup slides.layout-faux-widescreen slide .note { + -webkit-transform: translate3d(300px, 800px, 0) scale(1.5); + -moz-transform: translate3d(300px, 800px, 0) scale(1.5); + -ms-transform: translate3d(300px, 800px, 0) scale(1.5); + -o-transform: translate3d(300px, 800px, 0) scale(1.5); + transform: translate3d(300px, 800px, 0) scale(1.5); +} +/* line 702, ../scss/default.scss */ +.with-notes.popup slide { + overflow: visible; + background: white; + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + pointer-events: none; + -webkit-transform-origin: 0 0; + -moz-transform-origin: 0 0; + -ms-transform-origin: 0 0; + -o-transform-origin: 0 0; + transform-origin: 0 0; +} +/* line 709, ../scss/default.scss */ +.with-notes.popup slide:not(.backdrop) { + -webkit-transform: scale(0.6) translate3d(0.5em, 0.5em, 0); + -moz-transform: scale(0.6) translate3d(0.5em, 0.5em, 0); + -ms-transform: scale(0.6) translate3d(0.5em, 0.5em, 0); + -o-transform: scale(0.6) translate3d(0.5em, 0.5em, 0); + transform: scale(0.6) translate3d(0.5em, 0.5em, 0); + -webkit-box-shadow: 0 0 10px #797979; + -moz-box-shadow: 0 0 10px #797979; + box-shadow: 0 0 10px #797979; +} +/* line 714, ../scss/default.scss */ +.with-notes.popup slide.backdrop { + background-image: -webkit-gradient(radial, 50% 50%, 0, 50% 50%, 600, color-stop(0%, #b1dfff), color-stop(100%, #4387fd)); + background-image: -webkit-radial-gradient(50% 50%, #b1dfff 0%, #4387fd 600px); + background-image: -moz-radial-gradient(50% 50%, #b1dfff 0%, #4387fd 600px); + background-image: -o-radial-gradient(50% 50%, #b1dfff 0%, #4387fd 600px); + background-image: radial-gradient(50% 50%, #b1dfff 0%, #4387fd 600px); +} +/* line 720, ../scss/default.scss */ +.with-notes.popup slide.next { + -webkit-transform: translate3d(570px, 80px, 0) scale(0.35); + -moz-transform: translate3d(570px, 80px, 0) scale(0.35); + -ms-transform: translate3d(570px, 80px, 0) scale(0.35); + -o-transform: translate3d(570px, 80px, 0) scale(0.35); + transform: translate3d(570px, 80px, 0) scale(0.35); + opacity: 1 !important; +} +/* line 724, ../scss/default.scss */ +.with-notes.popup slide.next .note { + display: none !important; +} +/* line 730, ../scss/default.scss */ +.with-notes.popup .note { + width: 109%; + height: 260px; + background: #e6e6e6; + padding: 0; + -webkit-box-shadow: 0 0 10px #797979; + -moz-box-shadow: 0 0 10px #797979; + box-shadow: 0 0 10px #797979; + -webkit-transform: translate3d(250px, 800px, 0) scale(1.5); + -moz-transform: translate3d(250px, 800px, 0) scale(1.5); + -ms-transform: translate3d(250px, 800px, 0) scale(1.5); + -o-transform: translate3d(250px, 800px, 0) scale(1.5); + transform: translate3d(250px, 800px, 0) scale(1.5); + -webkit-transition: opacity 400ms ease-in-out; + -moz-transition: opacity 400ms ease-in-out; + -o-transition: opacity 400ms ease-in-out; + transition: opacity 400ms ease-in-out; +} +/* line 741, ../scss/default.scss */ +.with-notes.popup .note > section { + background: #fff; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; + -ms-border-radius: 5px; + -o-border-radius: 5px; + border-radius: 5px; + height: 100%; + width: 100%; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; + -webkit-box-shadow: none; + -moz-box-shadow: none; + box-shadow: none; + overflow: auto; + padding: 1em; +} +/* line 754, ../scss/default.scss */ +.with-notes .note { + opacity: 1; + -webkit-transform: translateY(0); + -moz-transform: translateY(0); + -ms-transform: translateY(0); + -o-transform: translateY(0); + transform: translateY(0); + pointer-events: auto; +} + +/* line 761, ../scss/default.scss */ +.source { + font-size: 14px; + color: darkgrey; + position: absolute; + bottom: 70px; + left: 60px; +} + +/* line 769, ../scss/default.scss */ +.centered { + text-align: center; +} + +/* line 773, ../scss/default.scss */ +.reflect { + -webkit-box-reflect: below 3px -webkit-linear-gradient(rgba(255, 255, 255, 0) 85%, white 150%); + -moz-box-reflect: below 3px -moz-linear-gradient(rgba(255, 255, 255, 0) 85%, white 150%); + -o-box-reflect: below 3px -o-linear-gradient(rgba(255, 255, 255, 0) 85%, white 150%); + -ms-box-reflect: below 3px -ms-linear-gradient(rgba(255, 255, 255, 0) 85%, white 150%); + box-reflect: below 3px linear-gradient(rgba(255, 255, 255, 0) 85%, #ffffff 150%); +} + +/* line 781, ../scss/default.scss */ +.flexbox { + display: -webkit-box !important; + display: -moz-box !important; + display: -ms-box !important; + display: -o-box !important; + display: box !important; +} + +/* line 785, ../scss/default.scss */ +.flexbox.vcenter { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + box-orient: vertical; + -webkit-box-align: center; + -moz-box-align: center; + -ms-box-align: center; + box-align: center; + -webkit-box-pack: center; + -moz-box-pack: center; + -ms-box-pack: center; + box-pack: center; + height: 100%; + width: 100%; +} + +/* line 791, ../scss/default.scss */ +.flexbox.vleft { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + box-orient: vertical; + -webkit-box-align: left; + -moz-box-align: left; + -ms-box-align: left; + box-align: left; + -webkit-box-pack: center; + -moz-box-pack: center; + -ms-box-pack: center; + box-pack: center; + height: 100%; + width: 100%; +} + +/* line 797, ../scss/default.scss */ +.flexbox.vright { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + box-orient: vertical; + -webkit-box-align: end; + -moz-box-align: end; + -ms-box-align: end; + box-align: end; + -webkit-box-pack: center; + -moz-box-pack: center; + -ms-box-pack: center; + box-pack: center; + height: 100%; + width: 100%; +} + +/* line 803, ../scss/default.scss */ +.auto-fadein { + -webkit-transition: opacity 0.6s ease-in; + -webkit-transition-delay: 1s; + -moz-transition: opacity 0.6s ease-in 1s; + -o-transition: opacity 0.6s ease-in 1s; + transition: opacity 0.6s ease-in 1s; + opacity: 0; +} + +/* Clickable/tappable areas */ +/* line 809, ../scss/default.scss */ +.slide-area { + z-index: 1000; + position: absolute; + left: 0; + top: 0; + width: 100px; + height: 700px; + left: 50%; + top: 50%; + cursor: pointer; + margin-top: -350px; +} + +/* line 826, ../scss/default.scss */ +#prev-slide-area { + margin-left: -550px; +} + +/* line 831, ../scss/default.scss */ +#next-slide-area { + margin-left: 450px; +} + +/* ===== SLIDE CONTENT ===== */ +/* line 839, ../scss/default.scss */ +.logoslide img { + width: 383px; + height: 92px; +} + +/* line 845, ../scss/default.scss */ +.segue { + padding: 60px 120px; +} +/* line 848, ../scss/default.scss */ +.segue h2 { + color: #e6e6e6; + font-size: 60px; +} +/* line 852, ../scss/default.scss */ +.segue h3 { + color: #e6e6e6; + line-height: 2.8; +} +/* line 856, ../scss/default.scss */ +.segue hgroup { + position: absolute; + bottom: 225px; +} + +/* line 862, ../scss/default.scss */ +.thank-you-slide { + background: #4387fd !important; + color: white; +} +/* line 866, ../scss/default.scss */ +.thank-you-slide h2 { + font-size: 60px; + color: inherit; +} +/* line 871, ../scss/default.scss */ +.thank-you-slide article > p { + margin-top: 2em; + font-size: 20pt; +} +/* line 876, ../scss/default.scss */ +.thank-you-slide > p { + position: absolute; + bottom: 80px; + font-size: 24pt; + line-height: 1.3; +} + +/* line 884, ../scss/default.scss */ +aside.gdbar { + height: 97px; + width: 215px; + position: absolute; + left: -1px; + top: 125px; + -webkit-border-radius: 0 10px 10px 0; + -moz-border-radius: 0 10px 10px 0; + -ms-border-radius: 0 10px 10px 0; + -o-border-radius: 0 10px 10px 0; + border-radius: 0 10px 10px 0; + background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #e6e6e6), color-stop(100%, #e6e6e6)) no-repeat; + background: -webkit-linear-gradient(left, #e6e6e6, #e6e6e6) no-repeat; + background: -moz-linear-gradient(left, #e6e6e6, #e6e6e6) no-repeat; + background: -o-linear-gradient(left, #e6e6e6, #e6e6e6) no-repeat; + background: linear-gradient(left, #e6e6e6, #e6e6e6) no-repeat; + -webkit-background-size: 0% 100%; + -moz-background-size: 0% 100%; + -o-background-size: 0% 100%; + background-size: 0% 100%; + -webkit-transition: all 0.5s ease-out; + -webkit-transition-delay: 0.5s; + -moz-transition: all 0.5s ease-out 0.5s; + -o-transition: all 0.5s ease-out 0.5s; + transition: all 0.5s ease-out 0.5s; + /* Better to transition only on background-size, but not sure how to do that with the mixin. */ +} +/* line 895, ../scss/default.scss */ +aside.gdbar.right { + right: 0; + left: -moz-initial; + left: initial; + top: 254px; + /* 96 is height of gray icon bar */ + -webkit-transform: rotateZ(180deg); + -moz-transform: rotateZ(180deg); + -ms-transform: rotateZ(180deg); + -o-transform: rotateZ(180deg); + transform: rotateZ(180deg); +} +/* line 902, ../scss/default.scss */ +aside.gdbar.right img { + -webkit-transform: rotateZ(180deg); + -moz-transform: rotateZ(180deg); + -ms-transform: rotateZ(180deg); + -o-transform: rotateZ(180deg); + transform: rotateZ(180deg); +} +/* line 907, ../scss/default.scss */ +aside.gdbar.bottom { + top: -moz-initial; + top: initial; + bottom: 60px; +} +/* line 913, ../scss/default.scss */ +aside.gdbar img { + width: 85px; + height: 85px; + position: absolute; + right: 0; + margin: 8px 15px; +} + +/* line 924, ../scss/default.scss */ +.title-slide hgroup { + bottom: 100px; +} +/* line 927, ../scss/default.scss */ +.title-slide hgroup h1 { + font-size: 65px; + line-height: 1.4; + letter-spacing: -3px; + color: #515151; +} +/* line 934, ../scss/default.scss */ +.title-slide hgroup h2 { + font-size: 34px; + color: darkgrey; + font-weight: inherit; +} +/* line 940, ../scss/default.scss */ +.title-slide hgroup p { + font-size: 20px; + color: #797979; + line-height: 1.3; + margin-top: 2em; +} + +/* line 949, ../scss/default.scss */ +.quote { + color: #e6e6e6; +} +/* line 952, ../scss/default.scss */ +.quote .author { + font-size: 24px; + position: absolute; + bottom: 80px; + line-height: 1.4; +} + +/* line 961, ../scss/default.scss */ +[data-config-contact] a { + color: white; + border-bottom: none; +} +/* line 965, ../scss/default.scss */ +[data-config-contact] span { + width: 115px; + display: inline-block; +} + +/* line 974, ../scss/default.scss */ +.overview.popup .note { + display: none !important; +} +/* line 980, ../scss/default.scss */ +.overview slides slide { + display: block; + cursor: pointer; + opacity: 0.5; + pointer-events: auto !important; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(85%, #ffffff), color-stop(100%, #e6e6e6)); + background: -webkit-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -moz-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -o-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background-color: white; +} +/* line 981, ../scss/default.scss */ +.overview slides slide.backdrop { + display: none !important; +} +/* line 996, ../scss/default.scss */ +.overview slides slide.far-past, .overview slides slide.past, .overview slides slide.next, .overview slides slide.far-next, .overview slides slide.far-past { + opacity: 0.5; + display: block; +} +/* line 1001, ../scss/default.scss */ +.overview slides slide.current { + opacity: 1; +} +/* line 1007, ../scss/default.scss */ +.overview .slide-area { + display: none; +} + +@media print { + /* line 1014, ../scss/default.scss */ + slides slide { + display: block !important; + position: relative; + background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #ffffff), color-stop(85%, #ffffff), color-stop(100%, #e6e6e6)); + background: -webkit-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -moz-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: -o-linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background: linear-gradient(#ffffff, #ffffff 85%, #e6e6e6); + background-color: white; + -webkit-transform: none !important; + -moz-transform: none !important; + -ms-transform: none !important; + -o-transform: none !important; + transform: none !important; + width: 100%; + height: 100%; + page-break-after: always; + top: auto !important; + left: auto !important; + margin-top: 0 !important; + margin-left: 0 !important; + opacity: 1 !important; + color: #555; + } + /* line 1034, ../scss/default.scss */ + slides slide.far-past, slides slide.past, slides slide.next, slides slide.far-next, slides slide.far-past, slides slide.current { + opacity: 1 !important; + display: block !important; + } + /* line 1040, ../scss/default.scss */ + slides slide .build > * { + -webkit-transition: none; + -moz-transition: none; + -o-transition: none; + transition: none; + } + /* line 1045, ../scss/default.scss */ + slides slide .build .to-build, + slides slide .build .build-fade { + opacity: 1; + } + /* line 1050, ../scss/default.scss */ + slides slide .auto-fadein { + opacity: 1 !important; + } + /* line 1054, ../scss/default.scss */ + slides slide.backdrop { + display: none !important; + } + /* line 1058, ../scss/default.scss */ + slides slide table.rows { + border-right: 0; + } + /* line 1063, ../scss/default.scss */ + slides slide[hidden] { + display: none !important; + } + + /* line 1068, ../scss/default.scss */ + .slide-area { + display: none; + } + + /* line 1072, ../scss/default.scss */ + .reflect { + -webkit-box-reflect: none; + -moz-box-reflect: none; + -o-box-reflect: none; + -ms-box-reflect: none; + box-reflect: none; + } + + /* line 1080, ../scss/default.scss */ + pre, code { + font-family: monospace !important; + } +} diff --git a/slides/theme/css/phone.css b/slides/theme/css/phone.css new file mode 100644 index 0000000..0809204 --- /dev/null +++ b/slides/theme/css/phone.css @@ -0,0 +1 @@ +slides>slide{-webkit-transition:none !important;-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important} diff --git a/slides/theme/scss/_base.scss b/slides/theme/scss/_base.scss new file mode 100644 index 0000000..a5b99cb --- /dev/null +++ b/slides/theme/scss/_base.scss @@ -0,0 +1,137 @@ +@charset "UTF-8"; + +@import "compass/reset"; +@import "compass/css3/border-radius"; +@import "compass/css3/box"; +@import "compass/css3/box-shadow"; +@import "compass/css3/box-sizing"; +@import "compass/css3/images"; +@import "compass/css3/text-shadow"; +@import "compass/css3/background-size"; +@import "compass/css3/transform"; +@import "compass/css3/transition"; + +@mixin font-smoothing($val: antialiased) { + -webkit-font-smoothing: $val; + -moz-font-smoothing: $val; + -ms-font-smoothing: $val; + -o-font-smoothing: $val; +} + +@mixin flexbox { + display: -webkit-box !important; + display: -moz-box !important; + display: -ms-box !important; + display: -o-box !important; + display: box !important; +} + +@mixin flex-center-center { + @include box-orient(vertical); + @include box-align(center); + @include box-pack(center); +} + +@mixin flex-left-center { + @include box-orient(vertical); + @include box-align(left); + @include box-pack(center); +} + +@mixin flex-right-center { + @include box-orient(vertical); + @include box-align(end); + @include box-pack(center); +} + +/** + * Base SlideDeck Styles + */ +html { + height: 100%; + overflow: hidden; +} + +body { + margin: 0; + padding: 0; + + opacity: 0; + + height: 100%; + min-height: 740px; + width: 100%; + + overflow: hidden; + + color: #fff; + @include font-smoothing(antialiased); + @include transition(opacity 800ms ease-in 100ms); // Add small delay to prevent jank. + + &.loaded { + opacity: 1 !important; + } +} + +input, button { + vertical-align: middle; +} + +slides > slide[hidden] { + display: none !important; +} + +slides { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + @include transform(translate3d(0, 0, 0)); + @include perspective(1000); + @include transform-style(preserve-3d); + @include transition(opacity 800ms ease-in 100ms); // Add small delay to prevent jank. +} + +slides > slide { + display: block; + position: absolute; + overflow: hidden; + left: 50%; + top: 50%; + @include box-sizing(border-box); +} + +/* Slide styles */ + + +/*article.fill iframe { + position: absolute; + left: 0; + top: 0; + width: 100%; + height: 100%; + + border: 0; + margin: 0; + + @include border-radius(10px); + + z-index: -1; +} + +slide.fill { + background-repeat: no-repeat; + @include background-size(cover); +} + +slide.fill img { + position: absolute; + left: 0; + top: 0; + min-width: 100%; + min-height: 100%; + + z-index: -1; +} +*/ diff --git a/slides/theme/scss/default.scss b/slides/theme/scss/default.scss new file mode 100644 index 0000000..77a3f87 --- /dev/null +++ b/slides/theme/scss/default.scss @@ -0,0 +1,1083 @@ +@import "base"; +@import "compass/css3/columns"; +@import "compass/css3/user-interface"; + +$social-tags: '#yourhashtag'; +$brand-small-icon-size: 30px; + +$gray-1: #e6e6e6; +$gray-2: #a9a9a9; +$gray-3: #797979; +$gray-4: #515151; + +$brand-blue: rgb(67, 135, 253); +$brand-blue-secondary: #3c8ef3; +$brand-blue-secondary2: #2a7cdf; + +$brand-red: rgb(244, 74, 63); +$brand-red-secondary: #e0543e; +$brand-red-secondary2: #d94d3a; + +$brand-yellow: rgb(255, 209, 77); +$brand-yellow-secondary: #f9cc46; +$brand-yellow-secondary2: #f6c000; + +$brand-green: rgb(13, 168, 97); +$brand-green-secondary: #00a86d; +$brand-green-secondary2: #009f5d; + +$slide-width: 900px; +$slide-height: 700px; +$slide-width-widescreen: 1100px; +$slide-top-bottom-padding: 40px; +$slide-left-right-padding: 60px; +$slide-border-radius: 5px; + +$slide-tap-area-width: 100px; + +$article-content-top-padding: 45px; + +@mixin highlight-color($color: $brand-yellow) { + -webkit-tap-highlight-color: $color; + -moz-tap-highlight-color: $color; + -ms-tap-highlight-color: $color; + -o-tap-highlight-color: $color; + tap-highlight-color: $color; +} + +@mixin backdrop { + @include background(linear-gradient(white, white 85%, $gray-1)); + background-color: white; +} + + + +/** + * Theme Styles + */ +::selection { + color: white; + background-color: $brand-yellow; + @include text-shadow(none); +} + +::-webkit-scrollbar { + height: 16px; + overflow: visible; + width: 16px; +} +::-webkit-scrollbar-thumb { + background-color: rgba(0, 0, 0, .1); + background-clip: padding-box; + border: solid transparent; + min-height: 28px; + padding: 100px 0 0; + @include box-shadow(inset 1px 1px 0 rgba(0,0,0,.1),inset 0 -1px 0 rgba(0,0,0,.07)); + border-width: 1px 1px 1px 6px; +} +::-webkit-scrollbar-thumb:hover { + background-color: rgba(0, 0, 0, 0.5); +} +::-webkit-scrollbar-button { + height: 0; + width: 0; +} +::-webkit-scrollbar-track { + background-clip: padding-box; + border: solid transparent; + border-width: 0 0 0 4px; +} +::-webkit-scrollbar-corner { + background: transparent; +} + +body { + background: black; +} + +slides > slide { + display: none; + font-family: 'Open Sans', Arial, sans-serif; + font-size: 26px; + color: $gray-3; + //@include background(linear-gradient(white, white 85%, $gray-1)); + //background-color: white; + width: $slide-width; + height: $slide-height; + margin-left: -$slide-width / 2; + margin-top: -$slide-height / 2; + padding: $slide-top-bottom-padding $slide-left-right-padding; + + @include border-radius($slide-border-radius); + //@include box-shadow(5px 5px 20px $gray-4); + @include transition(all 0.6s ease-in-out); + + //$translateX: 1020px; + //$rotateY: 30deg; + //$rotateX: 45deg; + + &.far-past { + //display: block; + display: none; + //@include transform(translate(-$translateX * 2)); + //@include transform(translate3d(-$translateX * 2, 0, 0)); + } + + &.past { + display: block; + //@include transform(translate(-$translateX) rotateY($rotateY) rotateX($rotateX)); + //@include transform(translate3d(-$translateX, 0, 0) rotateY($rotateY) rotateX($rotateX)); + opacity: 0; + } + + &.current { + display: block; + //@include transform(translate(0)); + //@include transform(translate3d(0, 0, 0)); + opacity: 1; + + .auto-fadein { + opacity: 1; + } + + .gdbar { + @include background-size(100% 100%); + } + } + + &.next { + display: block; + //@include transform(translate($translateX) rotateY(-$rotateY) rotateX($rotateX)); + //@include transform(translate3d($translateX, 0, 0) rotateY(-$rotateY) rotateX($rotateX)); + opacity: 0; + pointer-events: none; + } + + &.far-next { + //display: block; + display: none; + //@include transform(translate($translateX * 2)); + //@include transform(translate3d($translateX * 2, 0, 0)); + } + + &.dark { + background: $gray-4 !important; + } + + &:not(.nobackground) { + //background: white url(../../images/google_developers_icon_128.png) ($brand-small-icon-size * 2) 98% no-repeat; + //@include background-size($brand-small-icon-size $brand-small-icon-size); + + &:before { + font-size: 12pt; + content: $social-tags; + position: absolute; + bottom: $slide-top-bottom-padding / 2; + left: $slide-left-right-padding; + background: url(../../images/google_developers_icon_128.png) no-repeat 0 50%; + @include background-size($brand-small-icon-size $brand-small-icon-size); + padding-left: $brand-small-icon-size + 10; + height: $brand-small-icon-size; + line-height: 1.9; + } + &:after { + font-size: 12pt; + content: attr(data-slide-num) '/' attr(data-total-slides); + position: absolute; + bottom: $slide-top-bottom-padding / 2; + right: $slide-left-right-padding; + line-height: 1.9; + } + } + + &.title-slide { + &:after { + content: ''; + background: url(../../images/io2012_logo.png) no-repeat 100% 50%; + @include background-size(contain); + position: absolute; + bottom: $slide-top-bottom-padding; + right: $slide-top-bottom-padding; + width: 100%; + height: 60px; + } + } + + &.backdrop { + z-index: -10; + display: block !important; + @include backdrop; + + &:after, &:before { + display: none; // Prevent double set of slide nums and footer icons. + } + } + + > hgroup + article { + margin-top: $article-content-top-padding; + + &.flexbox { + &.vcenter, &.vleft, &.vright { + height: 80%; + } + } + + p { + margin-bottom: 1em; + } + } + + > article:only-child { + height: 100%; + + > iframe { + height: 98%; + } + } +} + +slides.layout-faux-widescreen > slide { + padding: $slide-top-bottom-padding 160px; +} + +slides.layout-widescreen, +slides.layout-faux-widescreen { + + $translateX: 1130px; + + > slide { + margin-left: -$slide-width-widescreen / 2; + width: $slide-width-widescreen; + } + + > slide.far-past { + display: block; + display: none; + @include transform(translate(-$translateX * 2)); + @include transform(translate3d(-$translateX * 2, 0, 0)); + } + + > slide.past { + display: block; + //@include transform(translate(-$translateX)); + //@include transform(translate3d(-$translateX, 0, 0)); + opacity: 0; + } + + > slide.current { + display: block; + //@include transform(translate(0)); + //@include transform(translate3d(0, 0, 0)); + opacity: 1; + } + + > slide.next { + display: block; + //@include transform(translate($translateX)); + //@include transform(translate3d($translateX, 0, 0)); + opacity: 0; + pointer-events: none; + } + + > slide.far-next { + display: block; + display: none; + @include transform(translate($translateX * 2)); + @include transform(translate3d($translateX * 2, 0, 0)); + } + + #prev-slide-area { + margin-left: -$slide-width-widescreen / 2 - $slide-tap-area-width; + } + + #next-slide-area { + margin-left: $slide-width-widescreen / 2; + } +} + +b { + font-weight: 600; +} + +a { + color: $brand-blue-secondary2; + text-decoration: none; + border-bottom: 1px solid rgba(42, 124, 223, 0.5); + + &:hover { + color: black !important; + } +} + +h1, h2, h3 { + font-weight: 600; +} + +h2 { + font-size: 45px; + line-height: 45px; + letter-spacing: -2px; + color: $gray-4; +} + +h3 { + font-size: 30px; + letter-spacing: -1px; + line-height: 2; + font-weight: inherit; + color: $gray-3; +} + +ul { + margin-left: 1.2em; + margin-bottom: 1em; + position: relative; + + li { + margin-bottom: 0.5em; + + ul { + margin-left: 2em; + margin-bottom: 0; + + li:before { + content: '-'; + font-weight: 600; + } + } + } + + > li:before { + content: '\00B7'; + margin-left: -1em; + position: absolute; + font-weight: 600; + } + + ul { + margin-top: .5em; + } +} + +// Code highlighting only effects the current slide. +.highlight-code slide.current { + pre > * { + opacity: 0.25; + @include transition(opacity 0.5s ease-in); + } + b { + opacity: 1; + } +} + +pre { + font-family: 'Source Code Pro', 'Courier New', monospace; + font-size: 20px; + line-height: 28px; + padding: 10px 0 10px $slide-left-right-padding; + letter-spacing: -1px; + margin-bottom: 20px; + width: 106%; + background-color: $gray-1; + left: -$slide-left-right-padding; + position: relative; + @include box-sizing(border-box); + /*overflow: hidden;*/ + + &[data-lang]:after { + content: attr(data-lang); + background-color: $gray-2; + right: 0; + top: 0; + position: absolute; + font-size: 16pt; + color: white; + padding: 2px 25px; + text-transform: uppercase; + } +} + +pre[data-lang="go"] { + color: #333; +} + +code { + font-size: 95%; + font-family: 'Source Code Pro', 'Courier New', monospace; + color: black; +} + +iframe { + width: 100%; + height: $slide-height - ($slide-top-bottom-padding * 2) - ($article-content-top-padding * 2); + background: white; + border: 1px solid $gray-1; + @include box-sizing(border-box); +} + +dt { + font-weight: bold; +} + +button { + display: inline-block; + @include background(linear-gradient(#F9F9F9 40%, #E3E3E3 70%)); + border: 1px solid $gray-2; + @include border-radius(3px); + padding: 5px 8px; + outline: none; + white-space: nowrap; + @include user-select(none); + cursor: pointer; + @include text-shadow(1px 1px #fff); + font-size: 10pt; +} + +button:not(:disabled):hover { + border-color: $gray-4; +} + +button:not(:disabled):active { + @include background(linear-gradient(#E3E3E3 40%, #F9F9F9 70%)); +} + +:disabled { + color: $gray-2; +} + +.blue { + color: $brand-blue; +} +.blue2 { + color: $brand-blue-secondary; +} +.blue3 { + color: $brand-blue-secondary2; +} +.yellow { + color: $brand-yellow; +} +.yellow2 { + color: $brand-yellow-secondary; +} +.yellow3 { + color: $brand-yellow-secondary2; +} +.green { + color: $brand-green; +} +.green2 { + color: $brand-green-secondary; +} +.green3 { + color: $brand-green-secondary2; +} +.red { + color: $brand-red; +} +.red2 { + color: $brand-red-secondary; +} +.red3 { + color: $brand-red-secondary2; +} +.gray { + color: $gray-1; +} +.gray2 { + color: $gray-2; +} +.gray3 { + color: $gray-3; +} +.gray4 { + color: $gray-4; +} + +.white { + color: white !important; +} +.black { + color: black !important; +} + +.columns-2 { + @include column-count(2); +} + +table { + width: 100%; + border-collapse: -moz-initial; + border-collapse: initial; + border-spacing: 2px; + border-bottom: 1px solid $gray-3; + + tr > td:first-child, th { + font-weight: 600; + color: $gray-4; + } + + tr:nth-child(odd) { + background-color: $gray-1; + } + + th { + color: white; + font-size: 18px; + @include background(linear-gradient(top, $brand-blue 40%, $brand-blue-secondary2 80%) no-repeat); + } + + td, th { + font-size: 18px; + padding: 1em 0.5em; + } + + td.highlight { + color: $gray-4; + @include background(linear-gradient(top, $brand-yellow 40%, $brand-yellow-secondary2 80%) no-repeat); + } + + &.rows { + border-bottom: none; + border-right: 1px solid $gray-3; + } +} + +q { + font-size: 45px; + line-height: 72px; + + &:before { + content: '“'; + position: absolute; + margin-left: -0.5em; + } + &:after { + content: '”'; + position: absolute; + margin-left: 0.1em; + } +} + +slide.fill { + background-repeat: no-repeat; + @include border-radius($slide-border-radius); + @include background-size(cover); +} + +/* Size variants */ + +article.smaller { + p, ul { + font-size: 20px; + line-height: 24px; + letter-spacing: 0; + } + table { + td, th { + font-size: 14px; + } + } + pre { + font-size: 15px; + line-height: 20px; + letter-spacing: 0; + } + q { + font-size: 40px; + line-height: 48px; + + &:before, &:after { + font-size: 60px; + } + } +} + +/* Builds */ + +.build { + > * { + @include transition(opacity 0.5s ease-in-out 0.2s); + } + + .to-build { + opacity: 0; + } + + .build-fade { + opacity: 0.3; + + &:hover { + opacity: 1.0; + } + } +} + +.popup .next .build { + .to-build { + opacity: 1; + } + + .build-fade { + opacity: 1; + } +} + +/* Pretty print */ + +.prettyprint .str, /* string content */ +.prettyprint .atv { /* a markup attribute value */ + color: $brand-green-secondary2; //rgb(0, 138, 53); +} +.prettyprint .kwd, /* a keyword */ +.prettyprint .tag { /* a markup tag name */ + color: rgb(0, 102, 204); +} +.prettyprint .com { /* a comment */ + color: $gray-3; //rgb(127, 127, 127); + font-style: italic; +} +.prettyprint .lit { /* a literal value */ + color: rgb(127, 0, 0); +} +.prettyprint .pun, /* punctuation, lisp open bracket, lisp close bracket */ +.prettyprint .opn, +.prettyprint .clo { + color: $gray-4; //rgb(127, 127, 127); +} +.prettyprint .typ, /* a type name */ +.prettyprint .atn, /* a markup attribute name */ +.prettyprint .dec, +.prettyprint .var { /* a declaration; a variable name */ + color: $brand-red-secondary2; //rgb(127, 0, 127); +} +.prettyprint .pln { + color: $gray-4; +} + +.note { + position: absolute; + z-index: 100; + width: 100%; + height: 100%; + top: 0; + left: 0; + padding: 1em; + background: rgba(0, 0, 0, 0.3); + opacity: 0; + pointer-events: none; + @include flexbox; + @include flex-center-center; + @include border-radius($slide-border-radius); + + @include box-sizing(border-box); + @include transform(translateY($slide-height / 2));@include transition(all 0.4s ease-in-out); + + > section { + background: #fff; + @include border-radius($slide-border-radius); + @include box-shadow(0 0 10px $gray-3); + width: 60%; + padding: 2em; + } +} + +// Speaker notes only show the current slide. +.with-notes { + + &.popup { + + slides.layout-widescreen, + slides.layout-faux-widescreen { + slide { + &.next { + @include transform(translate3d($slide-width-widescreen / 2 + 140, 80px, 0) scale(0.35)); + } + .note { + @include transform(translate3d(300px, $slide-height + 100, 0) scale(1.5)); + } + } + } + + slide { + overflow: visible; + background: white; + @include transition(none); // No slide transition goodies when in presenter mode. + pointer-events: none; + @include transform-origin(0, 0); // For speaker note transition. + + &:not(.backdrop) { + @include transform(scale(0.6) translate3d(0.5em, 0.5em, 0)); + @include box-shadow(0 0 10px $gray-3); + } + + &.backdrop { + //@include background(linear-gradient($gray-1, white 30%, white 60%, $gray-1)); + @include background-image(radial-gradient(50% 50%, #b1dfff 0%, + $brand-blue 600px)); + } + + &.next { + @include transform(translate3d($slide-width / 2 + 120, 80px, 0) scale(0.35)); + opacity: 1 !important; + + .note { + display: none !important; // Prevents seeing notes if we go to previous slide. + } + } + } + + .note { + width: 109%; + height: $slide-height / 2 - 90; + background: $gray-1; + padding: 0; + + @include box-shadow(0 0 10px $gray-3); + + @include transform(translate3d(250px, $slide-height + 100, 0) scale(1.5)); + @include transition(opacity 400ms ease-in-out); + + > section { + background: #fff; + @include border-radius($slide-border-radius); + height: 100%; + width: 100%; + @include box-sizing(border-box); + @include box-shadow(none); + overflow: auto; + padding: 1em; + } + } + } + + .note { + opacity: 1; + @include transform(translateY(0)); + pointer-events: auto; // Allow people to do things like open links embedded in the speaker notes. + } +} + +.source { + font-size: 14px; + color: $gray-2; + position: absolute; + bottom: $slide-top-bottom-padding + 30px; + left: $slide-left-right-padding; +} + +.centered { + text-align: center; +} + +.reflect { + -webkit-box-reflect: below 3px -webkit-linear-gradient(rgba(255,255,255,0) 85%, white 150%); + -moz-box-reflect: below 3px -moz-linear-gradient(rgba(255,255,255,0) 85%, white 150%); + -o-box-reflect: below 3px -o-linear-gradient(rgba(255,255,255,0) 85%, white 150%); + -ms-box-reflect: below 3px -ms-linear-gradient(rgba(255,255,255,0) 85%, white 150%); + box-reflect: below 3px linear-gradient(rgba(255,255,255,0) 85%, white 150%); +} + +.flexbox { + @include flexbox; +} + +.flexbox.vcenter { + @include flex-center-center; + height: 100%; + width: 100%; +} + +.flexbox.vleft { + @include flex-left-center; + height: 100%; + width: 100%; +} + +.flexbox.vright { + @include flex-right-center; + height: 100%; + width: 100%; +} + +.auto-fadein { + @include transition(opacity 0.6s ease-in 1s); + opacity: 0; +} + +/* Clickable/tappable areas */ +.slide-area { + z-index: 1000; + + position: absolute; + left: 0; + top: 0; + width: $slide-tap-area-width; + height: $slide-height; + + left: 50%; + top: 50%; + + cursor: pointer; + margin-top: -$slide-height / 2; + + //@include highlight-color(rgba(51, 51, 51, 0.5)); +} +#prev-slide-area { + margin-left: -$slide-width-widescreen / 2; + //@include border-radius(10px 0 0 10px); + //@include box-shadow(-5px 0 10px #222 inset); +} +#next-slide-area { + margin-left: $slide-width / 2; + //@include border-radius(0 10px 10px 0); + //@include box-shadow(5px 0 10px #222 inset); +} + +/* ===== SLIDE CONTENT ===== */ +.logoslide { + img { + width: 383px; + height: 92px; + } +} + +.segue { + padding: $slide-left-right-padding $slide-left-right-padding * 2; + + h2 { + color: $gray-1; + font-size: 60px; + } + h3 { + color: $gray-1; + line-height: 2.8; + } + hgroup { + position: absolute; + bottom: 225px; + } +} + +.thank-you-slide { + background: $brand-blue !important; + color: white; + + h2 { + font-size: 60px; + color: inherit; + } + + article > p { + margin-top: 2em; + font-size: 20pt; + } + + > p { + position: absolute; + bottom: $slide-top-bottom-padding * 2; + font-size: 24pt; + line-height: 1.3; + } +} + +aside.gdbar { + height: 97px; + width: 215px; + position: absolute; + left: -1px; + top: 125px; + @include border-radius(0 10px 10px 0); + @include background(linear-gradient(left, $gray-1, $gray-1) no-repeat); + @include background-size(0% 100%); + @include transition(all 0.5s ease-out 0.5s); /* Better to transition only on background-size, but not sure how to do that with the mixin. */ + + &.right { + right: 0; + left: -moz-initial; + left: initial; + top: ($slide-height / 2) - 96; /* 96 is height of gray icon bar */ + @include transform(rotateZ(180deg)); + + img { + @include transform(rotateZ(180deg)); + } + } + + &.bottom { + top: -moz-initial; + top: initial; + bottom: $slide-left-right-padding; + } + + img { + width: 85px; + height: 85px; + position: absolute; + right: 0; + margin: 8px 15px; + } +} + +.title-slide { + + hgroup { + bottom: 100px; + + h1 { + font-size: 65px; + line-height: 1.4; + letter-spacing: -3px; + color: $gray-4; + } + + h2 { + font-size: 34px; + color: $gray-2; + font-weight: inherit; + } + + p { + font-size: 20px; + color: $gray-3; + line-height: 1.3; + margin-top: 2em; + } + } +} + +.quote { + color: $gray-1; + + .author { + font-size: 24px; + position: absolute; + bottom: 80px; + line-height: 1.4; + } +} + +[data-config-contact] { + a { + color: rgb(255, 255, 255); + border-bottom: none; + } + span { + width: 115px; + display: inline-block; + } +} + +.overview { + + &.popup { + .note { + display: none !important; + } + } + + slides { + slide { + &.backdrop { + display: none !important; + } + + display: block; + cursor: pointer; + opacity: 0.5; + pointer-events: auto !important; + + @include backdrop(); + + &.far-past, + &.past, + &.next, + &.far-next, + &.far-past { + opacity: 0.5; + display: block; + } + + &.current { + opacity: 1; + } + } + } + + .slide-area { + display: none; + } +} + +@media print { + slides { + slide { + display: block !important; + position: relative; + @include backdrop(); + @include transform(none !important); + width: 100%; + height: 100%; + page-break-after:always; + top: auto !important; + left: auto !important; + margin-top: 0 !important; + margin-left: 0 !important; + opacity: 1 !important; + color: #555; + + &.far-past, + &.past, + &.next, + &.far-next, + &.far-past, + &.current { + opacity: 1 !important; + display: block !important; + } + + .build { + > * { + @include transition(none); + } + + .to-build, + .build-fade { + opacity: 1; + } + } + + .auto-fadein { + opacity: 1 !important; + } + + &.backdrop { + display: none !important; + } + + table.rows { + border-right: 0; + } + } + + slide[hidden] { + display: none !important; + } + } + + .slide-area { + display: none; + } + + .reflect { + -webkit-box-reflect: none; + -moz-box-reflect: none; + -o-box-reflect: none; + -ms-box-reflect: none; + box-reflect: none; + } + + pre, code { + font-family: monospace !important; + } +} diff --git a/slides/theme/scss/phone.scss b/slides/theme/scss/phone.scss new file mode 100644 index 0000000..c6a4043 --- /dev/null +++ b/slides/theme/scss/phone.scss @@ -0,0 +1,35 @@ +@import "compass/css3/transition"; + + +/*Smartphones (portrait and landscape) ----------- */ +/*@media only screen +and (min-width : 320px) +and (max-width : 480px) { + +}*/ + +/* Smartphones (portrait) ----------- */ +//@media only screen and (max-device-width: 480px) { +/* Styles */ +//$slide-width: 350px; +//$slide-height: 500px; + +slides > slide { +/* width: $slide-width !important; + height: $slide-height !important; + margin-left: -$slide-width / 2 !important; + margin-top: -$slide-height / 2 !important; +*/ + // Don't do full slide transitions on mobile. + -webkit-transition: none !important; // Bug in compass? Not sure why the below is not working + @include transition(none !important); +} + +//} + +/* iPhone 4 ----------- */ +@media +only screen and (-webkit-min-device-pixel-ratio : 1.5), +only screen and (min-device-pixel-ratio : 1.5) { +/* Styles */ +} \ No newline at end of file diff --git a/test/.jshintrc b/test/.jshintrc new file mode 100644 index 0000000..aa37e7a --- /dev/null +++ b/test/.jshintrc @@ -0,0 +1,35 @@ +{ + "node": true, + "browser": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "regexp": true, + "undef": true, + "unused": true, + "strict": true, + "trailing": true, + "smarttabs": true, + "globals": { + "after": false, + "afterEach": false, + "angular": false, + "before": false, + "beforeEach": false, + "browser": false, + "describe": false, + "expect": false, + "inject": false, + "it": false, + "spyOn": false + } +} + diff --git a/test/runner.html b/test/runner.html new file mode 100644 index 0000000..f4a00a1 --- /dev/null +++ b/test/runner.html @@ -0,0 +1,10 @@ + + + + End2end Test Runner + + + + + + \ No newline at end of file diff --git a/test/spec/controllers/main.js b/test/spec/controllers/main.js new file mode 100644 index 0000000..d359062 --- /dev/null +++ b/test/spec/controllers/main.js @@ -0,0 +1,22 @@ +'use strict'; + +describe('Controller: MainCtrl', function () { + + // load the controller's module + beforeEach(module('angularPromisesApp')); + + var MainCtrl, + scope; + + // Initialize the controller and a mock scope + beforeEach(inject(function ($controller, $rootScope) { + scope = $rootScope.$new(); + MainCtrl = $controller('MainCtrl', { + $scope: scope + }); + })); + + it('should attach a list of awesomeThings to the scope', function () { + expect(scope.awesomeThings.length).toBe(3); + }); +});

1nzt-awyZ`j|<3KIt_E0=F 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 SJO1Jt^&YbHQ-mMsfc<}Q{jOjD literal 0 HcmV?d00001 diff --git a/slides/js/hammer.js b/slides/js/hammer.js new file mode 100755 index 0000000..44a5802 --- /dev/null +++ b/slides/js/hammer.js @@ -0,0 +1,586 @@ +/* + * Hammer.JS + * version 0.4 + * author: Eight Media + * https://github.com/EightMedia/hammer.js + */ +function Hammer(element, options, undefined) +{ + var self = this; + + var defaults = { + // prevent the default event or not... might be buggy when false + prevent_default : false, + css_hacks : true, + + drag : true, + drag_vertical : true, + drag_horizontal : true, + // minimum distance before the drag event starts + drag_min_distance : 20, // pixels + + // pinch zoom and rotation + transform : true, + scale_treshold : 0.1, + rotation_treshold : 15, // degrees + + tap : true, + tap_double : true, + tap_max_interval : 300, + tap_double_distance: 20, + + hold : true, + hold_timeout : 500 + }; + options = mergeObject(defaults, options); + + // some css hacks + (function() { + if(!options.css_hacks) { + return false; + } + + var vendors = ['webkit','moz','ms','o','']; + var css_props = { + "userSelect": "none", + "touchCallout": "none", + "userDrag": "none", + "tapHighlightColor": "rgba(0,0,0,0)" + }; + + var prop = ''; + for(var i = 0; i < vendors.length; i++) { + for(var p in css_props) { + prop = p; + if(vendors[i]) { + prop = vendors[i] + prop.substring(0, 1).toUpperCase() + prop.substring(1); + } + element.style[ prop ] = css_props[p]; + } + } + })(); + + // holds the distance that has been moved + var _distance = 0; + + // holds the exact angle that has been moved + var _angle = 0; + + // holds the diraction that has been moved + var _direction = 0; + + // holds position movement for sliding + var _pos = { }; + + // how many fingers are on the screen + var _fingers = 0; + + var _first = false; + + var _gesture = null; + var _prev_gesture = null; + + var _touch_start_time = null; + var _prev_tap_pos = {x: 0, y: 0}; + var _prev_tap_end_time = null; + + var _hold_timer = null; + + var _offset = {}; + + // keep track of the mouse status + var _mousedown = false; + + var _event_start; + var _event_move; + var _event_end; + + + /** + * angle to direction define + * @param float angle + * @return string direction + */ + this.getDirectionFromAngle = function( angle ) + { + var directions = { + down: angle >= 45 && angle < 135, //90 + left: angle >= 135 || angle <= -135, //180 + up: angle < -45 && angle > -135, //270 + right: angle >= -45 && angle <= 45 //0 + }; + + var direction, key; + for(key in directions){ + if(directions[key]){ + direction = key; + break; + } + } + return direction; + }; + + + /** + * count the number of fingers in the event + * when no fingers are detected, one finger is returned (mouse pointer) + * @param event + * @return int fingers + */ + function countFingers( event ) + { + // there is a bug on android (until v4?) that touches is always 1, + // so no multitouch is supported, e.g. no, zoom and rotation... + return event.touches ? event.touches.length : 1; + } + + + /** + * get the x and y positions from the event object + * @param event + * @return array [{ x: int, y: int }] + */ + function getXYfromEvent( event ) + { + event = event || window.event; + + // no touches, use the event pageX and pageY + if(!event.touches) { + var doc = document, + body = doc.body; + + return [{ + x: event.pageX || event.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && doc.clientLeft || 0 ), + y: event.pageY || event.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && doc.clientTop || 0 ) + }]; + } + // multitouch, return array with positions + else { + var pos = [], src; + for(var t=0, len=event.touches.length; t options.drag_min_distance) || _gesture == 'drag') { + // calculate the angle + _angle = getAngle(_pos.start[0], _pos.move[0]); + _direction = self.getDirectionFromAngle(_angle); + + // check the movement and stop if we go in the wrong direction + var is_vertical = (_direction == 'up' || _direction == 'down'); + if(((is_vertical && !options.drag_vertical) || (!is_vertical && !options.drag_horizontal)) + && (_distance > options.drag_min_distance)) { + return; + } + + _gesture = 'drag'; + + var position = { x: _pos.move[0].x - _offset.left, + y: _pos.move[0].y - _offset.top }; + + var event_obj = { + originalEvent : event, + position : position, + direction : _direction, + distance : _distance, + distanceX : _distance_x, + distanceY : _distance_y, + angle : _angle + }; + + // on the first time trigger the start event + if(_first) { + triggerEvent("dragstart", event_obj); + + _first = false; + } + + // normal slide event + triggerEvent("drag", event_obj); + + cancelEvent(event); + } + }, + + + // transform gesture + // fired on touchmove + transform : function(event) + { + if(options.transform) { + var scale = event.scale || 1; + var rotation = event.rotation || 0; + + if(countFingers(event) != 2) { + return false; + } + + if(_gesture != 'drag' && + (_gesture == 'transform' || Math.abs(1-scale) > options.scale_treshold + || Math.abs(rotation) > options.rotation_treshold)) { + _gesture = 'transform'; + + _pos.center = { x: ((_pos.move[0].x + _pos.move[1].x) / 2) - _offset.left, + y: ((_pos.move[0].y + _pos.move[1].y) / 2) - _offset.top }; + + var event_obj = { + originalEvent : event, + position : _pos.center, + scale : scale, + rotation : rotation + }; + + // on the first time trigger the start event + if(_first) { + triggerEvent("transformstart", event_obj); + _first = false; + } + + triggerEvent("transform", event_obj); + + cancelEvent(event); + + return true; + } + } + + return false; + }, + + + // tap and double tap gesture + // fired on touchend + tap : function(event) + { + // compare the kind of gesture by time + var now = new Date().getTime(); + var touch_time = now - _touch_start_time; + + // dont fire when hold is fired + if(options.hold && !(options.hold && options.hold_timeout > touch_time)) { + return; + } + + // when previous event was tap and the tap was max_interval ms ago + var is_double_tap = (function(){ + if (_prev_tap_pos && options.tap_double && _prev_gesture == 'tap' && (_touch_start_time - _prev_tap_end_time) < options.tap_max_interval) { + var x_distance = Math.abs(_prev_tap_pos[0].x - _pos.start[0].x); + var y_distance = Math.abs(_prev_tap_pos[0].y - _pos.start[0].y); + return (_prev_tap_pos && _pos.start && Math.max(x_distance, y_distance) < options.tap_double_distance); + + } + return false; + })(); + + if(is_double_tap) { + _gesture = 'double_tap'; + _prev_tap_end_time = null; + + triggerEvent("doubletap", { + originalEvent : event, + position : _pos.start + }); + cancelEvent(event); + } + + // single tap is single touch + else { + _gesture = 'tap'; + _prev_tap_end_time = now; + _prev_tap_pos = _pos.start; + + if(options.tap) { + triggerEvent("tap", { + originalEvent : event, + position : _pos.start + }); + cancelEvent(event); + } + } + + } + + }; + + + function handleEvents(event) + { + switch(event.type) + { + case 'mousedown': + case 'touchstart': + _pos.start = getXYfromEvent(event); + _touch_start_time = new Date().getTime(); + _fingers = countFingers(event); + _first = true; + _event_start = event; + + // borrowed from jquery offset https://github.com/jquery/jquery/blob/master/src/offset.js + var box = element.getBoundingClientRect(); + var clientTop = element.clientTop || document.body.clientTop || 0; + var clientLeft = element.clientLeft || document.body.clientLeft || 0; + var scrollTop = window.pageYOffset || element.scrollTop || document.body.scrollTop; + var scrollLeft = window.pageXOffset || element.scrollLeft || document.body.scrollLeft; + + _offset = { + top: box.top + scrollTop - clientTop, + left: box.left + scrollLeft - clientLeft + }; + + _mousedown = true; + + // hold gesture + gestures.hold(event); + + if(options.prevent_default) { + cancelEvent(event); + } + break; + + case 'mousemove': + case 'touchmove': + if(!_mousedown) { + return false; + } + _event_move = event; + _pos.move = getXYfromEvent(event); + + if(!gestures.transform(event)) { + gestures.drag(event); + } + break; + + case 'mouseup': + case 'mouseout': + case 'touchcancel': + case 'touchend': + if(!_mousedown || (_gesture != 'transform' && event.touches && event.touches.length > 0)) { + return false; + } + + _mousedown = false; + _event_end = event; + + // drag gesture + // dragstart is triggered, so dragend is possible + if(_gesture == 'drag') { + triggerEvent("dragend", { + originalEvent : event, + direction : _direction, + distance : _distance, + angle : _angle + }); + } + + // transform + // transformstart is triggered, so transformed is possible + else if(_gesture == 'transform') { + triggerEvent("transformend", { + originalEvent : event, + position : _pos.center, + scale : event.scale, + rotation : event.rotation + }); + } + else { + gestures.tap(_event_start); + } + + _prev_gesture = _gesture; + + // reset vars + reset(); + break; + } + } + + + // bind events for touch devices + // except for windows phone 7.5, it doesnt support touch events..! + if('ontouchstart' in window) { + element.addEventListener("touchstart", handleEvents, false); + element.addEventListener("touchmove", handleEvents, false); + element.addEventListener("touchend", handleEvents, false); + element.addEventListener("touchcancel", handleEvents, false); + } + // for non-touch + else { + + if(element.addEventListener){ // prevent old IE errors + element.addEventListener("mouseout", function(event) { + if(!isInsideHammer(element, event.relatedTarget)) { + handleEvents(event); + } + }, false); + element.addEventListener("mouseup", handleEvents, false); + element.addEventListener("mousedown", handleEvents, false); + element.addEventListener("mousemove", handleEvents, false); + + // events for older IE + }else if(document.attachEvent){ + element.attachEvent("onmouseout", function(event) { + if(!isInsideHammer(element, event.relatedTarget)) { + handleEvents(event); + } + }, false); + element.attachEvent("onmouseup", handleEvents); + element.attachEvent("onmousedown", handleEvents); + element.attachEvent("onmousemove", handleEvents); + } + } + + + /** + * find if element is (inside) given parent element + * @param object element + * @param object parent + * @return bool inside + */ + function isInsideHammer(parent, child) { + // get related target for IE + if(!child && window.event && window.event.toElement){ + child = window.event.toElement; + } + + if(parent === child){ + return true; + } + + // loop over parentNodes of child until we find hammer element + if(child){ + var node = child.parentNode; + while(node !== null){ + if(node === parent){ + return true; + }; + node = node.parentNode; + } + } + return false; + } + + + /** + * merge 2 objects into a new object + * @param object obj1 + * @param object obj2 + * @return object merged object + */ + function mergeObject(obj1, obj2) { + var output = {}; + + if(!obj2) { + return obj1; + } + + for (var prop in obj1) { + if (prop in obj2) { + output[prop] = obj2[prop]; + } else { + output[prop] = obj1[prop]; + } + } + return output; + } + + function isFunction( obj ){ + return Object.prototype.toString.call( obj ) == "[object Function]"; + } +} \ No newline at end of file diff --git a/slides/js/modernizr.custom.45394.js b/slides/js/modernizr.custom.45394.js new file mode 100644 index 0000000..26f38cd --- /dev/null +++ b/slides/js/modernizr.custom.45394.js @@ -0,0 +1,4 @@ +/* Modernizr 2.5.3 (Custom Build) | MIT & BSD + * Build: http://www.modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-flexbox_legacy-hsla-multiplebgs-opacity-rgba-textshadow-cssanimations-csscolumns-generatedcontent-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-applicationcache-canvas-canvastext-draganddrop-hashchange-history-audio-video-indexeddb-input-inputtypes-localstorage-postmessage-sessionstorage-websockets-websqldatabase-webworkers-geolocation-inlinesvg-smil-svg-svgclippaths-touch-webgl-mq-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load + */ +;window.Modernizr=function(a,b,c){function C(a){i.cssText=a}function D(a,b){return C(m.join(a+";")+(b||""))}function E(a,b){return typeof a===b}function F(a,b){return!!~(""+a).indexOf(b)}function G(a,b){for(var d in a)if(i[a[d]]!==c)return b=="pfx"?a[d]:!0;return!1}function H(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:E(f,"function")?f.bind(d||b):f}return!1}function I(a,b,c){var d=a.charAt(0).toUpperCase()+a.substr(1),e=(a+" "+o.join(d+" ")+d).split(" ");return E(b,"string")||E(b,"undefined")?G(e,b):(e=(a+" "+p.join(d+" ")+d).split(" "),H(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d",a,""].join(""),k.id=g,(l?k:m).innerHTML+=h,m.appendChild(k),l||(m.style.background="",f.appendChild(m)),i=c(k,a),l?k.parentNode.removeChild(k):m.parentNode.removeChild(m),!!i},y=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b).matches;var d;return x("@media "+b+" { #"+g+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},z=function(){function d(d,e){e=e||b.createElement(a[d]||"div"),d="on"+d;var f=d in e;return f||(e.setAttribute||(e=b.createElement("div")),e.setAttribute&&e.removeAttribute&&(e.setAttribute(d,""),f=E(e[d],"function"),E(e[d],"undefined")||(e[d]=c),e.removeAttribute(d))),e=null,f}var a={select:"input",change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"};return d}(),A={}.hasOwnProperty,B;!E(A,"undefined")&&!E(A.call,"undefined")?B=function(a,b){return A.call(a,b)}:B=function(a,b){return b in a&&E(a.constructor.prototype[b],"undefined")},Function.prototype.bind||(Function.prototype.bind=function(b){var c=this;if(typeof c!="function")throw new TypeError;var d=v.call(arguments,1),e=function(){if(this instanceof e){var a=function(){};a.prototype=c.prototype;var f=new a,g=c.apply(f,d.concat(v.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(v.call(arguments)))};return e});var J=function(c,d){var f=c.join(""),g=d.length;x(f,function(c,d){var f=b.styleSheets[b.styleSheets.length-1],h=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"",i=c.childNodes,j={};while(g--)j[i[g].id]=i[g];e.touch="ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch||(j.touch&&j.touch.offsetTop)===9,e.csstransforms3d=(j.csstransforms3d&&j.csstransforms3d.offsetLeft)===9&&j.csstransforms3d.offsetHeight===3,e.generatedcontent=(j.generatedcontent&&j.generatedcontent.offsetHeight)>=1,e.fontface=/src/i.test(h)&&h.indexOf(d.split(" ")[0])===0},g,d)}(['@font-face {font-family:"font";src:url("https://")}',["@media (",m.join("touch-enabled),("),g,")","{#touch{top:9px;position:absolute}}"].join(""),["@media (",m.join("transform-3d),("),g,")","{#csstransforms3d{left:9px;position:absolute;height:3px;}}"].join(""),['#generatedcontent:after{content:"',k,'";visibility:hidden}'].join("")],["fontface","touch","csstransforms3d","generatedcontent"]);r.flexbox=function(){return I("flexOrder")},r["flexbox-legacy"]=function(){return I("boxDirection")},r.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},r.canvastext=function(){return!!e.canvas&&!!E(b.createElement("canvas").getContext("2d").fillText,"function")},r.webgl=function(){try{var d=b.createElement("canvas"),e;e=!(!a.WebGLRenderingContext||!d.getContext("experimental-webgl")&&!d.getContext("webgl")),d=c}catch(f){e=!1}return e},r.touch=function(){return e.touch},r.geolocation=function(){return!!navigator.geolocation},r.postmessage=function(){return!!a.postMessage},r.websqldatabase=function(){return!!a.openDatabase},r.indexedDB=function(){return!!I("indexedDB",a)},r.hashchange=function(){return z("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},r.history=function(){return!!a.history&&!!history.pushState},r.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},r.websockets=function(){for(var b=-1,c=o.length;++b0&&g.splice(0,a);setTimeout(function(){b.parentNode.removeChild(b)},15)}}function m(a){var b,c;a.setAttribute("data-orderloaded","loaded");for(a=0;c=h[a];a++)if((b=i[c])&&b.getAttribute("data-orderloaded")==="loaded")delete i[c],require.addScriptToDom(b);else break;a>0&&h.splice(0, +a)}var f=typeof document!=="undefined"&&typeof window!=="undefined"&&document.createElement("script"),n=f&&(f.async||window.opera&&Object.prototype.toString.call(window.opera)==="[object Opera]"||"MozAppearance"in document.documentElement.style),o=f&&f.readyState==="uninitialized",l=/^(complete|loaded)$/,g=[],j={},i={},h=[],f=null;define({version:"1.0.5",load:function(a,b,c,e){var d;b.nameToUrl?(d=b.nameToUrl(a,null),require.s.skipAsync[d]=!0,n||e.isBuild?b([a],c):o?(e=require.s.contexts._,!e.urlFetched[d]&& +!e.loaded[a]&&(e.urlFetched[d]=!0,require.resourcesReady(!1),e.scriptCount+=1,d=require.attach(d,e,a,null,null,m),i[a]=d,h.push(a)),b([a],c)):b.specified(a)?b([a],c):(g.push({name:a,req:b,onLoad:c}),require.attach(d,null,a,k,"script/cache"))):b([a],c)}})})(); diff --git a/slides/js/polyfills/classList.min.js b/slides/js/polyfills/classList.min.js new file mode 100644 index 0000000..932c777 --- /dev/null +++ b/slides/js/polyfills/classList.min.js @@ -0,0 +1,2 @@ +/* @source http://purl.eligrey.com/github/classList.js/blob/master/classList.js*/ +"use strict";if(typeof document!=="undefined"&&!("classList" in document.createElement("a"))){(function(a){var f="classList",d="prototype",e=(a.HTMLElement||a.Element)[d],g=Object;strTrim=String[d].trim||function(){return this.replace(/^\s+|\s+$/g,"")},arrIndexOf=Array[d].indexOf||function(k){for(var j=0,h=this.length;j")&&c[0]);return a>4?a:!1}();return a},m.isInternetExplorer=function(){var a=m.isInternetExplorer.cached=typeof m.isInternetExplorer.cached!="undefined"?m.isInternetExplorer.cached:Boolean(m.getInternetExplorerMajorVersion());return a},m.emulated={pushState:!Boolean(a.history&&a.history.pushState&&a.history.replaceState&&!/ Mobile\/([1-7][a-z]|(8([abcde]|f(1[0-8]))))/i.test(e.userAgent)&&!/AppleWebKit\/5([0-2]|3[0-2])/i.test(e.userAgent)),hashChange:Boolean(!("onhashchange"in a||"onhashchange"in d)||m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8)},m.enabled=!m.emulated.pushState,m.bugs={setHash:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),safariPoll:Boolean(!m.emulated.pushState&&e.vendor==="Apple Computer, Inc."&&/AppleWebKit\/5([0-2]|3[0-3])/.test(e.userAgent)),ieDoubleCheck:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<8),hashEscape:Boolean(m.isInternetExplorer()&&m.getInternetExplorerMajorVersion()<7)},m.isEmptyObject=function(a){for(var b in a)return!1;return!0},m.cloneObject=function(a){var b,c;return a?(b=k.stringify(a),c=k.parse(b)):c={},c},m.getRootUrl=function(){var a=d.location.protocol+"//"+(d.location.hostname||d.location.host);if(d.location.port||!1)a+=":"+d.location.port;return a+="/",a},m.getBaseHref=function(){var a=d.getElementsByTagName("base"),b=null,c="";return a.length===1&&(b=a[0],c=b.href.replace(/[^\/]+$/,"")),c=c.replace(/\/+$/,""),c&&(c+="/"),c},m.getBaseUrl=function(){var a=m.getBaseHref()||m.getBasePageUrl()||m.getRootUrl();return a},m.getPageUrl=function(){var a=m.getState(!1,!1),b=(a||{}).url||d.location.href,c;return c=b.replace(/\/+$/,"").replace(/[^\/]+$/,function(a,b,c){return/\./.test(a)?a:a+"/"}),c},m.getBasePageUrl=function(){var a=d.location.href.replace(/[#\?].*/,"").replace(/[^\/]+$/,function(a,b,c){return/[^\/]$/.test(a)?"":a}).replace(/\/+$/,"")+"/";return a},m.getFullUrl=function(a,b){var c=a,d=a.substring(0,1);return b=typeof b=="undefined"?!0:b,/[a-z]+\:\/\//.test(a)||(d==="/"?c=m.getRootUrl()+a.replace(/^\/+/,""):d==="#"?c=m.getPageUrl().replace(/#.*/,"")+a:d==="?"?c=m.getPageUrl().replace(/[\?#].*/,"")+a:b?c=m.getBaseUrl()+a.replace(/^(\.\/)+/,""):c=m.getBasePageUrl()+a.replace(/^(\.\/)+/,"")),c.replace(/\#$/,"")},m.getShortUrl=function(a){var b=a,c=m.getBaseUrl(),d=m.getRootUrl();return m.emulated.pushState&&(b=b.replace(c,"")),b=b.replace(d,"/"),m.isTraditionalAnchor(b)&&(b="./"+b),b=b.replace(/^(\.\/)+/g,"./").replace(/\#$/,""),b},m.store={},m.idToState=m.idToState||{},m.stateToId=m.stateToId||{},m.urlToId=m.urlToId||{},m.storedStates=m.storedStates||[],m.savedStates=m.savedStates||[],m.normalizeStore=function(){m.store.idToState=m.store.idToState||{},m.store.urlToId=m.store.urlToId||{},m.store.stateToId=m.store.stateToId||{}},m.getState=function(a,b){typeof a=="undefined"&&(a=!0),typeof b=="undefined"&&(b=!0);var c=m.getLastSavedState();return!c&&b&&(c=m.createStateObject()),a&&(c=m.cloneObject(c),c.url=c.cleanUrl||c.url),c},m.getIdByState=function(a){var b=m.extractId(a.url),c;if(!b){c=m.getStateString(a);if(typeof m.stateToId[c]!="undefined")b=m.stateToId[c];else if(typeof m.store.stateToId[c]!="undefined")b=m.store.stateToId[c];else{for(;;){b=(new Date).getTime()+String(Math.random()).replace(/\D/g,"");if(typeof m.idToState[b]=="undefined"&&typeof m.store.idToState[b]=="undefined")break}m.stateToId[c]=b,m.idToState[b]=a}}return b},m.normalizeState=function(a){var b,c;if(!a||typeof a!="object")a={};if(typeof a.normalized!="undefined")return a;if(!a.data||typeof a.data!="object")a.data={};b={},b.normalized=!0,b.title=a.title||"",b.url=m.getFullUrl(m.unescapeString(a.url||d.location.href)),b.hash=m.getShortUrl(b.url),b.data=m.cloneObject(a.data),b.id=m.getIdByState(b),b.cleanUrl=b.url.replace(/\??\&_suid.*/,""),b.url=b.cleanUrl,c=!m.isEmptyObject(b.data);if(b.title||c)b.hash=m.getShortUrl(b.url).replace(/\??\&_suid.*/,""),/\?/.test(b.hash)||(b.hash+="?"),b.hash+="&_suid="+b.id;return b.hashedUrl=m.getFullUrl(b.hash),(m.emulated.pushState||m.bugs.safariPoll)&&m.hasUrlDuplicate(b)&&(b.url=b.hashedUrl),b},m.createStateObject=function(a,b,c){var d={data:a,title:b,url:c};return d=m.normalizeState(d),d},m.getStateById=function(a){a=String(a);var c=m.idToState[a]||m.store.idToState[a]||b;return c},m.getStateString=function(a){var b,c,d;return b=m.normalizeState(a),c={data:b.data,title:a.title,url:a.url},d=k.stringify(c),d},m.getStateId=function(a){var b,c;return b=m.normalizeState(a),c=b.id,c},m.getHashByState=function(a){var b,c;return b=m.normalizeState(a),c=b.hash,c},m.extractId=function(a){var b,c,d;return c=/(.*)\&_suid=([0-9]+)$/.exec(a),d=c?c[1]||a:a,b=c?String(c[2]||""):"",b||!1},m.isTraditionalAnchor=function(a){var b=!/[\/\?\.]/.test(a);return b},m.extractState=function(a,b){var c=null,d,e;return b=b||!1,d=m.extractId(a),d&&(c=m.getStateById(d)),c||(e=m.getFullUrl(a),d=m.getIdByUrl(e)||!1,d&&(c=m.getStateById(d)),!c&&b&&!m.isTraditionalAnchor(a)&&(c=m.createStateObject(null,null,e))),c},m.getIdByUrl=function(a){var c=m.urlToId[a]||m.store.urlToId[a]||b;return c},m.getLastSavedState=function(){return m.savedStates[m.savedStates.length-1]||b},m.getLastStoredState=function(){return m.storedStates[m.storedStates.length-1]||b},m.hasUrlDuplicate=function(a){var b=!1,c;return c=m.extractState(a.url),b=c&&c.id!==a.id,b},m.storeState=function(a){return m.urlToId[a.url]=a.id,m.storedStates.push(m.cloneObject(a)),a},m.isLastSavedState=function(a){var b=!1,c,d,e;return m.savedStates.length&&(c=a.id,d=m.getLastSavedState(),e=d.id,b=c===e),b},m.saveState=function(a){return m.isLastSavedState(a)?!1:(m.savedStates.push(m.cloneObject(a)),!0)},m.getStateByIndex=function(a){var b=null;return typeof a=="undefined"?b=m.savedStates[m.savedStates.length-1]:a<0?b=m.savedStates[m.savedStates.length+a]:b=m.savedStates[a],b},m.getHash=function(){var a=m.unescapeHash(d.location.hash);return a},m.unescapeString=function(b){var c=b,d;for(;;){d=a.unescape(c);if(d===c)break;c=d}return c},m.unescapeHash=function(a){var b=m.normalizeHash(a);return b=m.unescapeString(b),b},m.normalizeHash=function(a){var b=a.replace(/[^#]*#/,"").replace(/#.*/,"");return b},m.setHash=function(a,b){var c,e,f;return b!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.setHash,args:arguments,queue:b}),!1):(c=m.escapeHash(a),m.busy(!0),e=m.extractState(a,!0),e&&!m.emulated.pushState?m.pushState(e.data,e.title,e.url,!1):d.location.hash!==c&&(m.bugs.setHash?(f=m.getPageUrl(),m.pushState(null,null,f+"#"+c,!1)):d.location.hash=c),m)},m.escapeHash=function(b){var c=m.normalizeHash(b);return c=a.escape(c),m.bugs.hashEscape||(c=c.replace(/\%21/g,"!").replace(/\%26/g,"&").replace(/\%3D/g,"=").replace(/\%3F/g,"?")),c},m.getHashByUrl=function(a){var b=String(a).replace(/([^#]*)#?([^#]*)#?(.*)/,"$2");return b=m.unescapeHash(b),b},m.setTitle=function(a){var b=a.title,c;b||(c=m.getStateByIndex(0),c&&c.url===a.url&&(b=c.title||m.options.initialTitle));try{d.getElementsByTagName("title")[0].innerHTML=b.replace("<","<").replace(">",">").replace(" & "," & ")}catch(e){}return d.title=b,m},m.queues=[],m.busy=function(a){typeof a!="undefined"?m.busy.flag=a:typeof m.busy.flag=="undefined"&&(m.busy.flag=!1);if(!m.busy.flag){h(m.busy.timeout);var b=function(){var a,c,d;if(m.busy.flag)return;for(a=m.queues.length-1;a>=0;--a){c=m.queues[a];if(c.length===0)continue;d=c.shift(),m.fireQueueItem(d),m.busy.timeout=g(b,m.options.busyDelay)}};m.busy.timeout=g(b,m.options.busyDelay)}return m.busy.flag},m.busy.flag=!1,m.fireQueueItem=function(a){return a.callback.apply(a.scope||m,a.args||[])},m.pushQueue=function(a){return m.queues[a.queue||0]=m.queues[a.queue||0]||[],m.queues[a.queue||0].push(a),m},m.queue=function(a,b){return typeof a=="function"&&(a={callback:a}),typeof b!="undefined"&&(a.queue=b),m.busy()?m.pushQueue(a):m.fireQueueItem(a),m},m.clearQueue=function(){return m.busy.flag=!1,m.queues=[],m},m.stateChanged=!1,m.doubleChecker=!1,m.doubleCheckComplete=function(){return m.stateChanged=!0,m.doubleCheckClear(),m},m.doubleCheckClear=function(){return m.doubleChecker&&(h(m.doubleChecker),m.doubleChecker=!1),m},m.doubleCheck=function(a){return m.stateChanged=!1,m.doubleCheckClear(),m.bugs.ieDoubleCheck&&(m.doubleChecker=g(function(){return m.doubleCheckClear(),m.stateChanged||a(),!0},m.options.doubleCheckInterval)),m},m.safariStatePoll=function(){var b=m.extractState(d.location.href),c;if(!m.isLastSavedState(b))c=b;else return;return c||(c=m.createStateObject()),m.Adapter.trigger(a,"popstate"),m},m.back=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.back,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.back(!1)}),n.go(-1),!0)},m.forward=function(a){return a!==!1&&m.busy()?(m.pushQueue({scope:m,callback:m.forward,args:arguments,queue:a}),!1):(m.busy(!0),m.doubleCheck(function(){m.forward(!1)}),n.go(1),!0)},m.go=function(a,b){var c;if(a>0)for(c=1;c<=a;++c)m.forward(b);else{if(!(a<0))throw new Error("History.go: History.go requires a positive or negative integer passed.");for(c=-1;c>=a;--c)m.back(b)}return m};if(m.emulated.pushState){var o=function(){};m.pushState=m.pushState||o,m.replaceState=m.replaceState||o}else m.onPopState=function(b,c){var e=!1,f=!1,g,h;return m.doubleCheckComplete(),g=m.getHash(),g?(h=m.extractState(g||d.location.href,!0),h?m.replaceState(h.data,h.title,h.url,!1):(m.Adapter.trigger(a,"anchorchange"),m.busy(!1)),m.expectedStateId=!1,!1):(e=m.Adapter.extractEventData("state",b,c)||!1,e?f=m.getStateById(e):m.expectedStateId?f=m.getStateById(m.expectedStateId):f=m.extractState(d.location.href),f||(f=m.createStateObject(null,null,d.location.href)),m.expectedStateId=!1,m.isLastSavedState(f)?(m.busy(!1),!1):(m.storeState(f),m.saveState(f),m.setTitle(f),m.Adapter.trigger(a,"statechange"),m.busy(!1),!0))},m.Adapter.bind(a,"popstate",m.onPopState),m.pushState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.pushState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.pushState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0},m.replaceState=function(b,c,d,e){if(m.getHashByUrl(d)&&m.emulated.pushState)throw new Error("History.js does not support states with fragement-identifiers (hashes/anchors).");if(e!==!1&&m.busy())return m.pushQueue({scope:m,callback:m.replaceState,args:arguments,queue:e}),!1;m.busy(!0);var f=m.createStateObject(b,c,d);return m.isLastSavedState(f)?m.busy(!1):(m.storeState(f),m.expectedStateId=f.id,n.replaceState(f.id,f.title,f.url),m.Adapter.trigger(a,"popstate")),!0};if(f){try{m.store=k.parse(f.getItem("History.store"))||{}}catch(p){m.store={}}m.normalizeStore()}else m.store={},m.normalizeStore();m.Adapter.bind(a,"beforeunload",m.clearAllIntervals),m.Adapter.bind(a,"unload",m.clearAllIntervals),m.saveState(m.storeState(m.extractState(d.location.href,!0))),f&&(m.onUnload=function(){var a,b;try{a=k.parse(f.getItem("History.store"))||{}}catch(c){a={}}a.idToState=a.idToState||{},a.urlToId=a.urlToId||{},a.stateToId=a.stateToId||{};for(b in m.idToState){if(!m.idToState.hasOwnProperty(b))continue;a.idToState[b]=m.idToState[b]}for(b in m.urlToId){if(!m.urlToId.hasOwnProperty(b))continue;a.urlToId[b]=m.urlToId[b]}for(b in m.stateToId){if(!m.stateToId.hasOwnProperty(b))continue;a.stateToId[b]=m.stateToId[b]}m.store=a,m.normalizeStore(),f.setItem("History.store",k.stringify(a))},m.intervalList.push(i(m.onUnload,m.options.storeInterval)),m.Adapter.bind(a,"beforeunload",m.onUnload),m.Adapter.bind(a,"unload",m.onUnload));if(!m.emulated.pushState){m.bugs.safariPoll&&m.intervalList.push(i(m.safariStatePoll,m.options.safariPollInterval));if(e.vendor==="Apple Computer, Inc."||(e.appCodeName||"")==="Mozilla")m.Adapter.bind(a,"hashchange",function(){m.Adapter.trigger(a,"popstate")}),m.getHash()&&m.Adapter.onDomLoad(function(){m.Adapter.trigger(a,"hashchange")})}},m.init()})(window) \ No newline at end of file diff --git a/slides/js/prettify/lang-apollo.js b/slides/js/prettify/lang-apollo.js new file mode 100644 index 0000000..7098baf --- /dev/null +++ b/slides/js/prettify/lang-apollo.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["com",/^#[^\n\r]*/,null,"#"],["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,null,'"']],[["kwd",/^(?:ADS|AD|AUG|BZF|BZMF|CAE|CAF|CA|CCS|COM|CS|DAS|DCA|DCOM|DCS|DDOUBL|DIM|DOUBLE|DTCB|DTCF|DV|DXCH|EDRUPT|EXTEND|INCR|INDEX|NDX|INHINT|LXCH|MASK|MSK|MP|MSU|NOOP|OVSK|QXCH|RAND|READ|RELINT|RESUME|RETURN|ROR|RXOR|SQUARE|SU|TCR|TCAA|OVSK|TCF|TC|TS|WAND|WOR|WRITE|XCH|XLQ|XXALQ|ZL|ZQ|ADD|ADZ|SUB|SUZ|MPY|MPR|MPZ|DVP|COM|ABS|CLA|CLZ|LDQ|STO|STQ|ALS|LLS|LRS|TRA|TSQ|TMI|TOV|AXT|TIX|DLY|INP|OUT)\s/, +null],["typ",/^(?:-?GENADR|=MINUS|2BCADR|VN|BOF|MM|-?2CADR|-?[1-6]DNADR|ADRES|BBCON|[ES]?BANK=?|BLOCK|BNKSUM|E?CADR|COUNT\*?|2?DEC\*?|-?DNCHAN|-?DNPTR|EQUALS|ERASE|MEMORY|2?OCT|REMADR|SETLOC|SUBRO|ORG|BSS|BES|SYN|EQU|DEFINE|END)\s/,null],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[!-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["apollo","agc","aea"]); diff --git a/slides/js/prettify/lang-clj.js b/slides/js/prettify/lang-clj.js new file mode 100644 index 0000000..542a220 --- /dev/null +++ b/slides/js/prettify/lang-clj.js @@ -0,0 +1,18 @@ +/* + Copyright (C) 2011 Google Inc. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ +var a=null; +PR.registerLangHandler(PR.createSimpleLexer([["opn",/^[([{]+/,a,"([{"],["clo",/^[)\]}]+/,a,")]}"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:def|if|do|let|quote|var|fn|loop|recur|throw|try|monitor-enter|monitor-exit|defmacro|defn|defn-|macroexpand|macroexpand-1|for|doseq|dosync|dotimes|and|or|when|not|assert|doto|proxy|defstruct|first|rest|cons|defprotocol|deftype|defrecord|reify|defmulti|defmethod|meta|with-meta|ns|in-ns|create-ns|import|intern|refer|alias|namespace|resolve|ref|deref|refset|new|set!|memfn|to-array|into-array|aset|gen-class|reduce|map|filter|find|nil?|empty?|hash-map|hash-set|vec|vector|seq|flatten|reverse|assoc|dissoc|list|list?|disj|get|union|difference|intersection|extend|extend-type|extend-protocol|prn)\b/,a], +["typ",/^:[\dA-Za-z-]+/]]),["clj"]); diff --git a/slides/js/prettify/lang-css.js b/slides/js/prettify/lang-css.js new file mode 100644 index 0000000..041e1f5 --- /dev/null +++ b/slides/js/prettify/lang-css.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\f\r ]+/,null," \t\r\n "]],[["str",/^"(?:[^\n\f\r"\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*"/,null],["str",/^'(?:[^\n\f\r'\\]|\\(?:\r\n?|\n|\f)|\\[\S\s])*'/,null],["lang-css-str",/^url\(([^"')]*)\)/i],["kwd",/^(?:url|rgb|!important|@import|@page|@media|@charset|inherit)(?=[^\w-]|$)/i,null],["lang-css-kw",/^(-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*)\s*:/i],["com",/^\/\*[^*]*\*+(?:[^*/][^*]*\*+)*\//],["com", +/^(?:<\!--|--\>)/],["lit",/^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],["lit",/^#[\da-f]{3,6}/i],["pln",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i],["pun",/^[^\s\w"']+/]]),["css"]);PR.registerLangHandler(PR.createSimpleLexer([],[["kwd",/^-?(?:[_a-z]|\\[\da-f]+ ?)(?:[\w-]|\\\\[\da-f]+ ?)*/i]]),["css-kw"]);PR.registerLangHandler(PR.createSimpleLexer([],[["str",/^[^"')]+/]]),["css-str"]); diff --git a/slides/js/prettify/lang-go.js b/slides/js/prettify/lang-go.js new file mode 100644 index 0000000..fc18dc0 --- /dev/null +++ b/slides/js/prettify/lang-go.js @@ -0,0 +1 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["pln",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])+(?:'|$)|`[^`]*(?:`|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\/\*[\S\s]*?\*\/)/],["pln",/^(?:[^"'/`]|\/(?![*/]))+/]]),["go"]); diff --git a/slides/js/prettify/lang-hs.js b/slides/js/prettify/lang-hs.js new file mode 100644 index 0000000..9d77b08 --- /dev/null +++ b/slides/js/prettify/lang-hs.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t-\r ]+/,null,"\t\n \r "],["str",/^"(?:[^\n\f\r"\\]|\\[\S\s])*(?:"|$)/,null,'"'],["str",/^'(?:[^\n\f\r'\\]|\\[^&])'?/,null,"'"],["lit",/^(?:0o[0-7]+|0x[\da-f]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,null,"0123456789"]],[["com",/^(?:--+[^\n\f\r]*|{-(?:[^-]|-+[^}-])*-})/],["kwd",/^(?:case|class|data|default|deriving|do|else|if|import|in|infix|infixl|infixr|instance|let|module|newtype|of|then|type|where|_)(?=[^\d'A-Za-z]|$)/, +null],["pln",/^(?:[A-Z][\w']*\.)*[A-Za-z][\w']*/],["pun",/^[^\d\t-\r "'A-Za-z]+/]]),["hs"]); diff --git a/slides/js/prettify/lang-lisp.js b/slides/js/prettify/lang-lisp.js new file mode 100644 index 0000000..02a30e8 --- /dev/null +++ b/slides/js/prettify/lang-lisp.js @@ -0,0 +1,3 @@ +var a=null; +PR.registerLangHandler(PR.createSimpleLexer([["opn",/^\(+/,a,"("],["clo",/^\)+/,a,")"],["com",/^;[^\n\r]*/,a,";"],["pln",/^[\t\n\r \xa0]+/,a,"\t\n\r \xa0"],["str",/^"(?:[^"\\]|\\[\S\s])*(?:"|$)/,a,'"']],[["kwd",/^(?:block|c[ad]+r|catch|con[ds]|def(?:ine|un)|do|eq|eql|equal|equalp|eval-when|flet|format|go|if|labels|lambda|let|load-time-value|locally|macrolet|multiple-value-call|nil|progn|progv|quote|require|return-from|setq|symbol-macrolet|t|tagbody|the|throw|unwind)\b/,a], +["lit",/^[+-]?(?:[#0]x[\da-f]+|\d+\/\d+|(?:\.\d+|\d+(?:\.\d*)?)(?:[de][+-]?\d+)?)/i],["lit",/^'(?:-*(?:\w|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?)?/],["pln",/^-*(?:[_a-z]|\\[!-~])(?:[\w-]*|\\[!-~])[!=?]?/i],["pun",/^[^\w\t\n\r "'-);\\\xa0]+/]]),["cl","el","lisp","scm"]); diff --git a/slides/js/prettify/lang-lua.js b/slides/js/prettify/lang-lua.js new file mode 100644 index 0000000..e83a3c4 --- /dev/null +++ b/slides/js/prettify/lang-lua.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$))/,null,"\"'"]],[["com",/^--(?:\[(=*)\[[\S\s]*?(?:]\1]|$)|[^\n\r]*)/],["str",/^\[(=*)\[[\S\s]*?(?:]\1]|$)/],["kwd",/^(?:and|break|do|else|elseif|end|false|for|function|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i], +["pln",/^[_a-z]\w*/i],["pun",/^[^\w\t\n\r \xa0][^\w\t\n\r "'+=\xa0-]*/]]),["lua"]); diff --git a/slides/js/prettify/lang-ml.js b/slides/js/prettify/lang-ml.js new file mode 100644 index 0000000..6df02d7 --- /dev/null +++ b/slides/js/prettify/lang-ml.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["com",/^#(?:if[\t\n\r \xa0]+(?:[$_a-z][\w']*|``[^\t\n\r`]*(?:``|$))|else|endif|light)/i,null,"#"],["str",/^(?:"(?:[^"\\]|\\[\S\s])*(?:"|$)|'(?:[^'\\]|\\[\S\s])(?:'|$))/,null,"\"'"]],[["com",/^(?:\/\/[^\n\r]*|\(\*[\S\s]*?\*\))/],["kwd",/^(?:abstract|and|as|assert|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|if|in|inherit|inline|interface|internal|lazy|let|match|member|module|mutable|namespace|new|null|of|open|or|override|private|public|rec|return|static|struct|then|to|true|try|type|upcast|use|val|void|when|while|with|yield|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|global|include|method|mixin|object|parallel|process|protected|pure|sealed|trait|virtual|volatile)\b/], +["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^(?:[_a-z][\w']*[!#?]?|``[^\t\n\r`]*(?:``|$))/i],["pun",/^[^\w\t\n\r "'\xa0]+/]]),["fs","ml"]); diff --git a/slides/js/prettify/lang-n.js b/slides/js/prettify/lang-n.js new file mode 100644 index 0000000..6c2e85b --- /dev/null +++ b/slides/js/prettify/lang-n.js @@ -0,0 +1,4 @@ +var a=null; +PR.registerLangHandler(PR.createSimpleLexer([["str",/^(?:'(?:[^\n\r'\\]|\\.)*'|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,a,'"'],["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,a,"#"],["pln",/^\s+/,a," \r\n\t\xa0"]],[["str",/^@"(?:[^"]|"")*(?:"|$)/,a],["str",/^<#[^#>]*(?:#>|$)/,a],["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,a],["com",/^\/\/[^\n\r]*/,a],["com",/^\/\*[\S\s]*?(?:\*\/|$)/, +a],["kwd",/^(?:abstract|and|as|base|catch|class|def|delegate|enum|event|extern|false|finally|fun|implements|interface|internal|is|macro|match|matches|module|mutable|namespace|new|null|out|override|params|partial|private|protected|public|ref|sealed|static|struct|syntax|this|throw|true|try|type|typeof|using|variant|virtual|volatile|when|where|with|assert|assert2|async|break|checked|continue|do|else|ensures|for|foreach|if|late|lock|new|nolate|otherwise|regexp|repeat|requires|return|surroundwith|unchecked|unless|using|while|yield)\b/, +a],["typ",/^(?:array|bool|byte|char|decimal|double|float|int|list|long|object|sbyte|short|string|ulong|uint|ufloat|ulong|ushort|void)\b/,a],["lit",/^@[$_a-z][\w$@]*/i,a],["typ",/^@[A-Z]+[a-z][\w$@]*/,a],["pln",/^'?[$_a-z][\w$@]*/i,a],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,a,"0123456789"],["pun",/^.[^\s\w"-$'./@`]*/,a]]),["n","nemerle"]); diff --git a/slides/js/prettify/lang-proto.js b/slides/js/prettify/lang-proto.js new file mode 100644 index 0000000..f006ad8 --- /dev/null +++ b/slides/js/prettify/lang-proto.js @@ -0,0 +1 @@ +PR.registerLangHandler(PR.sourceDecorator({keywords:"bytes,default,double,enum,extend,extensions,false,group,import,max,message,option,optional,package,repeated,required,returns,rpc,service,syntax,to,true",types:/^(bool|(double|s?fixed|[su]?int)(32|64)|float|string)\b/,cStyleComments:!0}),["proto"]); diff --git a/slides/js/prettify/lang-scala.js b/slides/js/prettify/lang-scala.js new file mode 100644 index 0000000..60d034d --- /dev/null +++ b/slides/js/prettify/lang-scala.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["str",/^"(?:""(?:""?(?!")|[^"\\]|\\.)*"{0,3}|(?:[^\n\r"\\]|\\.)*"?)/,null,'"'],["lit",/^`(?:[^\n\r\\`]|\\.)*`?/,null,"`"],["pun",/^[!#%&(--:-@[-^{-~]+/,null,"!#%&()*+,-:;<=>?@[\\]^{|}~"]],[["str",/^'(?:[^\n\r'\\]|\\(?:'|[^\n\r']+))'/],["lit",/^'[$A-Z_a-z][\w$]*(?![\w$'])/],["kwd",/^(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|object|override|package|private|protected|requires|return|sealed|super|throw|trait|try|type|val|var|while|with|yield)\b/], +["lit",/^(?:true|false|null|this)\b/],["lit",/^(?:0(?:[0-7]+|x[\da-f]+)l?|(?:0|[1-9]\d*)(?:(?:\.\d+)?(?:e[+-]?\d+)?f?|l?)|\\.\d+(?:e[+-]?\d+)?f?)/i],["typ",/^[$_]*[A-Z][\d$A-Z_]*[a-z][\w$]*/],["pln",/^[$A-Z_a-z][\w$]*/],["com",/^\/(?:\/.*|\*(?:\/|\**[^*/])*(?:\*+\/?)?)/],["pun",/^(?:\.+|\/)/]]),["scala"]); diff --git a/slides/js/prettify/lang-sql.js b/slides/js/prettify/lang-sql.js new file mode 100644 index 0000000..da705b0 --- /dev/null +++ b/slides/js/prettify/lang-sql.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["str",/^(?:"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')/,null,"\"'"]],[["com",/^(?:--[^\n\r]*|\/\*[\S\s]*?(?:\*\/|$))/],["kwd",/^(?:add|all|alter|and|any|as|asc|authorization|backup|begin|between|break|browse|bulk|by|cascade|case|check|checkpoint|close|clustered|coalesce|collate|column|commit|compute|constraint|contains|containstable|continue|convert|create|cross|current|current_date|current_time|current_timestamp|current_user|cursor|database|dbcc|deallocate|declare|default|delete|deny|desc|disk|distinct|distributed|double|drop|dummy|dump|else|end|errlvl|escape|except|exec|execute|exists|exit|fetch|file|fillfactor|for|foreign|freetext|freetexttable|from|full|function|goto|grant|group|having|holdlock|identity|identitycol|identity_insert|if|in|index|inner|insert|intersect|into|is|join|key|kill|left|like|lineno|load|match|merge|national|nocheck|nonclustered|not|null|nullif|of|off|offsets|on|open|opendatasource|openquery|openrowset|openxml|option|or|order|outer|over|percent|plan|precision|primary|print|proc|procedure|public|raiserror|read|readtext|reconfigure|references|replication|restore|restrict|return|revoke|right|rollback|rowcount|rowguidcol|rule|save|schema|select|session_user|set|setuser|shutdown|some|statistics|system_user|table|textsize|then|to|top|tran|transaction|trigger|truncate|tsequal|union|unique|update|updatetext|use|user|using|values|varying|view|waitfor|when|where|while|with|writetext)(?=[^\w-]|$)/i, +null],["lit",/^[+-]?(?:0x[\da-f]+|(?:\.\d+|\d+(?:\.\d*)?)(?:e[+-]?\d+)?)/i],["pln",/^[_a-z][\w-]*/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'+\xa0-]*/]]),["sql"]); diff --git a/slides/js/prettify/lang-tex.js b/slides/js/prettify/lang-tex.js new file mode 100644 index 0000000..ce96fbb --- /dev/null +++ b/slides/js/prettify/lang-tex.js @@ -0,0 +1 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"],["com",/^%[^\n\r]*/,null,"%"]],[["kwd",/^\\[@-Za-z]+/],["kwd",/^\\./],["typ",/^[$&]/],["lit",/[+-]?(?:\.\d+|\d+(?:\.\d*)?)(cm|em|ex|in|pc|pt|bp|mm)/i],["pun",/^[()=[\]{}]+/]]),["latex","tex"]); diff --git a/slides/js/prettify/lang-vb.js b/slides/js/prettify/lang-vb.js new file mode 100644 index 0000000..07506b0 --- /dev/null +++ b/slides/js/prettify/lang-vb.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0\u2028\u2029]+/,null,"\t\n\r \xa0

"],["str",/^(?:["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})(?:["\u201c\u201d]c|$)|["\u201c\u201d](?:[^"\u201c\u201d]|["\u201c\u201d]{2})*(?:["\u201c\u201d]|$))/i,null,'"“”'],["com",/^['\u2018\u2019].*/,null,"'‘’"]],[["kwd",/^(?:addhandler|addressof|alias|and|andalso|ansi|as|assembly|auto|boolean|byref|byte|byval|call|case|catch|cbool|cbyte|cchar|cdate|cdbl|cdec|char|cint|class|clng|cobj|const|cshort|csng|cstr|ctype|date|decimal|declare|default|delegate|dim|directcast|do|double|each|else|elseif|end|endif|enum|erase|error|event|exit|finally|for|friend|function|get|gettype|gosub|goto|handles|if|implements|imports|in|inherits|integer|interface|is|let|lib|like|long|loop|me|mod|module|mustinherit|mustoverride|mybase|myclass|namespace|new|next|not|notinheritable|notoverridable|object|on|option|optional|or|orelse|overloads|overridable|overrides|paramarray|preserve|private|property|protected|public|raiseevent|readonly|redim|removehandler|resume|return|select|set|shadows|shared|short|single|static|step|stop|string|structure|sub|synclock|then|throw|to|try|typeof|unicode|until|variant|wend|when|while|with|withevents|writeonly|xor|endif|gosub|let|variant|wend)\b/i, +null],["com",/^rem.*/i],["lit",/^(?:true\b|false\b|nothing\b|\d+(?:e[+-]?\d+[dfr]?|[dfilrs])?|(?:&h[\da-f]+|&o[0-7]+)[ils]?|\d*\.\d+(?:e[+-]?\d+)?[dfr]?|#\s+(?:\d+[/-]\d+[/-]\d+(?:\s+\d+:\d+(?::\d+)?(\s*(?:am|pm))?)?|\d+:\d+(?::\d+)?(\s*(?:am|pm))?)\s+#)/i],["pln",/^(?:(?:[a-z]|_\w)\w*|\[(?:[a-z]|_\w)\w*])/i],["pun",/^[^\w\t\n\r "'[\]\xa0\u2018\u2019\u201c\u201d\u2028\u2029]+/],["pun",/^(?:\[|])/]]),["vb","vbs"]); diff --git a/slides/js/prettify/lang-vhdl.js b/slides/js/prettify/lang-vhdl.js new file mode 100644 index 0000000..128b5b6 --- /dev/null +++ b/slides/js/prettify/lang-vhdl.js @@ -0,0 +1,3 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\t\n\r \xa0]+/,null,"\t\n\r \xa0"]],[["str",/^(?:[box]?"(?:[^"]|"")*"|'.')/i],["com",/^--[^\n\r]*/],["kwd",/^(?:abs|access|after|alias|all|and|architecture|array|assert|attribute|begin|block|body|buffer|bus|case|component|configuration|constant|disconnect|downto|else|elsif|end|entity|exit|file|for|function|generate|generic|group|guarded|if|impure|in|inertial|inout|is|label|library|linkage|literal|loop|map|mod|nand|new|next|nor|not|null|of|on|open|or|others|out|package|port|postponed|procedure|process|pure|range|record|register|reject|rem|report|return|rol|ror|select|severity|shared|signal|sla|sll|sra|srl|subtype|then|to|transport|type|unaffected|units|until|use|variable|wait|when|while|with|xnor|xor)(?=[^\w-]|$)/i, +null],["typ",/^(?:bit|bit_vector|character|boolean|integer|real|time|string|severity_level|positive|natural|signed|unsigned|line|text|std_u?logic(?:_vector)?)(?=[^\w-]|$)/i,null],["typ",/^'(?:active|ascending|base|delayed|driving|driving_value|event|high|image|instance_name|last_active|last_event|last_value|left|leftof|length|low|path_name|pos|pred|quiet|range|reverse_range|right|rightof|simple_name|stable|succ|transaction|val|value)(?=[^\w-]|$)/i,null],["lit",/^\d+(?:_\d+)*(?:#[\w.\\]+#(?:[+-]?\d+(?:_\d+)*)?|(?:\.\d+(?:_\d+)*)?(?:e[+-]?\d+(?:_\d+)*)?)/i], +["pln",/^(?:[a-z]\w*|\\[^\\]*\\)/i],["pun",/^[^\w\t\n\r "'\xa0][^\w\t\n\r "'\xa0-]*/]]),["vhdl","vhd"]); diff --git a/slides/js/prettify/lang-wiki.js b/slides/js/prettify/lang-wiki.js new file mode 100644 index 0000000..9b0b448 --- /dev/null +++ b/slides/js/prettify/lang-wiki.js @@ -0,0 +1,2 @@ +PR.registerLangHandler(PR.createSimpleLexer([["pln",/^[\d\t a-gi-z\xa0]+/,null,"\t \xa0abcdefgijklmnopqrstuvwxyz0123456789"],["pun",/^[*=[\]^~]+/,null,"=*~^[]"]],[["lang-wiki.meta",/(?:^^|\r\n?|\n)(#[a-z]+)\b/],["lit",/^[A-Z][a-z][\da-z]+[A-Z][a-z][^\W_]+\b/],["lang-",/^{{{([\S\s]+?)}}}/],["lang-",/^`([^\n\r`]+)`/],["str",/^https?:\/\/[^\s#/?]*(?:\/[^\s#?]*)?(?:\?[^\s#]*)?(?:#\S*)?/i],["pln",/^(?:\r\n|[\S\s])[^\n\r#*=A-[^`h{~]*/]]),["wiki"]); +PR.registerLangHandler(PR.createSimpleLexer([["kwd",/^#[a-z]+/i,null,"#"]],[]),["wiki.meta"]); diff --git a/slides/js/prettify/lang-xq.js b/slides/js/prettify/lang-xq.js new file mode 100644 index 0000000..e323ae3 --- /dev/null +++ b/slides/js/prettify/lang-xq.js @@ -0,0 +1,3 @@ +PR.registerLangHandler(PR.createSimpleLexer([["var pln",/^\$[\w-]+/,null,"$"]],[["pln",/^[\s=][<>][\s=]/],["lit",/^@[\w-]+/],["tag",/^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["com",/^\(:[\S\s]*?:\)/],["pln",/^[(),/;[\]{}]$/],["str",/^(?:"(?:[^"\\{]|\\[\S\s])*(?:"|$)|'(?:[^'\\{]|\\[\S\s])*(?:'|$))/,null,"\"'"],["kwd",/^(?:xquery|where|version|variable|union|typeswitch|treat|to|then|text|stable|sortby|some|self|schema|satisfies|returns|return|ref|processing-instruction|preceding-sibling|preceding|precedes|parent|only|of|node|namespace|module|let|item|intersect|instance|in|import|if|function|for|follows|following-sibling|following|external|except|every|else|element|descending|descendant-or-self|descendant|define|default|declare|comment|child|cast|case|before|attribute|assert|ascending|as|ancestor-or-self|ancestor|after|eq|order|by|or|and|schema-element|document-node|node|at)\b/], +["typ",/^(?:xs:yearMonthDuration|xs:unsignedLong|xs:time|xs:string|xs:short|xs:QName|xs:Name|xs:long|xs:integer|xs:int|xs:gYearMonth|xs:gYear|xs:gMonthDay|xs:gDay|xs:float|xs:duration|xs:double|xs:decimal|xs:dayTimeDuration|xs:dateTime|xs:date|xs:byte|xs:boolean|xs:anyURI|xf:yearMonthDuration)\b/,null],["fun pln",/^(?:xp:dereference|xinc:node-expand|xinc:link-references|xinc:link-expand|xhtml:restructure|xhtml:clean|xhtml:add-lists|xdmp:zip-manifest|xdmp:zip-get|xdmp:zip-create|xdmp:xquery-version|xdmp:word-convert|xdmp:with-namespaces|xdmp:version|xdmp:value|xdmp:user-roles|xdmp:user-last-login|xdmp:user|xdmp:url-encode|xdmp:url-decode|xdmp:uri-is-file|xdmp:uri-format|xdmp:uri-content-type|xdmp:unquote|xdmp:unpath|xdmp:triggers-database|xdmp:trace|xdmp:to-json|xdmp:tidy|xdmp:subbinary|xdmp:strftime|xdmp:spawn-in|xdmp:spawn|xdmp:sleep|xdmp:shutdown|xdmp:set-session-field|xdmp:set-response-encoding|xdmp:set-response-content-type|xdmp:set-response-code|xdmp:set-request-time-limit|xdmp:set|xdmp:servers|xdmp:server-status|xdmp:server-name|xdmp:server|xdmp:security-database|xdmp:security-assert|xdmp:schema-database|xdmp:save|xdmp:role-roles|xdmp:role|xdmp:rethrow|xdmp:restart|xdmp:request-timestamp|xdmp:request-status|xdmp:request-cancel|xdmp:request|xdmp:redirect-response|xdmp:random|xdmp:quote|xdmp:query-trace|xdmp:query-meters|xdmp:product-edition|xdmp:privilege-roles|xdmp:privilege|xdmp:pretty-print|xdmp:powerpoint-convert|xdmp:platform|xdmp:permission|xdmp:pdf-convert|xdmp:path|xdmp:octal-to-integer|xdmp:node-uri|xdmp:node-replace|xdmp:node-kind|xdmp:node-insert-child|xdmp:node-insert-before|xdmp:node-insert-after|xdmp:node-delete|xdmp:node-database|xdmp:mul64|xdmp:modules-root|xdmp:modules-database|xdmp:merging|xdmp:merge-cancel|xdmp:merge|xdmp:md5|xdmp:logout|xdmp:login|xdmp:log-level|xdmp:log|xdmp:lock-release|xdmp:lock-acquire|xdmp:load|xdmp:invoke-in|xdmp:invoke|xdmp:integer-to-octal|xdmp:integer-to-hex|xdmp:http-put|xdmp:http-post|xdmp:http-options|xdmp:http-head|xdmp:http-get|xdmp:http-delete|xdmp:hosts|xdmp:host-status|xdmp:host-name|xdmp:host|xdmp:hex-to-integer|xdmp:hash64|xdmp:hash32|xdmp:has-privilege|xdmp:groups|xdmp:group-serves|xdmp:group-servers|xdmp:group-name|xdmp:group-hosts|xdmp:group|xdmp:get-session-field-names|xdmp:get-session-field|xdmp:get-response-encoding|xdmp:get-response-code|xdmp:get-request-username|xdmp:get-request-user|xdmp:get-request-url|xdmp:get-request-protocol|xdmp:get-request-path|xdmp:get-request-method|xdmp:get-request-header-names|xdmp:get-request-header|xdmp:get-request-field-names|xdmp:get-request-field-filename|xdmp:get-request-field-content-type|xdmp:get-request-field|xdmp:get-request-client-certificate|xdmp:get-request-client-address|xdmp:get-request-body|xdmp:get-current-user|xdmp:get-current-roles|xdmp:get|xdmp:function-name|xdmp:function-module|xdmp:function|xdmp:from-json|xdmp:forests|xdmp:forest-status|xdmp:forest-restore|xdmp:forest-restart|xdmp:forest-name|xdmp:forest-delete|xdmp:forest-databases|xdmp:forest-counts|xdmp:forest-clear|xdmp:forest-backup|xdmp:forest|xdmp:filesystem-file|xdmp:filesystem-directory|xdmp:exists|xdmp:excel-convert|xdmp:eval-in|xdmp:eval|xdmp:estimate|xdmp:email|xdmp:element-content-type|xdmp:elapsed-time|xdmp:document-set-quality|xdmp:document-set-property|xdmp:document-set-properties|xdmp:document-set-permissions|xdmp:document-set-collections|xdmp:document-remove-properties|xdmp:document-remove-permissions|xdmp:document-remove-collections|xdmp:document-properties|xdmp:document-locks|xdmp:document-load|xdmp:document-insert|xdmp:document-get-quality|xdmp:document-get-properties|xdmp:document-get-permissions|xdmp:document-get-collections|xdmp:document-get|xdmp:document-forest|xdmp:document-delete|xdmp:document-add-properties|xdmp:document-add-permissions|xdmp:document-add-collections|xdmp:directory-properties|xdmp:directory-locks|xdmp:directory-delete|xdmp:directory-create|xdmp:directory|xdmp:diacritic-less|xdmp:describe|xdmp:default-permissions|xdmp:default-collections|xdmp:databases|xdmp:database-restore-validate|xdmp:database-restore-status|xdmp:database-restore-cancel|xdmp:database-restore|xdmp:database-name|xdmp:database-forests|xdmp:database-backup-validate|xdmp:database-backup-status|xdmp:database-backup-purge|xdmp:database-backup-cancel|xdmp:database-backup|xdmp:database|xdmp:collection-properties|xdmp:collection-locks|xdmp:collection-delete|xdmp:collation-canonical-uri|xdmp:castable-as|xdmp:can-grant-roles|xdmp:base64-encode|xdmp:base64-decode|xdmp:architecture|xdmp:apply|xdmp:amp-roles|xdmp:amp|xdmp:add64|xdmp:add-response-header|xdmp:access|trgr:trigger-set-recursive|trgr:trigger-set-permissions|trgr:trigger-set-name|trgr:trigger-set-module|trgr:trigger-set-event|trgr:trigger-set-description|trgr:trigger-remove-permissions|trgr:trigger-module|trgr:trigger-get-permissions|trgr:trigger-enable|trgr:trigger-disable|trgr:trigger-database-online-event|trgr:trigger-data-event|trgr:trigger-add-permissions|trgr:remove-trigger|trgr:property-content|trgr:pre-commit|trgr:post-commit|trgr:get-trigger-by-id|trgr:get-trigger|trgr:document-scope|trgr:document-content|trgr:directory-scope|trgr:create-trigger|trgr:collection-scope|trgr:any-property-content|thsr:set-entry|thsr:remove-term|thsr:remove-synonym|thsr:remove-entry|thsr:query-lookup|thsr:lookup|thsr:load|thsr:insert|thsr:expand|thsr:add-synonym|spell:suggest-detailed|spell:suggest|spell:remove-word|spell:make-dictionary|spell:load|spell:levenshtein-distance|spell:is-correct|spell:insert|spell:double-metaphone|spell:add-word|sec:users-collection|sec:user-set-roles|sec:user-set-password|sec:user-set-name|sec:user-set-description|sec:user-set-default-permissions|sec:user-set-default-collections|sec:user-remove-roles|sec:user-privileges|sec:user-get-roles|sec:user-get-description|sec:user-get-default-permissions|sec:user-get-default-collections|sec:user-doc-permissions|sec:user-doc-collections|sec:user-add-roles|sec:unprotect-collection|sec:uid-for-name|sec:set-realm|sec:security-version|sec:security-namespace|sec:security-installed|sec:security-collection|sec:roles-collection|sec:role-set-roles|sec:role-set-name|sec:role-set-description|sec:role-set-default-permissions|sec:role-set-default-collections|sec:role-remove-roles|sec:role-privileges|sec:role-get-roles|sec:role-get-description|sec:role-get-default-permissions|sec:role-get-default-collections|sec:role-doc-permissions|sec:role-doc-collections|sec:role-add-roles|sec:remove-user|sec:remove-role-from-users|sec:remove-role-from-role|sec:remove-role-from-privileges|sec:remove-role-from-amps|sec:remove-role|sec:remove-privilege|sec:remove-amp|sec:protect-collection|sec:privileges-collection|sec:privilege-set-roles|sec:privilege-set-name|sec:privilege-remove-roles|sec:privilege-get-roles|sec:privilege-add-roles|sec:priv-doc-permissions|sec:priv-doc-collections|sec:get-user-names|sec:get-unique-elem-id|sec:get-role-names|sec:get-role-ids|sec:get-privilege|sec:get-distinct-permissions|sec:get-collection|sec:get-amp|sec:create-user-with-role|sec:create-user|sec:create-role|sec:create-privilege|sec:create-amp|sec:collections-collection|sec:collection-set-permissions|sec:collection-remove-permissions|sec:collection-get-permissions|sec:collection-add-permissions|sec:check-admin|sec:amps-collection|sec:amp-set-roles|sec:amp-remove-roles|sec:amp-get-roles|sec:amp-doc-permissions|sec:amp-doc-collections|sec:amp-add-roles|search:unparse|search:suggest|search:snippet|search:search|search:resolve-nodes|search:resolve|search:remove-constraint|search:parse|search:get-default-options|search:estimate|search:check-options|prof:value|prof:reset|prof:report|prof:invoke|prof:eval|prof:enable|prof:disable|prof:allowed|ppt:clean|pki:template-set-request|pki:template-set-name|pki:template-set-key-type|pki:template-set-key-options|pki:template-set-description|pki:template-in-use|pki:template-get-version|pki:template-get-request|pki:template-get-name|pki:template-get-key-type|pki:template-get-key-options|pki:template-get-id|pki:template-get-description|pki:need-certificate|pki:is-temporary|pki:insert-trusted-certificates|pki:insert-template|pki:insert-signed-certificates|pki:insert-certificate-revocation-list|pki:get-trusted-certificate-ids|pki:get-template-ids|pki:get-template-certificate-authority|pki:get-template-by-name|pki:get-template|pki:get-pending-certificate-requests-xml|pki:get-pending-certificate-requests-pem|pki:get-pending-certificate-request|pki:get-certificates-for-template-xml|pki:get-certificates-for-template|pki:get-certificates|pki:get-certificate-xml|pki:get-certificate-pem|pki:get-certificate|pki:generate-temporary-certificate-if-necessary|pki:generate-temporary-certificate|pki:generate-template-certificate-authority|pki:generate-certificate-request|pki:delete-template|pki:delete-certificate|pki:create-template|pdf:make-toc|pdf:insert-toc-headers|pdf:get-toc|pdf:clean|p:status-transition|p:state-transition|p:remove|p:pipelines|p:insert|p:get-by-id|p:get|p:execute|p:create|p:condition|p:collection|p:action|ooxml:runs-merge|ooxml:package-uris|ooxml:package-parts-insert|ooxml:package-parts|msword:clean|mcgm:polygon|mcgm:point|mcgm:geospatial-query-from-elements|mcgm:geospatial-query|mcgm:circle|math:tanh|math:tan|math:sqrt|math:sinh|math:sin|math:pow|math:modf|math:log10|math:log|math:ldexp|math:frexp|math:fmod|math:floor|math:fabs|math:exp|math:cosh|math:cos|math:ceil|math:atan2|math:atan|math:asin|math:acos|map:put|map:map|map:keys|map:get|map:delete|map:count|map:clear|lnk:to|lnk:remove|lnk:insert|lnk:get|lnk:from|lnk:create|kml:polygon|kml:point|kml:interior-polygon|kml:geospatial-query-from-elements|kml:geospatial-query|kml:circle|kml:box|gml:polygon|gml:point|gml:interior-polygon|gml:geospatial-query-from-elements|gml:geospatial-query|gml:circle|gml:box|georss:point|georss:geospatial-query|georss:circle|geo:polygon|geo:point|geo:interior-polygon|geo:geospatial-query-from-elements|geo:geospatial-query|geo:circle|geo:box|fn:zero-or-one|fn:years-from-duration|fn:year-from-dateTime|fn:year-from-date|fn:upper-case|fn:unordered|fn:true|fn:translate|fn:trace|fn:tokenize|fn:timezone-from-time|fn:timezone-from-dateTime|fn:timezone-from-date|fn:sum|fn:subtract-dateTimes-yielding-yearMonthDuration|fn:subtract-dateTimes-yielding-dayTimeDuration|fn:substring-before|fn:substring-after|fn:substring|fn:subsequence|fn:string-to-codepoints|fn:string-pad|fn:string-length|fn:string-join|fn:string|fn:static-base-uri|fn:starts-with|fn:seconds-from-time|fn:seconds-from-duration|fn:seconds-from-dateTime|fn:round-half-to-even|fn:round|fn:root|fn:reverse|fn:resolve-uri|fn:resolve-QName|fn:replace|fn:remove|fn:QName|fn:prefix-from-QName|fn:position|fn:one-or-more|fn:number|fn:not|fn:normalize-unicode|fn:normalize-space|fn:node-name|fn:node-kind|fn:nilled|fn:namespace-uri-from-QName|fn:namespace-uri-for-prefix|fn:namespace-uri|fn:name|fn:months-from-duration|fn:month-from-dateTime|fn:month-from-date|fn:minutes-from-time|fn:minutes-from-duration|fn:minutes-from-dateTime|fn:min|fn:max|fn:matches|fn:lower-case|fn:local-name-from-QName|fn:local-name|fn:last|fn:lang|fn:iri-to-uri|fn:insert-before|fn:index-of|fn:in-scope-prefixes|fn:implicit-timezone|fn:idref|fn:id|fn:hours-from-time|fn:hours-from-duration|fn:hours-from-dateTime|fn:floor|fn:false|fn:expanded-QName|fn:exists|fn:exactly-one|fn:escape-uri|fn:escape-html-uri|fn:error|fn:ends-with|fn:encode-for-uri|fn:empty|fn:document-uri|fn:doc-available|fn:doc|fn:distinct-values|fn:distinct-nodes|fn:default-collation|fn:deep-equal|fn:days-from-duration|fn:day-from-dateTime|fn:day-from-date|fn:data|fn:current-time|fn:current-dateTime|fn:current-date|fn:count|fn:contains|fn:concat|fn:compare|fn:collection|fn:codepoints-to-string|fn:codepoint-equal|fn:ceiling|fn:boolean|fn:base-uri|fn:avg|fn:adjust-time-to-timezone|fn:adjust-dateTime-to-timezone|fn:adjust-date-to-timezone|fn:abs|feed:unsubscribe|feed:subscription|feed:subscribe|feed:request|feed:item|feed:description|excel:clean|entity:enrich|dom:set-pipelines|dom:set-permissions|dom:set-name|dom:set-evaluation-context|dom:set-domain-scope|dom:set-description|dom:remove-pipeline|dom:remove-permissions|dom:remove|dom:get|dom:evaluation-context|dom:domains|dom:domain-scope|dom:create|dom:configuration-set-restart-user|dom:configuration-set-permissions|dom:configuration-set-evaluation-context|dom:configuration-set-default-domain|dom:configuration-get|dom:configuration-create|dom:collection|dom:add-pipeline|dom:add-permissions|dls:retention-rules|dls:retention-rule-remove|dls:retention-rule-insert|dls:retention-rule|dls:purge|dls:node-expand|dls:link-references|dls:link-expand|dls:documents-query|dls:document-versions-query|dls:document-version-uri|dls:document-version-query|dls:document-version-delete|dls:document-version-as-of|dls:document-version|dls:document-update|dls:document-unmanage|dls:document-set-quality|dls:document-set-property|dls:document-set-properties|dls:document-set-permissions|dls:document-set-collections|dls:document-retention-rules|dls:document-remove-properties|dls:document-remove-permissions|dls:document-remove-collections|dls:document-purge|dls:document-manage|dls:document-is-managed|dls:document-insert-and-manage|dls:document-include-query|dls:document-history|dls:document-get-permissions|dls:document-extract-part|dls:document-delete|dls:document-checkout-status|dls:document-checkout|dls:document-checkin|dls:document-add-properties|dls:document-add-permissions|dls:document-add-collections|dls:break-checkout|dls:author-query|dls:as-of-query|dbk:convert|dbg:wait|dbg:value|dbg:stopped|dbg:stop|dbg:step|dbg:status|dbg:stack|dbg:out|dbg:next|dbg:line|dbg:invoke|dbg:function|dbg:finish|dbg:expr|dbg:eval|dbg:disconnect|dbg:detach|dbg:continue|dbg:connect|dbg:clear|dbg:breakpoints|dbg:break|dbg:attached|dbg:attach|cvt:save-converted-documents|cvt:part-uri|cvt:destination-uri|cvt:basepath|cvt:basename|cts:words|cts:word-query-weight|cts:word-query-text|cts:word-query-options|cts:word-query|cts:word-match|cts:walk|cts:uris|cts:uri-match|cts:train|cts:tokenize|cts:thresholds|cts:stem|cts:similar-query-weight|cts:similar-query-nodes|cts:similar-query|cts:shortest-distance|cts:search|cts:score|cts:reverse-query-weight|cts:reverse-query-nodes|cts:reverse-query|cts:remainder|cts:registered-query-weight|cts:registered-query-options|cts:registered-query-ids|cts:registered-query|cts:register|cts:query|cts:quality|cts:properties-query-query|cts:properties-query|cts:polygon-vertices|cts:polygon|cts:point-longitude|cts:point-latitude|cts:point|cts:or-query-queries|cts:or-query|cts:not-query-weight|cts:not-query-query|cts:not-query|cts:near-query-weight|cts:near-query-queries|cts:near-query-options|cts:near-query-distance|cts:near-query|cts:highlight|cts:geospatial-co-occurrences|cts:frequency|cts:fitness|cts:field-words|cts:field-word-query-weight|cts:field-word-query-text|cts:field-word-query-options|cts:field-word-query-field-name|cts:field-word-query|cts:field-word-match|cts:entity-highlight|cts:element-words|cts:element-word-query-weight|cts:element-word-query-text|cts:element-word-query-options|cts:element-word-query-element-name|cts:element-word-query|cts:element-word-match|cts:element-values|cts:element-value-ranges|cts:element-value-query-weight|cts:element-value-query-text|cts:element-value-query-options|cts:element-value-query-element-name|cts:element-value-query|cts:element-value-match|cts:element-value-geospatial-co-occurrences|cts:element-value-co-occurrences|cts:element-range-query-weight|cts:element-range-query-value|cts:element-range-query-options|cts:element-range-query-operator|cts:element-range-query-element-name|cts:element-range-query|cts:element-query-query|cts:element-query-element-name|cts:element-query|cts:element-pair-geospatial-values|cts:element-pair-geospatial-value-match|cts:element-pair-geospatial-query-weight|cts:element-pair-geospatial-query-region|cts:element-pair-geospatial-query-options|cts:element-pair-geospatial-query-longitude-name|cts:element-pair-geospatial-query-latitude-name|cts:element-pair-geospatial-query-element-name|cts:element-pair-geospatial-query|cts:element-pair-geospatial-boxes|cts:element-geospatial-values|cts:element-geospatial-value-match|cts:element-geospatial-query-weight|cts:element-geospatial-query-region|cts:element-geospatial-query-options|cts:element-geospatial-query-element-name|cts:element-geospatial-query|cts:element-geospatial-boxes|cts:element-child-geospatial-values|cts:element-child-geospatial-value-match|cts:element-child-geospatial-query-weight|cts:element-child-geospatial-query-region|cts:element-child-geospatial-query-options|cts:element-child-geospatial-query-element-name|cts:element-child-geospatial-query-child-name|cts:element-child-geospatial-query|cts:element-child-geospatial-boxes|cts:element-attribute-words|cts:element-attribute-word-query-weight|cts:element-attribute-word-query-text|cts:element-attribute-word-query-options|cts:element-attribute-word-query-element-name|cts:element-attribute-word-query-attribute-name|cts:element-attribute-word-query|cts:element-attribute-word-match|cts:element-attribute-values|cts:element-attribute-value-ranges|cts:element-attribute-value-query-weight|cts:element-attribute-value-query-text|cts:element-attribute-value-query-options|cts:element-attribute-value-query-element-name|cts:element-attribute-value-query-attribute-name|cts:element-attribute-value-query|cts:element-attribute-value-match|cts:element-attribute-value-geospatial-co-occurrences|cts:element-attribute-value-co-occurrences|cts:element-attribute-range-query-weight|cts:element-attribute-range-query-value|cts:element-attribute-range-query-options|cts:element-attribute-range-query-operator|cts:element-attribute-range-query-element-name|cts:element-attribute-range-query-attribute-name|cts:element-attribute-range-query|cts:element-attribute-pair-geospatial-values|cts:element-attribute-pair-geospatial-value-match|cts:element-attribute-pair-geospatial-query-weight|cts:element-attribute-pair-geospatial-query-region|cts:element-attribute-pair-geospatial-query-options|cts:element-attribute-pair-geospatial-query-longitude-name|cts:element-attribute-pair-geospatial-query-latitude-name|cts:element-attribute-pair-geospatial-query-element-name|cts:element-attribute-pair-geospatial-query|cts:element-attribute-pair-geospatial-boxes|cts:document-query-uris|cts:document-query|cts:distance|cts:directory-query-uris|cts:directory-query-depth|cts:directory-query|cts:destination|cts:deregister|cts:contains|cts:confidence|cts:collections|cts:collection-query-uris|cts:collection-query|cts:collection-match|cts:classify|cts:circle-radius|cts:circle-center|cts:circle|cts:box-west|cts:box-south|cts:box-north|cts:box-east|cts:box|cts:bearing|cts:arc-intersection|cts:and-query-queries|cts:and-query-options|cts:and-query|cts:and-not-query-positive-query|cts:and-not-query-negative-query|cts:and-not-query|css:get|css:convert|cpf:success|cpf:failure|cpf:document-set-state|cpf:document-set-processing-status|cpf:document-set-last-updated|cpf:document-set-error|cpf:document-get-state|cpf:document-get-processing-status|cpf:document-get-last-updated|cpf:document-get-error|cpf:check-transition|alert:spawn-matching-actions|alert:rule-user-id-query|alert:rule-set-user-id|alert:rule-set-query|alert:rule-set-options|alert:rule-set-name|alert:rule-set-description|alert:rule-set-action|alert:rule-remove|alert:rule-name-query|alert:rule-insert|alert:rule-id-query|alert:rule-get-user-id|alert:rule-get-query|alert:rule-get-options|alert:rule-get-name|alert:rule-get-id|alert:rule-get-description|alert:rule-get-action|alert:rule-action-query|alert:remove-triggers|alert:make-rule|alert:make-log-action|alert:make-config|alert:make-action|alert:invoke-matching-actions|alert:get-my-rules|alert:get-all-rules|alert:get-actions|alert:find-matching-rules|alert:create-triggers|alert:config-set-uri|alert:config-set-trigger-ids|alert:config-set-options|alert:config-set-name|alert:config-set-description|alert:config-set-cpf-domain-names|alert:config-set-cpf-domain-ids|alert:config-insert|alert:config-get-uri|alert:config-get-trigger-ids|alert:config-get-options|alert:config-get-name|alert:config-get-id|alert:config-get-description|alert:config-get-cpf-domain-names|alert:config-get-cpf-domain-ids|alert:config-get|alert:config-delete|alert:action-set-options|alert:action-set-name|alert:action-set-module-root|alert:action-set-module-db|alert:action-set-module|alert:action-set-description|alert:action-remove|alert:action-insert|alert:action-get-options|alert:action-get-name|alert:action-get-module-root|alert:action-get-module-db|alert:action-get-module|alert:action-get-description|zero-or-one|years-from-duration|year-from-dateTime|year-from-date|upper-case|unordered|true|translate|trace|tokenize|timezone-from-time|timezone-from-dateTime|timezone-from-date|sum|subtract-dateTimes-yielding-yearMonthDuration|subtract-dateTimes-yielding-dayTimeDuration|substring-before|substring-after|substring|subsequence|string-to-codepoints|string-pad|string-length|string-join|string|static-base-uri|starts-with|seconds-from-time|seconds-from-duration|seconds-from-dateTime|round-half-to-even|round|root|reverse|resolve-uri|resolve-QName|replace|remove|QName|prefix-from-QName|position|one-or-more|number|not|normalize-unicode|normalize-space|node-name|node-kind|nilled|namespace-uri-from-QName|namespace-uri-for-prefix|namespace-uri|name|months-from-duration|month-from-dateTime|month-from-date|minutes-from-time|minutes-from-duration|minutes-from-dateTime|min|max|matches|lower-case|local-name-from-QName|local-name|last|lang|iri-to-uri|insert-before|index-of|in-scope-prefixes|implicit-timezone|idref|id|hours-from-time|hours-from-duration|hours-from-dateTime|floor|false|expanded-QName|exists|exactly-one|escape-uri|escape-html-uri|error|ends-with|encode-for-uri|empty|document-uri|doc-available|doc|distinct-values|distinct-nodes|default-collation|deep-equal|days-from-duration|day-from-dateTime|day-from-date|data|current-time|current-dateTime|current-date|count|contains|concat|compare|collection|codepoints-to-string|codepoint-equal|ceiling|boolean|base-uri|avg|adjust-time-to-timezone|adjust-dateTime-to-timezone|adjust-date-to-timezone|abs)\b/], +["pln",/^[\w:-]+/],["pln",/^[\t\n\r \xa0]+/]]),["xq","xquery"]); diff --git a/slides/js/prettify/lang-yaml.js b/slides/js/prettify/lang-yaml.js new file mode 100644 index 0000000..c38729b --- /dev/null +++ b/slides/js/prettify/lang-yaml.js @@ -0,0 +1,2 @@ +var a=null; +PR.registerLangHandler(PR.createSimpleLexer([["pun",/^[:>?|]+/,a,":|>?"],["dec",/^%(?:YAML|TAG)[^\n\r#]+/,a,"%"],["typ",/^&\S+/,a,"&"],["typ",/^!\S*/,a,"!"],["str",/^"(?:[^"\\]|\\.)*(?:"|$)/,a,'"'],["str",/^'(?:[^']|'')*(?:'|$)/,a,"'"],["com",/^#[^\n\r]*/,a,"#"],["pln",/^\s+/,a," \t\r\n"]],[["dec",/^(?:---|\.\.\.)(?:[\n\r]|$)/],["pun",/^-/],["kwd",/^\w+:[\n\r ]/],["pln",/^\w+/]]),["yaml","yml"]); diff --git a/slides/js/prettify/prettify.css b/slides/js/prettify/prettify.css new file mode 100644 index 0000000..d44b3a2 --- /dev/null +++ b/slides/js/prettify/prettify.css @@ -0,0 +1 @@ +.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} \ No newline at end of file diff --git a/slides/js/prettify/prettify.js b/slides/js/prettify/prettify.js new file mode 100644 index 0000000..eef5ad7 --- /dev/null +++ b/slides/js/prettify/prettify.js @@ -0,0 +1,28 @@ +var q=null;window.PR_SHOULD_USE_CONTINUATION=!0; +(function(){function L(a){function m(a){var f=a.charCodeAt(0);if(f!==92)return f;var b=a.charAt(1);return(f=r[b])?f:"0"<=b&&b<="7"?parseInt(a.substring(1),8):b==="u"||b==="x"?parseInt(a.substring(2),16):a.charCodeAt(1)}function e(a){if(a<32)return(a<16?"\\x0":"\\x")+a.toString(16);a=String.fromCharCode(a);if(a==="\\"||a==="-"||a==="["||a==="]")a="\\"+a;return a}function h(a){for(var f=a.substring(1,a.length-1).match(/\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\[0-3][0-7]{0,2}|\\[0-7]{1,2}|\\[\S\s]|[^\\]/g),a= +[],b=[],o=f[0]==="^",c=o?1:0,i=f.length;c122||(d<65||j>90||b.push([Math.max(65,j)|32,Math.min(d,90)|32]),d<97||j>122||b.push([Math.max(97,j)&-33,Math.min(d,122)&-33]))}}b.sort(function(a,f){return a[0]-f[0]||f[1]-a[1]});f=[];j=[NaN,NaN];for(c=0;ci[0]&&(i[1]+1>i[0]&&b.push("-"),b.push(e(i[1])));b.push("]");return b.join("")}function y(a){for(var f=a.source.match(/\[(?:[^\\\]]|\\[\S\s])*]|\\u[\dA-Fa-f]{4}|\\x[\dA-Fa-f]{2}|\\\d+|\\[^\dux]|\(\?[!:=]|[()^]|[^()[\\^]+/g),b=f.length,d=[],c=0,i=0;c=2&&a==="["?f[c]=h(j):a!=="\\"&&(f[c]=j.replace(/[A-Za-z]/g,function(a){a=a.charCodeAt(0);return"["+String.fromCharCode(a&-33,a|32)+"]"}));return f.join("")}for(var t=0,s=!1,l=!1,p=0,d=a.length;p=5&&"lang-"===b.substring(0,5))&&!(o&&typeof o[1]==="string"))c=!1,b="src";c||(r[f]=b)}i=d;d+=f.length;if(c){c=o[1];var j=f.indexOf(c),k=j+c.length;o[2]&&(k=f.length-o[2].length,j=k-c.length);b=b.substring(5);B(l+i,f.substring(0,j),e,p);B(l+i+j,c,C(b,c),p);B(l+i+k,f.substring(k),e,p)}else p.push(l+i,b)}a.e=p}var h={},y;(function(){for(var e=a.concat(m), +l=[],p={},d=0,g=e.length;d=0;)h[n.charAt(k)]=r;r=r[1];n=""+r;p.hasOwnProperty(n)||(l.push(r),p[n]=q)}l.push(/[\S\s]/);y=L(l)})();var t=m.length;return e}function u(a){var m=[],e=[];a.tripleQuotedStrings?m.push(["str",/^(?:'''(?:[^'\\]|\\[\S\s]|''?(?=[^']))*(?:'''|$)|"""(?:[^"\\]|\\[\S\s]|""?(?=[^"]))*(?:"""|$)|'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$))/,q,"'\""]):a.multiLineStrings?m.push(["str",/^(?:'(?:[^'\\]|\\[\S\s])*(?:'|$)|"(?:[^"\\]|\\[\S\s])*(?:"|$)|`(?:[^\\`]|\\[\S\s])*(?:`|$))/, +q,"'\"`"]):m.push(["str",/^(?:'(?:[^\n\r'\\]|\\.)*(?:'|$)|"(?:[^\n\r"\\]|\\.)*(?:"|$))/,q,"\"'"]);a.verbatimStrings&&e.push(["str",/^@"(?:[^"]|"")*(?:"|$)/,q]);var h=a.hashComments;h&&(a.cStyleComments?(h>1?m.push(["com",/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,q,"#"]):m.push(["com",/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\n\r]*)/,q,"#"]),e.push(["str",/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,q])):m.push(["com",/^#[^\n\r]*/, +q,"#"]));a.cStyleComments&&(e.push(["com",/^\/\/[^\n\r]*/,q]),e.push(["com",/^\/\*[\S\s]*?(?:\*\/|$)/,q]));a.regexLiterals&&e.push(["lang-regex",/^(?:^^\.?|[!+-]|!=|!==|#|%|%=|&|&&|&&=|&=|\(|\*|\*=|\+=|,|-=|->|\/|\/=|:|::|;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|[?@[^]|\^=|\^\^|\^\^=|{|\||\|=|\|\||\|\|=|~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\s*(\/(?=[^*/])(?:[^/[\\]|\\[\S\s]|\[(?:[^\\\]]|\\[\S\s])*(?:]|$))+\/)/]);(h=a.types)&&e.push(["typ",h]);a=(""+a.keywords).replace(/^ | $/g, +"");a.length&&e.push(["kwd",RegExp("^(?:"+a.replace(/[\s,]+/g,"|")+")\\b"),q]);m.push(["pln",/^\s+/,q," \r\n\t\xa0"]);e.push(["lit",/^@[$_a-z][\w$@]*/i,q],["typ",/^(?:[@_]?[A-Z]+[a-z][\w$@]*|\w+_t\b)/,q],["pln",/^[$_a-z][\w$@]*/i,q],["lit",/^(?:0x[\da-f]+|(?:\d(?:_\d+)*\d*(?:\.\d*)?|\.\d\+)(?:e[+-]?\d+)?)[a-z]*/i,q,"0123456789"],["pln",/^\\[\S\s]?/,q],["pun",/^.[^\s\w"-$'./@\\`]*/,q]);return x(m,e)}function D(a,m){function e(a){switch(a.nodeType){case 1:if(k.test(a.className))break;if("BR"===a.nodeName)h(a), +a.parentNode&&a.parentNode.removeChild(a);else for(a=a.firstChild;a;a=a.nextSibling)e(a);break;case 3:case 4:if(p){var b=a.nodeValue,d=b.match(t);if(d){var c=b.substring(0,d.index);a.nodeValue=c;(b=b.substring(d.index+d[0].length))&&a.parentNode.insertBefore(s.createTextNode(b),a.nextSibling);h(a);c||a.parentNode.removeChild(a)}}}}function h(a){function b(a,d){var e=d?a.cloneNode(!1):a,f=a.parentNode;if(f){var f=b(f,1),g=a.nextSibling;f.appendChild(e);for(var h=g;h;h=g)g=h.nextSibling,f.appendChild(h)}return e} +for(;!a.nextSibling;)if(a=a.parentNode,!a)return;for(var a=b(a.nextSibling,0),e;(e=a.parentNode)&&e.nodeType===1;)a=e;d.push(a)}var k=/(?:^|\s)nocode(?:\s|$)/,t=/\r\n?|\n/,s=a.ownerDocument,l;a.currentStyle?l=a.currentStyle.whiteSpace:window.getComputedStyle&&(l=s.defaultView.getComputedStyle(a,q).getPropertyValue("white-space"));var p=l&&"pre"===l.substring(0,3);for(l=s.createElement("LI");a.firstChild;)l.appendChild(a.firstChild);for(var d=[l],g=0;g=0;){var h=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}function C(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*=o&&(h+=2);e>=c&&(a+=2)}}catch(w){"console"in window&&console.log(w&&w.stack?w.stack:w)}}var v=["break,continue,do,else,for,if,return,while"],w=[[v,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"], +"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"],F=[w,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"],G=[w,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"], +H=[G,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var"],w=[w,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"],I=[v,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"], +J=[v,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"],v=[v,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"],K=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/,N=/\S/,O=u({keywords:[F,H,w,"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END"+ +I,J,v],hashComments:!0,cStyleComments:!0,multiLineStrings:!0,regexLiterals:!0}),A={};k(O,["default-code"]);k(x([],[["pln",/^[^]*(?:>|$)/],["com",/^<\!--[\S\s]*?(?:--\>|$)/],["lang-",/^<\?([\S\s]+?)(?:\?>|$)/],["lang-",/^<%([\S\s]+?)(?:%>|$)/],["pun",/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\S\s]+?)<\/xmp\b[^>]*>/i],["lang-js",/^]*>([\S\s]*?)(<\/script\b[^>]*>)/i],["lang-css",/^]*>([\S\s]*?)(<\/style\b[^>]*>)/i],["lang-in.tag",/^(<\/?[a-z][^<>]*>)/i]]), +["default-markup","htm","html","mxml","xhtml","xml","xsl"]);k(x([["pln",/^\s+/,q," \t\r\n"],["atv",/^(?:"[^"]*"?|'[^']*'?)/,q,"\"'"]],[["tag",/^^<\/?[a-z](?:[\w-.:]*\w)?|\/?>$/i],["atn",/^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],["lang-uq.val",/^=\s*([^\s"'>]*(?:[^\s"'/>]|\/(?=\s)))/],["pun",/^[/<->]+/],["lang-js",/^on\w+\s*=\s*"([^"]+)"/i],["lang-js",/^on\w+\s*=\s*'([^']+)'/i],["lang-js",/^on\w+\s*=\s*([^\s"'>]+)/i],["lang-css",/^style\s*=\s*"([^"]+)"/i],["lang-css",/^style\s*=\s*'([^']+)'/i],["lang-css", +/^style\s*=\s*([^\s"'>]+)/i]]),["in.tag"]);k(x([],[["atv",/^[\S\s]+/]]),["uq.val"]);k(u({keywords:F,hashComments:!0,cStyleComments:!0,types:K}),["c","cc","cpp","cxx","cyc","m"]);k(u({keywords:"null,true,false"}),["json"]);k(u({keywords:H,hashComments:!0,cStyleComments:!0,verbatimStrings:!0,types:K}),["cs"]);k(u({keywords:G,cStyleComments:!0}),["java"]);k(u({keywords:v,hashComments:!0,multiLineStrings:!0}),["bsh","csh","sh"]);k(u({keywords:I,hashComments:!0,multiLineStrings:!0,tripleQuotedStrings:!0}), +["cv","py"]);k(u({keywords:"caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END",hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["perl","pl","pm"]);k(u({keywords:J,hashComments:!0,multiLineStrings:!0,regexLiterals:!0}),["rb"]);k(u({keywords:w,cStyleComments:!0,regexLiterals:!0}),["js"]);k(u({keywords:"all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes", +hashComments:3,cStyleComments:!0,multilineStrings:!0,tripleQuotedStrings:!0,regexLiterals:!0}),["coffee"]);k(x([],[["str",/^[\S\s]+/]]),["regex"]);window.prettyPrintOne=function(a,m,e){var h=document.createElement("PRE");h.innerHTML=a;e&&D(h,e);E({g:m,i:e,h:h});return h.innerHTML};window.prettyPrint=function(a){function m(){for(var e=window.PR_SHOULD_USE_CONTINUATION?l.now()+250:Infinity;p=0){var k=k.match(g),f,b;if(b= +!k){b=n;for(var o=void 0,c=b.firstChild;c;c=c.nextSibling)var i=c.nodeType,o=i===1?o?b:c:i===3?N.test(c.nodeValue)?b:o:o;b=(f=o===b?void 0:o)&&"CODE"===f.tagName}b&&(k=f.className.match(g));k&&(k=k[1]);b=!1;for(o=n.parentNode;o;o=o.parentNode)if((o.tagName==="pre"||o.tagName==="code"||o.tagName==="xmp")&&o.className&&o.className.indexOf("prettyprint")>=0){b=!0;break}b||((b=(b=n.className.match(/\blinenums\b(?::(\d+))?/))?b[1]&&b[1].length?+b[1]:!0:!1)&&D(n,b),d={g:k,h:n,i:b},E(d))}}p0&&(g.splice(m-1,2),m-=2);m=q.pkgs[g=b[0]];b=b.join("/");m&&b===g+"/"+m.main&&(b=g)}else b.indexOf("./")=== +0&&(b=b.substring(2));return b}function l(b,f){var g=b?b.indexOf("!"):-1,m=null,a=f?f.name:null,h=b,e,d;g!==-1&&(m=b.substring(0,g),b=b.substring(g+1,b.length));m&&(m=c(m,a));b&&(m?e=(g=n[m])&&g.normalize?g.normalize(b,function(b){return c(b,a)}):c(b,a):(e=c(b,a),d=G[e],d||(d=i.nameToUrl(b,null,f),G[e]=d)));return{prefix:m,name:e,parentMap:f,url:d,originalName:h,fullName:m?m+"!"+(e||""):e}}function j(){var b=!0,f=q.priorityWait,g,a;if(f){for(a=0;g=f[a];a++)if(!s[g]){b=!1;break}b&&delete q.priorityWait}return b} +function k(b,f,g){return function(){var a=ha.call(arguments,0),c;if(g&&K(c=a[a.length-1]))c.__requireJsBuild=!0;a.push(f);return b.apply(null,a)}}function t(b,f,g){f=k(g||i.require,b,f);$(f,{nameToUrl:k(i.nameToUrl,b),toUrl:k(i.toUrl,b),defined:k(i.requireDefined,b),specified:k(i.requireSpecified,b),isBrowser:d.isBrowser});return f}function p(b){var f,g,a,c=b.callback,h=b.map,e=h.fullName,ca=b.deps;a=b.listeners;var j=q.requireExecCb||d.execCb;if(c&&K(c)){if(q.catchError.define)try{g=j(e,b.callback, +ca,n[e])}catch(k){f=k}else g=j(e,b.callback,ca,n[e]);if(e)(c=b.cjsModule)&&c.exports!==r&&c.exports!==n[e]?g=n[e]=b.cjsModule.exports:g===r&&b.usingExports?g=n[e]:(n[e]=g,H[e]&&(T[e]=!0))}else e&&(g=n[e]=c,H[e]&&(T[e]=!0));if(x[b.id])delete x[b.id],b.isDone=!0,i.waitCount-=1,i.waitCount===0&&(J=[]);delete M[e];if(d.onResourceLoad&&!b.placeholder)d.onResourceLoad(i,h,b.depArray);if(f)return g=(e?l(e).url:"")||f.fileName||f.sourceURL,a=f.moduleTree,f=P("defineerror",'Error evaluating module "'+e+'" at location "'+ +g+'":\n'+f+"\nfileName:"+g+"\nlineNumber: "+(f.lineNumber||f.line),f),f.moduleName=e,f.moduleTree=a,d.onError(f);for(f=0;c=a[f];f++)c(g);return r}function u(b,f){return function(g){b.depDone[f]||(b.depDone[f]=!0,b.deps[f]=g,b.depCount-=1,b.depCount||p(b))}}function o(b,f){var g=f.map,a=g.fullName,c=g.name,h=N[b]||(N[b]=n[b]),e;if(!f.loading)f.loading=!0,e=function(b){f.callback=function(){return b};p(f);s[f.id]=!0;A()},e.fromText=function(b,f){var g=Q;s[b]=!1;i.scriptCount+=1;i.fake[b]=!0;g&&(Q=!1); +d.exec(f);g&&(Q=!0);i.completeLoad(b)},a in n?e(n[a]):h.load(c,t(g.parentMap,!0,function(b,a){var c=[],e,m;for(e=0;m=b[e];e++)m=l(m,g.parentMap),b[e]=m.fullName,m.prefix||c.push(b[e]);f.moduleDeps=(f.moduleDeps||[]).concat(c);return i.require(b,a)}),e,q)}function y(b){x[b.id]||(x[b.id]=b,J.push(b),i.waitCount+=1)}function D(b){this.listeners.push(b)}function v(b,f){var g=b.fullName,a=b.prefix,c=a?N[a]||(N[a]=n[a]):null,h,e;g&&(h=M[g]);if(!h&&(e=!0,h={id:(a&&!c?O++ +"__p@:":"")+(g||"__r@"+O++),map:b, +depCount:0,depDone:[],depCallbacks:[],deps:[],listeners:[],add:D},B[h.id]=!0,g&&(!a||N[a])))M[g]=h;a&&!c?(g=l(a),a in n&&!n[a]&&(delete n[a],delete R[g.url]),a=v(g,!0),a.add(function(){var f=l(b.originalName,b.parentMap),f=v(f,!0);h.placeholder=!0;f.add(function(b){h.callback=function(){return b};p(h)})})):e&&f&&(s[h.id]=!1,i.paused.push(h),y(h));return h}function C(b,f,a,c){var b=l(b,c),d=b.name,h=b.fullName,e=v(b),j=e.id,k=e.deps,o;if(h){if(h in n||s[j]===!0||h==="jquery"&&q.jQuery&&q.jQuery!== +a().fn.jquery)return;B[j]=!0;s[j]=!0;h==="jquery"&&a&&W(a())}e.depArray=f;e.callback=a;for(a=0;a0)return r;if(q.priorityWait)if(j())A();else return r;for(h in s)if(!(h in L)&&(c=!0,!s[h]))if(b)a+=h+" ";else if(l=!0,h.indexOf("!")===-1){k=[];break}else(e=M[h]&&M[h].moduleDeps)&&k.push.apply(k,e);if(!c&&!i.waitCount)return r;if(b&&a)return b=P("timeout","Load timeout for modules: "+a),b.requireType="timeout",b.requireModules=a,b.contextName=i.contextName,d.onError(b); +if(l&&k.length)for(a=0;h=x[k[a]];a++)if(h=F(h,{})){z(h,{});break}if(!b&&(l||i.scriptCount)){if((I||da)&&!X)X=setTimeout(function(){X=0;E()},50);return r}if(i.waitCount){for(a=0;h=J[a];a++)z(h,{});i.paused.length&&A();Y<5&&(Y+=1,E())}Y=0;d.checkReadyState();return r}var i,A,q={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},catchError:{}},S=[],B={require:!0,exports:!0,module:!0},G={},n={},s={},x={},J=[],R={},O=0,M={},N={},H={},T={},Z=0;W=function(b){if(!i.jQuery&&(b=b||(typeof jQuery!=="undefined"?jQuery: +null))&&!(q.jQuery&&b.fn.jquery!==q.jQuery)&&("holdReady"in b||"readyWait"in b))if(i.jQuery=b,w(["jquery",[],function(){return jQuery}]),i.scriptCount)V(b,!0),i.jQueryIncremented=!0};A=function(){var b,a,c,l,k,h;i.takeGlobalQueue();Z+=1;if(i.scriptCount<=0)i.scriptCount=0;for(;S.length;)if(b=S.shift(),b[0]===null)return d.onError(P("mismatch","Mismatched anonymous define() module: "+b[b.length-1]));else w(b);if(!q.priorityWait||j())for(;i.paused.length;){k=i.paused;i.pausedCount+=k.length;i.paused= +[];for(l=0;b=k[l];l++)a=b.map,c=a.url,h=a.fullName,a.prefix?o(a.prefix,b):!R[c]&&!s[h]&&((q.requireLoad||d.load)(i,h,c),c.indexOf("empty:")!==0&&(R[c]=!0));i.startTime=(new Date).getTime();i.pausedCount-=k.length}Z===1&&E();Z-=1;return r};i={contextName:a,config:q,defQueue:S,waiting:x,waitCount:0,specified:B,loaded:s,urlMap:G,urlFetched:R,scriptCount:0,defined:n,paused:[],pausedCount:0,plugins:N,needFullExec:H,fake:{},fullExec:T,managerCallbacks:M,makeModuleMap:l,normalize:c,configure:function(b){var a, +c,d;b.baseUrl&&b.baseUrl.charAt(b.baseUrl.length-1)!=="/"&&(b.baseUrl+="/");a=q.paths;d=q.pkgs;$(q,b,!0);if(b.paths){for(c in b.paths)c in L||(a[c]=b.paths[c]);q.paths=a}if((a=b.packagePaths)||b.packages){if(a)for(c in a)c in L||aa(d,a[c],c);b.packages&&aa(d,b.packages);q.pkgs=d}if(b.priority)c=i.requireWait,i.requireWait=!1,A(),i.require(b.priority),A(),i.requireWait=c,q.priorityWait=b.priority;if(b.deps||b.callback)i.require(b.deps||[],b.callback)},requireDefined:function(b,a){return l(b,a).fullName in +n},requireSpecified:function(b,a){return l(b,a).fullName in B},require:function(b,c,g){if(typeof b==="string"){if(K(c))return d.onError(P("requireargs","Invalid require call"));if(d.get)return d.get(i,b,c);c=l(b,c);b=c.fullName;return!(b in n)?d.onError(P("notloaded","Module name '"+c.fullName+"' has not been loaded yet for context: "+a)):n[b]}(b&&b.length||c)&&C(null,b,c,g);if(!i.requireWait)for(;!i.scriptCount&&i.paused.length;)A();return i.require},takeGlobalQueue:function(){U.length&&(ja.apply(i.defQueue, +[i.defQueue.length-1,0].concat(U)),U=[])},completeLoad:function(b){var a;for(i.takeGlobalQueue();S.length;)if(a=S.shift(),a[0]===null){a[0]=b;break}else if(a[0]===b)break;else w(a),a=null;a?w(a):w([b,[],b==="jquery"&&typeof jQuery!=="undefined"?function(){return jQuery}:null]);d.isAsync&&(i.scriptCount-=1);A();d.isAsync||(i.scriptCount-=1)},toUrl:function(b,a){var c=b.lastIndexOf("."),d=null;c!==-1&&(d=b.substring(c,b.length),b=b.substring(0,c));return i.nameToUrl(b,d,a)},nameToUrl:function(b,a,g){var l, +k,h,e,j=i.config,b=c(b,g&&g.fullName);if(d.jsExtRegExp.test(b))a=b+(a?a:"");else{l=j.paths;k=j.pkgs;g=b.split("/");for(e=g.length;e>0;e--)if(h=g.slice(0,e).join("/"),l[h]){g.splice(0,e,l[h]);break}else if(h=k[h]){b=b===h.name?h.location+"/"+h.main:h.location;g.splice(0,e,b);break}a=g.join("/")+(a||".js");a=(a.charAt(0)==="/"||a.match(/^[\w\+\.\-]+:/)?"":j.baseUrl)+a}return j.urlArgs?a+((a.indexOf("?")===-1?"?":"&")+j.urlArgs):a}};i.jQueryCheck=W;i.resume=A;return i}function ka(){var a,c,d;if(C&&C.readyState=== +"interactive")return C;a=document.getElementsByTagName("script");for(c=a.length-1;c>-1&&(d=a[c]);c--)if(d.readyState==="interactive")return C=d;return null}var la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/require\(\s*["']([^'"\s]+)["']\s*\)/g,fa=/^\.\//,ba=/\.js$/,O=Object.prototype.toString,u=Array.prototype,ha=u.slice,ja=u.splice,I=!!(typeof window!=="undefined"&&navigator&&document),da=!I&&typeof importScripts!=="undefined",na=I&&navigator.platform==="PLAYSTATION 3"?/^complete$/:/^(complete|loaded)$/, +ea=typeof opera!=="undefined"&&opera.toString()==="[object Opera]",L={},D={},U=[],C=null,Y=0,Q=!1,ia={require:!0,module:!0,exports:!0},d,u={},J,y,v,E,o,w,F,B,z,W,X;if(typeof define==="undefined"){if(typeof requirejs!=="undefined")if(K(requirejs))return;else u=requirejs,requirejs=r;typeof require!=="undefined"&&!K(require)&&(u=require,require=r);d=requirejs=function(a,c,d){var j="_",k;!G(a)&&typeof a!=="string"&&(k=a,G(c)?(a=c,c=d):a=[]);if(k&&k.context)j=k.context;d=D[j]||(D[j]=ga(j));k&&d.configure(k); +return d.require(a,c)};d.config=function(a){return d(a)};require||(require=d);d.toUrl=function(a){return D._.toUrl(a)};d.version="1.0.8";d.jsExtRegExp=/^\/|:|\?|\.js$/;y=d.s={contexts:D,skipAsync:{}};if(d.isAsync=d.isBrowser=I)if(v=y.head=document.getElementsByTagName("head")[0],E=document.getElementsByTagName("base")[0])v=y.head=E.parentNode;d.onError=function(a){throw a;};d.load=function(a,c,l){d.resourcesReady(!1);a.scriptCount+=1;d.attach(l,a,c);if(a.jQuery&&!a.jQueryIncremented)V(a.jQuery,!0), +a.jQueryIncremented=!0};define=function(a,c,d){var j,k;typeof a!=="string"&&(d=c,c=a,a=null);G(c)||(d=c,c=[]);!c.length&&K(d)&&d.length&&(d.toString().replace(la,"").replace(ma,function(a,d){c.push(d)}),c=(d.length===1?["require"]:["require","exports","module"]).concat(c));if(Q&&(j=J||ka()))a||(a=j.getAttribute("data-requiremodule")),k=D[j.getAttribute("data-requirecontext")];(k?k.defQueue:U).push([a,c,d]);return r};define.amd={multiversion:!0,plugins:!0,jQuery:!0};d.exec=function(a){return eval(a)}; +d.execCb=function(a,c,d,j){return c.apply(j,d)};d.addScriptToDom=function(a){J=a;E?v.insertBefore(a,E):v.appendChild(a);J=null};d.onScriptLoad=function(a){var c=a.currentTarget||a.srcElement,l;if(a.type==="load"||c&&na.test(c.readyState))C=null,a=c.getAttribute("data-requirecontext"),l=c.getAttribute("data-requiremodule"),D[a].completeLoad(l),c.detachEvent&&!ea?c.detachEvent("onreadystatechange",d.onScriptLoad):c.removeEventListener("load",d.onScriptLoad,!1)};d.attach=function(a,c,l,j,k,o){var p; +if(I)return j=j||d.onScriptLoad,p=c&&c.config&&c.config.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):document.createElement("script"),p.type=k||c&&c.config.scriptType||"text/javascript",p.charset="utf-8",p.async=!y.skipAsync[a],c&&p.setAttribute("data-requirecontext",c.contextName),p.setAttribute("data-requiremodule",l),p.attachEvent&&!(p.attachEvent.toString&&p.attachEvent.toString().indexOf("[native code]")<0)&&!ea?(Q=!0,o?p.onreadystatechange=function(){if(p.readyState=== +"loaded")p.onreadystatechange=null,p.attachEvent("onreadystatechange",j),o(p)}:p.attachEvent("onreadystatechange",j)):p.addEventListener("load",j,!1),p.src=a,o||d.addScriptToDom(p),p;else da&&(importScripts(a),c.completeLoad(l));return null};if(I){o=document.getElementsByTagName("script");for(B=o.length-1;B>-1&&(w=o[B]);B--){if(!v)v=w.parentNode;if(F=w.getAttribute("data-main")){if(!u.baseUrl)o=F.split("/"),w=o.pop(),o=o.length?o.join("/")+"/":"./",u.baseUrl=o,F=w.replace(ba,"");u.deps=u.deps?u.deps.concat(F): +[F];break}}}d.checkReadyState=function(){var a=y.contexts,c;for(c in a)if(!(c in L)&&a[c].waitCount)return;d.resourcesReady(!0)};d.resourcesReady=function(a){var c,l;d.resourcesDone=a;if(d.resourcesDone)for(l in a=y.contexts,a)if(!(l in L)&&(c=a[l],c.jQueryIncremented))V(c.jQuery,!1),c.jQueryIncremented=!1};d.pageLoaded=function(){if(document.readyState!=="complete")document.readyState="complete"};if(I&&document.addEventListener&&!document.readyState)document.readyState="loading",window.addEventListener("load", +d.pageLoaded,!1);d(u);if(d.isAsync&&typeof setTimeout!=="undefined")z=y.contexts[u.context||"_"],z.requireWait=!0,setTimeout(function(){z.requireWait=!1;z.scriptCount||z.resume();d.checkReadyState()},0)}})(); diff --git a/slides/js/slide-controller.js b/slides/js/slide-controller.js new file mode 100644 index 0000000..571317b --- /dev/null +++ b/slides/js/slide-controller.js @@ -0,0 +1,109 @@ +(function(window) { + +var ORIGIN_ = location.protocol + '//' + location.host; + +function SlideController() { + this.popup = null; + this.isPopup = window.opener; + + if (this.setupDone()) { + window.addEventListener('message', this.onMessage_.bind(this), false); + + // Close popups if we reload the main window. + window.addEventListener('beforeunload', function(e) { + if (this.popup) { + this.popup.close(); + } + }.bind(this), false); + } +} + +SlideController.PRESENTER_MODE_PARAM = 'presentme'; + +SlideController.prototype.setupDone = function() { + var params = location.search.substring(1).split('&').map(function(el) { + return el.split('='); + }); + + var presentMe = null; + for (var i = 0, param; param = params[i]; ++i) { + if (param[0].toLowerCase() == SlideController.PRESENTER_MODE_PARAM) { + presentMe = param[1] == 'true'; + break; + } + } + + if (presentMe !== null) { + localStorage.ENABLE_PRESENTOR_MODE = presentMe; + // TODO: use window.history.pushState to update URL instead of the redirect. + if (window.history.replaceState) { + window.history.replaceState({}, '', location.pathname); + } else { + location.replace(location.pathname); + return false; + } + } + + var enablePresenterMode = localStorage.getItem('ENABLE_PRESENTOR_MODE'); + if (enablePresenterMode && JSON.parse(enablePresenterMode)) { + // Only open popup from main deck. Don't want recursive popup opening! + if (!this.isPopup) { + var opts = 'menubar=no,location=yes,resizable=yes,scrollbars=no,status=no'; + this.popup = window.open(location.href, 'mywindow', opts); + + // Loading in the popup? Trigger the hotkey for turning presenter mode on. + this.popup.addEventListener('load', function(e) { + var evt = this.popup.document.createEvent('Event'); + evt.initEvent('keydown', true, true); + evt.keyCode = 'P'.charCodeAt(0); + this.popup.document.dispatchEvent(evt); + // this.popup.document.body.classList.add('with-notes'); + // document.body.classList.add('popup'); + }.bind(this), false); + } + } + + return true; +} + +SlideController.prototype.onMessage_ = function(e) { + var data = e.data; + + // Restrict messages to being from this origin. Allow local developmet + // from file:// though. + // TODO: It would be dope if FF implemented location.origin! + if (e.origin != ORIGIN_ && ORIGIN_.indexOf('file://') != 0) { + alert('Someone tried to postMessage from an unknown origin'); + return; + } + + // if (e.source.location.hostname != 'localhost') { + // alert('Someone tried to postMessage from an unknown origin'); + // return; + // } + + if ('keyCode' in data) { + var evt = document.createEvent('Event'); + evt.initEvent('keydown', true, true); + evt.keyCode = data.keyCode; + document.dispatchEvent(evt); + } +}; + +SlideController.prototype.sendMsg = function(msg) { + // // Send message to popup window. + // if (this.popup) { + // this.popup.postMessage(msg, ORIGIN_); + // } + + // Send message to main window. + if (this.isPopup) { + // TODO: It would be dope if FF implemented location.origin. + window.opener.postMessage(msg, '*'); + } +}; + +window.SlideController = SlideController; + +})(window); + diff --git a/slides/js/slide-deck.js b/slides/js/slide-deck.js new file mode 100644 index 0000000..6fc99eb --- /dev/null +++ b/slides/js/slide-deck.js @@ -0,0 +1,775 @@ +/** + * @authors Luke Mahe + * @authors Eric Bidelman + * @fileoverview TODO + */ +document.cancelFullScreen = document.webkitCancelFullScreen || + document.mozCancelFullScreen; + +/** + * @constructor + */ +function SlideDeck(el) { + this.curSlide_ = 0; + this.prevSlide_ = 0; + this.config_ = null; + this.container = el || document.querySelector('slides'); + this.slides = []; + this.controller = null; + + this.getCurrentSlideFromHash_(); + + // Call this explicitly. Modernizr.load won't be done until after DOM load. + this.onDomLoaded_.bind(this)(); +} + +/** + * @const + * @private + */ +SlideDeck.prototype.SLIDE_CLASSES_ = [ + 'far-past', 'past', 'current', 'next', 'far-next']; + +/** + * @const + * @private + */ +SlideDeck.prototype.CSS_DIR_ = 'theme/css/'; + +/** + * @private + */ +SlideDeck.prototype.getCurrentSlideFromHash_ = function() { + var slideNo = parseInt(document.location.hash.substr(1)); + + if (slideNo) { + this.curSlide_ = slideNo - 1; + } else { + this.curSlide_ = 0; + } +}; + +/** + * @param {number} slideNo + */ +SlideDeck.prototype.loadSlide = function(slideNo) { + if (slideNo) { + this.curSlide_ = slideNo - 1; + this.updateSlides_(); + } +}; + +/** + * @private + */ +SlideDeck.prototype.onDomLoaded_ = function(e) { + document.body.classList.add('loaded'); // Add loaded class for templates to use. + + this.slides = this.container.querySelectorAll('slide:not([hidden]):not(.backdrop)'); + + // If we're on a smartphone, apply special sauce. + if (Modernizr.mq('only screen and (max-device-width: 480px)')) { + // var style = document.createElement('link'); + // style.rel = 'stylesheet'; + // style.type = 'text/css'; + // style.href = this.CSS_DIR_ + 'phone.css'; + // document.querySelector('head').appendChild(style); + + // No need for widescreen layout on a phone. + this.container.classList.remove('layout-widescreen'); + } + + this.loadConfig_(SLIDE_CONFIG); + this.addEventListeners_(); + this.updateSlides_(); + + // Add slide numbers and total slide count metadata to each slide. + var that = this; + for (var i = 0, slide; slide = this.slides[i]; ++i) { + slide.dataset.slideNum = i + 1; + slide.dataset.totalSlides = this.slides.length; + + slide.addEventListener('click', function(e) { + if (document.body.classList.contains('overview')) { + that.loadSlide(this.dataset.slideNum); + e.preventDefault(); + window.setTimeout(function() { + that.toggleOverview(); + }, 500); + } + }, false); + } + + // Note: this needs to come after addEventListeners_(), which adds a + // 'keydown' listener that this controller relies on. + // Also, no need to set this up if we're on mobile. + if (!Modernizr.touch) { + this.controller = new SlideController(this); + if (this.controller.isPopup) { + document.body.classList.add('popup'); + } + } +}; + +/** + * @private + */ +SlideDeck.prototype.addEventListeners_ = function() { + document.addEventListener('keydown', this.onBodyKeyDown_.bind(this), false); + window.addEventListener('popstate', this.onPopState_.bind(this), false); + + // var transEndEventNames = { + // 'WebkitTransition': 'webkitTransitionEnd', + // 'MozTransition': 'transitionend', + // 'OTransition': 'oTransitionEnd', + // 'msTransition': 'MSTransitionEnd', + // 'transition': 'transitionend' + // }; + // + // // Find the correct transitionEnd vendor prefix. + // window.transEndEventName = transEndEventNames[ + // Modernizr.prefixed('transition')]; + // + // // When slides are done transitioning, kickoff loading iframes. + // // Note: we're only looking at a single transition (on the slide). This + // // doesn't include autobuilds the slides may have. Also, if the slide + // // transitions on multiple properties (e.g. not just 'all'), this doesn't + // // handle that case. + // this.container.addEventListener(transEndEventName, function(e) { + // this.enableSlideFrames_(this.curSlide_); + // }.bind(this), false); + + // document.addEventListener('slideenter', function(e) { + // var slide = e.target; + // window.setTimeout(function() { + // this.enableSlideFrames_(e.slideNumber); + // this.enableSlideFrames_(e.slideNumber + 1); + // }.bind(this), 300); + // }.bind(this), false); +}; + +/** + * @private + * @param {Event} e The pop event. + */ +SlideDeck.prototype.onPopState_ = function(e) { + if (e.state != null) { + this.curSlide_ = e.state; + this.updateSlides_(true); + } +}; + +/** + * @param {Event} e + */ +SlideDeck.prototype.onBodyKeyDown_ = function(e) { + if (/^(input|textarea)$/i.test(e.target.nodeName) || + e.target.isContentEditable) { + return; + } + + // Forward keydowns to the main slides if we're the popup. + if (this.controller && this.controller.isPopup) { + this.controller.sendMsg({keyCode: e.keyCode}); + } + + switch (e.keyCode) { + case 13: // Enter + if (document.body.classList.contains('overview')) { + this.toggleOverview(); + } + break; + + case 39: // right arrow + case 32: // space + case 34: // PgDn + this.nextSlide(); + e.preventDefault(); + break; + + case 37: // left arrow + case 8: // Backspace + case 33: // PgUp + this.prevSlide(); + e.preventDefault(); + break; + + case 40: // down arrow + this.nextSlide(); + e.preventDefault(); + break; + + case 38: // up arrow + this.prevSlide(); + e.preventDefault(); + break; + + case 72: // H: Toggle code highlighting + document.body.classList.toggle('highlight-code'); + break; + + case 79: // O: Toggle overview + this.toggleOverview(); + break; + + case 80: // P + if (this.controller && this.controller.isPopup) { + document.body.classList.toggle('with-notes'); + } else if (this.controller && !this.controller.popup) { + document.body.classList.toggle('with-notes'); + } + break; + + case 82: // R + // TODO: implement refresh on main slides when popup is refreshed. + break; + + case 27: // ESC: Hide notes and highlighting + document.body.classList.remove('with-notes'); + document.body.classList.remove('highlight-code'); + + if (document.body.classList.contains('overview')) { + this.toggleOverview(); + } + break; + + case 70: // F: Toggle fullscreen + // Only respect 'f' on body. Don't want to capture keys from an . + // Also, ignore browser's fullscreen shortcut (cmd+shift+f) so we don't + // get trapped in fullscreen! + if (e.target == document.body && !(e.shiftKey && e.metaKey)) { + if (document.mozFullScreen !== undefined && !document.mozFullScreen) { + document.body.mozRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } else if (document.webkitIsFullScreen !== undefined && !document.webkitIsFullScreen) { + document.body.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } else { + document.cancelFullScreen(); + } + } + break; + + case 87: // W: Toggle widescreen + // Only respect 'w' on body. Don't want to capture keys from an . + if (e.target == document.body && !(e.shiftKey && e.metaKey)) { + this.container.classList.toggle('layout-widescreen'); + } + break; + } +}; + +/** + * + */ +SlideDeck.prototype.focusOverview_ = function() { + var overview = document.body.classList.contains('overview'); + + for (var i = 0, slide; slide = this.slides[i]; i++) { + slide.style[Modernizr.prefixed('transform')] = overview ? + 'translateZ(-2500px) translate(' + (( i - this.curSlide_ ) * 105) + + '%, 0%)' : ''; + } +}; + +/** + */ +SlideDeck.prototype.toggleOverview = function() { + document.body.classList.toggle('overview'); + + this.focusOverview_(); +}; + +/** + * @private + */ +SlideDeck.prototype.loadConfig_ = function(config) { + if (!config) { + return; + } + + this.config_ = config; + + var settings = this.config_.settings; + + this.loadTheme_(settings.theme || []); + + if (settings.favIcon) { + this.addFavIcon_(settings.favIcon); + } + + // Prettyprint. Default to on. + if (!!!('usePrettify' in settings) || settings.usePrettify) { + prettyPrint(); + } + + if (settings.analytics) { + this.loadAnalytics_(); + } + + if (settings.fonts) { + this.addFonts_(settings.fonts); + } + + // Builds. Default to on. + if (!!!('useBuilds' in settings) || settings.useBuilds) { + this.makeBuildLists_(); + } + + if (settings.title) { + document.title = settings.title.replace(//, ' '); + if (settings.eventTitle) { + document.title += ' - ' + settings.eventTitle; + } + document.querySelector('[data-config-title]').innerHTML = settings.title; + } + + if (settings.subtitle) { + document.querySelector('[data-config-subtitle]').innerHTML = settings.subtitle; + } + + if (this.config_.presenters) { + var presenters = this.config_.presenters; + var dataConfigContact = document.querySelector('[data-config-contact]'); + + var html = []; + if (presenters.length == 1) { + var p = presenters[0]; + + html = [p.name, p.company].join('
'); + + var gplus = p.gplus ? 'g+
' + p.gplus.replace(/https?:\/\//, '') + '' : ''; + + var twitter = p.twitter ? 'twitter' + + '' + + p.twitter + '' : ''; + + var www = p.www ? 'www' + p.www.replace(/https?:\/\//, '') + '' : ''; + + var github = p.github ? 'github' + p.github.replace(/https?:\/\//, '') + '' : ''; + + var html2 = [gplus, twitter, www, github].join('
'); + + if (dataConfigContact) { + dataConfigContact.innerHTML = html2; + } + } else { + for (var i = 0, p; p = presenters[i]; ++i) { + html.push(p.name + ' - ' + p.company); + } + html = html.join('
'); + if (dataConfigContact) { + dataConfigContact.innerHTML = html; + } + } + + var dataConfigPresenter = document.querySelector('[data-config-presenter]'); + if (dataConfigPresenter) { + dataConfigPresenter.innerHTML = html; + if (settings.eventTitle) { + dataConfigPresenter.innerHTML = dataConfigPresenter.innerHTML + '
' + + settings.eventTitle; + } + } + } + + /* Left/Right tap areas. Default to including. */ + if (!!!('enableSlideAreas' in settings) || settings.enableSlideAreas) { + var el = document.createElement('div'); + el.classList.add('slide-area'); + el.id = 'prev-slide-area'; + el.addEventListener('click', this.prevSlide.bind(this), false); + this.container.appendChild(el); + + var el = document.createElement('div'); + el.classList.add('slide-area'); + el.id = 'next-slide-area'; + el.addEventListener('click', this.nextSlide.bind(this), false); + this.container.appendChild(el); + } + + if (Modernizr.touch && (!!!('enableTouch' in settings) || + settings.enableTouch)) { + var self = this; + + // Note: this prevents mobile zoom in/out but prevents iOS from doing + // it's crazy scroll over effect and disaligning the slides. + window.addEventListener('touchstart', function(e) { + e.preventDefault(); + }, false); + + var hammer = new Hammer(this.container); + hammer.ondragend = function(e) { + if (e.direction == 'right' || e.direction == 'down') { + self.prevSlide(); + } else if (e.direction == 'left' || e.direction == 'up') { + self.nextSlide(); + } + }; + } +}; + +/** + * @private + * @param {Array.} fonts + */ +SlideDeck.prototype.addFonts_ = function(fonts) { + var el = document.createElement('link'); + el.rel = 'stylesheet'; + el.href = ('https:' == document.location.protocol ? 'https' : 'http') + + '://fonts.googleapis.com/css?family=' + fonts.join('|') + '&v2'; + document.querySelector('head').appendChild(el); +}; + +/** + * @private + */ +SlideDeck.prototype.buildNextItem_ = function() { + var slide = this.slides[this.curSlide_]; + var toBuild = slide.querySelector('.to-build'); + var built = slide.querySelector('.build-current'); + + if (built) { + built.classList.remove('build-current'); + if (built.classList.contains('fade')) { + built.classList.add('build-fade'); + } + } + + if (!toBuild) { + var items = slide.querySelectorAll('.build-fade'); + for (var j = 0, item; item = items[j]; j++) { + item.classList.remove('build-fade'); + } + return false; + } + + toBuild.classList.remove('to-build'); + toBuild.classList.add('build-current'); + + return true; +}; + +/** + * @param {boolean=} opt_dontPush + */ +SlideDeck.prototype.prevSlide = function(opt_dontPush) { + if (this.curSlide_ > 0) { + var bodyClassList = document.body.classList; + bodyClassList.remove('highlight-code'); + + // Toggle off speaker notes if they're showing when we move backwards on the + // main slides. If we're the speaker notes popup, leave them up. + if (this.controller && !this.controller.isPopup) { + bodyClassList.remove('with-notes'); + } else if (!this.controller) { + bodyClassList.remove('with-notes'); + } + + this.prevSlide_ = this.curSlide_--; + + this.updateSlides_(opt_dontPush); + } +}; + +/** + * @param {boolean=} opt_dontPush + */ +SlideDeck.prototype.nextSlide = function(opt_dontPush) { + if (!document.body.classList.contains('overview') && this.buildNextItem_()) { + return; + } + + if (this.curSlide_ < this.slides.length - 1) { + var bodyClassList = document.body.classList; + bodyClassList.remove('highlight-code'); + + // Toggle off speaker notes if they're showing when we advanced on the main + // slides. If we're the speaker notes popup, leave them up. + if (this.controller && !this.controller.isPopup) { + bodyClassList.remove('with-notes'); + } else if (!this.controller) { + bodyClassList.remove('with-notes'); + } + + this.prevSlide_ = this.curSlide_++; + + this.updateSlides_(opt_dontPush); + } +}; + +/* Slide events */ + +/** + * Triggered when a slide enter/leave event should be dispatched. + * + * @param {string} type The type of event to trigger + * (e.g. 'slideenter', 'slideleave'). + * @param {number} slideNo The index of the slide that is being left. + */ +SlideDeck.prototype.triggerSlideEvent = function(type, slideNo) { + var el = this.getSlideEl_(slideNo); + if (!el) { + return; + } + + // Call onslideenter/onslideleave if the attribute is defined on this slide. + var func = el.getAttribute(type); + if (func) { + new Function(func).call(el); // TODO: Don't use new Function() :( + } + + // Dispatch event to listeners setup using addEventListener. + var evt = document.createEvent('Event'); + evt.initEvent(type, true, true); + evt.slideNumber = slideNo + 1; // Make it readable + evt.slide = el; + + el.dispatchEvent(evt); +}; + +/** + * @private + */ +SlideDeck.prototype.updateSlides_ = function(opt_dontPush) { + var dontPush = opt_dontPush || false; + + var curSlide = this.curSlide_; + for (var i = 0; i < this.slides.length; ++i) { + switch (i) { + case curSlide - 2: + this.updateSlideClass_(i, 'far-past'); + break; + case curSlide - 1: + this.updateSlideClass_(i, 'past'); + break; + case curSlide: + this.updateSlideClass_(i, 'current'); + break; + case curSlide + 1: + this.updateSlideClass_(i, 'next'); + break; + case curSlide + 2: + this.updateSlideClass_(i, 'far-next'); + break; + default: + this.updateSlideClass_(i); + break; + } + }; + + this.triggerSlideEvent('slideleave', this.prevSlide_); + this.triggerSlideEvent('slideenter', curSlide); + +// window.setTimeout(this.disableSlideFrames_.bind(this, curSlide - 2), 301); +// +// this.enableSlideFrames_(curSlide - 1); // Previous slide. +// this.enableSlideFrames_(curSlide + 1); // Current slide. +// this.enableSlideFrames_(curSlide + 2); // Next slide. + + // Enable current slide's iframes (needed for page loat at current slide). + this.enableSlideFrames_(curSlide + 1); + + // No way to tell when all slide transitions + auto builds are done. + // Give ourselves a good buffer to preload the next slide's iframes. + window.setTimeout(this.enableSlideFrames_.bind(this, curSlide + 2), 1000); + + this.updateHash_(dontPush); + + if (document.body.classList.contains('overview')) { + this.focusOverview_(); + return; + } + +}; + +/** + * @private + * @param {number} slideNo + */ +SlideDeck.prototype.enableSlideFrames_ = function(slideNo) { + var el = this.slides[slideNo - 1]; + if (!el) { + return; + } + + var frames = el.querySelectorAll('iframe'); + for (var i = 0, frame; frame = frames[i]; i++) { + this.enableFrame_(frame); + } +}; + +/** + * @private + * @param {number} slideNo + */ +SlideDeck.prototype.enableFrame_ = function(frame) { + var src = frame.dataset.src; + if (src && frame.src != src) { + frame.src = src; + } +}; + +/** + * @private + * @param {number} slideNo + */ +SlideDeck.prototype.disableSlideFrames_ = function(slideNo) { + var el = this.slides[slideNo - 1]; + if (!el) { + return; + } + + var frames = el.querySelectorAll('iframe'); + for (var i = 0, frame; frame = frames[i]; i++) { + this.disableFrame_(frame); + } +}; + +/** + * @private + * @param {Node} frame + */ +SlideDeck.prototype.disableFrame_ = function(frame) { + frame.src = 'about:blank'; +}; + +/** + * @private + * @param {number} slideNo + */ +SlideDeck.prototype.getSlideEl_ = function(no) { + if ((no < 0) || (no >= this.slides.length)) { + return null; + } else { + return this.slides[no]; + } +}; + +/** + * @private + * @param {number} slideNo + * @param {string} className + */ +SlideDeck.prototype.updateSlideClass_ = function(slideNo, className) { + var el = this.getSlideEl_(slideNo); + + if (!el) { + return; + } + + if (className) { + el.classList.add(className); + } + + for (var i = 0, slideClass; slideClass = this.SLIDE_CLASSES_[i]; ++i) { + if (className != slideClass) { + el.classList.remove(slideClass); + } + } +}; + +/** + * @private + */ +SlideDeck.prototype.makeBuildLists_ = function () { + for (var i = this.curSlide_, slide; slide = this.slides[i]; ++i) { + var items = slide.querySelectorAll('.build > *'); + for (var j = 0, item; item = items[j]; ++j) { + if (item.classList) { + item.classList.add('to-build'); + if (item.parentNode.classList.contains('fade')) { + item.classList.add('fade'); + } + } + } + } +}; + +/** + * @private + * @param {boolean} dontPush + */ +SlideDeck.prototype.updateHash_ = function(dontPush) { + if (!dontPush) { + var slideNo = this.curSlide_ + 1; + var hash = '#' + slideNo; + if (window.history.pushState) { + window.history.pushState(this.curSlide_, 'Slide ' + slideNo, hash); + } else { + window.location.replace(hash); + } + + // Record GA hit on this slide. + window['_gaq'] && window['_gaq'].push(['_trackPageview', + document.location.href]); + } +}; + + +/** + * @private + * @param {string} favIcon + */ +SlideDeck.prototype.addFavIcon_ = function(favIcon) { + var el = document.createElement('link'); + el.rel = 'icon'; + el.type = 'image/png'; + el.href = favIcon; + document.querySelector('head').appendChild(el); +}; + +/** + * @private + * @param {string} theme + */ +SlideDeck.prototype.loadTheme_ = function(theme) { + var styles = []; + if (theme.constructor.name === 'String') { + styles.push(theme); + } else { + styles = theme; + } + + for (var i = 0, style; themeUrl = styles[i]; i++) { + var style = document.createElement('link'); + style.rel = 'stylesheet'; + style.type = 'text/css'; + if (themeUrl.indexOf('http') == -1) { + style.href = this.CSS_DIR_ + themeUrl + '.css'; + } else { + style.href = themeUrl; + } + document.querySelector('head').appendChild(style); + } +}; + +/** + * @private + */ +SlideDeck.prototype.loadAnalytics_ = function() { + var _gaq = window['_gaq'] || []; + _gaq.push(['_setAccount', this.config_.settings.analytics]); + _gaq.push(['_trackPageview']); + + (function() { + var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; + ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; + var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); + })(); +}; + + +// Polyfill missing APIs (if we need to), then create the slide deck. +// iOS < 5 needs classList, dataset, and window.matchMedia. Modernizr contains +// the last one. +(function() { + Modernizr.load({ + test: !!document.body.classList && !!document.body.dataset, + nope: ['js/polyfills/classList.min.js', 'js/polyfills/dataset.min.js'], + complete: function() { + window.slidedeck = new SlideDeck(); + } + }); +})(); diff --git a/slides/js/slides.js b/slides/js/slides.js new file mode 100644 index 0000000..3f6306e --- /dev/null +++ b/slides/js/slides.js @@ -0,0 +1,5 @@ +require(['order!../slide_config', 'order!modernizr.custom.45394', + 'order!prettify/prettify', 'order!hammer', 'order!slide-controller', + 'order!slide-deck'], function(someModule) { + +}); diff --git a/slides/scripts/md/README.md b/slides/scripts/md/README.md new file mode 100644 index 0000000..3188b3f --- /dev/null +++ b/slides/scripts/md/README.md @@ -0,0 +1,5 @@ +### Want to use markdown to write your slides? + +`python render.py` can do that for you. + +Dependencies: jinja2, markdown. diff --git a/slides/scripts/md/base.html b/slides/scripts/md/base.html new file mode 100644 index 0000000..acc7981 --- /dev/null +++ b/slides/scripts/md/base.html @@ -0,0 +1,104 @@ + + + + + Google IO 2012 + + + + + + + + + + + + + + + + + + + +