├── .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 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
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 | [](https://www.npmjs.com/package/generator-modern-web-dev)
4 | [](https://www.npmjs.com/package/generator-modern-web-dev)
5 | [](https://travis-ci.org/dsebastien/modernWebDevGenerator)
6 | [](
9 | https://coveralls.io/github/dsebastien/modernWebDevGenerator?branch=master
10 | )
11 | [](https://david-dm.org/dsebastien/modernWebDevGenerator)
12 | [](https://david-dm.org/dsebastien/modernWebDevGenerator#info=devDependencies)
13 | [](https://gitter.im/dsebastien/modernWebDevGenerator?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
14 | [](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 |
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 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
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 |
--------------------------------------------------------------------------------