├── .babelignore ├── .babelrc ├── .editorconfig ├── .gitattributes ├── .gitignore ├── .jscsrc ├── .jshintignore ├── .jshintrc ├── .npmignore ├── .nvmrc ├── .travis.yml ├── CHANGELOG.MD ├── JSCS.intellij.formatter.xml ├── LICENSE.MD ├── README.md ├── app ├── index.es2015.js └── templates │ ├── applicationFiles │ └── app │ │ ├── README.md │ │ ├── browserconfig.xml │ │ ├── core │ │ ├── README.md │ │ ├── app.template.html │ │ ├── app.ts │ │ ├── boot.ts │ │ ├── commons │ │ │ └── README.md │ │ └── services │ │ │ ├── README.md │ │ │ └── services.ts │ │ ├── crossdomain.xml │ │ ├── favicon.ico │ │ ├── fonts │ │ └── README.md │ │ ├── images │ │ └── touch │ │ │ ├── LICENSE.md │ │ │ ├── README.md │ │ │ ├── apple-touch-icon.png │ │ │ ├── chrome-touch-icon-192x192.png │ │ │ ├── icon-128x128.png │ │ │ └── ms-touch-icon-144x144-precomposed.png │ │ ├── modules │ │ └── README.md │ │ ├── pages │ │ ├── README.md │ │ └── home │ │ │ ├── _home.scss │ │ │ ├── home.template.html │ │ │ └── home.ts │ │ ├── robots.txt │ │ ├── scripts │ │ └── README.md │ │ ├── service-worker.js │ │ ├── styles │ │ ├── README.md │ │ ├── base │ │ │ ├── _base.scss │ │ │ ├── _fonts.scss │ │ │ ├── _functions.scss │ │ │ ├── _mixins.scss │ │ │ ├── _reset.scss │ │ │ ├── _responsive.scss │ │ │ ├── _typography.scss │ │ │ ├── _utils.scss │ │ │ └── _variables.scss │ │ ├── layout │ │ │ ├── _layout.scss │ │ │ ├── _print.scss │ │ │ └── _theme.scss │ │ ├── main.scss │ │ ├── tests │ │ │ └── tests.scss │ │ └── vendor.scss │ │ ├── test │ │ └── sanity_test.spec.ts │ │ └── typings │ │ ├── README.md │ │ ├── custom.d.ts │ │ └── custom │ │ └── .gitkeep │ ├── applicationTemplates │ └── app │ │ ├── humans.txt │ │ ├── index.html │ │ ├── manifest.json │ │ └── manifest.webapp │ ├── projectFiles │ ├── .babelignore │ ├── .babelrc │ ├── .dockerignore │ ├── .editorconfig │ ├── .gitattributes │ ├── .jscsrc │ ├── .jshintignore │ ├── .jshintrc │ ├── .nvmrc │ ├── .travis.yml │ ├── JSCS.intellij.formatter.xml │ ├── gulpfile.babel.js │ ├── jspm.conf.js │ ├── karma.conf.js │ ├── tsconfig.json │ ├── tslint.json │ ├── typings.json │ └── typings │ │ └── README.md │ └── projectTemplates │ ├── README.md │ ├── _gitignore │ └── package.json ├── gulp ├── config.js ├── tasks │ ├── check-js-quality.js │ ├── check-js-style.js │ ├── clean.js │ ├── scripts-javascript-dist.js │ └── validate-package-json.js └── utils.js ├── gulpfile.babel.js ├── package.json └── test └── test-app.js /.babelignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/.babelignore -------------------------------------------------------------------------------- /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"], 3 | "plugins": ["transform-es2015-modules-commonjs"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs. 2 | # More information at http://editorconfig.org 3 | 4 | # top-most EditorConfig file 5 | root = true 6 | 7 | # Unix-style newlines with a newline ending every file. 8 | # Tab for indentation, whitespace trimming and UTF-8 encoding 9 | [*] 10 | end_of_line = lf 11 | insert_final_newline = true 12 | indent_style = tab 13 | trim_trailing_whitespace = false 14 | charset = utf-8 15 | 16 | [*.bat] 17 | end_of_line = crlf 18 | 19 | [{package.json,.travis.yml}] 20 | indent_style = space 21 | indent_size = 2 22 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Project specific 2 | *.log 3 | app/index.js 4 | 5 | # NPM 6 | node_modules/ 7 | npm-debug.log 8 | 9 | # Directory for instrumented libs generated by jscoverage/JSCover 10 | lib-cov 11 | 12 | # Coverage directory used by tools like istanbul 13 | coverage/ 14 | 15 | # Windows 16 | Desktop.ini 17 | 18 | # JetBrains IDEs 19 | *.iml 20 | .idea/ 21 | .webstorm/ 22 | 23 | # OSX 24 | .DS_Store 25 | .AppleDouble 26 | .LSOverride 27 | # Icon must end with two \r 28 | Icon 29 | 30 | # Sublime text 31 | .sublime-gulp.cache 32 | -------------------------------------------------------------------------------- /.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "validateAlignedFunctionParameters": { 4 | "lineBreakAfterOpeningBraces": false, 5 | "lineBreakBeforeClosingBraces": false 6 | }, 7 | "validateIndentation": 4, 8 | "validateNewlineAfterArrayElements": { 9 | "maximum": 2 10 | }, 11 | "validateParameterSeparator": ", ", 12 | "validateQuoteMarks": { 13 | "mark": "\"", 14 | "escape": true 15 | }, 16 | "excludeFiles": [ 17 | "node_modules/**", 18 | "jspm_packages/**" 19 | ], 20 | "fileExtensions": [ 21 | ".js" 22 | ], 23 | "requireSemicolons": true, 24 | "maximumLineLength": null, 25 | "disallowTrailingComma": true, 26 | "disallowTrailingWhitespace": "ignoreEmptyLines", 27 | "disallowDanglingUnderscores": { 28 | "allExcept": [ 29 | "_exception" 30 | ] 31 | }, 32 | "disallowEmptyBlocks": null, 33 | "disallowImplicitTypeConversion": null, 34 | "disallowKeywordsOnNewLine": [ 35 | "else" 36 | ], 37 | "disallowKeywords": [ 38 | "with" 39 | ], 40 | "disallowMixedSpacesAndTabs": true, 41 | "disallowMultipleLineBreaks": true, 42 | "disallowMultipleSpaces": null, 43 | "disallowNamedUnassignedFunctions": true, 44 | "disallowNewlineBeforeBlockStatements": true, 45 | "requirePaddingNewLinesAfterBlocks": { 46 | "allExcept": [ 47 | "inCallExpressions", 48 | "inArrayExpressions", 49 | "inProperties" 50 | ] 51 | }, 52 | "disallowPaddingNewlinesInBlocks": true, 53 | "requireSpaceAfterBinaryOperators": [ 54 | "=", 55 | ",", 56 | "+", 57 | "-", 58 | "/", 59 | "*", 60 | "==", 61 | "===", 62 | "!=", 63 | "!==" 64 | ], 65 | "requireSpaceBeforeBinaryOperators": [ 66 | "=", 67 | "+", 68 | "-", 69 | "/", 70 | "*", 71 | "==", 72 | "===", 73 | "!=", 74 | "!==" 75 | ], 76 | "disallowSpaceAfterKeywords": [ 77 | "if", 78 | "else", 79 | "for", 80 | "while", 81 | "do", 82 | "switch", 83 | "try", 84 | "catch", 85 | "function" 86 | ], 87 | "disallowSpaceAfterPrefixUnaryOperators": [ 88 | "++", 89 | "--", 90 | "+", 91 | "-", 92 | "~", 93 | "!" 94 | ], 95 | "disallowSpaceBeforeBlockStatements": true, 96 | "requireSpaceBeforeKeywords": [ 97 | "if", 98 | "else", 99 | "try", 100 | "catch" 101 | ], 102 | "disallowSpaceBeforePostfixUnaryOperators": [ 103 | "++", 104 | "--" 105 | ], 106 | "requireSpaceBetweenArguments": true, 107 | "disallowSpacesInAnonymousFunctionExpression": { 108 | "beforeOpeningRoundBrace": true, 109 | "beforeOpeningCurlyBrace": true 110 | }, 111 | "disallowSpacesInCallExpression": true, 112 | "disallowSpacesInFunctionDeclaration": { 113 | "beforeOpeningRoundBrace": true, 114 | "beforeOpeningCurlyBrace": true 115 | }, 116 | "disallowSpacesInFunctionExpression": { 117 | "beforeOpeningRoundBrace": true, 118 | "beforeOpeningCurlyBrace": true 119 | }, 120 | "disallowSpacesInsideParentheses": true, 121 | "disallowSpacesInFunction": { 122 | "beforeOpeningRoundBrace": true 123 | }, 124 | "disallowSpacesInNamedFunctionExpression": { 125 | "beforeOpeningRoundBrace": true, 126 | "beforeOpeningCurlyBrace": true 127 | }, 128 | "requireSpacesInsideArrayBrackets": "all", 129 | "requireSpacesInsideObjectBrackets": { 130 | "allExcept": [ 131 | "}", 132 | ")" 133 | ] 134 | }, 135 | "requireSpacesInsideParentheses": null, 136 | "requireYodaConditions": null, 137 | "requireAnonymousFunctions": true, 138 | "requireBlocksOnNewline": true, 139 | "requireCamelCaseOrUpperCaseIdentifiers": true, 140 | "requireCapitalizedConstructors": true, 141 | "requireCommaBeforeLineBreak": true, 142 | "requireCurlyBraces": true, 143 | "requireDotNotation": true, 144 | "requireFunctionDeclarations": null, 145 | "requireLineBreakAfterVariableAssignment": true, 146 | "requireLineFeedAtFileEnd": true, 147 | "disallowMultipleVarDecl": true, 148 | "requireOperatorBeforeLineBreak": [ 149 | "?", 150 | "=", 151 | "+", 152 | "-", 153 | "/", 154 | "*", 155 | "==", 156 | "===", 157 | "!=", 158 | "!==", 159 | ">", 160 | ">=", 161 | "<", 162 | "<=" 163 | ], 164 | "requirePaddingNewLineAfterVariableDeclaration": true, 165 | "requirePaddingNewLinesAfterUseStrict": true, 166 | "requirePaddingNewLinesBeforeExport": true, 167 | "requirePaddingNewlinesBeforeKeywords": [ 168 | "do", 169 | "for", 170 | "if", 171 | "switch", 172 | "case", 173 | "try", 174 | "void", 175 | "while", 176 | "with", 177 | "return", 178 | "typeof", 179 | "function" 180 | ], 181 | "requirePaddingNewLinesBeforeLineComments": null, 182 | "requireParenthesesAroundIIFE": null, 183 | "requireSpaceAfterLineComment": null, 184 | "requireSpacesInConditionalExpression": { 185 | "afterTest": true, 186 | "beforeConsequent": true, 187 | "afterConsequent": true, 188 | "beforeAlternate": true 189 | }, 190 | "requireSpacesInForStatement": true, 191 | "requirePaddingNewLinesInObjects": true, 192 | "disallowQuotedKeysInObjects": true, 193 | "requireAlignedObjectValues": null, 194 | "disallowSpaceAfterObjectKeys": true, 195 | "requireSpaceBeforeObjectValues": true, 196 | "disallowSpaceBeforeComma": true, 197 | "disallowSpaceBeforeSemicolon": true, 198 | "requireVarDeclFirst": null, 199 | "requireMatchingFunctionName": true, 200 | "requireObjectKeysOnNewLine": true, 201 | "disallowNodeTypes": [ 202 | "LabeledStatement" 203 | ], 204 | "requireArrowFunctions": true, 205 | "requireNumericLiterals": true, 206 | "requireTemplateStrings": null 207 | } 208 | -------------------------------------------------------------------------------- /.jshintignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | app/templates/**/* 3 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "strict": "global", 4 | "devel": true, 5 | "browser": true, 6 | "forin": true, 7 | "curly": true, 8 | "bitwise": true, 9 | "eqeqeq": true, 10 | "freeze": true, 11 | "futurehostile": true, 12 | "latedef": "nofunc", 13 | "maxdepth": 5, 14 | "maxparams": 10, 15 | "maxstatements": 100, 16 | "noarg": true, 17 | "nocomma": true, 18 | "nonbsp": true, 19 | "nonew": true, 20 | "singleGroups": true, 21 | "undef": true, 22 | "unused": true, 23 | "jquery": true, 24 | "mocha": true, 25 | "jasmine": true, 26 | "module": true, 27 | "varstmt": true, 28 | "eqnull": true, 29 | "globals": { 30 | "protractor": false, 31 | "module": false, 32 | "require": false, 33 | "process": false, 34 | "someWordYouShouldNotCheck": false 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | # Reference: https://docs.npmjs.com/misc/developers#keeping-files-out-of-your-package 2 | 3 | # Project specific 4 | test/ 5 | coverage/ 6 | .coveralls.yml 7 | app/**/*.es2015.js 8 | .editorconfig 9 | .jscsrc 10 | .jshintignore 11 | .jshintrc 12 | .travis.yml 13 | .nvmrc 14 | gulpfile.babel.js 15 | gulpfile.js 16 | 17 | # Misc 18 | *.log 19 | 20 | # NPM 21 | node_modules/ 22 | npm-debug.log 23 | ./.npmignore 24 | 25 | # Windows 26 | Desktop.ini 27 | 28 | # JetBrains IDEs 29 | *.iml 30 | .idea/ 31 | .webstorm/ 32 | 33 | # Git 34 | .git 35 | .gitattributes 36 | .gitignore 37 | .gitmodules 38 | 39 | # OSX 40 | .DS_Store 41 | .AppleDouble 42 | .LSOverride 43 | # Icon must end with two \r 44 | Icon 45 | 46 | # Sublime text 47 | .sublime-gulp.cache 48 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 4.3.0 -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | cache: 4 | directories: 5 | - node_modules 6 | - jspm_packages 7 | branches: 8 | only: 9 | - master 10 | notifications: 11 | email: true 12 | node_js: 13 | - '4.2' 14 | before_script: 15 | - npm prune 16 | before_install: 17 | - npm run setup 18 | -------------------------------------------------------------------------------- /CHANGELOG.MD: -------------------------------------------------------------------------------- 1 | * 0.5.5 2 | * fixed an issue with the build script (closes #114) 3 | * 0.5.4 4 | * now supports Angular 2 beta 13 5 | * fixed an issue with a dependency of babel (#97) 6 | * 0.5.3 7 | * now supports Angular 2 beta 9 8 | * 0.5.2 9 | * now supports Angular 2 beta 8 10 | * 0.5.1 11 | * fixed issue with the example unit test (wrong jasmine typings) (closed #88) 12 | * removed Makefile (not maintained) 13 | * switched to spaces (enough tabs already) 14 | * updated tslint rules 15 | * 0.5.0 16 | * now supports Angular 2 beta 7 17 | * now uses modernWebDevBuild 0.5.x 18 | * now uses TypeScript 1.8.x 19 | * 0.4.1 20 | * now supports Angular 2 beta 6 21 | * removed tsd dependency 22 | * 0.4.0 23 | * now uses modernWebDevBuild 0.4.x: https://github.com/dsebastien/modernWebDevBuild/releases/tag/0.4.0 24 | * upgraded the version of the typings dependency (closes #84) 25 | * 0.3.4 26 | * fixed a path issue in vendor.scss (fixes #82) 27 | * 0.3.3 28 | * fixed a problem with the jspm dependencies of generated projects (fixes #80) 29 | * 0.3.2 30 | * upgraded dependencies 31 | * updated .jshintrc 32 | * added tsd (needed for zone.js) see #74 33 | * 0.3.1 34 | * now supports Angular 2 beta 3 35 | * 0.3.0 36 | * cleaned boot.ts code regarding Angular 2's location strategies (cfr #62) 37 | * added a dependency on karma-jspm in the generated projects (previously part of the build) 38 | * added missing expect import in the tests (closes #68) 39 | * fixed the issue with .gitignore that was not copied (closes #64) 40 | * added missing es6-shim (closes #55) 41 | * 0.2.1 42 | * updated gitignore for typings 43 | * 0.2.0 44 | * now supports Angular 2 beta 1 45 | * now uses modernWebDevBuild 0.3.x: https://github.com/dsebastien/modernWebDevBuild/releases/tag/0.3.0 46 | * switched from tsd to typings for TypeScript typings management (new kid in town) 47 | * typings supports typings on DefinitelyTyped but has a lot more to offer 48 | * check out the following links 49 | * https://github.com/typings/typings 50 | * https://angularclass.com/the-state-of-typescript-packages/ 51 | * upgraded babel dependencies 52 | * added Jasmine imports in the provided unit tests 53 | * 0.1.4 54 | * added a update check: you will be notified whenever a new version of the generator is available 55 | * you can disable the update check by passing the following flag: `--no-update-notifier` 56 | * 0.1.3 57 | * now uses modernWebDevBuild 0.2.x 58 | * disabled HTML minification by default (not supported by Angular 2 anymore: https://github.com/dsebastien/modernWebDevBuild/issues/67) 59 | * fixed RxJS dependency in the JSPM configuration (fixes #46) 60 | * 0.1.2 61 | * now uses modernWebDevBuild 0.2.1 62 | * fixes an issue with the production build (see #44) 63 | * 0.1.1 64 | * now uses modernWebDevBuild 0.2.0 65 | * 0.1.0 66 | * supports Angular 2 beta 0 67 | * now uses modernWebDevBuild 0.1.1 68 | * added unit testing support (with Karma, Jasmine and JSPM/SystemJS) (closes #37) 69 | * fix for #33 avoid the need for installing dependencies globally 70 | * enabled noImplicitAny by default (closes #41) 71 | * added tsd back: necessary for custom typings & typings of libraries not yet specifying their typings through package.json 72 | * this _will_ be replaced by the typings library in a next release 73 | * added typings folder with split between custom and third party 74 | * added tsd related scripts in package.json 75 | * updated yeoman generator dependency (includes some bug fixes) 76 | * 0.0.8 77 | * now uses modernWebDevBuild 0.1.0 78 | * supports Babel 6 79 | * 0.0.7 80 | * updated for Angular 2 alpha 46 81 | * (internal) upgraded to Babel 6 82 | * 0.0.6 83 | * added missing zone.js import. Fixes #28 84 | * display the version number on execution 85 | * 0.0.5 86 | * updated for Angular 2 alpha 45 87 | * 0.0.4 88 | * added a missing dependency (#27) 89 | * 0.0.3 90 | * use the last modern-web-dev-build version 91 | * removed typings & tsd usage entirely 92 | * use relative paths for imports & templateUrl 93 | * 0.0.2 94 | * Updated for Angular 2 alpha 44 95 | * 0.0.1 96 | * Initial version 97 | -------------------------------------------------------------------------------- /JSCS.intellij.formatter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 28 | -------------------------------------------------------------------------------- /LICENSE.MD: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) dSebastien (https://www.dsebastien.net) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Modern Web Dev Generator 2 | 3 | [![NPM version](https://img.shields.io/npm/v/generator-modern-web-dev.svg)](https://www.npmjs.com/package/generator-modern-web-dev) 4 | [![Downloads](https://img.shields.io/npm/dm/generator-modern-web-dev.svg)](https://www.npmjs.com/package/generator-modern-web-dev) 5 | [![Build Status](https://secure.travis-ci.org/dsebastien/modernWebDevGenerator.png?branch=master)](https://travis-ci.org/dsebastien/modernWebDevGenerator) 6 | [![Coverage Status]( 7 | https://coveralls.io/repos/dsebastien/modernWebDevGenerator/badge.svg?branch=master&service=github 8 | )]( 9 | https://coveralls.io/github/dsebastien/modernWebDevGenerator?branch=master 10 | ) 11 | [![Dependency Status](https://david-dm.org/dsebastien/modernWebDevGenerator.svg?theme=shields.io&style=flat)](https://david-dm.org/dsebastien/modernWebDevGenerator) 12 | [![devDependency Status](https://david-dm.org/dsebastien/modernWebDevGenerator/dev-status.svg?theme=shields.io&style=flat)](https://david-dm.org/dsebastien/modernWebDevGenerator#info=devDependencies) 13 | [![Gitter](https://img.shields.io/badge/gitter-join%20chat-green.svg?style=flat)](https://gitter.im/dsebastien/modernWebDevGenerator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) 14 | [![License](https://img.shields.io/cocoapods/l/AFNetworking.svg)](LICENSE.MD) 15 | 16 | ## About 17 | ModernWebDevGenerator is a [Yeoman](http://yeoman.io/) generator that will help you quickly get up and running with [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild). 18 | 19 | Projects created with this Yeoman Generator will be able to directly leverage the awesome Gulp-based build provided by the [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild) project, which includes many tasks and features out of the box (e.g., transpilation of TypeScript/ES2015 to ES5, SASS transpilation to CSS, Minification, Bundling, Code quality & code style checks, Sourcemaps, support for unit testing, ...). 20 | 21 | This project comes with a fully working Angular 2 configuration. 22 | 23 | This generator includes all the folders & files listed by [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild) as mandatory as well as the recommended ones so as to promote good practices. README.md files are placed in multiple locations to describe what to put where, provide some guidance/design guidelines, ... 24 | 25 | The generated projects also include: 26 | * a working setup of Angular 2 (this might later move to a separate sub-generator) 27 | * a root component (app/core/boot.ts) 28 | * a home page (app/pages/home.ts) 29 | * a basic component router configuration 30 | * a good [HTML5 boilerplate](https://html5boilerplate.com/) 31 | * a good SASS & styling starting point 32 | * an embedded folder structure and design guidelines (componentization, separation of concerns, naming conventions, ...) 33 | * a set of TypeScript code style/quality rules (tshint.json) 34 | * a set of ES2015 compliant code style/quality rules (.jscsrc and .jshintrc) 35 | * ... 36 | 37 | The general idea is that you can remove anything you don't need assuming it's not in the list of mandatory folders/files of [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild) (otherwise you'll break the build ^^). 38 | 39 | Any feedback/contributions are welcome to improve the project so don't hesitate! 40 | 41 | This project is available as an NPM package; check out the usage instructions below. 42 | 43 | ## Demo 44 | Click on this link to see a demo of how to install & use this project and the modern web dev build: 45 | ModernWebDev Build and Generator Demo 48 | 49 | ## Background 50 | Please note that this project is heavily inspired from: 51 | * Google's [Web Starter Kit](https://github.com/google/web-starter-kit) 52 | * [HTML5 Boilerplate](https://html5boilerplate.com/) 53 | * Brad Frost's [Atomic Design](http://bradfrost.com/blog/post/atomic-web-design) 54 | * Nicolas Gallagher's [SUIT CSS](https://github.com/suitcss) 55 | * Countless blog articles 56 | * [Dan Walhin](https://twitter.com/DanWahlin)'s TypeScript posts & course) 57 | * [Introduction to TypeScript](https://www.edx.org/course/introduction-typescript-microsoft-dev201x-0) 58 | * A gazillion Gulp articles 59 | * Many others I'm forgetting :( 60 | 61 | ## Status & roadmap 62 | Check out the issues/labels & milestones to get an idea of what's next. 63 | For existing features, refer to the previous sections. 64 | 65 | Check out the [change log](CHANGELOG.MD) 66 | 67 | ## Usage 68 | In order to use this generator you first need to install Yeoman: 69 | 70 | ```bash 71 | npm install --global yo 72 | ``` 73 | 74 | Once Yeoman is installed, you can install this generator: 75 | 76 | ```bash 77 | npm install --global generator-modern-web-dev 78 | ``` 79 | 80 | You will also need to install gulp globally: 81 | ```bash 82 | npm install --global gulp 83 | ``` 84 | 85 | Create a new folder, go into it then invoke the generator by running the following command: 86 | ```bash 87 | yo modern-web-dev 88 | ``` 89 | 90 | Once you've answered all the questions, the generator will do its thing. 91 | Once done, you'll be able to run the development web server and start hacking away using: 92 | ```bash 93 | npm start 94 | ``` 95 | 96 | Enjoy! 97 | 98 | Note that the [ModernWebDevBuild](https://www.npmjs.com/package/modern-web-dev-build) project has other tricks in store for you; be sure to check out [the docs](https://www.npmjs.com/package/modern-web-dev-build). 99 | 100 | ## Options 101 | There are two main approaches to use this generator: 102 | * interactive mode: the generator asks you all the questions 103 | * batch mode: you provide the information directly to the generator 104 | 105 | In practice nothing prevents you from mixing both though :) 106 | If you pass a setting directly to the generator, it will not prompt you for that value. 107 | 108 | You can list all the options with a brief description using `yo modern-web-dev --help`. 109 | 110 | By default, the generator will install all project dependencies (not the global requirements listed in the 'Usage' section!). You can skip the installation of the project dependencies by passing the `--skip-install` option. 111 | 112 | The generator will check for updates once in a while but you can disable the update check by passing the following flag: `--no-update-notifier`. 113 | 114 | ## Generated projects dev dependencies 115 | * [gulp](http://gulpjs.com/): JavaScript task runner 116 | * [babel](https://babeljs.io/): ES2015 to ES5 transpiler. Needed so that the Gulp configuration file can be written using ES2015 (gulpfile.babel.js) 117 | * [nodemon](https://www.npmjs.com/package/nodemon): monitoring of certain files (used by npm scripts defined in package.json): https://www.npmjs.com/package/nodemon 118 | 119 | ## Generated projects runtime dependencies 120 | The following dependencies are managed by JSPM (in the JSPM section of the package.json file): 121 | * [Angular 2](https://angular.io/) 122 | * [RxJS](https://github.com/Reactive-Extensions/RxJS): Reactive Extensions. Forget about Promises and use Observable, the future of async in JavaScript! 123 | * normalize.css: Nicolas Gallagher's Normalize CSS (alternative to CSS resets): https://www.npmjs.com/package/normalize.css 124 | 125 | ## Generated projects configuration files 126 | The project includes multiple configuration files. 127 | 128 | For more details about the configuration files, check out the [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild)'s documentation. 129 | 130 | Here's some high level information about these: 131 | * .babelrc: Babel configuration file 132 | * gulpfile.babel.js: gulp's configuration file. This is where the Modern Web Dev Build tasks are loaded 133 | * package.json: NPM's configuration file. This is where all dependencies are defined: project ones under 'jspm' and build-related ones under 'devDependencies' (more information: https://docs.npmjs.com/files/package.json) 134 | * .dockerignore: files that are ignored by Docker when creating images 135 | * .editorconfig: helps configure code style for various text editors (more information here: http://editorconfig.org) 136 | * .gitattributes: allows to define git attributes per path (more information here: http://git-scm.com/docs/gitattributes) 137 | * .gitignore: configures files/folders that are ignored by git 138 | * .jscsrc: configuration file for JSCS. It defines the JS code style (more information: http://jscs.info/overview.html#options) 139 | * note that it is configured to use ES Next (ES2015+) 140 | * rules reference: http://jscs.info/rules.html 141 | * news: https://github.com/jscs-dev/node-jscs/blob/master/CHANGELOG.md 142 | * .jshintrc: JSHint configuration 143 | * rules reference: http://jshint.com/docs/options 144 | * more information: http://jshint.com/docs/) 145 | * .jshintignore: stuff that JSHint should ignore 146 | * .travis.yml: Travis CI configuration files (more information: http://docs.travis-ci.com/user/build-configuration/) 147 | * Dockerfile and DockerfileDev: Docker configuration files used to describe how Docker images should be created for this project (more information: https://www.docker.com/ and http://docs.docker.com/reference/builder/) 148 | * jspm.conf.js: JSPM/SystemJS configuration file 149 | * karma.conf.js: Karma test runner configuration file 150 | * runOnDocker.sh and runDevOnDocker.sh: build scripts that create/run Docker images 151 | * tsconfig.json: TypeScript compiler configuration. Contains all compiler options, code style rules and file selection/exclusion rules (bypassed by the gulp-typescript plugin!) 152 | * http://json.schemastore.org/tsconfig 153 | * https://github.com/Microsoft/TypeScript/wiki/tsconfig.json 154 | * typings.json: typings configuration file: list of TypeScript type definitions files to retrieve 155 | * tslint.json: TypeScript code style configuration (more information: https://www.npmjs.com/package/tslint) 156 | * Makefile: for \*NIX afficionados 157 | 158 | ## Adding project dependencies 159 | As you go along, you'll surely need to add new dependencies for your application. If the dependency you want to add is required at runtime, then you should use JSPM to add it. 160 | Installing a dependency with JSPM is as simple as `jspm install x`. For more information about JSPM, check out the official site: http://jspm.io/ 161 | 162 | ## Contributing 163 | Take a look at the project's open [issues](https://github.com/dsebastien/modernWebDevGenerator/issues) and [milestones](https://github.com/dsebastien/modernWebDevGenerator/milestones). 164 | 165 | If you know what to do then: 166 | * Fork the project 167 | * Create a feature branch in your fork 168 | * Rebase if needed to keep the project history clean 169 | * Commit your changes & push to GitHub 170 | * Try and flood me with pull requests :) 171 | 172 | ## Building from source 173 | If you want to build from source, you need to: 174 | * install NodeJS (4.2+) and npm (3+) 175 | * clone this git repository 176 | * install gulp: `npm install --global gulp` 177 | * run `npm run setup` 178 | * start hacking :) 179 | 180 | ## Releasing a version 181 | * commit all changes to include in the release 182 | * edit the version in package.json 183 | * respect semver 184 | * update CHANGELOG.MD 185 | * commit 186 | * git tag 187 | * git push --tags 188 | * draft the release on GitHub (add description, etc) 189 | * npm publish 190 | 191 | ## Authors 192 | ### Sebastien Dubois 193 | * [@Blog](https://www.dsebastien.net) 194 | * [@Twitter](https://twitter.com/dSebastien) 195 | * [@GitHub](https://github.com/dSebastien) 196 | 197 | ## License 198 | This project and all associated source code is licensed under the terms of the [MIT License](https://en.wikipedia.org/wiki/MIT_License). 199 | -------------------------------------------------------------------------------- /app/index.es2015.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const packageJSON = require("../package.json"); 4 | 5 | import yeoman from "yeoman-generator"; 6 | import yosay from "yosay"; 7 | import chalk from "chalk"; 8 | import updateNotifier from "update-notifier"; 9 | import stringLength from "string-length"; 10 | 11 | const descriptors = { 12 | projectName: { 13 | name: "projectName", 14 | argName: "project-name", 15 | description: "Name of the project", 16 | prompt: "What is the project name?" 17 | }, 18 | projectShortName: { 19 | name: "projectShortName", 20 | argName: "project-short-name", 21 | description: "Shortname of the project", 22 | prompt: "What is the project name shortname?" 23 | }, 24 | projectDescription: { 25 | name: "projectDescription", 26 | argName: "project-description", 27 | description: "Description of the project", 28 | prompt: "What is the project description?" 29 | }, 30 | projectOwner: { 31 | name: "projectOwner", 32 | argName: "project-owner", 33 | description: "Owner of the project", 34 | prompt: "What is your name?" 35 | }, 36 | projectOwnerRole: { 37 | name: "projectOwnerRole", 38 | argName: "project-owner-role", 39 | description: "Role of the project owner", 40 | prompt: "What is your role?" 41 | }, 42 | projectOwnerMail: { 43 | name: "projectOwnerMail", 44 | argName: "project-owner-mail", 45 | description: "Mail of the project owner", 46 | prompt: "What is your e-mail address?" 47 | }, 48 | projectOwnerURL: { 49 | name: "projectOwnerURL", 50 | argName: "project-owner-url", 51 | description: "URL of the project owner", 52 | prompt: "What is the address of your website?" 53 | }, 54 | projectURL: { 55 | name: "projectURL", 56 | argName: "project-url", 57 | description: "URL of the project", 58 | prompt: "What is the address of the project?" 59 | } 60 | }; 61 | 62 | const checkForUpdates = () =>{ 63 | const notifier = updateNotifier({ 64 | pkg: packageJSON 65 | //,updateCheckInterval: 1 // useful for debugging 66 | }); 67 | 68 | let message = []; 69 | 70 | let retVal; 71 | 72 | if(notifier.update){ 73 | message.push("Update available: " + chalk.green.bold(notifier.update.latest) + chalk.gray(" (current: " + notifier.update.current + ")")); 74 | message.push("Run " + chalk.magenta("npm install -g " + packageJSON.name) + " to update."); 75 | retVal = yosay(message.join(" "), {maxLength: stringLength(message[ 0 ])}); 76 | } 77 | return retVal; 78 | }; 79 | 80 | let modernWebDevGenerator = yeoman.Base.extend({ 81 | 82 | constructor: function(){ 83 | // Setup the base generator 84 | yeoman.Base.apply(this, arguments); 85 | 86 | // all options can be passed directly 87 | this.argument(descriptors.projectName.argName, { 88 | desc: descriptors.projectName.description, 89 | type: String, 90 | required: false 91 | }); 92 | this.argument(descriptors.projectShortName.argName, { 93 | desc: descriptors.projectShortName.description, 94 | type: String, 95 | required: false 96 | }); 97 | this.argument(descriptors.projectDescription.argName, { 98 | desc: descriptors.projectDescription.description, 99 | type: String, 100 | required: false 101 | }); 102 | this.argument(descriptors.projectOwner.argName, { 103 | desc: descriptors.projectOwner.description, 104 | type: String, 105 | required: false 106 | }); 107 | this.argument(descriptors.projectOwnerRole.argName, { 108 | desc: descriptors.projectOwnerRole.description, 109 | type: String, 110 | required: false 111 | }); 112 | this.argument(descriptors.projectOwnerMail.argName, { 113 | desc: descriptors.projectOwnerMail.description, 114 | type: String, 115 | required: false 116 | }); 117 | this.argument(descriptors.projectOwnerURL.argName, { 118 | desc: descriptors.projectOwnerURL.description, 119 | type: String, 120 | required: false 121 | }); 122 | this.argument(descriptors.projectURL.argName, { 123 | desc: descriptors.projectURL.description, 124 | type: String, 125 | required: false 126 | }); 127 | }, 128 | 129 | // contexts list: http://yeoman.io/authoring/running-context.html 130 | prompting: function(){ 131 | let done = this.async(); 132 | 133 | const welcomeMessage = yosay("Welcome to the " + chalk.green("ModernWebDev") + " Yeoman Generator (v" + packageJSON.version + ")"); 134 | const updateMessage = checkForUpdates(); 135 | 136 | // Have Yeoman greet the user 137 | if(updateMessage){ 138 | this.log(updateMessage); 139 | } else{ 140 | this.log(welcomeMessage); 141 | } 142 | 143 | const prompts = [ 144 | { 145 | type: "input", 146 | name: descriptors.projectName.name, 147 | message: descriptors.projectName.prompt, 148 | default: this.appname // default: current folder name 149 | }, 150 | { 151 | type: "input", 152 | name: descriptors.projectShortName.name, 153 | message: descriptors.projectShortName.prompt, 154 | default: this.appname // default: current folder name 155 | }, 156 | { 157 | type: "input", 158 | name: descriptors.projectDescription.name, 159 | message: descriptors.projectDescription.prompt, 160 | default: "Created by the ModernWebDev Yeoman Generator" 161 | }, 162 | { 163 | type: "input", 164 | name: descriptors.projectOwner.name, 165 | message: descriptors.projectOwner.prompt, 166 | default: "nobody" 167 | }, 168 | { 169 | type: "input", 170 | name: descriptors.projectOwnerRole.name, 171 | message: descriptors.projectOwnerRole.prompt, 172 | default: "Project Lead" 173 | }, 174 | { 175 | type: "input", 176 | name: descriptors.projectOwnerMail.name, 177 | message: descriptors.projectOwnerMail.prompt, 178 | default: "foo@bar.com" 179 | }, 180 | { 181 | type: "input", 182 | name: descriptors.projectOwnerURL.name, 183 | message: descriptors.projectOwnerURL.prompt, 184 | default: "https://twitter.com/dsebastien" 185 | }, 186 | { 187 | type: "input", 188 | name: descriptors.projectURL.name, 189 | message: descriptors.projectURL.prompt, 190 | default: "https://www.dsebastien.net" 191 | } 192 | ]; 193 | 194 | this.prompt(prompts, answers =>{ 195 | this.props = answers; // to access props later use this.props.someOption; 196 | 197 | done(); 198 | }); 199 | }, 200 | 201 | configuring: { 202 | projectFiles: function(){ 203 | // copy files that do not need pre-processing 204 | this.directory("./projectFiles/", "."); 205 | }, 206 | 207 | projectTemplates: function(){ 208 | const projectTemplatesFolder = "./projectTemplates/"; 209 | 210 | // copy all files that need specific processing 211 | this.fs.copyTpl( 212 | this.templatePath(projectTemplatesFolder + "package.json"), 213 | this.destinationPath("package.json"), this.props 214 | ); 215 | this.fs.copyTpl( 216 | this.templatePath(projectTemplatesFolder + "README.md"), 217 | this.destinationPath("README.md"), this.props 218 | ); 219 | this.fs.copyTpl( 220 | this.templatePath(projectTemplatesFolder + "_gitignore"), 221 | this.destinationPath(".gitignore"), this.props 222 | ); 223 | } 224 | }, 225 | 226 | writing: { 227 | applicationFiles: function(){ 228 | // copy files that do not need pre-processing 229 | this.directory("./applicationFiles/", "."); 230 | }, 231 | 232 | applicationTemplates: function(){ 233 | const applicationTemplatesFolders = "./applicationTemplates/"; 234 | 235 | // copy all files that need specific processing 236 | this.fs.copyTpl( 237 | this.templatePath(applicationTemplatesFolders + "app/index.html"), 238 | this.destinationPath("app/index.html"), this.props 239 | ); 240 | this.fs.copyTpl( 241 | this.templatePath(applicationTemplatesFolders + "app/humans.txt"), 242 | this.destinationPath("app/humans.txt"), this.props 243 | ); 244 | this.fs.copyTpl( 245 | this.templatePath(applicationTemplatesFolders + "app/manifest.json"), 246 | this.destinationPath("app/manifest.json"), this.props 247 | ); 248 | this.fs.copyTpl( 249 | this.templatePath(applicationTemplatesFolders + "app/manifest.webapp"), 250 | this.destinationPath("app/manifest.webapp"), this.props 251 | ); 252 | } 253 | }, 254 | 255 | install: function(){ 256 | const skipInstall = this.options[ "skip-install" ]; 257 | 258 | this.log("Project created successfully. Enjoy!"); 259 | 260 | if(skipInstall){ 261 | this.log("Run 'npm run setup' to install all required dependencies. Check out the README file instructions"); 262 | } else{ 263 | this.log("Go grab a coffee, I'll start installing the dependencies... (which may take a while)"); 264 | this.spawnCommand("npm", [ "run", "setup" ]); 265 | } 266 | } 267 | 268 | // contexts: initializing, prompting, configuring, default, writing, conflicts, install, end 269 | }); 270 | 271 | module.exports = modernWebDevGenerator; 272 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder is where ALL the code of your application should be located. 3 | This is the main folder that the build system will care about. 4 | 5 | # index.html 6 | The index.html file is where the fun begins. Take a look at it to get an idea of how the application is bootstrapped. 7 | 8 | The next piece of the puzzle is the core/boot.ts file which is the application entrypoint. 9 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/browserconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | Should contain all main pieces of your application. 3 | First and foremost, the *boot.ts* file, which is the entrypoint of your application. 4 | 5 | This folder can also be used to store: 6 | * common code: utilities and the like 7 | * generic code (i.e., component agnostic): controllers/services/directives, ... 8 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/app.template.html: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/app.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // import Angular 2 4 | import {Component} from "@angular/core"; 5 | 6 | // import Angular 2 Component Router 7 | import { RouteConfig, ROUTER_DIRECTIVES, ROUTER_PROVIDERS } from '@angular/router-deprecated'; 8 | 9 | // app components 10 | import {Home} from "../pages/home/home"; 11 | 12 | // app services 13 | //import {appServicesInjectables} from "core/services/services"; 14 | 15 | @Component({ 16 | selector: "app", 17 | templateUrl: "core/app.template.html", //template: "", 18 | directives: [ROUTER_DIRECTIVES] 19 | }) 20 | @RouteConfig([ 21 | { path: "/", component: Home, name: "Home", data: undefined } // the as serves as alias for links, etc 22 | ]) 23 | export class App { 24 | constructor() { 25 | console.log("Application bootstrapped!"); 26 | } 27 | } 28 | 29 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/boot.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import "reflect-metadata"; 4 | // import the application 5 | import {App} from "./app"; 6 | 7 | // import Angular 2 8 | import {bootstrap} from "@angular/platform-browser-dynamic"; 9 | import {provide, enableProdMode} from "@angular/core"; 10 | import {HTTP_PROVIDERS} from "@angular/http"; 11 | import {ELEMENT_PROBE_PROVIDERS} from "@angular/platform-browser"; 12 | 13 | // import Angular 2 Component Router 14 | import {ROUTER_PROVIDERS} from "@angular/router-deprecated"; 15 | 16 | // enable production mode of Angular 17 | // enableProdMode(); // enable for production (also uncomment the import above!) 18 | 19 | // bootstrap our app 20 | console.log("Bootstrapping the App"); 21 | 22 | // in [] is the list of injector bindings. Those bindings are used when an injector is created. Passing these here make the bindings available application-wide 23 | bootstrap(App, [ 24 | //appServicesInjectables, // alternative way of filling the injector with all the classes we want to be able to inject 25 | ROUTER_PROVIDERS, 26 | HTTP_PROVIDERS, 27 | ELEMENT_PROBE_PROVIDERS // remove in production 28 | ]).then( 29 | (success:any) => console.log("Bootstrap successful"), 30 | (error:any) => console.error(error) 31 | ); 32 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/commons/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder is intended to store common code (e.g., project-specific utilities). 3 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/services/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder is intended to contain all general services of your application. 3 | One example could be a service responsible for managing translations. 4 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/core/services/services.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | // way to create a list all injectable classes 3 | /* 4 | import {BlahService} from 'components/posts/posts.service'; 5 | 6 | export let appServicesInjectables : Array = [ 7 | PostsService 8 | ]; 9 | */ 10 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/crossdomain.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 15 | 16 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/favicon.ico -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/fonts/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder should contain all Web fonts of your application (if any). 3 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/LICENSE.md: -------------------------------------------------------------------------------- 1 | 2 | Apache License 3 | Version 2.0, January 2004 4 | httpwww.apache.orglicenses 5 | 6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 7 | 8 | 1. Definitions. 9 | 10 | License shall mean the terms and conditions for use, reproduction, 11 | and distribution as defined by Sections 1 through 9 of this document. 12 | 13 | Licensor shall mean the copyright owner or entity authorized by 14 | the copyright owner that is granting the License. 15 | 16 | Legal Entity shall mean the union of the acting entity and all 17 | other entities that control, are controlled by, or are under common 18 | control with that entity. For the purposes of this definition, 19 | control means (i) the power, direct or indirect, to cause the 20 | direction or management of such entity, whether by contract or 21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 22 | outstanding shares, or (iii) beneficial ownership of such entity. 23 | 24 | You (or Your) shall mean an individual or Legal Entity 25 | exercising permissions granted by this License. 26 | 27 | Source form shall mean the preferred form for making modifications, 28 | including but not limited to software source code, documentation 29 | source, and configuration files. 30 | 31 | Object form shall mean any form resulting from mechanical 32 | transformation or translation of a Source form, including but 33 | not limited to compiled object code, generated documentation, 34 | and conversions to other media types. 35 | 36 | Work shall mean the work of authorship, whether in Source or 37 | Object form, made available under the License, as indicated by a 38 | copyright notice that is included in or attached to the work 39 | (an example is provided in the Appendix below). 40 | 41 | Derivative Works shall mean any work, whether in Source or Object 42 | form, that is based on (or derived from) the Work and for which the 43 | editorial revisions, annotations, elaborations, or other modifications 44 | represent, as a whole, an original work of authorship. For the purposes 45 | of this License, Derivative Works shall not include works that remain 46 | separable from, or merely link (or bind by name) to the interfaces of, 47 | the Work and Derivative Works thereof. 48 | 49 | Contribution shall mean any work of authorship, including 50 | the original version of the Work and any modifications or additions 51 | to that Work or Derivative Works thereof, that is intentionally 52 | submitted to Licensor for inclusion in the Work by the copyright owner 53 | or by an individual or Legal Entity authorized to submit on behalf of 54 | the copyright owner. For the purposes of this definition, submitted 55 | means any form of electronic, verbal, or written communication sent 56 | to the Licensor or its representatives, including but not limited to 57 | communication on electronic mailing lists, source code control systems, 58 | and issue tracking systems that are managed by, or on behalf of, the 59 | Licensor for the purpose of discussing and improving the Work, but 60 | excluding communication that is conspicuously marked or otherwise 61 | designated in writing by the copyright owner as Not a Contribution. 62 | 63 | Contributor shall mean Licensor and any individual or Legal Entity 64 | on behalf of whom a Contribution has been received by Licensor and 65 | subsequently incorporated within the Work. 66 | 67 | 2. Grant of Copyright License. Subject to the terms and conditions of 68 | this License, each Contributor hereby grants to You a perpetual, 69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 70 | copyright license to reproduce, prepare Derivative Works of, 71 | publicly display, publicly perform, sublicense, and distribute the 72 | Work and such Derivative Works in Source or Object form. 73 | 74 | 3. Grant of Patent License. Subject to the terms and conditions of 75 | this License, each Contributor hereby grants to You a perpetual, 76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 77 | (except as stated in this section) patent license to make, have made, 78 | use, offer to sell, sell, import, and otherwise transfer the Work, 79 | where such license applies only to those patent claims licensable 80 | by such Contributor that are necessarily infringed by their 81 | Contribution(s) alone or by combination of their Contribution(s) 82 | with the Work to which such Contribution(s) was submitted. If You 83 | institute patent litigation against any entity (including a 84 | cross-claim or counterclaim in a lawsuit) alleging that the Work 85 | or a Contribution incorporated within the Work constitutes direct 86 | or contributory patent infringement, then any patent licenses 87 | granted to You under this License for that Work shall terminate 88 | as of the date such litigation is filed. 89 | 90 | 4. Redistribution. You may reproduce and distribute copies of the 91 | Work or Derivative Works thereof in any medium, with or without 92 | modifications, and in Source or Object form, provided that You 93 | meet the following conditions 94 | 95 | (a) You must give any other recipients of the Work or 96 | Derivative Works a copy of this License; and 97 | 98 | (b) You must cause any modified files to carry prominent notices 99 | stating that You changed the files; and 100 | 101 | (c) You must retain, in the Source form of any Derivative Works 102 | that You distribute, all copyright, patent, trademark, and 103 | attribution notices from the Source form of the Work, 104 | excluding those notices that do not pertain to any part of 105 | the Derivative Works; and 106 | 107 | (d) If the Work includes a NOTICE text file as part of its 108 | distribution, then any Derivative Works that You distribute must 109 | include a readable copy of the attribution notices contained 110 | within such NOTICE file, excluding those notices that do not 111 | pertain to any part of the Derivative Works, in at least one 112 | of the following places within a NOTICE text file distributed 113 | as part of the Derivative Works; within the Source form or 114 | documentation, if provided along with the Derivative Works; or, 115 | within a display generated by the Derivative Works, if and 116 | wherever such third-party notices normally appear. The contents 117 | of the NOTICE file are for informational purposes only and 118 | do not modify the License. You may add Your own attribution 119 | notices within Derivative Works that You distribute, alongside 120 | or as an addendum to the NOTICE text from the Work, provided 121 | that such additional attribution notices cannot be construed 122 | as modifying the License. 123 | 124 | You may add Your own copyright statement to Your modifications and 125 | may provide additional or different license terms and conditions 126 | for use, reproduction, or distribution of Your modifications, or 127 | for any such Derivative Works as a whole, provided Your use, 128 | reproduction, and distribution of the Work otherwise complies with 129 | the conditions stated in this License. 130 | 131 | 5. Submission of Contributions. Unless You explicitly state otherwise, 132 | any Contribution intentionally submitted for inclusion in the Work 133 | by You to the Licensor shall be under the terms and conditions of 134 | this License, without any additional terms or conditions. 135 | Notwithstanding the above, nothing herein shall supersede or modify 136 | the terms of any separate license agreement you may have executed 137 | with Licensor regarding such Contributions. 138 | 139 | 6. Trademarks. This License does not grant permission to use the trade 140 | names, trademarks, service marks, or product names of the Licensor, 141 | except as required for reasonable and customary use in describing the 142 | origin of the Work and reproducing the content of the NOTICE file. 143 | 144 | 7. Disclaimer of Warranty. Unless required by applicable law or 145 | agreed to in writing, Licensor provides the Work (and each 146 | Contributor provides its Contributions) on an AS IS BASIS, 147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 148 | implied, including, without limitation, any warranties or conditions 149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 150 | PARTICULAR PURPOSE. You are solely responsible for determining the 151 | appropriateness of using or redistributing the Work and assume any 152 | risks associated with Your exercise of permissions under this License. 153 | 154 | 8. Limitation of Liability. In no event and under no legal theory, 155 | whether in tort (including negligence), contract, or otherwise, 156 | unless required by applicable law (such as deliberate and grossly 157 | negligent acts) or agreed to in writing, shall any Contributor be 158 | liable to You for damages, including any direct, indirect, special, 159 | incidental, or consequential damages of any character arising as a 160 | result of this License or out of the use or inability to use the 161 | Work (including but not limited to damages for loss of goodwill, 162 | work stoppage, computer failure or malfunction, or any and all 163 | other commercial damages or losses), even if such Contributor 164 | has been advised of the possibility of such damages. 165 | 166 | 9. Accepting Warranty or Additional Liability. While redistributing 167 | the Work or Derivative Works thereof, You may choose to offer, 168 | and charge a fee for, acceptance of support, warranty, indemnity, 169 | or other liability obligations andor rights consistent with this 170 | License. However, in accepting such obligations, You may act only 171 | on Your own behalf and on Your sole responsibility, not on behalf 172 | of any other Contributor, and only if You agree to indemnify, 173 | defend, and hold each Contributor harmless for any liability 174 | incurred by, or claims asserted against, such Contributor by reason 175 | of your accepting any such warranty or additional liability. 176 | 177 | END OF TERMS AND CONDITIONS 178 | 179 | APPENDIX How to apply the Apache License to your work. 180 | 181 | To apply the Apache License to your work, attach the following 182 | boilerplate notice, with the fields enclosed by brackets [] 183 | replaced with your own identifying information. (Don't include 184 | the brackets!) The text should be enclosed in the appropriate 185 | comment syntax for the file format. We also recommend that a 186 | file or class name and description of purpose be included on the 187 | same printed page as the copyright notice for easier 188 | identification within third-party archives. 189 | 190 | Copyright 2014 Google Inc 191 | 192 | Licensed under the Apache License, Version 2.0 (the License); 193 | you may not use this file except in compliance with the License. 194 | You may obtain a copy of the License at 195 | 196 | httpwww.apache.orglicensesLICENSE-2.0 197 | 198 | Unless required by applicable law or agreed to in writing, software 199 | distributed under the License is distributed on an AS IS BASIS, 200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 201 | See the License for the specific language governing permissions and 202 | limitations under the License. 203 | 204 | All code in any directories or sub-directories that end with .html or 205 | .css is licensed under the Creative Commons Attribution International 206 | 4.0 License, which full text can be found here 207 | httpscreativecommons.orglicensesby4.0legalcode. 208 | 209 | As an exception to this license, all html or css that is generated by 210 | the software at the direction of the user is copyright the user. The 211 | user has full ownership and control over such content, including 212 | whether and how they wish to license it. 213 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | These are the touch icons used on devices to help make the Web application look native. 3 | 4 | The default images are taken from Google's [Web Starter Kit](https://github.com/h5bp/html5-boilerplate); cfr LICENSE.md file in this folder. 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/images/touch/apple-touch-icon.png -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/chrome-touch-icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/images/touch/chrome-touch-icon-192x192.png -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/icon-128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/images/touch/icon-128x128.png -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/images/touch/ms-touch-icon-144x144-precomposed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/images/touch/ms-touch-icon-144x144-precomposed.png -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/modules/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder should contain components including everything they're made of; for example: 3 | * controller 4 | * service 5 | * model 6 | * template 7 | * directive 8 | * filter 9 | * stylesheet 10 | * tests 11 | * ... 12 | 13 | # Design approach 14 | The idea being to isolate components as much as possible so that removing one can be done in a clean manner without worrying (too much) about side-effects. 15 | Think of components as custom elements that enclose specific semantics, styling, and behaviour. 16 | 17 | A component should solve one problem and solve it well. 18 | 19 | # Naming convention 20 | Note that each component that includes TypeScript code MUST respect the following naming convention (not all files are required): 21 | * : folder for the component (mandatory) 22 | * _.scss: styles for the component (optional) 23 | * .model.ts: model of the component (optional) 24 | * .controller.ts: controller of the component (mandatory) 25 | * .controller_test.ts: tests for the controller of the component (recommended) 26 | * .template.html: template/partial view of the component (mandatory) 27 | * .service.ts: service for the component (optional) 28 | * .service_test.ts: tests for the service of the component (optional) 29 | * .directive.ts: directive of the component (optional) 30 | * .directive_test.ts: tests for the directive of the component (optional) 31 | * .filter.ts (optional) 32 | 33 | Example: 34 | ``` 35 | components\ 36 | login\ 37 | login.scss 38 | login.model.ts 39 | login.controller.ts 40 | login.template.html 41 | ... 42 | ``` 43 | 44 | If the component name is composed (which you should avoid if possible), then separate the parts with hyphens (-). 45 | 46 | # Additional guidelines 47 | * each component MUST be placed in its own directory 48 | respect the namespace rule above to correctly isolate/encapsulate the component 49 | * components CANNOT be nested (i.e., use a flat structure) 50 | 51 | # CSS components 52 | * all selectors in a component MUST start with the component name in order to create an isolated namespace for each component 53 | * follow the design approach and naming convention described [here](../styles/README.md) 54 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/pages/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder should contain all the *pages* of the application. 3 | 4 | Pages can also be considered as *components* but they are *aggregations* of other components as well as specific HTML/CSS/JS. 5 | 6 | The naming conventions are the same as for components with the following exceptions: 7 | - the Angular component selector for a page should start with 'page-' to make the component 'type' apparent 8 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/pages/home/_home.scss: -------------------------------------------------------------------------------- 1 | /// 2 | /// All styles for the Home page 3 | /// 4 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/pages/home/home.template.html: -------------------------------------------------------------------------------- 1 | Welcome home! 2 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/pages/home/home.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // import Angular 2 4 | import {Component} from "@angular/core"; 5 | 6 | @Component({ 7 | selector: "page-home", 8 | templateUrl: "pages/home/home.template.html", 9 | directives: [] 10 | }) 11 | export class Home { 12 | 13 | constructor() { 14 | console.log("Home component loaded"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/robots.txt: -------------------------------------------------------------------------------- 1 | # www.robotstxt.org/ 2 | 3 | # Allow crawling of all content 4 | User-agent: * 5 | Disallow: 6 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/scripts/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | This folder can be used to put generic/utility code (prefer core if possible -- 'scripts' feels legacy :p). 3 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/service-worker.js: -------------------------------------------------------------------------------- 1 | // This file is intentionally without code 2 | // 3 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/README.md: -------------------------------------------------------------------------------- 1 | # About 2 | All SASS partials (files beginning with a _) should be placed in a sub-directory (for clarity) and should be imported by one of the SASS files in this folder 3 | 4 | The main.scss and vendor.scss files allow to cleanly separate what belongs to the application and what comes from third parties. The production build will process those files separately and all the files imported in those will be inlined/bundled. 5 | 6 | # Styles design approach 7 | Goal: follow a _component_ design approach such as: 8 | * _Atomic Design_: [http://bradfrost.com/blog/post/atomic-web-design] 9 | * _SUIT CSS_: [http://suitcss.github.io/] 10 | * _BEM_: [https://css-tricks.com/bem-101/] 11 | * _SMACSS_: [https://smacss.com/] 12 | 13 | ... or rather a mix thereof :) 14 | 15 | # General guidelines 16 | * separate structure from chrome (visuals) 17 | * (re)use variables whenever possible 18 | * try to provide flexibility: define what you don't know, particularly width & height 19 | * let content control the height 20 | * let grids control the width 21 | * aim for low specificity: make all rules the same strength (makes combining components easier) 22 | * minimize the depth of rules 23 | * minimize the dependency on the HTML structure (related to the above) 24 | * predictability: ensure that the components work consistently 25 | 26 | # Style types 27 | 28 | ## About 29 | Here we describe a way to categorize the different types of styles that can be defined. In the next section, the naming convention is provided and explained. 30 | 31 | ## Base 32 | Base styles are style rules which are almost exclusively single element selectors but can include attribute selectors, pseudo-class selectors, child selectors or sibling selectors. 33 | 34 | Examples: 35 | * generic styles, css resets, default link styles, default font styles, body backgrounds, ... 36 | * `a { ... }, a:hover{ ... }` 37 | 38 | ## Utility 39 | Utility styles are low-level styles with a very narrow scope. Utilities should modify a single trait (a small collection of similar styles). 40 | 41 | Utilities can use `!important` to ensure that their styles always apply. 42 | 43 | Examples: 44 | 45 | ``` 46 | .u-floatLeft { 47 | float: left !important; 48 | } 49 | 50 | .u-posAbsolute { 51 | position: absolute !important; 52 | } 53 | 54 | .u-block { 55 | display: block !important; 56 | } 57 | 58 | ``` 59 | 60 | ## Component 61 | ### About 62 | We are entering in the era of components. Soon(et or later), [Web Components](http://webcomponents.org/) will become the norm so we need to get prepared any way we can. 63 | 64 | Web components will make it possible to fully encapsulate styles belonging to a specific element and thus make specificity issues a thing of the past. 65 | 66 | We can emulate the properties of encapsulated styles today by applying a naming convention and respecting some design guidelines. 67 | 68 | Examples of components: 69 | * login form 70 | * search box 71 | * carousel 72 | * social links 73 | * ... 74 | 75 | ### Guidelines for components 76 | * components should be identified (modularity) 77 | * components should do one thing and do it well 78 | * a component should implement a single part of the UI 79 | * the functionality and presentation defined by a component must be semantically related (cohesion) 80 | * components should be standalone, portable and reusable (composability/configurability) 81 | * it should be possible to assemble components in various combinations 82 | * components should not be coupled/entangled even if that requires you to violate the DRY principle. Component reusability is more important than DRY (loose coupling) 83 | * components should not expose their implementation to other components (encapsulation) 84 | * components should not rely on IDs or element selectors 85 | * most components should NOT set their own width, margin, and positioning. By authoring a component to be full-width or inline, it can better adapt to the dimensions of an ancestral context 86 | * components should NOT know about the implementation of their dependencies 87 | * the appareance of dependencies must be configured using the interface they provide 88 | * controlling dimensions, margins, position and inheritable styles of a component can be done _indirectly_ by adding a class to its root element or wrapping it in another element [reference](https://github.com/suitcss/suit/blob/master/doc/components.md) 89 | * each component should have a dedicated CSS/SASS file 90 | * each component should include CSS documentation answering the following questions 91 | * what is the intended presentation? 92 | * what are the modifiers and states? 93 | * what are the reasons for specific, opaque property values? 94 | * what are the known limitations? 95 | * do not assume that CSS is self-documenting 96 | 97 | ## Module 98 | A module is a larger part of the UI which can be composed of components, basic elements and/or of other modules. 99 | 100 | Examples of modules: 101 | * product grid 102 | * sidebar section 103 | * ... 104 | 105 | Guidelines for modules: 106 | * modules should be standalone, portable and reusable 107 | * modules should be moveable to different parts of the layout without breaking 108 | * modules should not rely on IDs or element selectors 109 | * modules should avoid specificity battles 110 | * modules can be nested in one another 111 | 112 | ## Layout 113 | Layout styles dictate how the page is divided into sections. Layouts hold one or more modules together. 114 | 115 | Layouts can be split in two parts: 116 | * major: used only once in any given page 117 | * minor: might be used multiple times on a single page 118 | 119 | Examples of layout elements: 120 | * header 121 | * fooder 122 | * sidebar 123 | 124 | Guidelines for layout styles: 125 | * layouts should only care about positioning and placement 126 | * major layout elements can have an ID and be styled using ID selectors 127 | 128 | ## Theme 129 | Theme styles describe alternative looks for layouts/modules/... 130 | Theme styles can affect any of the other namespaces. 131 | Only use these if you want/need to get fancy 132 | 133 | Example of theme styles: 134 | * override a base style to modify the look and feel of an element 135 | * modify some element of a component 136 | * define a different color scheme 137 | * ... 138 | 139 | 140 | # Naming convention 141 | 142 | ## Global 143 | `---- { ... }` 144 | 145 | The convention relies on structured class names and meaningfull hyphens (i.e., not using hyphens merely to separate words). This helps work around the current limits of applying CSS to the DOM (i.e., the lack of style encapsulation), and to better communicate the relationships between classes. 146 | 147 | ## Mind the case 148 | * namespace: lowercase 149 | * ComponentName: PascalCase (i.e., CamelCase with first character in uppercase) 150 | * elementName: CamelCase with first character in lowercase 151 | * modifierName: idem 152 | 153 | ## namespace (mandatory except for components) 154 | The goal of the namespace is to isolate the different "groups" or "types" of styles (i.e., categories) and directly making the type and intent clear. 155 | 156 | Possible values: 157 | * b: base 158 | * u: utility 159 | * m: module 160 | * l: layout 161 | * t: theme 162 | * ?: custom 163 | 164 | If necessary, components can be prefixed with a namespace in order to avoid the potential for collisions between libraries and your custom components 165 | 166 | Èxample: 167 | ``` 168 | .myapp-Button { ... } 169 | ``` 170 | 171 | ## ComponentName (required only for components) 172 | Check out the section about components above. 173 | 174 | Components are the only elements to use Pascal Case.). 175 | 176 | ## elementName (mandatory except for components) 177 | If a style class is NOT defined for a component, then an element name is mandatory. 178 | 179 | An element name can also be specified for a component; in that case it is considered as a descendant name. 180 | 181 | A descendant component style class is a class that is attached to a particular descendant node of a component. It is responsible for applying presentation directly to the descendant on behalf of a particular component. 182 | 183 | Example of a basic element name: 184 | ``` 185 | .u-floatLeft { ... } 186 | .b-fontSize--normal { ... } 187 | .b-fontSize--large { ... } 188 | ``` 189 | 190 | Example of a descendant component style class: 191 | ``` 192 | .Post-header { ... } 193 | ``` 194 | 195 | ## modifierName (optional) 196 | A modifier style class modifies the presentation of the base style class/component in some form (e.g., for a certain configuration or variant). 197 | 198 | Note that modifiers are separated from the rest of the name by two hyphens. 199 | 200 | Modifier classes should be included in the HTML _in addition_ to the base component class. 201 | 202 | Example: 203 | ``` 204 | .Button { ... } 205 | .Button--default { ... } 206 | .Button--disabled { ... } 207 | ... 208 | 209 | ... 210 | 211 | ``` 212 | 213 | ## Examples 214 | 215 | ``` 216 | .u-floatLeft { ... } 217 | .Post-title { ... } 218 | .Post-author { ... } 219 | .Post-a { ... } 220 | .Post-comments--closed { ... } 221 | .Post-comments--opened { ... } 222 | ``` 223 | 224 | ## Variables 225 | If a component contains variables, then they MUST also be scoped to their component by including the component name in the variable name. 226 | 227 | Example (SASS): 228 | ``` 229 | $PostsBorderWidth: 1px; 230 | ... 231 | .Post { 232 | border-width: $PostsBorderWidth; 233 | } 234 | ``` 235 | 236 | This makes it easier for themes to override a component's look & feel. 237 | Moreover, it also makes clear that the variable is part of that component. 238 | 239 | ## Atomic design approach relation 240 | * HTML tags + base styles = atoms 241 | * elementName = atoms 242 | * components = molecules 243 | * modules = organisms 244 | 245 | The Atomic design templates/pages are embodied by the template files/partial views for components and/or the examples in the CSS documentation. 246 | 247 | # Sass guidelines 248 | * use nested styles using @include (e.g., [https://github.com/sathify/CCSS/tree/master/styles/scss]) 249 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_base.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Base stylesheet. 3 | // Should define common styles used throughout the application. 4 | // Should be defined from specific to generic 5 | // 6 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_fonts.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Font styles. 3 | // 4 | // 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_functions.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Functions. 3 | // 4 | // 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_mixins.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Mixins 3 | // 4 | // 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_reset.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Reset stylesheet. 3 | // Bits and pieces taken from various sources (e.g., HTML5boilerplate, Web Starter Kit, SUITCSS, ...) 4 | // The base styling approach is to use Nicolas Gallagher's Normalize.css (http://necolas.github.io/normalize.css/) and only reset relevant elements. 5 | // This is why some styles below are taken from Eric Meyer's CSS reset v2 (http://meyerweb.com/eric/tools/css/reset/) rather than applying it in its entirety 6 | // 7 | 8 | // reset common elements 9 | // add/remove elements based on what's used in the project 10 | // http://meyerweb.com/eric/tools/css/reset/ 11 | /* 12 | html, body, div, span, object, iframe, 13 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 14 | a, abbr, acronym, address, big, cite, code, 15 | del, dfn, em, img, ins, kbd, q, s, samp, 16 | small, strike, strong, sub, sup, tt, var, 17 | b, u, i, center, 18 | dl, dt, dd, ol, ul, li, 19 | fieldset, form, label, legend, 20 | table, caption, tbody, tfoot, thead, tr, th, td, 21 | article, aside, canvas, details, embed, 22 | figure, figcaption, footer, header, hgroup, 23 | menu, nav, output, ruby, section, summary, 24 | time, mark, audio, video { 25 | */ 26 | html, body, div, span, object, 27 | h1, h2, h3, h4, h5, h6, p, blockquote, pre, 28 | a, abbr, acronym, address, big, cite, code, 29 | del, dfn, em, img, ins, kbd, q, s, samp, 30 | small, strike, strong, sub, sup, tt, var, 31 | b, u, i, center, 32 | dl, dt, dd, ol, ul, li, 33 | fieldset, form, label, legend, 34 | table, caption, tbody, tfoot, thead, tr, th, td, 35 | article, aside, canvas, details, embed, 36 | figure, figcaption, footer, header, hgroup, 37 | menu, nav, output, section, summary, 38 | time, mark, audio, video { 39 | margin: 0; 40 | padding: 0; 41 | border: 0; 42 | vertical-align: baseline; 43 | } 44 | 45 | // ensure that the body uses (at least the full browser height) 46 | // http://stackoverflow.com/questions/6654958/make-body-have-100-of-the-browser-height 47 | html { 48 | height: 100%; 49 | } 50 | 51 | body { 52 | min-height: 100%; 53 | } 54 | 55 | // ensure we have a common line-height set as baseline 56 | body { 57 | line-height: 1.4; // unit-less: https://css-tricks.com/almanac/properties/l/line-height/ 58 | } 59 | 60 | // reset HTML5 display-role for older browsers 61 | article, aside, details, figcaption, figure, 62 | footer, header, hgroup, menu, nav, section, main, li { 63 | display: block; 64 | } 65 | 66 | // use a more logical box model 67 | // https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/ 68 | // http://www.paulirish.com/2012/box-sizing-border-box-ftw/ 69 | html { 70 | box-sizing: border-box; 71 | } 72 | 73 | *, *:before, *:after { 74 | box-sizing: inherit; 75 | } 76 | 77 | // make sure that headings inherit the same size as the surrounding text by default 78 | // rather than having an arbitrary larger size. There'll be less to override that way 79 | // http://jaydenseric.com/blog/forget-normalize-or-resets-lay-your-own-css-foundation 80 | h1, h2, h3, h4, h5, h6 { 81 | font-size: inherit; 82 | } 83 | 84 | // less surprises when linking to things 85 | // links are styled many different ways on the same page (e.g., menus, sidebars, footers, buttons and within text). 86 | // some parts of the text is light-on-dark, some is dark-on-light 87 | // the browser default blue or any other color would be illegible 88 | // simplifies styles by making the links inherit the color intended for the region they're in 89 | a, 90 | button { 91 | color: inherit; 92 | transition: .3s; 93 | } 94 | 95 | a { 96 | text-decoration: none; 97 | } 98 | 99 | // make buttons consistent for starters 100 | // http://jaydenseric.com/blog/forget-normalize-or-resets-lay-your-own-css-foundation 101 | button { 102 | overflow: visible; // for IE 103 | border: 0; // reset 104 | font: inherit; // reset 105 | -webkit-font-smoothing: inherit; // fix buggy inheritance 106 | letter-spacing: inherit; // reset 107 | background: none; // reset 108 | cursor: pointer; // pointers FTW 109 | } 110 | 111 | // fix a known bug in FF that causes buttons to display larger than expected: https://bugzilla.mozilla.org/show_bug.cgi?id=140562 112 | ::-moz-focus-inner { 113 | padding: 0; 114 | border: 0; 115 | } 116 | 117 | // prevent any object from being highlighted upon touch event on Webkit 118 | // alternative: be lazy and apply it on all elements 119 | // reference: https://css-tricks.com/snippets/css/remove-gray-highlight-when-tapping-links-in-mobile-safari/ 120 | input, 121 | textarea, 122 | button, 123 | select, 124 | a { 125 | -webkit-tap-highlight-color: rgba(0, 0, 0, 0); 126 | -webkit-tap-highlight-color: transparent; 127 | } 128 | 129 | // Remove text-shadow in selection highlight: https://twitter.com/miketaylr/status/12228805301 130 | // These selection rule sets have to be separate. 131 | ::-moz-selection { 132 | background: $textSelectionColor; 133 | text-shadow: none; 134 | } 135 | 136 | ::selection { 137 | background: $textSelectionColor; 138 | text-shadow: none; 139 | } 140 | 141 | // remove the gap between audio, canvas, iframes, 142 | // images, videos and the bottom of their containers 143 | audio, 144 | canvas, 145 | iframe, 146 | img, 147 | svg, 148 | video { 149 | vertical-align: middle; 150 | } 151 | 152 | // allow only vertical resizing of textareas. 153 | textarea { 154 | resize: vertical; 155 | } 156 | 157 | // we're going to change these anyway 158 | ol, 159 | ul { 160 | list-style: none; 161 | } 162 | 163 | // suppress the focus outline on links that cannot be accessed via keyboard. 164 | // This prevents an unwanted focus outline from appearing around elements that 165 | // might still respond to pointer events. 166 | [tabindex="-1"]:focus { 167 | outline: none !important; 168 | } 169 | 170 | // work around a Firefox/IE bug where the transparent `button` background 171 | // results in a loss of the default `button` focus styles. 172 | button:focus { 173 | outline: 1px dotted; 174 | outline: 5px auto -webkit-focus-ring-color; 175 | } 176 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_responsive.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Responsive web design (RWD) related styles. 3 | // 4 | // 5 | 6 | // responsive images FTW 7 | // ensure that images can't exceed the width of their containers 8 | // http://jaydenseric.com/blog/forget-normalize-or-resets-lay-your-own-css-foundation 9 | img { 10 | max-width: 100%; 11 | height: auto; 12 | } 13 | 14 | // prevent these from overflowing their containers 15 | img, embed, object, video { 16 | max-width: 100%; 17 | } 18 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_typography.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Typography related styles. 3 | // Taken from various sources (e.g., HTML5boilerplate, Web Starter Kit, SUITCSS, ...) 4 | // 5 | 6 | html { 7 | // define the root em value 8 | // rem units specified for fonts will refer to this root em value 9 | // http://stackoverflow.com/questions/6905834/should-i-set-the-default-font-size-on-the-body-or-html-element 10 | // https://developer.mozilla.org/en-US/docs/Web/CSS/font-size 11 | font-size: 62.5%; 12 | } 13 | 14 | body { 15 | // optimize fonts rendering for legibility rather than speed 16 | // https://css-tricks.com/almanac/properties/t/text-rendering/ 17 | // http://aestheticallyloyal.com/public/optimize-legibility/ 18 | // non-standard and buggy in older Android browser versions 19 | text-rendering: optimizeLegibility; 20 | 21 | // ensure that kerning is enabled in most browsers (addition to the above) 22 | font-feature-settings: "kern" 1; // Chrome (not Windows), Firefox, IE 10+ 23 | font-kerning: normal; // Safari 7 and future browsers 24 | 25 | // make'em look nice 26 | // fonts on OSX will look more consistent with other systems that do not render text using sub-pixel anti-aliasing 27 | // although grayscale is inferior to sub-pixel anti-aliasing, most fonts were designed for the 'thinner' anti-aliasing and look better that way 28 | // setting the smoothing beforehand prevents an ugly flickering of font 'thickness' when animations start and stop 29 | // http://davidwalsh.name/font-smoothing 30 | -webkit-font-smoothing: antialiased; 31 | -moz-osx-font-smoothing: grayscale; 32 | 33 | font-family: 'Roboto-Regular', monospace, sans-serif; 34 | font-size: 14px; // necessary for older browsers 35 | font-size: 1.4rem; // text's default font size (14px) 36 | font-style: normal; 37 | font-weight: normal; // 400: http://www.w3schools.com/cssref/pr_font_weight.asp 38 | letter-spacing: -0.02em; 39 | color: $fontColorDefault; 40 | } 41 | 42 | .container > header > h1 { 43 | font-family: monospace, sans-serif; 44 | font-size: 40px; 45 | font-size: 4.0rem; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_utils.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Utility styles 3 | // Taken in large part from SUITCSS utils (Nicolas Gallagher): https://github.com/suitcss/utils 4 | // Why copy these here instead of adding a dependency and an import in vendor.scss? 5 | // 1) Mainly because having all the utilities being part of the project can be useful in many situations whereas looking at n places to find what I need can be a pain 6 | // and I risk just reinventing the wheel 7 | // 2) A secondary reason is that I want to freely be able to delete any of these if/when I consider that I don't need it 8 | // 9 | // WARNING: utilities should not be edited while in use, unless it is to fix a bug. Modifications to utilities cascade throughout the application and should be made with extreme care. 10 | // 11 | 12 | // Display-type utilities 13 | // reference: https://github.com/suitcss/utils-display 14 | // ========================================================================================== 15 | .u-block { 16 | display: block !important; 17 | } 18 | 19 | .u-hidden { 20 | display: none !important; 21 | } 22 | 23 | // completely remove from the flow but leave available to screen readers. 24 | .u-hiddenVisually { 25 | position: absolute !important; 26 | overflow: hidden !important; 27 | width: 1px !important; 28 | height: 1px !important; 29 | padding: 0 !important; 30 | border: 0 !important; 31 | clip: rect(1px, 1px, 1px, 1px) !important; 32 | } 33 | 34 | .u-inline { 35 | display: inline !important; 36 | } 37 | 38 | // 1. Fix for Firefox bug: an image styled `max-width:100%` within an 39 | // inline-block will display at its default size, and not limit its width to 40 | // 100% of an ancestral container. 41 | .u-inlineBlock { 42 | display: inline-block !important; 43 | max-width: 100%; /* 1 */ 44 | } 45 | 46 | .u-table { 47 | display: table !important; 48 | } 49 | 50 | .u-tableCell { 51 | display: table-cell !important; 52 | } 53 | 54 | .u-tableRow { 55 | display: table-row !important; 56 | } 57 | 58 | // Vertical alignment utilities 59 | // Depends on an appropriate `display` value. 60 | // reference: https://github.com/suitcss/utils-align 61 | // ========================================================================================== 62 | .u-alignBaseline { 63 | vertical-align: baseline !important; 64 | } 65 | 66 | .u-alignBottom { 67 | vertical-align: bottom !important; 68 | } 69 | 70 | .u-alignMiddle { 71 | vertical-align: middle !important; 72 | } 73 | 74 | .u-alignTop { 75 | vertical-align: top !important; 76 | } 77 | 78 | /// Layout utilities 79 | // reference: https://github.com/suitcss/utils-layout 80 | // ========================================================================================== 81 | /** 82 | * Contain floats 83 | * 84 | * Make an element expand to contain floated children. 85 | * Uses pseudo-elements (micro clearfix). 86 | * 87 | * 1. The space content is one way to avoid an Opera bug when the 88 | * `contenteditable` attribute is included anywhere else in the document. 89 | * Otherwise it causes space to appear at the top and bottom of the 90 | * element. 91 | * 2. The use of `table` rather than `block` is only necessary if using 92 | * `:before` to contain the top-margins of child elements. 93 | */ 94 | .u-cf:before, 95 | .u-cf:after { 96 | content: " "; /* 1 */ 97 | display: table; /* 2 */ 98 | } 99 | 100 | .u-cf:after { 101 | clear: both; 102 | } 103 | 104 | /** 105 | * New block formatting context 106 | * 107 | * This affords some useful properties to the element. It won't wrap under 108 | * floats. Will also contain any floated children. 109 | * N.B. This will clip overflow. Use the alternative method below if this is 110 | * problematic. 111 | */ 112 | .u-nbfc { 113 | overflow: hidden !important; 114 | } 115 | 116 | /** 117 | * New block formatting context (alternative) 118 | * 119 | * Alternative method when overflow must not be clipped. 120 | * 121 | * 1. Create a new block formatting context (NBFC). 122 | * 2. Avoid shrink-wrap behaviour of table-cell. 123 | * 124 | * N.B. This breaks down in some browsers when elements within this element 125 | * exceed its width. 126 | */ 127 | .u-nbfcAlt { 128 | display: table-cell !important; /* 1 */ 129 | width: 10000px !important; /* 2 */ 130 | } 131 | 132 | // floats 133 | .u-floatLeft { 134 | float: left !important; 135 | } 136 | 137 | .u-floatRight { 138 | float: right !important; 139 | } 140 | 141 | // Links 142 | // reference: https://github.com/suitcss/utils-link 143 | // ========================================================================================== 144 | 145 | /** 146 | * Clean link 147 | * 148 | * A link without any text-decoration at all. 149 | */ 150 | .u-linkClean, 151 | .u-linkClean:hover, 152 | .u-linkClean:focus, 153 | .u-linkClean:active { 154 | text-decoration: none !important; 155 | } 156 | 157 | /** 158 | * Link complex 159 | * 160 | * A common pattern is to have a link with several pieces of text and/or an 161 | * icon, where only one piece of text should display the underline when the 162 | * link is the subject of user interaction. 163 | * 164 | * Example HTML: 165 | * 166 | * 167 | * Link complex 168 | * target 169 | * 170 | */ 171 | .u-linkComplex, 172 | .u-linkComplex:hover, 173 | .u-linkComplex:focus, 174 | .u-linkComplex:active { 175 | text-decoration: none !important; 176 | } 177 | 178 | .u-linkComplex:hover .u-linkComplexTarget, 179 | .u-linkComplex:focus .u-linkComplexTarget, 180 | .u-linkComplex:active .u-linkComplexTarget { 181 | text-decoration: underline !important; 182 | } 183 | 184 | /** 185 | * Block-level link 186 | * 187 | * Combination of traits commonly used in vertical navigation lists. 188 | */ 189 | .u-linkBlock, 190 | .u-linkBlock:hover, 191 | .u-linkBlock:focus, 192 | .u-linkBlock:active { 193 | display: block !important; 194 | text-decoration: none !important; 195 | } 196 | 197 | // Position 198 | // reference: https://github.com/suitcss/utils-position 199 | // ========================================================================================== 200 | .u-posAbsolute { 201 | position: absolute !important; 202 | } 203 | 204 | /** 205 | * Pins to all corners by default. But when a width and/or height are 206 | * provided, the element will be centered in its nearest relatively-positioned 207 | * ancestor. 208 | */ 209 | .u-posAbsoluteCenter { 210 | bottom: 0 !important; 211 | left: 0 !important; 212 | margin: auto !important; 213 | position: absolute !important; 214 | right: 0 !important; 215 | top: 0 !important; 216 | } 217 | 218 | /** 219 | * 1. Make sure fixed elements are promoted into a new layer, for performance 220 | * reasons. 221 | */ 222 | 223 | .u-posFixed { 224 | position: fixed !important; 225 | backface-visibility: hidden; /* 1 */ 226 | } 227 | 228 | .u-posRelative { 229 | position: relative !important; 230 | } 231 | 232 | .u-posStatic { 233 | position: static !important; 234 | } 235 | 236 | // Text 237 | // reference: https://github.com/suitcss/utils-text 238 | // ========================================================================================== 239 | 240 | /** 241 | * Word breaking 242 | * 243 | * Break strings when their length exceeds the width of their container. 244 | */ 245 | .u-textBreak { 246 | word-wrap: break-word !important; 247 | } 248 | 249 | /** 250 | * Horizontal text alignment 251 | */ 252 | .u-textCenter { 253 | text-align: center !important; 254 | } 255 | 256 | .u-textLeft { 257 | text-align: left !important; 258 | } 259 | 260 | .u-textRight { 261 | text-align: right !important; 262 | } 263 | 264 | /** 265 | * Inherit the ancestor's text color. 266 | */ 267 | .u-textInheritColor { 268 | color: inherit !important; 269 | } 270 | 271 | /** 272 | * Enables font kerning in all browsers. 273 | * http://blog.typekit.com/2014/02/05/kerning-on-the-web/ 274 | * 275 | * 1. Chrome (not Windows), Firefox, Safari 6+, iOS, Android 276 | * 2. Chrome (not Windows), Firefox, IE 10+ 277 | * 3. Safari 7 and future browsers 278 | */ 279 | .u-textKern { 280 | text-rendering: optimizeLegibility; /* 1 */ 281 | font-feature-settings: "kern" 1; /* 2 */ 282 | font-kerning: normal; /* 3 */ 283 | } 284 | 285 | /** 286 | * Prevent whitespace wrapping 287 | */ 288 | .u-textNoWrap { 289 | white-space: nowrap !important; 290 | } 291 | 292 | /** 293 | * Text truncation 294 | * 295 | * Prevent text from wrapping onto multiple lines, and truncate with an 296 | * ellipsis. 297 | * 298 | * 1. Ensure that the node has a maximum width after which truncation can 299 | * occur. 300 | * 2. Fix for IE 8/9 if `word-wrap: break-word` is in effect on ancestor 301 | * nodes. 302 | */ 303 | .u-textTruncate { 304 | max-width: 100%; /* 1 */ 305 | overflow: hidden !important; 306 | text-overflow: ellipsis !important; 307 | white-space: nowrap !important; 308 | word-wrap: normal !important; /* 2 */ 309 | } 310 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/base/_variables.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Variables 3 | // 4 | // 5 | 6 | // colors 7 | $black: #000; 8 | $gray: #C0C0C0; 9 | $fontColorDefault: rgba(0, 0, 0, 0.8); 10 | $textSelectionColor: $gray; 11 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/layout/_layout.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Layout 3 | // 4 | // 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/layout/_print.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Print 3 | // 4 | // 5 | 6 | @media print { 7 | 8 | } 9 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/layout/_theme.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Theme 3 | // 4 | // 5 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/main.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Main stylesheet. 3 | // Should import all the other stylesheets 4 | // 5 | // Variables, functions, mixins and utils 6 | @import "base/_variables"; 7 | @import "base/_functions"; 8 | @import "base/_mixins"; 9 | @import "base/_utils"; 10 | // Base/generic style rules 11 | @import "base/_reset"; 12 | @import "base/_responsive"; 13 | @import "base/_fonts"; 14 | @import "base/_typography"; 15 | @import "base/_base"; 16 | // Layout 17 | @import "layout/_layout"; 18 | @import "layout/_theme"; 19 | @import "layout/_print"; 20 | // Components 21 | // Pages 22 | @import "../pages/home/_home"; 23 | // Tests 24 | @import "tests/tests"; 25 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/tests/tests.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Tests stylesheet. 3 | // Have your fun around here 4 | // -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/styles/vendor.scss: -------------------------------------------------------------------------------- 1 | // 2 | // Includes/imports all third-party stylesheets used throughout the application. 3 | // Should be loaded before the application stylesheets 4 | // 5 | // Nicolas Gallagher's Normalize.css 6 | @import '../../jspm_packages/github/necolas/normalize.css@3.0.3/normalize.css'; // the path refers to the file at BUILD time 7 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/test/sanity_test.spec.ts: -------------------------------------------------------------------------------- 1 | 2 | describe("sanity checks", () => { 3 | it("should be able to test", () => { 4 | expect(true).toBe(true); 5 | }); 6 | 7 | xit("should skip this", () => { 8 | expect(4).toEqual(40); 9 | }); 10 | }); 11 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/typings/README.md: -------------------------------------------------------------------------------- 1 | This folder should only contain custom TypeScript type definitions (.d.ts) files. 2 | 3 | Only place your own type definitions here or ones that you must temporarily copy/modify. 4 | Unless you have no choice, you should install type definitions using `typings install ... --save`. 5 | 6 | If you install typings using the command above: 7 | * typings.json will be updated 8 | * the typings will be downloaded in the root typings folder (i.e., not this one) 9 | * references to these typings files will be added to both `main.d.ts` and `browser.d.ts` in the root typings folder 10 | 11 | All type definition files in this folder will automatically be picked up by the TypeScript compiler. 12 | 13 | For more details about the typings CLI, check out the official docs: https://github.com/typings/typings 14 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/typings/custom.d.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * Custom Type Definitions 3 | * When including 3rd party modules you also need to include the type definition for the module 4 | * if they don't provide one within the module. You can try to install it with typings 5 | 6 | typings install node --save 7 | 8 | * If you can't find the type definition in the registry we can make an ambient definition in 9 | * this file for now. For example 10 | 11 | declare module "my-module" { 12 | export function doesSomething(value: string): string; 13 | } 14 | 15 | * 16 | * If you're prototying and you will fix the types later you can also declare it as type any 17 | * 18 | 19 | declare var assert: any; 20 | 21 | * 22 | * If you're importing a module that uses Node.js modules which are CommonJS you need to import as 23 | * 24 | 25 | import * as _ from 'lodash' 26 | 27 | * You can include your type definitions in this file until you create one for the typings registry 28 | * see https://github.com/typings/registry 29 | * 30 | */ 31 | -------------------------------------------------------------------------------- /app/templates/applicationFiles/app/typings/custom/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/applicationFiles/app/typings/custom/.gitkeep -------------------------------------------------------------------------------- /app/templates/applicationTemplates/app/humans.txt: -------------------------------------------------------------------------------- 1 | # humanstxt.org/ 2 | # The humans responsible & technology colophon 3 | 4 | # TEAM 5 | 6 | <%= projectOwner %> -- <%= projectOwnerRole %> -- <%= projectOwnerURL %> 7 | 8 | # THANKS 9 | 10 | Thanks for all the fish 11 | 12 | # TECHNOLOGY COLOPHON 13 | 14 | HTML5, CSS3 15 | Angular 2 16 | TypeScript 17 | ES2015 18 | JSPM 19 | SystemJS 20 | NodeJS 21 | NPM 22 | Gulp 23 | -------------------------------------------------------------------------------- /app/templates/applicationTemplates/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | <%= projectName %> 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | Loading ... 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /app/templates/applicationTemplates/app/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= projectName %>", 3 | "short_name": "<%= projectShortName %>", 4 | "icons": [{ 5 | "src": "images/touch/icon-128x128.png", 6 | "sizes": "128x128", 7 | "type": "image/png" 8 | }, { 9 | "src": "images/touch/apple-touch-icon.png", 10 | "sizes": "152x152", 11 | "type": "image/png" 12 | }, { 13 | "src": "images/touch/ms-touch-icon-144x144-precomposed.png", 14 | "sizes": "144x144", 15 | "type": "image/png" 16 | }, { 17 | "src": "images/touch/chrome-touch-icon-192x192.png", 18 | "sizes": "192x192", 19 | "type": "image/png" 20 | }], 21 | "start_url": "/index.html", 22 | "display": "standalone", 23 | "background_color": "#3E4EB8", 24 | "theme_color": "#656970" 25 | } 26 | -------------------------------------------------------------------------------- /app/templates/applicationTemplates/app/manifest.webapp: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.0.1", 3 | "name": "<%= projectName %>", 4 | "launch_path": "/index.html", 5 | "description": "<%= projectDescription %>", 6 | "icons": { 7 | "128": "/images/touch/icon-128x128.png" 8 | }, 9 | "developer": { 10 | "name": "<%= projectOwner %>", 11 | "url": "<%= projectOwnerURL %>" 12 | }, 13 | "installs_allowed_from": [ 14 | "*" 15 | ], 16 | "default_locale": "en", 17 | "permissions": { 18 | }, 19 | "locales": { 20 | "en": { 21 | "name": "<%= projectName %>", 22 | "description": "<%= projectDescription %>" 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /app/templates/projectFiles/.babelignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dsebastien/modernWebDevGenerator/c59b7697294b99390df36466ddbb08c7491648b6/app/templates/projectFiles/.babelignore -------------------------------------------------------------------------------- /app/templates/projectFiles/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["es2015"], 3 | "plugins": ["transform-es2015-modules-commonjs"], 4 | "comments": false 5 | } 6 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.dockerignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | jspm_packages 3 | .git 4 | .gitattributes 5 | .gitignore 6 | .idea 7 | .sublime-gulp.cache 8 | .tmp 9 | dist 10 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs. 2 | # More information at http://editorconfig.org 3 | 4 | # top-most EditorConfig file 5 | root = true 6 | 7 | # Unix-style newlines with a newline ending every file. 8 | # Tab for indentation, whitespace trimming and UTF-8 encoding 9 | [*] 10 | end_of_line = lf 11 | insert_final_newline = true 12 | indent_style = space 13 | indent_size = 4 14 | trim_trailing_whitespace = false 15 | charset = utf-8 16 | 17 | [*.bat] 18 | end_of_line = crlf 19 | 20 | [{package.json,.travis.yml}] 21 | indent_style = space 22 | indent_size = 4 23 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.gitattributes: -------------------------------------------------------------------------------- 1 | * text=auto 2 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.jscsrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "validateAlignedFunctionParameters": { 4 | "lineBreakAfterOpeningBraces": false, 5 | "lineBreakBeforeClosingBraces": false 6 | }, 7 | "validateIndentation": { 8 | "value": 4, 9 | "allExcept": [ 10 | "emptyLines" 11 | ] 12 | }, 13 | "validateNewlineAfterArrayElements": { 14 | "maximum": 2 15 | }, 16 | "validateParameterSeparator": ", ", 17 | "validateQuoteMarks": { "mark": "\"", "escape": true }, 18 | "excludeFiles": [ 19 | "node_modules/**", 20 | "jspm_packages/**" 21 | ], 22 | "fileExtensions": [".js"], 23 | "requireSemicolons": true, 24 | "maximumLineLength": null, 25 | "disallowTrailingComma": true, 26 | "disallowTrailingWhitespace": "ignoreEmptyLines", 27 | "disallowDanglingUnderscores": { "allExcept": ["_exception"] }, 28 | "disallowEmptyBlocks": null, 29 | "disallowImplicitTypeConversion": null, 30 | "disallowKeywordsOnNewLine": ["else"], 31 | "disallowKeywords": ["with"], 32 | "disallowMixedSpacesAndTabs": true, 33 | "disallowMultipleLineBreaks": true, 34 | "disallowMultipleSpaces": null, 35 | "disallowNamedUnassignedFunctions": true, 36 | "disallowNewlineBeforeBlockStatements": true, 37 | "requirePaddingNewLinesAfterBlocks": { 38 | "allExcept": ["inCallExpressions", "inArrayExpressions", "inProperties"] 39 | }, 40 | "disallowPaddingNewlinesInBlocks": true, 41 | "requireSpaceAfterBinaryOperators": [ 42 | "=", 43 | ",", 44 | "+", 45 | "-", 46 | "/", 47 | "*", 48 | "==", 49 | "===", 50 | "!=", 51 | "!==" 52 | ], 53 | "requireSpaceBeforeBinaryOperators": [ 54 | "=", 55 | "+", 56 | "-", 57 | "/", 58 | "*", 59 | "==", 60 | "===", 61 | "!=", 62 | "!==" 63 | ], 64 | "disallowSpaceAfterKeywords": [ 65 | "if", 66 | "else", 67 | "for", 68 | "while", 69 | "do", 70 | "switch", 71 | "try", 72 | "catch", 73 | "function" 74 | ], 75 | "disallowSpaceAfterPrefixUnaryOperators": ["++", "--", "+", "-", "~", "!"], 76 | "disallowSpaceBeforeBlockStatements": true, 77 | "requireSpaceBeforeKeywords": [ 78 | "if", 79 | "else", 80 | "try", 81 | "catch" 82 | ], 83 | "disallowSpaceBeforePostfixUnaryOperators": [ 84 | "++", 85 | "--" 86 | ], 87 | "requireSpaceBetweenArguments": true, 88 | "disallowSpacesInAnonymousFunctionExpression": { 89 | "beforeOpeningRoundBrace": true, 90 | "beforeOpeningCurlyBrace": true 91 | }, 92 | "disallowSpacesInCallExpression": true, 93 | "disallowSpacesInFunctionDeclaration": { 94 | "beforeOpeningRoundBrace": true, 95 | "beforeOpeningCurlyBrace": true 96 | }, 97 | "disallowSpacesInFunctionExpression": { 98 | "beforeOpeningRoundBrace": true, 99 | "beforeOpeningCurlyBrace": true 100 | }, 101 | "disallowSpacesInsideParentheses": true, 102 | "disallowSpacesInFunction": { 103 | "beforeOpeningRoundBrace": true 104 | }, 105 | "disallowSpacesInNamedFunctionExpression": { 106 | "beforeOpeningRoundBrace": true, 107 | "beforeOpeningCurlyBrace": true 108 | }, 109 | "requireSpacesInsideArrayBrackets": "all", 110 | "requireSpacesInsideObjectBrackets": { 111 | "allExcept": [ "}", ")" ] 112 | }, 113 | "requireSpacesInsideParentheses": null, 114 | "requireYodaConditions": null, 115 | "requireAnonymousFunctions": true, 116 | "requireBlocksOnNewline": true, 117 | "requireCamelCaseOrUpperCaseIdentifiers": true, 118 | "requireCapitalizedConstructors": true, 119 | "requireCommaBeforeLineBreak": true, 120 | "requireCurlyBraces": true, 121 | "requireDotNotation": true, 122 | "requireFunctionDeclarations": null, 123 | "requireLineBreakAfterVariableAssignment": true, 124 | "requireLineFeedAtFileEnd": true, 125 | "disallowMultipleVarDecl": true, 126 | "requireOperatorBeforeLineBreak": [ 127 | "?", 128 | "=", 129 | "+", 130 | "-", 131 | "/", 132 | "*", 133 | "==", 134 | "===", 135 | "!=", 136 | "!==", 137 | ">", 138 | ">=", 139 | "<", 140 | "<=" 141 | ], 142 | "requirePaddingNewLineAfterVariableDeclaration": true, 143 | "requirePaddingNewLinesAfterUseStrict": true, 144 | "requirePaddingNewLinesBeforeExport": true, 145 | "requirePaddingNewlinesBeforeKeywords": [ 146 | "do", 147 | "for", 148 | "if", 149 | "switch", 150 | "case", 151 | "try", 152 | "void", 153 | "while", 154 | "with", 155 | "return", 156 | "typeof", 157 | "function" 158 | ], 159 | "requirePaddingNewLinesBeforeLineComments": null, 160 | "requireParenthesesAroundIIFE": null, 161 | "requireSpaceAfterLineComment": null, 162 | "requireSpacesInConditionalExpression": { 163 | "afterTest": true, 164 | "beforeConsequent": true, 165 | "afterConsequent": true, 166 | "beforeAlternate": true 167 | }, 168 | "requireSpacesInForStatement": true, 169 | "requirePaddingNewLinesInObjects": true, 170 | "disallowQuotedKeysInObjects": true, 171 | "requireAlignedObjectValues": null, 172 | "disallowSpaceAfterObjectKeys": true, 173 | "requireSpaceBeforeObjectValues": true, 174 | "disallowSpaceBeforeComma": true, 175 | "disallowSpaceBeforeSemicolon": true, 176 | "requireVarDeclFirst": null, 177 | "requireMatchingFunctionName": true, 178 | "requireObjectKeysOnNewLine": true, 179 | "disallowNodeTypes": ["LabeledStatement"], 180 | "requireArrowFunctions": true, 181 | "requireNumericLiterals": true, 182 | "requireTemplateStrings": null 183 | } 184 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.jshintignore: -------------------------------------------------------------------------------- 1 | node_modules/**/* 2 | jspm_packages/**/* 3 | jspm.conf.js 4 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esnext": true, 3 | "strict": "global", 4 | "devel": true, 5 | "browser": true, 6 | "forin": true, 7 | "curly": true, 8 | "bitwise": true, 9 | "eqeqeq": true, 10 | "freeze": true, 11 | "futurehostile": true, 12 | "latedef": "nofunc", 13 | "maxdepth": 5, 14 | "maxparams": 10, 15 | "maxstatements": 100, 16 | "noarg": true, 17 | "nocomma": true, 18 | "nonbsp": true, 19 | "nonew": true, 20 | "singleGroups": true, 21 | "undef": true, 22 | "unused": true, 23 | "jquery": true, 24 | "mocha": true, 25 | "jasmine": true, 26 | "module": true, 27 | "varstmt": true, 28 | "eqnull": true, 29 | "globals": { 30 | "protractor": false, 31 | "module": false, 32 | "require": false, 33 | "process": false, 34 | "someWordYouShouldNotCheck": false 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.nvmrc: -------------------------------------------------------------------------------- 1 | 4.2.6 2 | -------------------------------------------------------------------------------- /app/templates/projectFiles/.travis.yml: -------------------------------------------------------------------------------- 1 | sudo: false 2 | language: node_js 3 | cache: 4 | directories: 5 | - node_modules 6 | - jspm_packages 7 | notifications: 8 | email: true 9 | node_js: 10 | - '4.2' 11 | before_script: 12 | - npm prune 13 | before_install: 14 | - npm run setup 15 | -------------------------------------------------------------------------------- /app/templates/projectFiles/JSCS.intellij.formatter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 28 | -------------------------------------------------------------------------------- /app/templates/projectFiles/gulpfile.babel.js: -------------------------------------------------------------------------------- 1 | /* 2 | The build is provided by the Modern Web Dev Build: https://github.com/dsebastien/modernWebDevBuild 3 | */ 4 | "use strict"; 5 | 6 | import gulp from "gulp"; 7 | 8 | import modernWebDevBuild from "modern-web-dev-build"; 9 | let options = {}; 10 | 11 | /* 12 | (Optional) distEntryPoint (default: core/boot.js) 13 | Define the entry point for the creation of the production bundle. 14 | The extension does not need to be specified (SystemJS is used to load the file) 15 | */ 16 | // options.distEntryPoint = "core/core.bootstrap"; 17 | 18 | 19 | /* 20 | (Optional) minifyProductionJSBundle (default: true) 21 | Set this option to false, if you don't want a minified JS bundle. 22 | */ 23 | options.minifyProductionHTML = false; // HTML minification is currently not supported by Angular 2 beta: https://github.com/dsebastien/modernWebDevBuild/issues/67 24 | 25 | 26 | /* 27 | (Optional) minifyProductionJSBundle (default: true) 28 | Set this option to false, if you don't want a minified JS bundle. 29 | */ 30 | //options.minifyProductionJSBundle = false; 31 | 32 | 33 | /* 34 | (Optional) mangleProductionJSBundle (default: true) 35 | Set this option to false, if you don't want a mangled JS bundle. 36 | */ 37 | options.mangleProductionJSBundle = false; // Mangled JS bundles are currently not supported by Angular 2 beta: https://github.com/angular/angular/issues/6380 38 | 39 | 40 | /* 41 | (Optional) useJSPM (default: true) 42 | Set this option to false, if you don't want to use the JSPM API to create the production bundle. 43 | If you disable the usage of JSPM, then the SystemJS builder API will be used to create the production bundle. 44 | (more: https://www.npmjs.com/package/systemjs-builder) 45 | */ 46 | //options.useJSPM = false; 47 | 48 | 49 | /* 50 | (Optional) systemjsConfigurationFile (default: jspm.conf.js) 51 | Set the file name for the configuration file for SystemJS. 52 | (read also: useJSPM) 53 | */ 54 | //options.systemjsConfigurationFile = "my-systemjs.config.js"; 55 | 56 | 57 | 58 | modernWebDevBuild.registerTasks(gulp, options); -------------------------------------------------------------------------------- /app/templates/projectFiles/jspm.conf.js: -------------------------------------------------------------------------------- 1 | System.config({ 2 | defaultJSExtensions: true, 3 | transpiler: false, 4 | paths: { 5 | "github:*": "jspm_packages/github/*", 6 | "npm:*": "jspm_packages/npm/*" 7 | }, 8 | 9 | map: { 10 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 11 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 12 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 13 | "@angular/forms": "npm:@angular/forms@0.1.1", 14 | "@angular/http": "npm:@angular/http@2.0.0-rc.3", 15 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3", 16 | "@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@2.0.0-rc.3", 17 | "@angular/router": "npm:@angular/router@3.0.0-alpha.7", 18 | "@angular/router-deprecated": "npm:@angular/router-deprecated@2.0.0-rc.2", 19 | "@angular/upgrade": "npm:@angular/upgrade@2.0.0-rc.3", 20 | "babel": "npm:babel-core@6.7.4", 21 | "babel-runtime": "npm:babel-runtime@6.6.1", 22 | "normalize.css": "github:necolas/normalize.css@3.0.3", 23 | "rxjs": "npm:rxjs@5.0.0-beta.6", 24 | "reflect-metadata": "npm:reflect-metadata@0.1.3", 25 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 26 | "github:jspm/nodelibs-assert@0.1.0": { 27 | "assert": "npm:assert@1.3.0" 28 | }, 29 | "github:jspm/nodelibs-buffer@0.1.0": { 30 | "buffer": "npm:buffer@3.6.0" 31 | }, 32 | "github:jspm/nodelibs-constants@0.1.0": { 33 | "constants-browserify": "npm:constants-browserify@0.0.1" 34 | }, 35 | "github:jspm/nodelibs-crypto@0.1.0": { 36 | "crypto-browserify": "npm:crypto-browserify@3.11.0" 37 | }, 38 | "github:jspm/nodelibs-events@0.1.1": { 39 | "events": "npm:events@1.0.2" 40 | }, 41 | "github:jspm/nodelibs-http@1.7.1": { 42 | "Base64": "npm:Base64@0.2.1", 43 | "events": "github:jspm/nodelibs-events@0.1.1", 44 | "inherits": "npm:inherits@2.0.1", 45 | "stream": "github:jspm/nodelibs-stream@0.1.0", 46 | "url": "github:jspm/nodelibs-url@0.1.0", 47 | "util": "github:jspm/nodelibs-util@0.1.0" 48 | }, 49 | "github:jspm/nodelibs-net@0.1.2": { 50 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 51 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 52 | "http": "github:jspm/nodelibs-http@1.7.1", 53 | "net": "github:jspm/nodelibs-net@0.1.2", 54 | "process": "github:jspm/nodelibs-process@0.1.2", 55 | "stream": "github:jspm/nodelibs-stream@0.1.0", 56 | "timers": "github:jspm/nodelibs-timers@0.1.0", 57 | "util": "github:jspm/nodelibs-util@0.1.0" 58 | }, 59 | "github:jspm/nodelibs-path@0.1.0": { 60 | "path-browserify": "npm:path-browserify@0.0.0" 61 | }, 62 | "github:jspm/nodelibs-process@0.1.2": { 63 | "process": "npm:process@0.11.2" 64 | }, 65 | "github:jspm/nodelibs-querystring@0.1.0": { 66 | "querystring": "npm:querystring@0.2.0" 67 | }, 68 | "github:jspm/nodelibs-stream@0.1.0": { 69 | "stream-browserify": "npm:stream-browserify@1.0.0" 70 | }, 71 | "github:jspm/nodelibs-string_decoder@0.1.0": { 72 | "string_decoder": "npm:string_decoder@0.10.31" 73 | }, 74 | "github:jspm/nodelibs-timers@0.1.0": { 75 | "timers-browserify": "npm:timers-browserify@1.4.2" 76 | }, 77 | "github:jspm/nodelibs-tty@0.1.0": { 78 | "tty-browserify": "npm:tty-browserify@0.0.0" 79 | }, 80 | "github:jspm/nodelibs-url@0.1.0": { 81 | "url": "npm:url@0.10.3" 82 | }, 83 | "github:jspm/nodelibs-util@0.1.0": { 84 | "util": "npm:util@0.10.3" 85 | }, 86 | "github:jspm/nodelibs-vm@0.1.0": { 87 | "vm-browserify": "npm:vm-browserify@0.0.4" 88 | }, 89 | "github:necolas/normalize.css@3.0.3": { 90 | "css": "github:systemjs/plugin-css@0.1.20" 91 | }, 92 | "npm:amdefine@1.0.0": { 93 | "fs": "github:jspm/nodelibs-fs@0.1.2", 94 | "module": "github:jspm/nodelibs-module@0.1.0", 95 | "path": "github:jspm/nodelibs-path@0.1.0", 96 | "process": "github:jspm/nodelibs-process@0.1.2" 97 | }, 98 | "npm:@angular/common@2.0.0-rc.3": { 99 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 100 | "process": "github:jspm/nodelibs-process@0.1.2" 101 | }, 102 | "npm:@angular/compiler@2.0.0-rc.3": { 103 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 104 | "process": "github:jspm/nodelibs-process@0.1.2" 105 | }, 106 | "npm:@angular/core@2.0.0-rc.3": { 107 | "process": "github:jspm/nodelibs-process@0.1.2", 108 | "rxjs": "npm:rxjs@5.0.0-beta.6", 109 | "zone.js": "npm:zone.js@0.6.12" 110 | }, 111 | "npm:@angular/forms@0.1.1": { 112 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 113 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 114 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 115 | "process": "github:jspm/nodelibs-process@0.1.2" 116 | }, 117 | "npm:@angular/http@2.0.0-rc.3": { 118 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 119 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3", 120 | "rxjs": "npm:rxjs@5.0.0-beta.6" 121 | }, 122 | "npm:@angular/platform-browser-dynamic@2.0.0-rc.3": { 123 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 124 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 125 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 126 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3", 127 | "process": "github:jspm/nodelibs-process@0.1.2" 128 | }, 129 | "npm:@angular/platform-browser@2.0.0-rc.3": { 130 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 131 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 132 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 133 | "process": "github:jspm/nodelibs-process@0.1.2" 134 | }, 135 | "npm:@angular/router-deprecated@2.0.0-rc.2": { 136 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 137 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 138 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3" 139 | }, 140 | "npm:@angular/router@3.0.0-alpha.7": { 141 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 142 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 143 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 144 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3", 145 | "@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@2.0.0-rc.3", 146 | "process": "github:jspm/nodelibs-process@0.1.2", 147 | "rxjs": "npm:rxjs@5.0.0-beta.6" 148 | }, 149 | "npm:@angular/upgrade@2.0.0-rc.3": { 150 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 151 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 152 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3" 153 | }, 154 | "npm:asn1.js@4.5.2": { 155 | "assert": "github:jspm/nodelibs-assert@0.1.0", 156 | "bn.js": "npm:bn.js@4.11.1", 157 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 158 | "fs": "github:jspm/nodelibs-fs@0.1.2", 159 | "inherits": "npm:inherits@2.0.1", 160 | "minimalistic-assert": "npm:minimalistic-assert@1.0.0", 161 | "vm": "github:jspm/nodelibs-vm@0.1.0" 162 | }, 163 | "npm:assert@1.3.0": { 164 | "util": "npm:util@0.10.3" 165 | }, 166 | "npm:babel-code-frame@6.7.4": { 167 | "babel-runtime": "npm:babel-runtime@5.8.38", 168 | "chalk": "npm:chalk@1.1.3", 169 | "esutils": "npm:esutils@2.0.2", 170 | "js-tokens": "npm:js-tokens@1.0.3", 171 | "repeating": "npm:repeating@1.1.3" 172 | }, 173 | "npm:babel-core@6.7.4": { 174 | "babel-code-frame": "npm:babel-code-frame@6.7.4", 175 | "babel-generator": "npm:babel-generator@6.7.2", 176 | "babel-helpers": "npm:babel-helpers@6.6.0", 177 | "babel-messages": "npm:babel-messages@6.7.2", 178 | "babel-register": "npm:babel-register@6.7.2", 179 | "babel-runtime": "npm:babel-runtime@5.8.38", 180 | "babel-template": "npm:babel-template@6.7.0", 181 | "babel-traverse": "npm:babel-traverse@6.7.4", 182 | "babel-types": "npm:babel-types@6.7.2", 183 | "babylon": "npm:babylon@6.7.0", 184 | "convert-source-map": "npm:convert-source-map@1.2.0", 185 | "debug": "npm:debug@2.2.0", 186 | "fs": "github:jspm/nodelibs-fs@0.1.2", 187 | "json5": "npm:json5@0.4.0", 188 | "lodash": "npm:lodash@3.10.1", 189 | "minimatch": "npm:minimatch@2.0.10", 190 | "module": "github:jspm/nodelibs-module@0.1.0", 191 | "path": "github:jspm/nodelibs-path@0.1.0", 192 | "path-exists": "npm:path-exists@1.0.0", 193 | "path-is-absolute": "npm:path-is-absolute@1.0.0", 194 | "private": "npm:private@0.1.6", 195 | "process": "github:jspm/nodelibs-process@0.1.2", 196 | "shebang-regex": "npm:shebang-regex@1.0.0", 197 | "slash": "npm:slash@1.0.0", 198 | "source-map": "npm:source-map@0.5.3", 199 | "systemjs-json": "github:systemjs/plugin-json@0.1.0", 200 | "util": "github:jspm/nodelibs-util@0.1.0" 201 | }, 202 | "npm:babel-generator@6.7.2": { 203 | "babel-messages": "npm:babel-messages@6.7.2", 204 | "babel-runtime": "npm:babel-runtime@5.8.38", 205 | "babel-types": "npm:babel-types@6.7.2", 206 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 207 | "detect-indent": "npm:detect-indent@3.0.1", 208 | "is-integer": "npm:is-integer@1.0.6", 209 | "lodash": "npm:lodash@3.10.1", 210 | "repeating": "npm:repeating@1.1.3", 211 | "source-map": "npm:source-map@0.5.3", 212 | "trim-right": "npm:trim-right@1.0.1" 213 | }, 214 | "npm:babel-helpers@6.6.0": { 215 | "babel-runtime": "npm:babel-runtime@5.8.38", 216 | "babel-template": "npm:babel-template@6.7.0" 217 | }, 218 | "npm:babel-messages@6.7.2": { 219 | "babel-runtime": "npm:babel-runtime@5.8.38", 220 | "util": "github:jspm/nodelibs-util@0.1.0" 221 | }, 222 | "npm:babel-register@6.7.2": { 223 | "babel-core": "npm:babel-core@6.7.4", 224 | "babel-runtime": "npm:babel-runtime@5.8.38", 225 | "core-js": "npm:core-js@2.2.1", 226 | "fs": "github:jspm/nodelibs-fs@0.1.2", 227 | "home-or-tmp": "npm:home-or-tmp@1.0.0", 228 | "lodash": "npm:lodash@3.10.1", 229 | "mkdirp": "npm:mkdirp@0.5.1", 230 | "path": "github:jspm/nodelibs-path@0.1.0", 231 | "path-exists": "npm:path-exists@1.0.0", 232 | "process": "github:jspm/nodelibs-process@0.1.2", 233 | "source-map-support": "npm:source-map-support@0.2.10" 234 | }, 235 | "npm:babel-runtime@5.8.38": { 236 | "process": "github:jspm/nodelibs-process@0.1.2" 237 | }, 238 | "npm:babel-runtime@6.6.1": { 239 | "core-js": "npm:core-js@2.2.1", 240 | "process": "github:jspm/nodelibs-process@0.1.2" 241 | }, 242 | "npm:babel-template@6.7.0": { 243 | "babel-runtime": "npm:babel-runtime@5.8.38", 244 | "babel-traverse": "npm:babel-traverse@6.7.4", 245 | "babel-types": "npm:babel-types@6.7.2", 246 | "babylon": "npm:babylon@6.7.0", 247 | "lodash": "npm:lodash@3.10.1" 248 | }, 249 | "npm:babel-traverse@6.7.4": { 250 | "babel-code-frame": "npm:babel-code-frame@6.7.4", 251 | "babel-messages": "npm:babel-messages@6.7.2", 252 | "babel-runtime": "npm:babel-runtime@5.8.38", 253 | "babel-types": "npm:babel-types@6.7.2", 254 | "babylon": "npm:babylon@6.7.0", 255 | "debug": "npm:debug@2.2.0", 256 | "globals": "npm:globals@8.18.0", 257 | "invariant": "npm:invariant@2.2.1", 258 | "lodash": "npm:lodash@3.10.1", 259 | "process": "github:jspm/nodelibs-process@0.1.2", 260 | "repeating": "npm:repeating@1.1.3" 261 | }, 262 | "npm:babel-types@6.7.2": { 263 | "babel-runtime": "npm:babel-runtime@5.8.38", 264 | "babel-traverse": "npm:babel-traverse@6.7.4", 265 | "esutils": "npm:esutils@2.0.2", 266 | "lodash": "npm:lodash@3.10.1", 267 | "to-fast-properties": "npm:to-fast-properties@1.0.2" 268 | }, 269 | "npm:babylon@6.7.0": { 270 | "babel-runtime": "npm:babel-runtime@5.8.38", 271 | "fs": "github:jspm/nodelibs-fs@0.1.2", 272 | "process": "github:jspm/nodelibs-process@0.1.2" 273 | }, 274 | "npm:bn.js@4.11.1": { 275 | "buffer": "github:jspm/nodelibs-buffer@0.1.0" 276 | }, 277 | "npm:brace-expansion@1.1.3": { 278 | "balanced-match": "npm:balanced-match@0.3.0", 279 | "concat-map": "npm:concat-map@0.0.1" 280 | }, 281 | "npm:browserify-aes@1.0.6": { 282 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 283 | "buffer-xor": "npm:buffer-xor@1.0.3", 284 | "cipher-base": "npm:cipher-base@1.0.2", 285 | "create-hash": "npm:create-hash@1.1.2", 286 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 287 | "evp_bytestokey": "npm:evp_bytestokey@1.0.0", 288 | "fs": "github:jspm/nodelibs-fs@0.1.2", 289 | "inherits": "npm:inherits@2.0.1", 290 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 291 | }, 292 | "npm:browserify-cipher@1.0.0": { 293 | "browserify-aes": "npm:browserify-aes@1.0.6", 294 | "browserify-des": "npm:browserify-des@1.0.0", 295 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 296 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 297 | "evp_bytestokey": "npm:evp_bytestokey@1.0.0" 298 | }, 299 | "npm:browserify-des@1.0.0": { 300 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 301 | "cipher-base": "npm:cipher-base@1.0.2", 302 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 303 | "des.js": "npm:des.js@1.0.0", 304 | "inherits": "npm:inherits@2.0.1" 305 | }, 306 | "npm:browserify-rsa@4.0.1": { 307 | "bn.js": "npm:bn.js@4.11.1", 308 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 309 | "constants": "github:jspm/nodelibs-constants@0.1.0", 310 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 311 | "randombytes": "npm:randombytes@2.0.3" 312 | }, 313 | "npm:browserify-sign@4.0.0": { 314 | "bn.js": "npm:bn.js@4.11.1", 315 | "browserify-rsa": "npm:browserify-rsa@4.0.1", 316 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 317 | "create-hash": "npm:create-hash@1.1.2", 318 | "create-hmac": "npm:create-hmac@1.1.4", 319 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 320 | "elliptic": "npm:elliptic@6.2.3", 321 | "inherits": "npm:inherits@2.0.1", 322 | "parse-asn1": "npm:parse-asn1@5.0.0", 323 | "stream": "github:jspm/nodelibs-stream@0.1.0" 324 | }, 325 | "npm:buffer-xor@1.0.3": { 326 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 327 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 328 | }, 329 | "npm:buffer@3.6.0": { 330 | "base64-js": "npm:base64-js@0.0.8", 331 | "child_process": "github:jspm/nodelibs-child_process@0.1.0", 332 | "fs": "github:jspm/nodelibs-fs@0.1.2", 333 | "ieee754": "npm:ieee754@1.1.6", 334 | "isarray": "npm:isarray@1.0.0", 335 | "process": "github:jspm/nodelibs-process@0.1.2" 336 | }, 337 | "npm:chalk@1.1.3": { 338 | "ansi-styles": "npm:ansi-styles@2.2.1", 339 | "escape-string-regexp": "npm:escape-string-regexp@1.0.5", 340 | "has-ansi": "npm:has-ansi@2.0.0", 341 | "process": "github:jspm/nodelibs-process@0.1.2", 342 | "strip-ansi": "npm:strip-ansi@3.0.1", 343 | "supports-color": "npm:supports-color@2.0.0" 344 | }, 345 | "npm:cipher-base@1.0.2": { 346 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 347 | "inherits": "npm:inherits@2.0.1", 348 | "stream": "github:jspm/nodelibs-stream@0.1.0", 349 | "string_decoder": "github:jspm/nodelibs-string_decoder@0.1.0" 350 | }, 351 | "npm:constants-browserify@0.0.1": { 352 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 353 | }, 354 | "npm:convert-source-map@1.2.0": { 355 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 356 | "fs": "github:jspm/nodelibs-fs@0.1.2", 357 | "path": "github:jspm/nodelibs-path@0.1.0" 358 | }, 359 | "npm:core-js@2.2.1": { 360 | "fs": "github:jspm/nodelibs-fs@0.1.2", 361 | "path": "github:jspm/nodelibs-path@0.1.0", 362 | "process": "github:jspm/nodelibs-process@0.1.2", 363 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 364 | }, 365 | "npm:core-util-is@1.0.2": { 366 | "buffer": "github:jspm/nodelibs-buffer@0.1.0" 367 | }, 368 | "npm:create-ecdh@4.0.0": { 369 | "bn.js": "npm:bn.js@4.11.1", 370 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 371 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 372 | "elliptic": "npm:elliptic@6.2.3" 373 | }, 374 | "npm:create-hash@1.1.2": { 375 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 376 | "cipher-base": "npm:cipher-base@1.0.2", 377 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 378 | "fs": "github:jspm/nodelibs-fs@0.1.2", 379 | "inherits": "npm:inherits@2.0.1", 380 | "ripemd160": "npm:ripemd160@1.0.1", 381 | "sha.js": "npm:sha.js@2.4.5" 382 | }, 383 | "npm:create-hmac@1.1.4": { 384 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 385 | "create-hash": "npm:create-hash@1.1.2", 386 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 387 | "inherits": "npm:inherits@2.0.1", 388 | "stream": "github:jspm/nodelibs-stream@0.1.0" 389 | }, 390 | "npm:crypto-browserify@3.11.0": { 391 | "browserify-cipher": "npm:browserify-cipher@1.0.0", 392 | "browserify-sign": "npm:browserify-sign@4.0.0", 393 | "create-ecdh": "npm:create-ecdh@4.0.0", 394 | "create-hash": "npm:create-hash@1.1.2", 395 | "create-hmac": "npm:create-hmac@1.1.4", 396 | "diffie-hellman": "npm:diffie-hellman@5.0.2", 397 | "inherits": "npm:inherits@2.0.1", 398 | "pbkdf2": "npm:pbkdf2@3.0.4", 399 | "public-encrypt": "npm:public-encrypt@4.0.0", 400 | "randombytes": "npm:randombytes@2.0.3" 401 | }, 402 | "npm:debug@2.2.0": { 403 | "fs": "github:jspm/nodelibs-fs@0.1.2", 404 | "ms": "npm:ms@0.7.1", 405 | "net": "github:jspm/nodelibs-net@0.1.2", 406 | "process": "github:jspm/nodelibs-process@0.1.2", 407 | "tty": "github:jspm/nodelibs-tty@0.1.0", 408 | "util": "github:jspm/nodelibs-util@0.1.0" 409 | }, 410 | "npm:des.js@1.0.0": { 411 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 412 | "inherits": "npm:inherits@2.0.1", 413 | "minimalistic-assert": "npm:minimalistic-assert@1.0.0" 414 | }, 415 | "npm:detect-indent@3.0.1": { 416 | "fs": "github:jspm/nodelibs-fs@0.1.2", 417 | "get-stdin": "npm:get-stdin@4.0.1", 418 | "minimist": "npm:minimist@1.2.0", 419 | "process": "github:jspm/nodelibs-process@0.1.2", 420 | "repeating": "npm:repeating@1.1.3", 421 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 422 | }, 423 | "npm:diffie-hellman@5.0.2": { 424 | "bn.js": "npm:bn.js@4.11.1", 425 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 426 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 427 | "miller-rabin": "npm:miller-rabin@4.0.0", 428 | "randombytes": "npm:randombytes@2.0.3", 429 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 430 | }, 431 | "npm:elliptic@6.2.3": { 432 | "bn.js": "npm:bn.js@4.11.1", 433 | "brorand": "npm:brorand@1.0.5", 434 | "hash.js": "npm:hash.js@1.0.3", 435 | "inherits": "npm:inherits@2.0.1", 436 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 437 | }, 438 | "npm:evp_bytestokey@1.0.0": { 439 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 440 | "create-hash": "npm:create-hash@1.1.2", 441 | "crypto": "github:jspm/nodelibs-crypto@0.1.0" 442 | }, 443 | "npm:get-stdin@4.0.1": { 444 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 445 | "process": "github:jspm/nodelibs-process@0.1.2" 446 | }, 447 | "npm:globals@8.18.0": { 448 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 449 | }, 450 | "npm:has-ansi@2.0.0": { 451 | "ansi-regex": "npm:ansi-regex@2.0.0" 452 | }, 453 | "npm:hash.js@1.0.3": { 454 | "inherits": "npm:inherits@2.0.1" 455 | }, 456 | "npm:home-or-tmp@1.0.0": { 457 | "os-tmpdir": "npm:os-tmpdir@1.0.1", 458 | "user-home": "npm:user-home@1.1.1" 459 | }, 460 | "npm:inherits@2.0.1": { 461 | "util": "github:jspm/nodelibs-util@0.1.0" 462 | }, 463 | "npm:invariant@2.2.1": { 464 | "loose-envify": "npm:loose-envify@1.1.0", 465 | "process": "github:jspm/nodelibs-process@0.1.2" 466 | }, 467 | "npm:is-finite@1.0.1": { 468 | "number-is-nan": "npm:number-is-nan@1.0.0" 469 | }, 470 | "npm:is-integer@1.0.6": { 471 | "is-finite": "npm:is-finite@1.0.1" 472 | }, 473 | "npm:json5@0.4.0": { 474 | "fs": "github:jspm/nodelibs-fs@0.1.2", 475 | "path": "github:jspm/nodelibs-path@0.1.0", 476 | "process": "github:jspm/nodelibs-process@0.1.2", 477 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 478 | }, 479 | "npm:lodash@3.10.1": { 480 | "process": "github:jspm/nodelibs-process@0.1.2" 481 | }, 482 | "npm:loose-envify@1.1.0": { 483 | "js-tokens": "npm:js-tokens@1.0.3", 484 | "process": "github:jspm/nodelibs-process@0.1.2", 485 | "stream": "github:jspm/nodelibs-stream@0.1.0", 486 | "util": "github:jspm/nodelibs-util@0.1.0" 487 | }, 488 | "npm:miller-rabin@4.0.0": { 489 | "bn.js": "npm:bn.js@4.11.1", 490 | "brorand": "npm:brorand@1.0.5" 491 | }, 492 | "npm:minimatch@2.0.10": { 493 | "brace-expansion": "npm:brace-expansion@1.1.3", 494 | "path": "github:jspm/nodelibs-path@0.1.0" 495 | }, 496 | "npm:mkdirp@0.5.1": { 497 | "fs": "github:jspm/nodelibs-fs@0.1.2", 498 | "minimist": "npm:minimist@0.0.8", 499 | "path": "github:jspm/nodelibs-path@0.1.0", 500 | "process": "github:jspm/nodelibs-process@0.1.2" 501 | }, 502 | "npm:os-tmpdir@1.0.1": { 503 | "process": "github:jspm/nodelibs-process@0.1.2" 504 | }, 505 | "npm:parse-asn1@5.0.0": { 506 | "asn1.js": "npm:asn1.js@4.5.2", 507 | "browserify-aes": "npm:browserify-aes@1.0.6", 508 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 509 | "create-hash": "npm:create-hash@1.1.2", 510 | "evp_bytestokey": "npm:evp_bytestokey@1.0.0", 511 | "pbkdf2": "npm:pbkdf2@3.0.4", 512 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 513 | }, 514 | "npm:path-browserify@0.0.0": { 515 | "process": "github:jspm/nodelibs-process@0.1.2" 516 | }, 517 | "npm:path-exists@1.0.0": { 518 | "fs": "github:jspm/nodelibs-fs@0.1.2" 519 | }, 520 | "npm:path-is-absolute@1.0.0": { 521 | "process": "github:jspm/nodelibs-process@0.1.2" 522 | }, 523 | "npm:pbkdf2@3.0.4": { 524 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 525 | "child_process": "github:jspm/nodelibs-child_process@0.1.0", 526 | "create-hmac": "npm:create-hmac@1.1.4", 527 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 528 | "path": "github:jspm/nodelibs-path@0.1.0", 529 | "process": "github:jspm/nodelibs-process@0.1.2", 530 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 531 | }, 532 | "npm:process@0.11.2": { 533 | "assert": "github:jspm/nodelibs-assert@0.1.0" 534 | }, 535 | "npm:public-encrypt@4.0.0": { 536 | "bn.js": "npm:bn.js@4.11.1", 537 | "browserify-rsa": "npm:browserify-rsa@4.0.1", 538 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 539 | "create-hash": "npm:create-hash@1.1.2", 540 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 541 | "parse-asn1": "npm:parse-asn1@5.0.0", 542 | "randombytes": "npm:randombytes@2.0.3" 543 | }, 544 | "npm:punycode@1.3.2": { 545 | "process": "github:jspm/nodelibs-process@0.1.2" 546 | }, 547 | "npm:randombytes@2.0.3": { 548 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 549 | "crypto": "github:jspm/nodelibs-crypto@0.1.0", 550 | "process": "github:jspm/nodelibs-process@0.1.2" 551 | }, 552 | "npm:readable-stream@1.1.13": { 553 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 554 | "core-util-is": "npm:core-util-is@1.0.2", 555 | "events": "github:jspm/nodelibs-events@0.1.1", 556 | "inherits": "npm:inherits@2.0.1", 557 | "isarray": "npm:isarray@0.0.1", 558 | "process": "github:jspm/nodelibs-process@0.1.2", 559 | "stream-browserify": "npm:stream-browserify@1.0.0", 560 | "string_decoder": "npm:string_decoder@0.10.31" 561 | }, 562 | "npm:reflect-metadata@0.1.2": { 563 | "assert": "github:jspm/nodelibs-assert@0.1.0", 564 | "process": "github:jspm/nodelibs-process@0.1.2" 565 | }, 566 | "npm:repeating@1.1.3": { 567 | "is-finite": "npm:is-finite@1.0.1", 568 | "process": "github:jspm/nodelibs-process@0.1.2", 569 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 570 | }, 571 | "npm:ripemd160@1.0.1": { 572 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 573 | "process": "github:jspm/nodelibs-process@0.1.2" 574 | }, 575 | "npm:rxjs@5.0.0-beta.2": { 576 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 577 | "process": "github:jspm/nodelibs-process@0.1.2" 578 | }, 579 | "npm:sha.js@2.4.5": { 580 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 581 | "fs": "github:jspm/nodelibs-fs@0.1.2", 582 | "inherits": "npm:inherits@2.0.1", 583 | "process": "github:jspm/nodelibs-process@0.1.2" 584 | }, 585 | "npm:source-map-support@0.2.10": { 586 | "assert": "github:jspm/nodelibs-assert@0.1.0", 587 | "buffer": "github:jspm/nodelibs-buffer@0.1.0", 588 | "child_process": "github:jspm/nodelibs-child_process@0.1.0", 589 | "fs": "github:jspm/nodelibs-fs@0.1.2", 590 | "http": "github:jspm/nodelibs-http@1.7.1", 591 | "path": "github:jspm/nodelibs-path@0.1.0", 592 | "process": "github:jspm/nodelibs-process@0.1.2", 593 | "querystring": "github:jspm/nodelibs-querystring@0.1.0", 594 | "source-map": "npm:source-map@0.1.32" 595 | }, 596 | "npm:source-map@0.1.32": { 597 | "amdefine": "npm:amdefine@1.0.0", 598 | "fs": "github:jspm/nodelibs-fs@0.1.2", 599 | "path": "github:jspm/nodelibs-path@0.1.0", 600 | "process": "github:jspm/nodelibs-process@0.1.2" 601 | }, 602 | "npm:source-map@0.5.3": { 603 | "process": "github:jspm/nodelibs-process@0.1.2" 604 | }, 605 | "npm:stream-browserify@1.0.0": { 606 | "events": "github:jspm/nodelibs-events@0.1.1", 607 | "inherits": "npm:inherits@2.0.1", 608 | "readable-stream": "npm:readable-stream@1.1.13" 609 | }, 610 | "npm:string_decoder@0.10.31": { 611 | "buffer": "github:jspm/nodelibs-buffer@0.1.0" 612 | }, 613 | "npm:strip-ansi@3.0.1": { 614 | "ansi-regex": "npm:ansi-regex@2.0.0" 615 | }, 616 | "npm:supports-color@2.0.0": { 617 | "process": "github:jspm/nodelibs-process@0.1.2" 618 | }, 619 | "npm:timers-browserify@1.4.2": { 620 | "process": "npm:process@0.11.2" 621 | }, 622 | "npm:url@0.10.3": { 623 | "assert": "github:jspm/nodelibs-assert@0.1.0", 624 | "punycode": "npm:punycode@1.3.2", 625 | "querystring": "npm:querystring@0.2.0", 626 | "util": "github:jspm/nodelibs-util@0.1.0" 627 | }, 628 | "npm:user-home@1.1.1": { 629 | "process": "github:jspm/nodelibs-process@0.1.2", 630 | "systemjs-json": "github:systemjs/plugin-json@0.1.0" 631 | }, 632 | "npm:util@0.10.3": { 633 | "inherits": "npm:inherits@2.0.1", 634 | "process": "github:jspm/nodelibs-process@0.1.2" 635 | }, 636 | "npm:vm-browserify@0.0.4": { 637 | "indexof": "npm:indexof@0.0.1" 638 | }, 639 | "npm:zone.js@0.6.8": { 640 | "process": "github:jspm/nodelibs-process@0.1.2" 641 | } 642 | } 643 | }); 644 | -------------------------------------------------------------------------------- /app/templates/projectFiles/karma.conf.js: -------------------------------------------------------------------------------- 1 | // Karma configuration 2 | // reference: http://karma-runner.github.io/0.13/config/configuration-file.html 3 | 4 | module.exports = function (config) { 5 | config.set({ 6 | 7 | // base path that will be used to resolve all patterns (eg. files, exclude) 8 | //basePath: ".tmp/", 9 | 10 | plugins: [ 11 | "karma-jspm", 12 | "karma-jasmine", 13 | "karma-phantomjs-launcher", 14 | "karma-chrome-launcher", 15 | "karma-firefox-launcher", 16 | "karma-ie-launcher", 17 | "karma-junit-reporter", 18 | "karma-spec-reporter" 19 | ], 20 | 21 | // frameworks to use 22 | // available frameworks: https://npmjs.org/browse/keyword/karma-adapter 23 | frameworks: [ 24 | "jspm", 25 | "jasmine" 26 | ], 27 | 28 | // list of files / patterns to load in the browser (loaded before SystemJS) 29 | files: [], 30 | 31 | // list of files to exclude 32 | exclude: [], 33 | 34 | // list of paths mappings 35 | // can be used to map paths served by the Karma web server to /base/ content 36 | // knowing that /base corresponds to the project root folder (i.e., where this config file is located) 37 | proxies: { 38 | "/.tmp": "/base/.tmp" // without this, karma-jspm can't load the files 39 | }, 40 | 41 | // preprocess matching files before serving them to the browser 42 | // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor 43 | preprocessors: {}, 44 | 45 | // test results reporter to use 46 | // possible values: 'dots', 'progress', 'spec', 'junit' 47 | // available reporters: https://npmjs.org/browse/keyword/karma-reporter 48 | // https://www.npmjs.com/package/karma-junit-reporter 49 | // https://www.npmjs.com/package/karma-spec-reporter 50 | reporters: ["spec"], 51 | 52 | // web server port 53 | port: 9876, 54 | 55 | // enable / disable colors in the output (reporters and logs) 56 | colors: true, 57 | 58 | // level of logging 59 | // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG 60 | logLevel: config.LOG_INFO, 61 | 62 | // enable / disable watching file and executing tests whenever any file changes 63 | autoWatch: true, 64 | 65 | // start these browsers 66 | // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher 67 | browsers: [ 68 | "PhantomJS" 69 | //"Chrome", 70 | //"Firefox", 71 | //"PhantomJS", 72 | //"IE" 73 | ], 74 | 75 | // Continuous Integration mode 76 | // if true, Karma captures browsers, runs the tests and exits 77 | singleRun: false, 78 | 79 | junitReporter: { 80 | outputFile: "target/reports/tests-unit/unit.xml", 81 | suite: "unit" 82 | }, 83 | 84 | // doc: https://www.npmjs.com/package/karma-jspm 85 | // reference config: https://github.com/gunnarlium/babel-jspm-karma-jasmine-istanbul 86 | jspm: { 87 | // Path to your SystemJS/JSPM configuration file 88 | config: "jspm.conf.js", 89 | 90 | // Where to find jspm packages 91 | //packages: "jspm_packages", 92 | 93 | // One use case for this is to only put test specs in loadFiles, and jspm will only load the src files when and if the test files require them. 94 | loadFiles: [ 95 | // load all tests 96 | ".tmp/*.spec.js", // in case there are tests in the root folder 97 | ".tmp/**/*.spec.js" 98 | ], 99 | 100 | // Make additional files/a file pattern available for jspm to load, but not load it right away. 101 | serveFiles: [ 102 | ".tmp/**/!(*.spec).js" // make sure that all files are available 103 | ], 104 | 105 | // SystemJS configuration specifically for tests, added after your config file. 106 | // Good for adding test libraries and mock modules 107 | paths: {} 108 | } 109 | }); 110 | }; 111 | -------------------------------------------------------------------------------- /app/templates/projectFiles/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.7.3", 3 | "compilerOptions": { 4 | "target": "es5", 5 | "module": "commonjs", 6 | "declaration": false, 7 | "noImplicitAny": true, 8 | "suppressImplicitAnyIndexErrors": true, 9 | "removeComments": false, 10 | "emitDecoratorMetadata": true, 11 | "experimentalDecorators": true, 12 | "noEmitOnError": false, 13 | "preserveConstEnums": true, 14 | "inlineSources": false, 15 | "sourceMap": false, 16 | "outDir": "./.tmp", 17 | "rootDir": "./app", 18 | "moduleResolution": "node", 19 | "listFiles": false 20 | }, 21 | "formatCodeOptions": { 22 | "indentSize": 2, 23 | "tabSize": 4, 24 | "newLineCharacter": "\r\n", 25 | "convertTabsToSpaces": false, 26 | "insertSpaceAfterCommaDelimiter": true, 27 | "insertSpaceAfterSemicolonInForStatements": true, 28 | "insertSpaceBeforeAndAfterBinaryOperators": true, 29 | "insertSpaceAfterKeywordsInControlFlowStatements": true, 30 | "insertSpaceAfterFunctionKeywordForAnonymousFunctions": false, 31 | "insertSpaceAfterOpeningAndBeforeClosingNonemptyParenthesis": false, 32 | "placeOpenBraceOnNewLineForFunctions": false, 33 | "placeOpenBraceOnNewLineForControlBlocks": false 34 | }, 35 | "exclude": [ 36 | "node_modules", 37 | "jspm_packages", 38 | "typings/browser", 39 | "typings/browser.d.ts" 40 | ] 41 | } 42 | -------------------------------------------------------------------------------- /app/templates/projectFiles/tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "class-name": true, 4 | "jsdoc-format": true, 5 | "curly": true, 6 | "eofline": true, 7 | "forin": true, 8 | "indent": "spaces", 9 | "interface-name": false, 10 | "label-position": true, 11 | "label-undefined": true, 12 | "max-line-length": false, 13 | "no-any": false, 14 | "no-arg": true, 15 | "no-bitwise": true, 16 | "no-console": [false, 17 | "debug", 18 | "info", 19 | "time", 20 | "timeEnd", 21 | "trace" 22 | ], 23 | "no-construct": true, 24 | "no-debugger": true, 25 | "no-duplicate-key": true, 26 | "no-duplicate-variable": true, 27 | "no-empty": true, 28 | "no-eval": true, 29 | "no-string-literal": false, 30 | "trailing-comma": true, 31 | "no-unused-variable": false, 32 | "no-unreachable": true, 33 | "no-use-before-declare": null, 34 | "one-line": [true, 35 | "check-open-brace", 36 | "check-catch", 37 | "check-else", 38 | "check-whitespace" 39 | ], 40 | "quotemark": [true, "double"], 41 | "radix": true, 42 | "semicolon": true, 43 | "triple-equals": [true, "allow-null-check"], 44 | "variable-name": false, 45 | "no-trailing-whitespace": true, 46 | "whitespace": [false, 47 | "check-branch", 48 | "check-decl", 49 | "check-operator", 50 | "check-separator", 51 | "check-type", 52 | "check-typecast" 53 | ] 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /app/templates/projectFiles/typings.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | }, 4 | "devDependencies": {}, 5 | "ambientDependencies": { 6 | "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#4de74cb527395c13ba20b438c3a7a419ad931f1c", 7 | "jasmine": "github:DefinitelyTyped/DefinitelyTyped/jasmine/jasmine.d.ts#dd638012d63e069f2c99d06ef4dcc9616a943ee4", 8 | "zone.js": "github:DefinitelyTyped/DefinitelyTyped/zone.js/zone.js.d.ts#9027703c0bd831319dcdf7f3169f7a468537f448" 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/templates/projectFiles/typings/README.md: -------------------------------------------------------------------------------- 1 | This folder should only contain TypeScript type definitions (.d.ts) files. 2 | Type definition files should be installed using `typings install ... --save`; once that command is issued: 3 | * typings.json will be updated 4 | * the typings will be downloaded below this folder 5 | * references to these typings files will be added to both `main.d.ts` and `browser.d.ts` 6 | 7 | All type definition files in this folder will automatically be picked up by the TypeScript compiler. 8 | 9 | For more details about the typings CLI, check out the official docs: https://github.com/typings/typings 10 | -------------------------------------------------------------------------------- /app/templates/projectTemplates/README.md: -------------------------------------------------------------------------------- 1 | # <%= projectName %> 2 | 3 | ## About 4 | <%= projectDescription %> 5 | 6 | This project was created using the [ModernWebDev Yeoman Generator](https://github.com/dsebastien/modernWebDevGenerator) by [dSebastien](https://twitter.com/dSebastien). 7 | 8 | ## How to build 9 | First, make sure that you have installed the required global npm packages: `npm install gulp --global --no-optional`. 10 | 11 | Next, you also need to install the project dependencies using `npm run setup`. 12 | 13 | For more details about the build, refer to the [ModernWebDevBuild](https://github.com/dsebastien/modernWebDevBuild) project documentation. 14 | -------------------------------------------------------------------------------- /app/templates/projectTemplates/_gitignore: -------------------------------------------------------------------------------- 1 | # Project specific 2 | dist/ 3 | .tmp/ 4 | *.log 5 | *.map 6 | *.d.ts 7 | 8 | # Typings 9 | # Only project-specific typings should be included 10 | *.d.ts 11 | !typings/custom.d.ts 12 | !typings/custom/*.d.ts 13 | 14 | # NPM 15 | node_modules/ 16 | 17 | # JSPM 18 | jspm_packages/ 19 | 20 | # Directory for instrumented libs generated by jscoverage/JSCover 21 | lib-cov/ 22 | 23 | # Coverage directory used by tools like istanbul 24 | coverage/ 25 | 26 | # Windows 27 | Desktop.ini 28 | 29 | # JetBrains IDEs 30 | *.iml 31 | .idea/ 32 | .webstorm/ 33 | 34 | # OSX 35 | .DS_Store 36 | .AppleDouble 37 | .LSOverride 38 | # Icon must end with two \r 39 | Icon 40 | 41 | # Sublime text 42 | .sublime-gulp.cache 43 | -------------------------------------------------------------------------------- /app/templates/projectTemplates/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "<%= projectName %>", 3 | "description": "<%= projectDescription %>", 4 | "author": { 5 | "name": "<%= projectOwner %>", 6 | "email": "<%= projectOwnerMail %>", 7 | "url": "<%= projectOwnerURL %>" 8 | }, 9 | "contributors": [ 10 | ], 11 | "homepage": "<%= projectURL %>", 12 | "bugs": "<%= projectURL %>", 13 | "keywords": [ 14 | "web" 15 | ], 16 | "private": true, 17 | "version": "0.0.1", 18 | "jspm": { 19 | "configFile": "jspm.conf.js", 20 | "dependencies": { 21 | "@angular/common": "npm:@angular/common@2.0.0-rc.3", 22 | "@angular/compiler": "npm:@angular/compiler@2.0.0-rc.3", 23 | "@angular/core": "npm:@angular/core@2.0.0-rc.3", 24 | "@angular/forms": "npm:@angular/forms@0.1.1", 25 | "@angular/http": "npm:@angular/http@2.0.0-rc.3", 26 | "@angular/platform-browser": "npm:@angular/platform-browser@2.0.0-rc.3", 27 | "@angular/platform-browser-dynamic": "npm:@angular/platform-browser-dynamic@2.0.0-rc.3", 28 | "@angular/router": "npm:@angular/router@3.0.0-alpha.7", 29 | "@angular/router-deprecated": "npm:@angular/router-deprecated@2.0.0-rc.2", 30 | "@angular/upgrade": "npm:@angular/upgrade@2.0.0-rc.3", 31 | "babel-runtime": "npm:babel-runtime@6.6.1", 32 | "normalize.css": "github:necolas/normalize.css@3.0.3", 33 | "rxjs": "npm:rxjs@5.0.0-beta.6", 34 | "reflect-metadata": "npm:reflect-metadata@0.1.3", 35 | "crypto": "github:jspm/nodelibs-crypto@0.1.0" 36 | }, 37 | "devDependencies": { 38 | "babel": "npm:babel-core@6.7.4" 39 | } 40 | }, 41 | "dependencies": { 42 | "babel-runtime": "^6.6.1", 43 | "reflect-metadata": "^0.1.3", 44 | "zone.js": "^0.6.6", 45 | "es6-shim": "^0.35.0", 46 | "rxjs": "5.0.0-beta.6", 47 | "@angular/common": "2.0.0-rc.3", 48 | "@angular/compiler": "2.0.0-rc.3", 49 | "@angular/core": "2.0.0-rc.3", 50 | "@angular/forms": "0.1.1", 51 | "@angular/http": "2.0.0-rc.3", 52 | "@angular/platform-browser": "2.0.0-rc.3", 53 | "@angular/platform-browser-dynamic": "2.0.0-rc.3", 54 | "@angular/router": "3.0.0-alpha.7", 55 | "@angular/router-deprecated": "2.0.0-rc.2", 56 | "@angular/upgrade": "2.0.0-rc.3" 57 | }, 58 | "devDependencies": { 59 | "babel-core": "^6.7.4", 60 | "babel-plugin-transform-es2015-modules-commonjs": "^6.7.0", 61 | "babel-preset-es2015": "^6.6.0", 62 | "gulp": "^3.9.1", 63 | "jspm": "^0.16.31", 64 | "nodemon": "^1.9.1", 65 | "typescript": "^1.8.9", 66 | "modern-web-dev-build": "^0.5.3", 67 | "jasmine-core": "^2.4.1", 68 | "karma-jasmine": "^0.3.8", 69 | "typings": "^0.7.9" 70 | }, 71 | "engines": { 72 | "node": ">=4.2.6", 73 | "npm": ">=3.7.1" 74 | }, 75 | "scripts": { 76 | "tsc": "tsc", 77 | "typings": "typings", 78 | "clean": "gulp clean", 79 | "build": "gulp", 80 | "pretest": "gulp prepare-test-unit", 81 | "test": "gulp test-unit", 82 | "start": "npm run serve", 83 | "serve": "nodemon --watch gulpfile.js --watch gulpfile.babel.js --watch package.json --watch .jshintrc --watch .jscsrc --watch tsconfig.json --watch tslint.json --watch jspm.conf.js --exec gulp serve", 84 | "serve-dist": "nodemon --watch gulpfile.js --watch gulpfile.babel.js --watch package.json --watch .jshintrc --watch .jscsrc --watch tsconfig.json --watch tslint.json --watch jspm.conf.js --exec gulp serve-dist", 85 | "update": "npm install --no-optional && jspm update && jspm dl-loader && npm run typings-install", 86 | "outdated": "npm outdated", 87 | "help": "gulp help", 88 | "typings-install": "typings install", 89 | "setup": "npm install --no-optional && jspm install && jspm dl-loader && npm run typings-install" 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /gulp/config.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import utils from "./utils"; 4 | 5 | const extensions = { 6 | javascript: ".js", 7 | es2015: ".es2015" 8 | }; 9 | 10 | const folders = { 11 | root: ".", 12 | dist: "./app", 13 | src: "./app", 14 | templates: "./app/templates", 15 | srcPkg: "./gulp", 16 | nodeModules: "./node_modules" 17 | }; 18 | 19 | const globs = { 20 | any: "/**/*", 21 | scripts: { 22 | javascript: "/**/*" + extensions.javascript 23 | } 24 | }; 25 | 26 | const files = { 27 | any: "*", 28 | packageJSON: folders.root + "/package.json", 29 | gulpfile: folders.root + "/gulpfile.babel.js", 30 | yeomanGenerator: folders.src + "/index.js" 31 | }; 32 | 33 | const javascript = { 34 | src: [ 35 | folders.src + globs.scripts.javascript, 36 | utils.exclude(folders.templates + globs.scripts.javascript) 37 | ], 38 | srcPkg: [ 39 | folders.src + globs.scripts.javascript, 40 | files.gulpfile, 41 | folders.srcPkg + globs.scripts.javascript, 42 | utils.exclude(folders.templates + globs.scripts.javascript) 43 | ], 44 | dest: folders.dist 45 | }; 46 | 47 | export default { 48 | extensions, 49 | folders, 50 | globs, 51 | files, 52 | javascript 53 | }; 54 | -------------------------------------------------------------------------------- /gulp/tasks/check-js-quality.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import gulp from "gulp"; 4 | import help from "gulp-help"; 5 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 6 | import jshint from "gulp-jshint"; 7 | //import debug from "gulp-debug"; 8 | 9 | import config from "../config"; 10 | import utils from "../utils"; 11 | 12 | gulp.task("check-js-quality", "Check JavaScript code quality using JSHint", () =>{ 13 | return utils.plumbedSrc(// handle errors nicely (i.e., without breaking watch) 14 | config.javascript.srcPkg 15 | ) 16 | 17 | // Display the files in the stream 18 | //.pipe(debug({title: "Stream contents:", minimal: true})) 19 | 20 | // Run JSHint 21 | .pipe(jshint()) 22 | 23 | // Generate a stylish report 24 | .pipe(jshint.reporter("jshint-stylish")); 25 | 26 | // Fail the build only if BrowserSync is not active 27 | // Actually, failing the build is counter-productive thus evil 28 | //.pipe($.if(!browserSync.active, $.jshint.reporter("fail"))); 29 | }); 30 | -------------------------------------------------------------------------------- /gulp/tasks/check-js-style.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import gulp from "gulp"; 4 | import help from "gulp-help"; 5 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 6 | import jscs from "gulp-jscs"; 7 | import jscsStylish from "gulp-jscs-stylish"; 8 | import size from "gulp-size"; 9 | //import debug from "gulp-debug"; 10 | 11 | import config from "../config"; 12 | import utils from "../utils"; 13 | 14 | gulp.task("check-js-style", "Enforce JavaScript code style", () =>{ 15 | // handle errors nicely (i.e., without breaking watch) 16 | return utils.plumbedSrc( 17 | config.javascript.srcPkg 18 | ) 19 | 20 | // Display the files in the stream 21 | //.pipe(debug({title: "Stream contents:", minimal: true})) 22 | 23 | // Check JS code style (uses .jscsrc) 24 | .pipe( 25 | jscs({ 26 | configPath: config.folders.root + "/.jscsrc", // required otherwise the configuration didn't seem to get loaded 27 | esnext: true, // seems broken: https://github.com/jscs-dev/gulp-jscs/issues/69 28 | fix: false 29 | }) 30 | ) 31 | 32 | //.pipe(debug({title: "Stream contents:", minimal: true})) 33 | 34 | .pipe(jscsStylish()) // log style errors 35 | 36 | // Task result 37 | .pipe(size({ 38 | title: "check-js-style" 39 | })); 40 | }); 41 | -------------------------------------------------------------------------------- /gulp/tasks/clean.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import gulp from "gulp"; 4 | import help from "gulp-help"; 5 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 6 | import del from "del"; 7 | 8 | import config from "../config"; 9 | 10 | gulp.task("clean", "Clean", () =>{ 11 | del([ 12 | config.files.yeomanGenerator 13 | ], { 14 | dot: true 15 | } 16 | ); 17 | }); 18 | -------------------------------------------------------------------------------- /gulp/tasks/scripts-javascript-dist.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import gulp from "gulp"; 4 | import help from "gulp-help"; 5 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 6 | //import changed from "gulp-changed"; 7 | import babel from "gulp-babel"; 8 | //import iff from "gulp-if"; 9 | import size from "gulp-size"; 10 | import rename from "gulp-rename"; 11 | //import debug from "gulp-debug"; 12 | 13 | import config from "../config"; 14 | import utils from "../utils"; 15 | 16 | gulp.task("scripts-javascript-dist", "Transpile JavaScript (ES2015 to ES5 using Babel)", () =>{ 17 | return utils.plumbedSrc(// handle errors nicely (i.e., without breaking watch) 18 | config.javascript.src 19 | ) 20 | 21 | // Display the files in the stream 22 | //.pipe(debug({title: "Stream contents:", minimal: true})) 23 | 24 | // Transpile ES2015 to ES5 25 | // options: https://babeljs.io/docs/usage/options/ 26 | .pipe(babel()) 27 | 28 | // Display the files in the stream 29 | //.pipe(debug({title: "Stream contents:", minimal: true})) 30 | 31 | // Remove the es2015 extension 32 | .pipe(rename((path) =>{ 33 | path.basename = path.basename.replace(config.extensions.es2015, ""); 34 | })) 35 | 36 | // Display the files in the stream 37 | //.pipe(debug({title: "Stream contents:", minimal: true})) 38 | 39 | // Copy files 40 | .pipe(gulp.dest(config.javascript.dest)) 41 | 42 | // Task result 43 | .pipe(size({ 44 | title: "scripts-javascript" 45 | })); 46 | }); 47 | -------------------------------------------------------------------------------- /gulp/tasks/validate-package-json.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import gulp from "gulp"; 4 | import help from "gulp-help"; 5 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 6 | import packageJsonValidator from "gulp-nice-package"; 7 | 8 | import config from "../config"; 9 | import utils from "../utils"; 10 | 11 | gulp.task("validate-package-json", "Validate the package.json file", () =>{ 12 | return utils.plumbedSrc(config.files.packageJSON) 13 | .pipe(packageJsonValidator()); 14 | }); 15 | -------------------------------------------------------------------------------- /gulp/utils.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | // Include Gulp & tools we"ll use 4 | import gulp from "gulp"; 5 | import notify from "gulp-notify"; 6 | import gutil from "gulp-util"; 7 | import plumber from "gulp-plumber"; 8 | 9 | const exitOnError = false; // whether we should make the house explode whenever errors occur (e.g., stop gulp serve) 10 | 11 | // display errors nicely and avoid having errors breaking tasks/watch 12 | // reference: https://github.com/mikaelbr/gulp-notify/issues/81 13 | const reportError = function(error){ 14 | const lineNumber = error.lineNumber ? "LINE " + error.lineNumber + " -- " : ""; 15 | 16 | notify({ 17 | title: "Task Failed [" + error.plugin + "]", 18 | message: lineNumber + "See console.", 19 | sound: true 20 | 21 | // the version below probably works on OSX 22 | //sound: "Sosumi" // See: https://github.com/mikaelbr/node-notifier#all-notification-options-with-their-defaults 23 | }).write(error); 24 | 25 | //gutil.beep(); // Beep "sosumi" again 26 | 27 | // Inspect the error object 28 | //gutil.log(error); 29 | 30 | // Easy error reporting 31 | //console.log(error.toString()); 32 | 33 | // Pretty error reporting 34 | let report = ""; 35 | const chalk = gutil.colors.white.bgRed; 36 | 37 | report += chalk("TASK:") + " [" + error.plugin + "]\n"; 38 | report += chalk("ISSUE:") + " " + error.message + "\n"; 39 | 40 | if(error.lineNumber){ 41 | report += chalk("LINE:") + " " + error.lineNumber + "\n"; 42 | } 43 | 44 | if(error.fileName){ 45 | report += chalk("FILE:") + " " + error.fileName + "\n"; 46 | } 47 | 48 | console.error(report); 49 | 50 | if(exitOnError){ 51 | process.exit(1); // jshint ignore:line 52 | } else{ 53 | // Prevent the "watch" task from stopping 54 | this.emit("end"); 55 | } 56 | }; 57 | 58 | // easily integrate plumber invocation 59 | // reference: https://gist.github.com/floatdrop/8269868 60 | const plumbedSrc = function(){ 61 | return gulp.src.apply(gulp, arguments) 62 | .pipe(plumber({ 63 | errorHandler: reportError 64 | })); 65 | }; 66 | 67 | // utility function to exclude files from globs 68 | const exclude = function(providedPath){ 69 | return "!" + providedPath; 70 | }; 71 | 72 | // utility function that filters out empty directories 73 | // reference: http://stackoverflow.com/questions/23719731/gulp-copying-empty-directories 74 | const filterEmptyDirectories = function(es){ 75 | return es.map((file, cb) =>{ 76 | if(file.stat.isFile()){ 77 | return cb(null, file); 78 | } else{ 79 | return cb(); 80 | } 81 | }); 82 | }; 83 | 84 | export default { 85 | exclude, 86 | reportError, 87 | plumbedSrc, 88 | filterEmptyDirectories 89 | }; 90 | -------------------------------------------------------------------------------- /gulpfile.babel.js: -------------------------------------------------------------------------------- 1 | /* Rather than manage one giant configuration file responsible 2 | for creating multiple gulp tasks, each task has been broken out into 3 | its own file. Any files in that directory get automatically required below. 4 | 5 | To add a new task, simply add a new task file that directory. 6 | gulp/tasks/default.js specifies the default set of tasks to run 7 | when you run `gulp`. 8 | 9 | Principle taken from gulp-starter: https://github.com/greypants/gulp-starter 10 | */ 11 | "use strict"; 12 | 13 | let gulp = require("gulp"); 14 | let help = require("gulp-help"); 15 | 16 | help(gulp); // provide help through "gulp help" -- the help text is the second gulp task argument (https://www.npmjs.com/package/gulp-help/) 17 | 18 | import requireDir from "require-dir"; 19 | import runSequence from "run-sequence"; 20 | 21 | // Load all tasks in gulp/tasks, including sub-folders 22 | requireDir("./gulp/tasks", { 23 | recurse: true 24 | }); 25 | 26 | // Default task 27 | gulp.task("default", "Build production files", () =>{ 28 | return runSequence([ 29 | "check-js-style", 30 | "check-js-quality", 31 | "scripts-javascript-dist", 32 | "validate-package-json" 33 | ]); 34 | }); 35 | 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "generator-modern-web-dev", 3 | "version": "0.5.5", 4 | "description": "Modern Web Development Yeoman Generator: Gulp, ES2015, TypeScript, Angular 2, SASS, Minification, Bundling, Sourcemaps, ...", 5 | "author": { 6 | "name": "Sebastien Dubois", 7 | "email": "seb@dsebastien.net", 8 | "url": "https://www.dsebastien.net/" 9 | }, 10 | "contributors": [], 11 | "homepage": "https://npmjs.com/package/generator-modern-web-dev", 12 | "private": false, 13 | "license": "MIT", 14 | "bugs": "https://github.com/dsebastien/modernWebDevGenerator/issues", 15 | "repository": { 16 | "type": "git", 17 | "url": "git@github.com:dsebastien/modernWebDevGenerator.git" 18 | }, 19 | "keywords": [ 20 | "yeoman-generator", 21 | "yeoman", 22 | "generator", 23 | "web", 24 | "frontend", 25 | "gulp", 26 | "html5", 27 | "typescript", 28 | "es6", 29 | "es2015", 30 | "es2016", 31 | "angular", 32 | "angular2", 33 | "angular 2", 34 | "sass", 35 | "boilerplate", 36 | "create", 37 | "init" 38 | ], 39 | "dependencies": { 40 | "yeoman-generator": "^0.23.0", 41 | "yosay": "^1.1.0", 42 | "chalk": "^1.1.3", 43 | "babel-runtime": "^6.6.1", 44 | "update-notifier": "^0.7.0", 45 | "string-length": "^1.0.1" 46 | }, 47 | "devDependencies": { 48 | "yeoman-assert": "^2.1.1", 49 | "yeoman-test": "^1.1.0", 50 | "babel-core": "^6.7.4", 51 | "babel-plugin-transform-es2015-modules-commonjs": "^6.7.0", 52 | "babel-preset-es2015": "^6.6.0", 53 | "del": "^2.2.0", 54 | "gulp": "^3.9.1", 55 | "gulp-babel": "^6.1.2", 56 | "gulp-changed": "^1.3.0", 57 | "gulp-debug": "^2.1.2", 58 | "gulp-help": "^1.6.1", 59 | "gulp-if": "^2.0.0", 60 | "gulp-jscs": "^3.0.2", 61 | "gulp-jscs-stylish": "^1.3.0", 62 | "jshint": "^2.9.1", 63 | "gulp-jshint": "^2.0.0", 64 | "gulp-nice-package": "^1.1.0", 65 | "gulp-notify": "^2.2.0", 66 | "gulp-plumber": "^1.1.0", 67 | "gulp-rename": "^1.2.2", 68 | "gulp-size": "^2.1.0", 69 | "gulp-util": "^3.0.7", 70 | "jshint-stylish": "^2.1.0", 71 | "mocha": "^2.4.5", 72 | "require-dir": "^0.3.0", 73 | "run-sequence": "^1.1.5" 74 | }, 75 | "main": "app/index.js", 76 | "files": [ 77 | "app" 78 | ], 79 | "directories": { 80 | "lib": "./app" 81 | }, 82 | "engines": { 83 | "node": ">=4.2.6", 84 | "npm": ">=3.7.3" 85 | }, 86 | "scripts": { 87 | "clean": "gulp clean", 88 | "gulp": "gulp -- ", 89 | "prebuild": "gulp clean", 90 | "build": "gulp", 91 | "pretest": "npm run build", 92 | "test": "mocha", 93 | "update": "npm install --no-optional", 94 | "outdated": "npm outdated", 95 | "help": "gulp help", 96 | "setup": "npm install --no-optional", 97 | "prepublish": "npm test && npm run build" 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /test/test-app.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | const path = require("path"); 4 | 5 | const assert = require('yeoman-assert'); 6 | const helpers = require('yeoman-test'); 7 | 8 | describe("modern-web-dev:app", () =>{ 9 | before((done) =>{ 10 | helpers.run(path.join(__dirname, "../app")) // jshint ignore:line 11 | .withOptions({ 12 | skipInstall: true 13 | }) 14 | .withPrompts( 15 | { 16 | someOption: true 17 | }) 18 | .on("end", done); 19 | 20 | //.withOptions({ foo: 'bar' }) // Mock options passed in 21 | //.withArguments(['name-x']) // Mock the arguments 22 | //.withPrompts({ coffee: false }) // Mock the prompt answers 23 | }); 24 | 25 | it("creates files", () =>{ 26 | assert.file([ 27 | "package.json", 28 | ".jshintrc", 29 | ".jshintignore", 30 | ".jscsrc", 31 | ".gitignore", 32 | "gulpfile.babel.js", 33 | "jspm.conf.js", 34 | "tsconfig.json", 35 | "tslint.json" 36 | ]); 37 | }); 38 | }); 39 | --------------------------------------------------------------------------------