From d676d3273a9acd1e6ec7d4eb3f967b44c7deaf1a Mon Sep 17 00:00:00 2001 From: Lasse Moos Date: Tue, 10 Feb 2015 16:28:11 +0100 Subject: [PATCH] Initial commit --- .editorconfig | 12 + .gitattributes | 1 + .gitignore | 2 + .jshintrc | 17 + .travis.yml | 6 + .yo-rc.json | 3 + README.md | 47 + app/index.js | 161 +++ app/templates/_bower.json | 6 + app/templates/_js/main.js | 5 + app/templates/_package.json | 26 + app/templates/_theme.info | 60 ++ app/templates/_ts/main.ts | 4 + app/templates/browserconfig.xml | 12 + app/templates/crossdomain.xml | 15 + app/templates/editorconfig | 13 + app/templates/gitignore | 5 + app/templates/gulpfile.js | 135 +++ app/templates/jshintrc | 23 + app/templates/screenshot.png | Bin 0 -> 4543 bytes app/templates/src/images/apple-touch-icon.png | Bin 0 -> 1076 bytes app/templates/src/images/favicon.ico | Bin 0 -> 766 bytes app/templates/src/images/icons/blockquote.png | Bin 0 -> 365 bytes app/templates/src/images/tile-wide.png | Bin 0 -> 1854 bytes app/templates/src/images/tile.png | Bin 0 -> 3482 bytes .../src/scripts/vendor/modernizr-2.8.3.min.js | 957 ++++++++++++++++++ app/templates/src/scss/partials/_blocks.scss | 3 + app/templates/src/scss/partials/_forms.scss | 3 + app/templates/src/scss/partials/_global.scss | 134 +++ app/templates/src/scss/partials/_grid.scss | 51 + app/templates/src/scss/partials/_helpers.scss | 100 ++ app/templates/src/scss/partials/_mixins.scss | 81 ++ .../src/scss/partials/_normalize.scss | 427 ++++++++ app/templates/src/scss/partials/_page.scss | 65 ++ app/templates/src/scss/partials/_posts.scss | 73 ++ app/templates/src/scss/partials/_print.scss | 67 ++ app/templates/src/scss/partials/_search.scss | 7 + .../src/scss/partials/_variables.scss | 14 + app/templates/src/scss/style.scss | 33 + app/templates/template.php | 28 + app/templates/templates/block.tpl.php | 15 + app/templates/templates/comment.tpl.php | 33 + app/templates/templates/field.tpl.php | 11 + app/templates/templates/html.tpl.php | 36 + app/templates/templates/node.tpl.php | 32 + app/templates/templates/page.tpl.php | 55 + app/templates/templates/region.tpl.php | 5 + app/templates/templates/search-result.tpl.php | 17 + .../templates/search-results.tpl.php | 10 + app/templates/templates/taxonomy-term.tpl.php | 11 + app/templates/theme-settings.php | 25 + package.json | 45 + test/test-app.js | 27 + 53 files changed, 2918 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .jshintrc create mode 100644 .travis.yml create mode 100644 .yo-rc.json create mode 100644 README.md create mode 100644 app/index.js create mode 100644 app/templates/_bower.json create mode 100755 app/templates/_js/main.js create mode 100644 app/templates/_package.json create mode 100644 app/templates/_theme.info create mode 100644 app/templates/_ts/main.ts create mode 100755 app/templates/browserconfig.xml create mode 100755 app/templates/crossdomain.xml create mode 100644 app/templates/editorconfig create mode 100644 app/templates/gitignore create mode 100644 app/templates/gulpfile.js create mode 100644 app/templates/jshintrc create mode 100755 app/templates/screenshot.png create mode 100644 app/templates/src/images/apple-touch-icon.png create mode 100755 app/templates/src/images/favicon.ico create mode 100644 app/templates/src/images/icons/blockquote.png create mode 100755 app/templates/src/images/tile-wide.png create mode 100755 app/templates/src/images/tile.png create mode 100644 app/templates/src/scripts/vendor/modernizr-2.8.3.min.js create mode 100644 app/templates/src/scss/partials/_blocks.scss create mode 100644 app/templates/src/scss/partials/_forms.scss create mode 100644 app/templates/src/scss/partials/_global.scss create mode 100644 app/templates/src/scss/partials/_grid.scss create mode 100644 app/templates/src/scss/partials/_helpers.scss create mode 100644 app/templates/src/scss/partials/_mixins.scss create mode 100644 app/templates/src/scss/partials/_normalize.scss create mode 100644 app/templates/src/scss/partials/_page.scss create mode 100644 app/templates/src/scss/partials/_posts.scss create mode 100644 app/templates/src/scss/partials/_print.scss create mode 100644 app/templates/src/scss/partials/_search.scss create mode 100644 app/templates/src/scss/partials/_variables.scss create mode 100755 app/templates/src/scss/style.scss create mode 100644 app/templates/template.php create mode 100644 app/templates/templates/block.tpl.php create mode 100644 app/templates/templates/comment.tpl.php create mode 100644 app/templates/templates/field.tpl.php create mode 100644 app/templates/templates/html.tpl.php create mode 100644 app/templates/templates/node.tpl.php create mode 100644 app/templates/templates/page.tpl.php create mode 100644 app/templates/templates/region.tpl.php create mode 100644 app/templates/templates/search-result.tpl.php create mode 100644 app/templates/templates/search-results.tpl.php create mode 100644 app/templates/templates/taxonomy-term.tpl.php create mode 100644 app/templates/theme-settings.php create mode 100644 package.json create mode 100644 test/test-app.js diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5760be5 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +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..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a5199f6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules/ +.idea \ No newline at end of file diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 0000000..8a7bbed --- /dev/null +++ b/.jshintrc @@ -0,0 +1,17 @@ +{ + "node": true, + "esnext": true, + "bitwise": true, + "camelcase": true, + "curly": true, + "eqeqeq": true, + "immed": true, + "indent": 2, + "latedef": true, + "newcap": true, + "noarg": true, + "quotmark": "single", + "undef": true, + "unused": true, + "strict": true +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..d63d54f --- /dev/null +++ b/.travis.yml @@ -0,0 +1,6 @@ +language: node_js +node_js: + - '0.10' +before_install: + - currentfolder=${PWD##*/} + - if [ "$currentfolder" != 'generator-drupal-gulp' ]; then cd .. && eval "mv $currentfolder generator-drupal-gulp" && cd generator-drupal-gulp; fi diff --git a/.yo-rc.json b/.yo-rc.json new file mode 100644 index 0000000..01d1070 --- /dev/null +++ b/.yo-rc.json @@ -0,0 +1,3 @@ +{ + "generator-generator": {} +} \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..80f014f --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# generator-drupal-gulp [![Build Status](https://secure.travis-ci.org/lasseyls/generator-drupal-gulp.png?branch=master)](https://travis-ci.org/lasseyls/generator-drupal-gulp) + +> [Yeoman](http://yeoman.io) generator + + +## Getting Started + +### What is Yeoman? + +Trick question. It's not a thing. It's this guy: + +![](http://i.imgur.com/JHaAlBJ.png) + +Basically, he wears a top hat, lives in your computer, and waits for you to tell him what kind of application you wish to create. + +Not every new computer comes with a Yeoman pre-installed. He lives in the [npm](https://npmjs.org) package repository. You only have to ask for him once, then he packs up and moves into your hard drive. *Make sure you clean up, he likes new and shiny things.* + +```bash +npm install -g yo +``` + +### Yeoman Generators + +Yeoman travels light. He didn't pack any generators when he moved in. You can think of a generator like a plug-in. You get to choose what type of application you wish to create, such as a Backbone application or even a Chrome extension. + +To install generator-drupal-gulp from npm, run: + +```bash +npm install -g generator-drupal-gulp +``` + +Finally, initiate the generator: + +```bash +yo drupal-gulp +``` + +### Getting To Know Yeoman + +Yeoman has a heart of gold. He's a person with feelings and opinions, but he's very easy to work with. If you think he's too opinionated, he can be easily convinced. + +If you'd like to get to know Yeoman better and meet some of his friends, [Grunt](http://gruntjs.com) and [Bower](http://bower.io), check out the complete [Getting Started Guide](https://github.com/yeoman/yeoman/wiki/Getting-Started). + + +## License + +MIT diff --git a/app/index.js b/app/index.js new file mode 100644 index 0000000..249d813 --- /dev/null +++ b/app/index.js @@ -0,0 +1,161 @@ +'use strict'; +var yeoman = require('yeoman-generator'); +var chalk = require('chalk'); +var yosay = require('yosay'); +var path = require('path'); +var _ = require('lodash'); +_.str = require('underscore.string'); + +_.mixin(_.str.exports()); + +module.exports = yeoman.generators.Base.extend({ + initializing: function () { + // determine theme name from cwd and form a theme name according to Drupal standards + this.dirName = path.basename(process.cwd()); + this.themeName = _(_.slugify(this.dirName)).underscored(); + + + this.pkg = require('../package.json'); + }, + + prompting: function () { + var done = this.async(); + + // Have Yeoman greet the user. + this.log(yosay( + 'Welcome to the superior' + chalk.red('DrupalGulp') + ' generator!' + )); + + this.themeDesc = 'nameless theme description'; + this.themeMachineName = 'nameless'; + + var prompts = [ + { + type: 'input', + name: 'themeName', + message: 'Name your theme:', + default: this.themeName // Default to current folder name + }, + { + type: 'input', + name: 'themeDesc', + message: 'Describe your theme:', + default: 'No description' + }, + { + type: 'input', + name: 'browserSyncProxy', + message: 'What is the URL of your local drupal dev setup:', + default: 'http://localhost:8888' + }, + { + type: 'confirm', + name: 'TypeScript', + message: 'Would you like to enable TypeScript to JavaScript compilation instead of just using JavaScript?', + default: true + } + ]; + + this.prompt(prompts, function (props) { + this.TypeScript = props.TypeScript; + this.themeName = props.themeName; + this.themeDesc = props.themeDesc; + this.browserSyncProxy = props.browserSyncProxy; + this.themeMachineName = _.underscored((_.slugify(this.themeName))); + // set destination path according to destination path + theme name + // this.destinationRoot(this.themeMachineName); + + done(); + }.bind(this)); + }, + + writing: { + app: function () { + this.packageInfo = { + "name": this.themeMachineName, + "version": "0.0.0" + }; + this.template('_package.json', 'package.json'); + this.fs.copy( + this.templatePath('_bower.json'), + this.destinationPath('bower.json') + ); + + this.template('_theme.info', this.themeMachineName + '.info'); + this.template('template.php', 'template.php'); + this.template('gulpfile.js', 'gulpfile.js'); + this.template('theme-settings.php', 'theme-settings.php'); + this.fs.copy( + this.templatePath('src'), + this.destinationPath('src') + ); + this.log("Typescript: "+this.TypeScript); + if (!this.TypeScript) { + this.fs.copy( + this.templatePath('_js'), + this.destinationPath('src/scripts/js') + ); + } else { + this.fs.copy( + this.templatePath('_ts'), + this.destinationPath('src/scripts/ts') + ); + } + }, + + projectfiles: function () { + this.fs.copy( + this.templatePath('editorconfig'), + this.destinationPath('.editorconfig') + ); + this.fs.copy( + this.templatePath('jshintrc'), + this.destinationPath('.jshintrc') + ); + this.fs.copy( + this.templatePath('gitignore'), + this.destinationPath('.gitignore') + ); + this.fs.copy( + this.templatePath('browserconfig.xml'), + this.destinationPath('browserconfig.xml') + ); + this.fs.copy( + this.templatePath('crossdomain.xml'), + this.destinationPath('crossdomain.xml') + ); + this.fs.copy( + this.templatePath('screenshot.png'), + this.destinationPath('screenshot.png') + ); + this.directory('templates', 'templates'); + + } + }, + + install: function () { + this.installDependencies({ + skipInstall: this.options['skip-install'] + }); + this.on('end', function () { + this.spawnCommand('gulp').on('close', function (code) { + var succesMessage = + '----------------------------------------------------' + + chalk.green.bold('\nYay it worked, now try running:\n') + + chalk.yellow.bold('gulp watch') + + '\nand open the BrowserSync url provided in the' + + '\nterminal output, in your preferred browser.'+ + '\n----------------------------------------------------'; + if (code === 0) { + this.log(succesMessage); + } else { + this.log(chalk.red.bold('Ooops, something went wrong, please check for specific errors above.')); + this.log(chalk.red.bold('If you see errors above like: ENOENT LSTAT NPM, try running:')); + this.log(chalk.yellow.bold('npm cache clean')); + } + + }.bind(this)); + }.bind(this)); + } + +}); diff --git a/app/templates/_bower.json b/app/templates/_bower.json new file mode 100644 index 0000000..2b4eb38 --- /dev/null +++ b/app/templates/_bower.json @@ -0,0 +1,6 @@ +{ + "name": "package", + "version": "0.0.0", + "dependencies": {} +} + diff --git a/app/templates/_js/main.js b/app/templates/_js/main.js new file mode 100755 index 0000000..ffee567 --- /dev/null +++ b/app/templates/_js/main.js @@ -0,0 +1,5 @@ +(function($) { + + // all Javascript code goes here + +})(jQuery); diff --git a/app/templates/_package.json b/app/templates/_package.json new file mode 100644 index 0000000..d08c71c --- /dev/null +++ b/app/templates/_package.json @@ -0,0 +1,26 @@ +{ + "name": "<%= packageInfo.name %>", + "version": "<%= packageInfo.version %>", + "dependencies": {}, + "devDependencies": { + "autoprefixer-core": "^5.1.4", + "browser-sync": "^2.0.0-rc9", + "del": "^1.1.1", + "event-stream": "^3.2.2", + "gulp": "^3.8.10", + "gulp-cache": "^0.2.4", + "gulp-concat": "^2.4.3", + "gulp-filter": "^2.0.1", + "gulp-imagemin": "^2.1.0", + "gulp-load-plugins": "^0.8.0", + "gulp-postcss": "^4.0.3", + "gulp-sass": "^1.3.2", + "gulp-shell": "^0.2.11", + "gulp-size": "^1.2.0",<% if (TypeScript) { %> + "gulp-typescript": "^2.4.2",<% } %> + "gulp-sourcemaps": "^1.3.0" + }, + "scripts": { + "postinstall": "find node_modules/ -name '*.info' -type f -delete" + } +} diff --git a/app/templates/_theme.info b/app/templates/_theme.info new file mode 100644 index 0000000..5e11e69 --- /dev/null +++ b/app/templates/_theme.info @@ -0,0 +1,60 @@ +name = <%= themeName %> +description = <%= themeDesc %> +version = 1.0 +core = 7.x + +; ======================================== +; Stylesheets +; ======================================== + +stylesheets[all][0] = build/css/style.css + +; ======================================== +; Scripts +; ======================================== + +scripts[0] = build/scripts/vendor/modernizr-2.8.3.min.js +scripts[1] = build/scripts/main.js + +; ======================================== +; Regions +; ======================================== + +regions[header] = Header +regions[help] = Help +regions[page_top] = Page top +regions[page_bottom] = Page bottom +regions[highlighted] = Highlighted +regions[featured] = Featured +regions[content] = Content +regions[sidebar_first] = Sidebar first +regions[sidebar_second] = Sidebar second +regions[footer] = Footer + +; ======================================== +; Settings +; ======================================== + +settings[toggle_logo] = 1 +settings[toggle_name] = 1 +settings[toggle_slogan] = 1 +settings[toggle_node_user_picture] = 1 +settings[toggle_comment_user_picture] = 1 +settings[toggle_comment_user_verification] = 1 +settings[toggle_favicon] = 0 +settings[toggle_main_menu] = 1 +settings[toggle_secondary_menu] = 1 +settings[default_logo] = 1 +settings[logo_path] = +settings[logo_upload] = +settings[default_favicon] = 1 +settings[favicon_path] = +settings[favicon_upload] = +settings[magic_css_excludes] = :core +settings[magic_footer_js] = 0 +settings[magic_library_head] = 0 +settings[magic_experimental_js] = 0 +settings[magic_js_excludes] = +settings[magic_rebuild_registry] = 1 +settings[magic_viewport_indicator] = 0 +settings[magic_modernizr_debug] = diff --git a/app/templates/_ts/main.ts b/app/templates/_ts/main.ts new file mode 100644 index 0000000..d1167fe --- /dev/null +++ b/app/templates/_ts/main.ts @@ -0,0 +1,4 @@ +/** + * Created by Lasse on 09/02/15. + */ +console.log("hello from main.ts"); \ No newline at end of file diff --git a/app/templates/browserconfig.xml b/app/templates/browserconfig.xml new file mode 100755 index 0000000..30aa240 --- /dev/null +++ b/app/templates/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/app/templates/crossdomain.xml b/app/templates/crossdomain.xml new file mode 100755 index 0000000..818b822 --- /dev/null +++ b/app/templates/crossdomain.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + diff --git a/app/templates/editorconfig b/app/templates/editorconfig new file mode 100644 index 0000000..88c825d --- /dev/null +++ b/app/templates/editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org + +root = true + +[*] +charset = utf-8 +indent_size = 4 +indent_style = space +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +trim_trailing_whitespace = false \ No newline at end of file diff --git a/app/templates/gitignore b/app/templates/gitignore new file mode 100644 index 0000000..b6da8e3 --- /dev/null +++ b/app/templates/gitignore @@ -0,0 +1,5 @@ +.DS_Store +node_modules +.sass-cache +.idea +.tmp \ No newline at end of file diff --git a/app/templates/gulpfile.js b/app/templates/gulpfile.js new file mode 100644 index 0000000..c7a326d --- /dev/null +++ b/app/templates/gulpfile.js @@ -0,0 +1,135 @@ +/*global -$ */ +'use strict'; +// generated on <%= (new Date).toISOString().split('T')[0] %> using <%= pkg.name %> <%= pkg.version %> +var gulp = require('gulp'); +var $ = require('gulp-load-plugins')(); +var browserSync = require('browser-sync'); +var reload = browserSync.reload; +<% if (TypeScript) { %> +var eventStream = require('event-stream'); + +var tsProject = $.typescript.createProject({ + declarationFiles: false, + noExternalResolve: true, + sortOutput: true +}); +<% } %> +gulp.task('scripts', function() {<% if (TypeScript) { %> + var tsResult = gulp.src('src/scripts/ts/**/*.ts') + .pipe($.sourcemaps.init()) // This means sourcemaps will be generated + .pipe($.typescript(tsProject)); + + return eventStream.merge( // Merge the two output streams, so this task is finished when the IO of both operations are done. + tsResult.dts.pipe(gulp.dest('src/scripts/ts/definitions')), + tsResult.js.pipe( + $.concat('main.js')) // You can use other plugins that also support gulp-sourcemaps + .pipe($.sourcemaps.write()) // Now the sourcemaps are added to the .js file + .pipe(gulp.dest('build/scripts') + ) + );<% } else { %> + return gulp.src([ + 'src/scripts/js/**/*' + ], { + base: 'src/scripts' + }).pipe(gulp.dest('build/scripts'));<% } %> +}); + +// styles task, will run when any SCSS files change & BrowserSync +// will auto-update browsers +gulp.task('styles', function () { + return gulp.src('src/scss/**/*.scss') + .pipe($.sourcemaps.init()) + .pipe($.sass({ + outputStyle: 'nested', // libsass doesn't support expanded yet + precision: 10, + includePaths: ['.'], + onError: function (err) { notify().write(err); console.error.bind(console, 'Sass error:'+err);} + })) + .pipe($.postcss([ + require('autoprefixer-core')({browsers: ['last 2 version']}) + ])) + .pipe($.sourcemaps.write()) + .pipe(gulp.dest('build/css')) + .pipe($.filter('scss**/*.css')) + .pipe(browserSync.reload({stream:true})); +}); + +gulp.task('jshint', function () { + return gulp.src('build/scripts/**/*.js') + .pipe(reload({stream: true, once: true})) + .pipe($.jshint()) + .pipe($.jshint.reporter('jshint-stylish')) + .pipe($.if(!browserSync.active, $.jshint.reporter('fail'))); +}); + + +gulp.task('images', function () { + return gulp.src('src/images/*') + .pipe($.cache($.imagemin({ + progressive: true, + interlaced: true, + svgoPlugins: [{removeViewBox: false}] + }))) + .pipe(gulp.dest('build/images')); +}); + +gulp.task('fonts', function () { + return gulp.src('src/fonts/**/*') + .pipe($.filter('**/*.{eot,svg,ttf,woff}')) + .pipe(gulp.dest('build/fonts')); +}); + +gulp.task('extras', function () { + return gulp.src([ + 'src/*.*', + 'src/scripts/vendor/**/*' + ], { + base: 'src/', + dot: true + }).pipe(gulp.dest('build')); +}); + +gulp.task('bs-reload', function (){ + browserSync.reload(); +}); + +gulp.task('browser-sync', function(){ + //watch files + var files = [ + 'build/css/**/*.css', + 'build/scripts/**/*js', + 'build/images/**/*', + 'templates/*.tpl.php' + ]; + + return browserSync.init(files, { + proxy: "<%= browserSyncProxy %>", //change this to whatever your local development URL is. + open: false, + injectChanges: true + }); +}); + +gulp.task('watch', ['images', 'fonts', 'styles', 'scripts', 'extras', 'browser-sync'],function () { + + gulp.watch('src/scripts/ts/**/*.ts', ['scripts']); + gulp.watch('src/scss/**/*.scss', ['styles']); + gulp.watch('images/**/*', ['images']); + gulp.watch('src/scripts/vendor/**/*', ['extras']); + gulp.watch('src/fonts/*', ['fonts']); +}); + +gulp.task('clearimages', function (done) { + return $.cache.clearAll(done); +}); + +gulp.task('cleanFonts', require('del').bind(null, ['build/fonts'])); + +gulp.task('clean', require('del').bind(null, ['.tmp', 'build'])); + +gulp.task('build', ['images', 'fonts', 'styles', 'scripts', 'extras'], function () { + return gulp.src('build/**/*').pipe($.size({title: 'build', gzip: true})); +}); + +gulp.task('default', ['clearimages', 'clean'], function () { + gulp.start('build'); +}); diff --git a/app/templates/jshintrc b/app/templates/jshintrc new file mode 100644 index 0000000..7ad16b0 --- /dev/null +++ b/app/templates/jshintrc @@ -0,0 +1,23 @@ +{ + "bitwise": true, + "eqeqeq": true, + "eqnull": true, + "immed": true, + "newcap": true, + "esnext": true, + "camelcase": true, + "latedef": true, + "noarg": true, + "node": true, + "undef": true, + "browser": true, + "trailing": true, + "jquery": true, + "curly": true, + "supernew": true, + "globals": { + "Backbone": true, + "_": true, + "jQuery": true + } +} diff --git a/app/templates/screenshot.png b/app/templates/screenshot.png new file mode 100755 index 0000000000000000000000000000000000000000..d8b2d241bf9c2d80fc43d429043695f4704afa20 GIT binary patch literal 4543 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 literal 0 HcmV?d00001 diff --git a/app/templates/src/images/apple-touch-icon.png b/app/templates/src/images/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..bee3e36990af10c2d29839145f2e27f50b7ef25f GIT binary patch literal 1076 zcmV-41k3x0P)0{{R3FC5Sl0000jP)t-sAt50p zDJm8lAZ$n?OE)1#XK*k{QM+;@nP4J3R$MYFA>f81E^kzKf%$e7mcPan@rW?7PHh;%1W8HqC!ZT};Q_TxplE*F?gTKS4>N!iLyqJ+IAZ!pVde; zjhUKY@^Xeo|36PX{?j=Z1wi zA8SAI`Yw5{{_jT@bh2~ohJ`+_ELUG zNadZRJPXOB>Jp9~y1pP6ktU9G!XL3;c6~|0S*YUDsF_69ml&Ld9$e~$zmsa$gH)V_ zw3jlT>s=3Wapluo$`BUl`W=@`M4IX#XD6?^K2w1g^`$Jl>iT4!Ub-~~IZTQV4UY>t z6$d$cdD`{n<)5S!{=q%%`d63kVk!G%?AN>A?D=q^LH600008Y_x;?x+`BviV9;aRjMgZ8M*!jgkRrFqSI9;F zHyfX@Az|AvVmn~YWWZP`0&JWEY~BFm?*Vq}VD7&_%x%MP$p`D`4JMC!K|B7pt?Mmp zUJAB7rxMXS6=!P+AtLU9V)J#61WPxwipRXCHO{BJ`l{m53#=t97a!znv~vfmr|AaP zRGIT7#0FyJy3Z*hL{GQp-0TRhX8UzZ)+>%?mK0^goaX4Q;xX1^@s6zs*Ol0003rNklI^NI(J-5ReZfL;|IqWQJk5XY$dHo$0jQ&2o3SW!m?B zV!%}x=6^9P6?6YRMY0vSqEu`*9{#FGr%sfZa3`t7tUP_MV>u?a0daT=0v^ywlnKay zv>Gd+V<8g@LJ9%{Z$u~dIxX@0!vPSTpalle84fq64ckL=5Fk!lg%L3e_k#g+4ort~ zzX+?aYT9{y$N<@&Ml91rLRz{)I@dNU3>?IXj6lb??cu!7qeWwY6|d5P)-#2`T=N_w zKNC?wE`$C$rOtB4M87|@I^hmEK4jwf2NUH<6Pr>eW80E~7e+TYTUc%s;k^P&PxLLL zvV&U%Z8ZWn%B9in1v6zvH>)=iLP?OS78&^5>tJDI8_de9K1=5V*$xV!GonJX00000 LNkvXXu0mjfnHr6_ literal 0 HcmV?d00001 diff --git a/app/templates/src/images/tile-wide.png b/app/templates/src/images/tile-wide.png new file mode 100755 index 0000000000000000000000000000000000000000..ccd739c7da5f47f6f36c9de6163cab77b534da6a GIT binary patch literal 1854 zcmZ`)X;{+P9!4}nOoMyJ1;#}FD2-joEyO(_Br$T!oJSlK#qEMinxiFZ%2lJ(a$HhV z(~P>gj^wgz*#KsaL{dN)HT+y> z945;bC}d*rW`HmhG>^mF!U@z zU0jzNJN`H|kCHgI@e__1b!V>cz2rNe|~K!jU7}>hz&fJTy-ISoHarB)dMH;p#;gYZTJz ziUP;y60>d2h}OZ35EM9VBr5KpN|nnD8YGA=;6XsRNf_&2iLY1&U}APjK;&F`@F69V z&1WKm5(pbJdoB<2Di;RZUAdRtzo*B^_+2WNHo$GE=OIl&ac*)nsI^zFjg5d`PD^eT zoJiBkJ+q~KFH<)b(scW0=w*;5E;y+fZGYm}J-uPz8_ZL~mU;%GinAJ^o9oS$_n^DU z*|ut977ixgU>48_@zM!U1pK(DN(^YL*c=#Qd6<9JA565s(}%jRTSm0@ihi}allXp1 z8;dQ@MX`xfs~Z5?>tLabX_#8g9ISceZ^B*J%1bzD^?bCz78NUu zPI91_b$(ETz)y0>lspJLEbu3RuBj>sphRRt;A~Bj1RWeXf&H2+(D#RUzp-wgp7cM1 zLj$hcd%SBGfg*ckP_qata%^YW9--vm)ULp~3`rb>zpeM*t4AlXM1c|jt%{%b8c2u& zh-Bf!^D%N>vN7c`+p+i)`T1DSxR~yQo;3RU`SoCKhJeSG$M{{_a1~rg_gY$L@@9@= z*qR<4?SAs4?SK{-!#g!zu+!gUGv#IyHL7W)>3%DT&WT zM)|7XIvix)7_4+R=tqBLiSRl{2Olg+X{6psqiu%eg7+?S1NTk#?AB9TzIgt)0bVu& z#xkb{dYk%%oiSrh8YS^XuMHDQpxn@+M@A4A4ou#X$+9u1rtB|W$-UFBxjeM2Pjp3?Ko7h9f1 z=S!-1pNr5Fvz;~7vje?C-X?;;e5xZv*;)s%B~dY5f!Jw!o zT@c~<>rcX|19q33zxQoET;i+Mxo-qgkpg(<7IW_WdS7JX>;jC!js#?PQj< zDDtc^%BMj=y(~Uj?v6Y=ibEziO>q|Ymm^B!|6SbGPuLkRs>^PG+pket6*^b{Jl8^H zH{BvIQ7>TA1GHR04&59g^rvNjP3Vp)nvE1$c{8N;K(1V>{uRBkvUnC#DAM~)w8dJ>;*v{dWy>0RzDuqWKHdltkfKQj= zdsGx{KS&dEM!n)uy5mmJ&Ks0|6Pu;$@XaGm(v_dKHmU+HZyfT)3^q9Xg6KM8=L># zG_mH$>VP2hZ2yOJTCI?n%*r<~KkG6A=?7ksXbcm*JnBW%U;jAD%C1V-O&(spc;(if NjOOA_X(Y4w{{!#vJbVBE literal 0 HcmV?d00001 diff --git a/app/templates/src/images/tile.png b/app/templates/src/images/tile.png new file mode 100755 index 0000000000000000000000000000000000000000..f820f61a0b95dd42dca6cbd06ca08ed4e1ef098a GIT binary patch literal 3482 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 literal 0 HcmV?d00001 diff --git a/app/templates/src/scripts/vendor/modernizr-2.8.3.min.js b/app/templates/src/scripts/vendor/modernizr-2.8.3.min.js new file mode 100644 index 0000000..fcc1be4 --- /dev/null +++ b/app/templates/src/scripts/vendor/modernizr-2.8.3.min.js @@ -0,0 +1,957 @@ + + + + + + + + + + + + + html5-boilerplate/modernizr-2.8.3.min.js at master ยท h5bp/html5-boilerplate + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Skip to content +
+ + + + + + + + + + + + + +
+
+
+ +
+
+
+ +
    + +
  • +
    + +
    + + + + + Watch + + + +
    + +
    +
    + +
    +
  • + +
  • + +
    + +
    + + +
    +
    + + +
    + +
  • + + +
  • + + + Fork + + +
  • + +
+ +

+ + /html5-boilerplate + + + + + +

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

HTTPS clone URL

+
+ + + + +
+
+ + +
+

SSH clone URL

+
+ + + + +
+
+ + +
+

Subversion checkout URL

+
+ + + + +
+
+ + + +

You can clone with + HTTPS, SSH, or Subversion. + + + +

+ + + + Clone in Desktop + + + + + + Download ZIP + +
+
+ +
+ + + + + + +
+ +
+ + + branch: + master + + + +
+ +
+ + + + +
+ + +
+ + +
+
+ Thomas Krug + SimplyThomas + + +
+ + + +
+ +
+
+
+
+ 5 lines (4 sloc) + + 15.514 kb +
+
+
+ Raw + Blame + History +
+ + + + + + + + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + +
/* Modernizr 2.8.3 (Custom Build) | MIT & BSD
* Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-flexbox-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-shiv-mq-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-load
*/
;window.Modernizr=function(a,b,c){function D(a){j.cssText=a}function E(a,b){return D(n.join(a+";")+(b||""))}function F(a,b){return typeof a===b}function G(a,b){return!!~(""+a).indexOf(b)}function H(a,b){for(var d in a){var e=a[d];if(!G(e,"-")&&j[e]!==c)return b=="pfx"?e:!0}return!1}function I(a,b,d){for(var e in a){var f=b[a[e]];if(f!==c)return d===!1?a[e]:F(f,"function")?f.bind(d||b):f}return!1}function J(a,b,c){var d=a.charAt(0).toUpperCase()+a.slice(1),e=(a+" "+p.join(d+" ")+d).split(" ");return F(b,"string")||F(b,"undefined")?H(e,b):(e=(a+" "+q.join(d+" ")+d).split(" "),I(e,b,c))}function K(){e.input=function(c){for(var d=0,e=c.length;d<e;d++)u[c[d]]=c[d]in k;return u.list&&(u.list=!!b.createElement("datalist")&&!!a.HTMLDataListElement),u}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" ")),e.inputtypes=function(a){for(var d=0,e,f,h,i=a.length;d<i;d++)k.setAttribute("type",f=a[d]),e=k.type!=="text",e&&(k.value=l,k.style.cssText="position:absolute;visibility:hidden;",/^range$/.test(f)&&k.style.WebkitAppearance!==c?(g.appendChild(k),h=b.defaultView,e=h.getComputedStyle&&h.getComputedStyle(k,null).WebkitAppearance!=="textfield"&&k.offsetHeight!==0,g.removeChild(k)):/^(search|tel)$/.test(f)||(/^(url|email)$/.test(f)?e=k.checkValidity&&k.checkValidity()===!1:e=k.value!=l)),t[a[d]]=!!e;return t}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var d="2.8.3",e={},f=!0,g=b.documentElement,h="modernizr",i=b.createElement(h),j=i.style,k=b.createElement("input"),l=":)",m={}.toString,n=" -webkit- -moz- -o- -ms- ".split(" "),o="Webkit Moz O ms",p=o.split(" "),q=o.toLowerCase().split(" "),r={svg:"http://www.w3.org/2000/svg"},s={},t={},u={},v=[],w=v.slice,x,y=function(a,c,d,e){var f,i,j,k,l=b.createElement("div"),m=b.body,n=m||b.createElement("body");if(parseInt(d,10))while(d--)j=b.createElement("div"),j.id=e?e[d]:h+(d+1),l.appendChild(j);return f=["&#173;",'<style id="s',h,'">',a,"</style>"].join(""),l.id=h,(m?l:n).innerHTML+=f,n.appendChild(l),m||(n.style.background="",n.style.overflow="hidden",k=g.style.overflow,g.style.overflow="hidden",g.appendChild(n)),i=c(l,a),m?l.parentNode.removeChild(l):(n.parentNode.removeChild(n),g.style.overflow=k),!!i},z=function(b){var c=a.matchMedia||a.msMatchMedia;if(c)return c(b)&&c(b).matches||!1;var d;return y("@media "+b+" { #"+h+" { position: absolute; } }",function(b){d=(a.getComputedStyle?getComputedStyle(b,null):b.currentStyle)["position"]=="absolute"}),d},A=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=F(e[d],"function"),F(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}(),B={}.hasOwnProperty,C;!F(B,"undefined")&&!F(B.call,"undefined")?C=function(a,b){return B.call(a,b)}:C=function(a,b){return b in a&&F(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=w.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(w.call(arguments)));return Object(g)===g?g:f}return c.apply(b,d.concat(w.call(arguments)))};return e}),s.flexbox=function(){return J("flexWrap")},s.canvas=function(){var a=b.createElement("canvas");return!!a.getContext&&!!a.getContext("2d")},s.canvastext=function(){return!!e.canvas&&!!F(b.createElement("canvas").getContext("2d").fillText,"function")},s.webgl=function(){return!!a.WebGLRenderingContext},s.touch=function(){var c;return"ontouchstart"in a||a.DocumentTouch&&b instanceof DocumentTouch?c=!0:y(["@media (",n.join("touch-enabled),("),h,")","{#modernizr{top:9px;position:absolute}}"].join(""),function(a){c=a.offsetTop===9}),c},s.geolocation=function(){return"geolocation"in navigator},s.postmessage=function(){return!!a.postMessage},s.websqldatabase=function(){return!!a.openDatabase},s.indexedDB=function(){return!!J("indexedDB",a)},s.hashchange=function(){return A("hashchange",a)&&(b.documentMode===c||b.documentMode>7)},s.history=function(){return!!a.history&&!!history.pushState},s.draganddrop=function(){var a=b.createElement("div");return"draggable"in a||"ondragstart"in a&&"ondrop"in a},s.websockets=function(){return"WebSocket"in a||"MozWebSocket"in a},s.rgba=function(){return D("background-color:rgba(150,255,150,.5)"),G(j.backgroundColor,"rgba")},s.hsla=function(){return D("background-color:hsla(120,40%,100%,.5)"),G(j.backgroundColor,"rgba")||G(j.backgroundColor,"hsla")},s.multiplebgs=function(){return D("background:url(https://),url(https://),red url(https://)"),/(url\s*\(.*?){3}/.test(j.background)},s.backgroundsize=function(){return J("backgroundSize")},s.borderimage=function(){return J("borderImage")},s.borderradius=function(){return J("borderRadius")},s.boxshadow=function(){return J("boxShadow")},s.textshadow=function(){return b.createElement("div").style.textShadow===""},s.opacity=function(){return E("opacity:.55"),/^0.55$/.test(j.opacity)},s.cssanimations=function(){return J("animationName")},s.csscolumns=function(){return J("columnCount")},s.cssgradients=function(){var a="background-image:",b="gradient(linear,left top,right bottom,from(#9f9),to(white));",c="linear-gradient(left top,#9f9, white);";return D((a+"-webkit- ".split(" ").join(b+a)+n.join(c+a)).slice(0,-a.length)),G(j.backgroundImage,"gradient")},s.cssreflections=function(){return J("boxReflect")},s.csstransforms=function(){return!!J("transform")},s.csstransforms3d=function(){var a=!!J("perspective");return a&&"webkitPerspective"in g.style&&y("@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}",function(b,c){a=b.offsetLeft===9&&b.offsetHeight===3}),a},s.csstransitions=function(){return J("transition")},s.fontface=function(){var a;return y('@font-face {font-family:"font";src:url("https://")}',function(c,d){var e=b.getElementById("smodernizr"),f=e.sheet||e.styleSheet,g=f?f.cssRules&&f.cssRules[0]?f.cssRules[0].cssText:f.cssText||"":"";a=/src/i.test(g)&&g.indexOf(d.split(" ")[0])===0}),a},s.generatedcontent=function(){var a;return y(["#",h,"{font:0/0 a}#",h,':after{content:"',l,'";visibility:hidden;font:3px/1 a}'].join(""),function(b){a=b.offsetHeight>=3}),a},s.video=function(){var a=b.createElement("video"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('video/ogg; codecs="theora"').replace(/^no$/,""),c.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"').replace(/^no$/,""),c.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,"")}catch(d){}return c},s.audio=function(){var a=b.createElement("audio"),c=!1;try{if(c=!!a.canPlayType)c=new Boolean(c),c.ogg=a.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,""),c.mp3=a.canPlayType("audio/mpeg;").replace(/^no$/,""),c.wav=a.canPlayType('audio/wav; codecs="1"').replace(/^no$/,""),c.m4a=(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")}catch(d){}return c},s.localstorage=function(){try{return localStorage.setItem(h,h),localStorage.removeItem(h),!0}catch(a){return!1}},s.sessionstorage=function(){try{return sessionStorage.setItem(h,h),sessionStorage.removeItem(h),!0}catch(a){return!1}},s.webworkers=function(){return!!a.Worker},s.applicationcache=function(){return!!a.applicationCache},s.svg=function(){return!!b.createElementNS&&!!b.createElementNS(r.svg,"svg").createSVGRect},s.inlinesvg=function(){var a=b.createElement("div");return a.innerHTML="<svg/>",(a.firstChild&&a.firstChild.namespaceURI)==r.svg},s.smil=function(){return!!b.createElementNS&&/SVGAnimate/.test(m.call(b.createElementNS(r.svg,"animate")))},s.svgclippaths=function(){return!!b.createElementNS&&/SVGClipPath/.test(m.call(b.createElementNS(r.svg,"clipPath")))};for(var L in s)C(s,L)&&(x=L.toLowerCase(),e[x]=s[L](),v.push((e[x]?"":"no-")+x));return e.input||K(),e.addTest=function(a,b){if(typeof a=="object")for(var d in a)C(a,d)&&e.addTest(d,a[d]);else{a=a.toLowerCase();if(e[a]!==c)return e;b=typeof b=="function"?b():b,typeof f!="undefined"&&f&&(g.className+=" "+(b?"":"no-")+a),e[a]=b}return e},D(""),i=k=null,function(a,b){function l(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function m(){var a=s.elements;return typeof a=="string"?a.split(" "):a}function n(a){var b=j[a[h]];return b||(b={},i++,a[h]=i,j[i]=b),b}function o(a,c,d){c||(c=b);if(k)return c.createElement(a);d||(d=n(c));var g;return d.cache[a]?g=d.cache[a].cloneNode():f.test(a)?g=(d.cache[a]=d.createElem(a)).cloneNode():g=d.createElem(a),g.canHaveChildren&&!e.test(a)&&!g.tagUrn?d.frag.appendChild(g):g}function p(a,c){a||(a=b);if(k)return a.createDocumentFragment();c=c||n(a);var d=c.frag.cloneNode(),e=0,f=m(),g=f.length;for(;e<g;e++)d.createElement(f[e]);return d}function q(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return s.shivMethods?o(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(s,b.frag)}function r(a){a||(a=b);var c=n(a);return s.shivCSS&&!g&&!c.hasCSS&&(c.hasCSS=!!l(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),k||q(a,c),a}var c="3.7.0",d=a.html5||{},e=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,f=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,g,h="_html5shiv",i=0,j={},k;(function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",g="hidden"in a,k=a.childNodes.length==1||function(){b.createElement("a");var a=b.createDocumentFragment();return typeof a.cloneNode=="undefined"||typeof a.createDocumentFragment=="undefined"||typeof a.createElement=="undefined"}()}catch(c){g=!0,k=!0}})();var s={elements:d.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:c,shivCSS:d.shivCSS!==!1,supportsUnknownElements:k,shivMethods:d.shivMethods!==!1,type:"default",shivDocument:r,createElement:o,createDocumentFragment:p};a.html5=s,r(b)}(this,b),e._version=d,e._prefixes=n,e._domPrefixes=q,e._cssomPrefixes=p,e.mq=z,e.hasEvent=A,e.testProp=function(a){return H([a])},e.testAllProps=J,e.testStyles=y,e.prefixed=function(a,b,c){return b?J(a,b,c):J(a,"pfx")},g.className=g.className.replace(/(^|\s)no-js(\s|$)/,"$1$2")+(f?" js "+v.join(" "):""),e}(this,this.document),function(a,b,c){function d(a){return"[object Function]"==o.call(a)}function e(a){return"string"==typeof a}function f(){}function g(a){return!a||"loaded"==a||"complete"==a||"uninitialized"==a}function h(){var a=p.shift();q=1,a?a.t?m(function(){("c"==a.t?B.injectCss:B.injectJs)(a.s,0,a.a,a.x,a.e,1)},0):(a(),h()):q=0}function i(a,c,d,e,f,i,j){function k(b){if(!o&&g(l.readyState)&&(u.r=o=1,!q&&h(),l.onload=l.onreadystatechange=null,b)){"img"!=a&&m(function(){t.removeChild(l)},50);for(var d in y[c])y[c].hasOwnProperty(d)&&y[c][d].onload()}}var j=j||B.errorTimeout,l=b.createElement(a),o=0,r=0,u={t:d,s:c,e:f,a:i,x:j};1===y[c]&&(r=1,y[c]=[]),"object"==a?l.data=c:(l.src=c,l.type=a),l.width=l.height="0",l.onerror=l.onload=l.onreadystatechange=function(){k.call(this,r)},p.splice(e,0,u),"img"!=a&&(r||2===y[c]?(t.insertBefore(l,s?null:n),m(k,j)):y[c].push(l))}function j(a,b,c,d,f){return q=0,b=b||"j",e(a)?i("c"==b?v:u,a,b,this.i++,c,d,f):(p.splice(this.i++,0,a),1==p.length&&h()),this}function k(){var a=B;return a.loader={load:j,i:0},a}var l=b.documentElement,m=a.setTimeout,n=b.getElementsByTagName("script")[0],o={}.toString,p=[],q=0,r="MozAppearance"in l.style,s=r&&!!b.createRange().compareNode,t=s?l:n.parentNode,l=a.opera&&"[object Opera]"==o.call(a.opera),l=!!b.attachEvent&&!l,u=r?"object":l?"script":"img",v=l?"script":u,w=Array.isArray||function(a){return"[object Array]"==o.call(a)},x=[],y={},z={timeout:function(a,b){return b.length&&(a.timeout=b[0]),a}},A,B;B=function(a){function b(a){var a=a.split("!"),b=x.length,c=a.pop(),d=a.length,c={url:c,origUrl:c,prefixes:a},e,f,g;for(f=0;f<d;f++)g=a[f].split("="),(e=z[g.shift()])&&(c=e(c,g));for(f=0;f<b;f++)c=x[f](c);return c}function g(a,e,f,g,h){var i=b(a),j=i.autoCallback;i.url.split(".").pop().split("?").shift(),i.bypass||(e&&(e=d(e)?e:e[a]||e[g]||e[a.split("/").pop().split("?")[0]]),i.instead?i.instead(a,e,f,g,h):(y[i.url]?i.noexec=!0:y[i.url]=1,f.load(i.url,i.forceCSS||!i.forceJS&&"css"==i.url.split(".").pop().split("?").shift()?"c":c,i.noexec,i.attrs,i.timeout),(d(e)||d(j))&&f.load(function(){k(),e&&e(i.origUrl,h,g),j&&j(i.origUrl,h,g),y[i.url]=2})))}function h(a,b){function c(a,c){if(a){if(e(a))c||(j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}),g(a,j,b,0,h);else if(Object(a)===a)for(n in m=function(){var b=0,c;for(c in a)a.hasOwnProperty(c)&&b++;return b}(),a)a.hasOwnProperty(n)&&(!c&&!--m&&(d(j)?j=function(){var a=[].slice.call(arguments);k.apply(this,a),l()}:j[n]=function(a){return function(){var b=[].slice.call(arguments);a&&a.apply(this,b),l()}}(k[n])),g(a[n],j,b,n,h))}else!c&&l()}var h=!!a.test,i=a.load||a.both,j=a.callback||f,k=j,l=a.complete||f,m,n;c(h?a.yep:a.nope,!!i),i&&c(i)}var i,j,l=this.yepnope.loader;if(e(a))g(a,0,l,0);else if(w(a))for(i=0;i<a.length;i++)j=a[i],e(j)?g(j,0,l,0):w(j)?B(j):Object(j)===j&&h(j,l);else Object(a)===a&&h(a,l)},B.addPrefix=function(a,b){z[a]=b},B.addFilter=function(a){x.push(a)},B.errorTimeout=1e4,null==b.readyState&&b.addEventListener&&(b.readyState="loading",b.addEventListener("DOMContentLoaded",A=function(){b.removeEventListener("DOMContentLoaded",A,0),b.readyState="complete"},0)),a.yepnope=k(),a.yepnope.executeStack=h,a.yepnope.injectJs=function(a,c,d,e,i,j){var k=b.createElement("script"),l,o,e=e||B.errorTimeout;k.src=a;for(o in d)k.setAttribute(o,d[o]);c=j?h:c||f,k.onreadystatechange=k.onload=function(){!l&&g(k.readyState)&&(l=1,c(),k.onload=k.onreadystatechange=null)},m(function(){l||(l=1,c(1))},e),i?k.onload():n.parentNode.insertBefore(k,n)},a.yepnope.injectCss=function(a,c,d,e,g,i){var e=b.createElement("link"),j,c=i?h:c||f;e.href=a,e.rel="stylesheet",e.type="text/css";for(j in d)e.setAttribute(j,d[j]);g||(n.parentNode.insertBefore(e,n),m(c,0))}}(this,document),Modernizr.load=function(){yepnope.apply(window,[].slice.call(arguments,0))};
+ +
+ +
+
+ +Jump to Line + + +
+ +
+ +
+
+ + +
+ +
+ +
+ + +
+
+
+ +
+
+
+
+
+ +
+ + + +
+ + + Something went wrong with that request. Please try again. +
+ + + + + + + + + + diff --git a/app/templates/src/scss/partials/_blocks.scss b/app/templates/src/scss/partials/_blocks.scss new file mode 100644 index 0000000..0c943ea --- /dev/null +++ b/app/templates/src/scss/partials/_blocks.scss @@ -0,0 +1,3 @@ +/* BLOCKS */ + +.block { } diff --git a/app/templates/src/scss/partials/_forms.scss b/app/templates/src/scss/partials/_forms.scss new file mode 100644 index 0000000..528b150 --- /dev/null +++ b/app/templates/src/scss/partials/_forms.scss @@ -0,0 +1,3 @@ +/* FORMS */ + +form { } diff --git a/app/templates/src/scss/partials/_global.scss b/app/templates/src/scss/partials/_global.scss new file mode 100644 index 0000000..cb03e50 --- /dev/null +++ b/app/templates/src/scss/partials/_global.scss @@ -0,0 +1,134 @@ +/*! HTML5 Boilerplate v4.3.0 | MIT License | http://h5bp.com/ */ + +/* + * What follows is the result of much research on cross-browser styling. + * Credit left inline and big thanks to Nicolas Gallagher, Jonathan Neal, + * Kroc Camen, and the H5BP dev community and team. + */ + +/* ========================================================================== + Base styles: opinionated defaults + ========================================================================== */ + +html { + color: #222; + font-size: 1em; + line-height: 1.4; +} + +/* + * Remove text-shadow in selection highlight: h5bp.com/i + * These selection rule sets have to be separate. + * Customize the background color to match your design. + */ + +::-moz-selection { + background: #b3d4fc; + text-shadow: none; +} + +::selection { + background: #b3d4fc; + text-shadow: none; +} + +/* + * A better looking default horizontal rule + */ + +hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + margin: 1em 0; + padding: 0; +} + +/* + * Remove the gap between images, videos, audio and canvas and the bottom of + * their containers: h5bp.com/i/440 + */ + +audio, +canvas, +img, +svg, +video { + vertical-align: middle; +} + +/* + * Remove default fieldset styles. + */ + +fieldset { + border: 0; + margin: 0; + padding: 0; +} + +/* + * Allow only vertical resizing of textareas. + */ + +textarea { + resize: vertical; +} + +/* ========================================================================== + Browse Happy prompt + ========================================================================== */ + +.browsehappy { + margin: 0.2em 0; + background: #ccc; + color: #000; + padding: 0.2em 0; +} + +/* ========================================================================== + Author's custom styles + ========================================================================== */ + + + +/* Alignment */ +.alignleft { + display: inline; + float: left; + margin-right: 1.5em; +} +.alignright { + display: inline; + float: right; + margin-left: 1.5em; +} +.aligncenter { + clear: both; + display: block; + margin: 0 auto; +} + +/* Text meant only for screen readers */ +.assistive-text { + clip: rect(1px 1px 1px 1px); /* IE6, IE7 */ + clip: rect(1px, 1px, 1px, 1px); + position: absolute !important; +} + + +/* + * Box Sizing + * + * Set that shit to border-box, yo. And fix those pesky pseudo elements + */ + +/* ========================================================================== + Border-box all the things! + ========================================================================== */ +*, +:before, +:after { + box-sizing: border-box; +} diff --git a/app/templates/src/scss/partials/_grid.scss b/app/templates/src/scss/partials/_grid.scss new file mode 100644 index 0000000..06688c4 --- /dev/null +++ b/app/templates/src/scss/partials/_grid.scss @@ -0,0 +1,51 @@ +$pad: 20px; + +.grid { + margin: 0 0 $pad 0; + @include microclearfix(); +} + +[class*='col-'] { + float: left; + padding-right: $pad; + .grid &:last-of-type { + padding-right: 0; + } +} + +.col-1-2 { + width: 50%; +} + +.col-1-3 { + width: 33.33%; +} +.col-2-3 { + width: 66.66%; +} + +.col-1-4 { + width: 25%; +} +.col-3-4 { + width: 75%; +} + +.col-1-8 { + width: 12.5%; +} +.col-7-8 { + width: 87.5%; +} + +.module { + padding: $pad; +} + +/* Opt-in outside padding */ +.grid-pad { + padding: $pad 0 $pad $pad; + [class*='col-']:last-of-type { + padding-right: $pad; + } +} diff --git a/app/templates/src/scss/partials/_helpers.scss b/app/templates/src/scss/partials/_helpers.scss new file mode 100644 index 0000000..0efdc17 --- /dev/null +++ b/app/templates/src/scss/partials/_helpers.scss @@ -0,0 +1,100 @@ +/* ========================================================================== + Helper classes + ========================================================================== */ + +/* + * Image replacement + */ + +.ir { + background-color: transparent; + border: 0; + overflow: hidden; + /* IE 6/7 fallback */ + *text-indent: -9999px; +} + +.ir:before { + content: ""; + display: block; + width: 0; + height: 150%; +} + +/* + * Hide from both screenreaders and browsers: h5bp.com/u + */ + +.hidden { + display: none !important; + visibility: hidden; +} + +/* + * Hide only visually, but have it available for screenreaders: h5bp.com/v + */ + +.visuallyhidden { + border: 0; + clip: rect(0 0 0 0); + height: 1px; + margin: -1px; + overflow: hidden; + padding: 0; + position: absolute; + width: 1px; +} + +/* + * Extends the .visuallyhidden class to allow the element to be focusable + * when navigated to via the keyboard: h5bp.com/p + */ + +.visuallyhidden.focusable:active, +.visuallyhidden.focusable:focus { + clip: auto; + height: auto; + margin: 0; + overflow: visible; + position: static; + width: auto; +} + +/* + * Hide visually and from screenreaders, but maintain layout + */ + +.invisible { + visibility: hidden; +} + +/* + * Clearfix: contain floats + * + * For modern browsers + * 1. The space content is one way to avoid an Opera bug when the + * `contenteditable` attribute is included anywhere else in the document. + * Otherwise it causes space to appear at the top and bottom of elements + * that receive the `clearfix` class. + * 2. The use of `table` rather than `block` is only necessary if using + * `:before` to contain the top-margins of child elements. + */ + +.clearfix:before, +.clearfix:after { + content: " "; /* 1 */ + display: table; /* 2 */ +} + +.clearfix:after { + clear: both; +} + +/* + * For IE 6/7 only + * Include this rule to trigger hasLayout and contain floats. + */ + +.clearfix { + *zoom: 1; +} diff --git a/app/templates/src/scss/partials/_mixins.scss b/app/templates/src/scss/partials/_mixins.scss new file mode 100644 index 0000000..5937865 --- /dev/null +++ b/app/templates/src/scss/partials/_mixins.scss @@ -0,0 +1,81 @@ +/* + * Mixin for easy media queries + * @include bp(tablet) { SCSS here }; +*/ +@mixin bp($point) { + @if $point == biggie { + @media (max-width : 1600px) { @content; } + } + @if $point == tablet { + @media (max-width : 1024px) { @content; } + } + @else if $point == phone { + @media (max-width : 768px) { @content; } + } +} + +/* + * Mixin for micro clearfix + * @include microclearfix; +*/ +@mixin microclearfix { + &:before, &:after { content: ""; display: table; } + &:after { clear: both; } + *zoom: 1; +} + +/* + * Mixin for basic CSS triangles + * @include triangle(up, #000, 50px) +*/ +@mixin triangle($direction:up, $color:#000, $size:100px) { + @if($direction == up) { + border-color: transparent transparent $color; + border-style: solid; + border-width: 0 $size $size; + height: 0; + width: 0; + } + @if($direction == down) { + border-color: $color transparent transparent transparent; + border-style: solid; + border-width: $size; + height:0; + width:0; + } + @if($direction == left) { + border-color: transparent $color transparent transparent; + border-style: solid; + border-width: $size $size $size 0; + height: 0; + width: 0; + } + @if($direction == right) { + border-color: transparent transparent transparent $color; + border-style: solid; + border-width: $size 0 $size $size; + height:0; + width:0; + } +} + +/* + * @font-face mixin + * Bulletproof font-face via Font Squirrel + * @include fontface('family', 'assets/fonts/', 'myfontname'); + */ + +@mixin fontface($font-family, $font-url, $font-name) { + @font-face { + font: { + family: $font-family; + style: normal; + weight: normal; + } + src: url($font-url + '/' + $font-name + '.eot'); + src: url($font-url + '/' + $font-name + '.eot#iefix') format('embedded-opentype'), + url($font-url + '/' + $font-name + '.woff') format('woff'), + url($font-url + '/' + $font-name + '.ttf') format('truetype'), + url($font-url + '/' + $font-name + '.svg#' + $font-name) format('svg'); + } +} diff --git a/app/templates/src/scss/partials/_normalize.scss b/app/templates/src/scss/partials/_normalize.scss new file mode 100644 index 0000000..81c6f31 --- /dev/null +++ b/app/templates/src/scss/partials/_normalize.scss @@ -0,0 +1,427 @@ +/*! normalize.css v3.0.2 | MIT License | git.io/normalize */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined for any HTML5 element in IE 8/9. + * Correct `block` display not defined for `details` or `summary` in IE 10/11 + * and Firefox. + * Correct `block` display not defined for `main` in IE 11. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +menu, +nav, +section, +summary { + display: block; +} + +/** + * 1. Correct `inline-block` display not defined in IE 8/9. + * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. + */ + +audio, +canvas, +progress, +video { + display: inline-block; /* 1 */ + vertical-align: baseline; /* 2 */ +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9/10. + * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Address styling not present in IE 8/9/10/11, Safari, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9/10. + */ + +img { + border: 0; +} + +/** + * Correct overflow not hidden in IE 9/10/11. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* Grouping content + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari. + */ + +figure { + margin: 1em 40px; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Contain overflow in all browsers. + */ + +pre { + overflow: auto; +} + +/** + * Address odd `em`-unit font size rendering in all browsers. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em; +} + +/* Forms + ========================================================================== */ + +/** + * Known limitation: by default, Chrome and Safari on OS X allow very limited + * styling of `select`, unless a `border` property is set. + */ + +/** + * 1. Correct color not being inherited. + * Known issue: affects color of disabled elements. + * 2. Correct font properties not being inherited. + * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. + */ + +button, +input, +optgroup, +select, +textarea { + color: inherit; /* 1 */ + font: inherit; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address `overflow` set to `hidden` in IE 8/9/10/11. + */ + +button { + overflow: visible; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. + * Correct `select` style inheritance in Firefox. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +input { + line-height: normal; +} + +/** + * It's recommended that you don't attempt to style these elements. + * Firefox's implementation doesn't respect box-sizing, padding, or width. + * + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Fix the cursor style for Chrome's increment/decrement buttons. For certain + * `font-size` values of the `input`, it causes the cursor style of the + * decrement button to change from `default` to `text`. + */ + +input[type="number"]::-webkit-inner-spin-button, +input[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari and Chrome on OS X. + * Safari (but not Chrome) clips the cancel button when the search input has + * padding (and `textfield` appearance). + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9/10/11. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Remove default vertical scrollbar in IE 8/9/10/11. + */ + +textarea { + overflow: auto; +} + +/** + * Don't inherit the `font-weight` (applied by a rule above). + * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. + */ + +optgroup { + font-weight: bold; +} + +/* Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} + +td, +th { + padding: 0; +} \ No newline at end of file diff --git a/app/templates/src/scss/partials/_page.scss b/app/templates/src/scss/partials/_page.scss new file mode 100644 index 0000000..448f50b --- /dev/null +++ b/app/templates/src/scss/partials/_page.scss @@ -0,0 +1,65 @@ +/* GENERAL */ +body { } + +a, +a:visited { + color: $linkColor; +} +a:hover { + color: $linkHoverColor; +} + +::-moz-selection { + background: $selectionColor; + text-shadow: none; +} + +::selection { + background: $selectionColor; + text-shadow: none; +} + +/* HEADINGS / TYPOGRAPHY */ +h1, +h2, +h3, +h4 { + font-weight: normal; + margin: 0 0 10px 0; +} +h1 { } +h2 { } +h3 { } +h4 { } + +/* STRUCTURE */ +#container { + max-width: $pageWidth; + margin: 20px auto; +} + +/* HEADER */ +header { } +#logo { } + +/* NAV */ +nav { } + +/* MAIN */ +#main { } + +/* SIDEBAR */ +aside { } + +/* FOOTER */ +footer { } + +/**************************************** +PAGE TEMPLATES +*****************************************/ + +/* Home Page */ +.home { } + +/* Blog Page */ +.blog { } diff --git a/app/templates/src/scss/partials/_posts.scss b/app/templates/src/scss/partials/_posts.scss new file mode 100644 index 0000000..fb2e986 --- /dev/null +++ b/app/templates/src/scss/partials/_posts.scss @@ -0,0 +1,73 @@ +/* POSTS */ + +article { + clear: both; + margin: 0 0 35px 0; +} + +blockquote { + background: url(assets/images/icons/blockquote.png) no-repeat 0 12px; + padding: 10px 20px 10px 50px; + font-style: italic; +} +blockquote p { } + +.post { } + +.alignleft { + float: left; + width: auto; + margin: 5px 15px 15px 0; +} +.alignright { + float: right; + width: auto; + margin: 5px 0 15px 15px; +} +.aligncenter { + text-align: center; + margin-bottom: 5px; +} +img.aligncenter { + margin-left: auto; + margin-right: auto; + display: block; +} + +pre { } +code, tt { } + +.meta { } +.postmetadata { } + +/* SHARING */ + +.sharing h4 { + margin-bottom: 0; + padding-bottom: 0; +} +.sharing ul { + list-style: none; + margin-top: 0; + margin-bottom: 0; + padding-top: 5px; + padding-bottom: 0; +} +.sharing li { + float: left; +} +.sharing li:first-child { + padding-left: 0; +} +.sharing .share-twitter { + padding-top: 1px; +} +.sharing .share-facebook { + padding-top: 1px; +} +.sharing .share-googleplus { + margin-left: 30px; +} + +/* POST NAVIGATION */ + diff --git a/app/templates/src/scss/partials/_print.scss b/app/templates/src/scss/partials/_print.scss new file mode 100644 index 0000000..e926bf7 --- /dev/null +++ b/app/templates/src/scss/partials/_print.scss @@ -0,0 +1,67 @@ +/* ========================================================================== + Print styles. + Inlined to avoid required HTTP connection: h5bp.com/r + ========================================================================== */ + +@media print { + * { + background: transparent !important; + color: #000 !important; /* Black prints faster: h5bp.com/s */ + box-shadow: none !important; + text-shadow: none !important; + } + + a, + a:visited { + text-decoration: underline; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + /* + * Don't show links for images, or javascript/internal links + */ + + .ir a:after, + a[href^="javascript:"]:after, + a[href^="#"]:after { + content: ""; + } + + pre, + blockquote { + border: 1px solid #999; + page-break-inside: avoid; + } + + thead { + display: table-header-group; /* h5bp.com/t */ + } + + tr, + img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + + h2, + h3 { + page-break-after: avoid; + } +} \ No newline at end of file diff --git a/app/templates/src/scss/partials/_search.scss b/app/templates/src/scss/partials/_search.scss new file mode 100644 index 0000000..44a0692 --- /dev/null +++ b/app/templates/src/scss/partials/_search.scss @@ -0,0 +1,7 @@ +/* SEARCH */ + +#searchform label { } +#searchform div { } +#searchform div input { } +#searchform div input#s { } +#searchform div input#searchsubmit { } \ No newline at end of file diff --git a/app/templates/src/scss/partials/_variables.scss b/app/templates/src/scss/partials/_variables.scss new file mode 100644 index 0000000..d3acc29 --- /dev/null +++ b/app/templates/src/scss/partials/_variables.scss @@ -0,0 +1,14 @@ +// Font Face +// @include fontface('FONT_NAME', 'assets/fonts/', 'FONT_FAMILY'); + +// Structure +$pageWidth: 1000px; + +// Text Selection +$selectionColor: orange; + +// Links +$linkColor: blue; +$linkHoverColor: blue; + +// Other diff --git a/app/templates/src/scss/style.scss b/app/templates/src/scss/style.scss new file mode 100755 index 0000000..00daf0a --- /dev/null +++ b/app/templates/src/scss/style.scss @@ -0,0 +1,33 @@ +/* +Theme Name: Drupal 7 Gulp Starter Theme +Theme URI: https://github.com/lasseyls/Drupal-7-Starter-Theme +Description: Drupal 7 Gulp Starter Theme for use as a starting template for building custom themes. +Author: Lasse Moos +Author URI: http://www.yourlocalstudio.dk +License: GNU General Public License v2.0 +License URI: http://www.gnu.org/licenses/gpl-2.0.html +Version: 1.0 +*/ + +// Reset, Variables, Mixins, Etc +// DO NOT EDIT ORDER OF FILES +@import "partials/mixins"; +@import "partials/variables"; +@import "partials/normalize"; + +// Globals +@import "partials/global"; + +// The grid +@import "partials/grid"; + +// Page and Site Styles +@import "partials/page"; +@import "partials/posts"; +@import "partials/blocks"; +@import "partials/search"; +@import "partials/forms"; + +// Helper Classes, Print, Etc +@import "partials/helpers"; +@import "partials/print"; diff --git a/app/templates/template.php b/app/templates/template.php new file mode 100644 index 0000000..613a329 --- /dev/null +++ b/app/templates/template.php @@ -0,0 +1,28 @@ + tag instead of drupals default @import + * - because browserSync doesn't support @import. + * Code from: https://www.drupal.org/project/link_css + */ + +function <%= themeMachineName %>_css_alter(&$css) { + $count = 0; + + foreach ($css as $key => $value) { + // Skip core files. + $is_core = (strpos($value['data'], 'misc/') === 0 || strpos($value['data'], 'modules/') === 0); + if (!$is_core) { + // This option forces embeding with a link element. + $css[$key]['preprocess'] = FALSE; + $count++; + } + } + +} + +// Add functions here + + +?> diff --git a/app/templates/templates/block.tpl.php b/app/templates/templates/block.tpl.php new file mode 100644 index 0000000..66dfcd3 --- /dev/null +++ b/app/templates/templates/block.tpl.php @@ -0,0 +1,15 @@ +
> + + + + subject): ?> + >subject ?> + + + + +
> + +
+ +
diff --git a/app/templates/templates/comment.tpl.php b/app/templates/templates/comment.tpl.php new file mode 100644 index 0000000..00f6614 --- /dev/null +++ b/app/templates/templates/comment.tpl.php @@ -0,0 +1,33 @@ +
> + + + + + + + + + > + + + + +
> + + +
+ +
+ +
+ + + +
diff --git a/app/templates/templates/field.tpl.php b/app/templates/templates/field.tpl.php new file mode 100644 index 0000000..29a0b74 --- /dev/null +++ b/app/templates/templates/field.tpl.php @@ -0,0 +1,11 @@ +
> + +
>
+ + +
> + $item): ?> +
>
+ +
+
diff --git a/app/templates/templates/html.tpl.php b/app/templates/templates/html.tpl.php new file mode 100644 index 0000000..f4cd19c --- /dev/null +++ b/app/templates/templates/html.tpl.php @@ -0,0 +1,36 @@ + + + + + + + <?php print $head_title; ?> + + + + + +> + + + + + + + + + + + + diff --git a/app/templates/templates/node.tpl.php b/app/templates/templates/node.tpl.php new file mode 100644 index 0000000..623b62f --- /dev/null +++ b/app/templates/templates/node.tpl.php @@ -0,0 +1,32 @@ +
> + + + + + + + > + + + + + + + + +
> + +
+ + + + + +
diff --git a/app/templates/templates/page.tpl.php b/app/templates/templates/page.tpl.php new file mode 100644 index 0000000..e1dc07d --- /dev/null +++ b/app/templates/templates/page.tpl.php @@ -0,0 +1,55 @@ +
+ +
+ + + + +
+ + + + + + + + + + + +
+ +
+
+ + +

+ +
+ + + + +
+ + + + + + + + + +
+ +
+ +
+ +
diff --git a/app/templates/templates/region.tpl.php b/app/templates/templates/region.tpl.php new file mode 100644 index 0000000..fef8500 --- /dev/null +++ b/app/templates/templates/region.tpl.php @@ -0,0 +1,5 @@ + +
+ +
+ diff --git a/app/templates/templates/search-result.tpl.php b/app/templates/templates/search-result.tpl.php new file mode 100644 index 0000000..10d99a0 --- /dev/null +++ b/app/templates/templates/search-result.tpl.php @@ -0,0 +1,17 @@ +
  • > + + +

    >

    + + + +
    + +

    >

    + + + +

    + +
    +
  • diff --git a/app/templates/templates/search-results.tpl.php b/app/templates/templates/search-results.tpl.php new file mode 100644 index 0000000..d148fb0 --- /dev/null +++ b/app/templates/templates/search-results.tpl.php @@ -0,0 +1,10 @@ + +

    +
      + +
    + + +

    + + diff --git a/app/templates/templates/taxonomy-term.tpl.php b/app/templates/templates/taxonomy-term.tpl.php new file mode 100644 index 0000000..4515b79 --- /dev/null +++ b/app/templates/templates/taxonomy-term.tpl.php @@ -0,0 +1,11 @@ +
    + + +

    + + +
    + +
    + +
    diff --git a/app/templates/theme-settings.php b/app/templates/theme-settings.php new file mode 100644 index 0000000..007717f --- /dev/null +++ b/app/templates/theme-settings.php @@ -0,0 +1,25 @@ +_form_system_theme_settings_alter(&$form, &$form_state, $form_id = NULL) { + + + ////////////////////////////// + // Remove a bunch of useless theme settings + ////////////////////////////// + + unset($form['theme_settings']['toggle_favicon']); + ////////////////////////////// + // Logo and Favicon + ////////////////////////////// + + unset($form['logo']); + unset($form['favicon']); //These are defined in templates/html.tpl.php +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..fd5e5ab --- /dev/null +++ b/package.json @@ -0,0 +1,45 @@ +{ + "name": "generator-drupal-gulp", + "version": "0.0.0", + "description": "Drupal 7 Gulp Starter Theme for use as a starting template for building custom themes. Uses SCSS/SASS (with libsass compiler), HTML5 Boilerplate 5 with Modernizr and Normalize.css, and Gulp for all tasks.", + "license": "MIT", + "main": "app/index.js", + "repository": "lasseyls/generator-drupal-gulp", + "author": { + "name": "Lasse Moos", + "email": "lasse@yourlocalstudio.dk", + "url": "https://github.com/lasseyls" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "test": "mocha" + }, + "files": [ + "app" + ], + "keywords": [ + "yeoman-generator", + "Drupal", + "gulp", + "theme", + "frontend", + "boilerplate", + "h5bp", + 'libsass' + ], + "dependencies": { + "yeoman-generator": "^0.18.0", + "chalk": "^0.5.0", + "lodash": "~1.3.1", + "underscore.string": "~2.3.3", + "yosay": "^0.3.0" + }, + "devDependencies": { + "mocha": "*" + }, + "peerDependencies": { + "yo": ">=1.0.0" + } +} diff --git a/test/test-app.js b/test/test-app.js new file mode 100644 index 0000000..620df67 --- /dev/null +++ b/test/test-app.js @@ -0,0 +1,27 @@ +'use strict'; + +var path = require('path'); +var assert = require('yeoman-generator').assert; +var helpers = require('yeoman-generator').test; +var os = require('os'); + +describe('drupal-gulp:app', function () { + before(function (done) { + helpers.run(path.join(__dirname, '../app')) + .inDir(path.join(os.tmpdir(), './temp-test')) + .withOptions({ 'skip-install': true }) + .withPrompt({ + someOption: true + }) + .on('end', done); + }); + + it('creates files', function () { + assert.file([ + 'bower.json', + 'package.json', + '.editorconfig', + '.jshintrc' + ]); + }); +});